# Connect your assistant

Paste one URL in your assistant and click Allow. About a minute.

Paste the FounderMCP URL in your assistant and click **Allow** on the FounderMCP page that opens. That is the whole setup: FounderMCP signs your assistant in with OAuth, so there is no key to copy. [Connect your agent](https://foundermcp.dev/en/connect) walks you through it for Claude, ChatGPT, Claude Code and Cursor. You do not need an account first: the Allow page lets you create one. In the app, the same steps are under **Connect assistant** in the header, which turns green once your assistant is connected. Agents such as Claude Duet, Grok Bot, Dots and Muse get one message to paste instead, [below](#claude-duet-grok-bot-dots-and-muse).

There are two servers. Every workspace has the assistant server; the Signals server opens per organization.

- **Assistant** — leads, templates, drafts, replies and LinkedIn sequences in your workspace. `POST https://foundermcp.dev/api/mcp`. The response is JSON.
- **Signals** — companies, signals, leads, explain, enrich, monitors, the path in [From companies to leads](/docs/api/from-companies-to-leads). `POST https://foundermcp.dev/api/v1/mcp`. The response is a server-sent event stream, and its searches use credits. While the Signals API is closed for your organization, a valid sign-in or key answers **404**.

Owners and admins connect an assistant; the Allow page says so when you cannot. The connection works for your whole workspace. Disconnect it under **Connect assistant** in the app.

## Claude (claude.ai and Claude Desktop)

1. Copy `https://foundermcp.dev/api/mcp`.
2. Open **Settings → Connectors → Add custom connector** (on a Team or Enterprise plan an owner uses **Organization settings → Connectors → Add**, then **Custom → Web**). Name it FounderMCP, paste the URL and click **Add**. Leave the OAuth client id and secret empty: Claude registers itself.
3. Click **Connect**, then **Allow** on the FounderMCP page.

## ChatGPT

Add a custom MCP server: under **Plugins**, or in developer mode on a Business, Enterprise or Edu plan. Paste `https://foundermcp.dev/api/mcp`, choose **OAuth** as the authentication, and leave the client id empty. Sign in when ChatGPT asks, then click **Allow**.

## Claude Code

```bash
claude mcp add --transport http foundermcp https://foundermcp.dev/api/mcp
```

Then type `/mcp` in Claude Code, pick foundermcp and sign in. Your browser opens the Allow page. For the Signals server, add `foundermcp-signals` with `https://foundermcp.dev/api/v1/mcp` the same way.

## Cursor

Add the server to `~/.cursor/mcp.json` with only its URL. Cursor asks you to sign in to FounderMCP; click **Allow**.

```json
{
  "mcpServers": {
    "foundermcp": {
      "url": "https://foundermcp.dev/api/mcp"
    }
  }
}
```

## How sign-in works

FounderMCP is its own OAuth 2.1 authorization server. A `POST` without a token is **401** with `WWW-Authenticate: Bearer` and `resource_metadata`, which points the client to `/.well-known/oauth-protected-resource` and from there to `/.well-known/oauth-authorization-server`. The client registers itself (dynamic client registration), sends you to the Allow page with PKCE (S256 only), and gets an access token for one hour plus a refresh token that rotates on every use. A connection you do not use for 90 days asks you to sign in again. A token works only on the server it was issued for, and never on the REST API.

## With a key (a client that only sends a header)

n8n, scripts and any client without OAuth send `Authorization: Bearer` and a key on every POST.

- **Assistant** key prefix `ejk_`, from **Connect assistant → Other → Create assistant key** in the app. The full key is shown once. An organization can have 10 active MCP keys; connections made with Allow do not count.
- **Signals** key prefix `gtk_`, from **API Access → API Keys**. POST without a key, or with an invalid or revoked key, is **401**, including while the API is closed.

An `ejk_` key cannot call the REST API, and a `gtk_` key cannot call the assistant server. GET, PUT, PATCH and DELETE return **405** with `Allow: POST` on both URLs, before the key is checked and while an API is closed. Use POST. Do not put the key in the query string. Give it only to the client or agent that uses it, never in a shared chat or in code. Examples below read the key from `FOUNDERMCP_API_KEY`.

## Generic MCP config

Paste this when the client asks for a remote MCP server and a header. Replace the key. An agent that reads docs and calls APIs does not need it: see the next section.

Signals server (company → lead):

```json
{
  "mcpServers": {
    "foundermcp": {
      "url": "https://foundermcp.dev/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer gtk_…"
      }
    }
  }
}
```

Assistant server (drafts, after you have leads):

```json
{
  "mcpServers": {
    "foundermcp-assistant": {
      "url": "https://foundermcp.dev/api/mcp",
      "headers": {
        "Authorization": "Bearer ejk_…"
      }
    }
  }
}
```

A client with neither a header field nor OAuth cannot connect.

## Claude Duet, Grok Bot, Dots and Muse

An agent gets one message to paste, not a form. Pick it at [Connect your agent](https://foundermcp.dev/en/connect) or under **Connect assistant** in the app, and click **Create message**. FounderMCP creates a `gtk_` key and a message with three things: the docs (`https://foundermcp.dev/llms.txt`), the key, and one free call to check it (`GET https://foundermcp.dev/api/v1/usage`). Paste it in a chat with your agent. That first call connects it, and the app shows it.

The agent works with the REST API: Search People and Enrich People, and the Company and Signals APIs when they are open for your organization. The key needs API access on your plan. FounderMCP has not verified a Duet-specific dialog (or one for Dots or Muse), and the message needs none: you paste it in a chat.

### Grok Bot over MCP

The assistant server (drafts, LinkedIn sequences) speaks MCP only. To give it to Grok Bot, open **Settings → Plugins** in the Grok Bot app and add a custom MCP server (the app also accepts "Add this MCP server" in chat, then still needs the header below).

- **Name:** FounderMCP
- **URL:** `https://foundermcp.dev/api/mcp` for drafts, or `https://foundermcp.dev/api/v1/mcp` for leads
- **HTTP header name:** `Authorization`
- **HTTP header value:** `Bearer ` and the key (`ejk_` on the assistant URL, `gtk_` on the Signals URL)
- Leave the OAuth client id and secret empty

Save, install the server from Plugins, and attach it in a chat with @. A URL with no header is rejected.

## With a key in a client that also signs in

The same clients take a key when you prefer one. The header is `Authorization: Bearer`.

### Claude Code

```bash
claude mcp add --transport http foundermcp https://foundermcp.dev/api/v1/mcp \
  --header "Authorization: Bearer $FOUNDERMCP_API_KEY"
```

A project `.mcp.json` needs `"type": "http"`, the URL, and the same header. An entry with a `url` and no `type` is skipped. With the header set, Claude Code does not start a sign-in.

### Claude Desktop and Claude.ai

In the custom connector, choose **No sign-in** and set request header `authorization` to `Bearer ` plus the key. Request headers are in beta and missing on some organizations; signing in with Allow works everywhere.

### Cursor

`~/.cursor/mcp.json`, then restart Cursor. Do not add an `auth` block: FounderMCP registers Cursor itself when it signs in.

```json
{
  "mcpServers": {
    "foundermcp": {
      "url": "https://foundermcp.dev/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${env:FOUNDERMCP_API_KEY}"
      }
    }
  }
}
```

### Codex

`bearer_token_env_var = "FOUNDERMCP_API_KEY"` under `[mcp_servers.foundermcp]` in `~/.codex/config.toml`. Codex adds the word Bearer itself.

## Next

Ask the assistant for a company, then follow [From companies to leads](/docs/api/from-companies-to-leads). The tool map is [MCP](/docs/api-reference/mcp).
