Skip to main content
Glama

PO Translation MCP Server

MCP server for translating Django gettext .po files with AI assistance.

Features

  • analyze_po_file: Analyze .po files, get statistics and untranslated/fuzzy entries

  • validate_and_update_po_file: Validate and update translations in one operation

  • Smart Validation: Variables, HTML, URLs, JavaScript preservation checks

Installation

npm install npm run build

Claude Code Configuration

{ "mcpServers": { "po-mcp": { "command": "node", "args": ["/path/to/po-mcp/dist/index.js"] } } }

Tools

analyze_po_file

Analyze a .po file and get translation status.

Input:

{ "po_file_path": "/absolute/path/to/locale/tr/LC_MESSAGES/django.po" }

Output:

{ "file_path": "/absolute/path/to/django.po", "statistics": { "translated": 2876, "untranslated": 2, "fuzzy": 0, "total": 2878 }, "untranslated_entries": [ { "msgid": "Departure Place ID", "msgstr": "", "context": null } ], "fuzzy_entries": [] }

validate_and_update_po_file

Validate translations and update the PO file.

Input:

{ "po_file_path": "/absolute/path/to/locale/tr/LC_MESSAGES/django.po", "translations": [ { "msgid": "Departure Place ID", "msgstr": "Kalkis Yeri ID", "context": null } ], "strict": true, "dry_run": false, "force": false }

Parameters:

Parameter

Type

Default

Description

po_file_path

string

required

Absolute path to .po file

translations

array

required

Translation entries

strict

boolean

true

Enable all validation checks

dry_run

boolean

false

Preview without writing

force

boolean

false

Update even if invalid

Output:

{ "validation": { "invalids": [], "total": 1, "valid": true }, "update": { "success": true, "updated_entries": 1, "file_path": "/absolute/path/to/django.po", "errors": [] }, "message": "Updated 1 translations." }

Data Structure

Both tools use the same minimal entry format:

{ msgid: string; // Original text msgstr: string; // Translation context: string | null; // msgctxt (for disambiguation) }

Workflow

1. analyze_po_file └── Get untranslated/fuzzy entries 2. AI translates (Claude) └── msgstr filled with translations 3. validate_and_update_po_file └── Validate & write to file

Validation Checks (strict: true)

  • Variables: %(name)s, {0}, {name}, {{ var }}

  • HTML: <tag>, </tag>, <tag attr="value">

  • URLs: https://..., www....

  • JavaScript: console.log(), module.method()

Project Structure

po-mcp/ ├── src/ │ ├── index.ts # MCP server │ ├── types.ts # Type definitions │ ├── tools/ │ │ ├── analyze.ts │ │ ├── validate.ts │ │ ├── update.ts │ │ └── validate-and-update.ts │ └── parser/ │ └── po-parser.ts ├── dist/ # Compiled JS └── package.json

Development

npm run build # Build npm run watch # Watch mode

License

MIT

-
security - not tested
F
license - not found
-
quality - not tested

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/omert11/po-mcp'

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