Turn Elysia routes into MCP tools using existing schemas, handlers, and metadata.
Single tool 'count_letters' has a clear, action-verb name and reasonable description (67 chars). Input schema is well-formed with proper types and per-parameter descriptions. However, output schema is documented only in the Elysia route definition (response: t.Object(...)), not exposed in the MCP tool registration itself. The tool is READ_ONLY and simple, but lacks error handling guidance, output field descriptions in the MCP context, and any indication of edge cases (empty word, no matching letters). The plugin auto-discovers routes marked with 'mcp: true' detail, which is clever but means tool definitions are split between Elysia metadata and MCP registration, harder to audit and maintain.
Counts occurrences of specific letters in a given word
Output schema not documented in MCP tool definition. Response structure is defined in Elysia route metadata (response: t.Object(...)) but not exposed to the MCP client. LLMs cannot see what fields to expect from the tool result.
No error handling or recovery guidance. Tool description does not explain what happens if word is empty, letters is empty, or no matches are found. LLMs cannot plan for edge cases.
Tool definitions split between Elysia route metadata and MCP plugin. The 'mcp: true' detail flag and operationId are in the route definition, not in a centralized MCP schema. This makes it hard to audit tool quality and maintain consistency.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). While 'count_letters' is clearly read-only, the MCP definition does not declare this formally, forcing clients to infer safety from the description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2025-06-18+ | v2 |