Skip to main content
Glama
Nam0101

android-mcp-toolkit

estimate-text-length-difference

Compare original and translated text lengths to detect layout issues in Android apps; configurable tolerance helps identify potential display problems.

Instructions

Compare original and translated text lengths to detect layout risk; configurable tolerancePercent (default 30%).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sourceTextYesOriginal text before translation
translatedTextYesTranslated text to compare against the original
tolerancePercentNoAllowed absolute percent difference between lengths before flagging risk

Implementation Reference

  • The main execution logic for the 'estimate-text-length-difference' tool. Computes character lengths of source and translated text, calculates absolute percentage change, checks against configurable tolerance, determines direction of change, and formats a verdict summary with details.
    async params => { const sourceLength = measureLength(params.sourceText); const translatedLength = measureLength(params.translatedText); const delta = translatedLength - sourceLength; const percentChange = sourceLength === 0 ? null : (delta / sourceLength) * 100; const exceeds = percentChange === null ? translatedLength > 0 : Math.abs(percentChange) > params.tolerancePercent; const direction = delta === 0 ? 'no change' : delta > 0 ? 'longer' : 'shorter'; const verdict = percentChange === null && translatedLength === 0 ? '✅ Both texts are empty; no length risk.' : percentChange === null ? '⚠️ Source length is 0; percent change undefined and translated text is present.' : exceeds ? '⚠️ Length difference exceeds tolerance (layout risk likely).' : '✅ Length difference within tolerance.'; const summary = [ verdict, `Source length: ${sourceLength}`, `Translated length: ${translatedLength}`, percentChange === null ? `Change: N/A (source length is 0; direction: ${direction})` : `Change: ${percentChange.toFixed(2)}% (${direction})`, `Tolerance: ±${params.tolerancePercent}%` ].join('\n'); return { content: [{ type: 'text', text: summary }] }; }
  • Zod input schema defining required sourceText and translatedText strings (non-empty), and optional tolerancePercent number (default 30%, range 1-500).
    const lengthDiffInputSchema = z.object({ sourceText: z.string().min(1).describe('Original text before translation'), translatedText: z.string().min(1).describe('Translated text to compare against the original'), tolerancePercent: z .number() .min(1) .max(500) .default(30) .describe('Allowed absolute percent difference between lengths before flagging risk') });
  • Function to register the 'estimate-text-length-difference' tool on the MCP server, specifying the tool name, title, description, input schema, and handler function.
    function registerTextLengthTool(server) { server.registerTool( 'estimate-text-length-difference', { title: 'Estimate text length difference', description: 'Compare original and translated text lengths to detect layout risk; configurable tolerancePercent (default 30%).', inputSchema: lengthDiffInputSchema }, async params => { const sourceLength = measureLength(params.sourceText); const translatedLength = measureLength(params.translatedText); const delta = translatedLength - sourceLength; const percentChange = sourceLength === 0 ? null : (delta / sourceLength) * 100; const exceeds = percentChange === null ? translatedLength > 0 : Math.abs(percentChange) > params.tolerancePercent; const direction = delta === 0 ? 'no change' : delta > 0 ? 'longer' : 'shorter'; const verdict = percentChange === null && translatedLength === 0 ? '✅ Both texts are empty; no length risk.' : percentChange === null ? '⚠️ Source length is 0; percent change undefined and translated text is present.' : exceeds ? '⚠️ Length difference exceeds tolerance (layout risk likely).' : '✅ Length difference within tolerance.'; const summary = [ verdict, `Source length: ${sourceLength}`, `Translated length: ${translatedLength}`, percentChange === null ? `Change: N/A (source length is 0; direction: ${direction})` : `Change: ${percentChange.toFixed(2)}% (${direction})`, `Tolerance: ±${params.tolerancePercent}%` ].join('\n'); return { content: [{ type: 'text', text: summary }] }; } ); }
  • src/index.js:29-29 (registration)
    Top-level call to register the text length tool on the main MCP server instance.
    registerTextLengthTool(server);
  • Utility function to accurately measure text length by converting to array (handles Unicode grapheme clusters properly).
    function measureLength(text) { return Array.from(text).length; }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nam0101/android-mcp-toolkit'

If you have feedback or need assistance with the MCP directory API, please join our Discord server