A TypeScript MCP server template following official SDK best practices
Server has three tools with reasonable structure and naming. All three tools start with action verbs (sayHello, calculate, getWeatherForecast) and have descriptions. Input schemas are present with type definitions and parameter descriptions. However, there are notable gaps: (1) Output schemas are not documented, the rubric requires 'Document the output schema' as a critical check, but tool responses are not formally specified; (2) Error handling is minimal, no recovery guidance, no categorization of errors as retryable/user-fixable/fatal; (3) The getWeatherForecast tool is only defined in a client example file (client-example.js), not in the main server.ts registration, suggesting it may not actually be registered; (4) Parameter constraints are present (latitude/longitude min/max) but inconsistently applied; (5) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all being marked READ_ONLY in the spec. The Zod validation schemas show good intent but are not exposed in tool definitions. Overall, foundation is present but polish and completeness are lacking.
Performs basic arithmetic calculations (add, subtract, multiply, divide)
Get weather forecast for a specific location using coordinates
Says hello to a person by name
Output schemas are not documented for any tool. Rubric critical check: 'Document the output schema. LLMs need to know what fields to expect.' All three tools lack formal return type documentation.
getWeatherForecast tool is not registered in src/server.ts. Only visible in client-example.js as an example.
No error handling guidance for any tool. Rubric critical check: 'Error responses must tell the LLM what to do next.' No tool provides recovery guidance, retryability info, or actionable error messages. Division-by-zero is validated server-side but not exposed in tool contract.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Tool annotations missing. All tools are marked READ_ONLY in spec, but no readOnlyHint annotations in tool definitions. Modern MCP servers should declare safety properties (readOnlyHint, destructiveHint, idempotentHint).
Parameter descriptions for getWeatherForecast lack context. 'Latitude coordinate' and 'Longitude coordinate' are bare, no guidance on units, precision, or typical usage patterns. Rubric requires: 'Describe the expected format, range, and allowed values directly in the parameter description.'
Zod validation schemas exist but are not exposed in tool contract. Schemas are defined in src/schemas/toolSchemas.ts with custom validation (division-by-zero check), but this logic is not reflected in tool descriptions or error handling.