{"id":390960,"date":"2026-11-01T09:26:31","date_gmt":"2026-11-01T09:26:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ai-site-control\/"},"modified":"2026-11-01T10:52:56","modified_gmt":"2026-11-01T10:52:56","slug":"simonov-ai-site-manager","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/simonov-ai-site-manager\/","author":23590661,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.9.2","stable_tag":"0.9.2","tested":"7.1.4","requires":"5.8","requires_php":"7.0","requires_plugins":null,"header_name":"Simonov AI Site Manager (MCP)","header_author":"Oleksandr Simonov","header_description":"Free, open Model Context Protocol (MCP) server for WordPress. Lets Claude, ChatGPT and other MCP clients manage posts, media, taxonomies, comments, WooCommerce and Polylang translations.","assets_banners_color":"112437","last_updated":"2026-11-01 10:52:56","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/yuo2007\/simonov-ai-site-manager","header_author_uri":"https:\/\/www.linkedin.com\/in\/%D0%BE%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80-%D1%81%D1%96%D0%BC%D0%BE%D0%BD%D0%BE%D0%B2-522aa2b0\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":166,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.9.1":{"tag":"0.9.1","author":"capoeira314","date":"2026-11-01 09:49:08","revision":3777794},"0.9.2":{"tag":"0.9.2","author":"capoeira314","date":"2026-11-01 10:52:56","revision":3777876}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3777746,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3777746,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3777746,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3777746,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.9.1","0.9.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3777746,"resolution":"1","location":"assets","locale":"","width":1098,"height":653},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3777746,"resolution":"2","location":"assets","locale":"","width":1098,"height":412},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3777746,"resolution":"3","location":"assets","locale":"","width":1098,"height":303},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3777746,"resolution":"4","location":"assets","locale":"","width":1098,"height":762},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3777794,"resolution":"5","location":"assets","locale":"","width":600,"height":540}},"screenshots":{"1":"Settings: the endpoint address, the account connections act as, and read-only mode.","2":"Every tool can be switched off individually; unchecked tools never appear in the client's tool list.","3":"Active connections \u2014 what signed in, as whom, until when, and a Revoke button for each.","4":"The audit log: the last hundred tool calls with their result, refusals included.","5":"The authorization screen a client sends you to, naming the host the access will be sent to."}},"plugin_section":[],"plugin_tags":[2353,1556,569,4917,242115],"plugin_category":[],"plugin_contributors":[290016],"plugin_business_model":[],"class_list":["post-390960","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-api","plugin_tags-automation","plugin_tags-content-management","plugin_tags-mcp","plugin_contributors-capoeira314","plugin_committers-capoeira314"],"banners":{"banner":"https:\/\/ps.w.org\/simonov-ai-site-manager\/assets\/banner-772x250.png?rev=3777746","banner_2x":"https:\/\/ps.w.org\/simonov-ai-site-manager\/assets\/banner-1544x500.png?rev=3777746","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/simonov-ai-site-manager\/assets\/icon-128x128.png?rev=3777746","icon_2x":"https:\/\/ps.w.org\/simonov-ai-site-manager\/assets\/icon-256x256.png?rev=3777746","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/simonov-ai-site-manager\/assets\/screenshot-1.png?rev=3777746","caption":"Settings: the endpoint address, the account connections act as, and read-only mode."},{"src":"https:\/\/ps.w.org\/simonov-ai-site-manager\/assets\/screenshot-2.png?rev=3777746","caption":"Every tool can be switched off individually; unchecked tools never appear in the client's tool list."},{"src":"https:\/\/ps.w.org\/simonov-ai-site-manager\/assets\/screenshot-3.png?rev=3777746","caption":"Active connections \u2014 what signed in, as whom, until when, and a Revoke button for each."},{"src":"https:\/\/ps.w.org\/simonov-ai-site-manager\/assets\/screenshot-4.png?rev=3777746","caption":"The audit log: the last hundred tool calls with their result, refusals included."},{"src":"https:\/\/ps.w.org\/simonov-ai-site-manager\/assets\/screenshot-5.png?rev=3777794","caption":"The authorization screen a client sends you to, naming the host the access will be sent to."}],"raw_content":"<!--section=description-->\n<p>Simonov AI Site Manager turns your WordPress site into a Model Context Protocol (MCP) server: one Streamable-HTTP endpoint, served by your own site, that an AI client you connect can use to work with your content.<\/p>\n\n<h4>Stop formatting content by hand<\/h4>\n\n<p>Every post, page and product needs the same routine: paste the text, fix the headings, pick categories and tags, upload a picture and set it as the featured image, write an excerpt, fill in the custom fields, set the price, schedule it. Do that for everything you publish, and it adds up to hours every week.<\/p>\n\n<p>Connect Claude or ChatGPT, describe the result you want in plain words, and let the assistant do the clicking:<\/p>\n\n<ul>\n<li>\"Turn this text into a post: proper headings, a short intro, the Recipes category, fitting tags, this photo as the featured image. Publish on Friday at 9:00.\"<\/li>\n<li>\"Create products from this price list: titles, descriptions, SKUs, prices and stock. Save them as drafts so I can check them first.\"<\/li>\n<li>\"Put a 20% sale price on every product in the Summer category.\"<\/li>\n<li>\"Rewrite the excerpts of my ten latest posts so each one is under 160 characters.\"<\/li>\n<li>\"Make a Polish translation of yesterday's post and link the two.\" (with Polylang)<\/li>\n<li>\"Go through the comments waiting for moderation, approve the genuine ones and reply to the questions.\"<\/li>\n<\/ul>\n\n<p>The work that used to take a morning of copying and pasting becomes a few sentences, and it is done on your real site, in your own WordPress, with no export and no import.<\/p>\n\n<p>You stay in charge of what the assistant may touch. It works through a WordPress account you choose, with that account's permissions. Ask for drafts when you want to review first, switch on read-only mode when you only need answers, and check the audit log to see every change it made.<\/p>\n\n<h4>What it can do<\/h4>\n\n<p>It can manage:<\/p>\n\n<ul>\n<li>Posts, pages and any custom post type \u2014 create, read, update, delete, meta.<\/li>\n<li>Taxonomies &amp; terms \u2014 categories, tags, custom taxonomies, term assignment.<\/li>\n<li>Media \u2014 upload from URL or base64, edit metadata, featured images.<\/li>\n<li>Comments \u2014 moderate, reply, delete.<\/li>\n<li>WooCommerce \u2014 products and order status (auto-enabled when WooCommerce is active).<\/li>\n<li>Polylang \u2014 languages, translations, linking (auto-enabled when Polylang is active).<\/li>\n<\/ul>\n\n<p>And look up, read-only:<\/p>\n\n<ul>\n<li>Site info and navigation menus.<\/li>\n<\/ul>\n\n<p>It does not administer the site, and it cannot be made to. There are no tools for plugins, themes, users or site settings, and every MCP request runs without administrative capabilities: managing plugins, themes, users, options or core, editing files, posting unfiltered HTML and editing theme configuration are refused for the whole request, even when the connected account is an administrator. Administration stays in the WordPress dashboard.<\/p>\n\n<p>Every action runs as a WordPress user you choose, so capability checks are always enforced. Read-only mode, per-tool switches, revocable connections and an audit log let you decide how much of this a client can reach.<\/p>\n\n<h4>No external service<\/h4>\n\n<p>The plugin is the server and runs entirely on your site. There is no relay, account or service operated by the plugin author: the AI client you choose connects straight to your site's REST API, and access is granted either by you signing in to WordPress and approving the client (OAuth) or by a token you generate. Tokens are stored on your site, hashed, and can be revoked at any time from the settings page.<\/p>\n\n<h4>Requirements<\/h4>\n\n<p>WordPress 5.8 or newer and PHP 7.0 or newer. Everything works the same on old and new installs.<\/p>\n\n<h3>Security<\/h3>\n\n<ul>\n<li>The token is stored hashed (never in plaintext) and compared in constant time.<\/li>\n<li>Every tool enforces WordPress capabilities against the specific object it touches \u2014 not just a generic capability \u2014 so a non-admin configured user cannot edit content it does not own.<\/li>\n<li>No tool changes plugins, themes, users or site settings.<\/li>\n<li>Media uploads validate file content against the extension and block fetches to internal\/cloud-metadata addresses.<\/li>\n<li>Disable individual tools from the settings page if you want to reduce surface area.<\/li>\n<\/ul>\n\n<p>Note: the configured user acts with its full WordPress capabilities. Use the least-privileged role that meets your needs, and treat the token as a site credential.<\/p>\n\n<h3>Roadmap<\/h3>\n\n<ul>\n<li>WPML integration.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install from Plugins \u2192 Add New, or copy the <code>simonov-ai-site-manager<\/code> folder to <code>wp-content\/plugins\/<\/code> and activate it.<\/li>\n<li>Make sure Settings \u2192 Permalinks is set to any option other than \"Plain\".<\/li>\n<li>Go to Settings \u2192 Simonov AI Site Manager, tick \"Accept MCP requests\" and save.<\/li>\n<\/ol>\n\n<p>The settings page shows your <strong>MCP endpoint URL<\/strong>. It is always your site address followed by <code>\/wp-json\/wp-mcp\/v1\/mcp<\/code>:<\/p>\n\n<pre><code>https:\/\/example.com\/wp-json\/wp-mcp\/v1\/mcp\n<\/code><\/pre>\n\n<p>Paste this full address into the client, not just the domain: the site's home page is not an MCP server.<\/p>\n\n<p>The client connects as the WordPress account that signs in, with that account's permissions. An Editor is enough for content work and is the safer choice.<\/p>\n\n<h4>Connect Claude (claude.ai)<\/h4>\n\n<p>Custom connectors work on every Claude plan; the free plan allows one.<\/p>\n\n<ol>\n<li>In claude.ai open Customize \u2192 Connectors, click \"+ Add\", then \"Add custom connector\".<\/li>\n<li>Give it a name (your site's name is fine), paste the MCP endpoint URL and click \"Continue\".<\/li>\n<li>Keep sign-in turned on. If Claude asks which OAuth client to use, choose \"Register automatically\". Click \"Add\".<\/li>\n<li>Click \"Connect\". Claude opens your site's WordPress login in a new tab. Sign in.<\/li>\n<li>The authorization screen names the address the access will be sent to. Check that it says <strong>claude.ai<\/strong>, then click \"Approve\".<\/li>\n<li>In a chat, open the \"+\" menu \u2192 Connectors and switch your site on.<\/li>\n<\/ol>\n\n<p>Then ask, for example: \"List my five most recent drafts\" or \"Publish the post about the spring sale and set its featured image\".<\/p>\n\n<p>On Team and Enterprise plans an owner adds the connector once under Organization settings \u2192 Connectors; each member then clicks \"Connect\" and signs in with their own WordPress account.<\/p>\n\n<h4>Connect ChatGPT<\/h4>\n\n<p>ChatGPT connects custom MCP servers through developer mode. Whether your plan offers it, and whether a workspace admin has to allow it first, is up to OpenAI \u2014 check ChatGPT's Settings \u2192 Apps.<\/p>\n\n<ol>\n<li>In ChatGPT open Settings \u2192 Apps \u2192 Advanced settings and turn on developer mode.<\/li>\n<li>Click \"Create app\". Give it a name, paste the MCP endpoint URL and choose OAuth as the authentication. Confirm that you trust the server and create the app.<\/li>\n<li>ChatGPT opens your WordPress login. Sign in, check that the authorization screen says <strong>chatgpt.com<\/strong>, then click \"Approve\".<\/li>\n<li>In a chat, open the \"+\" menu, choose developer mode and select your site.<\/li>\n<\/ol>\n\n<p>Tools that only read run straight away. Before anything that changes the site, ChatGPT asks you to confirm. Read what it is about to do before you confirm.<\/p>\n\n<h4>Connect Claude Code<\/h4>\n\n<pre><code>claude mcp add --transport http my-site https:\/\/example.com\/wp-json\/wp-mcp\/v1\/mcp\n<\/code><\/pre>\n\n<p>Then run <code>\/mcp<\/code> inside Claude Code, choose the server and authenticate. Your browser opens the same WordPress login and authorization screen.<\/p>\n\n<h4>Connect with a token (Claude Desktop config, scripts, other clients)<\/h4>\n\n<p>For clients that cannot sign in through a browser:<\/p>\n\n<ol>\n<li>On the settings page choose \"Act as user\", then click \"Generate \/ rotate token\".<\/li>\n<li>Copy the ready-made connection URL or the Claude Desktop config shown at the top of the page. The token is shown once.<\/li>\n<\/ol>\n\n<p>Treat the token, and any URL containing it, as a password. Generating a new token invalidates the old one.<\/p>\n\n<h4>Use more than one client<\/h4>\n\n<p>Claude, ChatGPT and any other client can be connected at the same time. Each one signs in separately and appears as its own row under Active connections, where you can revoke it without affecting the others.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20connect%20claude%20or%20chatgpt%3F\"><h3>How do I connect Claude or ChatGPT?<\/h3><\/dt>\n<dd><p>Step-by-step instructions for claude.ai, ChatGPT, Claude Code and token-based clients are on the Installation tab. In every case you paste the MCP endpoint URL from the settings page, sign in to WordPress and approve the client.<\/p><\/dd>\n<dt id=\"what%20address%20do%20i%20paste%20into%20the%20client%3F\"><h3>What address do I paste into the client?<\/h3><\/dt>\n<dd><p>The full MCP endpoint URL from Settings \u2192 Simonov AI Site Manager, e.g. <code>https:\/\/example.com\/wp-json\/wp-mcp\/v1\/mcp<\/code>. Pasting only the domain does not work.<\/p><\/dd>\n<dt id=\"the%20client%20signs%20in%2C%20then%20says%20the%20server%20refused%20its%20request\"><h3>The client signs in, then says the server refused its request<\/h3><\/dt>\n<dd><p>Almost always a filter in front of WordPress that blocks AI user agents, not this plugin.<\/p>\n\n<p>The sign-in happens in your browser, so it passes. The MCP request that follows is made by the AI provider's own servers, carrying their own user agent \u2014 and that is what gets blocked. Hence the confusing \"you signed in, but then it was refused\".<\/p>\n\n<p>Every provider uses separate agents for crawling and for requests a person actually asked for, and only the second kind has to be allowed:<\/p>\n\n<ul>\n<li>Claude \u2014 allow <code>Claude-User<\/code>; <code>ClaudeBot<\/code> and <code>Claude-SearchBot<\/code> may stay blocked.<\/li>\n<li>ChatGPT \u2014 allow <code>ChatGPT-User<\/code>; <code>GPTBot<\/code> and <code>OAI-SearchBot<\/code> may stay blocked.<\/li>\n<li>Perplexity \u2014 allow <code>Perplexity-User<\/code>; <code>PerplexityBot<\/code> may stay blocked.<\/li>\n<\/ul>\n\n<p>Allowing the user-initiated agent does not open your site to AI training crawlers. Those arrive under the other names, and you can keep blocking every one of them.<\/p>\n\n<p>To check your site from any machine with curl:<\/p>\n\n<pre><code>curl -A \"Claude-User\/1.0 (+Claude-User@anthropic.com)\" -o \/dev\/null -w \"%{http_code}\\n\" https:\/\/example.com\/\n<\/code><\/pre>\n\n<p>200 means nothing is blocking. A 403, 405, 406 or 418 \u2014 especially as a plain HTML error page rather than WordPress output \u2014 means the request never reached WordPress. Run the same command without <code>-A<\/code> to confirm the user agent is the only difference.<\/p>\n\n<p>Such a filter normally lives in one of three places, worth checking in this order: your hosting control panel (an option like \"Block AI bots\" or \"AI crawler protection\" \u2014 on shared hosting the rule is in the server's own nginx or Apache config, so you may have to ask support, and no plugin or .htaccess of yours can override it); Cloudflare or a similar CDN (Security \u2192 Bots \u2192 \"Block AI Scrapers and Crawlers\", or a custom WAF rule); or a security or \"AI blocker\" plugin that filters by user agent.<\/p>\n\n<p>Ask for the user-initiated agent to be removed from the block list by name. Blocking it is rarely deliberate \u2014 these lists are usually copied wholesale from a published crawler list, without noticing that one entry on it is how your own integrations reach the site.<\/p><\/dd>\n<dt id=\"how%20do%20i%20update%20the%20plugin%3F\"><h3>How do I update the plugin?<\/h3><\/dt>\n<dd><p>Through WordPress, like any other plugin from the directory: new versions appear under Dashboard \u2192 Updates and on the Plugins screen. Nothing has to be configured and nothing is fetched from anywhere but WordPress.org.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.9.2<\/h4>\n\n<ul>\n<li>Every tool now tells the client whether it only reads, adds something new, or can overwrite or delete. ChatGPT and other clients run reading tools without asking and ask before changes.<\/li>\n<\/ul>\n\n<h4>0.9.1<\/h4>\n\n<ul>\n<li>MCP requests never hold administrative capabilities, whichever account is connected.<\/li>\n<li>Removed the option, user, plugin and theme lookup tools.<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>First release in the WordPress.org directory.<\/li>\n<\/ul>","raw_excerpt":"Free, open Model Context Protocol (MCP) server for WordPress. Lets Claude, ChatGPT and other MCP clients manage your site's content.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/390960","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=390960"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/capoeira314"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=390960"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=390960"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=390960"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=390960"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=390960"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=390960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}