Analytics tool for MCP (Model Context Protocol) servers and AI agents - tracks tool usage patterns and provides insights
This is an analytics SDK (not a production MCP server offering a fixed tool suite). The 10 tools defined are a mix of test fixtures and domain-specific tools. Across the board: descriptions are present and mostly clear, but many are too short (10-20 chars, well below the 194-char baseline). Input schemas are visible and properly typed, but most are minimal (1-2 params). Error handling is basic. The tools follow verb_noun naming (get_more_tools, list_todos, add_todo, complete_todo), which is correct, but several test tools (echo, loose, strict, structured, boom) are diagnostic fixtures, not production services. The most significant issue is that 4 of 10 tools are test/demo implementations that reveal the SDK's internal architecture rather than modeling a realistic domain. Tool annotations are present in get_more_tools (good) but absent in the rest. Overall, this reads as a framework demonstration rather than a mature, production-grade tool collection.
Add a new todo item
Always throws
Mark a todo item as completed
Echo a message back
Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.
Get todo stats
List all todo items
4 of 10 tools are test/diagnostic fixtures (echo, loose, strict, structured, boom) that do not model a real domain. They serve to demonstrate SDK capabilities but do not represent production tool design. This dilutes the tool suite's coherence and makes it difficult for an agent to form a meaningful plan.
Descriptions are significantly shorter than the production baseline (194 chars). 'Echo a message back' (19 chars), 'Always throws' (13 chars), 'List all todo items' (19 chars) are all below 20 chars. Short descriptions leave LLMs without context for when/why to call the tool.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present only on get_more_tools. WRITE tools like add_todo and complete_todo lack annotations, preventing annotation-aware clients from flagging destructive operations or requesting confirmation.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 27 | - | v1 |
Loose schema: unknown keys pass through to the handler
Strict schema: additionalProperties are rejected
Returns structuredContent per its outputSchema
Output schemas are not documented in the visible code. get_more_tools returns {content: [{type: text}]}, but the other 9 tools' return types are not shown in the source. Without documented output schemas, LLMs cannot plan downstream chains or extract the right fields.
'loose' and 'structured' are vague names that do not convey what the tool does. 'loose' appears to test schema validation leniency, but the name does not make that clear. A tool name should start with a verb reflecting the action (e.g., validate_schema_loose, parse_with_passthrough). Vague names force LLMs to read the description to understand intent.
Error handling is not visible in the provided source. The 'boom' tool description says 'Always throws', but no guidance is given on how to recover, retry, or interpret the error. Per the rubric, error responses must guide the LLM: 'This is a test fixture for SDK error handling, expected behavior. Not a real tool.' Error handling is critical for production tools.
Parameter descriptions are minimal or missing context. 'context' in get_more_tools is good (79 chars), but 'msg' in echo, loose, structured is 1-2 sentences at best. Many params lack guidance on format (e.g., is 'text' free-form or subject to length limits?) or constraints (enums, patterns).
list_todos returns 'all todo items' but no pagination parameters (limit, offset, page) are declared. If there are hundreds of todos, returning all at once will overflow context. Production tools must implement pagination.