Args
-
limitnumber optional cap on the number of projects returned
Sample prompt
"List my Sonenta projects."
MCP
Sonenta ships a native MCP server so any MCP-aware client — Claude Desktop, Cursor, your own agent — can search keys, propose translations, review PRs, and inspect the missing-key queue. Two lines of config, your token, done.
In your dashboard, go to Org Settings → API Keys → Create. Give it the mcp:* scope (covers all five tools below). The secret is shown once; copy the full snt_live_<prefix>.<secret> string.
Store it in your OS keychain or a local .env — never commit it. The key is bound to your org (and optionally one project); calls outside that scope return 404. Revoke from the dashboard at any time; revoked keys 401 on the next call.
The MCP server is published to npm and Homebrew. With npx you don't need to install anything — Claude Desktop pulls the latest version on every launch. With brew you get a pinned local binary, useful behind strict firewalls.
npx (recommended) 1// no install needed — npx pulls the latest @sonenta/mcp on demand2npx -y @sonenta/mcp --version Homebrew (alternative) Tap publishes at V1 1// optional: install once globally — coming with the V1 launch2brew install sonenta/tap/sonenta-mcp Open Claude Desktop's config file, add the sonenta entry under mcpServers, then quit and relaunch the app.
claude_desktop_config.json 1// macOS: ~/Library/Application Support/Claude/claude_desktop_config.json2// Windows: %APPDATA%/Claude/claude_desktop_config.json3{4 "mcpServers": {5 "sonenta": {6 "command": "npx",7 "args": ["-y", "@sonenta/mcp"],8 "env": {9 "SONENTA_API_KEY": "snt_live_<prefix>.<secret>",10 "SONENTA_PROJECTS": "<uuid1>,<uuid2>"11 }12 }13 }14} Three env vars total: SONENTA_API_KEY (required, the API key from your dashboard), SONENTA_PROJECTS (optional, CSV of project UUIDs — with a single UUID the agent skips list_projects; with several UUIDs, every tool call must pass project_uuid to disambiguate), and SONENTA_BASE_URL (optional — defaults to https://api.sonenta.com; override for self-hosted or staging).
SONENTA_PROJECTS requires @sonenta/mcp ≥ 0.11.0. On older releases, see Backwards compatibility below.
When SONENTA_PROJECTS lists more than one UUID, the agent can't infer which project you mean — every tool call must include project_uuid. With a single UUID (or only the legacy SONENTA_PROJECT set), it's optional and defaults to that project.
tools/call arguments 1// list_missing_keys — project_uuid is REQUIRED when SONENTA_PROJECTS lists more than one UUID2{3 "name": "list_missing_keys",4 "arguments": {5 "project_uuid": "<uuid1>",6 "namespace": "checkout",7 "language_code": "ja"8 }9} Phrase your prompt with the project in mind (« in the Checkout project, list missing keys for ja ») — the agent will resolve the project to its UUID and pass project_uuid on the tool call. For ambiguous prompts across multiple projects, the agent will call list_projects first.
Same JSON, different file. In Cursor, drop it at .cursor/mcp.json (project-scoped) or ~/.cursor/mcp.json (user-scoped). For other clients, follow your client's MCP-config docs — the mcpServers.sonenta entry is identical.
.cursor/mcp.json 1// .cursor/mcp.json (project-scoped) or ~/.cursor/mcp.json (user-scoped)2{3 "mcpServers": {4 "sonenta": {5 "command": "npx",6 "args": ["-y", "@sonenta/mcp"],7 "env": { "SONENTA_API_KEY": "snt_live_<prefix>.<secret>" }8 }9 }10} Once configured, the agent has these tools available. You don't call them by name — describe your intent in chat and the agent picks. Names below are the canonical identifiers, useful when reading agent traces or building custom agents on top of the same server.
limit number optional cap on the number of projects returned "List my Sonenta projects."
project_uuid string required "What languages and namespaces does the Checkout project ship?"
project_uuid string required namespace string narrow to one namespace (e.g. "checkout") language_code string narrow to one language (e.g. "ja") cursor string pagination cursor returned by a prior call limit number page size (default 20) "What translation keys are missing for ja in the checkout namespace?"
project_uuid string required key string required namespace string required language_code string required value string required "Propose \"Confirmer la commande\" for checkout.review.confirm in fr-CA."
project_uuid string required language_code string required payload object required JSON i18next-shaped translation map "Validate this translation file against the project's English source."
You pay when an agent mutates your project, not when it observes it. Reads and listings are free; writes burn one unit; bulk and AI-assisted ops scale with the work they do.
list_missing, list_keys, get_translation, search, plus auth / discover / meta. Browse the missing-key queue all day — it never touches your quota.
Each set / create / update / delete on a key or translation costs one unit, regardless of payload size.
Multi-key endpoints (e.g. acknowledge) bill per key touched: a 50-key acknowledge debits 50 units, with rollback on partial-reject.
Calls that invoke an LLM (auto-translate, AI Quality Review, suggest) bill 5 units per call. Higher weight reflects model cost.
Monthly quota, hard per-minute rate, concurrent MCP sessions, and whether writes are allowed. The same numbers feed the X-MCP-Quota-Remaining header on every response.
| Plan | Units / month | Rate | Sessions | Writes |
|---|---|---|---|---|
| Free | NaN | NaNreq/min | NaN | blocked |
| Hobby | NaN | NaNreq/min | NaN | blocked |
| Pro | NaN | NaNreq/min | NaN | blocked |
| Team | NaN | NaNreq/min | NaN | blocked |
Over the per-minute rate → 429 mcp_rate_limited with Retry-After (seconds). Over the monthly quota → 429 mcp_quota_exceeded with Retry-After set to the rollover. Free plan writes → 403 mcp_writes_disabled. Quotas reset on the 1st of each calendar month, UTC.
sonenta with 5 tools available. list_projects and return your workspaces. Stuck? Check Claude Desktop's logs at ~/Library/Logs/Claude/mcp*.log (macOS). 90% of issues are typos in the JSON or a stale token.
The singular SONENTA_PROJECT is still accepted as a fallback when SONENTA_PROJECTS is unset (since 0.11.0). If both are set, SONENTA_PROJECTS wins and the SDK prints to stderr: sonenta-mcp: both SONENTA_PROJECTS and SONENTA_PROJECT are set; SONENTA_PROJECTS wins. Remove SONENTA_PROJECT to silence this warning. The pre-0.4.0 names SONENTA_TOKEN and SONENTA_API_BASE are also still accepted as silent fallbacks.