A comprehensive MCP (Model Context Protocol) TypeScript implementation featuring a client library with durable sessions, tool routing, code execution, and CLI tooling for connecting multiple MCP servers.
This MCP server exposes 4 tools for remote MCP client interaction. All tools have basic descriptions and parameter schemas, but the definitions are thin and lack critical details for production use. Tool names are reasonably clear (callTool, readResource, getToolAccess, updateToolPolicy), but descriptions are generic and do not guide LLM decision-making. Parameter descriptions exist but are minimal (10-40 chars), falling well below the 72-char baseline. No output schemas are documented, forcing LLMs to guess what fields are returned. Error handling is not evident, no guidance on retryability, user-fixable errors, or recovery paths. The tools appear to be a client for a remote MCP server abstraction layer rather than direct domain tools, which introduces an extra layer of indirection and complicates testing and error diagnosis.
Execute a tool on a remote MCP server with structured input and output
Get tool access policies and permissions for a session
Read the contents of a resource from a remote MCP server
Update tool access policies for a session
No output schemas documented for any tool. LLMs cannot infer what fields are returned, forcing them to guess downstream tool call parameters or request clarification.
Parameter descriptions are minimal (10-40 characters), well below the 72-char baseline. E.g., 'The session ID for the MCP connection' (35 chars) does not explain what a session ID is, how to obtain one, or what happens if it is invalid.
Tool descriptions are generic and do not guide LLM selection. E.g., 'Execute a tool on a remote MCP server with structured input and output' does not explain WHEN to call this vs other tools, what RISK it carries, or what PRECONDITIONS must hold (e.g., sessionId must exist and be valid).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | 2025-06-18+ | v2 |
| 2026-03-09 | C | 66 | - | v1 |
callTool and updateToolPolicy are WRITE operations (state-modifying) but descriptions do not state this. LLMs cannot determine which calls are safe to retry and which have irreversible consequences.
No error handling guidance. If a sessionId is invalid, toolName not found, or policy update fails, the tool provides no actionable error message to guide the LLM's recovery (retry, lookup sessionId, list available tools, etc.).
toolInput parameter in callTool is type 'object' with no schema constraints. This accepts any JSON, inviting LLMs to pass malformed inputs that will fail at the remote MCP server. Should document expected structure or reference the remote tool's schema.
No pagination or limit controls on readResource or other list-like operations. If a resource returns large content, no mechanism to fetch in chunks or limit size. Risk of context window exhaustion.
The 'policy' parameter in updateToolPolicy is an object with a 'toolIds' array, but no guidance on what toolIds format is expected (opaque IDs, names, URIs?) or how to obtain valid IDs.