Skip to main content
Glama

Opus Growth, Ad Platforms MCP Connector

Update WordPress Post

wordpress_update_post
Destructive

Update an existing WordPress post or page by its ID. Only the fields you pass are changed; edits keep WordPress revisions.

THE RESPONSE DOES NOT CARRY THE PAGE BACK. A write answers with ok, the replaced counts and any charset_warning — the three things that tell you whether the edit landed. The stored content is left out and marked content_omitted: true with content_chars, because a WPBakery home page is 45 KB and returning it made the tool result itself too large to read: the write had succeeded, but the caller saw a size error and could not tell (issue #293). Pass return_content=true if you really need the stored content back and the page is small.

COMMENTS / PINGBACKS: comment_status and ping_status take 'open' or 'closed' and act on THIS post only. WordPress' own Settings > Discussion screen changes the default for NEW posts and leaves existing ones untouched, so closing comments on a published page is only possible here. Needs Opus Growth Connector 0.6.0 or newer on the site.

On a page built with Elementor the content field is not what visitors see, so it is skipped and reported back to you: use wordpress_page_design and wordpress_edit_page_design for those pages. featured_media sets the featured image by media id (get one from wordpress_media); 0 removes it. categories and tags take names and are created if missing, which is how you move a published post out of "Uncategorized". author takes a user id, username or display name and changes the byline; use wordpress_users to find the right one. template, meta and copy_meta_from work as in wordpress_create_post — set the page's theme template, write WPBakery/theme post meta, or copy a working page's layout meta (template + WPBakery CSS) onto this one (Connector 0.9.2+).

On a page built from shortcodes (Avada/Fusion, WPBakery) do NOT rewrite content: pass replace=[{"find": "old text", "with": "new text"}] instead. That changes only the text you name and leaves the shortcode layout untouched. If nothing matches, nothing is written and you are told so. Use wordpress_get_post first to see the exact text to match.

Text copied out of a page often will NOT match literally, because editors leave invisible characters in it — non-breaking spaces, smart quotes, long dashes — that look like ordinary ones. When that happens the reply says so and tells you how many times it WOULD match; send the same call again with match="normalized" and those characters are treated as their plain equivalents. match is also accepted per entry ({"find": ..., "with": ..., "match": "normalized"}) when only one of several replacements needs it; the top-level value applies to every entry that does not carry its own. wordpress_get_post(raw=true) shows the invisible characters spelled out if you want to see them.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYes
metaNo
tagsNo
matchNo
titleNo
authorNo
statusNo
contentNo
excerptNo
replaceNo
site_urlNo
templateNo
categoriesNo
ping_statusNo
comment_statusNo
copy_meta_fromNo
featured_mediaNo
return_contentNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added
  2. Removed
  3. Added
  4. Removed
  5. Added
  6. Removed
  7. Added
  8. Removed
  9. Added
  10. Removed
  11. Added
  12. Removed
  13. Added
  14. Removed
  15. Added
  16. Removed
  17. Added
  18. Removed
  19. Added
  20. Removed
  21. Added
  22. Removed
  23. Added
  24. Removed
  25. Added
  26. Removed
  27. Added
  28. Removed
  29. Added
  30. Removed
  31. Added
  32. Removed
  33. Added
  34. Removed
  35. Added
  36. Removed
  37. Added
  38. Removed
  39. Added

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (destructive, non-idempotent, open-world); the description goes well beyond it — it explains the response does NOT return the page, lists the returned signals (ok, replaced, charset_warning), justifies content_omitted via the 45 KB issue #293 rationale, and notes that content is skipped on Elementor pages. Version-gated comment behavior is also surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core update rule, then response format, then per-parameter notes — a sensible structure with little true redundancy. It is on the long side, with capitalized section headers and an issue-number aside that could be tightened, but nearly every sentence supplies actionable constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter mutation tool with a known output schema, the description covers the risky/ambiguous paths (replace vs content, Elementor skip, comment closing, content omission, connector version requirements) and defers return-value detail appropriately to the output schema. Nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and largely does: it defines replace/match semantics (including per-entry match and normalized mode), featured_media (id or 0 to remove), categories/tags (names, auto-created), author (id/username/display name), template/meta/copy_meta_from, and comment_status/ping_status values. Only trivially self-evident fields like status/excerpt/site_url are left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an existing WordPress post or page by its ID') and immediately scopes it against siblings, naming wordpress_page_design / wordpress_edit_page_design for Elementor pages and wordpress_get_post for inspecting text before edits. An agent can route between this, wordpress_create_post and wordpress_bulk_replace without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use/when-not-to guidance throughout: use replace instead of rewriting shortcode-built content, use wordpress_page_design for Elementor, call wordpress_get_post first to see exact text, resend with match="normalized" when invisible characters block a literal match. Prerequisites (Connector 0.6.0+/0.9.2+) are also disclosed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.