WordPress MCP · safety architecture
Restore exists. Only while the resource is unchanged.
Updates use expectedVersion. Writes wait for workspace-role permission and a stable requestId. restoreChange reverses a supported mutation when getChange says the resource is unchanged.
Last verified · September 17, 2026 · NotFair product team
The NotFair WordPress write contract
Read version, mutate once, restore if still untouched
NotFair advertises 86 WordPress tools on the installed plugin. HTML is sanitized and does not execute scripts.
- 01
Select a siteId
listSites returns explicit siteIds. Every website operation requires one.
- 02
Read the current version
getResource or readFile first. Updates pass expectedVersion.
- 03
Stage the write
publishHtml, media, posts, pages, and settings wait for a workspace role that can write.
- 04
Sanitize HTML
publishHtml rejects executable scripts. Documents are standalone, not theme-wrapped.
- 05
Record a change receipt
getChange reports restore eligibility.
- 06
Restore if unchanged
restoreChange reverses a supported mutation only if the resource has not changed since. Hooks are not rolled back.
Evidence table
What each control prevents
| Control | What it protects against | What the operator sees |
|---|---|---|
| siteId routing | Editing the wrong website | Explicit siteId on every call |
| expectedVersion | Lost updates from stale reads | A version conflict instead of a silent overwrite |
| HTML sanitization | Script injection via publishHtml | Rejected executable scripts |
| restoreChange window | Claiming unlimited undo | Eligible only while the resource is unchanged |
Limits and honest boundaries
- restoreChange does not undo external hook side effects.
- HTML is sanitized standalone HTML, not a theme-wrapped WordPress page.
- Pending websites do not count as operable for onboarding.
- HTML is sanitized and does not execute scripts. restoreChange does not undo external hook side effects. MCP and SEO tokens can be removed independently.
Frequently asked questions
Writes wait for workspace-role permission and a stable requestId. publishHtml is sanitized; scripts are rejected.
When getChange says the resource is unchanged since the original mutation. External hook side effects are not undone.
No. MCP and SEO connections can be removed independently. Tokens are not rotated from the UI.
No. restoreChange is a WordPress plugin recovery tool, not Google Ads impact review.