Skip to content

Translating from Claude and ChatGPT (MCP)

On this page

Available in LATW AI Translation for Polylang PRO.

Everywhere else in this plugin, translating means sending your text to an AI engine and paying that
engine for the answer. The MCP server turns that around. You connect your site to the AI assistant
you already use — Claude or ChatGPT — and translate from inside the conversation. The assistant
writes the translation; the plugin puts it into Polylang.

There is no API bill. No key is used, no engine is called, and every translation made this way
shows a cost of $0.00 on the History screen. You are using the subscription you already pay for.

MCP — Model Context Protocol — is the standard those assistants use to talk to outside systems.
Switching the server on gives the assistant a set of tools: find untranslated pages, take one for
translation, send the translation back, look something up in your glossary.

In practice a session looks like this:

You: What still needs translating into German?

Claude: Eleven pages have no German version. The most recently edited are About, Shipping &
Returns
and Our Suppliers.

You: Do the three of them.

Claude: (takes each page, translates it, sends it back) All three are translated and live.
About is at /de/uber-uns/.

#What you need before you start

  • An active PRO licence.
  • Polylang, with at least two languages set up, as for any other translation this plugin makes.
  • HTTPS. Assistants run on someone else’s servers and will not connect to an unencrypted site.
  • A Claude or ChatGPT plan that allows custom connectors. On ChatGPT that means Plus, Pro,
    Business, Enterprise or Edu — the free tier cannot add one.

#Switching it on

  1. Go to AI Translation → Settings → MCP.
  2. Turn on MCP server.
  3. Press Generate token. The token is the password to this door — anyone holding it can read and
    translate your site’s content.
  4. Decide what the assistant may reach, under What the assistant may do. Posts and pages are
    always available. Status and costs, and the glossary, are on by default; interface strings and
    categories are off until you want them.
  5. Press Save Changes, then Test connection. That check calls the server the same way an
    assistant would and tells you plainly if something between the internet and WordPress is in the
    way.

The screen then shows two addresses. Which one you use depends on the application.

#Connecting Claude

Claude Desktop and claude.ai. Open Settings → Connectors → Add custom connector, give it a
name, and paste the Address (token in URL) from the MCP tab. Press Show next to the field
first — the screen masks it until you do. There is nothing else to fill in: the token is part of the
address.

Claude Code. The MCP tab shows the exact command, ready to copy:

claude mcp add my-site https://example.com/wp-json/latw-mcp/v1/http --transport http --header "Authorization: Bearer YOUR_TOKEN"

Run it in a terminal, then /mcp inside Claude Code to confirm the site is listed.

#Connecting ChatGPT

Custom connectors are hidden until you switch developer mode on, so this is two trips into Settings.

First, switch developer mode on. Open Settings → Security and login, find Developer mode
and turn it on.

Then add the connector. Open Settings → Plugins → Browse plugins and press the + in the
top right corner. Fill the form in:

  • Name — whatever you want to see in the conversation, for example your site’s name.
  • Address — the Address (token in URL) from the MCP tab.
  • Authentication — No Auth. The token is already part of the address, so there is nothing
    else to fill in.
  • Tick I understand and want to continue, then press Create.

ChatGPT loads the connector, which takes a moment, and then shows Connect. Press it, and the
site’s tools are available in the conversation.

#Asking for a translation

Once connected, ask in plain language. The assistant has the tools; you do not need to name them.

  • “What pages have no French translation yet?”
  • “Translate the About page into German and French.”
  • “The pricing page changed — update the Polish version.”
  • “How much have translations cost this month?”
  • “Show me the German version of the pricing page — does it read naturally?”
  • “The Polish About page says ‘Zacznij zakupy’ on the button. Change it to ‘Przejdź do zakupów’.”
  • “What was the last thing translated?”
  • “Change the Polish address of the About page to o-nas-firmy.”
  • “Translate only the SEO title and description of the About page into Polish.”

The translation is written into Polylang exactly where the plugin would have written it. It appears
in AI Translation → History, in Polylang’s own language switcher, and on the front end, and you
can edit it afterwards in the block editor like any other translation.

Which parts of a page the assistant is handed — the content, the custom fields, the SEO title and
description — is decided by this plugin’s own settings, under Settings → Translation, and the
rules are the same however you translate.

#Reviewing and correcting a translation

You do not have to accept a translation as it came out, and you do not have to redo the whole page
to change one line.

Ask to see it, and the assistant reads the current translation field by field beside the source it
came from:

