Skip to main content
Glama
aiexp1

Tanod MCP server

utilpeek: inspect a text for hidden or look-alike Unicode

text_unicode_inspect
Read-onlyIdempotent

Detect invisible, bidi, and homoglyph Unicode characters in text to reveal prompt-injection smuggling, Trojan Source attacks, and mixed-script confusables, with risk level and positions.

Instructions

utilpeek: Find invisible, bidi and homoglyph Unicode characters in text. For injected instructions use check_text_for_prompt_injection. Returns a security-oriented Unicode inspection: risk (low / medium / high) with reasons; invisible characters (zero-width, tag characters that can smuggle prompt-injection text, controls) with positions; bidi controls (Trojan Source, CVE-2021-42574); UTS #39 confusables and mixed-script words (pаypal with a Cyrillic а); combining-mark floods; scripts and normalization status; optionally the text normalized or with invisible characters stripped. Typically under 1 s. Price: USD 0.001. Free: 10 utilpeek calls per IP per UTC day. The submitted text is never logged or stored. Docs: https://tanod.dev/learn/detect-ascii-smuggling-invisible-unicode-api.html

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
textYesThe text (at most 200,000 characters).
skeletonNoUTS #39 confusable skeleton of the whole text.
normalizeNoAlso return the text in this normalization form: NFC, NFD, NFKC or NFKD (default none).
list_charsNoList the first N code points with name / category.
strip_invisibleNoReturn the text without bidi / zero-width / tag / control characters.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
bidiNo
riskNo
textNo
errorNoOnly on an error result: an object {code, message}, or the reason string of an x402 PaymentRequired object.
lengthNo
sourceNo
reasonsNo
scriptsNo
skeletonNo
combiningNo
invisibleNo
categoriesNo
utf8_bytesNo
confusablesNo
utf16_unitsNo
normalizationNo
unicode_versionNo
mixed_script_textNo
mixed_script_wordsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.0

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnly, idempotent, non-destructive), and the description adds substantive operational context beyond them: under 1 s latency, USD 0.001 price, 10 free calls per IP per UTC day, and an explicit privacy guarantee that submitted text is never logged or stored. It also enumerates the return categories (risk levels, positions, CVE references, confusables, normalization status).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then sibling routing, then return detail, then pricing/privacy/docs — a logical order with no filler sentences. It is long, but each clause carries distinct information; only the pricing/rate-limit block extends it beyond strict necessity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent inspection tool with a full output schema and 100% parameter coverage, the definition leaves nothing material unstated: it covers what is detected, return shape, cost, limits, privacy, and performance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter is self-documented in the schema, so the baseline is 3. The description touches on normalize/strip behavior only in passing ('optionally the text normalized or with invisible characters stripped'), adding framing but no syntax or semantics beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Find invisible, bidi and homoglyph Unicode characters in text') and immediately distinguishes itself from the adjacent sibling check_text_for_prompt_injection. An agent can tell what it does and when not to reach for it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the injected-instruction case to check_text_for_prompt_injection, which is the closest competing sibling. It gives clear context but no further when-not guidance (e.g., vs text_stats or redact_pii), so it stops short of full alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools