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