Browse documentation +
Getting startedInstallationConnect a clientSafety profilesWordPress ChatPro licensingAntigravity CLIAntigravity IDETroubleshootingOAuth 2.1 setupApplication PasswordsPage builder workflowsLedger and rollbackApprovals and memoryAbility reference
Pro module8 abilities

WPML

These abilities register when WPML is detected on the site and a Pro licence is active. If either is missing the module stays absent rather than failing at call time.

At a glance

WPML registers 8 abilities: 6 that only read, 0 that write, and 2 marked destructive. That split is the practical answer to how much of this module can run unattended. Reads cost nothing and are safe to repeat, so discovery is the part to be generous with; the writes are where review belongs, and the destructive calls stop for an explicit confirmation every single time regardless of which profile is active.

What this module is for

Discover WPML languages and translatable types, read a post's language and translation group, assign a language, join existing posts into one translation group, and resolve a post or term id into another language.

Before you rely on it: WPML stores language in its own table, so content created without it in mind has no language until one is assigned. The module writes only through WPML's published hooks, does not generate translations, and cannot write string translations because WPML publishes no hook for one. Language and group writes require confirmation.

Typical workflows

  • Find content that carries no language at all and is therefore invisible to the language switcher
  • List what exists in one language and see which languages each item is still missing
  • Link an existing translation to its source without copying content

The WPML integration page covers the same module from the workflow side, with the capability map and the questions worth asking before a first write.

Availability on your site

The WPML module needs three things at once: WPPilot Free as the MCP foundation, an active Pro licence, and the companion plugin detected on the site. Miss any one and the module does not register, which is deliberate: an ability that appears in the tool list but fails at call time is worse than an ability that was never offered. What the connected agent can actually call is then narrowed twice more: by the safety profile active on the site, and by the WordPress capabilities of the user behind the credential. A read that succeeds for an administrator can be absent entirely for an editor.

Every write these abilities perform is recorded in the change ledger, and destructive calls can be routed through the approval queue so a person signs off before anything is applied. A successful tool result means the operation returned, not that the front end, the cache, and every dependent template are correct: that still needs a look.

Reads

Available in every safety profile, including Read Only. Inspection costs nothing and is not rate limited.

AbilityWhat it does
wppilot/wpml-check-setupCheck WPML SetupReports the WPML Multilingual CMS version, the configured languages and the default language, which post types and taxonomies are set translatable, and whether the String Translation and WooCommerce Multilingual companions are active. Call this before any other WPML ability. Two things here decide whether later calls can work at all: min_satisfied, and translated_post_types — WPML only carries a language for a post type that is switched on under WPML > Settings > Post Types Translation, and a write against a type that is not listed is refused rather than silently dropped.
wppilot/wpml-get-content-languageGet WPML Content LanguageReads one post's WPML language, its translation-group id (trid), which language it was translated from, and the complete translation group it belongs to. has_language: false means WPML holds no row for this post — it was created without a language, so it is outside every translation group and outside the language switcher. Read this before any language or translation write; both of the write abilities need the trid this returns.
wppilot/wpml-get-translationGet WPML TranslationResolves one post or term id into its counterpart in another language. This is the lookup to use when building a link, a menu, or a query that has to land on the right language version of something — not a string translator. Set element_type to a post type (page, post, product) or a taxonomy (category, product_cat); WPML spells this differently here than the language-details abilities do, and this ability takes the bare name. fallback_to_original: true returns the original when the requested language has no translation, which is usually what a link wants; false returns found: false so the caller can decide.
wppilot/wpml-list-contentList WPML ContentLists content of one translatable post type with each item's assigned language, translation-group id, and the complete set of translations that group holds. Pass language to list what exists in that language; WPML scopes queries to the current language, so this switches to it for the query and switches back afterwards. Every row carries a translations map keyed by language code — the languages missing from that map are exactly the ones the item has not been translated into, which is the cheapest way to answer "what still needs translating" without a second call per item. has_language: false marks content WPML has no row for at all: it was created without a language, and it will not appear in the language switcher until one is assigned.
wppilot/wpml-list-languagesList WPML LanguagesLists every language configured in WPML, whether or not the current content has a translation in it: code, native name, translated name, locale, hreflang tag, flag URL, and which one is the site default. The code is the value every other WPML ability expects — not the locale, and not the name.
wppilot/wpml-list-translatable-typesList WPML Translatable TypesEnumerates every registered post type and taxonomy on the site with whether WPML treats it as translatable. This is the answer to "why did the language write fail" more often than anything else: a post type that is not switched on under WPML > Settings > Post Types Translation carries no language at all, and content created in it is invisible to the language switcher no matter what else is done to it. Filter with only_translatable when you just want the working set. Switching a type on is a WPML admin decision with site-wide consequences, so WPPilot reports it and does not change it.

Destructive

Marked destructive in the source, so each call needs an explicit confirmation flag, every time.

AbilityWhat it does
wppilot/wpml-link-content-translationsLink WPML Content TranslationsJoins a set of posts into one WPML translation group, so the language switcher moves between them. Takes source_language — the language the others are translations of — and translations, a map of language code to post id that must include the source language. Every post must be the same post type, ids must be unique, and every language must be configured. The source post keeps its own translation group if it already has one, and the others are attached to it; posts that were originals of their own groups stop being originals. Nothing is copied: this links existing content, it does not translate it. Destructive, and requires confirmation.
wppilot/wpml-set-content-languageSet WPML Content LanguageAssigns a configured WPML language to one post. Two distinct outcomes, decided by the post's current state and by keep_group. A post WPML has no row for gets a fresh translation group of its own, which is the fix for content created by an ability that knew nothing about WPML. A post that already sits in a group keeps that group by default, so the language of one member changes without detaching it; pass keep_group: false to move it out into a new group of its own instead. Changing the language of a group member that other translations point at is how a translation set gets split — read the group first. Destructive, and requires confirmation.