# Connect Cursor

> Add the Tabba MCP server to Cursor, for one project or for your whole machine.

Source: https://www.tabba.io/developers/mcp/cursor

Cursor reads MCP servers from an `mcp.json` file: one for you, one per
project. A remote server needs nothing but a URL.

## Add the server [#add-the-server]

Add the server in Cursor's MCP settings, or write the file directly:

**~/.cursor/mcp.json**

```json
{
  "mcpServers": {
    "tabba": {
      "url": "https://www.tabba.io/api/mcp"
    }
  }
}
```

**.cursor/mcp.json**

```json
{
  "mcpServers": {
    "tabba": {
      "url": "https://www.tabba.io/api/mcp"
    }
  }
}
```

A `url` is what makes the entry a remote server. Reload Cursor, find `tabba`
in the MCP list, and log in. Cursor runs the OAuth flow itself: the browser
opens Tabba, you sign in if you are asked to, pick the company on the consent
page, and choose **Approve**. That is the only way Tabba authenticates an MCP
client.

> [!NOTE]
> **No secret in the file**
>
> The entry is the URL. There is no header to add and no credential to paste.
> The token is kept by Cursor, so a project's `.cursor/mcp.json` holds nothing
> secret. Each collaborator logs in and is connected as themselves: with
> their own role in Tabba, their own work, and the company they picked.

## Agents without a browser cannot connect [#agents-without-a-browser-cannot-connect]

Signing in is a browser step, and Tabba's MCP server accepts no other
credential. An agent that runs in the background, a CI job, or anything else
with no person at a browser cannot authenticate.

Use the [REST API](/developers/api) for that work: a key on `/api/v1`, no
consent step, the same Sales data underneath.

## Verify it works [#verify-it-works]

In Cursor's agent chat:

```
Using Tabba, what work do I have open?
```

Cursor shows the tool calls it made. A call to `get_my_work` that answers
with your real lines means the connection works. A read answers from the work
you hold a place on, and a list opens by saying which view produced it. See
[Auth and scopes](/developers/mcp/auth) for what an admin may widen.

## Mind the tool budget [#mind-the-tool-budget]

Tabba registers up to 29 tools: 17 that read, 11 that plan, and `commit`.
That is an admin's catalogue on a connection that may issue. A standard user
is offered 15 at most: 13 that read, `plan_register_work` and `commit`.

If Cursor limits how many tools it sends to the model across all servers, an
admin's Tabba catalogue takes a large part of it. Switch off the servers you
are not using, or switch off the Tabba tools you never call in Cursor's MCP
settings. The consent page has no control for granting a narrower scope than
the client asked for, so the catalogue cannot be trimmed there.

## Troubleshooting [#troubleshooting]

* **The tools do not appear.** Check that the JSON parses and that the server
  is switched on in Cursor's MCP settings.
* **Every call is answered 401.** The token ran out and the refresh failed,
  you revoked the access in Tabba, or your access to the company ended. Log
  out and back in from the MCP settings.
* **`406 Not Acceptable`.** Something between Cursor and Tabba is stripping
  the `Accept` header. Streamable HTTP has the client accept both
  `application/json` and `text/event-stream`, and a proxy that rewrites the
  header breaks the transport.
* **The agent plans and never writes.** That is the design. A `plan_*` tool
  answers a plan, you confirm, and the agent calls `commit`. See
  [Plan and commit](/developers/mcp/propose-commit).
* **A name matches several records.** The answer lists the candidates. Pick
  one, or name the record by `ext:your-id`.

## Remove it [#remove-it]

Delete the entry from `mcp.json`, then revoke the access in Tabba: under
**Claude and other AI clients** on your profile settings, choose **Revoke
access**. That ends every AI client connection of yours, not only this one.
