An MCP server that exposes unary gRPC methods as tools by loading protobuf descriptor sets and proxying calls to a backend gRPC service
Scoring was not performed
Tool definitions are dynamically generated with generic placeholder descriptions. The visible description 'Dynamically generated tool from gRPC service method definition. Tool name format: service_fullname__method_name with dots replaced by underscores. Description derived from leading/trailing comments on the gRPC method definition.' provides no actionable guidance for LLM selection. It describes the generation mechanism, not what the tool does.
No input schema visible or enforced in source code. Tool handler accepts arbitrary JSON parameters (json.Marshal(request.Params.Arguments)) and attempts unmarshalling to dynamic protobuf messages with no validation of message type or required fields. Parameters are never validated against constraints.
Tool naming does not start with action verbs. Names like 'helloworld__SayHello' (underscore-separated gRPC service/method) do not follow verb_noun conventions (e.g., send_message, get_user). LLMs cannot infer intent from a name like 'ServiceName__MethodName'.
No output schema documentation. The tool returns protojson-marshalled responses as plain text strings. LLMs have no structured definition of what fields to expect, making downstream tool composition and data extraction error-prone.
Error messages are generic. When protojson unmarshalling fails, the tool returns mcp.NewToolResultError(err.Error()), which passes raw Go error text. No actionable recovery guidance (e.g., 'Invalid parameter format. Expected JSON matching message schema.'). Error responses don't guide the LLM toward correction.
No pagination support for list-like operations. The code has no built-in limit, offset, or cursor handling. If a gRPC method returns a large list, the tool will return all items, potentially exhausting context windows and violating the pattern of capping results at 20-50 items.
Bearer token handling is server-wide (flag-based), not per-tool. While this avoids leaking credentials in tool parameters, the server-wide approach reduces flexibility for multi-tenant or multi-credential scenarios. However, this is a minor issue compared to the definition quality gaps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 0 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 9 | - | v1 |