Mescio for Agents
Mescio for Agents
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
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 include X-Robots-Tag: noindex to be safe.
Yes. The plugin applies WordPress’s the_content filter, which fully processes Gutenberg blocks into HTML before conversion.
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.
Yes. WooCommerce is completely optional. Without it, the plugin works normally for posts and pages.
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.
Yes, either from the settings page or via the mescio_enabled_post_types filter:
add_filter( 'mescio_enabled_post_types', function( $types ) {
$types[] = 'my_cpt';
return $types;
});
No. The plugin adds no frontend links, scripts or styles to your site.
Reviews
Changelog
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