Example MCP Server with integrated or separate OAuth authentication modes, supporting tools, prompts, resources, logging, sampling, and completions
Server has 7 tools with consistent naming (mostly verb-based) and reasonable descriptions (10-200 chars range). Most tools have complete input schemas with type definitions and parameter descriptions. However, output schemas are not documented anywhere in the source code, and several tools have vague or generic descriptions that don't explain WHEN to use them or what they return. No error recovery guidance is evident. Tool compositions are simple (no chaining requirements documented). The server follows basic good practices but falls short of production-grade quality due to missing output schema documentation and insufficient descriptions for some tools.
Add two numbers
Generate an annotated message with optional image
Message to echo
Get a reference to a resource
Get a tiny example image
Simulate a long-running operation
Sample an LLM with a given prompt
Output schemas not documented. No tool explicitly documents what fields or data structure it returns. LLMs cannot plan downstream tool calls or know what data to extract without knowing the response shape.
getTinyImage and getResourceReference have minimal descriptions (under 30 chars). 'Get a tiny example image' and 'Get a reference to a resource' lack context for when to use them or what they return. Descriptions should be 50-200 chars explaining purpose, use case, and key behavior.
No error handling or recovery guidance. Tools do not document what errors can occur, how to classify them (retryable vs fatal), or what the LLM should do next. For example, sampleLLM calling an LLM could timeout or rate-limit, no guidance provided.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
getTinyImage accepts no parameters but does not explain what image is returned, its format (PNG/JPEG/etc), dimensions, or use case. A bare function with empty input schema and vague description is confusing.
add tool description 'Add two numbers' does not state what happens when numbers overflow, whether floating-point precision is guaranteed, or what the return type is (integer, float, string?). Mathematical operations need precision guarantees.