Advanced string manipulation tools for AI agents via MCP
Server has 5 tools with complete Zod schemas and descriptions. All tools are read-only string operations with clear, actionable descriptions (avg 150 chars). Naming follows verb_noun convention (analyze_, transform_, diff_, render_, generate_). However, parameter descriptions lack detail on constraints, ranges, and error cases. Output schemas are not documented, LLMs cannot predict response structure. No error handling guidance or recovery paths. Missing tool annotations (readOnlyHint present implicitly but not declared). Composition is sound: each tool does one thing. Acceptable for a utility library but below production baseline for agent integration.
Analyze text to get character count, word count, sentence count, paragraph count, reading time, Flesch-Kincaid reading level, unique words, most common words, and longest word.
Compare two strings showing additions, deletions, and unchanged segments with positions. Supports character-level, word-level, and line-level diff modes.
Generate a URL-friendly slug from text. Removes special characters, lowercases, replaces spaces with hyphens, transliterates accented characters. Configurable separator and max length.
Render a template string by replacing {{variables}} with values from a data object. Supports {{#if var}}...{{#else}}...{{/if}} conditionals and {{#each arr}}...{{/each}} loops with {{this}}, {{@index}}, and {{this.prop}}.
Transform text with operations: remove_duplicate_lines, remove_extra_whitespace, extract_emails, extract_urls, extract_phone_numbers, mask_sensitive_data, truncate, wrap_text.
Output schemas not documented. LLMs cannot predict response structure (e.g., analyze_string returns character_count, word_count, etc., but this is invisible to the agent). Forces trial-and-error field extraction.
Parameter descriptions lack constraint details. E.g., transform_string 'operation' enum is documented but max_length, wrap_width, and ellipsis lack guidance on valid ranges, edge cases, or what happens if invalid values are passed.
No error handling guidance. render_template catches JSON parse errors and returns isError=true, but other tools (analyze_string, transform_string, diff_strings, generate_slug) have no visible error paths. What happens if text is empty, null, or extremely large?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Tool annotations missing. All tools are read-only, but readOnlyHint is not declared in the tool definition. Agents cannot infer safety from metadata.
render_template 'data' parameter expects JSON string but description does not specify format, encoding, or what happens if JSON is malformed. Error message is generic ('Invalid JSON in data parameter'), does not guide LLM on how to fix it.