npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@lambda-script/mercury

v2.0.0

Published

Translation proxy for Claude Code - transparently translates non-English text to reduce token consumption

Readme

@lambda-script/mercury

Translation proxy for MCP servers — transparently translates non-English tool results to English to reduce token consumption.

Works with any MCP client (Claude Code, desktop apps, custom implementations).

Why?

Non-English languages consume significantly more tokens than English due to tokenizer inefficiency. By translating MCP tool results to English before they reach Claude Code, mercury reduces input tokens by 28–64% depending on the language.

How it works

Claude Code ──→ mercury (stdio proxy) ──→ MCP Server
                 ├─ Intercept JSON-RPC tool results
                 ├─ Language Detection (franc + Unicode script fallback)
                 ├─ Translation (Google Translate / Claude Haiku)
                 ├─ Strip outputSchema from tools/list responses
                 └─ Skip code blocks, error results; translate strings inside JSON
  1. Wraps an MCP server command as a stdio proxy
  2. Intercepts JSON-RPC tools/call responses from the child MCP server
  3. Detects non-English text using franc trigram analysis (long text) or Unicode script detection (short text)
  4. Translates text blocks to English using the configured backend
  5. For JSON content, walks the structure and translates natural-language string values (skips URLs, file paths, dates, short identifiers)
  6. Strips outputSchema from tools/list responses to save tokens
  7. Passes through code blocks, images, and error results untouched
  8. Returns the translated result to Claude Code

Requirements

  • Node.js >= 20.0.0

Quick Start

Prepend npx @lambda-script/mercury -- to your existing MCP server command in .mcp.json.

Google Translate (default, no API key needed)

{
  "mcpServers": {
    "your-server": {
      "command": "npx",
      "args": ["@lambda-script/mercury", "--", "npx", "your-mcp-server"],
    }
  }
}

Claude Haiku (higher quality, requires API key)

Claude Code does not pass ANTHROPIC_* env vars to MCP servers automatically — you must set them explicitly:

{
  "mcpServers": {
    "your-server": {
      "command": "npx",
      "args": ["@lambda-script/mercury", "--", "npx", "your-mcp-server"],
      "env": {
        "MERCURY_BACKEND": "haiku",
        "ANTHROPIC_API_KEY": "sk-ant-...",
      }
    }
  }
}

Translation Backends

| Backend | MERCURY_BACKEND | API Key Required | Notes | |---------|-------------------|------------------|-------| | Google Translate (free) | google-free (default) | No | Uses google-translate-api-x. No signup needed. Auto-chunking for long text, retry with TLD rotation. | | Claude Haiku | haiku | Yes (ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN) | Higher quality, but adds LLM cost. |

Configuration

All configuration is via environment variables:

| Variable | Default | Description | |----------|---------|-------------| | MERCURY_BACKEND | google-free | Translation backend: google-free, haiku | | MERCURY_TARGET_LANG | en | Target language for translation | | MERCURY_SOURCE_LANG | auto | Source language (auto for detection) | | MERCURY_MIN_DETECT_LENGTH | 20 | Minimum text length for language detection | | MERCURY_LOG_LEVEL | info | Log level: debug, info, warn, error | | MERCURY_LOG_FILE | (none) | Log to file instead of stderr (useful for MCP servers where stderr is swallowed) | | MERCURY_HAIKU_MODEL | claude-haiku-4-5-20251001 | Model ID for the haiku backend |

Haiku backend only

| Variable | Description | |----------|-------------| | ANTHROPIC_API_KEY | API key for Haiku translation | | ANTHROPIC_AUTH_TOKEN | OAuth token (alternative to API key). The anthropic-beta: oauth-2025-04-20 header is added automatically. |

Benchmark

Measured with the Anthropic token counting API (claude-sonnet-4-20250514 tokenizer) using 5 realistic MCP tool result scenarios (wiki articles, API responses with JSON, documentation with code blocks, long articles, and mixed multi-block results).

Token Reduction by Language

