MCP server implementation and code generator for Protocol Buffers, with support for multiple languages (C++, Go, Rust) and transport mechanisms (stdio, HTTP, gRPC, SSE)
This server has significant definition quality gaps. Tool descriptions are minimal (10-30 chars, well below the 50-200 char production baseline). Input schemas are present and mostly complete with proper types and enums, but lack depth in parameter descriptions. The 'count' tool in particular is underspecified. Error handling is not visible in the provided code. While naming follows verb_noun convention appropriately, the descriptions lack the LLM-optimization guidance needed for reliable tool selection. The server appears to be a protobuf example project rather than a production-ready MCP implementation, which explains the sparse documentation.
Increment and return a counter
Create a new todo item
Delete a todo item
Get a specific todo item by name
List all todo items
Update an existing todo item
Descriptions too short and lack LLM-optimization context. All tool descriptions are 10-30 characters (production baseline: 50-200 chars). They state WHAT the tool does but omit WHEN to use it, what happens to state, and what it returns. Example: 'Get a specific todo item by name' lacks explanation of expected format for 'name' parameter or what fields are returned.
Parameter descriptions are missing or sparse. 'parent' parameter in create-todo lacks format guidance (is it a resource path like 'projects/p1/todos'?). 'todo_id' and 'name' lack any hint about their expected format, length, or constraints. LLMs cannot reliably construct valid values without explicit guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Output schemas are not documented. The tools indicate they return structured data (a todo object, a list of todos, a counter value) but the response schemas are not defined in the tool specifications. LLMs cannot plan downstream operations without knowing what fields to expect.
'list-todos' has no pagination parameters (limit, offset, page_size). Without pagination, the tool cannot handle large result sets. Production baseline requires page/offset + limit + total count.
'count' tool is severely underspecified. The description 'Increment and return a counter' provides no context: What counter? Is it per-user, global, or stateful? No input schema detail; empty input object suggests a bare parameter-less call, but the semantics are unclear. This violates the 'each tool does one thing with clear intent' principle.
Destructive operations (delete-todo) lack confirmation or dry-run support. Agents should be able to confirm before executing irreversible actions. No mention of recovery options or undo mechanisms.
No error handling guidance visible. Tools do not document error conditions (e.g., 'todo not found', 'invalid priority value', 'parent does not exist') or recovery suggestions. LLMs need explicit error classifications and next-step hints.
Resource naming consistency unclear. Tools accept 'name' (e.g. get-todo) but create-todo uses 'parent' + 'todo_id'. The naming mismatch (name vs parent/todo_id) makes tool chaining ambiguous. If create-todo returns a full 'name' resource identifier, get-todo should accept 'name' directly, but the relationship is not documented.