Unicode character MCP. Keyless, offline: inspect the characters of a string (code point, UTF-8/UTF-16 encodings, HTML entity, general category) and escape/unescape strings in JS (\uXXXX), HTML (&#x), and URL (percent) forms. Pure functions — no API, no key.
Three tools with complete schemas and descriptions, but significant gaps in parameter constraints, output documentation, and error handling. All tools have verb-noun naming (char_info, escape_string, unescape_string) and descriptions (avg 180 chars, within baseline 194). However, parameter descriptions lack format constraints, enums, and validation guidance. Output schemas are not documented, LLMs cannot predict return structure. No error handling guidance. Tools are read-only and offline, reducing risk, but composition and chaining support is weak.
Inspect each character of a string (up to 64): Unicode code point (U+ hex + decimal), UTF-8 byte sequence, UTF-16 code units, HTML numeric entity, and general category. Keyless, offline.
Escape a string. format = "js" (\uXXXX), "html" (&#xNN;), "url" (percent-encoding), or "all-nonascii" (js-escape only non-ASCII). Keyless, offline.
Unescape a string containing \uXXXX / \xNN / &#NN; / &#xNN; / percent-encoding back to plain text. Keyless, offline.
Output schemas not documented. LLMs cannot predict return structure (char_info returns {length_chars, length_utf16, characters[...]}, escape_string returns {format, escaped}, unescape_string returns {unescaped}). Without documented output, agents cannot chain tools or extract fields reliably.
escape_string 'format' parameter lacks enum constraint. Description says 'js | html | url | all-nonascii (default js)' but no formal enum in schema. LLMs may hallucinate invalid formats like 'base64' or 'xml'. Should declare enum: ['js', 'html', 'url', 'all-nonascii'].
No error handling guidance. If char_info receives text >64 chars, it silently truncates. If escape_string receives invalid format, it defaults to 'js' without warning. If unescape_string receives malformed escape sequences, behavior is undefined. No recovery hints for LLMs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
char_info 'text' parameter lacks length constraint documentation. Description says '(up to 64)' but no minLength/maxLength in schema. LLMs may pass 1000-char strings expecting full analysis, then receive truncated results without warning.
No tool composition support. Tools are isolated utilities with no cross-references. If an agent needs to escape a string, then inspect its characters, it must make two separate calls with no guidance on sequencing or data flow. Consider adding 'See also' hints in descriptions.