# MCP Setup and Troubleshooting

> 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-11-07

This is the full install guide for the Revnu MCP server. The one-command versions on the [Revnu MCP server page](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, sync your existing customers, 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, Ask for Changes, Snooze and Dismiss buttons, right in the chat. `ask_revnu`, `results_get`, `leads_list`, `lead_get` and `workflows_list` show their results in the same app. Buttons appear only for what the connection's permissions allow.

The hosted connector records tool usage, timing, errors and the request text passed
to `ask_revnu` or `review_search` in our product analytics to help us understand usage and diagnose
problems. We record at most 16 KB of query text, and recognizable credentials are masked.
Tool results and other arguments are excluded. Revnu receives the request your
assistant passes to its tools, not your whole conversation with that assistant.
These analytics apply to the hosted connector, not the local `revnu mcp` process.

`review_list` gives your assistant compact titles, statuses and available actions. The app receives the full cards separately, so your queue shows without 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?** The `setup_*` tools take you from sign-up to Revnu's first work. Every other tool, `ask_revnu` included, opens once your free trial or paid plan starts and answers `setup_pending` until then. Tell your assistant "Set me up with revnu.com".

## Full coding-agent install: skills and MCP globally

For Claude Code, Codex, Gemini CLI and Cursor, use the bundle:

```bash
curl -fsSL https://revnu.com/install | sh
```

It detects installed hosts, adds Revnu to their user-level MCP configuration,
and installs all eight growth skills globally for those same hosts. Restart
the host, then authenticate Revnu in its MCP settings. Skills recognize growth
requests without the Revnu name. MCP supplies the tools that carry out the work.
Rerun the installer to refresh skills or repair the MCP configuration.

| Host | User-level MCP configuration |
| --- | --- |
| Claude Code | `~/.claude.json`, or the file in `CLAUDE_CONFIG_DIR` |
| Codex | `~/.codex/config.toml`, or the file in `CODEX_HOME` |
| Gemini CLI | `~/.gemini/settings.json`, respecting `GEMINI_CLI_HOME` |
| Cursor | `~/.cursor/mcp.json` |

The installer preserves other servers and settings. A project-level override
can still take precedence in that project. Installation does not authenticate
your account, start a paid plan, or bypass your approval settings. It reports
incomplete setup if either part fails or no supported host is found.

The native Revnu plugin also bundles skills and MCP; choose its user/global
scope where the host offers a scope choice. Web connectors and the manual
MCP commands below provide MCP only. Adding an MCP server cannot install
skill files through the MCP protocol.

## Remote connector for Claude, ChatGPT and Cursor

The server URL is:

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

Opening that URL in a browser takes you to the setup page. The install configuration
is also available at [`/mcp.json`](https://revnu.com/mcp.json) and
[`/.well-known/mcp.json`](https://revnu.com/.well-known/mcp.json).

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, Gemini CLI and Cursor in one go, and install all eight Revnu growth skills globally, run `curl -fsSL https://revnu.com/install | sh`. It adds the Revnu server to each agent it finds. Then sign in from each agent.

### 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

Sign in again from the app. Nothing about your account changes; the new token gets the permissions you tick. Each connection gets its own token, and connecting again doesn't revoke the old one, so revoke tokens you no longer use in **Settings → Developers**.

- **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 host's redirect address isn't on Revnu's list.** For those hosts, use the token setup: 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 appears when the connection has the **Agent: Message** permission (`agent:message`). 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 keeps that work running: the new message is not sent, and the call returns the earlier request's progress with `notSent`. 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_create`, `lead_contacts_save`, `lead_update`, `lead_note_add`, `lead_note_edit`, `lead_note_delete`, `lead_take_over`, `lead_hand_back`, `lead_people_remove`, `lead_delete`, `linkedin_person`, `customer_sync`, `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 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`: a read-only view, where cards in the chat carry a link to open them in Revnu in place of action buttons, and write calls need the matching 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. The send status tells you how far a
card got: `sent_recorded` means its resolution records a send, `queued` means
approved for delivery, and `unconfirmed` means check the evidence with
`review_get`. A card marked done is not proof of delivery on its own. The search
covers review titles and prompts, so other activity can exist when nothing
matches. 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. |
| `review_answer` with `approve` | Sequence | Approves the sequence. Revnu starts contacting the leads on it within a few minutes. |
| `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. |
| `lead_hand_back` | none | Lets Revnu contact a company your team had taken over again. |
| `lead_take_over` | none | Stops Revnu contacting the company and cancels its queued emails. |
| `workflow_delete` | none | Deletes the workflow. It can't be undone. |
| `review_answer` with `approve` | LinkedIn invite or message, or gift | Approve these on the dashboard's Review page. |

LinkedIn invite and message cards and gift cards are approved on the dashboard's Review page. In the chat they carry a note pointing there in place of an Approve button. `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 reads everything those permissions cover and leaves approving, sending and starting work to you.

## 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?

It needs the **Agent: Message** permission and an account whose free trial or paid plan has started. Reconnect and tick Agent: Message, or finish setup with the `setup_*` tools first.

### Why is there no Approve button on a LinkedIn card in Claude?

LinkedIn invites and messages are approved in Review at revnu.com/dashboard/review, so their cards in the chat point there.

### 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. Each connection has its own token, so connecting the same app again adds a new token rather than replacing the old one.

### 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.
