Local MCP server for dynamic analysis tools (like Valgrind Memcheck, AddressSanitizer, etc.)
Server has 12 tools with complete input schemas derived from Pydantic models and descriptions present for all tools. However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool vs. alternatives. Parameter descriptions exist but are minimal (avg ~30 chars, well below the 72-char baseline). Output schemas are not documented, LLMs cannot predict what fields to expect from responses. Error handling is present but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Tool naming is generally good (verb_noun pattern), but composition could be tighter, run_binary duplicates asan_run/lsan_run functionality.
Create a presigned upload URL for R2.
Run an AddressSanitizer-instrumented binary and parse findings.
Build a target project inside the dynamic-analysis environment before runtime validation.
List stored dynamic analysis runs with optional tool, status, and label filters.
Generic dynamic binary execution entrypoint for supported analyzers.
Run a LeakSanitizer/ASan-instrumented binary with leak detection enabled and parse findings.
Convert a stored normalized run report into leak-centric bundles for the orchestrator.
Run Valgrind Memcheck and return a normalized summary.
Output schemas not documented. LLMs cannot predict response structure, forcing them to guess what fields are available for downstream tool calls. Breaks tool chaining.
Tool descriptions are generic and lack LLM-optimized guidance. Missing WHEN to use each tool, prerequisites, and how it differs from similar tools. Avg description ~50 chars vs. 194-char baseline.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (WRITE vs READ_ONLY). Agents cannot determine which tools are safe to retry.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | <=2025-11-25 | v2 |
Compare two runs and classify findings.
Fetch raw artifact content for a run.
Get full normalized report for a run.
List findings with optional filters.
Functional overlap: run_binary accepts 'analyzer' param and duplicates asan_run/lsan_run. LLMs will waste reasoning cycles choosing between them. Consolidate or clearly document when to use each.
Parameter descriptions are minimal (~30 chars avg). Missing format constraints, ranges, and dependency hints. E.g., 'timeout_sec' lacks min/max; 'analyzer' in run_binary lacks enum of valid values.