Testing framework for Model Context Protocol (MCP) servers - like Jest but for MCP
This is a testing framework (mcp-jest) for MCP servers, not itself an MCP server. The 17 'tools' listed are actually test definitions spread across example servers (e2e/test-server.js, examples/demo-server.js, tests/filter-test-server.js) used to validate the framework. The source code shows basic tool definitions with minimal descriptions and inconsistent schemas. Many tools lack detailed parameter descriptions, and the framework does not enforce schema quality on the servers it tests. As a framework, mcp-jest should document how to write high-quality tool definitions, but the examples provided are mediocre. The package.json indicates this is a test utility (type: 'module', main: dist/index.js, bin: mcp-jest CLI), not a production MCP server itself.
Perform mathematical calculations
Echo back the input
10 of 17 tools have NO descriptions or minimal descriptions (under 20 chars). Rule violation: description score must be 0 for missing descriptions.
Parameter descriptions are inconsistent or missing. Tools like getUser, updateUser, sendEmail, searchAdvanced do not document parameter meaning, constraints, or expected formats beyond basic type info.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Generate a greeting
Duplicate tool names across different test servers (calculate, echo, add, search appear 2-3 times each). This confuses tool discovery and violates the single-responsibility principle. Test examples should use unique names or be consolidated.
Output schemas are not documented for any tool. LLMs cannot plan downstream tool calls or extract structured data when return types are unknown.
No error handling guidance. Tools like calculate and updateUser can fail but do not document how to handle or recover from errors. Missing pattern: recovery-guide.
Tools like updateUser (WRITE), sendEmail (WRITE), and getEmails accept optional parameters but do not document dependencies or side effects. updateUser accepts userId + data object without explaining what fields are mutable or what happens on partial updates.
Parameter constraints are missing. Examples: add/search tools accept unbounded numbers/strings without min/max limits. searchAdvanced has an optional 'filters' object parameter with no schema or documentation of its structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools like updateUser and sendEmail should declare they are destructive/stateful, but no annotations are present in schema definitions.