npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@respira/wordpress-mcp-server

v8.4.19

Published

WordPress MCP server + companion plugin giving AI native access to page builder content, not just the REST API. 248 tools, 352 with WooCommerce, 17 page builders and the Site Editor. Element-level edits, full page creation, HTML to builder conversion, sna

Readme


What Makes Respira Different

Other WordPress MCP servers wrap the REST API. They can create posts and pages, but they can't touch your page builder content.

Respira includes a WordPress plugin that gives AI native access to 17 page builders, plus element-level precision, full page creation from structure, HTML-to-builder conversion, storefront design intelligence, stock image search, and bulk operations across hundreds of pages.

New in 8.3: Design Direction, the site's design system as an artifact

  • One saved design direction per site. Identity, DTCG-subset tokens, plain-language guidance including the don'ts, and waivers, saved on the site with revisions. Agents read it before building anything; activation refuses a direction that is missing its core roles and names exactly what is absent.
  • Any token format in, strict DTCG out. Import DTCG 2025.10, Tokens Studio exports, Tailwind configs, or pasted :root CSS into a draft (dry-run by default), apply into the builder's NATIVE token store with a per-builder report, export as strict DTCG 2025.10 with builder mapping metadata under $extensions["press.respira"].
  • A design check that can say "not done yet". wordpress_check_design runs deterministic slop-and-drift rules against draft content or a saved post: off-palette colors and fonts, filler copy, placeholder names, AI-default palettes, and probes generated from the direction's own don'ts. With rendered: true (plugin 8.6.20+) it renders the real page at desktop and mobile widths: contrast, type-scale coherence, three equal cards, hero filling the viewport, section repetition, spacing rhythm, broken layout, and off-palette colors as actually painted, with screenshots attached. Anything it cannot verify is listed as unchecked instead of silently skipped.
  • Build skills run the check before treating any page as done.

New in 8.2: Resonance, a persistent memory for every site

  • Your AI forgets your site every session. Resonance remembers. wordpress_remember, wordpress_forget, and wordpress_list_memory maintain a capped, per-site store of conventions, preferences, and lessons that rides into the site context of every future session, from any connected client.
  • Rules are enforced, not suggested. A memory of type rule can protect content (post ids or slugs); the WordPress plugin refuses agent writes to protected content at the write path, server side. Agents can add protection in conversation; only the site owner can remove it, from the Respira dashboard.
  • Compatible with WordPress core's Knowledge direction. On sites running the Gutenberg Knowledge experiment, published guideline scopes join the same memory block.
  • Included on Builder and Studio plans with plugin 8.3+, at no extra cost.

Site skills: a site's own instructions for every agent

  • The site tells its agents how things are done here. A skill is a Markdown page kept on the site (Respira > AI Skills in wp-admin, plugin 9.1.0+): how a blog post is formatted, what a case study needs, which pages carry legal copy. The enabled ones arrive in wordpress_get_site_context under site_skills as name and description; wordpress_list_skills lists them all and wordpress_get_skill reads one in full, on demand rather than on every call.
  • Written by people, or by an agent when asked. wordpress_write_skill creates or updates a skill under the same rule as wordpress_remember: only when the user asked. Every save is a revision, ten are kept, and the owner restores any of them from the standard revisions screen. A skill the owner marks as not editable by agents refuses agent writes.
  • Deleting is a human decision. wordpress_delete_skill is approval-gated and moves the skill to the trash, where the owner can restore it.
  • A skill body is information about the site, never an instruction to Respira's tools and never authorization.

New in 8.1: MCP 2026-07-28, without breaking existing clients

  • Modern protocol negotiation. Compatible clients can use server/discover and negotiate MCP 2026-07-28, including stateless per-request metadata and typed result contracts.
  • Legacy clients keep working. Existing clients continue through the established initialize handshake and receive the same Respira tool catalog. Connection commands, site keys, and configuration files do not change.
  • Verified compatibility. The release suite starts the packaged stdio server twice: once pinned to 2026-07-28, and once as a legacy client. Both must initialize and enumerate the complete release catalog.
  • Patched runtime dependencies. Axios, FormData, Sentry, and OpenTelemetry dependencies were updated; the production dependency audit reports zero known vulnerabilities.

Read the complete changelog.

Shipped in 8.0: verified FSE and WooCommerce operations

  • First-class Site Editor tools. Agents can list, inspect, create, target-update, and reset block templates and template parts; create and safely edit synced/unsynced patterns; and traverse native block navigation as exact nested paths. Every editable surface uses stale-write fingerprints, structural proposals, snapshots, compact diffs, cache invalidation, and truthful stored/rendered verification.
  • Native design-token tools. Gutenberg theme.json colors, typography, and spacing variables are exposed through the existing WordPress storage model rather than a parallel token database.
  • Truthful storefront writes. Woo product-card, checkout, sale-badge, and low-stock-badge tools resolve the real FSE template and registered block paths. An unsupported layout now returns respira_woo_fse_write_not_supported; it never reports an applied change that only logged intent.
  • Bounded, defined commerce reporting. Revenue, sales time series, top products, order summaries, and privacy-safe customer summaries use paginated WooCommerce data-store queries compatible with HPOS. Responses state currency, timezone, boundaries, statuses, coverage, and metric definitions.
  • Safe store operations. Read-only store configuration, payment gateway, shipping-zone, and tax-rate discovery is joined by approval-gated Woo webhooks with HTTPS targets, allowlisted topics, write-only secrets, and redacted rate-limited tests.
  • Agent-visible audit history. Activity list/detail tools connect compact diffs to snapshots, proposals, approvals, and rollbacks.
  • Truthful capability discovery. wordpress_search_abilities labels each result as Respira-native, inhaled, unavailable, or replaced by a safer audited Respira workflow, and returns the exact next action.
  • Explicit feed recovery. woocommerce_get_feed_status stays read-only while woocommerce_repair_feed_scheduler can clear only a confirmed-stale Respira lock, resume the idempotent build, verify the repair, and preserve Action Scheduler history.
  • Safer plugin activation. Dependency/version preflight, a signed fresh-process activation probe, REST/frontend boot checks, and narrowly scoped rollback prevent a broken plugin from taking the controlling request down with it.
  • Generated release integrity. A public tool catalog and machine-readable tool-capabilities.json are generated from the declarations used in release CI. Missing native or documentation coverage requires an explicit, reviewable exclusion.

