Direct HTTP access to all mumcp endpoints. Use these for custom integrations beyond MCP.
All requests require the X-API-Key header:
curl -H "X-API-Key: spai_your_key_here" \ https://yoursite.com/wp-json/site-pilot-ai/v1/site-info
API keys are generated in WordPress Admin → mumcp → Settings.
Keys support scoped permissions: read, write, admin
https://yoursite.com/wp-json/site-pilot-ai/v1/All endpoints below are relative to this base.
POST /mcp — JSON-RPC 2.0 endpoint for MCP clients
This is the single endpoint MCP clients use. It accepts tools/list and tools/call methods.
POST /wp-json/site-pilot-ai/v1/mcp
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "wp_list_posts",
"arguments": {"per_page": 5}
},
"id": 1
}| Method | Endpoint | Description |
|---|---|---|
| GET | /posts | List posts (per_page, page, status, search, category, tag) |
| GET | /posts/{id} | Get single post |
| POST | /posts | Create post (title, content, status, categories, tags) |
| PUT | /posts/{id} | Update post |
| DELETE | /posts/{id} | Delete post (force) |
| POST | /posts/{id}/featured-image | Set featured image (media_id) |
| Method | Endpoint | Description |
|---|---|---|
| GET | /pages | List pages |
| GET | /pages/{id} | Get single page |
| GET | /pages/by-slug/{slug} | Find page by slug |
| POST | /pages | Create page (title, content, status, parent, slug) |
| PUT | /pages/{id} | Update page |
| DELETE | /pages/{id} | Delete page (force) |
| POST | /pages/{id}/clone | Clone page with Elementor data (title, status) |
| POST | /pages/{id}/template | Set page template (template) |
| GET | /templates/page | List available page templates |
| Method | Endpoint | Description |
|---|---|---|
| GET | /elementor/{id} | Get Elementor data as JSON |
| POST | /elementor/{id} | Set Elementor data (elementor_data as JSON array) |
| POST | /elementor/{id}/regenerate-css | Rebuild Elementor CSS |
| POST | /elementor/{id}/find-replace | Find and replace text in Elementor data (search, replace) |
| Method | Endpoint | Description |
|---|---|---|
| GET | /menus | List menus |
| POST | /menus | Create menu (name) |
| DELETE | /menus/{id} | Delete menu |
| GET | /menus/{id}/items | List menu items |
| POST | /menus/{id}/items | Add menu item (title, type, url/object_id, parent, position) |
| PUT | /menu-items/{id} | Update menu item |
| DELETE | /menu-items/{id} | Delete menu item |
| GET | /menu-locations | List theme locations |
| POST | /menus/assign-location | Assign menu to location (menu_id, location) |
| Method | Endpoint | Description |
|---|---|---|
| GET | /site-info | Site information and capabilities |
| POST | /options | Update site options (key-value pairs) |
| GET | /media | List media |
| POST | /media | Upload media |
| POST | /media/from-url | Upload from URL (url, title) |
| GET | /categories | List categories |
| GET | /tags | List tags |
| GET | /drafts | List drafts |
| DELETE | /drafts/delete-all | Delete all drafts |
| POST | /batch | Batch operations |
All responses return JSON with a consistent structure:
{
"success": true,
"data": { ... }
}Errors return:
{
"code": "error_code",
"message": "Human-readable message",
"data": {"status": 400}
}Rate limit headers are included in all responses.
A 429 response includes a retry_after field indicating seconds to wait.
Continue exploring the documentation