Skip to main content
Glama

Server Details

Find hidden Unicode (zero-width, bidi, tag payloads), homoglyphs and lookalike names in text.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4/5.0

Scored across 3 tools

Disambiguation4/5

The three tools have distinct actions: clean_text mutates, scan_text reports findings, compare_names compares against a protected list. clean_text and scan_text target the same character domain and share terminology, but the descriptions clearly separate remediation from detection, leaving little real ambiguity.

Naming Consistency5/5

All three tools follow a clean verb_noun snake_case pattern (clean_text, compare_names, scan_text) with no mixed conventions or vague verbs.

Tool Count5/5

Three tools is well within the appropriate range for a focused Unicode-safety utility, and each tool covers a distinct operation (detect, remediate, compare) without redundancy.

Completeness4/5

The surface covers the core lifecycle: scanning for hidden characters, cleaning them, and comparing confusables against protected names. Minor gaps exist, such as no batch/multi-input endpoints or a standalone normalisation/skeleton preview, but agents can work around these.

Available Tools

3 tools
clean_textRemove hidden Unicode from textA
Read-onlyIdempotent
Inspect

Return the text with invisible characters, bidi controls, tag characters and control characters removed and unusual spaces turned into normal spaces. By default ZWJ/ZWNJ/VS16 are kept inside emoji sequences, between letters of joining scripts (Arabic, Persian) and after an Indic virama (keep_joiners=true); strict=true removes them everywhere. Optional: map lookalike letters to Latin (lookalikes) and apply NFKC normalisation (nfkc). Read-only. Same engine as GET /api/clean.

NameRequiredDescriptionDefault
nfkcNoApply Unicode NFKC first (fullwidth and math letters → plain).
textYesText to inspect (up to 2000 UTF-16 code units).
spacesNoTurn unusual spaces into a normal space.
strictNoStrict mode: remove every joiner and variation selector, even in emoji and Persian/Indic text (overrides keep_joiners).
lookalikesNoMap lookalike letters (e.g. Cyrillic а) to Latin. Changes legitimate non-Latin text too.
keep_joinersNoKeep ZWJ/ZWNJ/VS16 where they are legitimate: emoji ZWJ sequences and VS16 emoji presentation, between letters of joining scripts (Arabic, Persian), and after an Indic virama. Joiners elsewhere are always removed.

Output Schema

NameRequiredDescription
textYes
notesNo
lengthNo
changedYes
optionsNo
removedYes
versionYes
joinersKeptNo
lookalikesMappedNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the description's 'Read-only' line is redundant, but it adds real behavioural detail beyond annotations: exactly what is stripped, that ZWJ/ZWNJ/VS16 survive in emoji, joining scripts and after a virama by default, and that lookalikes will rewrite legitimate non-Latin text. That last point is a genuinely useful side-effect warning.

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?

Three front-loaded sentences that pack the default joiner policy first and the optional flags second; almost every clause carries information. The 'Read-only' clause restates an annotation and is the one piece of waste.

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

Completeness4/5

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

With an output schema present, the description need not explain return values, and it adequately covers the default vs. strict joiner policy, the two opt-in transforms, and the risk of lookalike mapping. The only gap is guidance on choosing this tool over scan_text, which is a usage rather than completeness issue.

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%, so all six parameters are already documented, including the strict-overrides-keep_joiners interaction. The description restates the lookalikes and nfkc options without adding syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description opens with a precise verb + resource: return the text with invisible characters, bidi controls, tag characters and control characters removed, plus space normalisation. That is far more specific than the name 'clean_text' alone. It does not, however, say how it differs from the sibling scan_text (detect vs. clean) or compare_names.

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

Usage Guidelines3/5

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

Usage is implied by contrast with the siblings' names and by the option set (sanitise text before further processing), but there is no explicit when-to-use / when-not-to-use statement and no named alternative. 'Same engine as GET /api/clean' helps an agent that knows the HTTP surface, not one that only sees the tool list.

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

compare_namesCheck a name for lookalike impersonationA
Read-onlyIdempotent
Inspect

Check whether a name, username, domain label or brand looks the same as any of up to 50 protected names (for example "pаypal" with a Cyrillic а vs "paypal"), using a UTS #39-style confusable skeleton (curated subset, case and accents ignored). Read-only. Same engine as GET /api/compare.

NameRequiredDescriptionDefault
nameYesName, username, domain label or brand to test.
targetsYes1 to 50 protected names.

Output Schema

NameRequiredDescription
nameNo
notesNo
resultsYes
versionYes
nameRiskNo
skeletonYes
nameScriptsNo
confusableWithYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so 'Read-only' is redundant, but the description adds genuinely useful behavior: the UTS #39-style confusable skeleton, that it is a curated subset, and that case and accents are ignored. This tells the agent what counts as a match and where recall may be limited.

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?