You: Show me the Polish About page next to the original.

Claude: (lists each piece) The heading is “O nas”, the intro is …, the button says “Zacznij
zakupy”.

You: The button should say “Przejdź do zakupów”.

Claude: Changed. The rest of the page is untouched.

Only the line you asked about is rewritten. Everything else keeps the wording it already had,
including any corrections you made by hand in the editor.

Two things are worth knowing:

  • A page translated by hand from scratch cannot be listed this way. This plugin keeps no record
    of which text produced which translation unless it made the translation itself, so there is
    nothing to line up, and the assistant will say so rather than guess.
  • A first translation is all-or-nothing. Until a page has a translation, every field has to be
    filled in one go — there is nothing to keep for the ones left out, so they would be published
    empty. The assistant is told this and will not half-translate a page by accident.

#Addresses of translated pages

When Polylang creates a translation it builds its address from the translated title, so About
becomes /pl/o-nas/ on its own. That is usually what you want, and occasionally not — a title that
translates to the same words, or a page whose heading and URL should read differently.

You can ask for a different one, either while translating or long afterwards:

You: Translate the About page into Polish, and make the address /pl/o-nas-firmy/.

You: Change the Polish address of the About page to poznaj-nasza-firme.

Only the translation moves. The original page keeps its own address, and so does every other
language. If the address you ask for is already used by another page in that language, WordPress
appends a number and the assistant tells you which address it actually got.

For posts, changing the address of something already published is safe: WordPress remembers the
old address and sends anyone using it to the new one, exactly as it does when you rename a post in
the editor.

Pages are the exception. WordPress only keeps old addresses for non-hierarchical content, and
pages are hierarchical — so the old address of a page simply stops working, and any link pointing at
it lands on a 404. If the page was already published and linked to, add a redirect yourself.

#What it will not do

Be clear about this before you promise it to anyone:

  • It is not bulk translation. The assistant works page by page, in a conversation, and long
    pages use up a lot of it. For dozens of posts, use Automatic Translation and pay the API bill —
    that is what it is for. This is for the pages you care about individually.
  • The quality is the assistant’s, not the plugin’s. Your Translation Prompt and Website
    Description
    are handed over as guidance, but nothing enforces them. An assistant that decides to
    paraphrase will paraphrase.
  • The glossary is advice here, not a rule. Your terms are sent with every job and assistants
    follow them well, but the plugin cannot check the result the way it does on its own pipeline.
  • There is no “outdated” list. Find content to translate can tell you what has no translation
    yet, but not what changed since the last one — ask the assistant to read a specific page with
    latw_get_translation instead.
  • A conversation can stop halfway. If it does, the page is left with an open job. Ask the
    assistant to “list open translation jobs” and either finish or cancel them; open jobs also show
    as awaiting_mcp on the History screen.
  • One token for the whole site. There is no per-person access and no list of connected
    applications. Generating a new token disconnects everything using the old one.

#About the token

The token is shown masked, and Show reveals it — you will need to read it back when you connect
a second application.

The two addresses differ in more than convenience. The one with the token in the URL is the easy
one, and it is what Claude Desktop and ChatGPT need, but a secret in an address ends up in your
server’s access logs and in the browser history of whoever pasted it. The address using the
Authorization header keeps the token out of both, and is worth using wherever the application
supports it.

Either way: treat the token like an administrator password, and press Generate a new token the
moment you think someone else has seen it.

The connected assistant acts as the WordPress user who generated the token, with that user’s
permissions. If that account is deleted or loses its administrator role, the token stops working.

#When something goes wrong

Test connection on the MCP tab is the first thing to try — it separates “the plugin is fine and
your assistant is misconfigured” from “nothing can reach this site at all”.

What you see What it usually means
The assistant says it cannot reach the server The address is wrong, the server is switched off, or the site is not on HTTPS.
Test connection says the token did not arrive Your host strips the Authorization header before PHP sees it. Use the address with the token in the URL instead.
Test connection cannot reach the site at all A firewall or a security plugin is blocking /wp-json/. Allow /wp-json/latw-mcp/ through.
A 404 from the address The server is switched off, or the licence is not active.
A 401 The token is wrong — copy it again from the MCP tab.
The assistant lists no tools The licence expired, or every tool group was switched off.
Rows stuck at awaiting_mcp A conversation ended mid-job. Ask the assistant to list and cancel open jobs.

The AI Translation → Logs page records what happened on this site’s side, and
Settings → Advanced → Debug Mode adds the detail.