Skip to main content

Connecting your assistant to Reelwire

The Reelwire MCP server speaks two transports, and which one you use depends on the client, not on what you want to do. The tools are identical either way.

TransportUse it whenAddress
Streamable HTTPThe client connects to a server over the networkhttps://mcp.reelwire.io/mcp
stdioThe client starts the process itself, on your own machinenode .../mcp/dist/index.js --stdio

Prefer HTTP unless the client only supports stdio: there is nothing to install, and it is always the current version.

There are also two ways to prove who you are. claude.ai and ChatGPT sign you in: you approve the connection on a Reelwire page and it makes its own key. Everything else takes a key you make and paste into its configuration.

Before you start: make the key​

Connecting from claude.ai or ChatGPT? Skip this: they sign you in instead of taking a key, and the connection makes its own. See claude.ai and ChatGPT below.

Everything the assistant can do comes from this key, so make one for it rather than reusing a key some other system already holds. Making keys is for the workspace owner, or a colleague given the admin power.

  1. Sign in to Reelwire and open Connections → API keys. The first card, API keys for Reelwire, is the one you want.
  2. Press Create key and name it after the assistant, not after yourself: Claude, ChatGPT, Ops assistant. When you come to revoke one, the name is how you know which.
  3. Choose when it expires: Never, a period (a day, a week, 30 or 90 days, a year) or an exact date and time in UTC. From that moment it stops working as if revoked, and its row says EXPIRED. A key for trying things out is worth giving a week.
  4. Tick the permissions you want it to have. The picker is grouped exactly like the side menu, so "everything except publishing" is a thing you can actually see and tick. See Permissions for what each area covers.
  5. Copy the secret. It is shown once. If you lose it, revoke the key and make another; there is no way to recover it, by design.
Start narrower than you think

A key with read-only permissions is a genuinely useful assistant: it can answer what went out, why something failed and what is scheduled. Widen it once you have watched it work for a week.

Claude​

Claude Desktop and Claude Code​

Both read the same kind of configuration file. Open Settings → Developer → Edit Config in Claude Desktop, or use claude mcp add in Claude Code.

{
"mcpServers": {
"reelwire": {
"type": "http",
"url": "https://mcp.reelwire.io/mcp",
"headers": {
"Authorization": "Bearer rw_your_key_here"
}
}
}
}

Restart the client. You should see Reelwire in the tools list with more than a hundred tools; Every tool lists them.

Claude Desktop can also connect the way claude.ai does, as a connector you sign in to, with no key to paste: see claude.ai below.

In Claude Code the same thing in one line:

claude mcp add --transport http reelwire https://mcp.reelwire.io/mcp \
--header "Authorization: Bearer rw_your_key_here"

claude.ai​

claude.ai connects by signing you in to Reelwire, so there is no key to make or paste.

  1. In claude.ai open Settings → Connectors and add a custom connector.
  2. Give it the address https://mcp.reelwire.io/mcp and a name, Reelwire.
  3. Press Connect. A Reelwire page, Connect an assistant, opens: sign in if you are not already, and it names the assistant and the workspace it would use.
  4. Choose what it may do. Reading everything the workspace has is always included, exactly as a read only key would. The switch below it, Also allow it to change things, decides whether it may also configure the workspace, send data in, and make and publish posts; it is on when the assistant asked to act. Press Allow reading and acting, or Allow reading with the switch off, and you are back in claude.ai, connected. Deny sends it away with nothing.

What you allowed becomes a key of its own, listed under Connections → API keys with the assistant's name and (connected) after it. Reading gives it the same permissions as the Read only set on the keys screen; reading and acting gives it Run the whole workspace. Either way it can never create keys, set the keys for your AI services, or touch money. Reelwire also emails you and the workspace's owners to say an assistant was connected.

Its row reads Renewed by the assistant where other keys show an expiry: the connection renews itself while you use it and lapses after thirty days of not being used. Revoke there ends the connection; it stops working within ten seconds. To change what a connection may do, revoke it and connect again, choosing differently.

