{"id":396644,"date":"2026-11-08T11:29:32","date_gmt":"2026-11-08T11:29:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/markdown-for-ai-agent\/"},"modified":"2026-11-08T12:11:03","modified_gmt":"2026-11-08T12:11:03","slug":"markivo-geo-aeo-toolkit","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/markivo-geo-aeo-toolkit\/","author":23597002,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.1","stable_tag":"2.0.1","tested":"7.1.4","requires":"5.9","requires_php":"7.4","requires_plugins":null,"header_name":"Markivo GEO & AEO Toolkit","header_author":"Neeraj Kumar","header_description":"Generative and answer engine optimisation for AI agents: Markdown responses, llms.txt, llms-full.txt, agents.txt, Content Signals, discovery files, WebMCP tools and a remote MCP server. Every feature can be switched on or off.","assets_banners_color":"5e4f9f","last_updated":"2026-11-08 12:11:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/neerajkumarseo.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"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":"neerajkumar1792000","date":"2026-11-08 11:29:24","revision":3790906},"2.0.1":{"tag":"2.0.1","author":"neerajkumar1792000","date":"2026-11-08 12:11:03","revision":3790958}},"upgrade_notice":{"2.0.1":"<p>Adds a review prompt on the settings page and minor admin enhancements.<\/p>","2.0.0":"<p>Adds llms.txt, llms-full.txt, agents.txt, Content Signals, WebMCP and MCP tools. Every feature can be switched on or off.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3790933,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3790933,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3790933,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3790933,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3790933,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0","2.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,2591,244604,4608,242115],"plugin_category":[49],"plugin_contributors":[291495],"plugin_business_model":[],"class_list":["post-396644","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-geo","plugin_tags-llms-txt","plugin_tags-markdown","plugin_tags-mcp","plugin_category-maps-and-location","plugin_contributors-neerajkumar1792000","plugin_committers-neerajkumar1792000"],"banners":{"banner":"https:\/\/ps.w.org\/markivo-geo-aeo-toolkit\/assets\/banner-772x250.png?rev=3790933","banner_2x":"https:\/\/ps.w.org\/markivo-geo-aeo-toolkit\/assets\/banner-1544x500.png?rev=3790933","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/markivo-geo-aeo-toolkit\/assets\/icon.svg?rev=3790933","icon":"https:\/\/ps.w.org\/markivo-geo-aeo-toolkit\/assets\/icon.svg?rev=3790933","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Markivo GEO &amp; AEO Toolkit prepares your site for generative engine optimisation (GEO) and answer engine optimisation (AEO). AI assistants, AI search engines and AI agents get clean, structured content and simple tools, while human visitors keep seeing your normal pages.<\/p>\n\n<p>Every feature has its own switch under <strong>Settings &gt; Markivo GEO &amp; AEO<\/strong>.<\/p>\n\n<h4>Content for AI<\/h4>\n\n<ul>\n<li><strong>Markdown content negotiation<\/strong> \u2013 requests that send <code>Accept: text\/markdown<\/code> receive the page as clean Markdown. Navigation, sidebars, forms, scripts and ads are removed. Works on posts, pages, products, archives and search results.<\/li>\n<li><strong>YAML front matter<\/strong> \u2013 title, URL, language, description, author, dates, image, categories, tags and WooCommerce price, SKU and stock.<\/li>\n<li><strong>Markdown REST API<\/strong> \u2013 <code>\/wp-json\/markivo\/v1\/markdown?url=<\/code> or <code>?id=<\/code>, advertised on every post with <code>&lt;link rel=\"alternate\" type=\"text\/markdown\"&gt;<\/code>. Works behind any page cache.<\/li>\n<li><strong>\/llms.txt<\/strong> \u2013 an index of your content in the llmstxt.org format, with an optional introduction you write.<\/li>\n<li><strong>\/llms-full.txt<\/strong> \u2013 the full content of your posts in one Markdown file, paged with <code>?limit=<\/code> and <code>?offset=<\/code>.<\/li>\n<li><strong>WooCommerce<\/strong> \u2013 product price, stock, rating and attributes in Markdown and llms.txt.<\/li>\n<li><strong>Hide content<\/strong> \u2013 hide any post from llms.txt, llms-full.txt and agent search from its edit screen or by ID\/URL. WooCommerce cart, checkout and account pages are always hidden.<\/li>\n<\/ul>\n\n<h4>Policy and discovery<\/h4>\n\n<ul>\n<li><strong>\/agents.txt<\/strong> \u2013 an access policy for AI agents with your own ALLOW \/ DISALLOW rules.<\/li>\n<li><strong>Content Signals<\/strong> \u2013 declare <code>search<\/code>, <code>ai-input<\/code> and <code>ai-train<\/code> preferences in robots.txt and response headers.<\/li>\n<li><strong>robots.txt<\/strong> \u2013 adds the Content-Signal line and references to llms.txt and agents.txt.<\/li>\n<li><strong>\/.well-known\/api-catalog<\/strong> (RFC 9727), an MCP server card and an agent skills index.<\/li>\n<li><strong>Discovery links<\/strong> \u2013 <code>Link<\/code> headers and <code>&lt;link&gt;<\/code> tags that point agents to all of the above.<\/li>\n<\/ul>\n\n<h4>Tools for AI agents (WebMCP and MCP)<\/h4>\n\n<ul>\n<li><strong>WebMCP<\/strong> \u2013 registers tools with the browser WebMCP API (<code>navigator.modelContext<\/code>), so in-browser agents can search your site, read pages and, on WooCommerce stores, manage the visitor's own cart.<\/li>\n<li><strong>Remote MCP server<\/strong> \u2013 a Streamable HTTP MCP endpoint at <code>\/wp-json\/markivo\/v1\/mcp<\/code> for MCP clients, with read-only tools. An optional API key can be required.<\/li>\n<li><strong>OpenAPI<\/strong> \u2013 <code>\/wp-json\/markivo\/v1\/openapi<\/code> describes the API for tools such as custom GPT actions.<\/li>\n<li>Included tools: <code>get_site_info<\/code>, <code>search_content<\/code>, <code>get_markdown_content<\/code>, <code>get_llms_txt<\/code>, <code>list_terms<\/code>, <code>get_menu<\/code>, and with WooCommerce <code>woo_search_products<\/code>, <code>woo_get_product<\/code>, <code>woo_list_categories<\/code>, <code>woo_add_to_cart<\/code>, <code>woo_get_cart<\/code>, <code>woo_remove_from_cart<\/code>, <code>woo_apply_coupon<\/code>. Each tool can be turned off.<\/li>\n<li>Cart tools only run from a page of your site in the visitor's own browser session. They are never offered on the remote MCP server.<\/li>\n<\/ul>\n\n<h4>Safe by default<\/h4>\n\n<ul>\n<li>Only published, public, non-password-protected content of the post types you choose is exposed.<\/li>\n<li>Browsers always receive the normal HTML page, and every response sends <code>Vary: Accept<\/code>.<\/li>\n<li>Optional per-IP rate limit for all endpoints of the plugin.<\/li>\n<li>No external requests, no tracking, no cookies.<\/li>\n<\/ul>\n\n<h4>Developer hooks<\/h4>\n\n<ul>\n<li><code>markivo_register_tools<\/code> (action) \u2013 register your own tools: <code>$tools-&gt;register( 'name', array( 'description' =&gt; '', 'inputSchema' =&gt; array(), 'callback' =&gt; 'fn' ) )<\/code>.<\/li>\n<li><code>markivo_post_types<\/code>, <code>markivo_should_convert<\/code>, <code>markivo_exclude_post<\/code>, <code>markivo_pre_convert_html<\/code>, <code>markivo_post_markdown<\/code>, <code>markivo_front_matter<\/code>.<\/li>\n<li><code>markivo_llms_txt<\/code>, <code>markivo_llms_full_txt<\/code>, <code>markivo_agents_txt<\/code>, <code>markivo_api_catalog<\/code>, <code>markivo_server_card<\/code>, <code>markivo_discovery_links<\/code>, <code>markivo_content_signal<\/code>.<\/li>\n<li><code>markivo_noise_classes<\/code>, <code>markivo_noise_ids<\/code> \u2013 elements removed before conversion.<\/li>\n<li><code>markivo_rate_limit<\/code>, <code>markivo_client_ip<\/code> \u2013 rate limit and client IP (for sites behind a proxy).<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>markivo-geo-aeo-toolkit<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it from the Plugins screen.<\/li>\n<li>Activate the plugin. All features are on by default except the MCP API key.<\/li>\n<li>Open Settings &gt; Markivo GEO &amp; AEO to switch features on or off and to write your llms.txt introduction.<\/li>\n<li>Test it: <code>curl -si https:\/\/example.com\/ -H \"Accept: text\/markdown\" | head -5<\/code> should show <code>Content-Type: text\/markdown<\/code>, and <code>https:\/\/example.com\/llms.txt<\/code> should show your content index.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20my%20visitors%20see%20markdown%3F\"><h3>Will my visitors see Markdown?<\/h3><\/dt>\n<dd><p>No. Only requests whose Accept header contains <code>text\/markdown<\/code> receive Markdown. Browsers never send that header.<\/p><\/dd>\n<dt id=\"%2Fllms.txt%20or%20%2Fagents.txt%20shows%20my%20theme%27s%20404%20page%20or%20an%20old%20file.\"><h3>\/llms.txt or \/agents.txt shows my theme's 404 page or an old file.<\/h3><\/dt>\n<dd><p>If a physical file with the same name exists in your site root, the web server serves it instead; the settings page warns you about this. Some server configurations do not pass <code>.txt<\/code> requests to WordPress; ask your host to route missing files to <code>index.php<\/code>. If another plugin also generates llms.txt, switch off one of them.<\/p><\/dd>\n<dt id=\"i%20use%20a%20page%20cache%20or%20cdn%20and%20still%20get%20html%20for%20accept%3A%20text%2Fmarkdown.\"><h3>I use a page cache or CDN and still get HTML for Accept: text\/markdown.<\/h3><\/dt>\n<dd><p>Caches that serve pages before WordPress runs (for example LiteSpeed, Varnish or Cloudflare) must vary on the <code>Accept<\/code> header or bypass the cache when it contains <code>text\/markdown<\/code>. The Markdown REST API and llms.txt work regardless.<\/p><\/dd>\n<dt id=\"how%20do%20i%20connect%20an%20mcp%20client%3F\"><h3>How do I connect an MCP client?<\/h3><\/dt>\n<dd><p>Use <code>https:\/\/example.com\/wp-json\/markivo\/v1\/mcp<\/code> as a remote (Streamable HTTP) MCP server. If you turned on the API key, send it as <code>Authorization: Bearer &lt;key&gt;<\/code>.<\/p><\/dd>\n<dt id=\"does%20it%20change%20my%20content%3F\"><h3>Does it change my content?<\/h3><\/dt>\n<dd><p>No. Nothing is written to your posts. The plugin only adds responses for clients that ask for them.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Added: Rating review prompt on the plugin settings screen.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>New name: Markivo GEO &amp; AEO Toolkit.<\/li>\n<li>Added: \/llms.txt, \/llms-full.txt and \/agents.txt, each with its own switch.<\/li>\n<li>Added: Markdown REST API with alternate links, YAML front matter and WooCommerce product data.<\/li>\n<li>Added: Content Signals, robots.txt references, RFC 9727 API catalog, MCP server card and agent skills index.<\/li>\n<li>Added: WebMCP browser tools, a remote MCP server, a tool manifest and an OpenAPI description, with per-tool switches.<\/li>\n<li>Added: hide posts from llms.txt and agent search; optional per-IP rate limit.<\/li>\n<li>Changed: page caches are bypassed through DONOTCACHEPAGE, no-cache headers and the LiteSpeed\/NitroPack hooks.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Markdown content negotiation for posts, pages, archives and search results.<\/li>\n<\/ul>","raw_excerpt":"Help AI search engines and agents read and use your site: Markdown pages, llms.txt, agents.txt, Content Signals, WebMCP and an MCP server.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/396644","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=396644"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/neerajkumar1792000"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=396644"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=396644"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=396644"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=396644"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=396644"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=396644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}