A TypeScript MCP server demonstrating migration from STDIO to HTTP transport. Shows how to host a streamable HTTP server on Smithery using custom containers with backwards compatibility.
Single tool with adequate naming and schema, but descriptions lack depth and parameter documentation is minimal. Tool name 'count_characters' follows verb_noun convention and is clear. Input schema uses Zod with type definitions, but parameter descriptions are generic (10-50 chars, below the 72-char baseline). No output schema documented. Error handling is basic. The tool is READ_ONLY and simple, but lacks LLM-optimization guidance on when/why to use it.
Count occurrences of a specific character in text
Parameter descriptions are too brief (10-50 chars vs 72-char baseline). 'The text to search in' and 'The character to count (single character)' lack context on format, constraints, or edge cases (e.g., what if character is multi-char? what if text is empty?).
No output schema documented. Tool returns a text response, but LLMs need to know the exact structure (type: 'text', fields returned) to plan downstream calls and extract data reliably.
Tool description (54 chars) is below the 10 - 1024 baseline and lacks WHEN/WHY guidance. 'Count occurrences of a specific character in text' states WHAT but not WHEN to use it or what the LLM should expect from the result.
No input validation or error guidance. If 'character' param receives a multi-char string, the tool silently counts wrong. Error messages should guide LLMs to self-correct (e.g., 'character must be exactly 1 char').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Tool is trivial (single responsibility, no composition risk), but lacks idempotency guarantee documentation. Agents may retry on ambiguous failures, confirm this tool is safe to call multiple times with identical input.