The SaaS you pay for every month, checked against what an AI agent can do instead.
Honest verdicts. Copy-paste installs. What you actually give up.
| Directory | The question | Verdicts | Try it | |
|---|---|---|---|---|
| 🧠 | Skills | Can an Agent Skill (a SKILL.md) do the job? |
YES · KINDA · NOT REALLY |
isthereaskillforit…/grammarly |
| 🔌 | MCPs | Is there an MCP server so your agent can drive it? | OFFICIAL · COMMUNITY · NOT YET |
isthereanmcpforit…/github |
| 🧩 | Plugins | Can an agent plugin replace the workflow? | YES · KINDA · NOT REALLY |
isthereapluginforit…/coderabbit |
| ⌨️ | Prompts | Can one coding prompt rebuild it? | YES · KINDA · NOT REALLY |
isthereapromptforit…/calendly |
| 🤖 | Agents | Is there an AI agent that does the job? | YES · KINDA · NOT REALLY |
isthereanagentforit…/calendly |
Every entry comes with install commands for Claude Code, Codex and Cursor, the list of things you lose by switching, open-source prior art, and an "I replaced this" button that feeds the site's COLLECTIVE MRR DESTROYED ticker.
Short links:
is-there-a-<thing>-for-it.biratdatta.tech/<app>takes you straight to the answer.isthereanmcpforit.biratdatta.tech/notion→ the Notion MCP page.
|
For visitors
|
Under the hood
|
git clone https://github.com/biratdatta/isthere.git
cd isthere
npm install
npm run seed:demo # optional: sample votes so lists aren't empty
npm run dev # → http://localhost:4321Deploy your own copy
- Create a Cloudflare account and add your domain.
- Workers & Pages → Create → Import a repository, pick your fork.
Build command
npm run build, deploy commandnpx wrangler deploy. - Change the domain in
wrangler.jsonc,astro.config.mjs(site) andsrc/lib/seo.ts(SITE_HOST). - Short links (optional):
npx wrangler login, thennpm run deploy:shortlinks.
Every push to main redeploys. The database tables create themselves on first use.
Found a tool we're missing? Two ways in:
- No code: use the form at isthere.biratdatta.tech/submit.
- Pull request: add one JSON file to
data/<directory>/<app>.json. Same slug across directories means the pages link to each other.
The fields every entry has
{
"slug": "notion",
"name": "Notion",
"domain": "notion.so",
"category": "productivity",
"priceMonthly": 10,
"priceNote": "Plus, billed yearly",
"pricingUrl": "https://www.notion.com/pricing",
"verdict": "yes",
"whatYouLose": ["Be honest here. It's the point of the site."],
"priorArt": [{ "name": "AppFlowy", "url": "https://github.com/AppFlowy-IO/AppFlowy" }],
"notes": "One or two plain sentences."
}category must exist in src/lib/apps.ts. Use "priceMonthly": null for usage-based pricing and explain it in priceNote.
🧠 Skills: add a skill block
An existing skill from a marketplace:
"skill": {
"name": "pdf",
"sourceUrl": "https://github.com/anthropics/skills/tree/main/skills/pdf",
"marketplace": "anthropics/skills",
"plugin": "document-skills@anthropic-agent-skills"
}Or a skill you wrote, inline:
"skill": { "name": "copyedit", "sourceUrl": null, "skillMd": "---\nname: copyedit\ndescription: …\n---\n# Copyedit…" }🔌 MCPs: add server and tools
"server": {
"official": true,
"transport": "http",
"url": "https://mcp.notion.com/mcp",
"auth": "oauth",
"docsUrl": "https://developers.notion.com/guides/mcp/overview"
},
"tools": ["notion-search", "notion-fetch", "notion-create-pages"]Local servers use "transport": "stdio" with "command", "args" and optional "env": ["API_KEY"].
🧩 Plugins: add a plugin block
"plugin": {
"name": "code-review",
"marketplace": "anthropics/claude-plugins-official",
"marketplaceName": "claude-plugins-official",
"repoUrl": "https://github.com/anthropics/claude-plugins-official/tree/main/plugins/code-review",
"includes": ["/code-review command", "4 parallel review agents"]
}🤖 Agents: add an agent block
"agent": {
"name": "Howie",
"maker": "3030 Labs",
"url": "https://howie.com/",
"price": "Team from $25/mo",
"pricingUrl": "https://howie.com/#pricing",
"autonomy": "autonomous",
"does": ["Schedules meetings over email", "Follows up when people go quiet"]
}autonomy is autonomous (works on its own) or supervised (you review its work).
⌨️ Prompts: add the prompt
"prompt": "Build a self-hosted scheduling page, a Calendly replacement for one person.\n\nStack: …\nFeatures:\n- …\nDone when: …"Write it so an agent can finish in one session: stack, features, and a clear "done when".
Then check your file:
npm run check-data # validates every entry (also runs in CI)The install snippets for each agent are generated from your fields, so you never write them by hand.
data/
skills/ mcp/ plugins/ prompts/ agents/ one JSON file per app
src/
pages/ home, /[directory], /[directory]/[app], /submit, /advertise
components/ nav, tiles, Cancel Culture list, install tabs, ticker
lib/kinds.ts the five directories: words, verdict labels, colours
lib/installs.ts per-agent install commands
styles/global.css the whole design system
shortlinks/ redirect Worker for the isthere…forit subdomains
scripts/og.mjs social card generator
Reading form submissions
Submissions and ad requests are stored in the submissions and ad_requests tables.
Open them in the Cloudflare dashboard under Storage & databases → D1 → isthere, or:
npx wrangler d1 execute isthere --remote --command "SELECT * FROM submissions WHERE status = 'new' ORDER BY created_at DESC"Suggested free alternatives land in alt_suggestions, newsletter signups in waitlist:
npx wrangler d1 execute isthere --remote --command "SELECT app, name, url, description, github FROM alt_suggestions WHERE status = 'new'"Are the verdicts objective?
No. They're honest opinions with the trade-offs spelled out. Disagree? Open a PR with your reasoning.
Are prices up to date?
They're entry paid tiers at the time they were added and drift over time. Each entry links to the vendor's pricing page.
Do ads affect verdicts?
Never. Ads are one static image and a link in the page margins, clearly labelled.
MIT licensed · verdicts are opinions · trademarks belong to their owners
If this saved you a subscription, hit "I replaced this" and ⭐ the repo.