Codemod and compatibility-matrix tool for migrating MCP server repos across spec versions (2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25). Read-only detector + migration plan generator. CLI + MCP server.
Server has 6 tools with complete input schemas and descriptions. Tool names follow verb_noun convention (detect_, generate_, check_, list_, diff_). Descriptions are present but brief (avg ~50 chars, below the 194-char baseline). All tools are READ_ONLY with proper annotations. However, parameter descriptions lack detail on constraints, formats, and valid ranges. Output schemas are not documented in the visible code. Error handling and recovery guidance are absent. Tool composition is sound (each does one thing), but descriptions could better explain WHEN to use each tool vs. alternatives.
Verify a repo has completed migration to a target spec version.
Generate a compatibility matrix between two MCP spec versions.
Detect the MCP spec version of a repo.
Show the diff between two spec versions.
Generate a migration plan for a repo to a target spec version.
List all supported MCP spec versions.
Parameter descriptions lack constraint details. 'repo_path' and 'target_version' have minimal guidance on format, valid values, or error cases. LLMs cannot infer whether paths must be absolute, relative, or URLs.
Output schemas are not documented. Tools return structured content but LLMs have no schema reference for downstream tool chaining. E.g., what fields does generate_migration_plan.result contain?
Tool descriptions are too brief (avg 45 chars vs. 194-char baseline). They state WHAT but not WHEN to use or dependencies. E.g., 'Generate a compatibility matrix' does not explain when to call this vs. diff_spec_versions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2025-06-18+ | v2 |
No error handling or recovery guidance. If repo_path is invalid or target_version is unsupported, tools return errors with no actionable next steps for the LLM.
diff_spec_versions format parameter uses enum but lacks description of what 'markdown' vs 'json' output contains. LLMs cannot predict which format suits their downstream needs.