Reverse-engineer MCP server tool surfaces. Enumerate, fuzz, classify, report. CLI + library that discovers MCP tool surface and emits findings.
Two tools with complete schemas and descriptions, but both suffer from domain-specific naming that obscures intent for general LLM agents. 'classify_inventory' and 'caveats' are jargon-heavy and lack the verb_noun clarity pattern (e.g., 'analyze_mcp_security', 'generate_access_controls'). Descriptions are adequate (120-180 chars) but lack actionable context: no guidance on when to call each vs. the other, no examples of expected input structure, no explanation of output fields. Input schemas are present but minimal, only one required parameter (inventory object) with no type validation, format constraints, or nested field documentation. No output schema documented. Parameters lack descriptions of what 'inventory' should contain. Error handling not visible in tool definitions.
Turn an mcp-recon.inventory.v1 into an `mcp-recon/v0.1/caveats` artifact — capnagent-ready deny/scope plans with caveat-DSL predicates and rule provenance for every authority-relevant tool. The Find→Bind handoff.
Classify an mcp-recon.inventory.v1 document against deterministic, rule-based detectors (OWASP LLM Top 10 / NIST AI RMF / MITRE ATLAS). Same inventory in, same findings out — no LLM in the loop. Returns a findings.v1 array as JSON-encoded text.
Tool names use domain jargon ('classify_inventory', 'caveats') instead of action verbs. LLMs cannot infer intent from names alone. Should be 'analyze_mcp_security' or 'generate_access_controls'.
Input parameter 'inventory' lacks description. LLMs cannot determine what structure or fields this object must contain. No guidance on required vs. optional fields, nested schema, or format.
No output schema documented. LLMs cannot plan downstream actions or extract specific fields from results. Descriptions mention 'findings.v1 array' and 'caveats artifact' but no formal schema provided.
No distinction between tools in descriptions. Both accept 'inventory' and return JSON; LLMs cannot determine when to call classify_inventory vs. caveats without trial and error.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 42 | <=2025-11-25 | v2 |
No error handling guidance visible. If inventory is malformed or missing required fields, no recovery hints provided to LLM.