# io.github.intlpull/intlpull (npm · @intlpullhq/mcp-server)

AI-powered i18n platform with 50+ tools for translations, OTA releases, and more.

- Trust score: 64/100 (medium)
- Change this week: +42
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- npm · `@intlpullhq/mcp-server`: 64/100 (this document), [markdown](https://verifymcp.io/servers/intlpull-intlpull/intlpullhq-mcp-server.md), [page](https://verifymcp.io/servers/intlpull-intlpull/intlpullhq-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@intlpullhq/mcp-server`
- Version: `0.2.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Supply Chain Security**: 83/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known medium-severity CVE affects hono 4.12.33, reached via @modelcontextprotocol/sdk > hono. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (121 of 122), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: the declared repository URL returned HTTP 404.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 176 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 3203 tokens (~60/item across 53 items; 51 tools + 2 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 30/100
  - Stability observed for 9 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 91/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 74% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add intlpull-intlpull -- npx -y @intlpullhq/mcp-server
```

### Codex

```bash
codex mcp add intlpull-intlpull -- npx -y @intlpullhq/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "intlpull-intlpull": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@intlpullhq/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add intlpull-intlpull --command npx --arg -y --arg @intlpullhq/mcp-server
```

### Hermes

```yaml
mcp_servers:
  intlpull-intlpull:
    command: "npx"
    args: ["-y", "@intlpullhq/mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "intlpull-intlpull": {
      "command": "npx",
      "args": [
        "-y",
        "@intlpullhq/mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 64, −1)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail

### 2026-08-03 (score 65, +49)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Stability: unverified → 0.27
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] Licence: MIT

### 2026-08-02 (score 16, −14)

- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-08-01 (score 30, +30)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] MCP protocol: unverified → pass

### 2026-07-31 (score 0, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 0, −22)

- [security regression] Malware scan: pass → unverified
- [functional regression] Dependency health: partial → unverified

### 2026-07-28 (score 22, −52)

- [security regression] Install scripts: pass → unverified
- [security regression] Provenance: fail → unverified
- [security regression] Known CVEs: partial → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Maintenance: pass → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] License: pass → unverified
- [functional] Licence: MIT

### 2026-07-27 (score 74)

First indexed and scored.

## MCP tools (51)

### `translate_strings` (~83 tokens)

Translate strings from source language to target language using AI

Input parameters:

- `sourceLanguage` (string, required): Source language code (e.g., "en", "de", "ja"). Required - no default assumed.
- `strings` (array, required): Array of strings to translate
- `targetLanguage` (string, required): Target language code (e.g., "es", "fr", "de")

### `translate_file` (~107 tokens)

Translate all strings from an extracted IntlPull JSON file

Input parameters:

- `inputFile` (string, required): Path to the .intlpull-extracted-*.json file
- `outputFile` (string): Path to save the translated JSON file
- `sourceLanguage` (string, required): Source language code (e.g., "en", "de", "ja"). Required - no default assumed.
- `targetLanguage` (string, required): Target language code (e.g., "es", "fr", "de")

### `list_languages` (~15 tokens)

List all supported languages for translation

### `get_translation_status` (~30 tokens)

Get the translation status for a project

Input parameters:

- `projectPath` (string, required): Path to the project directory

### `generate_translation_file` (~71 tokens)

Generate a translation JSON file for a specific language

Input parameters:

- `extractedFile` (string, required): Path to the extracted strings file
- `format` (string): Output format: flat or nested JSON
- `outputDir` (string): Output directory for translation files
- `targetLanguage` (string, required): Target language code

### `get_branch_info` (~32 tokens)

Get current git branch information and translation branch strategy

Input parameters:

- `projectPath` (string): Path to the project directory

### `set_branch_strategy` (~105 tokens)

Configure how translations are managed across git branches

Input parameters:

- `baseBranch` (string): Base branch for merging translations (e.g., main, master)
- `projectPath` (string, required): Path to the project directory
- `sourceLanguage` (string): Source language code (required if no .intlpull.json config exists yet)
- `strategy` (string, required): Branch strategy: per-branch (separate translations per branch), merged (sync with base branch), none (ignore branches)

### `merge_branch_translations` (~104 tokens)

Merge translations from current branch into base branch or vice versa

Input parameters:

- `conflictResolution` (string): How to handle conflicts: keep-base (default), keep-branch, or keep-both (adds suffix)
- `direction` (string, required): Direction: to-base (merge feature->main), from-base (sync main->feature)
- `namespace` (string): Namespace to merge (or all if not specified)
- `projectPath` (string, required): Path to the project directory

### `list_branch_translations` (~46 tokens)

List translation files specific to the current branch

Input parameters:

- `projectPath` (string, required): Path to the project directory
- `showDiff` (boolean): Show diff compared to base branch

### `get_platform_info` (~41 tokens)

Get current platform configuration and available platforms for multi-platform projects (React Native, Expo, etc.)

Input parameters:

- `projectPath` (string): Path to the project directory

### `set_platform` (~51 tokens)

Set the current platform context for translations (ios, android, web, or default)

Input parameters:

- `platform` (string, required): Platform to set as current context
- `projectPath` (string, required): Path to the project directory

### `configure_platform` (~72 tokens)

Configure platform-specific settings (output directory, overrides) for multi-platform projects

Input parameters:

- `namespaces` (array): Platform-specific namespaces to include
- `outputDir` (string): Custom output directory for this platform
- `platform` (string, required): Platform to configure
- `projectPath` (string, required): Path to the project directory

### `set_platform_override` (~80 tokens)

Set a platform-specific translation override (e.g., "Tap" on iOS vs "Click" on Web)

Input parameters:

- `key` (string, required): Translation key to override
- `platform` (string, required): Platform for the override (not default)
- `projectPath` (string, required): Path to the project directory
- `value` (string, required): Platform-specific value

### `download_translations` (~90 tokens)

Download translations from IntlPull server with branch and platform context

Input parameters:

- `branch` (string): Branch to download from (defaults to current git branch or main)
- `format` (string): Output format
- `languages` (array): Languages to download. Downloads all if not specified.
- `platform` (string): Platform to download translations for
- `projectPath` (string, required): Path to the project directory

### `glossary_lookup` (~67 tokens)

Look up terms in the project glossary to ensure consistent terminology

Input parameters:

- `limit` (number): Maximum number of results
- `query` (string, required): Term to look up in the glossary
- `targetLanguage` (string): Target language code for translations (e.g., "es", "fr")

### `glossary_check_text` (~46 tokens)

Check text for glossary terms and get their approved translations

Input parameters:

- `targetLanguage` (string, required): Target language code for translations
- `text` (string, required): Text to check for glossary terms

### `tm_search` (~82 tokens)

Search translation memory for similar translations

Input parameters:

- `minQuality` (number): Minimum quality score (0-1)
- `sourceLanguage` (string, required): Source language code (e.g., "en", "de", "ja"). Required - no default assumed.
- `targetLanguage` (string, required): Target language code
- `text` (string, required): Source text to search for

### `tm_add` (~83 tokens)

Add a translation pair to translation memory

Input parameters:

- `context` (string): Context for this translation
- `quality` (number): Quality score (0-1)
- `sourceLanguage` (string, required): Source language code
- `sourceText` (string, required): Source text
- `targetLanguage` (string, required): Target language code
- `targetText` (string, required): Translated text

### `tm_stats` (~13 tokens)

Get translation memory statistics

### `import_translations` (~130 tokens)

Import translations from a local file to IntlPull. Reads the file and uploads to the server.

Input parameters:

- `branch` (string): Branch name to import translations to
- `filePath` (string, required): Path to translation file to import (JSON or YAML)
- `language` (string): Target language code (auto-detected from filename if omitted)
- `namespace` (string): Target namespace
- `options` (object): Import options
- `platform` (string): Platform to tag imported keys with (ios, android, web)
- `projectPath` (string): Path to project root (for reading config)

### `import_preview` (~182 tokens)

Preview what translations would be imported without executing. Shows new keys, existing keys, and potential deletions. Optionally includes TM analysis to estimate translation memory coverage.

Input parameters:

- `filePath` (string, required): Path to translation file to preview
- `includeTMAnalysis` (boolean): Include Translation Memory analysis for pre-translation opportunities
- `language` (string): Language code (auto-detected if omitted)
- `namespace` (string): Target namespace
- `projectPath` (string): Path to project root
- `sourceLanguage` (string): Source language code for TM analysis (required if includeTMAnalysis is true)
- `targetLanguages` (array): Target language codes for TM analysis (e.g., ["es", "fr", "de"])
- `tmMinQuality` (number): Minimum TM match quality threshold (0-1). Default 0.85 (85%)

### `import_history` (~31 tokens)

Get recent import operations for a project

Input parameters:

- `limit` (number)
- `projectPath` (string)

### `migrate_translations` (~97 tokens)

Migrate translation files to IntlPull with auto project/language creation.

Input parameters:

- `dryRun` (boolean)
- `namespace` (string)
- `path` (string, required): Path to translation files directory
- `pattern` (string)
- `projectName` (string, required): Project name (creates if not exists)
- `sourceLanguage` (string, required): Source language code (e.g., "en", "de", "ja"). Required.

### `create_project` (~47 tokens)

Create a new IntlPull project with languages

Input parameters:

- `description` (string)
- `name` (string, required)
- `sourceLanguage` (string, required)
- `targetLanguages` (array, required)

### `detect_translation_files` (~32 tokens)

Scan directory and detect translation files without uploading.

Input parameters:

- `path` (string, required)
- `pattern` (string)

### `add_languages` (~38 tokens)

Add languages to an existing project

Input parameters:

- `languages` (array, required)
- `projectId` (string, required)
- `skipTranslation` (boolean)

### `publish_ota_release` (~64 tokens)

Publish an OTA release for mobile/web SDKs. Creates a versioned bundle that apps can download at runtime.

Input parameters:

- `branch` (string): Translation branch to publish from
- `projectPath` (string)
- `version` (string): Version string for this release

### `list_ota_releases` (~34 tokens)

List all OTA releases for a project

Input parameters:

- `limit` (number)
- `projectPath` (string)

### `delete_ota_release` (~31 tokens)

Delete an OTA release

Input parameters:

- `projectPath` (string)
- `releaseId` (string, required)

### `get_ota_manifest` (~43 tokens)

Get the OTA manifest for SDKs (includes version, bundle URLs, and delta info)

Input parameters:

- `branch` (string)
- `projectPath` (string)

### `pin_ota_version` (~120 tokens)

Pin an OTA version for critical flows (checkout, payment, onboarding). Ensures consistent translations during the flow, preventing mid-transaction text changes.

Input parameters:

- `flowType` (string): Type of critical flow for analytics
- `projectPath` (string): Path to project root
- `sessionId` (string, required): Unique session identifier (e.g., user session ID, cart ID)
- `ttlMinutes` (number): Time-to-live in minutes (max 60 recommended)
- `version` (string): Specific version to pin (defaults to current latest)

### `unpin_ota_version` (~42 tokens)

Unpin an OTA version when critical flow completes. Call this after checkout success/failure.

Input parameters:

- `sessionId` (string, required): Session ID that was pinned

### `get_pinned_version` (~36 tokens)

Check if a session has a pinned OTA version and get its details.

Input parameters:

- `sessionId` (string, required): Session ID to check

### `list_pinned_versions` (~23 tokens)

List all active pinned OTA versions (for debugging/monitoring).

### `upload_translations` (~56 tokens)

Upload source translation keys to IntlPull. Auto-detects project, framework, and git branch.

Input parameters:

- `dryRun` (boolean)
- `file` (string): Specific file to upload
- `projectPath` (string)

### `search_translations` (~76 tokens)

Search translations with filters and pagination. Returns minimal data to avoid context window blowup.

Input parameters:

- `language` (string)
- `limit` (number)
- `namespace` (string)
- `offset` (number)
- `projectPath` (string)
- `query` (string, required)
- `status` (string)

### `create_translation_key` (~61 tokens)

Create a new translation key with initial value.

Input parameters:

- `description` (string)
- `key` (string, required)
- `namespace` (string)
- `platforms` (array)
- `projectPath` (string)
- `value` (string, required)

### `bulk_create_keys` (~44 tokens)

Create multiple translation keys at once. Efficient for batch operations.

Input parameters:

- `autoTranslate` (boolean)
- `keys` (array, required)
- `projectPath` (string)

### `email_templates_list` (~51 tokens)

List email templates for a project. Shows both remote templates from IntlPull and local templates in the emails/ directory.

Input parameters:

- `projectPath` (string): Path to the project directory containing .intlpull.json

### `email_templates_pull` (~92 tokens)

Pull email templates from IntlPull API and write them as HTML files to the emails/ directory. Each template gets its own subdirectory with {lang}.html files.

Input parameters:

- `languages` (array): Languages to pull (e.g., ["en", "es", "fr"]). Defaults to ["en"] if not specified.
- `projectPath` (string): Path to the project directory containing .intlpull.json

### `email_templates_push` (~89 tokens)

Push local HTML email templates from the emails/ directory to IntlPull API. Reads {slug}/{lang}.html files and uploads them as template translations.

Input parameters:

- `dryRun` (boolean): Preview changes without applying them
- `projectPath` (string): Path to the project directory containing .intlpull.json
- `templates` (array): Template slugs to push (all templates if not specified)

### `email_templates_status` (~53 tokens)

Compare local email templates with remote templates in IntlPull. Shows which templates exist locally only, remotely only, or are synced.

Input parameters:

- `projectPath` (string): Path to the project directory containing .intlpull.json

### `list_documents` (~29 tokens)

List all documents in a project

Input parameters:

- `projectId` (string, required): Project ID to list documents for

### `get_document` (~35 tokens)

Get details of a specific document

Input parameters:

- `documentId` (string, required): Document ID
- `projectId` (string, required): Project ID

### `upload_document` (~64 tokens)

Upload a new document for translation

Input parameters:

- `filePath` (string, required): Absolute path to local file to upload
- `projectId` (string, required): Project ID
- `sourceLanguage` (string): Source language code
- `targetLanguages` (array): List of target language codes

### `download_document` (~58 tokens)

Download a translated document

Input parameters:

- `documentId` (string, required): Document ID
- `language` (string, required): Target language code
- `outputPath` (string, required): Absolute path to save the downloaded file
- `projectId` (string, required): Project ID

### `register_webhook` (~142 tokens)

Register a webhook to receive IntlPull events. Webhooks can trigger CI/CD pipelines, send Slack notifications, or integrate with other systems.

Input parameters:

- `enabled` (boolean): Whether the webhook is active
- `events`: Events to receive. Use "*" for all events or an array of specific event types.
- `secret` (string): Secret for HMAC signature verification (recommended for security)
- `timeoutMs` (number): Request timeout in milliseconds
- `url` (string, required): Webhook endpoint URL (must be HTTPS in production)
- `webhookId` (string, required): Unique identifier for this webhook (e.g., "ci-deploy", "slack-notify")

### `unregister_webhook` (~28 tokens)

Remove a registered webhook

Input parameters:

- `webhookId` (string, required): ID of the webhook to remove

### `list_webhooks` (~18 tokens)

List all registered webhooks and their configurations

### `get_recent_events` (~64 tokens)

Get recent events for debugging and monitoring. Shows the last 100 events.

Input parameters:

- `limit` (number): Maximum number of events to return (max 100)
- `projectId` (string): Filter by project ID
- `type` (string): Filter by event type

### `test_webhook` (~53 tokens)

Send a test event to a webhook to verify it is working correctly

Input parameters:

- `projectId` (string): Project ID to use in the test event
- `webhookId` (string, required): ID of the webhook to test

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/intlpull-intlpull/intlpullhq-mcp-server#diagnostics

## Score history

- 2026-08-04: 64
- 2026-08-03: 65
- 2026-08-02: 16
- 2026-08-01: 30
- 2026-07-31: 0
- 2026-07-30: 0
- 2026-07-28: 22
- 2026-07-27: 74

## Links

- npm package: https://www.npmjs.com/package/@intlpullhq/mcp-server
- Socket report: https://socket.dev/npm/package/@intlpullhq/mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/intlpull-intlpull/intlpullhq-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/intlpull-intlpull/intlpullhq-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/intlpull-intlpull/intlpullhq-mcp-server
