Using Xcode 27’s localization skills over MCP

Share

Xcode 27 ships with a new localization feature: automatic translation at the press of a button. Open any String Catalog, click “Generate Translations”, and watch your agent take it away…

That is, if you have one of the supported agents installed. And even then, it only works inside Xcode. That means you can only use the models Xcode supports – which might require being on one of the pricier premium tiers. You’re also confined to the Xcode interface, its system prompt, harness, and general agentic tooling – which I personally find inferior to Claude Code in the terminal.

Unfortunately, running this outside Xcode via MCP isn’t trivial: the relevant MCP tools, like StringCatalogRead, explicitly require you to load the translation skill first. Yet the skill isn’t available through the server (i.e. as a resource). It’s also not part of the export you get from xcrun agent skills export. You’re stuck: the tool won’t run, and the skill can’t be found.

One way out is to be firm in your prompt and have the agent ignore the skill. Yes, you could do that. But you shouldn’t! The skill contains lengthy, detailed instructions on how to localize. It has guidelines for:

  • Getting string context and looking up usage in code
  • Looking up existing terminology in the project
  • When to use string variations, and which ones
  • A detailed description of the tools to use
  • A staggering 56 per-language (and variant) style guides

You wouldn’t want to miss that, would you?

Luckily, there’s a little-known (to me, at least) xcrun agent command that exports all the skills as a plugin for the agent of your choice:

xcrun agent plugin path --plugin-format claude

It supports Claude, Codex, and Gemini. The command prints a directory you can pass straight in as a plugin directory. For Claude, like so:

claude --plugin-dir $(xcrun agent plugin path --plugin-format claude)

This not only makes the skills available but also sets up the Xcode MCP server. If you’d rather not use the plugin, or only want the skills loaded on demand, you can put something like this into your CLAUDE.md:

Prefer editing `.xcstrings` via the xcode-tools String Catalog MCP tools (`LocalizationPlanner`, `StringCatalogRead`/`Context`/`Edit`) over `Write`/`Edit` — they handle the catalog's plural/device variation structure for you.

These tools are driven by the `xcode-integration:` skills, which only Xcode's own agent has loaded. Instead, run `xcrun agent plugin path --plugin-format claude` — it prints the directory of the active Xcode's exported plugin — and `Read` the skill from its `skills/` folder before working on a String Catalog:
- `xcode-integration:translation-coordinator` → `translation-coordinator/SKILL.md` — whole-project or whole-language jobs; delegates key batches to sub-agents.
- `xcode-integration:translation` → `translation/SKILL.md` — translating a specific set of keys; per-locale style guides in its `references/`.

We’ve been using a variant of this since the first Xcode 27 beta and haven’t looked back. In fact, we’ve built an entire localization workflow around it. More on that in an upcoming post!

Meanwhile, I strongly recommend taking a closer look at the skill’s references. They’re full of interesting little details and generally good advice on language in software products: pluralization, device variations, tone, grammar, capitalization, inclusive language, and more. You’ll find them as plain Markdown files in the plugin’s skills/translation/references folder.

The style guides for languages you speak might be especially interesting. Apple wouldn’t be Apple if they didn’t include guidelines on how to inflect Apple’s product names in German 😂

No genitive-s on product names: Never add a genitive -s to Apple product names or brand names. Use "von" instead: "Das neue iPhone von Apple" (not "Apples neues iPhone"), "die Seitentaste des iPhone" (not "des iPhones").

Update 08.10.26: Big thanks to Andy for pointing me to the xcrun agent plugin path command, which makes things much less hacky. This post previously suggested loading the skills directly from the Xcode app bundle at $(xcode-select -p)/../PlugIns/IDEXCStringsSupport.framework/Versions/A/Resources/Skills/.