SEO
New in v3.5.0. EMCP reads and writes the SEO metadata your SEO plugin stores, the SEO title, meta description, canonical URL, robots (noindex/nofollow), focus keyword, and Open Graph / Twitter social fields, for posts and terms, through the same two-dispatcher pattern as the Forms and ACF domains.
This is distinct from the Pro SEO & Accessibility toolkit (audit-page-seo, generate-meta-tags), which analyses and generates. These tools read and set what the SEO plugin actually stores.
Slim SEO is free; the other six are Pro:
| Plugin | Tools | Tier |
|---|---|---|
| Slim SEO | slimseo-read / slimseo-write | Free |
| Yoast SEO | yoast-read / yoast-write | Pro |
| Rank Math | rankmath-read / rankmath-write | Pro |
| All in One SEO | aioseo-read / aioseo-write | Pro |
| SEOPress | seopress-read / seopress-write | Pro |
| The SEO Framework | seoframework-read / seoframework-write | Pro |
| SureRank | surerank-read / surerank-write | Pro |
Each pair registers only when its plugin is active: most sites run one SEO plugin and see exactly its two tools.
One unified field set
Section titled “One unified field set”Every plugin stores SEO differently (individual meta keys, options, custom tables, different robots encodings). EMCP hides all of that behind one unified field vocabulary: you read and write the same fields regardless of plugin:
| Field | Meaning |
|---|---|
title | SEO title |
description | Meta description |
canonical | Canonical URL |
noindex / nofollow | Robots directives (booleans) |
focus_keyword | Target keyword (where supported) |
og_title / og_description / og_image | Open Graph / Facebook |
twitter_title / twitter_description / twitter_image | Twitter/X card |
The adapter translates these to each plugin’s own encoding, Yoast’s '1', SEOPress’s 'yes', Rank Math’s robots array, and so on. You never deal with those.
Discover, then act
Section titled “Discover, then act”// discoverrankmath-read({})// → { mode: "read", operations: [ { operation: "get-post-seo", … }, { operation: "get-schema", … }, … ] }
// read a post's SEOrankmath-read({ operation: "get-post-seo", arguments: { post_id: 42 } })
// set title + meta description, un-noindex itrankmath-write({ operation: "update-post-seo", arguments: { post_id: 42, title: "Best Widgets (2026)", description: "…", noindex: false } })update-*-seo changes only the fields you pass; everything else is left as-is.
Operations
Section titled “Operations”| Operation | Support |
|---|---|
get-post-seo / update-post-seo | All 7 plugins |
get-term-seo / update-term-seo | All except All in One SEO (post-only in 4.9) |
get-schema | Rank Math, All in One SEO, SEOPress |
get-settings | Slim SEO, Yoast, Rank Math, AIOSEO, SEOPress, SureRank |
Fields a plugin doesn’t store are simply absent, e.g. Slim SEO has no focus_keyword. Read first; don’t assume a field exists.
Safety by design
Section titled “Safety by design”- Reads on, writes off. Each
<plugin>-readis enabled by default; each<plugin>-writeships disabled: enable it under EMCP Tools → Tools → Plugins → SEO. - Standard capabilities. Post/term SEO writes require
edit_posts; settings requiremanage_options. - Only when active. A plugin’s pair doesn’t register unless that plugin is installed and active.
In the admin
Section titled “In the admin”The dispatchers appear under EMCP Tools → Tools → Plugins → SEO, grouped as one section, each plugin a card with its read (on) and write (off by default) toggles.
Agent skill
Section titled “Agent skill”Pro bundles an emcp-plugins/seo Agent Skill that teaches a connected agent the unified field vocabulary, per-plugin operation support (term SEO, schema, focus keyword), and the reads-on/writes-off defaults, so it sets SEO correctly across any of the seven plugins.