# Set up other AI apps (Cursor, Claude Code, VS Code and more)

> Connect Claude Code, Cursor, VS Code, Codex, Gemini CLI, Windsurf, Zed, Cline, JetBrains AI and other MCP clients to BCL, with OAuth or a token.
>
> Source: https://docs.bcl.my/ai-agent-setup/

Coding assistants and AI apps other than Claude and ChatGPT connect to BCL with the same server address, `https://bcl.my/mcp`. Some sign you in through the browser (OAuth), and some need a **Personal Access Token** from BCL. This page gives the setup for each app on the **Connect AI Agent** page.

For claude.ai, Claude Desktop and ChatGPT, see [Connect Claude or ChatGPT to BCL](/connect-ai-agent/).

## Pick your app and sign-in method

BCL lists 15 apps under **Platform Setup** → **Connect AI Agent**, on the **Quick start** tab. Each one supports the methods below:

| App | OAuth (browser sign-in) | Personal Access Token | Where the setting goes |
|---|---|---|---|
| Claude Desktop / claude.ai | Yes | No | **Settings** → **Connectors** → **Add custom connector** |
| ChatGPT | Yes | No | **Settings** → **Apps & Connectors** → **Advanced** → **Developer mode** → **Create** |
| Claude Code | Yes (recommended) | Yes | `claude mcp add`, or `.mcp.json` in the project root |
| Cursor | Yes (recommended) | Yes | `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project) |
| VS Code (GitHub Copilot) | Yes | Yes | `code --add-mcp`, or `.vscode/mcp.json` |
| Codex | Yes | No | `~/.codex/config.toml` |
| Gemini CLI | Yes (recommended) | Yes | `gemini mcp add`, or `~/.gemini/settings.json` |
| Windsurf | Yes (recommended) | Yes | `~/.codeium/windsurf/mcp_config.json` |
| Warp | Yes | Yes | **Settings** → **Agents** → **MCP servers** → **+ Add** |
| Zed | Yes (recommended) | Yes | **Agent Panel** → **Add Remote Server**, or `~/.config/zed/settings.json` |
| OpenCode | Yes | No | `opencode.json` or `~/.config/opencode/opencode.json` |
| Cline | No | Yes | **MCP Servers** → **Configure MCP Servers** |
| JetBrains AI | No | Yes | **Settings** → **Tools** → **AI Assistant** → **Model Context Protocol (MCP)** → **Add** |
| Hermes Agent | No | Yes | `~/.hermes/config.yaml` |
| OpenClaw / Custom | No | Yes | `openclaw mcp set`, or any MCP SDK |

*(Screenshot: The Pick your agent step on the Quick start tab, listing all 15 apps, with Cursor highlighted)*

With OAuth, the app opens BCL in your browser. Sign in, check the permissions and click **Authorize**, as described in [Approve the connection](/connect-ai-agent/#approve-the-connection). Access and revoking work the same as for Claude.

## Create a token for MCP

Skip this section if your app uses OAuth. For a token, you must be an Admin:

1. Go to **Platform Setup** → **Integrations** and open the **API Token** tab.
2. Click **Create New API Token**.

   *(Screenshot: The API Token tab of Integrations with the Create New API Token button highlighted)*

3. Enter a **Token Name** that says where you will use it, such as "Cursor on office laptop".
4. Under **Permissions**, tick **MCP Read**. Tick **MCP Write** too only if the app should make changes. Untick **API Read** and **API Write** unless the same token also calls the BCL API.

   *(Screenshot: The Create New API Token panel, with the MCP Read and MCP Write permissions highlighted)*

5. Choose an **Expiration**, for example **90 days**.
6. Click **Create Token**, then copy the token from the list with the copy icon.

For more on tokens, including how to view or delete one, see [Create an API token](/api-tokens/).

> **Caution**
> A token works for anyone who has it, with the permissions you ticked. Keep it out of shared files and screenshots. If a config file with a token goes into Git, delete that token in BCL and create a new one.

In every snippet below, replace `<YOUR_PAT_HERE>` with your token. Keep the word `Bearer` and the space before it.

## Claude Code

Claude Code signs in through your browser. Add the server with one command:

```shell
claude mcp add --transport http bcl https://bcl.my/mcp
```

Then run `/mcp` in Claude Code, choose **bcl** and sign in with your BCL account.

For CI or a machine without a browser, use a token instead:

```shell
claude mcp add --transport http bcl https://bcl.my/mcp \
  --header "Authorization: Bearer <YOUR_PAT_HERE>"
