Step 3 · Connect the MCP
With the MCP connected, your agent manages content with tools: "publish the Open House", "show me the drafts", "upload this photo". No curl and no copying responses.
Every client uses the same address:
https://pluma.so/mcp
It's a remote MCP server over Streamable HTTP. Always include the /mcp path.
Two ways to sign in
| Way | When | What you do |
|---|---|---|
| Sign in with Pluma (OAuth) | Chat apps and anything on your computer with a browser | Paste the URL. A Pluma screen opens: you pick the site and approve. |
Agent token (pluma_agt_…) |
Servers, CI, containers, anything with no browser | Create an agent in Agents (step 2) and send its token in the Authorization header. |
With Sign in with Pluma, the approval screen always works the same:
- You sign in to Pluma (if you weren't signed in).
- You see which client is asking for access and choose the site.
- You approve. You go back to your app, connected.
Anyone on the site can approve. The agent can do the same as the person who approved, based on their role: if you're an editor, it creates and publishes content but doesn't touch the model. If your access is limited to some types or entries, so is the agent's. See What the agent can do.
Each client below has its own section. Pick yours.
ChatGPT
This is how your clients edit their site by asking ChatGPT. It uses ChatGPT's developer mode, available on the web for Plus, Pro, Business, Enterprise and Education.
- In ChatGPT, open Settings → Security and login and turn on Developer mode.
- Go to Plugins (chatgpt.com/plugins) and press +.
- Give it a name ("Pluma") and a short description ("Content for our website").
- Choose Public endpoint and paste
https://pluma.so/mcp. - For authentication, choose OAuth. ChatGPT registers itself with Pluma; you don't need a client ID.
- Approve on the Pluma screen. The connector shows up under Drafts, ready to use in a chat.
Then ask: "Using Pluma, what pages does my site have?".
- Business and Enterprise: a workspace admin has to allow developer mode first (Workspace settings → Permissions & roles). Only admins and owners can publish the connector for the whole workspace.
- Confirmations: ChatGPT asks you to confirm every tool that changes something (create, publish, delete). That's expected. Reading doesn't ask.
- No token field: ChatGPT has no place to paste a header, so use Sign in with Pluma, not an agent token.
Claude (claude.ai, desktop and mobile)
The connection runs from Anthropic's servers, so the same connector works on the web, in the desktop app and on your phone.
Free, Pro and Max:
- Open Settings → Connectors and press Add custom connector.
- Name it "Pluma" and paste
https://pluma.so/mcp. - Press Add, then Connect, and approve on the Pluma screen.
Team and Enterprise:
- An owner opens Organization settings → Connectors → Add → Custom → Web and pastes the URL.
- Each person then goes to Settings → Connectors, finds Pluma and presses Connect.
Before using it in a chat, turn it on from the + menu (Connectors) in the message box.
- Free plan: one custom connector.
- Leave the OAuth fields empty. Claude registers itself with Pluma.
- To change how it signs in, remove the connector and add it again. Claude doesn't let you edit that later.
Claude Code
claude mcp add --transport http --scope user pluma https://pluma.so/mcp
Then, inside Claude Code, run /mcp, choose pluma and Authenticate. Your browser opens on the Pluma screen.
--scope user makes it available in every project. Use --scope project to save it in the repo's .mcp.json and share it with your team.
With a token (no browser):
claude mcp add --transport http --scope user pluma https://pluma.so/mcp \
--header "Authorization: Bearer $PLUMA_TOKEN"
Shared in the repo (.mcp.json, each person sets PLUMA_TOKEN on their machine):
{
"mcpServers": {
"pluma": {
"type": "http",
"url": "https://pluma.so/mcp",
"headers": { "Authorization": "Bearer ${PLUMA_TOKEN}" }
}
}
}
Cursor
Add Pluma to ~/.cursor/mcp.json (every project) or .cursor/mcp.json (this project):
{
"mcpServers": {
"pluma": { "url": "https://pluma.so/mcp" }
}
}
Open Settings → MCP. Pluma shows Needs login: press it and approve on the Pluma screen.
With a token:
{
"mcpServers": {
"pluma": {
"url": "https://pluma.so/mcp",
"headers": { "Authorization": "Bearer ${env:PLUMA_TOKEN}" }
}
}
}
Cursor writes environment variables as ${env:NAME}, not ${NAME}.
VS Code (GitHub Copilot)
Run MCP: Add Server from the command palette, choose HTTP and paste the URL. Or write .vscode/mcp.json yourself:
{
"servers": {
"pluma": { "type": "http", "url": "https://pluma.so/mcp" }
}
}
The first time Copilot uses it, VS Code asks you to sign in and opens the Pluma screen. Use it from Copilot Chat in Agent mode.
With a token, VS Code asks for it once and stores it safely:
{
"inputs": [
{ "type": "promptString", "id": "pluma-token", "description": "Pluma agent token", "password": true }
],
"servers": {
"pluma": {
"type": "http",
"url": "https://pluma.so/mcp",
"headers": { "Authorization": "Bearer ${input:pluma-token}" }
}
}
}
- Copilot Business and Enterprise: the MCP servers in Copilot policy is off by default. An admin has to turn it on.
Windsurf
Open Settings → Cascade → MCP servers → View raw config and add Pluma to mcp_config.json:
{
"mcpServers": {
"pluma": {
"serverUrl": "https://pluma.so/mcp",
"headers": { "Authorization": "Bearer ${env:PLUMA_TOKEN}" }
}
}
}
Windsurf uses serverUrl, not url. Leave out headers to sign in with Pluma instead. On Team and Enterprise, an admin may have to add Pluma to the allowed servers.
Gemini CLI
gemini mcp add --transport http --scope user pluma https://pluma.so/mcp
Then, inside Gemini CLI, run /mcp auth pluma and approve on the Pluma screen.
Or edit ~/.gemini/settings.json yourself:
{
"mcpServers": {
"pluma": {
"httpUrl": "https://pluma.so/mcp",
"headers": { "Authorization": "Bearer pluma_agt_…" }
}
}
}
Gemini CLI uses httpUrl for this kind of server. url means an older transport and won't work. Leave out headers to sign in with Pluma. Signing in needs a browser on the same machine, so over SSH or in a container use the token.
Codex (CLI, IDE extension and ChatGPT desktop app)
All three read ~/.codex/config.toml:
[mcp_servers.pluma]
url = "https://pluma.so/mcp"
Then sign in:
codex mcp login pluma
With a token, name the environment variable that holds it:
[mcp_servers.pluma]
url = "https://pluma.so/mcp"
bearer_token_env_var = "PLUMA_TOKEN"
Zed
In Zed's settings.json:
{
"context_servers": {
"pluma": { "url": "https://pluma.so/mcp" }
}
}
Zed opens the Pluma screen the first time. To use a token instead, add "headers": { "Authorization": "Bearer pluma_agt_…" }.
Any other client
If your client supports remote MCP servers, it works with Pluma:
- URL:
https://pluma.so/mcp, transport Streamable HTTP (sometimes called "HTTP"). - Sign in with Pluma: choose OAuth and leave client ID and secret empty. Pluma supports dynamic registration, so the client registers itself. The technical details are in MCP OAuth.
- Token: send the header
Authorization: Bearer pluma_agt_…. The wordBearergoes in the value.
If the client only runs local (stdio) servers, bridge it with mcp-remote:
{
"mcpServers": {
"pluma": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://pluma.so/mcp", "--header", "Authorization:Bearer ${PLUMA_TOKEN}"],
"env": { "PLUMA_TOKEN": "pluma_agt_…" }
}
}
}
Check that it works
Ask your agent: "Using Pluma, describe my site". It should answer with your content types.
To see exactly what it can do, ask: "Using Pluma, what can you do on my site?". The list of tools depends on the role of whoever connected it: a viewer's agent sees only reading tools.
Troubleshooting
| What you see | Why | What to do |
|---|---|---|
| The client says it can't connect | The URL is missing /mcp, or the transport is SSE |
Use https://pluma.so/mcp with Streamable HTTP. |
| "The return address isn't the one the client registered" | The client changed its callback after registering | Remove the server from the client and add it again. |
| "This server only authorizes …/mcp" | The client asked for access to a different server | Check the URL you pasted. |
401 with "The key is missing" |
No token was sent | Sign in again, or check the Authorization header. |
401 with "The key doesn't exist or was revoked" |
Someone revoked the agent in Agents, or the token is incomplete | Connect again, or create a new agent. |
| The agent can't publish or change the model | The person who approved doesn't have that role, or has limited access | Ask an owner to connect it, or to change your role in Settings → Team. |
| You don't see your site on the approval screen | You're not a member of that site | Ask an owner to invite you. |
Revoke
Each connected client shows up in Agents with its name (for example "Claude Code" or "ChatGPT"). Revoking it cuts access right away. Connecting again creates a new agent.
What you see in the dashboard
Step 3 checks itself off when the first authenticated MCP call from your site arrives. In the activity, what your agent does over MCP shows up with its name and the "agent" tag, same as over the API.
The available tools and what each one does are in MCP tools.