Core purpose is front-loaded in the first clause, with caveats parenthesized. The parenthetical example and algorithm notes are dense but each earns its place; 'Read-only' duplicates the annotation slightly.

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

Completeness4/5

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

An output schema exists so return values need no explanation, and annotations cover the safety profile. The description supplies matching semantics and limits; the only gap is sibling differentiation against clean_text/scan_text.

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

Parameters4/5

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

Schema coverage is 100% so baseline is 3, but the description adds semantic detail beyond the schema: the 50-target cap is surfaced and the normalization rules (case/accent-insensitive confusable skeleton) clarify what values 'name' really compares on.

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 concrete verb ('check whether... looks the same') with the resource (name/username/domain label/brand) and the comparison target (up to 50 protected names). The homoglyph example ('pаypal' with Cyrillic а) makes the operation immediately distinguishable from the sibling text tools.

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

Usage Guidelines3/5

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

The impersonation-check framing implies the use case, but there is no explicit when-to-use/when-not guidance and no routing to clean_text or scan_text. The 'Same engine as GET /api/compare' note is provenance, not selection guidance.

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

scan_textScan text for hidden or deceptive UnicodeA
Read-onlyIdempotent
Inspect

Find invisible characters, bidi controls (Trojan Source), hidden Unicode tag payloads (decoded), variation-selector runs, control characters, unusual spaces, mixed-script words and lookalike letters. ZWJ/ZWNJ/VS16 in legitimate context (emoji sequences, Persian/Arabic joining, Indic virama) are reported as info joiner_in_context and do not raise risk; elsewhere they stay medium. Lone surrogates are flagged. Returns a risk level (none/low/medium/high), counts, and findings with UTF-16 offsets and code points. Read-only. Same engine as GET /api/scan.

NameRequiredDescriptionDefault
textYesText to inspect (up to 2000 UTF-16 code units).

Output Schema

NameRequiredDescription
riskYes
notesNo
totalYes
countsYes
lengthNo
versionYes
findingsYes
truncatedNo
codePointsNo
tagPayloadNo
normalizedNfkcDiffersNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare read-only/idempotent/non-destructive, so the bar is lower, and the description still adds real value: it explains the risk-tiering logic (ZWJ/ZWNJ/VS16 in legitimate emoji, Persian/Arabic joining, or Indic virama contexts downgrade to info joiner_in_context, otherwise medium) and notes lone surrogates are flagged. That conditional-severity policy is behavioral nuance not present in any structured field.

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?

The detection list is front-loaded and every clause names a distinct finding category, so density is earned. The trailing 'Read-only. Same engine as GET /api/scan.' is slightly redundant against the annotations but is short and provides consistency context.

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

Completeness4/5

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

With an output schema present, the description needn't restate return shape, yet it still summarizes risk level, counts, findings, UTF-16 offsets and code points. Detection categories, edge-case exceptions, and severity policy are all covered; the only gap is how it fits into a workflow with clean_text.

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?

Only one parameter and schema coverage is 100% including the 2000 UTF-16 unit limit, so the schema does all the work. The description never mentions the input bound or what counts as valid text, so it adds nothing beyond structured data — baseline 3 applies.

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?

Opens with a specific verb ('Find') and enumerates the concrete resource classes it detects: invisible characters, bidi controls, tag payloads, variation-selector runs, mixed-script words, lookalikes. That enumeration makes it unmistakably a detection-only scanner, distinct from clean_text (which would mutate) and compare_names (which compares).

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

Usage Guidelines3/5

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

Usage is implied by the detection framing and 'Read-only', but there is no explicit when-to-use statement and no routing to siblings — nothing says whether to run this before clean_text or how it relates to compare_names. The 'Same engine as GET /api/scan' line is endpoint parity, not usage guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • First observedclean_text
    • First observedcompare_names
    • First observedscan_text

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to scan text and compare strings for hidden prompt-injection content such as ASCII smuggling, zero-width or emoji steganography, bidirectional text tricks, and homoglyphs. It provides one detection layer, not a full defense against plainly written prompt injection.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Bilingual (EN/ES) AI-writing detection that shows the evidence instead of a percentage: named tells with line and column, hidden-character inspection, and citation cross-checking against a document's own bibliography. Seven of its nine tools run entirely locally and never touch the network.
    10
    28
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables users to audit other MCP servers' tool definitions for agentic attack classes such as tool poisoning, sensitive-path references in metadata, and tool shadowing via invisible Unicode or homoglyphs. It can analyze a tools/list payload, check a single description string, or connect to a public remote MCP URL to fetch and audit its tool list.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables an agent to check a document file or a retrieved piece of text for text a person cannot see and for instruction-style payloads before the agent reads or acts on it, returning findings with location, reason and severity plus a blocked flag when the content should not be trusted. The hidden text itself is withheld from tool results by default so the payload is not delivered to the requesting agent.
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources