The agent can see, and every change can be taken back
Images
Every route into the media library — upload_media, product images, variation images — now goes through one ingest engine.
- Four sources, one shape — an existing attachment
id, aurlthe server downloads, rawbase64bytes (a data URI works), or apathto a file already on the server. No more "upload it, then attach it". - SEO filenames —
IMG_2831.JPGlands asblack-cotton-hoodie.jpg, numbered-2,-3through the gallery. - De-duplication — bytes are hashed on the way in. Re-importing the same photo across twenty products reuses one attachment.
- Processed before storage —
max_dimensiondownscales,convertwrites WebP or AVIF,qualityre-encodes, all before the file becomes an attachment. - A gallery you can edit —
mode(replace/append/prepend),remove_ids,reorder,detach_main, per-image title, caption and description. - One bad URL no longer loses the batch — each source reports its own error and everything else still saves.
get_image_bytesreturns an image as an inline picture rather than a filename, so alt text and product copy can be written from what is actually in the photograph — and so you can confirm the right image is on the right product.
New media tools: optimize_image (restorable original, never replaces a file with a larger one, optional URL rewriting), restore_image, regenerate_thumbnails, find_duplicate_media, find_unused_media, bulk_set_image_alt, bulk_assign_variation_images.
Undo
Writes are journalled. Every instrumented tool records the value it overwrites, returns an operation_id, and undo_operation puts the whole change back in reverse order — bulk repricing, inventory, search and replace, bulk content and SEO writes, schema, alt text, product images. list_operations shows the last 40; create_restore_point snapshots a set of posts before a risky run.
Batching
batch runs up to 50 tool calls in a single request. Each step reports its own result or error, and the whole batch reverses as one operation. Editing 200 products used to be 200 round trips.
Broken links and sitemaps
find_broken_links— resolves internal links against the database first, requests the rest over HTTP with redirects followed, reports redirects separately from failures, caches results for six hours, and resumes where it stopped.get_sitemap— reads the sitemap from core, Yoast or Rank Math and follows an index into its children.sitemap_audit— noindexed URLs sitting in the sitemap, published content missing from it, URLs that 404 or redirect, stalelastmoddates.indexnow_submit— instant indexing for Bing, Yandex, Naver and Seznam. The verification key is generated and served at/<key>.txtautomatically.
Product SEO
set_seo/get_seogainog_imageandtwitter_image, accepting an attachment ID or a URL and writing both the URL and the attachment ID the SEO plugin needs.generate_product_schema— Merchant-gradeProductdata:gtin/mpn/sku,brand,priceValidUntil,shippingDetails,hasMerchantReturnPolicy,itemCondition, colour/size/material, embedded reviews. Variable products become aProductGroupwith every variation as ahasVariantoffer. Policy facts can be saved once and reused.product_seo_fix— bulk repair of missing titles, descriptions, alt text and schema, trimmed to the pixel width Google renders.bulk_set_seoandserp_preview— template-driven SEO across any post type, and a pixel-accurate preview showing where each result is truncated.product_seo_auditnow also reports duplicated descriptions and missing social images.
Knowing what happened
get_audit_log— every tool call: arguments with secrets redacted, status, duration, requesting IP, and the operation that would undo it.get_progress— call it on a second connection while a long sweep is working.- A time budget — long sweeps stop before PHP's execution limit and return a resume offset instead of being killed mid-write.
162 tools. Requires WordPress 5.6+ and PHP 7.4+.
Install
Download wordpress-mcp.zip below and upload it under Plugins → Add New → Upload Plugin.