The server defines 9 text processing tools with mixed quality. All tools have basic JSON Schema input definitions with typed parameters and most have descriptions, but they fall short of production standards in several areas: (1) Tool descriptions are in Japanese, creating ambiguity for English-speaking LLM agents; (2) Descriptions lack critical WHEN-to-use context and are under the recommended 50-200 character range for LLM optimization; (3) Parameter descriptions are minimal (e.g., 'The text to count characters in' is generic); (4) No error categorization or recovery guidance in descriptions; (5) No output schemas documented, forcing LLMs to infer response structure; (6) Tool names are clear and action-oriented (verb_noun pattern), which is a strength; (7) Parameters have types and reasonable defaults, but lack constraints and format hints; (8) No batch variants despite tools that could naturally accept arrays; (9) Tool 'text_diff' truncates output to 10 differences without pagination guidance. The server is functional for basic utility tasks but lacks the LLM-readiness patterns needed for agent composition.
All tool descriptions are in Japanese, making them inaccessible to English-speaking LLM agents. LLMs cannot infer proper tool selection or usage from non-English descriptions.
Tool descriptions are too short (10-30 chars) and lack WHEN-to-use context, prerequisites, and return type hints. Descriptions should be 50-200 chars and explain the tool's purpose, when to call it, and what it returns.
Translate all tool descriptions and parameter descriptions to English. Descriptions should be 50-200 characters, clear about what the tool does, when to use it instead of similar tools, and what fields the response contains. Example: 'Count characters in text. Returns total count with optional space/newline/tab filtering. Use for text analysis and validation tasks. Returns: {total_characters, total_with_spaces, lines, words}.'
Document output schemas for all 9 tools. For each tool, add a returns/output section showing the exact JSON structure with field types and descriptions. This enables LLMs to compose tools confidently and parse responses accurately.
Add constraints to numeric parameters. E.g., 'indent': 'Number of spaces for indentation (1-8, default 2)' instead of just 'Number of spaces for indentation'. Validate input and return actionable errors like 'Invalid indent: got 100, must be 1-8.'
Enhance error messages with recovery guidance. Instead of returning {'error': 'Invalid algorithm'}, return {'error': 'Invalid algorithm. Valid options: md5, sha1, sha256, sha512. Retry with one of these.'}. Categorize errors as retryable (bad input, timeout) vs fatal (service down).
Add pagination to text_diff. Return a total count of differences, limit results to ~10, and include a next_cursor for fetching more. This prevents context explosion on large diffs and follows the paginated-result pattern.
Add tool annotations. Use @mcp.tool(readOnlyHint=True) or equivalent for all 9 tools since they are read-only and idempotent. This signals to agents they are safe to retry without side effects.
Score history
Overall score trend
↑ 1 points across a rubric change (v1 → v2)
47/100
Scored
Grade
Overall
Spec posture
Rubric
2026-09-22
F
47
2026-07-28+
v2
2026-03-09
F
46
-
v1
text_diff
read onlysource verified55/100
2つのテキストの差分を検出
No output schemas documented. LLMs must infer response structure from code, leading to hallucinated field names and failed downstream tool chaining. Tool documentation must include structured return types.
Parameter descriptions are generic and lack format constraints. E.g., 'indent' param accepts any integer but code implies 1 - 10 range. Descriptions should state min/max, format, and valid ranges explicitly.
Error responses lack recovery guidance. Code returns bare error strings; LLMs don't know whether to retry, ask the user, or fail. Error messages should guide next steps: 'Invalid algorithm. Valid options: md5, sha1, sha256, sha512. Retry with one of these.'
text_diff truncates results to 10 differences without pagination. Large diff outputs risk context explosion; should return a total count, limit results, and offer cursor-based pagination.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) declared. All 9 tools are read-only and safe; marking them would signal to agents they can retry without side effects.
Consider batch variants for tools. E.g., count_characters_batch(['text1', 'text2', ...]) would save agents from looping; tokens and latency improve significantly.
Add validation for enum parameters. E.g., generate_timestamp should validate format is one of {iso, unix, japanese, us, filename} before calling datetime. Return 'Invalid format: got "xyz", must be one of: iso, unix, japanese, us, filename.'
Strip verbose response fields. Some responses include fields that add noise (e.g., input_length in generate_hash). Keep responses minimal, only include fields the agent needs for downstream decisions.