Connect your AI tools
One URL wires Cursor, Gemini CLI, Claude, ChatGPT, Copilot, Figma and anything else that speaks MCP straight into your translations — so your agent adds the key while it writes the feature that needs it, and your designer lays out the real German before it ships. Tools that do not speak MCP use the REST API instead.
Included on every LocalizeMe plan, the free one too.
Copy your server URL
Every client below wants the same one. It is the only thing most of them need.
Developer access in the dashboard shows the same URL, derived from the environment you are signed in to — copy it from there if you are on sandbox rather than production.
Point your client at it
Pick the one you use. Every snippet is the finished article — paste it and restart the client.
Settings → MCP reads this file, or drop it in the repo so the whole team gets it.
{
"mcpServers": {
"localizeme": {
"url": "https://sandbox-api.localizeme.app/mcp",
"headers": {
"Authorization": "Bearer lz_YOUR_KEY"
}
}
}
}Put it in ~/.cursor/mcp.json instead to have it in every project. Cursor expands ${env:NAME} inside headers, so the key can stay in your shell rather than in a file you commit.
Drop the headers block entirely to use OAuth instead — Cursor then asks you to authorize in the browser on first use, and there is no key to rotate.
Sign the client in
Two ways, and the right one depends on whether there is a browser in the loop.
OAuth — nothing to paste
Give the client the URL and no header at all. It registers itself, sends you to a consent screen on localizeme.app, and you choose read only or read & edit for that one connection. The token lives in the client and never touches a config file.
Access tokens last an hour and refresh themselves for 30 days. Developer access lists every client you have approved, and disconnecting one cuts it off within the request.
An access key — for CI
A build step has no browser to consent in, so it carries an lz_ key in the Authorization header — the same key the REST API takes. Keys are stored hashed, shown once, and revoked individually.
Developer access in the dashboard → Access keys → Create key. Name it after the thing that will carry it, and copy it there and then: that screen is the only place the raw key is ever shown.
Either credential runs as you: the same project permissions are checked on every call, and every edit is attributed to you in the project's history. A read-only connection is not offered the write tools at all.
Tools that do not speak MCP
A chat window with no connector support, a hosted agent API, a build script — all of them want plain HTTP. The same lz_ key works against the REST API, which exports ten formats: JSON, PO, iOS .strings and .xcstrings, Android XML, XLIFF 1.2, Flutter .arb, Java .properties, CSV and YAML.
# every language for a project, as a zip
curl -H "Authorization: Bearer lz_YOUR_KEY" \
"https://sandbox-api.localizeme.app/api/translations/export/json/?project_id=1&language=all"Hosted agent APIs — OpenAI's Responses API, Gemini function calling — go either way: point them at the MCP endpoint above if they support remote MCP servers, or wrap these REST calls as ordinary functions if they do not. Full reference on the developers page.
If it will not connect
It looked for OAuth metadata and found none, which almost always means the URL is off — /api instead of /mcp, or a hostname that does not serve the API. It is not a problem with your account.
The key was revoked, or the client is carrying a dashboard login token rather than an lz_ key — signing out of the web app deletes that token and takes the client down with it. Use an access key.
The connection was approved read only. Disconnect it in Developer access and authorize again, choosing read & edit this time.
Check the transport field name for your client — httpUrl for Gemini CLI, serverUrl for Windsurf, url everywhere else. The wrong one is not an error, it is a server that never starts.
Custom connectors need a paid Figma plan, and on Organization and Enterprise an admin can switch them off for everyone. Nothing about the endpoint or your LocalizeMe account changes that — the gate is on Figma’s side.
Results come back in structuredContent with an empty content array, so an export does not carry its file twice. A client that only reads content will show nothing on success. Failures always carry text.
Free plan · no credit card