```

To share the server with your team, commit a `.mcp.json` file in the project root. Do not put a token in it.

*(Screenshot: The Claude Code setup on the Quick start tab, with the OAuth and Personal Access Token commands)*

## Cursor

Save this in `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (one project), then turn the server on under **Settings** → **MCP**. Cursor shows **Needs login** next to the server: click it and sign in with your BCL account.

```json
{
    "mcpServers": {
        "bcl": {
            "url": "https://bcl.my/mcp"
        }
    }
}
```

With a token instead:

```json
{
    "mcpServers": {
        "bcl": {
            "url": "https://bcl.my/mcp",
            "headers": {
                "Authorization": "Bearer <YOUR_PAT_HERE>"
            }
        }
    }
}
```

*(Screenshot: The Cursor setup on the Quick start tab, with the OAuth and Personal Access Token configs)*

## VS Code

VS Code uses MCP in GitHub Copilot **Agent Mode**. Turn on Agent Mode in Copilot Chat, then run:

```shell
code --add-mcp '{"name":"bcl","type":"http","url":"https://bcl.my/mcp"}'
```

VS Code asks you to trust the server, then opens the browser to sign in. With a token, put this in `.vscode/mcp.json`. Note that VS Code uses `servers`, not `mcpServers`, and needs a `type`:

```json
{
    "servers": {
        "bcl": {
            "type": "http",
            "url": "https://bcl.my/mcp",
            "headers": {
                "Authorization": "Bearer <YOUR_PAT_HERE>"
            }
        }
    }
}
```

*(Screenshot: The VS Code setup on the Quick start tab, with the code --add-mcp command and the .vscode/mcp.json config)*

## Windsurf

Windsurf uses `serverUrl` instead of `url`. Save this in `~/.codeium/windsurf/mcp_config.json`, then click **Refresh** in the Cascade MCP panel. With no headers, Windsurf opens the browser to sign in:

```json
{
    "mcpServers": {
        "bcl": {
            "serverUrl": "https://bcl.my/mcp"
        }
    }
}
```

For a token, add `"headers": { "Authorization": "Bearer <YOUR_PAT_HERE>" }` next to `serverUrl`.

## Zed

Zed connects to remote servers natively. The easiest way is **Agent Panel** → **Settings** → **Add Remote Server**. Or add this to `~/.config/zed/settings.json`; with no headers, Zed asks you to sign in in the browser:

```json
{
    "context_servers": {
        "bcl": {
            "url": "https://bcl.my/mcp"
        }
    }
}
```

For a token, add `"headers": { "Authorization": "Bearer <YOUR_PAT_HERE>" }` next to `url`.

## Cline

Cline needs a token. The easiest way is to paste this into a Cline chat, with your token in place of the placeholder:

```text
Add this MCP server to your Cline MCP settings: name "bcl", type "streamableHttp", url https://bcl.my/mcp, with an Authorization header of "Bearer <YOUR_PAT_HERE>". Then confirm the BCL tools are available.
```

Or add it by hand under **MCP Servers** → **Configure MCP Servers**. The type must be exactly `streamableHttp`:

```json
{
    "mcpServers": {
        "bcl": {
            "type": "streamableHttp",
            "url": "https://bcl.my/mcp",
            "headers": {
                "Authorization": "Bearer <YOUR_PAT_HERE>"
            },
            "disabled": false,
            "autoApprove": []
        }
    }
}
```

## JetBrains AI

IntelliJ IDEA, PhpStorm, WebStorm, PyCharm and the other JetBrains IDEs need a token. Go to **Settings** → **Tools** → **AI Assistant** → **Model Context Protocol (MCP)** → **Add**, choose **As JSON** and paste:

```json
{
    "mcpServers": {
        "bcl": {
            "url": "https://bcl.my/mcp",
            "headers": {
                "Authorization": "Bearer <YOUR_PAT_HERE>"
            }
        }
    }
}
```

If the IDE does not pick up the header, use the `mcp-remote` bridge instead. It needs Node.js:

