Dynamic MCP multiplexer — one gateway, many upstream MCP servers. Reduces tool-schema token usage by ~97% via two-stage discovery.
mcpmux implements a two-stage tool discovery gateway with 5 tools. Tool naming follows verb_noun convention (discover_tools, call_discovered_tool, refresh_tool_catalog, gateway_stats, upstream_status). Descriptions are present but brief (30-80 chars), below the 50-200 char LLM-optimized baseline. Input schemas are visible for discover_tools and call_discovered_tool with proper type definitions and descriptions. However, refresh_tool_catalog, gateway_stats, and upstream_status have empty input objects with no documented output schemas. No error handling guidance, no pagination support, and no output schema documentation across any tool. Tool composition is reasonable (discovery → execution pattern), but lacks chaining IDs and recovery guidance.
Stage 2 execution. Call a selected tool returned by discover_tools with explicit arguments.
Stage 1 tool discovery. Provide natural language query and get top candidate upstream tools without exposing full global MCP inventory.
Show gateway usage metrics for tool discovery and calls.
Reload upstream tool list. Use after upstream server config changes.
Show upstream server connection status and last errors.
Three tools (refresh_tool_catalog, gateway_stats, upstream_status) have empty input schemas with no documented output structure. LLMs cannot plan downstream actions without knowing what fields are returned.
Tool descriptions are 30-80 characters, below the 50-200 char LLM-optimized baseline. Descriptions lack WHEN to use guidance and prerequisites. E.g., discover_tools should explain when to call it vs direct tool execution.
No error handling guidance. Tools do not document what errors are retryable, user-fixable, or fatal. No recovery hints (e.g., 'If tool not found, call refresh_tool_catalog').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
discover_tools accepts optional topN (1-20) and allowHighRisk parameters, but descriptions do not explain what 'high-risk' means or when to set allowHighRisk=true. Undocumented parameter semantics.
call_discovered_tool accepts a toolId from discover_tools but does not document what happens if the toolId is stale or invalid. No guidance on error recovery or re-discovery.