Intent-based MCP aggregator that routes tool calls to multiple backend MCP servers. Exposes high-level intent tools (gov.*) and backend passthrough tools. Manages on-demand backend lifecycle with idle timeout and always-on service support.
Context Governor is a router/aggregator MCP that delegates to backend services. Tool definitions are present with schemas and descriptions, but quality is uneven. Three core tools (search_code, search_docs, browser_task) have detailed descriptions explaining backend routing and mode enums, meeting baseline standards. However, four utility tools (list_tools, tool_status, cleanup_idle, project_tool) have minimal descriptions (20-80 chars) that lack actionable context for LLM selection. Parameters across all tools lack type constraints and validation guidance. Output schemas are entirely undocumented, critical for an aggregator that chains results across backends. Error handling is absent from descriptions. The project_tool is particularly problematic: it accepts arbitrary 'target' and 'args' parameters with no validation hints, making it a potential injection vector. Overall, definitions meet minimum viability but fall short of production-grade quality.
Run browser automation — navigation, screenshots, snapshots, interaction. Routes to backend "playwright" — expects Playwright's tool surface (browser_navigate, browser_click, browser_fill, etc.). Starts on demand, stops after idle. action=snapshot (default): navigate + return accessibility tree action=screenshot: navigate + take screenshot action=navigate: navigate only action=evaluate: run JS via params.script action=click: click element via params.selector action=fill: fill input via params.selector + params.value
Stop any running on-demand backend processes. Never stops shared (always_on) services.
List all available tools grouped by purpose. Shows gov.* tools and backend groups. Set show_backend_tools=true for full raw list.
Access on-demand backends by name. Currently registered: [dynamic list]. Starts the backend on demand. Stops after idle. If tool is omitted: lists available tools for the target (from cache — no backend startup if cache populated). If tool is provided: calls target__tool with args. Example: target=github tool=list_pull_requests args={owner:"org",repo:"name"}
Search the codebase for symbols, definitions, references, and diagnostics. Routes to backend "serena" — expects Serena's tool surface (find_symbol, find_referencing_symbols, get_symbols_overview, etc.). mode=search → find_symbol (default) mode=overview → get_symbols_overview (all symbols in file or project) mode=references → find_referencing_symbols mode=diagnostics → get_diagnostics_for_file (requires file) mode=implementations → find_implementations
Output schemas completely undocumented. No tool describes what fields it returns, data types, or structure. LLMs cannot plan downstream calls or extract required chaining IDs (e.g., backend tool names from list_tools, status from tool_status).
project_tool accepts arbitrary 'target' and 'args' parameters with no validation, enum constraints, or injection guards. Description does not explain valid targets, required args structure, or error cases. High risk for prompt injection and malformed backend calls.
Utility tools (list_tools, tool_status, cleanup_idle) have descriptions under 80 characters with no context for when to call them or what they return. LLMs cannot distinguish between similar tools or understand their role in the workflow.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
Look up documentation for any library, framework, or API. Routes to backend "context7" — expects Context7's tool surface (resolve-library-id + query-docs). Automatically resolves the library ID then queries docs in one call. Examples: react/useEffect, supabase/row-level-security, nextjs/app-router
Show running/stopped status of all MCP backends. Equivalent to --status CLI flag.
No error handling guidance in any tool description. No recovery hints (e.g., 'If backend not found, call list_tools first'), no categorization of retryable vs fatal errors, no actionable error messages documented.
Parameters lack type constraints and validation rules. 'mode' enums are present in search_code/search_docs/browser_task, but 'query', 'library', 'topic', 'target', 'args' accept free-form strings with no format, length, or character restrictions documented.