An MCP server that proxies requests through an MCP client, relaying prompts, resources, tools, logging, and completion requests from a remote MCP server
This MCP proxy server exposes 10 tools that forward requests to a remote MCP server. While tool names follow verb_noun conventions and descriptions are present, there are critical gaps: (1) Most tools lack input schemas entirely or have only partial schemas; (2) Parameter descriptions are minimal (typically 5-15 chars), well below the 72-char baseline; (3) Output schemas are undocumented, callers cannot know what fields to expect; (4) Error handling is minimal, with only one tool (_call_tool) catching exceptions; (5) Tool definitions are inferred from request handlers rather than explicitly registered with full metadata. The proxy pattern itself is sound, but the tool interface lacks the polish needed for reliable agent composition.
Calls a specific tool on the remote MCP server by name with provided arguments
Requests completions from the remote MCP server with a reference and argument
Retrieves a specific prompt by name with optional arguments from the remote MCP server
Lists available prompts from the remote MCP server
Lists available resources from the remote MCP server
Lists all available tools from the remote MCP server
Reads a specific resource by URI from the remote MCP server
Output schemas are completely undocumented. Callers have no visibility into what fields the remote MCP server returns, forcing agents to make blind assumptions about response structure and preventing reliable downstream tool chaining.
Input parameter descriptions are extremely brief (5-15 characters). For example, 'The name of the prompt to retrieve' (29 chars) is minimal but '_get_prompt' has full schema visibility; however, '_list_prompts' has NO schema at all. Baseline is 72 chars per param. LLMs cannot infer nuanced parameter semantics from this.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 25 | - | v1 |
Sets the logging level on the remote MCP server
Subscribes to updates for a specific resource URI from the remote MCP server
Unsubscribes from updates for a specific resource URI from the remote MCP server
Six tools have no visible input schema (schema=0): _list_prompts, _list_resources, _list_tools, _complete (partial). Tools with no schema cannot be validated by the MCP client and leave LLMs guessing about required vs optional parameters.
Error handling is minimal. Only _call_tool catches exceptions and wraps them in a CallToolResult with isError=true. All other tools (9/10) have no try-catch or error guidance, so failures bubble up as unstructured exceptions rather than actionable error messages.
Tool definitions are inferred from request handler registration, not explicitly declared with full metadata (name, description, schema) in a registry or schema document. This forces callers to rely on runtime discovery and prevents static tool introspection.
_get_prompt and _call_tool accept a generic 'arguments' parameter (type: object, no schema). Agents have no constraints on what keys/values to pass, inviting hallucinated argument names. Should document expected keys or use a discriminated union.
No pagination support. _list_prompts, _list_resources, _list_tools could return 1000+ items, but there is no limit, offset, or cursor parameter to handle large result sets. This violates the baseline pattern and risks context window exhaustion.