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

# MCP server

> Datacircle in Claude, ChatGPT, Cursor and any MCP client: one URL, sign in, and your agent fetches profiles from your balance.

Datacircle's MCP server is `https://idle.api.datacircle.dev/mcp` (Streamable HTTP). Add it to your client, sign in with your Datacircle email, and your agent calls the API for you: every call costs what the same REST call costs ([Pricing](/pricing)), from the same [balance](/balance).

## Add it

| Client | How |
| - | - |
| Claude (claude.ai, desktop) | Settings, Connectors, Add custom connector: paste `https://idle.api.datacircle.dev/mcp`, then Connect and sign in |
| Claude Code | `claude mcp add --transport http datacircle https://idle.api.datacircle.dev/mcp`, then `/mcp` to sign in |
| ChatGPT | In developer mode, add a connector with `https://idle.api.datacircle.dev/mcp` and OAuth, then sign in |
| Cursor, VS Code, any other | the URL as a remote (HTTP) MCP server; it signs you in with OAuth, or send your API key (below) |

Signing in opens [idle.datacircle.dev](https://idle.datacircle.dev): sign in with your email code (a new account gets the sign-up credit), check which app asks and where it sends you back, then Allow. The app gets an access token that works on `/mcp` only.

A client that sends headers can skip OAuth and use your API key:

```bash theme={null}
claude mcp add --transport http datacircle https://idle.api.datacircle.dev/mcp --header "Authorization: Bearer $DATACIRCLE_API_KEY"
```

```json theme={null}
{"mcpServers": {"datacircle": {"url": "https://idle.api.datacircle.dev/mcp", "headers": {"Authorization": "Bearer <your API key>"}}}}
```

To cut every connected app off, [reset your API key](/quickstart#1-sign-up): their access tokens stop working with it.

## Tools

Each tool makes one REST call with your key and answers that call's JSON (`isError: true` when its status is `400` or more).

| Tool | Arguments | The REST call | Costs |
| - | - | - | - |
| `get_linkedin_profile` | `url`, `provider` (`up2data`, the default, or `harvestapi`) | `POST /v1/profiles/enrich` or `GET /linkedin/profile` ([LinkedIn Profile API](/linkedin-profile)) | the provider's price ([Pricing](/pricing)); free when Datacircle holds it |
| `get_balance` | none | `GET /balance/` | free |
| `list_files` | none | `GET /files/` ([Files](/files)), as `{"files": [...]}` | free |
| `get_download_link` | `file_id` | `POST /files/{file_id}/download-link/` | free |
| `add_funds` | `amount_usd` (5 to 10,000) | `POST /checkout/`: a Stripe Checkout link for you to open and pay | nothing until you pay |
| `get_invite_link` | none | `GET /me/invites/` | free |

## For developers

* No session and no stream: every `POST /mcp` gets one JSON answer; `GET /mcp` is `405`. Protocol versions `2025-11-25`, `2025-06-18`, `2025-03-26` and `2024-11-05`.
* No token, or a bad one: `401` with `WWW-Authenticate: Bearer resource_metadata="https://idle.api.datacircle.dev/.well-known/oauth-protected-resource/mcp"`.
* OAuth 2.1: `/.well-known/oauth-authorization-server` lists the endpoints; dynamic client registration at `POST /oauth/register`; the authorization code with PKCE (`S256` only); public clients, or a client secret if you register with one.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.