外掛說明
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
Optional companion: WebMCP Bridge
Mescio for Agents is the content layer (what agents can read). WebMCP Bridge — same author, also free — is the tool layer (what agents can do): search, menus, and WooCommerce cart actions, without scraping HTML.
When both plugins are active, WebMCP automatically unlocks get_markdown_content and get_llms_txt. Mescio for Agents works fully on its own; WebMCP is optional.
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.
安裝方式
- 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.
常見問題集
-
Does it work with WP Rocket or other full-page cache plugins?
-
Yes, with a caveat worth understanding.
HTTP Link headers (the
Link: <...>; rel="..."response headers) are injected by PHP at request time. Full-page cache plugins like WP Rocket, LiteSpeed Cache, and W3 Total Cache serve cached HTML directly — bypassing PHP entirely — so those HTTP headers are not present on cached responses. This is intentional behavior by those plugins and affects every WordPress plugin that relies on PHP-injected headers, not just Mescio for Agents.What Mescio for Agents does to work around this:
Starting from version 1.7.0, the plugin also emits equivalent HTML
<link>tags in the<head>of your homepage viawp_head:`html`
These tags are part of the HTML content and are cached along with the page — so they are present even on cached responses and are readable by AI agents and checkers that parse the HTML
<head>.If you want to disable the HTML tags and keep only HTTP headers (or disable both), use these filters in your theme’s
functions.php:`php// Disable only the HTML tags
add_filter( ‘mescio_link_html_tags_enabled’, ‘__return_false’ );// Disable both HTTP headers and HTML tags
add_filter( ‘mescio_link_headers_enabled’, ‘__return_false’ );
` -
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.
-
Do I need WebMCP Bridge?
-
No. Mescio for Agents is complete on its own. WebMCP Bridge is an optional companion from the same author that exposes tools (search, menus, WooCommerce cart) so agents can act, not only read. Together they cut token use (Markdown instead of HTML) and avoid page scraping. When both are active, WebMCP adds
get_markdown_contentandget_llms_txtautomatically. -
Can I advertise the Markdown version of each page in the HTML header?
-
Yes, from version 1.7.2. On every singular post, page or product the plugin adds:
`html`
The same relation is also sent as an HTTP
Linkheader. The URL is the REST Markdown endpoint so a plain GET returnstext/markdown— scanners that follow the href do not need to sendAccept: text/markdown.To disable only this per-page alternate (keeping homepage discovery links):
`phpadd_filter( ‘mescio_markdown_alternate_enabled’, ‘__return_false’ );
`To point the alternate at a different URL:
`phpadd_filter( ‘mescio_markdown_alternate_url’, function( $url, $post ) {
return get_permalink( $post );
}, 10, 2 );
`
使用者評論
參與者及開發者
變更記錄
1.7.3
- Optional companion: settings page now explains the content vs tools split with WebMCP Bridge (same author, free, not required)
- When WebMCP is missing, one-click install/activate from Settings Mescio for Agents
- After each plugin update, a dismissible notice on the Plugins screen offers the same pairing — it does not appear site-wide
- New filter:
mescio_companion_notice_enabled
1.7.2
- New: each singular page now advertises its Markdown representation in the HTML
<head>and as an HTTPLinkheader:rel="alternate"; type="text/markdown" - The alternate points at
/wp-json/mescio-for-agents/v1/markdown?id=Nso a plain GET returns Markdown (noAcceptheader required) - New filters:
mescio_markdown_alternate_enabled,mescio_markdown_alternate_url
1.7.1
- Fixed: Content-Signal line in robots.txt was discarded by Yoast SEO — hook now runs at priority 999999, after Yoast rebuilds robots.txt from scratch (priority 99999)
- Fixed:
/.well-known/api-catalogwas advertised in Link headers and HTML<link>tags but returned 404 because the route was never registered - New: RFC 9727 API catalog endpoint at
/.well-known/api-catalogservingapplication/linkset+json(with GET and HEAD support) - Added:
mescio_api_catalogfilter to customise the catalog document
1.6.6
solve problem robots.txt
1.6.5
- Security: added two-layer burst protection to rate limiter — IPs sending more than 20 req/5s are auto-blocked for 10 minutes; blocked IPs rejected with a single transient read before any WordPress processing
- All burst thresholds filterable:
mescio_burst_limit,mescio_burst_window,mescio_block_duration - REST 429 responses now include
Retry-After,X-RateLimit-Remaining,X-RateLimit-Resetheaders - New: Content Signals support (draft-romm-aipref-contentsignals) — site owners can now declare AI usage preferences
- Content Signals published in
robots.txtviaContent-Signal:directive and in all Markdown/REST response headers - Default values:
ai-train=no, search=yes, ai-input=yes(conservative — protects owners who install without reading docs) - Configurable from Settings Mescio for Agents with live preview
- Filterable by developers via
mescio_content_signalsfilter - Replaced hardcoded
Content-Signal: ai-train=yesheader with dynamic value from settings
1.7.0
- New: HTML
<link>tags in<head>for discovery — cache-proof fallback for WP Rocket and all full-page cache plugins; emitted on the homepage viawp_head - New: added FAQ entry explaining WP Rocket / full-page cache compatibility and the HTML tag fallback
- Improved:
wp_headersfilter replacessend_headersaction for HTTP Link headers — more compatible with standard setups - Added:
api-catalogLink (RFC 9727) pointing to/.well-known/api-catalog - Added:
service-docLink alongsideservice-desc— broader checker compatibility - Fixed: OpenAPI
service-descnow uses correct media typeapplication/vnd.oai.openapi+json - Fixed: Content Signals settings now save correctly — option group mismatch resolved
- Security: two-layer burst protection in rate limiter (20 req/5s 10-minute auto-block)
- New filter:
mescio_link_html_tags_enabledto disable HTML<link>tags independently
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