Who may connect

Connecting makes a key, so it needs the same right as making one by hand: the workspace owner, or a colleague given the admin power. Anybody else sees a page saying so. A connection counts as one of the workspace's keys, and a workspace whose subscription was cancelled cannot make new ones.

ChatGPT​

ChatGPT connects the same way claude.ai does: by signing you in, with no key to paste. Add a custom connector (ChatGPT keeps these in its settings, and depending on your plan may ask you to switch on developer mode first), give it https://mcp.reelwire.io/mcp, choose OAuth if it asks how to authenticate, and sign in to Reelwire when the page opens. The consent page and the key it makes are exactly those described under claude.ai.

Some ChatGPT surfaces expose only search-shaped and fetch-shaped tools to the model rather than the full set. Where that is the case, reelwire_search_docs, reelwire_read_doc and the reelwire_list_* tools still work, and the ones that change things may not appear. If you need the full set, use a client that passes MCP tools through whole.

Coding agents​

The agents that live in a terminal or an editor connect the same way, and they are worth naming separately because the reason to use one here is different. An assistant in a chat window answers questions about the workspace; an agent sitting in your repository can write the script that pushes events at a custom feed, and then run it and watch what arrives, without leaving the editor.

All of them take the same key from the step above, and all of them are bound by exactly what that key may do. A client that can sign in with OAuth by itself may also connect with no key in its configuration: leave the Authorization header out, and it opens the same Reelwire consent page in your browser.

Claude Code​

One line, and the configuration above covers the desktop app at the same time:

claude mcp add --transport http reelwire https://mcp.reelwire.io/mcp   --header "Authorization: Bearer rw_your_key_here"

Codex​

Codex keeps its MCP servers in ~/.codex/config.toml, as TOML rather than JSON:

[mcp_servers.reelwire]
url = "https://mcp.reelwire.io/mcp"

[mcp_servers.reelwire.http_headers]
Authorization = "Bearer rw_your_key_here"

On a build of Codex that only starts servers itself, give it the stdio form instead:

[mcp_servers.reelwire]
command = "node"
args = ["/path/to/reelwire/mcp/dist/index.js", "--stdio"]
env = { REELWIRE_BASE_URL = "https://app.reelwire.io", REELWIRE_API_KEY = "rw_your_key_here" }

Cursor​

Cursor reads ~/.cursor/mcp.json for every project, or .cursor/mcp.json inside one. The second is the better place for a workspace key, because it travels with the repository that uses it:

{
"mcpServers": {
"reelwire": {
"url": "https://mcp.reelwire.io/mcp",
"headers": { "Authorization": "Bearer rw_your_key_here" }
}
}
}

Then Settings → MCP, where Reelwire should appear with its tools listed. Cursor asks before each tool call until you tell it not to, which is worth leaving on while the key can publish.

VS Code​

VS Code reads .vscode/mcp.json in a workspace. Note it says servers, not mcpServers:

{
"servers": {
"reelwire": {
"type": "http",
"url": "https://mcp.reelwire.io/mcp",
"headers": { "Authorization": "Bearer rw_your_key_here" }
}
}
}

Or add it from the command line:

code --add-mcp '{"name":"reelwire","type":"http","url":"https://mcp.reelwire.io/mcp","headers":{"Authorization":"Bearer rw_your_key_here"}}'

The tools appear to the agent mode of the editor's chat, not to plain completions.

A key in a repository is a key in your history

.cursor/mcp.json and .vscode/mcp.json sit inside the project, so a key pasted into either is a key somebody can commit. Put the file in .gitignore, or keep the server in the per-user configuration and leave the project file out of it. Revoking is one press under Connections → API keys if it does get out, and a key with an expiry date limits the damage even if nobody notices.

Any other client​

Anything that speaks MCP can connect. The two shapes are:

Streamable HTTP, for a server somebody is running:

