mcp.conf
1 year ago
mcp.js
1 year ago
mcp.md
1 year ago
mcp.php
1 year ago
mcp_core.php
1 year ago
mcp_rest.php
1 year ago
realtime.php
1 year ago
mcp.md
160 lines
| 1 | # Using MCP with AI Engine |
| 2 | |
| 3 | ## What’s this all about? |
| 4 | |
| 5 | **Model‑Context‑Protocol (MCP)** is the open standard Claude (and, soon, ChatGPT) uses to talk to external *tool servers.* When Claude detects an MCP server it can |
| 6 | |
| 7 | 1. **list** the server’s tools (`tools/list`), |
| 8 | 2. (optionally) let you pick one, then |
| 9 | 3. **call** a tool (`tools/call`) via JSON‑RPC. |
| 10 | |
| 11 | With **AI Engine** active your WordPress site publishes **30‑plus tools** that let Claude |
| 12 | |
| 13 | - read & write posts, pages and custom post‑types, |
| 14 | - upload or generate media, |
| 15 | - manage categories, tags & any taxonomy, |
| 16 | - switch, fork and live‑edit themes, |
| 17 | - list plugins… and more. |
| 18 | |
| 19 | `mcp.js` is the Node relay that |
| 20 | |
| 21 | 1. opens a long‑lived **SSE** (`/wp-json/mcp/v1/sse`), |
| 22 | 2. tunnels Claude’s JSON‑RPC to `/wp-json/mcp/v1/messages`, |
| 23 | 3. streams replies back to Claude via stdout, |
| 24 | 4. and cleans up automatically when Claude quits. |
| 25 | |
| 26 | > **Heads‑up – advanced users only.** Everything here is still beta. Be ready for CLI work, PHP/FPM restarts and some detective work if hosting layers interfere. |
| 27 | |
| 28 | --- |
| 29 | |
| 30 | ## 1 · Install requirements |
| 31 | |
| 32 | | Requirement | Details | |
| 33 | | -------------------------- | ----------------------------------------- | |
| 34 | | **WordPress 6.x** | REST API enabled. | |
| 35 | | **AI Engine plugin** | Folder `wp-content/plugins/ai-engine`. | |
| 36 | | **Claude Desktop ≥ 0.9.2** | macOS (tested) • Windows (paths differ). | |
| 37 | | **Node ≥ 20.19.0** | `node -v` — multiple versions? use `nvm`. | |
| 38 | |
| 39 | `mcp.js` handles everything else – registering, patching Claude’s config, launching the relay and shutting it down. |
| 40 | |
| 41 | --- |
| 42 | |
| 43 | ## 2 · Bearer‑token authentication |
| 44 | |
| 45 | ### WordPress side |
| 46 | Go to **AI Engine › DevTools tab › MCP Settings** and set **“Bearer token”** (`mcp_bearer_token`). |
| 47 | Leave it blank if you want the endpoint public. |
| 48 | |
| 49 | ### Relay side |
| 50 | Supply the same token when you register the site: |
| 51 | |
| 52 | ```bash |
| 53 | labs/mcp.js add https://example.com MY_SUPER_TOKEN |
| 54 | ``` |
| 55 | |
| 56 | The token is stored in `~/.mcp/sites.json`: |
| 57 | |
| 58 | ```jsonc |
| 59 | { |
| 60 | "example.com": { |
| 61 | "url": "https://example.com", |
| 62 | "token": "MY_SUPER_TOKEN" |
| 63 | } |
| 64 | } |
| 65 | ``` |
| 66 | |
| 67 | The relay adds an `Authorization: Bearer …` header to every request. |
| 68 | |
| 69 | > **Important** When the token is wrong or missing, WordPress replies 401 / 403. |
| 70 | > The relay converts that into JSON‑RPC errors, but **Claude shows no pop‑up** – the tools pane simply stays disabled. |
| 71 | > Check Claude’s log (⌘ ⌥ C → *AI Engine*) or `~/.mcp/error.log` for details. |
| 72 | |
| 73 | --- |
| 74 | |
| 75 | ## 3 · Connect Claude to your site |
| 76 | |
| 77 | ```bash |
| 78 | # 1 · Register & write Claude’s config (token optional) |
| 79 | labs/mcp.js add https://example.com MY_SUPER_TOKEN |
| 80 | |
| 81 | # 2 · Start a verbose relay to watch the handshake |
| 82 | labs/mcp.js start example.com |
| 83 | ``` |
| 84 | |
| 85 | Claude should show a **plug icon** and a **hammer** with ≈30 tools once auth succeeds. |
| 86 | |
| 87 | --- |
| 88 | |
| 89 | ## 4 · Prompt ideas |
| 90 | |
| 91 | | Level | Example | |
| 92 | | -------------- | ----------------------------------------------------------------------------------------------------------------------------------- | |
| 93 | | *Simple* | “List my latest 5 posts.” “Create a post titled *My AI Journey* (one paragraph) and attach a media‑library image.” | |
| 94 | | *Intermediate* | “Look at the 10 newest posts, then publish a logical follow‑up. Re‑use existing categories & tags. If no image fits, generate one.” | |
| 95 | | *Advanced* | “Fork *Twenty Twenty‑One* into a grid‑layout theme called *Futurism* supporting post types Article & Project.” | |
| 96 | |
| 97 | --- |
| 98 | |
| 99 | ## 5 · Hosting caveats & **Edge‑Caching gotcha** |
| 100 | |
| 101 | Each SSE ties up **one PHP worker**. On managed hosts that means 5–8 workers by default; two Claude tabs can consume half your pool. |
| 102 | |
| 103 | ### Kinsta / Cloudflare Edge Caching |
| 104 | |
| 105 | Edge caching must be **bypassed** for `/wp-json/mcp/*` – otherwise Cloudflare buffers the stream for CLI clients and the relay stalls. |
| 106 | |
| 107 | *Dashboard › Edge Rules →* **Bypass Cache / Disable Security** for `/wp-json/mcp/*`. |
| 108 | |
| 109 | ### If the site stalls |
| 110 | |
| 111 | ```bash |
| 112 | labs/mcp.js claude none # drop Claude’s MCP entry |
| 113 | sudo systemctl restart php-fpm |
| 114 | ``` |
| 115 | |
| 116 | --- |
| 117 | |
| 118 | ## 6 · `mcp.js` CLI cheatsheet |
| 119 | |
| 120 | ```bash |
| 121 | # verbose relay (console) |
| 122 | mcp.js start example.com |
| 123 | # silent relay (Claude uses this) |
| 124 | mcp.js relay example.com |
| 125 | |
| 126 | # manage sites & tokens |
| 127 | mcp.js add mysite.com TOKEN |
| 128 | mcp.js claude mysite.com |
| 129 | mcp.js list |
| 130 | |
| 131 | # ad‑hoc RPC call |
| 132 | mcp.js post mysite.com '{"method":"tools/list"}' <session_id> |
| 133 | ``` |
| 134 | |
| 135 | Logs → `~/.mcp/` (`mcp.log`, `mcp-results.log`, `error.log`). |
| 136 | |
| 137 | --- |
| 138 | |
| 139 | ## 7 · Verbose PHP logging (optional) |
| 140 | |
| 141 | ```php |
| 142 | // wp-content/plugins/ai-engine/classes/modules/mcp.php |
| 143 | private $logging = true; |
| 144 | ``` |
| 145 | |
| 146 | Tail `wp-content/debug.log`. |
| 147 | |
| 148 | --- |
| 149 | |
| 150 | ## 8 · Shutdown sequence |
| 151 | |
| 152 | 1. Relay detects stdin close. |
| 153 | 2. Sends `{ "method":"mwai/kill" }` to `/messages`. |
| 154 | 3. Aborts the SSE fetch. |
| 155 | 4. Exits 0. |
| 156 | |
| 157 | WordPress ends its loop and frees the PHP worker. |
| 158 | |
| 159 | *(Windows: if you see lingering `node.exe`, run inside WSL 2 or add a `SIGTERM` handler.)* |
| 160 |