Text case conversion MCP. Keyless, offline: convert a string between camelCase, PascalCase, snake_case, kebab-case, CONSTANT_CASE, Title Case, Sentence case, a URL slug, and more. Pure functions — no API, no key.
Two simple, well-named tools with clear descriptions and proper schemas. Both tools have input schemas with typed parameters and descriptions. However, output schemas are not documented, LLMs cannot predict what fields to expect. Error handling is minimal (only convert_case catches exceptions). No parameter enums despite convert_case accepting a fixed set of case types. Tool descriptions are adequate (100 - 150 chars) but lack guidance on when to use each tool or what the output structure contains. No tool annotations (readOnlyHint, etc.). Overall: functional but incomplete for production use.
Convert text to ALL supported cases at once and return them keyed by name.
Convert text to a target case: camel, pascal, snake, kebab, constant, title, sentence, lower, upper, dot, or slug (keyless, offline).
Output schemas not documented. LLMs cannot predict response structure (e.g., does convert_case return {result, input, target} or just {result}?). Agents must infer from examples.
convert_case 'target' parameter accepts free-form string instead of enum. Should declare target as enum: ['camel', 'pascal', 'snake', 'kebab', 'constant', 'title', 'sentence', 'lower', 'upper', 'dot', 'slug']. LLMs will hallucinate invalid case names.
No tool annotations. Both tools are read-only and idempotent, should declare readOnlyHint: true and idempotentHint: true to help agents reason about safety and retry behavior.
Error handling in convert_case catches exceptions but returns {error: message}. all_cases has no error handling. If invalid text is passed, behavior is undefined. Should validate inputs and return structured error responses with recovery guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Tool descriptions lack context on when to use each. 'all_cases' vs 'convert_case' distinction is unclear, when should an agent pick one over the other? Descriptions should explain the use case difference.