{
"mcpServers": {
"reelwire": {
"type": "http",
"url": "https://mcp.reelwire.io/mcp",
"headers": { "Authorization": "Bearer rw_your_key_here" }
}
}
}

stdio, for a client that starts the process:

{
"mcpServers": {
"reelwire": {
"command": "node",
"args": ["/path/to/reelwire/mcp/dist/index.js", "--stdio"],
"env": {
"REELWIRE_BASE_URL": "https://app.reelwire.io",
"REELWIRE_API_KEY": "rw_your_key_here"
}
}
}
}

Clients known to work with one or both, besides the ones above: Windsurf, Zed, Cline, Continue, LibreChat, and anything built on the official MCP SDKs.

Running it yourself​

The server is a container. If you would rather it sat inside your own network, next to your own systems:

docker run -d \
-p 4500:4500 \
-e REELWIRE_BASE_URL=https://app.reelwire.io \
reelwire/mcp

It holds no key of its own. Over HTTP every client sends its own key in the Authorization header, exactly as above, and the server acts as that key for that one request, so one server serves every person who connects to it, each strictly as themselves. Signing in with OAuth is offered only by Reelwire's own server, so clients of yours send a key.

VariableWhat it is
REELWIRE_BASE_URLWhere the Reelwire API lives
REELWIRE_API_KEYFor stdio only: the key of the one person whose assistant starts the process. Leave it out of a container, where it is never read
REELWIRE_DOCS_DIRWhere the documentation pages are. Without them the tools still work and reelwire_search_docs finds nothing
REELWIRE_DOWNLOAD_DIRWhere tools that produce a file write it. Defaults to a temporary directory
MCP_ALLOWED_ORIGINSBrowser origins allowed to call it, comma separated. Assistants send none and are unaffected; empty accepts no browser
MCP_RATE_LIMIT_PER_MINUTERequests per minute for one key. Defaults to 600
PORTWhat it listens on. Defaults to 4500

GET /health says whether it is up, the version and commit it runs, and how many documentation pages it is carrying.

Checking it worked​

Ask the assistant:

Who am I on Reelwire, and what can you do?

It should call reelwire_whoami and answer with the workspace name and the permissions the key holds. That one question tells you three things at once: the connection works, the key is valid, and the permissions are what you meant to grant.

Then:

What is scheduled to go out this week?

which reaches reelwire_calendar. And if you ever need to tell us which Reelwire you are talking to, ask "which version of Reelwire is this?": reelwire_version answers with the version and commit of both the MCP server and the API behind it.

When it does not work​

The assistant does not see any Reelwire tools. The client did not connect. Restart it fully, not just the conversation. Check the URL ends in /mcp.

Everything is refused with "this key may not..." The key is valid and too narrow. The refusal names the permission; go back to Connections → API keys, press Permissions on the key and tick it. For a connection made by signing in, revoke it and connect again, allowing it to act.

"The key was not accepted" on every call. The key is wrong, revoked, expired, or was pasted with a trailing space. Keys start rw_. Make a fresh one rather than hunting for the typo. A connection made by signing in reconnects by itself; if it does not, connect again.

"That is a dashboard session, not an API key." Something handed the assistant the token your browser signs in with, which starts rws_. Make an API key instead.

"Reelwire no longer knows this assistant." The connection registered itself long ago and that registration is gone, because it was never used or sat unused for months. Remove Reelwire from the assistant's connectors, add it again, and connect once more.

"More than 600 requests this minute" or "Too many failed sign-ins". One key may make 600 requests a minute, and an address whose keys have failed 30 times in a minute is refused for the rest of it. Wait a minute; if it keeps happening, the assistant is looping, and telling it to stop and explain is the fix.

Tools appear but time out. The client cannot reach the server. If you are running it yourself, check the container is up and the port is published.

A render never finishes. It takes about a minute, longer when the machines are busy. In Claude and ChatGPT the player under the answer follows it by itself. Elsewhere the assistant should leave ten to fifteen seconds between polls of reelwire_export_status; some will poll harder than that and give up. Tell it to wait.