WP Content Bridge releasesself-updates
WP connector bridge for MCP in wordpress
by ISU Development · github.com/isudevelopment/wp-content-bridge · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/isudevelopment/wp-content-bridge/releases/download/v0.10.0/wp-content-bridge.zipShips its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.
Readme
WP Content Bridge
WP Content Bridge is a standalone WordPress plugin that exposes controlled content, editorial, media, block-pattern, and SEO operations through the WordPress Abilities API.
It gives an authenticated integration a typed interface for:
- searching and reading WordPress content;
- reading configured and resolved SEO data;
- discovering editorial vocabulary and recent content;
- finding media by ID, URL, filename, or text;
- reading registered block patterns;
- creating drafts and updating Gutenberg content;
- reading a post's block structure and editing or removing one block, or merging attributes into it, by tree path without rewriting the whole document;
- updating an allowlisted set of Yoast SEO fields;
- configuring a structured Service entity, local service areas, brands, and an offer catalog when IsuDev Schema Extended is active;
- moving content to reversible WordPress trash;
- diagnosing whether the WordPress, Abilities API, MCP, and SEO layers are available.
The plugin does not bundle an AI model, authentication provider, or MCP server. The official WordPress MCP Adapter can project selected abilities to MCP clients, but Abilities remain the plugin's transport-neutral public API.
Requirements
- WordPress 7.0 or newer
- PHP 8.2 or newer
- Composer dependencies included in the release package or installed locally
- Optional: Yoast SEO 28.x for normalized SEO reads and writes
- Optional: Yoast SEO Premium 28.x for keyphrase synonyms and related keyphrases
- Optional: Yoast Local SEO 15.x for public organization and location data resolved from the Schema graph
- Optional: IsuDev Schema Extended 0.2.x for structured Service entity writes
(
PHP 8.4+is required by that optional plugin)
Automatic updates
Packaged installs use Plugin Update Checker to discover WP Content Bridge
releases from GitHub. Update checks initialize only in WordPress admin or cron,
and downloads use the packaged wp-content-bridge.zip GitHub release asset —
never GitHub's dependency-free source archive.
Self-updates are disabled automatically when the plugin directory contains
.git, protecting source checkouts from being overwritten. A site whose plugin
files are managed by Composer or deployment automation should also disable the
WordPress updater in wp-config.php:
define( 'WPCB_DISABLE_SELF_UPDATES', true );
Site infrastructure may alternatively return false from
wp_content_bridge_self_updates_enabled. The release ZIP contains the
production updater dependency; a source checkout still requires Composer.
Implemented abilities
All IDs use the wp-content-bridge/ namespace. Every ability has a strict
output JSON Schema, abilities accepting input also have a strict input schema,
and every registration declares a permission callback, REST visibility, MCP
projection metadata, and readonly, destructive, and idempotent safety
annotations.
| Ability | Registration | WPCB capability | What it provides |
|---|---|---|---|
search-content |
Always | wpcb_read_content |
Authorization-aware content search with content type, status, author, taxonomy, date, ordering, and pagination filters. |
get-content |
Always | wpcb_read_content |
One content object with selected representations, relationships, featured-image ID and URL, and a concurrency token. |
get-block-tree |
Always | wpcb_read_content |
One content object's Gutenberg structure as a flat, path-addressed node list, without full block markup. |
get-url-seo |
Always | wpcb_read_content |
Normalized configured and resolved SEO for one readable post ID or same-origin URL. |
get-editorial-context |
Always | wpcb_read_content |
Bounded post types, taxonomies, terms, authors, recent content, and public Local SEO entities. |
get-diagnostics |
Always | wpcb_read_content |
Safe compatibility and availability information without secrets or server paths. |
get-media |
Media reads enabled | wpcb_read_media |
Paginated media listing and exact ID, URL, filename, or text lookup. |
get-media-by-id |
Media reads enabled | wpcb_read_media |
One exact, authorized attachment in a stable object envelope. |
list-block-patterns |
Pattern reads enabled | wpcb_read_patterns |
Registered local block-pattern metadata and optional complete Gutenberg markup. |
create-draft |
Content writes enabled | wpcb_edit_content |
Creates a draft with Gutenberg markup, excerpt, taxonomies, and optional idempotency. |
update-content |
Content writes enabled | wpcb_edit_content |
Updates selected content fields with optimistic concurrency and a WordPress revision. |
preview-update-content |
Content writes enabled | wpcb_edit_content |
Returns current and prospective title/content/excerpt/taxonomies for an update without writing. |
update-block |
Content writes enabled | wpcb_edit_content |
Replaces exactly one block subtree, addressed by path, leaving every other block byte-identical; empty markup deletes it. |
preview-update-block |
Content writes enabled | wpcb_edit_content |
Returns the whole post_content that update-block would store, without writing. |
update-block-attributes |
Content writes enabled | wpcb_edit_content |
Shallow-merges a JSON object into one block's attrs, addressed by path, without hand-written delimiter JSON. |
update-seo |
Content writes enabled | wpcb_manage_seo |
Updates supported Yoast fields and returns the effective SEO document after the write. |
preview-update-seo |
Content writes enabled | wpcb_manage_seo |
Returns the current resolved SEO document and sanitized prospective field values without writing. |
get-service-schema |
Content writes enabled and Schema Extended active | wpcb_manage_seo |
Reads the independently saved Service, areaServed, brand, and OfferCatalog configuration. |
preview-update-service-schema |
Content writes enabled and Schema Extended active | wpcb_manage_seo |
Returns current and provider-sanitized prospective Service configuration without writing. |
update-service-schema |
Content writes enabled and Schema Extended active | wpcb_manage_seo |
Updates a fixed Service, areaServed, brand, and OfferCatalog field set and returns the effective configuration. |
get-custom-schema |
Content writes enabled and Schema Extended 0.3+ active | wpcb_manage_seo |
Reads bounded Custom Schema JSON and structural validation diagnostics. |
preview-update-custom-schema |
Content writes enabled and Schema Extended 0.3+ active | wpcb_manage_seo |
Validates prospective Custom Schema without writing; reports save and render eligibility. |
update-custom-schema |
Content writes enabled and Schema Extended 0.3+ active | wpcb_manage_seo |
Writes validated Custom Schema through the provider's public integration contract. |
trash-content |
Content writes and trash enabled | wpcb_delete_content |
Moves an authorized object to reversible WordPress trash without exposing permanent deletion. |
restore-trashed-content |
Content writes and trash enabled | wpcb_delete_content |
Restores a trashed object to its safe pre-trash status; never publish or future. |
get-llms-txt |
Always | wpcb_manage_llms |
Reads the llms.txt configuration, snapshot summary, ownership state, and a concurrency token. Never returns a filesystem path. |
preview-update-llms-txt |
llms.txt enabled | wpcb_manage_llms |
Returns the document a configuration would produce, and its diff against the stored one, without writing. |
update-llms-txt |
llms.txt enabled | wpcb_manage_llms |
Replaces the configuration and regenerates the published snapshot under optimistic concurrency. |
regenerate-llms-txt |
llms.txt enabled | wpcb_manage_llms |
Rebuilds the snapshot from current content; idempotent for unchanged source and configuration. |
get-status-transitions |
Always | wpcb_read_content |
Reports one object's current status, the permitted target statuses under the configured allowlist, which gates the caller satisfies for each, and whether scheduled publication can actually run on this site. |
transition-content-status |
Content writes enabled | wpcb_edit_content (+ wpcb_publish_content for publish/future) |
Moves one object between statuses along an administrator-configured pair, with optimistic concurrency; publish_at schedules and is validated before any write. |
A WPCB capability never grants access by itself. Operations also enforce the configured policy and the matching native WordPress type or object capability.
Ability reference
wp-content-bridge/search-content
Finds content the current WordPress user is allowed to read.
Inputs include:
- free-text query;
- selected post types, statuses, and author IDs;
- up to 10 public or REST-visible taxonomy filters;
- published and modified date ranges;
relevance,date,modified,title, oridordering;- pages of up to 100 results.
Authorization is applied before pagination. The ability scans at most 1,000 candidates and reports whether the returned total is exact. Results never include objects already known to be unreadable.
wp-content-bridge/get-content
Returns one authorized WordPress content object by positive post_id.
The caller can select:
raw,rendered, andplain_textcontent representations;- author, taxonomy, featured-media, and revision relationships.
The response includes identity, status, URL, publication and modification
dates, selected content, byte counts, provenance, warnings, and a
version_token. Content summaries expose both nullable featured_image_id
and featured_image_url, avoiding attachment-ID guessing.
Selected representations have a combined 2 MiB limit. Oversized content fails explicitly instead of returning truncated Gutenberg markup.
wp-content-bridge/get-block-tree
Returns one readable post's Gutenberg structure as a flat, path-addressed list
of nodes instead of its full markup. Same sensitivity as get-content: always
registered, and requires wpcb_read_content, native read_post, and the post
type's Read policy.
Each node carries its path (zero-based indices into successive
innerBlocks arrays), block_name, an inner_blocks child count, a bounded
text preview, and text_source (inner_html, attrs, or null) recording
where that preview came from. parse_blocks() emits block_name: null
freeform nodes for whitespace between blocks; these occupy real indices that a
later write mutates, so they are always included, never skipped.
Optional path returns a subtree instead of the whole document, and
max_depth bounds how deep it is walked. Raw attrs are opt-in via
include_attrs — omitted by default, since emitting them for a whole document
can produce a response larger than the content it replaces — and are
individually withheld (attrs_omitted: true) above a 512-byte encoded bound
per node. The response is capped at 500 nodes, with truncated: true when the
cap stops traversal early, and returns a version_token to pass to
update-block, preview-update-block, or update-block-attributes.
wp-content-bridge/get-url-seo
Returns normalized SEO for exactly one readable post_id or same-origin URL.
The response separates:
configurededitor values;resolvedpublic title, description, canonical, robots, Open Graph, Twitter, and Local business data;- available SEO and readability analysis;
- a bounded Schema graph;
- provider identity, module versions, completeness, provenance, and warnings.
Yoast's public resolved output is preferred over database internals. Raw Yoast
options, indexables, licenses, and unrestricted _yoast_* metadata are never
returned.
wp-content-bridge/get-editorial-context
Returns bounded site context an integration can use before planning or editing content. It does not generate a content plan and does not call an AI model.
The caller can request any of six sections:
- post types;
- taxonomies;
- terms;
- observed authors;
- recent readable content;
- public Local SEO businesses and locations.
Post-type and taxonomy selections are limited to 20. Recent content is limited to 50 items, and terms are limited to 100 per taxonomy. Authors are derived from readable recent content and contain only ID and display name; this is not a general WordPress user-enumeration endpoint.
wp-content-bridge/get-diagnostics
Reports safe operational information needed to configure or troubleshoot an integration, including:
- plugin and WordPress versions;
- Abilities API and MCP Adapter availability;
- active SEO provider and safe module availability;
- configured readable post types;
- the maximum content-representation payload size.
It does not return credentials, usernames, database details, filesystem paths, private options, or license data.
wp-content-bridge/get-media
Lists or searches attachments the current user may read. Media reads are independently disabled by default.
The caller may use at most one selector:
- exact attachment ID;
- exact same-site original URL;
- exact filename;
- bounded text query.
With no selector, the newest authorized attachments are returned. Pages contain
up to 100 items and candidate scanning is capped at 1,000. Native read_post
authorization is applied before pagination.
Every media item contains exactly:
id;title;filename;url;alt_text;caption;description;mime_type.
wp-content-bridge/get-media-by-id
Returns one exact attachment by positive ID using the same normalized media
shape as get-media. Missing and unauthorized attachments intentionally use
the same unavailable response so the ability cannot be used as an enumeration
oracle.
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v0.10.0 | Sep 3, 2026 | wp-content-bridge.zip | 2 |
| v0.9.0 | Sep 3, 2026 | wp-content-bridge.zip | 0 |
| v0.8.4 | Sep 3, 2026 | wp-content-bridge.zip | 0 |
| v0.8.3 | Aug 14, 2026 | wp-content-bridge.zip | 1 |
| v0.8.2 | Aug 12, 2026 | wp-content-bridge.zip | 1 |
| v0.8.1 | Aug 11, 2026 | wp-content-bridge.zip | 2 |
| v0.8.0 | Aug 11, 2026 | wp-content-bridge.zip | 1 |
| v0.7.1 | Aug 9, 2026 | wp-content-bridge.zip | 2 |
| v0.7.0 | Aug 9, 2026 | wp-content-bridge.zip | 3 |
| v0.6.0 | Aug 9, 2026 | wp-content-bridge.zip | 1 |
| v0.5.0 | Aug 7, 2026 | wp-content-bridge.zip | 1 |
| v0.4.5 | Aug 7, 2026 | wp-content-bridge.zip | 2 |
| v0.4.0 | Aug 7, 2026 | wp-content-bridge.zip | 1 |
| v0.3.1 | Aug 7, 2026 | wp-content-bridge.zip | 0 |
| v0.3.0 | Aug 3, 2026 | wp-content-bridge.zip | 1 |
| v0.2.3 | Aug 3, 2026 | wp-content-bridge.zip | 0 |
| v0.2.2 | Aug 3, 2026 | wp-content-bridge.zip | 1 |
| v0.2.1 | Jul 24, 2026 | wp-content-bridge.zip | 1 |
| v0.2.0 | Jul 21, 2026 | wp-content-bridge.zip | 1 |
| v0.1.5 | Jul 21, 2026 | wp-content-bridge.zip | 0 |
| v0.1.3 | Jul 21, 2026 | wp-content-bridge.zip | 0 |
| v0.1.2 | Jul 21, 2026 | wp-content-bridge.zip | 1 |
| v0.1.1 | Jul 21, 2026 | wp-content-bridge.zip | 2 |
| v0.1.0-dev | Jul 21, 2026 | — | — |