{
  "id": 7058820,
  "title": "I tested 31 MCP servers for contract compliance. Only 3% passed.",
  "url": "https://urgent.news/2026/09/13/i-tested-31-mcp-servers-for-contract-compliance-only-3-passed",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-13T04:25:02.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/tim860/i-tested-31-mcp-servers-for-contract-compliance-only-3-passed-25gp"
  },
  "original_language": "en",
  "account": "I tested 31 popular MCP servers for contract compliance and found that only 3% of them enforce a proper schema that would reject a corrupted response. The remaining 56% of servers do not declare any schema at all, while the other 42% declare a schema that happily validates garbage results. This means that an agent cannot differentiate between a good or bad result when interacting with these servers. The study, conducted using the \"mcp-drill\" tool, revealed that the issue is not limited to a few servers but is widespread among popular MCP servers, including Microsoft Learn, Hugging Face, Cloudflare, and DeepWiki. The research highlights the importance of properly enforced schemas in ensuring the trustworthiness of results returned by MCP servers.",
  "summary": "MCP has outputSchema so agents can validate tool results. But does the schema actually reject a wrong answer? I built mcp-drill -- a fault-injection harness that speaks MCP -- and scanned 31 popular servers (265 tools) including Microsoft Learn, Hugging Face, Cloudflare, DeepWiki . Result: only 3% declare a contract that would reject a corrupted response. 56% declare nothing , 42% declare a…",
  "key_points": [
    "Only 3% of 31 MCP servers pass contract compliance test",
    "56% of servers lack any schema declaration",
    "42% of servers accept invalid results due to improper schema"
  ],
  "editors_take": "This widespread failure of MCP servers to enforce proper schemas undermines the trustworthiness of results returned by these servers, leaving agents unable to reliably distinguish between good and bad responses.",
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}