A simple Hello World MCP server example
This server has severe definition quality issues across both tools. Tool schemas are completely empty (additionalProperties: true with no properties defined), descriptions are trivial (under 20 characters each), and parameters lack any type information or constraints. Both tools accept arbitrary input with no validation guidance. The implementation in mcp-handler.js shows handlers exist but tool registration lacks proper MCP schema definitions. Tool definitions appear inferred from example-client.js rather than formally registered in a schema file.
Returns whatever was sent to it
Returns a hello world message
Input schemas completely empty: both tools define {type:object, properties:{}, additionalProperties:true} with no parameter definitions whatsoever. Violates pattern:constrained-input and pattern:tool-description. LLMs cannot determine what parameters are valid or required.
Descriptions are trivial and under 20 characters: 'Returns a hello world message' (31 chars) and 'Returns whatever was sent to it' (31 chars). Descriptions lack WHAT, WHEN, and prerequisites. Do not explain when to use tool instead of alternatives.
Tool naming lacks verb clarity. 'hello_world' is a noun phrase, not verb_noun format (get_greeting, send_hello). 'echo' is a generic action with no object, echo what? Parameters need type suffixes (e.g., echo_message, echo_data).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 0 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 15 | - | v1 |
No output schema documentation. Neither tool documents what fields are returned or what structure the response has. Example responses visible in example-client.js (e.g., {status, data, message, params}) but not formally specified for the LLM.
No error handling documentation. mcp-handler.js catches errors and returns {status: error, error: {message, code}} but tool definitions provide no guidance on error recovery, retry logic, or what codes to expect.
Tool definitions appear inferred from example-client.js rather than formally registered. No explicit MCP schema registration visible (no server capabilities, no tool list endpoint, no formal schema).
Parameters accept arbitrary input (additionalProperties: true) with no type definitions. LLMs cannot validate input, any key-value pair is accepted, inviting hallucinated parameters and silent failures.