Android I18N Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Android I18N Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="right"> <a href="https://github.com/realskyrin/android-i18n-mcp/blob/main/README.md">English</a> | <a href="https://github.com/realskyrin/android-i18n-mcp/blob/main/README-ZH.md">中文</a> </div>
An MCP (Model Context Protocol) server that automatically translates Android app string resources to multiple languages by detecting changes in the default strings.xml files using Git diff.
📖 Project Introduction Article (Chinese)
<div align="center"> <img src="imgs/9548ffd0aeeebf8617bd116f6e82c3a7.png" alt="Batch Generation of Multi-language Files" width="100%"/> <p><em>Generate multiple language files in one go, batch translation at scale for improved efficiency</em></p> </div>
<div align="center"> <img src="imgs/f8c5cc563a3df28ecfaeda97011d0dbe.png" alt="MCP Tool Execution" width="100%"/> <p><em>MCP tool automatically detecting and translating missing languages</em></p> </div>
strings.xml files using Git diffThe server supports translation to 28 languages. You can configure which languages to translate to using the TRANSLATION_LANGUAGES environment variable.
zh-CN - Simplified Chinese (values-zh-rCN)zh-TW - Traditional Chinese Taiwan (values-zh-rTW)zh-SG - Traditional Chinese Singapore (values-zh-rSG)zh-HK - Traditional Chinese Hong Kong (values-zh-rHK)zh-MO - Traditional Chinese Macau (values-zh-rMO)en - English (values-en)es - Spanish (values-es)hi - Hindi (values-hi)fr - French (values-fr)ar - Arabic (values-ar)bn - Bengali (values-bn)pt - Portuguese (values-pt)ru - Russian (values-ru)ur - Urdu (values-ur)id - Indonesian (values-id)de - German (values-de)ja - Japanese (values-ja)sw - Swahili (values-sw)mr - Marathi (values-mr)te - Telugu (values-te)tr - Turkish (values-tr)ko - Korean (values-ko)ta - Tamil (values-ta)vi - Vietnamese (values-vi)az - Azerbaijani (values-az)be - Belarusian (values-be)it - Italian (values-it)uk - Ukrainian (values-uk)git clone <repository-url>
cd android-i18n-mcpnpm installnpm run buildcp .env.example .envEdit .env file with your configuration:
ANDROID_PROJECT_ROOT=/path/to/your/android/project
TRANSLATION_PROVIDER=openai
TRANSLATION_API_KEY=your_api_key_here
# Optional:
TRANSLATION_API_BASE_URL=https://api.openai.com/v1
TRANSLATION_MODEL=gpt-4o-mini
# Comma-separated list of languages to translate (optional, defaults to all 28 languages)
TRANSLATION_LANGUAGES=zh-CN,es,fr,de,ja,ko
# Source language setting (optional, defaults to 'en'. If your default strings.xml uses another language like Chinese, set it to 'zh-CN')
TRANSLATOR_SOURCE_LANGUAGE=en{
"mcpServers": {
"android-i18n": {
"command": "node",
"args": ["/path/to/android-i18n-mcp/build/index.js"],
"env": {
"ANDROID_PROJECT_ROOT": "/path/to/your/android/project",
"TRANSLATION_PROVIDER": "openai",
"TRANSLATION_API_BASE_URL": "https://api.deepseek.com/v1",
"TRANSLATION_API_KEY": "your_api_key_here",
"TRANSLATION_LANGUAGES": "zh-CN,es,fr,de", // Optional: specific languages
"TRANSLATOR_SOURCE_LANGUAGE": "en" // Optional: source language (default: en)
}
}
}
}Add the following to your codx.toml:
[mcp_servers.android-i18n]
command = "node"
args = ["/path/to/android-i18n-mcp/build/index.js"]
[mcp_servers.android-i18n.env]
ANDROID_PROJECT_ROOT = "/path/to/android/project"
TRANSLATION_PROVIDER = "deepseek"
TRANSLATION_API_BASE_URL = "https://api.deepseek.com/v1"
TRANSLATION_API_KEY = "sk-xxxxxx"
TRANSLATION_MODEL = "deepseek-chat"
TRANSLATION_LANGUAGES = "zh-CN,es,fr,de,ja,ko" # Optional: specific languages
TRANSLATOR_SOURCE_LANGUAGE = "en" # Optional: source language (default: en)You can configure AGENTS.md or CLAUDE.md to have the Agent automatically call MCP when strings.xml files are modified:
## Copy res update Guidelines
- Whenever a strings.xml file is modified, run android-i18n mcp to check and update copy.translate_all_modulesDetects changes in all default strings.xml files across all modules and translates them to all supported languages.
Parameters:
projectRoot (optional): Android project root directory. Uses ANDROID_PROJECT_ROOT env var if not provided.Example:
{
"tool": "translate_all_modules",
"arguments": {
"projectRoot": "/path/to/android/project"
}
}translate_moduleDetects changes in a specific module's default strings.xml and translates to all languages.
Parameters:
modulePath (required): Path to the Android module directoryExample:
{
"tool": "translate_module",
"arguments": {
"modulePath": "/path/to/android/project/app"
}
}check_changesChecks for uncommitted changes in default strings.xml files without performing translation.
Parameters:
projectRoot (optional): Android project root directoryExample:
{
"tool": "check_changes",
"arguments": {
"projectRoot": "/path/to/android/project"
}
}check_missing_languagesChecks which language directories are missing compared to the configured TRANSLATION_LANGUAGES environment variable.
Parameters:
projectRoot (optional): Android project root directoryExample:
{
"tool": "check_missing_languages",
"arguments": {
"projectRoot": "/path/to/android/project"
}
}create_and_translate_missing_languagesCreates missing language directories and translates the default strings.xml into them for all configured languages.
Parameters:
projectRoot (optional): Android project root directoryExample:
{
"tool": "create_and_translate_missing_languages",
"arguments": {
"projectRoot": "/path/to/android/project"
}
}values/strings.xml files since the last commit.strings.xml files, preserving existing translations and only updating changed ones.strings.xml files matching the pattern **/src/main/res/values/strings.xml.Currently supported:
Planned support:
TRANSLATION_PROVIDER=deepseek
TRANSLATION_API_KEY=your_deepseek_api_key
# Optional: defaults to deepseek-chat
TRANSLATION_MODEL=deepseek-chat
# Optional: specific languages to translate (defaults to all 28)
TRANSLATION_LANGUAGES=zh-CN,en,es,fr,de,ja,ko
# Optional: source language (defaults to 'en')
TRANSLATOR_SOURCE_LANGUAGE=enYou can configure which languages to translate to using the TRANSLATION_LANGUAGES environment variable:
# Don't set TRANSLATION_LANGUAGES or leave it empty TRANSLATION_LANGUAGES=zh-CN,es,fr,de,ja,ko TRANSLATION_LANGUAGES=zh-CNNote: If you specify languages that are not supported, the server will:
By default, the server assumes your default values/strings.xml file uses English (en). If your project uses a different language as the default (e.g., Chinese), you need to configure the source language:
Scenario 1: Default strings.xml uses English (no configuration needed)
# Don't set TRANSLATOR_SOURCE_LANGUAGE, defaults to 'en'Scenario 2: Default strings.xml uses Chinese
TRANSLATOR_SOURCE_LANGUAGE=zh-CNScenario 3: Using other languages as default
# Any supported language code
TRANSLATOR_SOURCE_LANGUAGE=es # Spanish
TRANSLATOR_SOURCE_LANGUAGE=fr # French
TRANSLATOR_SOURCE_LANGUAGE=ja # Japanese
# etc...Important Notes:
Run in development mode with hot reload:
npm run devBuild the project:
npm run buildandroid-i18n-mcp/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── xmlParser.ts # Android strings.xml parsing
│ ├── gitDiff.ts # Git diff analysis
│ ├── translator.ts # Translation API integration
│ └── translationManager.ts # Translation orchestration
├── package.json
├── tsconfig.json
├── .env.example
└── README.mdtranslatable attribute not set to falseMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.