{"id":362342,"date":"2026-09-04T21:07:48","date_gmt":"2026-09-04T21:07:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/shim-mcp\/"},"modified":"2026-10-22T19:47:42","modified_gmt":"2026-10-22T19:47:42","slug":"shim-mcp","status":"publish","type":"plugin","link":"https:\/\/ory.wordpress.org\/plugins\/shim-mcp\/","author":16760767,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1.3","requires":"6.9","requires_php":"8.0","requires_plugins":null,"header_name":"Shim MCP","header_author":"Aditya Raj Singh","header_description":"Connect WordPress to AI in one click. Full MCP server with 56 WordPress abilities, no other plugins needed.","assets_banners_color":"","last_updated":"2026-10-22 19:47:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/dev.adityarajsingh.com\/shim-mcp\/","header_author_uri":"https:\/\/adityarajsingh.com","rating":0,"author_block_rating":0,"active_installs":10,"downloads":349,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.2":{"tag":"1.0.2","author":"justadityaraj","date":"2026-09-04 21:07:30","revision":3681811},"1.1.0":{"tag":"1.1.0","author":"justadityaraj","date":"2026-10-22 19:47:42","revision":3760459}},"upgrade_notice":{"1.1.0":"<p>Ability results and saved post content are no longer altered, stdio and HTTP follow the MCP spec more strictly, and plugins can be installed from WordPress.org by slug.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3681819,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3681819,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.2","1.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,569,229563,242115,253991],"plugin_category":[],"plugin_contributors":[279250],"plugin_business_model":[],"class_list":["post-362342","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-automation","plugin_tags-claude","plugin_tags-mcp","plugin_tags-model-context-protocol","plugin_contributors-justadityaraj","plugin_committers-justadityaraj"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/shim-mcp\/assets\/icon-128x128.png?rev=3681819","icon_2x":"https:\/\/ps.w.org\/shim-mcp\/assets\/icon-256x256.png?rev=3681819","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Shim MCP is a self-contained MCP (Model Context Protocol) server plugin for WordPress. It provides 57 abilities that let any MCP-compatible AI client manage your WordPress site -- posts, pages, media, users, plugins, menus, widgets, comments, options, and system settings. The MCP server and every ability ship in the one plugin, so no companion plugins are required.<\/p>\n\n<p>The MCP protocol layer is derived from the WordPress project's own MCP Adapter (GPL-2.0), and abilities are registered through WordPress's Abilities API, which core ships from 6.9. See the Credits section below.<\/p>\n\n<p>Key features:<\/p>\n\n<ul>\n<li>57 WordPress abilities organized across 13 domains<\/li>\n<li>MCP protocol 2025-06-18 over two transports: Streamable HTTP, and stdio through WP-CLI (<code>wp shim-mcp serve<\/code>)<\/li>\n<li>Admin dashboard with API key generation<\/li>\n<li>Config export for Claude Code, Claude Desktop, and Cursor<\/li>\n<li>Conflict detection for legacy MCP plugins<\/li>\n<\/ul>\n\n<h3>Credits<\/h3>\n\n<p>Shim MCP builds on three GPL projects:<\/p>\n\n<ul>\n<li><p><a href=\"https:\/\/github.com\/AgriciDaniel\/wp-mcp-ultimate\">WP MCP Ultimate<\/a> by Daniel Agrici (GPL-2.0-or-later) - the first version of Shim MCP was built by an autonomous fleet of coding agents that took a good part of their code from it: the plugin bootstrap, the admin dashboard, the WP-CLI command and the layout of the ability classes.<\/p><\/li>\n<li><p><a href=\"https:\/\/github.com\/WordPress\/mcp-adapter\">WordPress MCP Adapter<\/a> (GPL-2.0) - everything under <code>includes\/Server\/<\/code> (transport, JSON-RPC routing, session management, tools\/resources\/prompts handlers, schema transformation, error and observability infrastructure) is derived from it.<\/p><\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/abilities-api\">WordPress Abilities API<\/a> (GPL-2.0) - every ability is registered through this core API, which WordPress ships from 6.9.<\/li>\n<\/ul>\n\n<p>Most of the ability code, the tests and the 1.1.0 changes were written for this plugin. Full breakdown in CREDITS.md.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin zip file via Plugins &gt; Add New &gt; Upload Plugin, or clone the repository into <code>wp-content\/plugins\/shim-mcp\/<\/code>.<\/li>\n<li>Activate the plugin through the Plugins menu.<\/li>\n<li>Go to Tools &gt; Shim MCP, generate an API key, and copy the config snippet into your AI client.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20mcp%3F\"><h3>What is MCP?<\/h3><\/dt>\n<dd><p>MCP (Model Context Protocol) is an open standard that allows AI clients like Claude to interact with external systems through a structured protocol. It defines how AI tools discover and use capabilities (called \"abilities\" in WordPress) provided by a server.<\/p><\/dd>\n<dt id=\"do%20i%20need%20mcp%20adapter%20or%20the%20abilities%20api%20installed%20alongside%20this%3F\"><h3>Do I need MCP Adapter or the Abilities API installed alongside this?<\/h3><\/dt>\n<dd><p>No. Shim MCP is self-contained: it bundles its own MCP server, and the Abilities API it registers against is part of WordPress from 6.9 onwards. Nothing else is required.<\/p><\/dd>\n<dt id=\"can%20it%20edit%20wp-config.php%3F\"><h3>Can it edit wp-config.php?<\/h3><\/dt>\n<dd><p>Only if you let it. The ability that rewrites the WP_DEBUG constants is switched off until you add <code>define( 'SHIM_MCP_ALLOW_CONFIG_WRITES', true );<\/code> to wp-config.php yourself. Without that line the ability refuses, and it is refused again if DISALLOW_FILE_EDIT or DISALLOW_FILE_MODS is set, if the file is not writable, or if the rewritten contents fail a sanity check.<\/p><\/dd>\n<dt id=\"it%20warns%20me%20about%20another%20mcp%20plugin.%20why%3F\"><h3>It warns me about another MCP plugin. Why?<\/h3><\/dt>\n<dd><p>Two MCP server plugins running at once can register competing abilities and endpoints, which produces confusing results for the connected AI client. If Shim MCP detects another MCP server or a standalone Abilities API plugin, it shows a notice suggesting you run only one. This is a compatibility warning, not a judgement about the other plugin.<\/p><\/dd>\n<dt id=\"can%20i%20connect%20without%20an%20application%20password%3F\"><h3>Can I connect without an application password?<\/h3><\/dt>\n<dd><p>Yes, on a site you have locally. <code>wp shim-mcp serve --user=admin --path=\/path\/to\/wordpress<\/code> runs the MCP server over WP-CLI and stdio, with no URL, port or password. The setup guide in docs\/SETUP.md has tested configurations for Claude Code, Claude Desktop and Cursor.<\/p><\/dd>\n<dt id=\"what%20ai%20clients%20are%20supported%3F\"><h3>What AI clients are supported?<\/h3><\/dt>\n<dd><p>Any MCP-compatible client works. The admin dashboard provides ready-made config snippets for Claude Code, Claude Desktop, and Cursor.<\/p><\/dd>\n<dt id=\"do%20i%20need%20https%3F\"><h3>Do I need HTTPS?<\/h3><\/dt>\n<dd><p>HTTPS is strongly recommended for production use since API credentials are transmitted with each request. The plugin will work over HTTP for local development.<\/p><\/dd>\n<dt id=\"what%20wordpress%20capabilities%20are%20required%3F\"><h3>What WordPress capabilities are required?<\/h3><\/dt>\n<dd><p>Different abilities require different WordPress capabilities. For example, content abilities require <code>edit_posts<\/code>, user abilities require <code>list_users<\/code> or <code>edit_users<\/code>, and system abilities require <code>manage_options<\/code>. See the full abilities reference in docs\/ABILITIES.md.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<p>New<\/p>\n\n<ul>\n<li>Install plugins from the WordPress.org Plugin Directory by slug with <code>shim-mcp\/plugins-install<\/code>. URLs, file paths and uploaded archives are still refused, and the plugin is left inactive until you activate it.<\/li>\n<li>Every ability label, description and message, the dashboard and the WP-CLI command can now be translated.<\/li>\n<li>A complete stdio setup guide for Claude Code, Claude Desktop and Cursor on macOS, Linux and Windows.<\/li>\n<\/ul>\n\n<p>Fixed<\/p>\n\n<ul>\n<li>Ability results return values exactly as WordPress stores them. They were HTML-escaped, so <code>Rock &amp; Roll<\/code> came back as <code>Rock &amp;amp; Roll<\/code>.<\/li>\n<li>Posts keep iframes, embeds, scripts and block markup for users allowed to post unfiltered HTML, and search-and-replace no longer re-filters the whole post. Backslashes in post, page and media content are no longer stripped, so block attributes survive.<\/li>\n<li>The stdio transport keeps STDOUT for JSON-RPC only: no <code>Using server<\/code> line, and output from an ability is moved to STDERR. It also no longer exits after an idle socket timeout.<\/li>\n<li>String JSON-RPC request ids work over both transports.<\/li>\n<li>Both transports validate JSON-RPC messages the same way, and malformed requests get <code>-32600<\/code> or <code>-32602<\/code> instead of a server error.<\/li>\n<li>Streamable HTTP answers notifications with 202 and an unknown or expired session with 404, so clients reconnect on their own.<\/li>\n<li>HTTP sessions are no longer lost when requests arrive at the same moment, are kept separate per site on multisite, and refuse oversized initialization data.<\/li>\n<li><code>initialize<\/code> only advertises capabilities the server implements, and <code>resources\/templates\/list<\/code> is answered.<\/li>\n<li><code>tools\/list<\/code> descriptors match the MCP Tool schema. Contributed by @mikemikimike.<\/li>\n<li>The dashboard never exports a revoked or placeholder credential, and an active key can be replaced with Generate New Key.<\/li>\n<li>No more \"already registered\" notices for the site and user ability categories.<\/li>\n<\/ul>\n\n<p>Development<\/p>\n\n<ul>\n<li>Smoke tests and GitHub Actions CI on WordPress 6.9 with PHP 8.0, the latest WordPress with PHP 8.5, and a multisite network.<\/li>\n<li>The release build fails instead of skipping a file it cannot archive.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>The dashboard's endpoint probe is labelled and reported honestly: it confirms the REST route is reachable and protected, not that an exported client configuration can authenticate. A 401 or 403 response is never shown as \"Connected\".<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Option abilities refuse to read or write options whose names look like stored credentials, and the option-name search no longer returns values at all<\/li>\n<li>Core admin files are loaded only where a function from them is used<\/li>\n<li>Removed the redirect to the settings page after activation<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with 56 WordPress abilities<\/li>\n<li>Admin dashboard with API key generation<\/li>\n<li>Config export for Claude Code, Claude Desktop, Cursor<\/li>\n<li>Conflict detection for legacy MCP plugins<\/li>\n<li>MCP protocol 2025-06-18 over Streamable HTTP and WP-CLI stdio<\/li>\n<\/ul>","raw_excerpt":"Connect WordPress to AI in one click. Full MCP server with 57 abilities.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/362342","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=362342"}],"author":[{"embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/justadityaraj"}],"wp:attachment":[{"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=362342"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=362342"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=362342"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=362342"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=362342"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ory.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=362342"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}