我针对 36 个热门 MCP 服务器的智能体易用性进行了评分,其中三分之一不及格(D 或 F)。
I graded 36 popular MCP servers on agent usability. A third got a D or F

原始链接: https://tengli.dev/posts/mcp-servers-failing-agents.html

模型上下文协议(MCP)确保了技术兼容性,但许多服务器由于文档和架构设计糟糕,对 AI 智能体而言仍然不可用。即使是符合规范的服务器,也经常会导致智能体出现幻觉、误解参数或选择错误的工具。 作者推出了 **mcpgrade**,这是一个命令行工具,旨在从“智能体可用性”而非仅仅是协议合规性层面来评估 MCP 服务器。通过对 36 个热门服务器的分析,研究揭示了“未记录参数流行病”——许多开发者依赖 Zod 或 OpenAPI 自动生成的架构,却未添加描述性元数据。这种上下文的缺失迫使模型去猜测参数,从而显著降低了准确性。 主要发现包括: * **文档是瓶颈:** 文档完善的大型目录表现优于文档匮乏的小型目录。 * **静态检查可预测失败:** 缺乏描述的服务器在工具选择时错误率更高,且关键在于,它们无法拒绝超出范围的任务。 * **可用性是一个写作问题:** 质量源于清晰明确的描述、严格的命名规范以及对枚举的正确使用。 作者认为,虽然协议合规性很容易做到,但智能体的可靠性需要严谨的人工介入式文档。鼓励开发者使用 `mcpgrade` 来识别并修复其工具集中的这些缺陷。

```Hacker News 新闻 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 我对 36 个热门 MCP 服务器的智能体易用性进行了评分。三分之一不及格(tengli.dev)9 分,作者 tengbyte,3 小时前 | 隐藏 | 过往 | 收藏 | 1 条评论 帮助 codeonline 11 分钟前 | 下一条 [–] 有点讽刺的是,你结果表格的链接失效了 回复 考虑申请 YC 2026 年秋季批次!申请截止日期为 7 月 27 日。 准则 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索: ```
相关文章

原文

Your MCP server can be 100% spec-compliant and still be unusable by an agent.

The Model Context Protocol spec tells you how to transport tools: JSON-RPC framing, capability negotiation, schema shapes. It says nothing about whether a model can actually use what you serve — whether it picks the right tool out of your catalog, fills the arguments correctly, or burns 8k tokens parsing your schemas on every single request.

I integrate first- and third-party MCP connectors into a production AI agent for a living, and I kept seeing the same failure: servers that pass every compliance check, yet the model calls the wrong tool, hallucinates arguments, or ignores the tool entirely. The problems were never in the protocol layer. They were in the parts no one lints: descriptions, naming, schema design.

So I wrote mcpgrade — a Lighthouse-style scorecard for MCP servers. One command, no API key, report in seconds:

npx mcpgrade --stdio "npx -y your-mcp-server"

Then I pointed it at 36 popular servers. It did not go great.

The results

