# MCP server

> Let an AI assistant run your Roar account — connect it in about a minute.

Roar hosts an [MCP](https://modelcontextprotocol.io) server, so an assistant — Claude, an editor's AI, your own agent — can do console work for you: create a key, check what you've spent, deploy an app, look at why a build failed.

It can only ever do what **you** can do, in the projects you can reach. Connecting takes about a minute and there is nothing to install.

<CodeCard caption="The address — every tool takes this same one">

```
https://cloud.roar-ai.com/mcp
```

</CodeCard>

<Note>
**You do not need a key.** Most assistants sign you in through your browser the first time and remember it. There is nothing to copy, paste or keep safe. A key is only for an agent running unattended — see [Unattended agents](#unattended-agents) below.
</Note>

## Claude

**Add it from Claude's directory.** One click, nothing to paste: open [Roar AI in Claude's connector directory](https://claude.ai/directory/connectors/roar-ai) and add it. Claude asks you to sign in to Roar the first time.

**Or paste the address** — if your company's Claude workspace restricts the directory. Open **Settings › Connectors › Add custom connector**, and paste the address above.

**Claude Code**, if you work in the terminal:

<CodeCard caption="Run once">

```bash
claude mcp add --transport http roar https://cloud.roar-ai.com/mcp
```

</CodeCard>

<Note>
That command needs the Claude Code CLI, which is a **separate install** from the desktop app. Having the app does not give you the `claude` command.
</Note>

## ChatGPT

Open **Settings › Connectors › Advanced › Developer mode**, then **Create**. Name it `Roar`, paste the address, and set authentication to **OAuth**. ChatGPT then opens our sign-in page for you to approve.

## Cursor

**Settings › Tools & MCP › New MCP Server**, then paste the address.

For a config you want to commit or share with your team, put this in `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project:

<CodeCard caption="~/.cursor/mcp.json">

```json
{
  "mcpServers": {
    "roar": { "url": "https://cloud.roar-ai.com/mcp" }
  }
}
```

</CodeCard>

## VS Code and Copilot

Command Palette › **MCP: Open User Configuration**, or create `.vscode/mcp.json`:

<CodeCard caption=".vscode/mcp.json">

```json
{
  "servers": {
    "roar": { "type": "http", "url": "https://cloud.roar-ai.com/mcp" }
  }
}
```

</CodeCard>

<Note>
**VS Code calls the block `servers`. Everything else calls it `mcpServers`.** Pasting the common shape here fails without telling you why — it is the one config on this page that differs.
</Note>

## OpenCode

Under the `mcp` key in `opencode.json`:

<CodeCard caption="opencode.json">

```json
{
  "mcp": {
    "roar": {
      "type": "remote",
      "url": "https://cloud.roar-ai.com/mcp",
      "enabled": true
    }
  }
}
```

</CodeCard>

## Anything else

If your tool has a field for an MCP server address, the address on its own is all it needs. If it wants a config file, this is the shape Cline, Windsurf, Continue, JetBrains and most others read:

<CodeCard caption="The standard block">

```json
{
  "mcpServers": {
    "roar": { "url": "https://cloud.roar-ai.com/mcp" }
  }
}
```

</CodeCard>

However your tool receives the address, it then asks us what we are, discovers the sign-in, registers itself and opens the approval page. There is nothing else to configure.

Roar AI is also listed on [Smithery](https://smithery.ai/servers/cloud-1o14/roar-ai), which can install it into many MCP clients for you.

## What the assistant can do

Tools mirror the management API. An assistant can manage your API keys, read your usage and budgets, and run your apps end to end — deploy one from a repository, choose the region it runs in, give it a database and a domain, set its environment variables, watch a deploy, read its logs, roll it back, and delete it when it is finished with. It can also manage projects and who is in them, schedule jobs, and register webhooks.

Some things are deliberately not offered to an assistant, and the line is about what a person should decide rather than what a key is allowed. Inviting a colleague, topping up credit, editing the rows inside your app's database, restoring a backup and turning prompt logging on or off are all done by a person in the console.

Every tool call goes through **the same authorization and ownership checks as the REST API** — they are not a parallel implementation, they call it. So an assistant can never do more than the person or key behind it, and it cannot see another workspace's anything.

The tool list is filtered by what you granted: an assistant connected with permission to read usage and nothing else never sees a deploy tool at all, rather than seeing it and failing.

## Things to ask

Once connected, ask in plain language. For example:

- *"What did we spend on AI this month, and which app spent the most?"*
- *"Deploy the `intranet` repository from GitHub with a database, and tell me when it is live."*
- *"Why did the last deploy of the support bot fail? Show me the build log."*
- *"Create an API key for our reporting script that can only read usage, and make it expire in 60 days."*
- *"Set `FEATURE_SEARCH=on` on the intranet app and redeploy it."*

Every tool tells the assistant whether it only reads or changes something, and which changes cannot be undone. Claude uses that to decide when to ask you before acting.

## Disconnecting

Remove the connector in your assistant — in Claude, **Settings › Connectors**, then remove Roar AI. The assistant stops holding its sign-in straight away, and any access it was already granted expires within the hour. What we keep about a connection, and for how long, is in the [privacy policy](/privacy#assistants).

## Unattended agents

Sign-in through the browser suits a person at a keyboard. For something that runs on a schedule with nobody there, use an API key instead — send it as `Authorization: Bearer roar_live_…` alongside the address.

<Note>
Give it a key that is **narrow and expiring**. A reporting agent needs `usage:read` and nothing else; sixty days is usually generous. See [Authentication & keys](/docs/authentication).
</Note>

## If a connector will not finish signing in

The address is on `cloud.roar-ai.com`, and it has to be — even though `api.roar-ai.com` reaches the same platform for everything else.

Sign-in is OAuth, and OAuth can only complete on the host you actually typed. Sending it anywhere else means your assistant would sign you in, show you a consent screen, get your approval, and *still* not be able to call a tool — with the consent screen making it look like the problem is somewhere else entirely.

So we refuse it up front instead. A connector pointed at the wrong host gets `421` and a message naming the right address. If you see that, the fix is the address in the dialog, not your account.
