Finding your next read
Practical craft for people building for the web.
Explore DevelopmentFinding your next read
THE FINDERPRESS TOOL DIRECTORY
Explore this tool and check the official listing for its latest features and requirements.
01 / SOURCE DETAILS
Enable Abilities for MCP gives you full control over which WordPress Abilities are available to AI assistants through the MCP (Model Context Protocol) Adapter. WordPress 6.9 introduced the Abilities API, allowing external tools to discover and execute actions on your site. This plugin extends that functionality by registering a comprehensive set of content management abilities and providing a simple admin interface to toggle each one on or off. Connect from claude.ai with just a URL Since version 2.1 the plugin ships an embedded OAuth 2.1 server built for claude.ai custom connectors. Add your site in claude.ai → Settings → Connectors, log in with your WordPress user, approve the consent screen — connected. No Client ID, no Application Password, no local configuration. Works from the claude.ai web app, mobile apps, and Claude Desktop Each team member authenticates with their own WordPress account and role — a subscriber can never do what only an editor should Every ability execution lands in the activity log under the real user’s name Works on single sites, subdirectory installs, and multisite networks (network-activate so the main site serves the OAuth discovery documents for every subsite) Connect from ChatGPT with the same URL (beta) claude.ai identifies itself with a fixed metadata URL the plugin already trusts. ChatGPT instead registers itself dynamically per connector (RFC 7591), so it needs its own door: turn on ChatGPT & Other OAuth Connectors on the Connection tab and list the callback URLs a connector is allowed to send users back to. In ChatGPT, turn on Developer mode (available on paid plans) and create a connector with the same MCP server URL; the normal login-and-consent flow takes over. Opt-in and off by default — with the toggle off the discovery document drops registration_endpoint , /oauth/register refuses every request, and the claude.ai connector behaves exactly as before A connector may only ever return a user to a callback URL you listed , re-checked on every authorization request — remove one and clients that registered while it was allowed are blocked immediately Wildcards are allowed inside the path, never in the host; registration is capped and rate-limited per IP Connectors that ask you to paste a Client ID and Secret instead are covered too — the panel can issue one (the secret is shown once and stored only as a hash) Same as the claude.ai connector downstream: each user logs in with their own WordPress account and role, approves a consent screen, and every execution lands in the activity log under their name Prefer tokens? Application Passwords (per-user) and a single-admin Bearer token connect Claude Desktop / Claude Code, OpenAI Codex CLI, and Google Antigravity — the Connection tab generates ready-to-paste configuration for each client, and fills in your credentials automatically. Features 112 abilities organized in 21 categories: Core, Read, Write, SEO (Rank Math), SEO (SEOPress), SEO (Yoast), Navigation Menus, Utility, Multilanguage, Custom Post Types, WooCommerce, The Events Calendar, Code Snippets, JetEngine Options Pages, JetEngine Query Builder, Elementor, LearnDash, Tutor LMS, AI Agent Readiness (llms.txt), FSE Block Templates, and Accessibility (WCAG) WooCommerce integration — dedicated abilities to manage products, orders, and customers using the native WooCommerce API (HPOS-compatible, formally declared) The Events Calendar integration — list, get, create, and update events with venue, organizer, and date filters claude.ai OAuth custom connector — connect from claude.ai (web, mobile, or desktop) with zero local setup: an embedded OAuth 2.1 server with Client ID Metadata Document (CIMD) support lets each user log in with their own WordPress account and role ChatGPT & other OAuth connectors (beta) — separately opt-in: RFC 7591 dynamic client registration at /oauth/register , gated by an administrator-managed callback allowlist, so clients that register themselves can connect through the same consent flow Admin dashboard with toggle switches for each ability Per-ability control — expose only what you need Third-party ability control — abilities registered by other MCP-ready plugins (e.g. Fluent Forms) appear in the same dashboard, grouped by plugin, with the same per-ability toggles; disabling one removes it from every MCP server on the site Secure by design — proper capability checks, input sanitization, and per-post permission validation WPCS compliant — fully passes WordPress Coding Standards (phpcs) MCP-ready — all abilities include show_in_rest and mcp.public metadata Available Abilities Read (safe, query-only): Get posts with filters (status, category, tag, search) Get single post details (content, SEO meta, featured image) Get categories, tags, pages, comments, media, and users Write (create & modify): Create, update, and delete posts Create categories and tags Create pages Moderate comments Reply to comments as the authenticated user Upload images from external URLs to the media library (with optional auto-assign as featured image) Duplicate any post, page, or custom post type item — including all post meta (ACF, SEO, featured image) and taxonomy terms; saved as a draft by default Assign a custom taxonomy’s terms to a post or page (e.g. a taxonomy registered by a companion plugin) SEO — Rank Math: Get full Rank Math metadata for any post/page (title, description, keywords, robots, Open Graph, SEO score) Update Rank Math metadata: SEO title, description, focus keyword, canonical URL, robots, Open Graph, primary category, pillar content SEO — SEOPress: Get full SEOPress metadata for any post/page (title, description, focus keyword, robots, canonical, Open Graph, Twitter Card) Update SEOPress metadata: SEO title, description, focus keyword, canonical URL, robots directives, Open Graph, Twitter Card SEO — Yoast SEO: Get full Yoast SEO metadata for any post/page (title, description, focus keyphrase, canonical, robots, Open Graph, Twitter Card) Update Yoast SEO metadata: SEO title, description, focus keyphrase, canonical URL, robots (noindex, nofollow, advanced), Open Graph, Twitter Card Get Yoast sitemap index — fetch and parse the sitemap index, returning all registered sitemap URLs with last modification date Custom Post Types: List all registered custom post types with configuration and taxonomies Get items from any CPT with filtering, search, and taxonomy queries Get full details of a CPT item including all meta fields (WooCommerce, ACF, JetEngine, etc.) Create, update, and delete CPT items with taxonomy and meta field support Get CPT taxonomies with their terms Assign taxonomy terms to CPT items Read term meta by exact key, or all meta for a term Write a term meta field by exact key Update a term’s core fields: name, slug, description, or parent WooCommerce: List products with price, SKU, stock status, categories, and type Get full product detail including gallery, attributes, and variations Update product price, sale price, stock quantity, and status List orders with customer, total, status, and date (HPOS-compatible) Get full order detail: line items, billing/shipping, totals, and notes Update order status with optional note List customers with email, name, total spent, and order count The Events Calendar: List events with start/end date, venue, organizer, and date range filter Get full event detail with resolved venue address and organizer contact Create new events with title, description, dates, venue, and organizer Update existing events Navigation Menus: List menus with item counts and theme locations, and get one menu’s full item hierarchy Create a new menu, and add pages, posts, categories, tags, or custom URLs as items (with parent and position) Update an item’s title, URL, parent, or position Remove an item, assign a menu to a theme location, or delete a menu entirely (opt-in — destructive) Tutor LMS: Read a lesson’s video source configuration (type, value, and runtime) Set a lesson’s video source (external URL, YouTube, Vimeo, HTML5, or a third-party source such as Bunny.net) using Tutor’s own storage function — avoids the string-only limitation of the generic Update Post Meta ability, which Tutor cannot read back List courses, and get a single course’s full detail with its topics/lessons hierarchy Get a user’s enrollment status and completion progress for a course Get a user’s quiz attempt results, optionally filtered to a single quiz Enroll a user in a course, and unenroll them (both opt-in, manage_options only) Multilanguage (Polylang, WPML, or Linguator AI): List the languages configured on the site Create the translation of a post or page in a target language, linked to the source: the AI supplies the translated title, content, and excerpt; taxonomies, custom fields, and the featured image are copied over, and an existing translation is updated instead of duplicated Create the translation of a category, tag, or custom taxonomy term: translated name and description, term meta copied, parent remapped to its target-language counterpart Assign a language to an existing post or taxonomy term Link two posts, or two terms, as translations of each other in the same translation group Get the full translation map for a post or a term LearnDash: List courses with enrollment count, and get a single course’s full detail (lessons, topics, quizzes) Get a user’s enrollment status/progress and quiz results for a course Enroll or unenroll a user in a course (opt-in — write, manage_options ) JetEngine Options Pages: List all registered Options Pages with their field schema Get all fields and current values for an Options Page by slug Update a single Options Page field, including repeater rows (opt-in — write) JetEngine Query Builder: List all Query Builder queries with id, name, and query type Get the full settings of one query by id Update an existing query’s name, type, or arguments — the missing counterpart to JetEngine’s own native “Add Query” MCP tool, which has
02 / SOURCE DETAILS
In your WordPress dashboard, go to Plugins > Add New and search for Enable Abilities for MCP . Click Install Now , then Activate . Go to Settings > WP Abilities to manage which abilities are active. Install and configure the MCP Adapter plugin to connect with AI assistants.
03 / SOURCE DETAILS
Do I need anything else for this plugin to work? Yes. This plugin requires WordPress 6.9+ (which includes the Abilities API) and the MCP Adapter plugin to connect abilities with AI assistants like Claude. Are all abilities enabled by default? Yes. On first activation, all abilities are enabled. You can disable any of them from Settings > WP Abilities . Is it safe to enable write abilities? Write abilities respect WordPress capabilities. For example, creating a post requires the publish_posts capability, and editing checks per-post permissions. The MCP user must have the appropriate WordPress role. Does it work on Multisite? Yes. The plugin can be network-activated. Each site in the network has its own ability configuration, its own OAuth toggle, and its own connector URL — enabling MCP on one subsite never exposes the others. For subdirectory networks (site.com/blog-a, site.com/blog-b) the claude.ai OAuth connector needs the plugin network-activated (or active on the main site): OAuth clients resolve discovery documents against the domain root, which belongs to the main site, so the plugin bridges those requests to the owning subsite automatically. Does it work with WooCommerce? Yes. The Custom Post Types section automatically detects WooCommerce products, orders, coupons, and any other registered post type. You can list, create, update, and delete items with full access to WooCommerce meta fields like _price , _sku , _stock_status , _regular_price , and more. Can I add custom abilities? This plugin registers abilities using the standard wp_register_ability() API. You can register additional abilities in your own plugin using the wp_abilities_api_init hook. Another plugin (Fluent Forms, etc.) registers its own MCP abilities — can I control those too? Yes. Since 2.2, abilities registered by other plugins appear in the Abilities tab under their own “Third-party” section, grouped by plugin namespace, with the same toggles as this plugin’s abilities. New third-party abilities start enabled; disabling one unregisters it before any MCP server can expose it — including this plugin’s claude.ai OAuth connector and the other plugin’s own MCP endpoint. Disabled abilities stay listed so you can re-enable them at any time. The claude.ai custom connector fails with “Couldn’t register with the sign-in service” — why? In almost every reported case the OAuth flow is fine and the request never reaches WordPress: a security layer in front of your site is blocking Anthropic’s backend, which connects with a non-browser User-Agent ( python-httpx ). Common culprits are hosting WAFs (cPGuard, Imunify360, ModSecurity rules like “generic HTTP client User-Agent”) and Cloudflare’s Bot Fight Mode or AI-crawler blocking. To diagnose, run curl -A "python-httpx/0.28.1" https://your-site.com/.well-known/oauth-authorization-server from an external machine — a 403 confirms the block. Ask your host to allow that User-Agent (or Anthropic’s IP range 160.79.104.0/23) for /.well-known/oauth-* , /oauth/* , and /wp-json/mcp/* , or disable the relevant bot protection for the site. How do I connect ChatGPT? Turn on the OAuth server on the Connection tab, then turn on ChatGPT & Other OAuth Connectors below it. Check the Allowed callback URLs box — it is prefilled with the callbacks ChatGPT is commonly seen to use, so confirm the exact one your connector screen shows and delete the rest. Save, then in ChatGPT turn on Developer mode (available on paid plans) and create a connector with the same MCP server URL. ChatGPT reads the discovery document, finds registration_endpoint , registers itself, and runs the normal login-and-consent flow. The callback allowlist is the security boundary: a self-registered client can only ever return a user to a URL you listed. The ChatGPT connector fails with “metadata must advertise PKCE support with code_challenge_methods_supported containing S256” — why? The discovery documents do advertise S256 , and checking them in a browser proves nothing: ChatGPT reads them server-side with the same non-browser User-Agent Claude uses ( python-httpx ). When a WAF or bot protection answers that request with a 403 or an HTML challenge page, ChatGPT never gets the authorization-server document and falls back to the protected-resource document, which has no PKCE field — hence this error. Diagnose it like the claude.ai case above, with curl -A "python-httpx/0.28.1" https://your-site.com/.well-known/oauth-authorization-server from an external machine, and ask your host to allow that User-Agent for /.well-known/oauth-* , /oauth/* , and /wp-json/mcp/* . With WP_DEBUG_LOG on, [DISCOVERY] request received lines in wp-content/debug.log tell you whether the request reached WordPress at all. The OAuth discovery documents return a 301 redirect or 404 — is that a problem? Yes — strict OAuth clients require a direct 200 on /.well-known/oauth-authorization-server and /.well-known/oauth-protected-resource . This plugin already prevents WordPress’s trailing-slash canonical redirect on those paths and serves the RFC 9728 path-suffixed variants. If they still return 404, your web server is intercepting .well-known/ before WordPress runs (common with Let’s Encrypt auto-SSL configs) — see Tools → Site Health for the “MCP OAuth discovery documents” check and ask your host to route those two paths to WordPress.
KEEP EXPLORING