An MCP (Model Context Protocol) server implementation in Erlang that communicates via MQTT, providing tools, resources, and prompts over MQTT messaging.
Two tools with minimal descriptions ('This is tool 1', 'This is tool 2') that fail to convey purpose, context, or when to use them. Tool names are generic non-verbs ('tool1', 'tool2') that violate naming conventions. Schemas are present and well-formed, but descriptions are critically deficient. No parameter-level descriptions in the actual tool definitions, they exist only in schema properties. No error handling guidance, no output schema documentation, no indication of idempotence or side effects. This is a demo server with placeholder tool definitions; production use would require substantial work.
This is tool 1
This is tool 2
Tool names are non-verbs and non-descriptive. 'tool1' and 'tool2' convey no action or purpose. LLMs cannot infer when to call them.
Tool descriptions are trivially short ('This is tool 1', 'This is tool 2', 14 chars each). They fail to explain WHAT the tool does, WHEN to use it, or WHAT it returns. LLMs cannot select tools based on such descriptions.
No documented output schema for either tool. The call_tool handler returns a generic {type: text, text: '...'} response, but the LLM is given no schema to parse structured results or plan downstream calls.
No error handling guidance. When a tool call fails, the LLM receives no indication of whether the error is retryable, user-fixable, or fatal, or what to do next.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 24 | 2025-06-18+ | v2 |
Tool schemas present but lack any indication of idempotence, read-only status, or destructiveness. The declaration says risk=READ_ONLY, but this is not reflected in tool annotations (readOnlyHint).
Parameters arg1 and arg2 have type and description in schema (string/integer, boolean) but are extremely generic. No constraints, ranges, enums, or format hints. 'Argument 1' and 'Argument 2' could describe anything.