MIT licensed · Model Context Protocol server

Give your AI assistant SEO hands on WordPress.

Connect Claude Code, Cursor, opencode, or any MCP-compatible AI directly to your WordPress REST API. It reads the page, flags what's broken, fixes it, and logs every change so it can undo it later.

13MCP tools
8Plugins
70+Tests
100%TypeScript
✓ apply-seo done
↺ rollback ready
REQUEST PATHlive
Assistant Middleware WordPress
authvalidaterate-limitcacheaudit-log
0
MCP tools registered
0
Plugin modules
0
Automated tests
0
Middleware stages
Why this exists

Manual SEO doesn't scale. Dashboards don't fit in your workflow.

Most WordPress SEO work is either done by hand, page by page, or handed to a plugin dashboard that lives behind a login — outside the terminal or editor where the actual work happens.

// 01 — manual route

Checking pages one at a time

Opening every post to check a title tag, an alt attribute, or a stale canonical URL doesn't scale past a handful of pages.

And it leaves no record of what changed, or why.

// 02 — dashboard route

Plugin UIs that live elsewhere

Helpful, but disconnected from the editor or terminal session where content actually gets written and reviewed.

// 03 — the MCP route

SEO as tools your assistant can call directly

Every read is a structured analysis. Every write passes through validation, rate limiting, and a SQLite audit log — so "apply the fix" is never a one-way door. Ask in plain language, or call the tools yourself.

Architecture

Click a stage to see what runs there.

A single call from your AI assistant passes through five middleware stages before reaching a plugin, and the plugin before it ever touches WordPress.

AI Assistant
Claude, Cursor…
MCP Protocol
stdio transport
Middleware
5 stages
Plugin System
8 plugins
WordPress
REST API
Whatever speaks MCP — Claude Code, Cursor, or opencode — sends a tool call like apply-seo with a site and post ID.
Tool manifest

13 tools. Filter by what you're trying to fix.

Every tool the server registers with your AI assistant, grouped by the part of SEO it handles.

Setup
manage-sites

Add, list, or remove connected WordPress sites.

Meta
analyze-seo

Checks meta title, description, OG, and Twitter tags.

Meta
apply-seo

Fixes missing, short, or overlong meta tags.

Schema
analyze-schema

Inspects existing JSON-LD structured data on a page.

Schema
apply-schema

Injects Article, Organization, and BreadcrumbList schema.

Content
analyze-content

Checks headings, word count, and keyword usage.

Content
analyze-images

Checks alt text and lazy-loading on page images.

Technical
analyze-technical

Checks canonical URL, robots rules, and hreflang.

Ops
generate-sitemap

Generates an XML sitemap, optionally submitted to Google.

Content
suggest-keywords

Generates keyword ideas for a given topic.

Ops
search-analytics

Pulls Google Search Console analytics, if configured.

Ops
rollback-seo

Undoes the last SEO change made to a page.

Ops
get-seo-history

Views the full change history for a page.

Workflow

Or just tell your AI what you want.

"Optimize this page for SEO" runs this exact sequence automatically. Here's what it looks like called directly.

01

Register the site once

manage-sites({ action: "add", name: "my-site", config: { url, username, appPassword } })
02

Analyze the page

analyze-seo({ site: "my-site", postId: 42 }) analyze-content({ site: "my-site", postId: 42, keyword: "seo tools" }) analyze-schema({ site: "my-site", postId: 42 })
03

Apply fixes

apply-seo({ site: "my-site", postId: 42, fixes: ["missing-title", "missing-desc"] }) apply-schema({ site: "my-site", postId: 42, schemas: ["Article", "Organization"] })
04

Regenerate the sitemap

generate-sitemap({ site: "my-site" })
05

Roll back if needed

rollback-seo({ site: "my-site", postId: 42 })
Under the hood

Plugin-based, one file per concern.

Every SEO capability is isolated behind the same plugin interface, so adding a new check means adding a new plugin — not touching the pipeline.

src/ ├── index.ts # entry point — wires plugins + services ├── transport.ts # MCP stdio transport ├── orchestrator.ts # tool registry + plugin interface ├── middleware/pipeline.ts # middleware pipeline runner ├── plugins/ │ ├── management.ts # manage-sites tool │ ├── meta/ # meta tag analyzer + applier │ ├── schema/ # JSON-LD analyzer + applier │ ├── content/ # content SEO analyzer │ ├── images/ # image SEO analyzer │ ├── technical/ # technical SEO analyzer │ ├── sitemap/ # XML sitemap generator │ ├── keyword/ # keyword suggestion engine │ ├── rollback.ts # rollback + history tools │ └── integration/ # GSC + PageSpeed tools ├── services/ │ ├── wordpress/ # REST API client + site pool │ ├── storage/ # SQLite audit log │ └── external/ # GSC + PageSpeed API adapters └── types/ # shared type definitions
Optional add-on

Google Search Console, if you want it.

GSC

Two environment variables unlock analytics and sitemap submission.

Set GSC_API_KEY and GSC_SITE_URL in the server's environment config, and the search-analytics tool comes online — plus automatic sitemap submission from generate-sitemap.

Leave them unset and everything else works exactly the same; this is additive, not a requirement.

Comparison

Where this sits relative to other approaches.

Not a replacement for a full SEO suite — a narrower, auditable layer for the fixes an AI assistant can safely make on its own.

Manual, page by pageDashboard pluginwordpress-seo-mcp
Runs inside your AI assistant's session✕✕✓
Structured before/after analysis✕partial✓
Change history per post✕partial✓
One-call rollback✕✕✓
Works across many sites from one config✕✕✓
Who it's for

Built for three kinds of WordPress work.

A

Agencies managing many clients

Register each client site once, then run the same analysis-and-fix pass across all of them from one assistant session.

S

Solo site owners

Ask the assistant in plain language and let it run the checklist — no dashboard to learn first.

D

Developers scripting pipelines

Call the tools directly from Claude Code, Cursor, or opencode as part of a larger publishing or migration workflow.

FAQ

Frequently asked.

Which AI assistants does this work with?+

Anything that speaks the Model Context Protocol — the README specifically calls out opencode, Claude Code, and Cursor, but any MCP-compatible client will work.

What does WordPress need to support?+

A site with the REST API enabled, plus an Application Password for authentication — no separate plugin install required on the WordPress side.

What happens if a fix goes wrong?+

Every applied change is written to a local SQLite audit log first, so rollback-seo can undo the most recent change to a given page.

Is Google Search Console required?+

No. It's optional — set two environment variables to enable analytics and sitemap submission; everything else runs without it.

How is it licensed?+

MIT. The source, tests, and docs are in the public GitHub repository.

Quick start

Running in under five minutes.

Requires Node.js 18+ and a WordPress site with the REST API enabled.

Clone and build

$ git clone https://github.com/abnormal-yi/wordpress-seo-mcp.git $ cd wordpress-seo-mcp $ npm install $ npm run build

Register the server in opencode.jsonc

{ "mcp": { "wordpress-seo-mcp": { "type": "local", "command": ["node", "/path/to/wordpress-seo-mcp/dist/index.js"], "enabled": true, "environment": {} } } }

Restart your assistant

The server starts automatically and exposes all 13 tools. From here, just say:

// no tool syntax needed "Optimize this WordPress page for SEO"

Local development commands

$ npm run dev // watch mode $ npm test // 70+ tests $ npm run typecheck // TypeScript check $ npm run build // production build

Point your AI assistant at WordPress.

Free, MIT-licensed, and works alongside Claude Code, Cursor, and opencode.

Star it on GitHub →