```json
{
    "mcpServers": {
        "bcl": {
            "command": "npx",
            "args": [
                "-y",
                "mcp-remote",
                "https://bcl.my/mcp",
                "--header",
                "Authorization: Bearer <YOUR_PAT_HERE>"
            ]
        }
    }
}
```

*(Screenshot: The JetBrains AI setup on the Quick start tab, with the native config and the mcp-remote bridge)*

## Codex, Gemini CLI, OpenCode and Warp

These apps sign in through the browser.

**Codex** (CLI, desktop app and IDE extension share one file): add this to `~/.codex/config.toml`, then run `codex mcp login bcl`.

```toml
[mcp_servers.bcl]
url = "https://bcl.my/mcp"
oauth_resource = "https://bcl.my/mcp"
```

**Gemini CLI**: run the command below. On first use it opens the browser to sign in.

```shell
gemini mcp add --transport http --scope user bcl https://bcl.my/mcp
```

With a token: `gemini mcp add --transport http --scope user --header "Authorization: Bearer <YOUR_PAT_HERE>" bcl https://bcl.my/mcp`. In `~/.gemini/settings.json`, the key is `httpUrl`, not `url`.

**OpenCode**: add this to `opencode.json`, then run `opencode mcp auth bcl`.

```json
{
    "$schema": "https://opencode.ai/config.json",
    "mcp": {
        "bcl": {
            "type": "remote",
            "url": "https://bcl.my/mcp"
        }
    }
}
```

**Warp**: under **Settings** → **Agents** → **MCP servers** → **+ Add**, choose **Streamable HTTP or SSE Server (URL)** and paste:

```json
{
    "mcpServers": {
        "bcl": {
            "url": "https://bcl.my/mcp"
        }
    }
}
```

## Hermes Agent, OpenClaw and your own agent

These use a token.

**Hermes Agent**: add this to `~/.hermes/config.yaml`, then restart the agent.

```yaml
mcp_servers:
  bcl:
    url: "https://bcl.my/mcp"
    headers:
      Authorization: "Bearer <YOUR_PAT_HERE>"
```

**OpenClaw**: it defaults to SSE, so set the transport:

```shell
openclaw mcp set bcl '{"url":"https://bcl.my/mcp","headers":{"Authorization":"Bearer <YOUR_PAT_HERE>"},"transport":"streamable-http"}'
```

**Your own agent**: point your MCP SDK's Streamable HTTP client at `https://bcl.my/mcp` with the `Authorization: Bearer` header. To test the connection, list the tools:

```shell
curl -X POST https://bcl.my/mcp \
  -H "Authorization: Bearer <YOUR_PAT_HERE>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
```

A token with **MCP Read** and **MCP Write** gets back 62 tools. BCL answers every request as plain JSON over `POST`; it does not open an event stream. For the tool list, limits and errors, see [MCP tools reference](/mcp-tools/).

## Check that it works

After you save the settings, restart the app and ask it:

```text
What tools do you have? Summarise what I can ask you to do.
```

It should list the BCL tools. Each request then shows in **Tools** → **MCP Audit Log**, with **pat** or **oauth** in the **Auth** column. See [Check what your AI agent did](/mcp-audit-log/).

## Tips

A few habits make tokens and connections easier to manage:

- **One token per app and computer.** If a laptop is lost, you delete only that token and the other apps keep working.
- **Prefer OAuth where you can.** There is no token to copy, and you can revoke the app under **Connected Apps**.
- **Set an expiry on tokens.** A token with **Never** keeps working until someone deletes it.

## Common issues

### Which is better, OAuth or a Personal Access Token?

Use OAuth when your app supports it: you sign in with your BCL account in the browser and there is no token to copy or leak. Use a token for JetBrains AI, Cline, Hermes Agent, OpenClaw, scripts and machines without a browser.

### My token works with the BCL API but the AI app says it is not allowed. Why?

MCP needs its own permissions. The token must have MCP Read (and MCP Write to make changes). API Read and API Write alone are refused.

### The AI app connects but shows no BCL tools. What do I check?

Check the address is exactly https://bcl.my/mcp, that you replaced <YOUR_PAT_HERE> with your token, and that the token is not expired. Then restart the app and ask "What tools do you have?".
