Template for creating Model Context Protocol servers
This is a template/boilerplate server with a single example tool. The tool has a properly defined JSON Schema with enum constraints and descriptions, but the tool itself is not production-grade. The schema is correct and the descriptions are present but minimal. The tool demonstrates the pattern correctly but provides no real value and would not meet production standards. Definition quality is hampered by: (1) the example tool is trivial and does not reflect domain-specific value, (2) resources and prompts are unimplemented stubs returning empty lists, (3) descriptions are present but terse (54 chars for tool, 24 chars for input param, 31 chars for option param, all below the 72-char baseline for param descriptions). The naming 'example_tool' is acceptable for a template but would be unacceptable in production. Error handling is present (try-catch with error message) but generic.
An example tool for demonstration
Tool description is 54 characters, below baseline (194 chars average for A+ tools). 'An example tool for demonstration' does not explain WHAT the tool does, WHEN to use it, or what it RETURNS. Does not meet pattern:tool-description requirement.
Parameter 'input' description is only 24 characters ('Example input parameter'). Does not describe the expected format, range, constraints, or use case. Parameter descriptions should average 72 chars and be actionable for LLMs.
Parameter 'option' description is only 31 characters ('Example option parameter'). While the schema correctly declares enum values [option1, option2], the description does not explain what these options control or when each is appropriate.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 36 | - | v1 |
Resources and prompts capabilities are registered but return empty stubs. ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, and GetPromptRequestSchema all have placeholder implementations that return empty arrays. This violates the principle of declaring only implemented features.
Tool name 'example_tool' does not start with a clear action verb. Names like 'get_', 'create_', 'update_', 'delete_', 'search_', 'list_', 'send_' help LLMs infer intent. 'example_tool' is generic and would be unacceptable in production.
Output schema is not documented. The tool returns either a structured object (ExampleToolResponse with message, processed, timestamp) or a string, but LLMs are not told what to expect. The return type is inferred only from code, not from the tool definition.