{"id":360615,"date":"2026-08-31T14:14:18","date_gmt":"2026-08-31T14:14:18","guid":{"rendered":"https:\/\/ja.wordpress.org\/plugins\/picot-mcp\/"},"modified":"2026-08-31T14:14:07","modified_gmt":"2026-08-31T14:14:07","slug":"picot-mcp","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/picot-mcp\/","author":2161128,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.3","stable_tag":"0.2.3","tested":"7.2","requires":"6.9","requires_php":"7.4","requires_plugins":null,"header_name":"Picot MCP","header_author":"PICOT","header_description":"Exposes WordPress as an MCP server with API key authentication and scoped permissions.","assets_banners_color":"e8ebf5","last_updated":"2026-08-31 14:14:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/tsubu\/picot-mcp","header_author_uri":"https:\/\/picot.tokyo\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":64,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.3":{"tag":"0.2.3","author":"tsubu","date":"2026-08-31 14:14:07","revision":3674417}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3679508,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3679508,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3679508,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3679508,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.3"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[251511,2353,1556,242115,23853],"plugin_category":[],"plugin_contributors":[263595],"plugin_business_model":[],"class_list":["post-360615","plugin","type-plugin","status-publish","hentry","plugin_tags-abilities","plugin_tags-ai","plugin_tags-api","plugin_tags-mcp","plugin_tags-rest-api","plugin_contributors-tsubu","plugin_committers-tsubu"],"banners":{"banner":"https:\/\/ps.w.org\/picot-mcp\/assets\/banner-772x250.png?rev=3679508","banner_2x":"https:\/\/ps.w.org\/picot-mcp\/assets\/banner-1544x500.png?rev=3679508","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/picot-mcp\/assets\/icon-128x128.png?rev=3679508","icon_2x":"https:\/\/ps.w.org\/picot-mcp\/assets\/icon-256x256.png?rev=3679508","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Picot MCP turns your WordPress site into an MCP (Model Context Protocol) server so AI clients such as Cursor or Claude Code can work with content safely.<\/p>\n\n<p>Architecture: the official WordPress MCP Adapter is the protocol runtime; Picot adds the product layer (API keys, scopes, admin UI, audit log).<\/p>\n\n<ul>\n<li>One MCP URL and API keys to connect (plaintext shown only once at issue)<\/li>\n<li>Multiple API keys with per-key scopes, optional expiry, and rate limits<\/li>\n<li>Seven feature toggles (posts\/pages, taxonomies, media, settings, plugins, themes, users)<\/li>\n<li>Plugin\/theme install and update from wordpress.org slugs only<\/li>\n<li>Plugin\/theme activation, deactivation, and ZIP package transfer are not available via MCP (use WordPress admin)<\/li>\n<li>Audit log with user, key id, IP, and failure codes<\/li>\n<li>Built on the WordPress Abilities API and official MCP Adapter<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>picot-mcp<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the Plugins screen<\/li>\n<li>Open Settings \u2192 MCP, enable the server, review the site ceiling, issue an API key, and copy the key immediately (it cannot be shown again)<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20need%20composer%20on%20the%20site%3F\"><h3>Does this plugin need Composer on the site?<\/h3><\/dt>\n<dd><p>No. Release packages already include the required MCP Adapter under <code>vendor\/<\/code>.<\/p><\/dd>\n<dt id=\"who%20can%20manage%20api%20keys%3F\"><h3>Who can manage API keys?<\/h3><\/dt>\n<dd><p>Only administrators (<code>manage_options<\/code>).<\/p><\/dd>\n<dt id=\"what%20is%20the%20default%20mcp%20endpoint%3F\"><h3>What is the default MCP endpoint?<\/h3><\/dt>\n<dd><p>New installs use <code>\/wp-json\/picot-mcp\/mcp-server<\/code> with MCP disabled until you enable it. Existing sites keep their previously saved route until changed in Settings.<\/p><\/dd>\n<dt id=\"can%20i%20install%20custom%20plugin%20or%20theme%20zip%20packages%20via%20mcp%3F\"><h3>Can I install custom plugin or theme ZIP packages via MCP?<\/h3><\/dt>\n<dd><p>No. Install and update are limited to packages from wordpress.org. There is no ZIP install or ZIP export via MCP. Activate or deactivate plugins and themes in WordPress admin.<\/p><\/dd>\n<dt id=\"can%20i%20copy%20an%20api%20key%20again%20later%3F\"><h3>Can I copy an API key again later?<\/h3><\/dt>\n<dd><p>No. Keys are stored as irreversible hashes. Copy the plaintext when it is issued, or create a new key.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.3<\/h4>\n\n<ul>\n<li>Audit: purge legacy zip_install from stored settings and API keys<\/li>\n<li>Audit: block self-deletion of Picot MCP via the plugins ability<\/li>\n<li>Audit: limit dependency\/admin error notices to plugin-related admin screens<\/li>\n<\/ul>\n\n<h4>0.2.2<\/h4>\n\n<ul>\n<li>Remove Plugin\/theme ZIP export and the zip_install operation entirely<\/li>\n<\/ul>\n\n<h4>0.2.1<\/h4>\n\n<ul>\n<li>WordPress.org review: remove arbitrary Base64 ZIP install for plugins\/themes<\/li>\n<li>WordPress.org review: remove MCP activate\/deactivate for plugins and theme switch<\/li>\n<li>Install\/update remain wordpress.org-only; delete requires the plugin to already be inactive in admin<\/li>\n<li>Contributors list uses WordPress.org username; translation files omitted from directory package<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Product hardening: safe defaults (MCP off; critical\/plugins\/themes\/users off)<\/li>\n<li>API keys are issue-once (hash-only; no reversible secret in the database)<\/li>\n<li>Key expiry and per-key rate limiting<\/li>\n<li>Stronger audit log (token id, IP, failure code\/message; configurable retention)<\/li>\n<li>Adapter runtime status, optional observability handler, admin warnings<\/li>\n<li>Smoke tests for sanitize helpers and safe defaults (kept outside the plugin package for Plugin Check)<\/li>\n<\/ul>\n\n<h4>0.1.12<\/h4>\n\n<ul>\n<li>Add \u201cCopy all\u201d for MCP connection snippet (site name, label, URL, key)<\/li>\n<\/ul>\n\n<h4>0.1.11<\/h4>\n\n<ul>\n<li>Add Logs tab with recent MCP usage (who \/ feature \/ action, last 50)<\/li>\n<\/ul>\n\n<h4>0.1.10<\/h4>\n\n<ul>\n<li>Add plugin\/theme <code>export_zip<\/code> (ZIP \u2192 Base64) for MCP package transfer<\/li>\n<\/ul>\n\n<h4>0.1.9<\/h4>\n\n<ul>\n<li>Add dedicated Plugin\/theme ZIP install operation checkbox (site + per-key)<\/li>\n<\/ul>\n\n<h4>0.1.8<\/h4>\n\n<ul>\n<li>Add plugin\/theme ZIP install via Base64 (<code>install_zip<\/code>, optional overwrite)<\/li>\n<\/ul>\n\n<h4>0.1.7<\/h4>\n\n<ul>\n<li>Security: enforce per-key critical for sensitive user operations<\/li>\n<li>Security: object-level caps on media get\/list; safer defaults (MCP off; picot-mcp route)<\/li>\n<li>Fix: preserve key scopes when site features are temporarily disabled; flash key ID case handling<\/li>\n<li>Fix: revoke\/update save error handling; normalize legacy token permission maps<\/li>\n<\/ul>\n\n<h4>0.1.6<\/h4>\n\n<ul>\n<li>WordPress.org packaging guardrails (distribution zip, i18n, Plugin Check cleanup)<\/li>\n<li>Admin UI and security hardening for API key management<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Expose WordPress as an MCP server with API key auth and scoped permissions.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/360615","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=360615"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tsubu"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=360615"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=360615"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=360615"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=360615"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=360615"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=360615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}