# MCP Server Setup

> Connect Claude Code, Codex, Gemini CLI, Claude, ChatGPT, Cursor, VS Code or any MCP host to Revnu, as a remote connector or a local server. The permissions each tool needs, which tools send or publish, and how to reconnect a broken connector.

Canonical: https://revnu.com/docs/mcp
Last updated: 2026-10-20

This is the full install guide for the Revnu MCP server. The one-command versions on [revnu.com/mcp](https://revnu.com/mcp), the [agent pages](https://revnu.com/agents) and [revnu.com/setup](https://revnu.com/setup) use the same commands and point back here.

The Revnu MCP server connects Claude, ChatGPT, Cursor, Claude Code, Codex, Gemini CLI, GitHub Copilot and other MCP hosts to your Revnu account. Its tools map one-to-one onto the API's routes, so your assistant can hand Revnu work, read and resolve the review queue, read results and leads, manage the block list and edit workflows. Connect it two ways:

- **Remote**, at `https://revnu.com/api/mcp`. Nothing to install. You sign in to Revnu once and pick what the app may do.
- **Local**, as `revnu mcp` from the `@revnu/cli` package, with an API token in its environment.

Both serve the same tools. On hosts that support [MCP Apps](https://modelcontextprotocol.io/extensions/apps/overview), `review_list` and `review_get` open your review queue as cards with Approve, Send, Request Changes, Snooze and Dismiss buttons, right in the chat.

`review_list` gives your assistant compact titles, statuses and available actions. The app receives the full cards separately, so showing your queue does not require copying every draft into chat. Use `review_get` to inspect a particular draft. One successful list call is enough to display the queue.

> **Note:** **New account?** Until your free trial or paid plan starts, only the `setup_*` tools work. Every other tool, `ask_revnu` included, answers `setup_pending`. Finish setup first: tell your assistant "Set me up with revnu.com".

## Remote connector for Claude, ChatGPT and Cursor

The server URL is:

```text
https://revnu.com/api/mcp
```

It speaks Streamable HTTP and signs you in with OAuth. The first time you connect, Revnu asks you to sign in and choose which permissions the app gets. With no Revnu account yet, the same page creates one, and the app sets it up with you through the `setup_*` tools: tell it "Set me up with revnu.com" ([revnu.com/setup](https://revnu.com/setup)). Connecting creates an API token labelled with the app's name, which you can revoke any time in **Settings → Developers**.

### Claude Code

```bash
claude mcp add --transport http --scope user revnu https://revnu.com/api/mcp
```

Then run `/mcp` inside Claude Code, pick **revnu** and choose **Authenticate**. A browser opens to sign in and choose permissions. Leave **Agent: Message** ticked if you want Claude Code to hand Revnu work with `ask_revnu`. If revnu isn't listed, restart Claude Code first.

`--scope user` makes Revnu available in every project. Without it, Claude Code adds the server to the current directory only, and it seems to vanish when you open another project.

To connect Claude Code, Codex and Gemini CLI in one go, and add the Revnu skill that tells your coding agent when Revnu can help, run `curl -fsSL revnu.com/install | sh`. It adds the Revnu server to each agent it finds. You still sign in from each agent afterwards.

### Codex

```bash
codex mcp add revnu --url https://revnu.com/api/mcp
codex mcp login revnu
```

The second command opens a browser to sign in to Revnu and choose permissions.

### Gemini CLI

```bash
gemini mcp add --transport http --scope user revnu https://revnu.com/api/mcp
```

Then run `/mcp auth revnu` inside Gemini CLI to sign in.

### Claude and Claude Desktop

**Settings → Connectors → Add custom connector**, paste the URL, then **Connect**.

### ChatGPT

Open **Settings → Apps & Connectors → Advanced**, turn on Developer mode, then create a connector named Revnu with the URL above and OAuth as the authentication.

### VS Code

**[Install in VS Code](https://vscode.dev/redirect/mcp/install?name=revnu&config=%7B%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Frevnu.com%2Fapi%2Fmcp%22%7D)** opens VS Code's install prompt with the server filled in. Or add it by hand in `.vscode/mcp.json`:

```json
{
  "servers": {
    "revnu": { "type": "http", "url": "https://revnu.com/api/mcp" }
  }
}
```

### Cursor and other hosts

**[Install in Cursor](https://cursor.com/install-mcp?name=revnu&config=eyJ1cmwiOiJodHRwczovL3Jldm51LmNvbS9hcGkvbWNwIn0%3D)** opens Cursor's install dialog with the server filled in. In any other host, add it to the host's MCP config:

```json
{
  "mcpServers": {
    "revnu": { "url": "https://revnu.com/api/mcp" }
  }
}
```

A host that can't run OAuth can send a token instead: add the header `Authorization: Bearer rvp_...` with a token from **Settings → Developers**.

## Reconnect a broken connector

**On a first connection, "needs authentication" is normal.** Every host shows it until you sign in. Sign in from the app (in Claude Code, `/mcp` then **Authenticate**) and it goes away.

After that, a connector that says it needs authentication, or answers `invalid_token`, has lost its token. That happens when:

- The token was revoked in **Settings → Developers**
- The app went 90 days without using it
- The app was connected again, which replaces the old token

Sign in again from the app. Nothing about your account changes; the new token gets the permissions you tick.

- **Claude Code:** run `/mcp`, pick **revnu** and choose **Authenticate**.
- **Cursor:** open **Cursor Settings** and find **revnu** in the MCP server list. Click its login button, or turn it off and on again, and sign in in the browser that opens. If nothing happens, remove the server and add it again with the JSON in [Cursor and other hosts](#cursor-and-other-hosts).
- **Claude, ChatGPT and VS Code:** reconnect the Revnu connector, or remove it and add it again.

If sign-in says the account already holds 20 API tokens, revoke one in **Settings → Developers**, then connect again.

### If you get an error after approving in the browser

- **The sign-in code expired or was used.** The code your app collects after you approve works once and lasts 10 minutes. Start the connection again from the app, not by refreshing the browser tab.
- **The app's redirect address is refused.** Some hosts register a return address Revnu won't accept. Use the token setup instead: mint a token in **Settings → Developers** and send it as `Authorization: Bearer rvp_...` (see [Cursor and other hosts](#cursor-and-other-hosts)), or run the [local server](#local-server).

### If sign-in keeps looping

If the browser returns you to the sign-in page, or connects the wrong Revnu account:

1. Open revnu.com in the same browser and sign in there first, with the email of the account you want to connect.
2. If you are signed in as someone else, sign out and sign in with the right email.
3. Start the connection again from your app.

One Revnu login holds one business, so connecting while signed in to another business's account connects that account. The sign-in page shows which website the account is for. To connect a different business, press **Use Another Account** there.

## Local server

### Claude Desktop and Cursor

Add to `claude_desktop_config.json` or Cursor's MCP settings:

```json
{
  "mcpServers": {
    "revnu": {
      "command": "npx",
      "args": ["-y", "@revnu/cli", "mcp"],
      "env": { "REVNU_API_TOKEN": "rvp_..." }
    }
  }
}
```

### Claude Code

```bash
claude mcp add --scope user revnu -e REVNU_API_TOKEN=rvp_... -- npx -y @revnu/cli mcp
```

## Docs MCP (no login)

A second server, at `https://revnu.com/api/docs-mcp`, serves these docs to coding agents. It needs no sign-in or token and has no access to any Revnu account. It has three read-only tools: `search_docs` finds pages by topic or API route, `read_page` returns a page as markdown, and `list_pages` lists every page by section.

```json
{
  "mcpServers": {
    "revnu-docs": { "type": "http", "url": "https://revnu.com/api/docs-mcp" }
  }
}
```

In Claude Code:

```bash
claude mcp add --transport http --scope user revnu-docs https://revnu.com/api/docs-mcp
```

The same pages are plain markdown at `https://revnu.com/docs/<page>.md`, indexed at [revnu.com/docs/llms.txt](https://revnu.com/docs/llms.txt).

## Tools

Start with **`ask_revnu`**. It needs the **Agent: Message** permission (`agent:message`); without it the tool doesn't appear. It asks Revnu to do work (find and research leads, draft outreach, write content, change ads, report results) and waits up to 60 seconds by default, 200 at most. Hosts that support progress updates show that Revnu is still working. If the wait ends first, it returns `queued` or `running` with a `requestId`: check it with `agent_message_status`. Long research can continue as a background task after Revnu replies; the result lists it in `backgroundTasks` and `done` stays `false` until Revnu has reported the finished list. `agent_message_status` with `waitSeconds` waits for that.

`ask_revnu` protects work in progress. While an earlier request from the same connection is unfinished, it does not send a new message, because a new message would stop the running work. It returns the earlier request's progress with `notSent` instead. Pass `queue: true` to hand over another job that starts once the current one is done, or `interrupt: true` to stop the running work and start the new one. Pass a `clientRequestId` so a retried call never sends twice. Anything Revnu wants approved lands in your review queue.

The rest read or change your account directly: `whoami`, `review_list`, `review_search`, `review_get`, `review_answer`, `review_send`, `review_request_changes`, `review_snooze`, `review_dismiss`, `agent_message_status`, `agent_thread`, `agent_status`, `results_get`, `workflows_list`, `workflow_runs`, `workflow_create`, `workflow_update`, `workflow_pause`, `workflow_resume`, `workflow_run`, `workflow_delete`, `leads_list`, `lead_get`, `lead_update`, `linkedin_person`, `blocklist_list`, `blocklist_add`, `blocklist_remove`.

While an account is still in setup it also sees `setup_status`, `setup_website`, `setup_confirm`, `setup_checkout` and `setup_finish`, and the other tools answer `setup_pending` until the trial starts. Your assistant only sees the tools its token's scopes allow. Connect a set-up account with only Review: Read ticked and it sees `whoami`, `review_list`, `review_search` and `review_get`, nothing else. It can't approve anything: if a review card in the chat still shows a button, pressing it fails, because Revnu refuses write calls from a token without the permission.

To check whether work for particular people has already been handled, call
`review_search` with their names in `queries`. It searches open and historical
review titles and prompts in one call, returning compact statuses and review
links. `hasMore` flags omitted matches. A card marked done does not prove a
message was delivered. `sent_recorded` means its resolution records a send;
`queued` means approved for delivery; `unconfirmed` needs further evidence.
No match only means no matching review title or prompt, not no activity.
Use `review_get` when you need the full draft or evidence.

## Which tools send, publish or spend

Writes through an assistant are real writes. These are the ones with effects outside Revnu:

| Tool | Card | What happens |
|---|---|---|
| `review_send` | Email draft or reply | Sends the email. |
| `review_answer` with `approve` | Blog draft | Publishes the post. |
| `review_answer` with `approve` | Blog edit | Applies the edit to the live post. |
| `review_answer` with `approve` | Reddit comment | Posts the comment. |
| `review_answer` with `approve` | Ad launch | Turns the campaigns on, so spend starts. |
| `review_answer` with `approve` | Ad budget | Raises the monthly ad budget limit. |
| `review_answer` with `approve` | Outbound setup | Approves the sending domains and inboxes Revnu proposed. |
| `ask_revnu` | none | Revnu does the work you ask for, under your approval settings. |
| `workflow_run` | none | Starts a workflow run now. |
| `blocklist_remove` | none | Lets Revnu contact that company or person again. |
| `workflow_delete` | none | Deletes the workflow. It can't be undone. |
| `review_answer` with `approve` | LinkedIn invite or message, or gift | Refused. Approve these on the Review page in the dashboard. |

LinkedIn invite and message cards and gift cards can't be approved through the API or MCP. Gift cards in the chat show no Approve button. LinkedIn cards may still show one, but pressing it fails: open Review in the dashboard instead. `review_dismiss`, `review_snooze` and `review_request_changes` never send anything.

To give an assistant a look but no say, connect with only the read permissions ticked: Review: Read, Results: Read and Leads: Read. It can't approve, send or start work: Revnu refuses its write calls.

## Frequently asked questions

### Does Revnu have an MCP server?

Yes, at `https://revnu.com/api/mcp`. It speaks Streamable HTTP with OAuth and works in Claude, ChatGPT, Cursor, VS Code, Claude Code and other MCP hosts. A local version runs with `npx -y @revnu/cli mcp`.

### Is there an MCP server for the Revnu docs?

Yes, at `https://revnu.com/api/docs-mcp`. It needs no sign-in and only reads the public docs, so a coding agent can search and read them while you build on the API.

### Why does my connector say needs authentication the first time?

Every new connection starts that way, before you sign in. Sign in from the app, for example `/mcp` then **Authenticate** in Claude Code, and it connects.

### Why can't my assistant use ask_revnu?

Either the connection didn't get the **Agent: Message** permission, or the account hasn't started its trial yet. Reconnect and tick Agent: Message, or finish setup with the `setup_*` tools first.

### Why does Approve fail on a LinkedIn card in Claude?

LinkedIn invites and messages are approved in the dashboard. The card in the chat may show an Approve button anyway; open Review at revnu.com/dashboard/review to approve it.

### What is the Claude Code command for Revnu?

`claude mcp add --transport http --scope user revnu https://revnu.com/api/mcp`, then `/mcp` inside Claude Code to sign in.

### Does the assistant see my whole account?

Only what the token's scopes allow. A token with `review:read` alone lets it list and read cards and nothing else. With the remote connector, the scopes are the boxes you tick when you connect. All seven scopes, and which of them can cause a send, publish or spend, are listed in [Authentication and Scopes](https://revnu.com/docs/authentication.md#scopes).

### How do I disconnect an app?

Revoke its token in **Settings → Developers**; the app's next call fails. Connecting the same app again replaces its old token.

### Can I sign up for Revnu through MCP?

Yes. Connecting creates the account if you don't have one, and the `setup_*` tools take your assistant through the website, the research review and checkout. You enter any card details on Stripe's page yourself.

### Can I run the local server against a staging API?

Yes. Add `REVNU_API_BASE` to the `env` block.
