Quick start
Create a token
In your WPMaven dashboard, open Settings, then Connect your AI. Name a token, for example "Claude on my laptop", and press Create token. Copy it right away: it is shown once.
Add the connector
In your AI client, add a remote MCP server at the endpoint above, and use your token as the credential.
Ask for it
Ask in your own words, for example "publish a post on my site about this week's opening hours". A draft is free; a publish uses one action from your plan.
Connect claude.ai
- In claude.ai, open Settings, then Connectors, and choose Add custom connector.
- Paste the endpoint,
https://api.wpmaven.ai/mcp, and use a connector token as the credential. - The WPMaven tools appear among Claude's tools. Ask Claude something like "publish a post on my site about this week's opening hours". That is it.
ChatGPT and other clients
ChatGPT: developer-mode connectors work the same way: add the same endpoint and token there. ChatGPT asks you to confirm each write by hand before it goes through.
Any other MCP client connects the same way: point it at the endpoint and send your token in the Authorization header, as Bearer wpm_mcp_.... Two things never change, whichever client you use: your AI can only touch your own sites, and a failed call never uses an action.
Tokens
- You create, see and revoke tokens in your dashboard, under Settings, Connect your AI. Each one has a name and shows when it was created and last used.
- A token starts with
wpm_mcp_and is shown once, when you create it. We keep only a fingerprint of it, so nobody can show it to you again: if you lose it, revoke it and create another. - A token works on the sites of the account that created it, and on nothing else. Your AI signs in with the token instead of your account.
- Create one token per assistant, so you can revoke each one on its own. Revoking takes effect at once, and every token ends with the account.
- Only the account owner creates tokens.
Tools
Six tools, listed by tools/list. Reading is free. Writing a draft is free. Publishing uses one action.
| Tool | What it does | Arguments | Cost |
|---|---|---|---|
get_site_info | The site's name, address, plan and description. Call it first, to see which site the token works on. | site (optional) | Free |
get_action_status | This month's actions: included, used, packs in reserve, what remains and when the allowance resets, with the month's pages or articles. | none | Free |
list_recent_posts | The latest posts on the site: id, title, status and address. | limit (1 to 50, 10 if not given), site | Free |
create_post | Writes a blog post, as a draft or published. | title, content (HTML or block markup), status (draft or publish), excerpt (optional), site | Draft: free. Publish: 1 action |
create_page | Writes a page, as a draft or published. | title, content, status (draft or publish), site | Draft: free. Publish: 1 action |
publish_post | Takes a draft post or page live. | postId (the WordPress id), site | 1 action, nothing if it is already live |
More than one business? Pass site with the site's address or its WPMaven id. Without it, an account with several sites gets the list of its sites to choose from. Only businesses that are running can be reached.
Every answer carries a sentence your AI can read back to you, in content, and the same facts as data in structuredContent: for a publish, the id, the address, the status and whether it used an action.
Actions and approvals
- Your token is your yes. What your AI publishes through it goes live at once: it does not wait under Waiting for you, the way your operators' work does. Ask it to publish only what you want live, or have it write drafts and publish them yourself.
- A publish is one action from your monthly allowance, the same as your operators' work, and a published post or page is also one of the month's pages or articles on your plan (see pricing). Drafts are free, and a failed call never uses an action.
- When the month's actions or pages are used up, the call still succeeds: its answer says nothing went live, when the allowance resets, and how to keep going (an action pack or a bigger plan, under Billing). Your AI can keep writing drafts in the meantime.
- During your $1 first week, a page or article your AI publishes is saved as a draft and goes live on day 8, when your plan starts, if you continue. The answer says so, with the date.
- If a payment did not go through, the plan's included actions pause until the card is updated under Billing. Actions from packs can still be used.
Endpoint and protocol
POST https://api.wpmaven.ai/mcp, withContent-Type: application/jsonandAuthorization: Bearer wpm_mcp_....- JSON-RPC 2.0 over MCP's Streamable HTTP transport, without state: one request or notification per POST, and every answer is a single JSON object. There are no sessions, no event streams and no batches.
- Protocol revisions:
2026-07-28(the current one),2025-11-25,2025-06-18and2025-03-26. Send theMCP-Protocol-Versionheader; a request without it is read as2025-03-26. - Clients on
2025-11-25or earlier open withinitialize, which is answered without creating a session; anMcp-Session-Idheader is ignored. A notification (a message with no id) gets202and no body. - On
2026-07-28, every request carriesio.modelcontextprotocol/protocolVersionandio.modelcontextprotocol/clientCapabilitiesinparams._meta, and theMcp-Methodheader (withMcp-Nameontools/call) matches the body. - Methods:
initialize,ping,tools/listandtools/call. AGETorDELETEon the endpoint gets405with a short hint, and a request from a web page on another site is refused.
Limits
- 60 requests a minute for each token. Past that, the answer is
429with aRetry-Afterheader in seconds. - One message per request.
list_recent_postsreturns 50 posts at most.
Errors
A problem with the request itself is a JSON-RPC error. A problem with the work, such as a site that cannot be reached, is a normal answer with isError: true and a sentence that says what happened, so your AI can tell you or try again. An allowance that is used up is not an error at all (see above).
| Code | HTTP | What it means |
|---|---|---|
-31001 | 401 | No token, or one that is unknown or revoked. The answer carries a WWW-Authenticate header. |
-31002 | 429 | More than 60 requests in a minute for this token. Wait for Retry-After. |
-32700 | 400 | The body is not valid JSON. |
-32600 | 400, 403 or 415 | Not a single JSON-RPC 2.0 message, an id that is null, a request from a web page on another site (403), or a body that is not JSON (415). |
-32601 | 404 on 2026-07-28, else 200 | A method the endpoint does not have. |
-32602 | 400 on 2026-07-28, else 200 | A tool that does not exist, or the _meta fields missing on 2026-07-28. |
-32020 | 400 | A header that does not match the body (MCP-Protocol-Version, Mcp-Method or Mcp-Name). |
-32022 | 400 | A protocol revision the endpoint does not speak. The error lists the ones it does. |
-32603 | 500 | Something failed on our side. Try again shortly. |
Examples
With your token in WPMAVEN_TOKEN. These use revision 2025-06-18, which needs no _meta fields.
List the tools
curl -s https://api.wpmaven.ai/mcp \
-H "Authorization: Bearer $WPMAVEN_TOKEN" \
-H "Content-Type: application/json" \
-H "MCP-Protocol-Version: 2025-06-18" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Write a draft post (free)
curl -s https://api.wpmaven.ai/mcp \
-H "Authorization: Bearer $WPMAVEN_TOKEN" \
-H "Content-Type: application/json" \
-H "MCP-Protocol-Version: 2025-06-18" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"create_post","arguments":{"title":"Opening hours this week","content":"<p>We open at 9 every day this week.</p>","status":"draft"}}}'
The answer looks like this:
{"jsonrpc":"2.0","id":2,"result":{"resultType":"complete",
"content":[{"type":"text","text":"Created the draft post \"Opening hours this week\" (id 42). Drafts are free; use publish_post to take it live (1 action)."}],
"structuredContent":{"id":42,"url":null,"status":"draft","metered":false},
"_meta":{"io.modelcontextprotocol/serverInfo":{"name":"wpmaven","version":"1.0.0"}}}}
The same kind of call on revision 2026-07-28
curl -s https://api.wpmaven.ai/mcp \
-H "Authorization: Bearer $WPMAVEN_TOKEN" \
-H "Content-Type: application/json" \
-H "MCP-Protocol-Version: 2026-07-28" \
-H "Mcp-Method: tools/call" \
-H "Mcp-Name: get_action_status" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_action_status","arguments":{},"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}'
What the connector does not do
- It works on your site's content: posts and pages. It does not post to your social channels; your operators do that, with your yes.
- It does not change your site's settings, plugins or theme, and it does not change your plan or your billing.
- It reaches only the sites of the account that created the token.
Building on it
Technology partners connect their own product to WPMaven through this connector, with a technical contact on our side during the integration. See the partner program, or write to us about what you are building.