An MCP server implementation in Go that supports tools, resources, and prompts with both STDIO and HTTP transport options
converse-mcp provides a framework for building MCP servers with tool, prompt, and resource support. However, definition quality is significantly compromised by incomplete schemas, missing input parameter documentation, and vague descriptions. The 7 tools exhibit inconsistent quality: native MCP protocol tools (initialize, prompts/list, prompts/get, resources/list, resources/read, tools/list) appear to be framework intrinsics with minimal real documentation visible in source. The 'tools/call' tool accepts generic object arguments with no parameter validation schema. Helper builders exist in pkg/api/tools.go showing infrastructure for schema construction, but actual tool registrations in tests show empty or minimal configurations. No evidence of parameter descriptions, enums, or output schema documentation in the actual tool definitions observed.
Initialize the MCP server connection
Get a specific prompt by name
List all available prompts
List all available resources
Read a specific resource by URI
Call a tool with the specified name and arguments
List all available tools
Most tools lack visible input/output schemas in source code. Framework builders exist (WithInputProperty, WithOutputProperty in pkg/api/tools.go) but actual tool registrations in server_test.go show NewTool('name') with empty or minimal configuration. Schema score capped at 0-25 for all tools.
Parameter descriptions missing or minimal. 'prompts/get' and 'resources/read' have 'name' and 'uri' parameters with generic one-line descriptions. 'tools/call' accepts 'arguments' as bare object with no type specifics. No enum constraints, format validation, or dependency documentation visible.
Tool descriptions are generic and under 50 characters: 'Initialize the MCP server connection' (34 chars), 'List all available prompts' (26 chars), 'Read a specific resource by URI' (31 chars). Rubric baseline for A+ tools is 50-200 chars per description with WHEN/WHY context for LLM selection.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 40 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 19 | 2025-06-18+ | v1 |
No output schemas documented. Tools like 'prompts/get', 'resources/read', 'tools/list' return data but no structured response field definitions visible in source. LLMs cannot plan downstream tool calls without knowing response structure.
Error handling not evident in tool definitions. No visible error classification (retryable, user-fixable, fatal), no recovery guidance, no actionable error messages in schema. Tools are READ_ONLY or WRITE but no error response types documented.
'tools/call' accepts generic 'arguments' object with type 'object' and no properties schema. This violates constrained-input pattern, no enum, no nested schema validation, no guidance on which arguments are valid for which tools.
Tool definitions inferred from test registration (server_test.go) rather than explicit handler code with visible schemas. No direct evidence of parameter validation or output shaping in jrpc_handlers.go snippets provided.