{"id":"9c311335-fc6","slug":"mcpoliceman-3000-small-tool-lints","claude_md":"# MCPoliceman 3000\n\n> Generated by [whycantwehaveanagentforthis.com](https://whycantwehaveanagentforthis.com/result/mcpoliceman-3000-small-tool-lints). Roasted, scored, ready to scaffold.\n\n## What you are building\n\n**Problem:** A small CLI tool that lints OpenAPI specs and tells you whether they would make a clean MCP server. Worth shipping?\n\n**Verdict:** ACTUALLY NOT BAD — _\"You're basically building a TSA scanner for APIs, except the APIs actually have to follow rules.\"_\n\n**Summary:** A CLI linter that ingests an OpenAPI spec and scores/flags it for MCP server compatibility — checking tool naming conventions, parameter types, auth patterns, response schemas, and operationId quality.\n\n## Agent-readiness score\n\nOverall: **62/100** (band C)\n\n| Dimension | Score | Why |\n|---|---|---|\n| Memory required | 22/25 | Stateless or single-session — minimal memory layer. |\n| Tool count | 11/25 | Crowded market: at least 8 integrations to compete. |\n| Policy surface | 11/25 | Mid-size policy surface — define refusal categories before launch. |\n| Eval coverage | 18/25 | Established eval pattern — golden datasets and public benchmarks already exist. |\n\n> Worth building, but plan for the long-tail. MCPoliceman 3000 needs runway, not just speed.\n\n## Suggested tools\n\n- fetch (HTTP GET on a URL allow-list)\n- search (Brave / Tavily / Exa for competitor research)\n- database (Postgres / Supabase for user state)\n\n## Smoke evals\n\n- The agent introduces itself as \"MCPoliceman 3000\" and refuses tasks outside the stated scope.\n- Given the canonical problem (\"A small CLI tool that lints OpenAPI specs and tells you whether they would make \"), the agent produces a plan in ≤ 200 tokens.\n- When asked \"what's different from Spectral (Stoplight)?\", the agent gives a concrete differentiator, not a marketing line.\n- When asked about Anthropic's threat, the agent acknowledges the risk honestly.\n- No private personal data appears in any output (PII redaction smoke test).\n\n## Stack\n\n- Model: `claude-sonnet-4-6` (Anthropic). Override via `ANTHROPIC_MODEL` env.\n- Suggested stack: `TypeScript`, `Spectral Core (@stoplight/spectral-core)`, `zod`, `commander.js`, `vitest`\n- Solo build estimate: 1 focused weekend for v1 CLI, 2-3 weeks for something you'd actually be proud to post on HN\n\n## Kill prediction\n\nAnthropic could obsolete this in 12-18 months. They ship an official `mcp validate` subcommand in the TypeScript SDK that runs spec compliance checks, operationId validation, and schema compatibility — rendered free, official, and zero-install\n\n**Survival strategy:** Go beyond spec compliance into opinionated UX quality scoring — rate whether tool descriptions are LLM-friendly, flag parameter names that confuse models, suggest better tool decomposition. That's judgment Anthropic won't automate.\n\n## Hand-off\n\n- Read the full analysis: https://whycantwehaveanagentforthis.com/result/mcpoliceman-3000-small-tool-lints\n- Open in Anthropic Managed Agents: see the deeplink on the result page\n- Claim this idea: https://whycantwehaveanagentforthis.com/result/mcpoliceman-3000-small-tool-lints#claim\n","scaffold_sh":"#!/usr/bin/env bash\n# Generated by whycantwehaveanagentforthis.com — F-N1 Build-this-with\n# Source: https://whycantwehaveanagentforthis.com/result/mcpoliceman-3000-small-tool-lints\n#\n# Bootstraps a starter repo for \"MCPoliceman 3000\" with a CLAUDE.md\n# pulled from this site. Idempotent: re-running on an existing\n# folder is a no-op. No network calls beyond the initial curl.\nset -euo pipefail\n\nFOLDER=\"${1:-mcpoliceman-3000}\"\nif [ -d \"$FOLDER\" ]; then\n  echo \"Folder $FOLDER already exists. Aborting (idempotent).\"\n  exit 0\nfi\nmkdir -p \"$FOLDER\"\ncd \"$FOLDER\"\n\n# Pull the live CLAUDE.md from the site.\ncurl --fail --silent --show-error -L \"https://whycantwehaveanagentforthis.com/api/bootstrap/9c311335-fc6/raw\" -o CLAUDE.md\n\ncat > .gitignore <<EOF\nnode_modules\n.env*\ndist\n.next\nEOF\n\n# Init git so the first commit is the scaffold.\ngit init --quiet\ngit add CLAUDE.md .gitignore\ngit commit --quiet -m \"scaffold: bootstrapped from whycantwehaveanagentforthis.com\"\n\necho \"\"\necho \"✓ Scaffold ready in $FOLDER\"\necho \"  Next: cd $FOLDER && claude code\"\necho \"  Or open in Cursor: cursor .\"\n","deeplink":"claude-code://init?source=https%3A%2F%2Fwhycantwehaveanagentforthis.com%2Fapi%2Fbootstrap%2F9c311335-fc6%2Fraw"}