New in v7.6.2: clearer failures and trustworthy quality signals

  • PageSpeed failures keep their real machine-readable reason. Rate limits, upstream outages, proxy HTML responses, and other structured WordPress errors no longer collapse into a generic failure, so agents can distinguish “retry later” from a Respira defect.
  • PageSpeed tools reject incomplete requests before touching WordPress. Both PageSpeed schemas require either page_id or url, preventing avoidable calls that could only fail.
  • Every transport attempt has its own identity. The logical call id remains stable for replay-safe writes, while attempt_id preserves each network attempt so a retry can never overwrite the evidence from the first timeout.
  • Privacy remains metadata-only. Retry detection uses a process-secret target hash. Respira never sends prompts, raw arguments, tool results, or WordPress content.
  • The admin quality dashboard now separates operational health from task completion. Expected approval/safety blocks, caller mistakes, customer setup, upstream services, product errors, unknown failures, and incomplete attempts are measured independently. Alerts use comparable site cohorts and require failures across multiple sites, reducing false alarms caused by one unusual customer setup.
  • The npm package no longer publishes private repository metadata. Support and product links point to respira.press.

Reliability and builder additions since v7.5.2

  • v7.5.3: Windows media paths and file:// uploads work correctly; delete_media approval tokens now reach the confirmation call.
  • v7.5.4: tools/list shares one cached, two-second-bounded context fetch instead of making three sequential WordPress checks, preventing slow-site handshake disconnects.
  • v7.5.5: subdirectory WordPress installs on the same hostname receive distinct site identities; custom Elementor widget guidance now uses live control schemas and targeted stable-ID updates.
  • v7.5.6: a successful ?rest_route= diagnostic fallback becomes sticky for the rest of the MCP session.
  • v7.6.0: WPML translation tools and Divi Theme Builder header, footer, and body-template tools.
  • v7.6.1: wordpress_build_mega_menu creates a complete native Divi 4 or Divi 5 mega-menu hierarchy in one call.

Reconnect-safe writes and drop diagnostics (v7.5.2)

  • Writes carry a stable idempotency key. The connector automatically retries transient reads. It retries a write only when WordPress explicitly confirms replay support; an ambiguous timeout/reset is reported as respira_write_outcome_unknown so the agent verifies the target before trying again.
  • Telemetry queues and retries independently of tool execution. A dashboard or network interruption cannot block a WordPress call, and failed metadata batches are retained with bounded exponential backoff.
  • Local API keys stay local. With Respira for WordPress 7.5.46+, a local respira_* key is exchanged inside WordPress for a revocable, site-scoped telemetry bearer. The central service never receives that local key.
  • The quality dashboard can separate exact retries from editing sweeps. It records stable session/call identity, transport, incomplete calls, connector/plugin versions, total vs tool time, and privacy-safe stage durations. Target comparison uses a secret HMAC; arguments, results, prompts, and WordPress content are never sent.
  • Native URL-connected clients gain timeout-safe writes. Plugin 7.5.46 adds _respira_async: true, respira_get_job_status, stable Mcp-Session-Id responses, replay-safe _respira_call_id, and a native respira_diagnose_connection tool. The native endpoint is stateless HTTP—independent POST requests, not a persistent “write channel.”

Also shipped between v7.1 and v7.5.1

  • v7.2: cascade session rollback; dropped-styling/no-op guidance; page-parent schemas; Oxygen 6 build guidance; completed live-edit confirmation parameters; bounded heavy-write/docs timeouts; and route-aware capability negotiation that hides tools an older plugin cannot execute.
  • v7.3: the WooCommerce add-on expanded from 21 to 56 tools across catalog, pricing, stock, storefront, brands, variations/attributes, coupons, customers, refunds, and AI-readiness.
  • v7.4: Agent-Ready Commerce expanded WooCommerce to 79 tools with feeds + store llms.txt, readiness fixes, signed cart links/attribution, and Subscriptions, Bookings, and Memberships writes. v7.4.1 then made newly connected dashboard sites self-heal into a running connector session.
  • v7.5.0: eight STAGGS configurator tools brought the WooCommerce total to 87.
  • v7.5.1: fixed normalized ACF tool routing and preserved dashboard-token 401 machine codes.

New in v7.1 "Roots"

The biggest release since launch.

  • Four new page builders. Spectra, Kadence Blocks, and GenerateBlocks join with full read + write; SeedProd ships read + audit. Supported builders go from 12 to 16.
  • Make a page responsive in one call on Bricks, Elementor, Divi 4, Beaver Builder, and WPBakery.
  • Playbooks. Teach an agent a multi-step workflow once and rerun it as a single callable WordPress Ability. Five tools (create / list / get / update / delete), with static cycle detection and a runtime depth cap.
  • Agent-creatable Custom Post Types, taxonomies, and ACF field groups (twelve tools), stored in options and registered on init. No PHP files, server-side slug allowlist, conservative deletes that report orphans.
  • Native in-WP MCP endpoint. Point a client straight at your-site/wp-json/respira/v1/mcp (Streamable HTTP JSON-RPC; ?rest_route= fallback supported) with an API key, no npx process required. One-click connect-by-link mints and installs the key for you.
  • System certificate-store trust. The connector trusts the OS certificate store at startup (verification stays on) with a bundled Mozilla CA fallback, so valid public certs stop being rejected on Claude Desktop's bundled Node.
  • Bricks design-token import + section presets, the Elementor 4 atomic write path (partial: 20 atomic element types with $$type envelopes, per-breakpoint + per-state styling, and a clear 422 on unsupported types instead of a silent drop), and respira_generate_activity_report for client-ready reports.

New in v6.17.0: an MCP that knows how to behave

Three additions plus the agent persona that ties them together.

  • SOUL.md, loaded into every handshake. Identity, voice, values, and rules of engagement an AI client reads before its first tool call. No "we." Privacy hard line. Builder-native edits only. Try yourself before asking the customer. Mirrored at respira.press/soul.md for outside-MCP integrations (Cursor system prompts, Claude Projects, GPT custom instructions).
  • respira_search_docs, full-text search across the Respira documentation. The agent calls this before offering to file a bug because most "bugs" are documented known issues with workarounds. Public, unauthenticated, free to call.
  • respira_report_issue, files a structured bug report from inside the AI chat directly to the maintainer. Auto-attaches site URL, builder + version, MCP version, OS, last tool, optional respira_diagnose_connection snapshot. Privacy hard line: prompts, tool args, tool results, and WP content never enter the payload.
  • respira_diagnose_connection probe timeout default 30s (was 15s), new probe_timeout_ms arg clamped [5000, 60000]. Sites behind Cloudflare custom rules routinely cross 15s on first-hit HEADs while curl returns in under 4s; the old default produced spurious "MCP timed out but the site is fine" reports.
  • Bootstrap stderr log includes the site list: respira-mcp vX.Y.Z ready · N sites: host1, host2, ..., so you can tell at a glance whether the MCP came back after a Claude restart and which sites it loaded.

