Description
Mescio for Agents makes your WordPress site AI-ready by silently serving posts, pages and WooCommerce products as clean, structured Markdown to any AI agent or LLM pipeline that requests it — using the standard HTTP Accept: text/markdown content negotiation header.
Human visitors using a browser are completely unaffected. Mescio for Agents only activates when an AI agent or crawler explicitly asks for Markdown.
Why Markdown?
Feeding raw HTML to an AI is expensive and noisy. A heading like ## About Us costs ~3 tokens in Markdown vs 12–15 tokens as HTML — before accounting for <div> wrappers, navigation bars and script tags that carry zero semantic value. This blog post you are reading takes 16,180 tokens in HTML and 3,150 tokens in Markdown. That is an 80% reduction.
Markdown has become the lingua franca for AI systems. Mescio for Agents lets your site speak it natively, at zero cost to your human visitors.
How it works
When an HTTP client sends a request with Accept: text/markdown, Mescio for Agents intercepts the WordPress request lifecycle before any template is rendered, converts the post content to clean Markdown, and returns it with the correct Content-Type: text/markdown header.
curl https://yoursite.com/your-post/ \
-H "Accept: text/markdown"
Features
- Zero configuration — works out of the box on any singular post, page or custom post type
/llms.txtendpoint — auto-generated index of all your content in the llmstxt.org standard format, so AI agents can discover what’s on your site/llms-full.txtendpoint — full site content in a single Markdown file, ready for RAG pipelines- WooCommerce support — product pages include price, SKU, stock status, rating, attributes and gallery; products are grouped by category in
llms.txt - YAML front matter — every document includes structured metadata (title, description, URL, date, categories, tags, featured image)
- Multilingual — detects language via WPML, Polylang, TranslatePress or WordPress locale; emits
Content-LanguageandLink: rel=alternateheaders - REST API endpoint —
/wp-json/mescio-for-agents/v1/markdown?id=<post_id>or?url=<permalink> - Page builder cleanup — aggressively strips Elementor, Divi, WPBakery and Beaver Builder layout noise
- Token count header —
X-Markdown-Tokenstells AI pipelines how large the document is before processing - Content Signals — emits
Content-Signal: ai-train=yes, search=yes, ai-input=yes - Correct HTTP caching —
Vary: Acceptensures CDNs cache HTML and Markdown versions separately
Response headers
Content-Type: text/markdown; charset=utf-8Content-Language: it(or detected language)Vary: AcceptX-Markdown-Tokens: 725Content-Signal: ai-train=yes, search=yes, ai-input=yesLink: <url>; rel="alternate"; hreflang="en"(when translations available)
Multilingual plugin support
- WPML — reads language and available translations automatically
- Polylang — reads language and links to translated post IDs
- TranslatePress — reads
trp_languagepost meta - Manual — configure primary language and additional languages in Settings Mescio for Agents
REST API
GET /wp-json/mescio-for-agents/v1/markdown?id=42
GET /wp-json/mescio-for-agents/v1/markdown?url=https://yoursite.com/my-page/
Developer hooks
Filter: mescio_enabled_post_types — add or remove post types dynamically.
Filter: mescio_pre_convert_content — modify the HTML before conversion to Markdown.
Filter: mescio_post_convert_content — modify the Markdown after conversion.
Privacy
This plugin does not collect, store or transmit any personal data. It does not set cookies. It does not make external HTTP requests.
Installation
- Upload the
mescio-for-agentsfolder to/wp-content/plugins/, or install directly from the WordPress plugin directory. - Activate the plugin through the Plugins menu in WordPress.
- Optionally configure it at Settings Mescio for Agents.
- Test it:
curl https://yoursite.com/any-post/ -H "Accept: text/markdown"
No API keys, no external services, no additional dependencies required.
FAQ
-
Will this affect my site’s SEO or how Google crawls it?
-
No. The plugin only responds with Markdown when an HTTP client sends
Accept: text/markdown. Standard browsers and Googlebot never send this header, so they receive the normal HTML page. The Markdown responses includeX-Robots-Tag: noindexto be safe. -
Does it work with the Gutenberg block editor?
-
Yes. The plugin applies WordPress’s
the_contentfilter, which fully processes Gutenberg blocks into HTML before conversion. -
Does it work with Elementor, Divi or other page builders?
-
Yes. The HTML cleaner aggressively strips layout wrapper elements, data attributes and icon-only links produced by visual page builders, resulting in clean semantic Markdown.
-
Does it work without WooCommerce?
-
Yes. WooCommerce is completely optional. Without it, the plugin works normally for posts and pages.
-
Does it require WPML or Polylang?
-
No. Both are optional. Without them, Mescio for Agents detects the site language from the WordPress locale setting. You can also configure languages manually in Settings Mescio for Agents.
-
Can I add custom post types?
-
Yes, either from the settings page or via the
mescio_enabled_post_typesfilter:add_filter( 'mescio_enabled_post_types', function( $types ) { $types[] = 'my_cpt'; return $types; }); -
Is there a “powered by” link added to my site?
-
No. The plugin adds no frontend links, scripts or styles to your site.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Mescio for Agents” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Mescio for Agents” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.6.5
- Security: added two-layer burst protection to rate limiter
- Layer 1 — burst guard: IPs sending more than 20 requests in 5 seconds are auto-blocked for 10 minutes; block checked with a single transient read before any WordPress processing
- Layer 2 — sustained limits unchanged: 10 req/60s for llms-full.txt, 20 for REST search, 30 for other REST, 60 default
- All burst thresholds filterable via
mescio_burst_limit,mescio_burst_window,mescio_block_duration - REST 429 responses now include
Retry-After,X-RateLimit-Remaining,X-RateLimit-Resetheaders - Consolidated REST rate limit logic into
Mescio_For_Agents_Rate_Limiter::check_for_rest()(handles both burst + sustained in one call) - Removed duplicate
get_request_ip()from main class — now usesRate_Limiter::get_ip()throughout
1.6.3
- Fix: shortcode builder tags (WPBakery, WoodMart, ecc.) rimossi anche dagli excerpt nel llms.txt index
- Fix: llms.txt ora serve titoli, excerpt e permalink nella lingua corretta su siti multilingua (WPML/Polylang)
- Fix: llms-full.txt ora serve il contenuto completo dei post nella lingua corretta (WPML/Polylang)
1.6.1
- Fixed 404 on multilingual sites using WPML or Polylang:
llms.txtandllms-full.txtnow resolve correctly under language-prefixed URLs (e.g./it/llms.txt,/en/llms-full.txt) - Added
parse_requestearly intercept (priority 1) as fallback for language plugins that rewrite REQUEST_URI before WordPress rewrite rules run - Added rewrite rule variant matching
/xx/llms.txtand/xx-XX/llms.txtpatterns
1.6.0
- Added rate limiting: per-IP request throttling on all endpoints via WordPress transients
llms-full.txtlimited to 10 req/60s, REST search to 20, other REST to 30, default to 60- Returns 429 Too Many Requests with
Retry-Afterheader when limit exceeded - Respects Cloudflare, nginx and standard
X-Forwarded-Forproxy headers - Added sensitive meta key filter: fields containing
password,token,email,phone,ibanand similar patterns are never exposed in Markdown front matter - Both rate limiting and sensitive key filter are filterable by developers
1.5.0
- Added automatic custom fields support in Markdown front matter
- If ACF is active, uses
get_fields()with label-keyed, typed values; nested groups and repeaters flattened to dot notation (e.g.group.field) - Without ACF, exposes plain post meta — skipping internal keys (
_prefix), serialized data, JSON blobs and known plugin internals - Added
mescio_custom_metafilter for developer overrides
1.4.0
- Added
/agents.txtendpoint following IETF draft-srijal-agents-policy-00 - SHA-256 hash computed automatically from directive content
- Configurable directives (path, ALLOW/DISALLOW, optional params) via admin settings
- Live preview of generated file with hash in settings page
- Default directives:
/ ALLOW,/wp-admin DISALLOW,/wp-login.php DISALLOW - Added
/agents.txtlink in Quick Links table
1.3.0
- Refactored monolith into modular architecture (6 separate class files)
- Added REST endpoint
/wp-json/mescio-for-agents/v1/context— site metadata + llms.txt in JSON for MCP servers - Added REST endpoint
/wp-json/mescio-for-agents/v1/search— full-text search with Markdown output - Added REST endpoint
/wp-json/mescio-for-agents/v1/page— page by slug or ID - Added REST endpoint
/wp-json/mescio-for-agents/v1/openapi— OpenAPI 3.1 schema - Added
llms-full.txtpagination via?limit=N&offset=NwithX-LLMS-Nextheader - Improved caching: real
Last-Modifiedfrom content timestamp,ETagfrom body hash, full 304 support - Fixed excess blank lines in Markdown output from Elementor and other page builders
- Expanded admin API Examples panel with 8 tabs and copy buttons
1.2.0
- Added
/llms.txtendpoint — auto-generated site index in the llmstxt.org standard format - Added
/llms-full.txtendpoint — full site content in a single Markdown file for RAG pipelines - Products in
llms.txtgrouped by WooCommerce category with price and stock status - Added
mescio_llms_txt_posts_limit,mescio_llms_txt_products_limit,mescio_llms_full_txt_limitfilters - Added flush rewrite rules on plugin activation/deactivation
- Added
/llms.txtand/llms-full.txtclickable links in the settings test panel
1.1.0
- Added multilingual support: WPML, Polylang, TranslatePress and manual configuration
- Added
Content-LanguageandLink: rel=alternateresponse headers - Improved HTML to Markdown converter with aggressive page builder noise removal
- Added UTF-8 and mojibake encoding auto-correction
- Improved whitespace normalisation
- Added 27-language selector in admin with flags and native names
- Added plugin detection badges in settings page
- Added test panel with ready-to-use curl and Python examples
1.0.0
- Initial release
- Content negotiation via
Accept: text/markdownheader - YAML front matter with post metadata
- WooCommerce product support
- REST API endpoint
/wp-json/mescio-for-agents/v1/markdown X-Markdown-Tokensheader with token count estimateContent-SignalheaderVary: Acceptfor correct HTTP caching
