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

# Other Clients

> Connect any MCP-capable client to the 2extract MCP server - the three values you need, and how to test the connection by hand.

Every client differs in where it keeps its configuration. None of them differ in what the configuration has to contain.

***

## The three values

|               |                                          |
| :------------ | :--------------------------------------- |
| **URL**       | `https://mcp.2extract.com/mcp`           |
| **Transport** | Streamable HTTP                          |
| **Header**    | `Authorization: Bearer 2xt_YOUR_API_KEY` |

Wherever your client asks for a remote or custom MCP server, those go in. If it offers a choice of transports, pick Streamable HTTP - not stdio, and not the deprecated HTTP+SSE.

<Warning>
  Keep the `/mcp` path. The bare host `https://mcp.2extract.com` serves a web page, not the protocol.
</Warning>

***

## The two shapes you will meet

Most clients use one of these. If yours is not documented here, try the first.

<CodeGroup>
  ```json mcpServers icon="brackets-curly" theme={null}
  {
    "mcpServers": {
      "2extract": {
        "type": "http",
        "url": "https://mcp.2extract.com/mcp",
        "headers": {
          "Authorization": "Bearer 2xt_YOUR_API_KEY"
        }
      }
    }
  }
  ```

  ```json servers icon="brackets-curly" theme={null}
  {
    "servers": {
      "2extract": {
        "type": "http",
        "url": "https://mcp.2extract.com/mcp",
        "headers": {
          "Authorization": "Bearer 2xt_YOUR_API_KEY"
        }
      }
    }
  }
  ```
</CodeGroup>

Variations you may run into: `serverUrl` instead of `url`, `streamableHttp` instead of `http`, headers as a list of strings rather than an object. The values stay the same.

***

## Clients that only speak stdio

Some older clients launch local processes and cannot reach a remote server. Bridge to it with `mcp-remote`, which runs locally and forwards to us:

```json icon="brackets-curly" theme={null}
{
  "mcpServers": {
    "2extract": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.2extract.com/mcp",
        "--header",
        "Authorization: Bearer 2xt_YOUR_API_KEY"
      ]
    }
  }
}
```

Requires Node.js. Use the direct HTTP form whenever your client supports it.

***

## Testing without a client

Useful when you want to know whether the problem is us or your editor. Open a session:

```bash icon="terminal" theme={null}
curl -i -X POST https://mcp.2extract.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer 2xt_YOUR_API_KEY" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-06-18",
      "capabilities": {},
      "clientInfo": { "name": "curl", "version": "1" }
    }
  }'
```

A healthy server replies `200` with an `mcp-session-id` response header and the server's capabilities in the body.

<Note>
  `initialize` succeeds even without a valid key - authentication is checked when a tool actually runs. To test the key itself, call a tool: pass the returned `mcp-session-id` back as a header, send `notifications/initialized`, then call `tools/call` with `getAccountBalance`. A bad key returns `error_code: unauthorized`.
</Note>

***

## Checklist when it will not connect

<Steps>
  <Step title="Is the path there?">
    `https://mcp.2extract.com/mcp`, not the bare host.
  </Step>

  <Step title="Is the transport right?">
    Streamable HTTP. If the client only lists SSE, it is likely too old for this server.
  </Step>

  <Step title="Is the header exactly right?">
    `Bearer`, one space, then the key. Watch for a trailing newline from copy-paste.
  </Step>

  <Step title="Did the client reload?">
    Most need a restart, not just a new conversation.
  </Step>

  <Step title="Does the key have the scopes?">
    If some tools work and others do not, it is scopes - not the connection. See [Overview](/ai/mcp-server/overview#scopes-an-agent-needs).
  </Step>
</Steps>

***

## Next steps

<CardGroup cols={2}>
  <Card title="FAQ" icon="circle-question" href="/ai/mcp-server/faq">
    Error codes and what each one means.
  </Card>

  <Card title="Tools" icon="wrench" href="/ai/mcp-server/tools">
    Everything the agent can call.
  </Card>
</CardGroup>
