search-first proxy in front of MCP upstreams. Provides 4 fixed tools (mcp_search, mcp_describe, mcp_call, mcp_refresh) instead of exposing full schemas from multiple upstream MCP servers. Uses BM25 search over cached manifest.
mcp-search-proxy defines 4 tools with basic schemas and descriptions. All tools have input schemas with type definitions and descriptions present. However, descriptions are minimal (10-60 chars), falling below the 50-200 char LLM-optimized baseline. No output schemas are documented. Error handling is absent, tools do not guide recovery or categorize failures. Tool names use mcp_ prefix (non-standard verb_noun pattern). No parameter validation guidance, no enum constraints, no idempotent/destructive hints. Composition is reasonable (search → describe → call → refresh), but lacks chaining IDs and pagination support.
Proxies tool calls to the owning upstream MCP server and returns raw result. Routes to correct upstream based on tool name.
Returns full inputSchema for specified tools only. Allows client to get detailed parameter information for selected tools.
Triggers upstream re-list and index rebuild. Purely reactive, no polling. Refreshes the cached manifest from all configured upstreams.
BM25 search over cached manifest (names+desc+params, Hermes Layer B style). Returns matching tools with scores.
Tool descriptions are 10 - 60 characters, well below the 50 - 200 char LLM-optimized baseline. Descriptions lack WHEN to use, prerequisites, and state-modification warnings. mcp_refresh says 'Triggers upstream re-list and index rebuild' but does not explain when to call it or what happens to cached data.
No output schemas documented. Callers cannot know what fields to expect from mcp_search (does it return score, upstream_url, full schema?), mcp_describe (array of schemas?), or mcp_call (raw result structure?). LLMs must guess downstream field names.
Tool names do not follow verb_noun convention. 'mcp_search', 'mcp_describe', 'mcp_call', 'mcp_refresh' use mcp_ prefix (to avoid xAI tool_search conflict) but lack clear action verbs. 'mcp_call' is especially vague, does it invoke, execute, or proxy? Should be 'proxy_tool_call' or 'invoke_upstream_tool'.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
No error handling or recovery guidance. If mcp_call fails (upstream timeout, invalid tool name, auth failure), the tool returns raw error with no actionable next step. No categorization (retryable vs fatal). No suggestion to call mcp_search or mcp_describe first.
mcp_search accepts 'limit' (1 - 25) but no description of what happens if limit is 0, negative, or omitted. mcp_describe accepts 'names' array (max 10) but no guidance on what happens if a name does not exist or if the array is empty. No enum constraints, no validation rules in descriptions.