# Connect over MCP

> Add the rivomi endpoint to an MCP client, authenticate, and confirm the connection with one free call.

Source: https://rivomi.com/docs/connect



|               |                                                                                       |
| ------------- | ------------------------------------------------------------------------------------- |
| **Endpoint**  | `https://rivomi.com/api/mcp`                                                          |
| **Transport** | Streamable HTTP, stateless. No stdio, no SSE stream.                                  |
| **Auth**      | OAuth 2.1 (hosted connectors) or an API key sent as `Authorization: Bearer pk_live_…` |
| **Tools**     | Thirty, all named `rivomi_<verb>_<resource>`                                          |

## Pick the credential [#pick-the-credential]

The choice turns on one question: can the client hold a header?

| Client                              | Credential                                                               | Why                                                                                         |
| ----------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
| claude.ai, Claude Desktop, ChatGPT  | **OAuth**. Add the URL, no key.                                          | Hosted connectors cannot store a custom header, and signing in lets you pick the workspace. |
| Claude Code, Cursor, VS Code, Codex | Either. OAuth by default; an **API key** for a fixed, scoped credential. | A key is tied to exactly the scopes you ticked, which suits unattended use.                 |
| Scripts, CRMs, cron jobs            | **API key**                                                              | Nothing to sign in with.                                                                    |

Both are described in [API keys and OAuth](/connect/authentication), including the three scopes
(`read`, `write`, `send`) and what each unlocks.

## Connect [#connect]

Use the page for your client:
[Claude](/connect/clients/claude) · [Claude Code](/connect/clients/claude-code) ·
[Cursor](/connect/clients/cursor) · [ChatGPT](/connect/clients/chatgpt) ·
[VS Code](/connect/clients/vscode) · [Codex](/connect/clients/codex) ·
[Other clients](/connect/clients/other)

## Verify [#verify]

Ask the agent:

> Use rivomi to show my workspace, my credit balance, and whether sending is enabled.

That calls `rivomi_get_workspace`, which is free and changes nothing. The connection is verified
when the reply names your real workspace and plan. Check three fields before planning any work:

| Field                                          | Meaning                                                                                         |
| ---------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `plan.credits_remaining`, `plan.spend_blocked` | What `$` tools can still spend this month                                                       |
| `senders[]`                                    | LinkedIn accounts outreach can go out from, with `invites_left_today` and `messages_left_today` |
| `sending_consent.accepted`                     | Whether anything can be sent at all. Only a human in the browser can set it.                    |

## Connection failures [#connection-failures]

| Symptom                              | Cause                                                              | Fix                                                       |
| ------------------------------------ | ------------------------------------------------------------------ | --------------------------------------------------------- |
| `401` on every call                  | Token expired, key revoked, or the app was disconnected            | Reconnect and sign in again, or create a new key          |
| `401` with `grant_revoked`           | Someone disconnected the app under Settings › API › Connected apps | Reconnect; the grant is gone for good                     |
| A tool result naming a missing scope | The credential lacks `write` or `send`                             | Create a key with that scope, or reconnect and approve it |
| Tools missing after sign-in          | The client cached the tool list before auth                        | Start a new conversation or reload the client             |
| `405` on `GET /api/mcp`              | Expected: the server is stateless and has no SSE stream            | Send JSON-RPC as `POST`                                   |

The server speaks the current MCP specification. Discovery starts at
`/.well-known/oauth-authorization-server` on the same origin; an unauthenticated request to
`/api/mcp` answers with the RFC 9728 challenge that points there.
