MCP helper layer that maximizes output quality from any model in agentic AI coding tools
Server exposes 9 tools with reasonable naming (verb-first: analyze_, decompose_, compile_, verify_, prune_, inject_, add_, search_, health_check). Descriptions are present and moderately detailed (avg ~150 chars), explaining WHAT and WHEN. However, input schemas lack formal type constraints (no enums for language/framework, no min/max for numeric params). Output schemas are documented in docstrings but not in JSON Schema format. Error handling guidance is minimal, tools return dicts but lack actionable recovery hints. Parameter descriptions exist but are sparse on format/constraint details. No tool annotations (readOnlyHint/destructiveHint) visible in code. Overall: solid foundation, but gaps in schema rigor and error guidance prevent higher scores.
add task/solution pair to few-shot cache
Analyze a task to determine complexity, routing, and strategy. Use this FIRST before executing any non-trivial coding task. Provides: complexity level, word count, matched signals, and a recommendation for how to proceed.
Build an optimized, structured prompt for any model. Applies: role anchoring, numbered constraints, explicit output schema, relevant few-shot examples from cache, and context injection. Dramatically improves instruction-following on smaller/cheaper models.
Break a complex task into atomic, independently-verifiable sub-tasks. Use when analyze_task returns complexity = "complex", or when a previous single-shot attempt failed to meet requirements. Each sub-task has: id, title, description, depends_on, verifier_hint. Execute sub-tasks in execution_order. Pass output of each as context to next.
verify server + all components are functional
Build a targeted reflection prompt after a verify_code failure. Manages reflection state per task. Enforces circuit breaker (max 2 reflection loops by default — configurable in config.yaml).
No enum constraints on language/framework parameters. Tools accept 'language' and 'framework' as free-form strings (e.g., compile_prompt, decompose_task, verify_code). LLMs will hallucinate unsupported values like 'rust' or 'django' instead of picking from known set. Should declare enums: language ∈ {python, typescript, javascript, go}, framework ∈ {fastapi, nextjs, ...}.
Output schemas documented only in docstrings, not in JSON Schema format. FastMCP likely infers schemas from return type hints, but no explicit schema definitions visible. Clients cannot validate responses or plan downstream tool calls with confidence. Should add explicit output_schema declarations or JSON Schema definitions.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | <=2025-11-25 | v2 |
Reduce a list of context chunks to only what's relevant to the current task. Use before injecting codebase context into a prompt. Prevents context overflow and reduces noise for smaller models.
semantic search few-shot cache
Run full 3-layer verification on code output. Layer 1 (Deterministic): syntax check, type checking (mypy/tsc), linting (ruff/eslint). Layer 2 (Test Runner): executes provided test code if given. Layer 3 (Semantic): returns a structured prompt for YOU (the agent) to evaluate correctness using your own reasoning — no external LLM call.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in code. add_example is marked WRITE in metadata but tool definition lacks destructiveHint annotation. Agents cannot determine which tools are safe to retry or have side effects. Should add @mcp.tool(annotations={...}) or equivalent.
Error handling lacks recovery guidance. Tools return dicts but no visible error classification (retryable vs user-fixable vs fatal). E.g., if verify_code fails, does the agent retry, ask the user, or decompose? Docstrings mention 'Layer 3 (Semantic)' but no error response structure shown. Should return {success: bool, error?: {code, message, recovery_hint}}.
Parameter descriptions lack format/constraint details. E.g., 'max_tokens' in prune_context has no min/max bounds; 'top_k' in search_examples has no range. 'constraints' in compile_prompt is array but no guidance on valid constraint strings. Should specify: max_tokens ∈ [100, 10000], top_k ∈ [1, 50], constraints ∈ [async only, no external libs, ...].