{"id":399157,"date":"2026-11-06T07:43:32","date_gmt":"2026-11-06T07:43:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/content-manager-for-ai-agents\/"},"modified":"2026-11-06T07:43:22","modified_gmt":"2026-11-06T07:43:22","slug":"fyrins-content-manager-for-ai-agents","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/fyrins-content-manager-for-ai-agents\/","author":15037065,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.1.4","requires":"6.9","requires_php":"8.1","requires_plugins":null,"header_name":"Fyrins Content Manager for AI Agents","header_author":"Alexandre Revire","header_description":"Content management abilities for AI agents, exposed through the WordPress Abilities API and the MCP Adapter.","assets_banners_color":"f4f4f4","last_updated":"2026-11-06 07:43:22","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/alexandre-revire.fr","rating":0,"author_block_rating":0,"active_installs":0,"downloads":204,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"fyrins","date":"2026-11-06 07:43:22","revision":3787391}},"upgrade_notice":{"2.0.0":"<p>New name and identifiers. Abilities are now <code>cm4ai\/<\/code>: update your MCP client configurations and any code using the former <code>wpmcpa_<\/code> hooks.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3787391,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3787391,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3787391,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3787391,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3787391,"resolution":"1","location":"assets","locale":"","width":1078,"height":1173},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3787391,"resolution":"2","location":"assets","locale":"","width":1078,"height":1140},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3787391,"resolution":"3","location":"assets","locale":"","width":1078,"height":1177}},"screenshots":{"1":"Connection tab: the MCP server URL, an application password created in one click, and ready-to-paste configurations for Claude Code, Claude Desktop, Cursor, Codex and other clients.","2":"Abilities tab: enable or disable each ability, grouped in cards and split into read-only and write.","3":"Other plugins tab: abilities registered by other plugins, such as SEOPress, with a legend explaining the badges."}},"plugin_section":[],"plugin_tags":[251511,15643,2353,1556,242115],"plugin_category":[],"plugin_contributors":[289531],"plugin_business_model":[],"class_list":["post-399157","plugin","type-plugin","status-publish","hentry","plugin_tags-abilities","plugin_tags-agents","plugin_tags-ai","plugin_tags-api","plugin_tags-mcp","plugin_contributors-fyrins","plugin_committers-fyrins"],"banners":{"banner":"https:\/\/ps.w.org\/fyrins-content-manager-for-ai-agents\/assets\/banner-772x250.png?rev=3787391","banner_2x":"https:\/\/ps.w.org\/fyrins-content-manager-for-ai-agents\/assets\/banner-1544x500.png?rev=3787391","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/fyrins-content-manager-for-ai-agents\/assets\/icon-128x128.png?rev=3787391","icon_2x":"https:\/\/ps.w.org\/fyrins-content-manager-for-ai-agents\/assets\/icon-256x256.png?rev=3787391","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/fyrins-content-manager-for-ai-agents\/assets\/screenshot-1.png?rev=3787391","caption":"Connection tab: the MCP server URL, an application password created in one click, and ready-to-paste configurations for Claude Code, Claude Desktop, Cursor, Codex and other clients."},{"src":"https:\/\/ps.w.org\/fyrins-content-manager-for-ai-agents\/assets\/screenshot-2.png?rev=3787391","caption":"Abilities tab: enable or disable each ability, grouped in cards and split into read-only and write."},{"src":"https:\/\/ps.w.org\/fyrins-content-manager-for-ai-agents\/assets\/screenshot-3.png?rev=3787391","caption":"Other plugins tab: abilities registered by other plugins, such as SEOPress, with a legend explaining the badges."}],"raw_content":"<!--section=description-->\n<p>https:\/\/www.youtube.com\/watch?v=W1Ww7G7HJqg<\/p>\n\n<p>Fyrins Content Manager for AI Agents registers content management abilities with the WordPress Abilities API. With the MCP Adapter active, an MCP client (Claude, ChatGPT, Cursor\u2026) can discover and run them: an AI agent can draft and publish posts, fix a typo across a page, upload images, classify content, fill in SEO fields or build a variable product, always within the permissions of the WordPress user it authenticates as.<\/p>\n\n<p>Ability families, with a few names:<\/p>\n\n<ul>\n<li><strong>Content<\/strong>: five abilities for each public post type, such as <code>list-posts<\/code>, <code>get-page<\/code>, <code>create-post<\/code>, <code>update-page<\/code>, <code>delete-post<\/code>, with dates, sticky posts and terms in every taxonomy. Plus <code>replace-in-post-content<\/code>, which swaps a literal string without resending the whole content, with a dry run and an expected count.<\/li>\n<li><strong>Taxonomies<\/strong>: <code>list-taxonomies<\/code>, <code>list-terms<\/code>, <code>get-term<\/code>, <code>create-term<\/code>, <code>update-term<\/code>, <code>delete-term<\/code>.<\/li>\n<li><strong>Media<\/strong>: <code>list-media<\/code>, <code>upload-media<\/code> (from a URL), <code>update-media<\/code>, <code>set-featured-image<\/code>, <code>delete-media<\/code>.<\/li>\n<li><strong>Meta<\/strong>: <code>get-post-meta<\/code>, <code>update-post-meta<\/code>, <code>get-term-meta<\/code>, <code>update-term-meta<\/code>, <code>delete-term-meta<\/code>.<\/li>\n<li><strong>Templates<\/strong>: <code>list-templates<\/code>, <code>get-template<\/code>, <code>create-template<\/code>, <code>update-template<\/code>, <code>delete-template<\/code>, for block templates and template parts.<\/li>\n<li><strong>WooCommerce<\/strong>, when active: <code>create-product<\/code>, <code>update-product<\/code>, product variations and global attributes.<\/li>\n<li><strong>SEOPress<\/strong>, when active: <code>get-post-seopress<\/code>, <code>update-post-seopress<\/code>, <code>get-term-seopress<\/code>, <code>update-term-seopress<\/code>, and <code>update-post-schemas-seopress<\/code> with SEOPress Pro.<\/li>\n<li><strong>WP Grid Builder<\/strong>, when active: <code>list-wpgb-facets<\/code>, <code>index-wpgb-facets<\/code> (queues facets for indexing, off by default) and <code>clear-wpgb-cache<\/code>, for users who can manage options.<\/li>\n<\/ul>\n\n<p>Every name carries the <code>cm4ai\/<\/code> prefix.<\/p>\n\n<p>Each ability can be switched on or off from Settings \u2192 Fyrins Content Manager for AI Agents. Abilities that delete something are off until you enable them.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.9 or later: the Abilities API ships with core from 6.9.<\/li>\n<li>The <a href=\"https:\/\/github.com\/WordPress\/mcp-adapter\/releases\">MCP Adapter<\/a> plugin, to reach the abilities from an MCP client. Without it, the abilities are still registered and usable through the Abilities API, and a notice on the Plugins screen and the settings screen says the adapter is missing.<\/li>\n<\/ul>\n\n<h4>Security<\/h4>\n\n<ul>\n<li>Every call runs as a logged-in WordPress user and is checked against that user's capabilities, on the object it targets: <code>edit_post<\/code> or <code>delete_post<\/code> on that very post, <code>edit_term<\/code> on that term. Publishing, changing the author, pinning a post and assigning terms need the same capabilities as in the admin.<\/li>\n<li>Protected meta keys (starting with <code>_<\/code>) stay out of reach unless a developer allow-lists them.<\/li>\n<li>Templates can only be changed by users who can edit the theme (<code>edit_theme_options<\/code>).<\/li>\n<li>WP Grid Builder facets, index and cache are reserved to users who can manage options (<code>manage_options<\/code>), as in its own screens.<\/li>\n<li>Markup goes through the usual WordPress filtering for users without the <code>unfiltered_html<\/code> capability, and the response says when something was stripped.<\/li>\n<li>Destructive abilities are disabled by default, and any ability can be disabled individually. The settings screen requires <code>manage_options<\/code>.<\/li>\n<\/ul>\n\n<h4>Third-party abilities<\/h4>\n\n<p>The settings screen also lists the abilities other plugins register, grouped by plugin.<\/p>\n\n<ul>\n<li>An ability its plugin opened to MCP can be switched off for MCP requests. The plugin that provides it keeps using it everywhere else.<\/li>\n<li>An ability its plugin kept closed to MCP (SEOPress's own abilities, for instance) can be exposed to the MCP server as a tool. These are off by default, and exposing one grants no extra right: the ability's own permission check still decides.<\/li>\n<\/ul>\n\n<p>Core and MCP Adapter abilities are never listed.<\/p>\n\n<h4>Privacy<\/h4>\n\n<ul>\n<li>The plugin sends no data to its author or any third party, collects nothing, and has no tracking or telemetry.<\/li>\n<li>The only outgoing request it can make is the download performed by <code>upload-media<\/code>, to the URL the MCP client supplies.<\/li>\n<li>The MCP client acts with the rights of the WordPress user it authenticates as, and sees what that user can see. Choose that account, and its role, deliberately.<\/li>\n<li>What the AI service connected to your MCP client does with the content it reads is governed by that service, not by this plugin.<\/li>\n<\/ul>\n\n<h4>For developers<\/h4>\n\n<p>Every query, result and permission decision can be adjusted through <code>cm4ai_*<\/code> filters, and new abilities can be added. Custom abilities are added on the <code>cm4ai_register_abilities<\/code> action, and every call can be observed or adjusted with <code>cm4ai_before_execute<\/code>, <code>cm4ai_execute_result<\/code> and <code>cm4ai_after_execute<\/code>. Full reference on GitHub: https:\/\/github.com\/Fyrins\/content-manager-for-ai<\/p>\n\n<h4>Source code<\/h4>\n\n<p>The settings screen ships compiled in <code>build\/<\/code>. Its sources live in <code>src\/<\/code> in the public repository, https:\/\/github.com\/Fyrins\/content-manager-for-ai, and are built with <code>@wordpress\/scripts<\/code>: <code>npm install<\/code>, then <code>npm run build<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate Fyrins Content Manager for AI Agents.<\/li>\n<li>Install and activate the MCP Adapter from its GitHub releases.<\/li>\n<li>Go to Settings \u2192 Fyrins Content Manager for AI Agents and choose which abilities are enabled.<\/li>\n<li>In the Connection tab, create an application password for the WordPress user the agent will act as.<\/li>\n<li>Copy the configuration of your client (Claude Code, Claude Desktop, Cursor, Codex or another HTTP client) into it. It points at <code>https:\/\/your-site.example\/wp-json\/mcp\/mcp-adapter-default-server<\/code>, authenticated with that user and application password.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20mcp%20clients%20work%20with%20it%3F\"><h3>Which MCP clients work with it?<\/h3><\/dt>\n<dd><p>Any MCP client that can reach the MCP Adapter's server and authenticate as a WordPress user, for instance with an application password. The abilities are found through the adapter's discovery tool and run through its execute tool.<\/p><\/dd>\n<dt id=\"what%20can%20the%20agent%20do%20on%20my%20site%3F\"><h3>What can the agent do on my site?<\/h3><\/dt>\n<dd><p>Exactly what the WordPress user it authenticates as can do, limited to the abilities you left enabled. An Author account cannot publish someone else's post through an ability any more than in the admin.<\/p><\/dd>\n<dt id=\"how%20do%20i%20disable%20an%20ability%3F\"><h3>How do I disable an ability?<\/h3><\/dt>\n<dd><p>Uncheck it under Settings \u2192 Fyrins Content Manager for AI Agents. A disabled ability is not registered at all, so MCP clients do not see it. Developers can also force the state with the <code>cm4ai_is_enabled<\/code> filter.<\/p><\/dd>\n<dt id=\"woocommerce%20or%20seopress%20is%20not%20installed.%20does%20it%20matter%3F\"><h3>WooCommerce or SEOPress is not installed. Does it matter?<\/h3><\/dt>\n<dd><p>No. Their abilities are simply not registered, and they appear on their own once the plugin is active. The SEOPress schema ability also needs SEOPress Pro.<\/p><\/dd>\n<dt id=\"does%20it%20work%20without%20the%20mcp%20adapter%3F\"><h3>Does it work without the MCP Adapter?<\/h3><\/dt>\n<dd><p>The abilities are registered through the core Abilities API and can be used by any other consumer of that API. To reach them from an MCP client, install the adapter. A notice on the Plugins screen and on the plugin's settings screen reminds you until it runs.<\/p><\/dd>\n<dt id=\"why%20is%20the%20mcp%20adapter%20not%20bundled%3F\"><h3>Why is the MCP Adapter not bundled?<\/h3><\/dt>\n<dd><p>It is not hosted on WordPress.org, and several plugins may ship it. Installing it once, as its own plugin, avoids version conflicts.<\/p><\/dd>\n<dt id=\"can%20i%20extend%20or%20restrict%20it%20from%20code%3F\"><h3>Can I extend or restrict it from code?<\/h3><\/dt>\n<dd><p>Yes. Filters let you narrow the post types and taxonomies, remove operations, override any permission decision, allow-list protected meta keys, change queries and results, and add your own abilities. See the developer documentation on GitHub.<\/p><\/dd>\n<dt id=\"does%20it%20delete%20anything%20on%20its%20own%3F\"><h3>Does it delete anything on its own?<\/h3><\/dt>\n<dd><p>No. Abilities only run when a client calls them, and every ability that deletes is off until an administrator enables it. Uninstalling the plugin removes its two options.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Renamed from WP MCP Abilities to Fyrins Content Manager for AI Agents, for its release on WordPress.org. The plugin folder, text domain and every identifier change: abilities are now named <code>cm4ai\/&lt;name&gt;<\/code>, hooks and options use the <code>cm4ai_<\/code> prefix. Update the MCP clients and code that call the former names.<\/li>\n<li>The switches saved under the former name are copied on activation.<\/li>\n<li>Security: writing or deleting a meta key also checks the meta capability of that key, so an <code>auth_callback<\/code> given to <code>register_meta()<\/code> applies.<\/li>\n<li>Fix: <code>upload-media<\/code> stops the download as soon as the file exceeds the allowed size, instead of writing it to disk in full first.<\/li>\n<\/ul>\n\n<p>Earlier versions, released as WP MCP Abilities: https:\/\/github.com\/Fyrins\/content-manager-for-ai\/blob\/main\/CHANGELOG.md<\/p>","raw_excerpt":"Let AI agents manage your content through the Abilities API: posts, media, terms, meta, templates, WooCommerce and SEOPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/399157","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=399157"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fyrins"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=399157"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=399157"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=399157"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=399157"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=399157"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=399157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}