MCP server exposing a Python project's verified call graph to agents through three tools: lexical search, context packs, and impact analysis
PyVisualizer exposes three tools through fastmcp with clear purposes (search_code, context_pack, impact). All three have explicit descriptions and input schemas visible in mcp_server.py. However, there are significant gaps: (1) descriptions lack actionable guidance on WHEN to use each tool vs alternatives, (2) parameters lack descriptions for some fields and no enum constraints are present, (3) output schemas are not documented in the tool definitions themselves, (4) no error handling guidance or recovery instructions are provided. The tool names follow verb_noun pattern and are reasonably distinct. This is a moderately competent implementation that would benefit from richer parameter documentation and output schema clarity.
Verified, budget-bounded context pack for a coding task. Pass `task` (natural-language description of what you're about to do) and/or `focus` (comma-separated function/class/file names). Returns AST-verified call edges with file:line provenance, plus full source for the top-ranked functions. strategy: graph|text|hybrid (default hybrid for tasks).
Blast radius of one function/method: who calls it (direct and transitive), what it calls, and which modules are affected. Use before changing a function to see what could break.
Search this Python project's functions lexically (names + source). Use this first to find where something lives. Returns up to k functions as `qualified.name — file:line (score)`.
Output schemas not documented. Tool definitions show input schemas but do not specify what fields or structure will be returned. LLMs cannot plan downstream operations or extract required IDs without knowing the response shape.
Parameter descriptions incomplete or missing rationale. 'k' in search_code has a description, but context_pack's 'strategy' parameter description is empty (defaults to hybrid but why? when to pick graph vs text?). Missing guidance on parameter relationships and when to use which value.
No enum constraints or validation guidance. The 'strategy' parameter in context_pack accepts 'graph|text|hybrid' but this is documented only as a string with default, not as an enum. LLMs will not reliably pick valid options without explicit constraints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
No error handling guidance. Tools do not document what happens on failure (e.g., invalid symbol name in 'impact', nonexistent project, AST parse errors). No recovery instructions or actionable error messages specified.
Weak contextual descriptions for tool selection. Descriptions explain WHAT each tool does but not WHEN to use it or why it is better than alternatives. An LLM faced with three tools for code analysis needs clearer disambiguation guidance.
Missing parameter relationships. context_pack accepts both 'task' and 'focus' with defaults, but there is no guidance on when to pass both, which is primary, or how they interact. Undocumented dependencies invite misuse.