The triage rule, baked into the handshake instructions: tool error → apply hint + retry once → respira_search_docs → respira_diagnose_connection → ask the customer if they want to file a bug → respira_report_issue. Never auto-file.

v6.16.0: usage telemetry ships by default

v6.16 introduced default per-tool telemetry so customers did not have to configure an OTEL bearer. As of v7.5.2 with plugin 7.5.46+, local WordPress API keys are never sent to the central ingest: the connector asks WordPress for a revocable, site-scoped telemetry token instead. Privacy remains metadata-only—no prompts, raw tool arguments, tool results, or WordPress content. RESPIRA_USAGE_OPT_OUT=1 disables the entire stream.

v6.3 — MCP Protocol Compliance

Every successful tool response includes structuredContent, the raw JSON object, alongside the existing content[0].text (stringified JSON). Follows the MCP 2025-06-18 spec. Clients that understand structuredContent get direct programmatic access to tool results without parsing JSON from text. Older clients are unaffected; the content array is still there. Unknown tool names return a proper CallToolResult with isError: true and a hint to discover available tools, instead of throwing a protocol-level JSON-RPC error. Lets LLMs self-correct gracefully rather than hitting a hard protocol failure.

v6.0 "Storefront" — Context-Aware Tool Filtering

The MCP server automatically filters the list based on the site's detected builder and active plugins, so clients receive only the useful subset. Fail-open: if detection fails, the full list is returned.

| Capability | Respira | Typical WordPress MCP servers | |---|---|---| | Page builder support | 17 builders (incl. Spectra, Kadence, GenerateBlocks) | None, or a single builder | | Element-level find/update/move/remove | Yes | No | | Build full pages from structure | Yes | No | | Convert HTML to native builder | Yes | No | | Stock image search + sideload | Yes | Rare | | Bulk operations (100 pages/call) | Yes | No | | 27 widget shortcuts (add_heading, etc.) | Yes | No | | Duplicate-before-edit safety | Yes | Rare | | Snapshot rollback | Yes, builder-aware | Rare, post content only | | SEO / Core Web Vitals / AEO analysis | Yes | Rare | | WooCommerce (products, orders, inventory) | Yes (add-on) | Rare | | Tool governance (per-tool enable/disable) | Yes | Rare |


Quick Start (3 Minutes)

Step 1: Install the WordPress Plugin

Download from respira.press/plugin → upload to WordPress → activate → go to Respira > API Keys → generate a key.

Step 2: Configure Your AI Tool

claude mcp add respira-wordpress -- npx -y @respira/wordpress-mcp-server

Create .cursor/mcp.json in your project:

{
  "mcpServers": {
    "respira-wordpress": {
      "command": "npx",
      "args": ["-y", "@respira/wordpress-mcp-server"]
    }
  }
}

Add to your Windsurf MCP configuration:

{
  "mcpServers": {
    "respira-wordpress": {
      "command": "npx",
      "args": ["-y", "@respira/wordpress-mcp-server"]
    }
  }
}

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "respira-wordpress": {
      "command": "npx",
      "args": ["-y", "@respira/wordpress-mcp-server"]
    }
  }
}

Step 3: Add Your Site

Create ~/.respira/config.json:

{
  "sites": [
    {
      "id": "my-site",
      "name": "My WordPress Site",
      "url": "https://yoursite.com",
      "apiKey": "respira_your-api-key",
      "default": true
    }
  ]
}

Or run the interactive setup wizard: npx @respira/wordpress-mcp-server --setup

Tool Limit? Use enabledTools

Some MCP clients (Antigravity, etc.) have a hard limit on active tools (often 100). Respira can expose up to 352 tools when the WooCommerce add-on is active, and up to 431 on a Bricks site that also runs ACF. To stay under the limit, add enabledTools to your config — only those tools will appear in the listing:

{
  "sites": [{ "..." : "..." }],
  "preferences": {
    "enabledTools": [
      "respira_read_page",
      "respira_update_page",
      "respira_list_pages",
      "respira_find_element",
      "respira_update_element",
      "respira_build_page",
      "respira_get_site_context",
      "respira_get_builder_info"
    ]
  }
}

Site management tools (respira_list_sites, respira_switch_site, respira_get_active_site) are always included. Unlisted tools still work if called — the filter only controls what's advertised to the client.

Done. Restart your AI tool and start editing.


v6.3 — MCP Protocol Compliance

structuredContent in All Tool Results

Every successful tool response now includes structuredContent — the raw JSON object — alongside the existing content[0].text (stringified JSON). This follows the MCP 2025-06-18 spec. Clients that understand structuredContent get direct programmatic access to tool results without parsing JSON from text. Older clients are unaffected — the content array is still there.

Improved Error Taxonomy

Unknown tool names now return a proper CallToolResult with isError: true and a hint to discover available tools, instead of throwing a protocol-level JSON-RPC error. This lets LLMs self-correct gracefully rather than hitting a hard protocol failure.


v6.0 "Storefront" — What's New

Context-Aware Tool Filtering

The MCP server automatically filters its core and WooCommerce tools based on the site's detected builder and active plugins. Less noise, faster AI responses, lower token usage. Fail-open: if detection fails, the full list is returned.