Hindi          ████████████████████████████████░░░░░░░░░░░░░░░░░░░  64%  4009 → 1430 tok
Arabic         ████████████████████████████░░░░░░░░░░░░░░░░░░░░░░░  57%  3326 → 1424 tok
Korean         █████████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░  51%  2927 → 1430 tok
Russian        █████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  43%  2513 → 1433 tok
Japanese       ████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  41%  2538 → 1488 tok
German         ████████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  41%  2403 → 1430 tok
French         ████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  33%  2120 → 1427 tok
Spanish        ███████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  30%  2037 → 1424 tok
Chinese (Sim.) ██████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  28%  1992 → 1427 tok
English        ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░   0%  (baseline)

Token counts are the sum across all 5 scenarios. Scenarios with JSON/code blocks (skipped by Mercury) show lower reduction rates than text-only scenarios.

Translation Fidelity (Mercury output tokens vs original EN)

Closer to 1.00x = better. Values far from 1.00x indicate information loss or added verbosity.

| Language | Google Free | |----------|-------------| | Hindi | 1.00x (+0%) | | Arabic | 1.00x (+0%) | | Korean | 1.00x (+0%) | | Russian | 1.01x (+1%) | | Japanese | 1.04x (+4%) | | German | 1.00x (+0%) | | French | 1.00x (+0%) | | Spanish | 1.00x (+0%) | | Chinese (Sim.) | 1.00x (+0%) |

The google-free backend produces translations within ~4% of the original English token count at $0 translation cost.

Run benchmarks yourself: npm run benchmark (requires ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN).

Troubleshooting

Translation not working / No token savings

Check the logs: Set MERCURY_LOG_LEVEL=debug to see detailed translation activity. If Mercury detects the text is already in English, it skips translation.

Check your backend: If using haiku, verify ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN is set correctly in the env field of .mcp.json.

Haiku backend authentication error

Make sure to set the auth env vars in .mcp.json. Claude Code does not automatically pass ANTHROPIC_* variables to MCP servers.

Example:

{
  "mcpServers": {
    "your-server": {
      "command": "npx",
      "args": ["@lambda-script/mercury", "--", "npx", "your-mcp-server"],
      "env": {
        "MERCURY_BACKEND": "haiku",
        "ANTHROPIC_API_KEY": "sk-ant-..."
      }
    }
  }
}

Child process fails to start

Error: Failed to open stdio pipes for child process

This usually means the child command doesn't exist or can't be executed. Verify:

  • The command path is correct (e.g., npx, node, or absolute path)
  • The MCP server package is installed or accessible
  • Run the child command directly to confirm it works: npx your-mcp-server

Translation quality issues

Google Translate (free) is optimized for speed and zero cost. For higher quality translation, use the haiku backend (requires API key).

Graceful degradation

If translation fails (network error, API limit, etc.), Mercury logs a warning and returns the original text unchanged. Your MCP server will continue working, but without token savings for that request.

Development

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

# Watch mode
npm run dev

# Run MCP tool result benchmark
npm run benchmark

| Command | Description | |---------|-------------| | npm run build | Production build with tsup | | npm run dev | Watch mode build | | npm test | Run test suite | | npm run test:watch | Run tests in watch mode | | npm run test:coverage | Run tests with coverage | | npm run lint | Lint source code | | npm run typecheck | Type check without emitting | | npm run benchmark | Run MCP tool result token reduction benchmark |

Architecture

src/
├── index.ts              # CLI entry point & backend selection
├── config.ts             # Environment-based configuration
├── detector/
│   ├── index.ts          # Detector interface
│   └── franc.ts          # franc + Unicode script-based language detection
├── translator/
│   ├── index.ts          # Translator interface
│   ├── google-free.ts    # Google Translate (free, auto-chunking, retry with TLD rotation)
│   └── haiku.ts          # Claude Haiku backend
├── transform/
│   └── tool-result.ts    # MCP tool result translation (translates JSON strings, skips code/errors)
├── proxy/
│   ├── stdio.ts          # MCP stdio proxy (JSON-RPC message interception)
│   └── tracker.ts        # JSON-RPC request ID → method name tracker
└── utils/
    ├── logger.ts         # Logging utility
    ├── lang.ts           # Language name mappings
    └── tokens.ts         # Unicode script-based token estimation

License

MIT