Full sortable table: [https://tengli.dev/mcp-leaderboard.html]. The short version (static analysis, point-in-time snapshot; servers marked (archived) are unmaintained reference implementations, included because they're still widely installed and copied):

Top of the class (A): brave-search (archived), exa, google-maps (archived), slack (archived), perplexity-ask, @shopify/dev-mcp, @apify/actors-mcp-server, airbnb, figma-developer-mcp, tavily, gitlab (archived), elastic, shrimp-task-manager, and more — 15 of 36.

Bottom of the class (D/F), 11 of 36 — and it's not hobby projects: MongoDB's official server (66, with 66 errors), Notion's official server (62), Airtable (69, 66 errors), todoist-mcp-server (67, 110 errors), GitHub's archived reference server (67, 44 errors), and firecrawl-mcp at the very bottom (57, 134 errors).

Two more servers (Stripe, Supabase) couldn't be scanned with dummy credentials and were excluded rather than graded.

Finding 1: the ecosystem has an undocumented-parameter epidemic

Almost every D/F server has a descriptions score of zero while its schema, naming, and token scores are fine. One rule dominates: D004 — parameter has no description.

firecrawl: 132 of its 134 errors are undocumented parameters. url, formats, jsonOptions — the model gets a name and a type, nothing else. todoist: 110. MongoDB and Airtable: 66 each.

The root cause is visible in the source of nearly all of them: schemas are generated from zod or OpenAPI definitions, and nobody adds .describe(). The type system knows url: string. The model needs to know which URL, in what format, with what constraints. Your schema generator is quietly stripping the single most important signal your tools have.

If you take one thing from this post: open your server, count the parameters without a description, and fix them. It's the highest-leverage hour you can spend on agent reliability.

Finding 2: it's documentation discipline, not catalog size — but size makes discipline harder

My first pass at this data suggested "small catalogs win": most 95+ scorers have few tools, and the 24–26 tool servers cluster at D/F. Then shrimp-task-manager scored A/96 with 15 tools — carefully documented, tightly named, every description distinct.

So the honest version: well-documented big catalogs are possible; they're just rare. Every tool you add is another description to write, another name that can collide, another schema to keep tight. Discipline doesn't scale by default. (Size still taxes you either way: the full catalog is serialized into every request.)

Finding 3: compliance and usability are different axes

The most-updated servers aren't the most usable ones. The archived Slack reference server — code nobody maintains — scores A/97, because someone once documented every tool and every parameter by hand. Meanwhile several actively-developed commercial servers ship parameters with no descriptions at all.

Agent usability is a writing problem more than an engineering problem. Compliance checkers can't measure it. That's the gap mcpgrade fills.

(One hopeful counterpoint: while writing this, context7 shipped a new version that fixed all its missing parameter descriptions — jumping from C to a perfect static score. The ecosystem can move fast when the gap is visible.)

Finding 4: I checked the static scores against a real model. The scary number is refusal.

Static lint is a proxy, so I built --eval: it synthesizes realistic single-step tasks (each embedding concrete values for every required parameter), shows a model the full catalog, and measures whether it picks the right tool and fills valid arguments. Calibration details and methodology: docs/eval-calibration.md. Cost: pennies per server on a small model.

Two results worth your attention:

Static findings predict live confusion. On well-documented servers, tool-selection accuracy was 100%. On firecrawl it dropped to 84% — and the misses land exactly on the naming collisions static rules flag: extractscrape, agent_statuscheck_crawl_status, feedbacksearch_feedback.

Big fuzzy catalogs break refusal. Given deliberately out-of-scope tasks, the model correctly declined 100% of the time on small, well-documented catalogs — but only 50% of the time on firecrawl's 26 fuzzy tools. Half the time it "found" a plausible tool and called it. In production, that's an agent doing something when it should do nothing — arguably the most dangerous failure mode there is.

What "good" looks like

From the top scorers, a checklist:

  • Every tool description answers three questions: what it does, when to use it, what it returns.
  • Every parameter has a description with format and one example value.
  • Fixed value sets live in enum, not in prose.
  • required is declared explicitly — even when it's empty.
  • One naming convention, verb_object style, no generic verbs, no near-twin names.
  • Errors name the missing/invalid parameter so the model can self-correct in one turn.

Try it on your server

npx mcpgrade --stdio "node ./my-server.js"   # local stdio
npx mcpgrade https://my-server.example/mcp    # streamable HTTP
npx mcpgrade <target> --fail-on error         # CI gate
npx mcpgrade <target> --eval                  # live model test (BYO key; any OpenAI-compatible endpoint works)

24 rules, each with a concrete fix and a rationale you're welcome to dispute in the issues — the ruleset is opinionated by design, and I'd rather have the argument in public. (How this differs from mcp-lint and other MCP QA tools — with side-by-side outputs: docs/comparison.md.)

If you maintain one of the servers above and fix your score, open a rescan issue — I'll happily re-run and update the table. PRs to your own servers beat arguments with my ruleset.


I build production AI agent integrations at a large tech company; mcpgrade is a personal project and reflects scars from integrating dozens of MCP connectors. No affiliation with any server ranked above.


← All writing

联系我们 contact @ memedata.com