Flatsome UX Builder (Builder #12)

Full round-trip shortcode editing, element-level precision, declarative page creation, and 55-element intelligence. Detected by active theme — mixed-builder sites handled per-page.

15 New WooCommerce Commerce Tools

Storefront design intelligence bridges commerce data and page builder visuals. Bulk pricing, catalog health audits, advanced filtering, natural language product search. Total WooCommerce tools: 103.

Element-Level Operations

Find, update, move, duplicate, and remove individual elements inside any page builder — by ID, type, CSS class, or content text.

respira_find_element({ post_id: 42, identifier_type: "type", identifier_value: "heading" })
respira_update_element({ post_id: 42, identifier_type: "content", identifier_value: "Old Title", updates: { heading: "New Title" } })

Build Full Pages

Create complete pages from a declarative widget structure in one call.

respira_build_page({ title: "Services", structure: [
  { type: "heading", settings: { heading: "Our Services", tag: "h1" } },
  { type: "text", settings: { text: "<p>We build amazing things.</p>" } },
  { type: "button", settings: { text: "Get Started", link: "/contact" } }
]})

HTML-to-Builder Conversion

Convert any HTML into native builder widgets — with CSS extraction, responsive mapping, and a fidelity report.

respira_convert_html_to_builder({ html: "<section>...</section>", options: { title: "Homepage", preserve_tokens: true } })
→ { page_id: 123, fidelity: { score: 92, sections_matched: 14 } }

Stock Images

Search Openverse (Creative Commons) and sideload directly into the Media Library with auto-attribution.

respira_search_stock_images({ query: "mountain landscape", per_page: 10 })
respira_sideload_image({ url: "https://...", caption: "Photo by...", alt: "Mountain" })

Bulk Operations

Apply changes across up to 100 pages in a single call — with mandatory snapshots for rollback.

respira_bulk_pages_operation({ page_ids: [12, 15, 18, 22], operation: { type: "find_and_replace", find: "2025", replace: "2026" } })

27 Widget Shortcuts

One-liner tools to add any widget to a page without building the full structure:

respira_add_heading({ post_id: 42, title: "Hello World", tag: "h2" })
respira_add_button({ post_id: 42, text: "Buy Now", url: "/shop" })
respira_add_image({ post_id: 42, image_url: "https://..." })

17 Supported Page Builders

| Builder | Support Level | Element Ops | Build Page | Dynamic Schemas | |---|---|---|---|---| | Elementor | Full Intelligence | Native API | Yes | Yes — runtime control registry | | Divi 5 | Full Intelligence | Native API | Yes | Yes — 40+ module definitions | | Divi 4 | Full Intelligence | Tree utility | Yes | Static schemas | | Flatsome | Full Intelligence | Tree utility | Yes | Yes — 55-element intelligence | | Beaver Builder | Full Support | Tree utility | Yes | Static schemas | | Bricks | Full Intelligence | Native API | Yes | Yes: 25 dedicated tools, ACSS integration | | Gutenberg | Full Support | Tree utility | Yes | Block registry | | Oxygen | Smart Defaults | Tree utility | Yes | Static schemas | | WPBakery | Smart Defaults | Tree utility | Yes | Static schemas | | Breakdance | Smart Defaults | Tree utility | Yes | Static schemas | | Spectra | Full Support | Native blocks | Yes | Block registry | | Kadence Blocks | Full Support | Native blocks | Yes | Block registry | | GenerateBlocks | Full Support | Native blocks | Yes | Block registry | | GreenShift | Full Support | Native blocks | Yes | Block registry | | SeedProd | Read + Audit | Inspection | No | Static schemas | | Brizy | Basic | Tree utility | Best-effort | — | | Thrive Architect | Basic | Tree utility | Best-effort | — | | Visual Composer | Basic | Tree utility | Best-effort | — |

The Gutenberg-native block libraries

Spectra, Kadence Blocks, GenerateBlocks and GreenShift store ordinary WordPress blocks in post_content. Each has its own adapter in the plugin, with its own detection, its own block namespace (kadence/*, uagb/*, generateblocks/*, greenshift-blocks/*) and its own module list, and reads and writes go through the Gutenberg parse and serialize path. Element operations, build_page and snapshots all work on them.

What they do not have is a Respira-authored schema pack of their own, and they do not need one: the Gutenberg intelligence package reads the live WP_Block_Type_Registry on your site, so it already enumerates their blocks and attributes, including any block the library added after this build shipped. respira_get_builder_info reports this in intelligence_package, which reads gutenberg for all four. intelligence_available: false for one of them means the site is running a plugin older than 8.2.1.


All Tools

Tools on one site

The server lists only what the connected site can use. Builder tools appear on the builder they serve, ACF tools where ACF is active, and WooCommerce tools where the add-on runs. Measured over stdio against stub sites:

| Site | Tools listed | |---|---| | Core site (Gutenberg, no WooCommerce or ACF) | 233 | | Core site with ACF | 284 | | WooCommerce add-on | 334 | | WooCommerce and ACF on Elementor | 395 | | WooCommerce and ACF on Bricks | 413, the most one site can see | | Site context unreadable (everything is shown) | 262 |

A client with a tool cap can narrow this with enabledTools (see Quick Start).

Native Site Editor structures (10 tools) — Shipped in v8.0

These are Respira-native WordPress operations, not a copied generic tool catalog. User-owned structures use the same approval, revision, snapshot, no-op detection, read-back, and render-verification contract as template editing. Theme and plugin patterns are inspectable but remain owned by their source.

| Tool | Description | |---|---| | wordpress_list_site_patterns | List user, theme, plugin, and core patterns with source, sync status, and fingerprints | | wordpress_get_site_pattern | Inspect a pattern as a lossless path-addressed block tree | | wordpress_create_site_pattern | Stage a synced or unsynced user pattern | | wordpress_update_site_pattern | Apply exact block operations with stale/wrong-target protection | | wordpress_delete_site_pattern | Delete through approval; referenced patterns are refused by default | | wordpress_list_site_navigations | List block navigation entities with compact nested items and exact paths | | wordpress_get_site_navigation | Inspect the full native navigation block document and its references | | wordpress_create_site_navigation | Stage a native block navigation entity | | wordpress_update_site_navigation | Target one link/submenu while preserving unknown extension blocks | | wordpress_delete_site_navigation | Delete through approval; referenced navigation is refused by default |

Design Direction (22 tools)

One saved design direction per site — identity, DTCG-subset tokens, dials, guidance, waivers — that agents read before building anything. Readiness is computed on every response: ready needs the bg + ink + accent color roles plus a heading/body font pair, and activation refuses a direction that is not ready. The direction document is site data, not instructions.

The token standard lane: import any token format (DTCG 2025.10 lenient, Tokens Studio, Tailwind, pasted :root{} CSS) into a draft, activate once ready, apply into the builder's NATIVE token store, export as strict DTCG 2025.10 with per-builder mapping metadata under $extensions["press.respira"].

The design check closes the loop: wordpress_check_design runs deterministic slop-and-drift rules (no rendering) against draft content or a saved post, honors the direction's waivers, and lists what only the planned rendered check can verify — run it after building, before treating the work as done.

| Tool | Description | |---|---| | wordpress_get_design_direction | Read the active direction (or one by id) with computed readiness | | wordpress_list_design_directions | List saved directions with readiness and the active flag | | wordpress_save_design_direction | Save or update a schema-validated DRAFT; response reports readiness | | wordpress_activate_design_direction | Activate through approval; refuses a not-ready direction | | wordpress_deactivate_design_direction | Stop resolving builds against the active direction through approval; clears the site pointer only, so the document keeps its tokens, guidance and history and reactivating is one call. Returns 409 respira_no_active_direction when nothing is active | | wordpress_delete_design_direction | Trash through approval; clears the active pointer if needed | | wordpress_import_design_tokens | Import DTCG / Tokens Studio / Tailwind / CSS tokens into a draft; dry-run by default, returns the readiness delta, never activates | | wordpress_apply_design_direction | Push the direction's tokens into the resolved builder's native store through approval; snapshot first, per-builder report persisted | | wordpress_export_design_direction | Export strict DTCG 2025.10 with roles + per-builder apply reports in $extensions["press.respira"] | | wordpress_check_design | Design check: deterministic slop-and-drift rules, plus rendered: true (plugin 8.6.20+) for contrast, structure and painted colors on the real page, screenshots attached | | wordpress_mint_design_preview | Mint a signed preview URL (plugin 8.6.22+) that renders the real page, drafts and duplicates included, frameable by the respira.press dashboard only; 15 minutes, or ttl_days (1 to 90) for a link a person will open; stores nothing | | wordpress_create_share_link | Create a share link (plugin 8.8.33+) for any page, draft or duplicate: opens with no WordPress login for ttl_days (1 to 90, default 14), no write; send it to the client or whoever signs off | | wordpress_create_approval_link | Create an approval link (plugin 9.0.19+) for a pending duplicate: opens with no WordPress login and a bar at the top with the pending change, View diff, Compare with live, Reject and Approve & publish; approve runs the same flow as Respira → Activity and opens the live page; ttl_days 1 to 30, revocable, only a key whose user is an administrator can mint one | | wordpress_revoke_approval_link | Revoke every approval link of a pending duplicate; the share preview keeps working | | wordpress_create_review_link | Create a Murmur review link (plugin 8.9.0+): a page or the site opens with no login and a review bar; the reviewer taps a spot and leaves a note that comes back to you and your agent | | wordpress_list_review_links | List Murmur review links with scope, expiry, status and note counts | | wordpress_revoke_review_link | Revoke a Murmur review link; it stops with the next request | | wordpress_list_review_comments | List the notes people left through review links, each with the page, the quote, the builder element and its status | | wordpress_get_review_comment | Read one note with its anchor, replies and resolution | | wordpress_reply_to_review_comment | Reply to a note; the reviewer sees it under their note on the page | | wordpress_resolve_review_comment | Mark a note resolved with what changed and the snapshot id | | wordpress_get_design_apply_reports | Read the stored per-builder apply reports for a direction: what apply actually wrote, straight from the site |

Bricks Deep Intelligence (25 tools)

Listed when Bricks is the active builder.

| Tool | Description | |---|---| | respira_list_bricks_global_classes | List all global CSS classes with settings | | respira_create_bricks_global_class | Create a new global CSS class | | respira_update_bricks_global_class | Update an existing global class (merge) | | respira_delete_bricks_global_class | Delete a global class by ID | | respira_get_bricks_theme_styles | Get site-wide theme style configuration | | respira_update_bricks_theme_styles | Update theme styles (full replace) | | respira_get_bricks_color_palette | Get color palette groups | | respira_update_bricks_color_palette | Update color palette (full replace) | | respira_get_bricks_typography | Get global CSS variables and typography scales | | respira_update_bricks_typography | Update global variables and categories | | respira_list_bricks_components | List all Bricks templates/components | | respira_get_bricks_component | Get a component with full element structure | | respira_apply_bricks_component | Insert a component into a page with ID remapping | | respira_search_bricks_elements | Search across all pages by element type, class, or setting | | respira_bricks_health_check | Diagnostic: orphaned elements, duplicate IDs, broken refs | | respira_bricks_detect_acss | Detect Automatic.css installation and design tokens | | respira_bricks_import_acss | Import ACSS utility classes into Bricks global registry | | respira_bricks_query_loops | Find all query loop elements, filter by post type | | respira_bricks_style_profile | Analyze page design patterns (colors, spacing, typography) | | respira_bricks_design_system | Single-call export of complete Bricks design system | | respira_bricks_import_design_tokens | Import a design-token file into the Bricks color palette and global CSS variables | | respira_bricks_list_section_presets | List the curated section presets: hero, features, CTA, testimonials, pricing, stats, FAQ | | respira_bricks_insert_section_preset | Insert a curated section preset into a page as a new section | | respira_bricks_scaffold_bem | Scaffold a BEM block as Bricks global classes | | respira_bricks_lint_bem | Audit the global-class registry against the BEM convention |

ACF (54 tools)

Listed when Advanced Custom Fields is active on the site. Repeaters, flexible content, galleries and options pages need ACF Pro; on a site without Pro those tools answer PRO_FEATURE_REQUIRED.

| Tool | Description | |---|---| | respira_acf_get_field / respira_acf_get_fields / respira_acf_update_field / respira_acf_update_fields / respira_acf_delete_field | Read, write and remove field values on a post; update_fields writes several in one snapshot | | respira_acf_bulk_get_fields / respira_acf_bulk_update_fields / respira_acf_compare_fields / respira_acf_clone_fields | The same fields across many posts: read them, update up to 500 posts, diff two posts, copy values between posts | | respira_acf_list_field_groups / respira_acf_get_field_group / respira_acf_create_field_group / respira_acf_update_field_group / respira_acf_delete_field_group | Field group CRUD with location rules | | respira_acf_export_field_group / respira_acf_import_field_group / respira_acf_clone_field_group | Move a field group as JSON, or duplicate it under a new name | | respira_acf_get_field_object / respira_acf_search_fields / respira_acf_validate_field | Inspect a field definition, search every definition, validate a value without writing | | respira_acf_get_repeater / respira_acf_get_repeater_row / respira_acf_add_repeater_row / respira_acf_update_repeater_row / respira_acf_delete_repeater_row / respira_acf_reorder_repeater / respira_acf_count_repeater_rows | Repeater rows by zero-based index (ACF Pro) | | respira_acf_get_flexible_content / respira_acf_get_flexible_layout / respira_acf_add_flexible_layout / respira_acf_update_flexible_layout / respira_acf_delete_flexible_layout / respira_acf_reorder_flexible_layouts | Flexible content layouts (ACF Pro) | | respira_acf_get_gallery / respira_acf_update_gallery / respira_acf_add_to_gallery / respira_acf_remove_from_gallery / respira_acf_reorder_gallery | Gallery fields (ACF Pro) | | respira_acf_list_options_pages / respira_acf_create_options_page / respira_acf_get_option / respira_acf_get_options / respira_acf_update_option / respira_acf_update_options / respira_acf_delete_option / respira_acf_export_options | Options pages and their values (ACF Pro) | | respira_acf_get_relationship / respira_acf_update_relationship / respira_acf_get_reverse_relationships / respira_acf_get_post_object | Relationship and post object fields, including every post that points at a given post | | respira_acf_get_user_field / respira_acf_update_user_field / respira_acf_get_term_field / respira_acf_update_term_field | Fields on user profiles and taxonomy terms |

Elementor (8 tools)

Seven are listed when Elementor is the active builder; respira_add_stock_image is listed on every builder.

With Respira for WordPress 9.0.12 and Elementor 4.2 or newer, a style written as plain CSS on a v4 element (update_element, build_page, the HTML converter) is converted to Elementor's own typed values before it is stored, and the stylesheet Elementor keeps for those styles is rebuilt so the change shows on the page. Whatever cannot be converted becomes that element's custom CSS, and anything Elementor refuses comes back named in the call's warnings. On older Elementor releases the value is stored as sent, which is what earlier versions did.

| Tool | Description | |---|---| | respira_list_elementor_widgets | Every registered widget and element, each with whether it is atomic or classic, whether it can hold children and whether it needs Elementor Pro. Elements are the containers, and they are listed separately from widgets | | respira_get_elementor_widget_schema | The full JSON Schema for one widget type: every control, with types, defaults and allowed values, plus the same atomic/classic, children and Pro guidance | | respira_elementor_design_system | Export the kit's global colors and typography, which classic widgets link to, plus Elementor 4 variables and global classes, which atomic elements link to, each with the reference to write | | respira_update_elementor_global_colors | Add or update global colors in the active kit | | respira_update_elementor_global_typography | Add or update global typography styles in the active kit | | respira_elementor_add_custom_js | Add a script to a page as an HTML widget inside a container | | respira_add_stock_image | Find a stock image, sideload it and place it as an image widget, in one call | | respira_validate_elementor_json | Check Elementor JSON for rendering fidelity before writing it |

Element Operations (7 tools)

| Tool | Description | |---|---| | respira_find_element | Find element by ID, type, CSS class, or content text | | respira_update_element | Update settings on a specific element | | respira_move_element | Move element to a different container/position | | respira_duplicate_element | Clone an element with new IDs | | respira_remove_element | Remove an element from the page | | respira_batch_update | Apply multiple operations atomically (extract once → apply all → inject once) | | respira_reorder_elements | Reorder children within a container |

Page Building (3 tools)

| Tool | Description | |---|---| | respira_build_page | Create a complete page from declarative widget structure | | respira_convert_html_to_builder | Convert HTML into native builder widgets with fidelity report | | respira_bulk_pages_operation | Apply operations across up to 100 pages with mandatory snapshots |

Stock Images (2 tools)

| Tool | Description | |---|---| | respira_search_stock_images | Search Openverse for Creative Commons images | | respira_sideload_image | Download and import image into Media Library with attribution |

27 Widget Shortcuts

Add any widget to a page in one call:

respira_add_heading · respira_add_text · respira_add_button · respira_add_image · respira_add_video · respira_add_section · respira_add_divider · respira_add_spacer · respira_add_icon · respira_add_icon_list · respira_add_social_icons · respira_add_form · respira_add_map · respira_add_counter · respira_add_progress_bar · respira_add_testimonial · respira_add_tabs · respira_add_accordion · respira_add_toggle · respira_add_alert · respira_add_html · respira_add_menu · respira_add_sidebar · respira_add_search · respira_add_gallery · respira_add_slider · respira_add_pricing_table

Page Builder Tools (6 tools)

| Tool | Description | |---|---| | respira_get_builder_info | Active builder, version, modules, support level | | respira_extract_builder_content | Extract structured content from any page | | respira_inject_builder_content | Replace page content with builder data | | respira_update_module | Update one module by path or label (v1 — use update_element for v2) | | respira_find_builder_targets | Find editable targets in a page | | respira_apply_builder_patch | Apply a JSON patch to builder content |

Pages & Posts (17 tools)

| Tool | Description | |---|---| | respira_list_pages / respira_read_page | List and read pages with builder detection | | respira_update_page / respira_delete_page | Update (with safe duplicate) and delete | | respira_create_page_duplicate | Create working copy before editing | | respira_approve_duplicate / respira_reject_duplicate | Apply a pending duplicate live (snapshot first, same flow as Respira → Activity), or delete it. Administrator keys only, governed per site (plugin 9.1.5+) | | respira_list_posts / respira_read_post | List and read posts | | respira_update_post / respira_delete_post | Update and delete posts | | respira_create_post_duplicate | Duplicate a post | | respira_list_custom_posts / respira_get_custom_post | Custom post types | | respira_create_custom_post / respira_update_custom_post / respira_delete_custom_post | CRUD for CPTs |

Snapshots & Rollback (4 tools)

| Tool | Description | |---|---| | respira_list_snapshots | List all snapshots for a post | | respira_get_snapshot | Get snapshot content | | respira_diff_snapshots | Compare two snapshots | | respira_restore_snapshot | Restore a previous version |

Plan mode (3 tools)

respira_begin_session with mode: "plan" makes every write return a respira_plan_step (predicted effect, draft copy or live, step id) instead of changing the site. Reads still run. respira_end_session turns it off. Plugin 9.1+.

| Tool | Description | |---|---| | respira_get_plan | Show the planned steps, arguments with secrets hidden | | respira_apply_plan | Run the steps the person said yes to, in order, and return one receipt with snapshots and preview links | | respira_discard_plan | Remove steps without running them |

Analysis, security and reports (17 tools)

| Tool | Description | |---|---| | respira_analyze_seo | Full SEO audit with actionable recommendations | | respira_analyze_performance | Page speed and optimization | | respira_get_core_web_vitals | LCP, CLS and INP measured by PageSpeed Insights: real-user field data when Google has it, plus lab metrics | | respira_analyze_aeo | AI search engine optimization | | respira_analyze_readability | Flesch score, sentence analysis | | respira_analyze_images | Image optimization audit | | respira_check_seo_issues | Technical SEO checklist | | respira_check_structured_data | Schema.org validation, plus every JSON-LD block with its values and the plugin that printed it | | respira_find_in_page | Find text in the published HTML, head included, and the snippet or setting on the site that holds it | | respira_analyze_rankmath | RankMath score + ready-to-apply fixes | | respira_scan_page_accessibility | WCAG accessibility scan | | respira_list_accessibility_scans | Previous scan history | | respira_get_accessibility_scan | Detailed scan results + violations | | respira_apply_accessibility_fixes | Auto-fix a11y violations | | respira_run_security_audit | Versions, core checksums, administrators, plugins, themes, indicators and coverage, plus known_vulnerabilities on a licensed site. Reads only; the optional probe_uploads_execution writes and deletes one inert file | | respira_update_core_security | Apply the WordPress core security release WordPress.org offers on the current branch, after backup confirmation and approval | | respira_generate_activity_report | The client report for a period, from the site's activity log: what changed, examples, time saved. Reads only; administrator key |

Menus (12 tools)

| Tool | Description | |---|---| | respira_list_menus / respira_get_menu / respira_create_menu / respira_update_menu / respira_delete_menu | Full menu CRUD | | respira_list_menu_items / respira_get_menu_item / respira_create_menu_item / respira_update_menu_item / respira_delete_menu_item | Menu item management | | respira_list_menu_locations / respira_assign_menu_location | Theme location assignment |

Media (6 tools)

| Tool | Description | |---|---| | respira_list_media / respira_get_media | Browse media library | | respira_upload_media / respira_update_media / respira_delete_media | Upload, update metadata, delete | | respira_update_media_batch | Bulk update alt text, title, caption (up to 50 items) |

Users & Comments (10 tools)

| Tool | Description | |---|---| | respira_list_users / respira_get_user / respira_create_user / respira_update_user / respira_delete_user | User management | | respira_list_comments / respira_get_comment / respira_create_comment / respira_update_comment / respira_delete_comment | Comment operations |

Taxonomies (9 tools)

| Tool | Description | |---|---| | respira_list_taxonomies / respira_get_taxonomy | Browse taxonomies | | respira_list_terms / respira_get_term / respira_create_term / respira_update_term / respira_delete_term | Term CRUD | | respira_list_post_types / respira_get_post_type | Post type info |

Site & Plugins (22 tools)

| Tool | Description | |---|---| | respira_get_site_context | WordPress version, theme, plugins, URL | | respira_get_theme_docs | Theme documentation and structure | | respira_list_plugins / respira_install_plugin / respira_activate_plugin / respira_deactivate_plugin / respira_update_plugin / respira_delete_plugin | Plugin management | | respira_update_theme | Update a theme to the latest version offered to the site, approval-gated, with a health check of the site afterwards | | respira_list_updates | The update roster: every plugin and theme with the version it runs and the version on offer, WordPress core on the site's own branch, and Respira itself (plugin 9.0.13) | | respira_run_updates | One batch of updates, each item pinned to the version the person saw, verified by reading the installed version back, with a health check after each one and a receipt per item; approval-gated (plugin 9.0.13) | | respira_quarantine_plugin / respira_restore_quarantined_plugin | Stop a plugin without running its deactivation or uninstall code and keep every file, renamed so the web server will not run it, with a manifest of hashes. Also takes an active file with no plugin header and a must-use plugin file. Restore moves it back, inactive. Approval-gated | | respira_flush_rewrites | Rebuild the rewrite rules from WordPress and the active plugins, keep the previous table as a snapshot, and report which rules went and whether any still answers before the page rule | | respira_revoke_application_password | Revoke one application password by user id and uuid from the security audit, approval-gated | | respira_list_options / respira_get_option / respira_update_option / respira_delete_option | WordPress options | | respira_purge_cache | Purge page and object caches and report which caching layers were touched. Pass post_id for one page, omit it for the whole site. Every Respira write already purges what it changed; this is the manual lever for changes Respira did not make | | respira_validate_security | Security audit | | respira_get_server_compatibility | Plugin/MCP version check |

Multi-Site (3 tools)

| Tool | Description | |---|---| | respira_list_sites | List all configured WordPress sites | | respira_switch_site | Switch active site | | respira_get_active_site | Get current site info |

Native connector only (6 tools)

The plugin's own MCP endpoint (the Claude.ai and ChatGPT connectors, or any client pointed at the site's MCP URL) names tools in the respira_wordpress_* form. These six exist only there; the npm server does not list them.

| Tool | Description | |---|---| | respira_wordpress_read_debug_log | Tail the site's debug log to diagnose PHP fatals, warnings and notices without SSH. Reads only; needs edit_themes and WP_DEBUG_LOG | | respira_wordpress_detect_page_builder | Which page builder a specific page uses | | respira_wordpress_detach_duplicate | Keep a tracked duplicate as its own page, without deleting it or touching the original | | respira_wordpress_read_page_v2 / respira_wordpress_read_post_v2 / respira_wordpress_read_custom_post_v2 | Reads that return heavy fields only when asked for |

WooCommerce Add-on (104 tools)

Available when the WooCommerce add-on is installed. Included free with Studio and Founder plans.

| Category | Tools | |---|---| | Storefront intelligence (NEW in v6.0) | analyze_shop_page, analyze_product_page, update_product_card_layout, add_low_stock_badge, add_sale_badge, update_checkout_layout | | Product-card fields (NEW in 8.0) | analyze_storefront_card, update_storefront_card_field | | Catalog operations (NEW in v6.0) | list_products_advanced, bulk_update_products, analyze_catalog_health, find_product_by_natural_language | | Pricing (NEW in v6.0) | bulk_update_prices, schedule_sale, revert_pricing | | Inventory (NEW in v6.0) | bulk_update_stock, find_low_stock | | Product CRUD | list_products, get_product, create_product, update_product, duplicate_product | | Order management | list_orders, get_order, update_order_status | | Inventory control | get_stock_status, update_stock | | Product categories | list_categories, get_category, create_category, update_category, delete_category | | Product tags | list_tags, get_tag, create_tag, update_tag, delete_tag | | Analytics | revenue_summary, sales_timeseries, top_products, orders_summary, customers_summary | | Store configuration | get_store_configuration, list_payment_gateways, list_shipping_zones, list_tax_rates | | Webhooks | list_webhooks, get_webhook, create_webhook, update_webhook, delete_webhook, test_webhook |


Safe Editing

Every mutation creates a snapshot. Roll back anytime.

  1. Snapshot captured before every edit
  2. Duplicate-before-edit — original stays untouched
  3. Approval workflow — review changes in WordPress admin
  4. Rollback — restore snapshots (90-day retention, pinnable) with respira_restore_snapshot

Tool Governance

Admins can enable/disable individual tools from the WordPress dashboard. Governance applies to both REST API and WebMCP/Abilities API paths.


Skills as prompts

The server offers every bundled Respira skill as an MCP prompt, named by its slug, for example respira-site-audit or activity-report-composer. Clients that show prompts as slash commands list them with no install step. Picking one sends the skill's instructions as the first message, with an optional request argument for the page, site or client it is for. Listing them needs no site connection.

npx @respira/wordpress-mcp-server install-skills still copies the same skills into ~/.claude/skills for Claude Code.


Multi-Site Support

Manage multiple WordPress sites from one config:

{
  "sites": [
    { "id": "production", "name": "Production", "url": "https://mysite.com", "apiKey": "respira_prod_key", "default": true },
    { "id": "staging", "name": "Staging", "url": "https://staging.mysite.com", "apiKey": "respira_staging_key" }
  ]
}

Switch sites: respira_switch_site({ siteId: "staging" })

For agencies managing many sites, use the hosted setup at respira.press/dashboard/mcp to generate configs and install commands from your account.


Tool Naming: respira_*

All tools use respira_* names (e.g. respira_update_page, respira_find_element). Each one also answers to its legacy wordpress_* name: clients see respira_generate_activity_report, and a saved call to wordpress_generate_activity_report still reaches it. The legacy aliases are deprecated and will be removed in a future release. Update any prompts or workflows that still reference wordpress_* tools.


WordPress AI Ecosystem

Respira works with the official WordPress AI stack:

| Path | How it works | Requirements | |---|---|---| | Standalone MCP (this package) | npx @respira/wordpress-mcp-server | Node 18+, Respira plugin | | WordPress MCP Adapter | Abilities auto-discovered via WP-CLI STDIO | WP 6.9+, MCP Adapter, Respira v5.0+ | | WebMCP | Browser-native MCP via Chrome Abilities API | Chrome with WebMCP enabled, Respira plugin |


Quick Install

Three paths — pick the one that matches how you work.

One-command install (recommended)

npx add-mcp "npx -y @respira/wordpress-mcp-server"

Auto-detects your AI tool (Claude Code, Cursor, Windsurf, Codex, and 9+ more) and writes the correct config file. Powered by add-mcp.

After running, set your environment variables:

# In your shell profile or .env
export WORDPRESS_URL="https://yoursite.com"
export WORDPRESS_API_KEY="respira_your_key"

Interactive setup wizard

npx @respira/wordpress-mcp-server --setup

Walks you through site URL, API key, HTTP auth (for staging sites), and connection testing. Saves config to ~/.respira/config.json.

Manual configuration

See the Quick Start section above for per-tool JSON config examples (Cursor, Claude Code, Claude Desktop, Windsurf).


Installation Options

NPX (Easiest)

npx -y @respira/wordpress-mcp-server

Zero-install. Good for trying it out. Downside: the npx cache can get corrupted (interrupted installs, external drives, antivirus quarantine) and produce confusing ENOENT errors. If you hit any, see Troubleshooting below.

Global Install (Most Stable — Recommended for Daily Use)

npm install -g @respira/wordpress-mcp-server
respira-wordpress-mcp

Avoids the npx cache entirely. Best choice if you're using Respira every day or hit any npx-related errors.

Interactive Setup Wizard

npx @respira/wordpress-mcp-server --setup

CLI Options

| Flag | Alias | Description | |---|---|---| | --setup | | Interactive setup wizard | | --list | | List configured sites | | --test | | Test connection | | --stdio | | STDIO transport (MCP Adapter) | | --doctor | -d | Run health diagnostics | | --doctor --json | | Health diagnostics as JSON | | --help | | Help |

Environment Variables

export WP_SITE_URL=https://your-site.com
export WP_API_KEY=respira_your-api-key

Health Check

Verify your setup is working end-to-end:

npx @respira/wordpress-mcp-server --doctor

Checks Node.js version, config file, site connectivity, plugin version, API compatibility, and available updates. Reports pass/fail for each check with actionable messages.

npx @respira/wordpress-mcp-server --doctor --json

Machine-readable output for CI/CD pipelines or AI tool diagnostics.


Troubleshooting

Use the full path:

{ "command": "C:\\Program Files\\nodejs\\npx.cmd", "args": ["-y", "@respira/wordpress-mcp-server"] }

Or install globally: npm install -g @respira/wordpress-mcp-server then use { "command": "respira-wordpress-mcp" }.

  1. Check API key: WordPress > Respira > API Keys
  2. URL must include https://
  3. Plugin must be activated
  4. Check if hosting blocks REST API

Some WordPress sites have plugin or theme rewrite rules that catch /wp-json/[anything] and rewrite the path to index.php without the ?rest_route= query var. The result: WordPress's redirect_canonical() 301-redirects the request to the homepage (you'll see x-redirect-by: WordPress on the redirect chain), and the MCP server gets HTML back where it expected JSON.

Since v6.11.2, the MCP server auto-detects this and transparently retries the call as ?rest_route=... against the site root. If the retry returns JSON, it sets a per-session sticky flag and routes every subsequent call directly through ?rest_route=, with one stderr warning on first activation.

For sites where you know this rewrite shadowing is in play, you can skip the pretty-permalink probe entirely by adding forceRestRoute: true to the site config:

{
  "sites": [
    {
      "id": "my-site",
      "name": "My WordPress Site",
      "url": "https://yoursite.com",
      "apiKey": "respira_your-api-key",
      "default": true,
      "forceRestRoute": true
    }
  ]
}

Run wordpress_diagnose_connection for triangulation — it now probes both the pretty path and the ?rest_route= form, and reports rest_route_fallback_worked, rest_route_fallback_active, and force_rest_route_configured.

  1. Restart your AI tool completely
  2. Validate JSON syntax in config file
  3. Check config file location
  4. Run npx @respira/wordpress-mcp-server --test to verify

Your npx cache is corrupted. Common causes: interrupted install, external drive disconnected mid-install, antivirus quarantining files, or npm cache clean running while npx was active.

Fix with one of these (in order of preference):

# 1. Switch to global install — most stable, recommended
npm install -g @respira/wordpress-mcp-server
# then in your AI client config, use:
#   "command": "respira-wordpress-mcp"   (no "npx" wrapper)

# 2. Or clear the npx cache and let it rebuild
npx clear-npx-cache
npx -y @respira/wordpress-mcp-server

# 3. Or nuke the entire npm cache
npm cache clean --force

Security

API key validation happens server-side in the WordPress plugin. The MCP server passes credentials but does not store or validate them.

wordpress_run_security_audit collects bounded security evidence and only reads, deep_scan included. The one exception is opt-in: probe_uploads_execution writes one inert PHP file into uploads, requests it to learn whether PHP runs there, and deletes it. On a licensed site the result includes known_vulnerabilities, with status ok or unavailable, and an unavailable match never reads as clean. wordpress_update_core_security installs only the security release WordPress.org offers on the site's current branch, after backup confirmation and explicit two-step approval, and returns post-update verification evidence.

Report vulnerabilities to [email protected].


Links


Where to Find Respira

| Directory | Listing | |---|---| | npm | @respira/wordpress-mcp-server | | Official MCP Registry | io.github.webmyc/respira-wordpress | | Smithery | smithery.ai | | Glama | glama.ai/mcp/servers | | mcp.so | mcp.so | | cursor.directory | cursor.directory |


License

MIT © Respira