> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fullreach.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect a client

> Connect ChatGPT, Claude, Cursor or another MCP client to FullReach AI, by signing in or with an API key.

The FullReach AI MCP server lets an AI assistant read this organization's measurements: the same figures as the dashboard, and the answers behind them. Every tool reads stored answers and changes nothing. [Tools](/mcp/tools) lists them, and [Prompts](/mcp/prompts) lists the ready-made analyses.

A client connects in one of two ways:

* **Sign in and approve.** ChatGPT, claude.ai and Claude Desktop's connector settings connect this way. No key is needed.
* **An API key.** Claude Code, Cursor and other clients that send a header connect this way.

The endpoint is `https://mcp.fullreach.ai` for both.

## Sign in and approve

<Steps>
  <Step title="Add the server in the assistant">
    Add a custom connector with the URL `https://mcp.fullreach.ai`. Leave the client ID and secret empty.

    * **ChatGPT:** turn on developer mode in the settings, then add the connector.
    * **claude.ai and Claude Desktop:** add a custom connector in the connector settings.
  </Step>

  <Step title="Sign in to FullReach AI">
    The assistant opens a FullReach AI page in your browser. Sign in there with your work address, Google or Microsoft. The page comes back after you sign in.
  </Step>

  <Step title="Read the request, then approve">
    The page shows where the assistant's answers go, such as `chatgpt.com`. Check that address. Then choose what the connection may read: every project, or one project. Select **Approve**.
  </Step>
</Steps>

The browser then returns to the assistant, which can call the tools.

### What the page checks

* **Only an admin approves.** A member sees who to ask, and may deny the request.
* **The request works in the browser the assistant opened.** A link to the page that somebody forwards does not work in another browser.
* **The destination comes first.** An app names itself, but the page leads with the address its answers go to. If the name and the address do not match, the page warns you. Deny unless you set up that app yourself.
* **An organization with no project cannot connect.** Start a trial first.

### How a connection ends

**Settings**, **Organization**, **Connections** lists each connection: the assistant, where its answers go, what it reads, who approved it and when it was last used. A connection belongs to the admin who approved it. It stops working when:

* an admin revokes it on that card. The card asks first, and the next call fails at once.
* that admin leaves the organization, is removed from it, or stops being an admin.
* the organization is deleted.
* the assistant stays unused until its sign-in expires. Connect it again from the assistant.

## An API key

* **The endpoint:** `https://mcp.fullreach.ai`. **Settings**, **Organization**, **API keys** shows it with a **Copy** button.
* **An API key.** An admin creates it on the same card. Name it after the client, such as "Cursor". The key shows once, so copy it before you close the panel. It starts with `fr_`.

When the organization runs more than one project, choose what the key reads: every project, or one. A key for every project needs the tools' `project` argument. The assistant finds the ids with `list_projects`. A connection that reads every project works the same way.

The server takes the key as a bearer token: `Authorization: Bearer fr_…`. Treat the key as a password. Anybody who holds it can read what the organization measured. A key belongs to the organization, not to a person, and works until an admin revokes it.

### Claude Code

Run this in a terminal, with your key in place of `fr_…`:

```bash theme={null}
claude mcp add --transport http fullreach https://mcp.fullreach.ai --header "Authorization: Bearer fr_…"
```

Then run `/mcp` in Claude Code to check that `fullreach` is connected.

### Claude Desktop with a key

Claude Desktop's connector settings sign in, as above. To use a key instead, Claude Desktop reaches the server through `mcp-remote`, a small bridge that runs on Node.js.

1. Install [Node.js](https://nodejs.org), if it is not installed.
2. In Claude Desktop, open **Settings**, **Developer**, **Edit Config**.
3. Add the server to `claude_desktop_config.json`, with your key in place of `fr_…`:

```json theme={null}
{
  "mcpServers": {
    "fullreach": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.fullreach.ai", "--header", "Authorization:${FULLREACH_AUTH}"],
      "env": {
        "FULLREACH_AUTH": "Bearer fr_…"
      }
    }
  }
}
```

4. Quit Claude Desktop completely and open it again.

The key sits in `env`, not in `args`, because Claude Desktop on Windows breaks an argument that holds a space.

### Cursor

Add the server to Cursor's `mcp.json`, with your key in place of `fr_…`. The file is `~/.cursor/mcp.json` for every project, or `.cursor/mcp.json` inside one project:

```json theme={null}
{
  "mcpServers": {
    "fullreach": {
      "url": "https://mcp.fullreach.ai",
      "headers": {
        "Authorization": "Bearer fr_…"
      }
    }
  }
}
```

### Other clients

A client can connect when it speaks MCP over Streamable HTTP, and either signs in with OAuth or sends an `Authorization` header. The server takes one JSON-RPC message per request, and it opens no event stream.

## Limits

* [Plan limits](/reference/limits#the-mcp-servers-rate-limit) states how many tool calls an organization may make a minute. Keys and connections share it. Every answer carries the rate-limit headers, so a client can pace itself.
* A key or a connection reads only this organization. It never reaches the dashboard, and it cannot change anything.
