Enrichments.io
Find people, companies and enrich data across 10+ providers.
Documentation
Enrichments runs a Model Context Protocol server, so an agent in Claude, ChatGPT, Cursor or Codex can find and enrich people and companies as ordinary tool calls — no glue code, no SDK. It authenticates with the same API key as the REST API and bills against the same credit balance, charged only for data actually returned.
Endpoint
| What | Where |
|---|---|
| MCP endpoint | https://www.enrichments.io/api/mcp |
| Transport | Streamable HTTP (POST, with SSE responses) |
| Authentication | Authorization: Bearer with an Enrichments API key |
| Discovery document | /.well-known/oauth-protected-resource |
The discovery document is the RFC 9728 protected-resource metadata for the endpoint. It is served for clients that look for it; nothing about connecting requires you to fetch it yourself.
Tools
| Tool | What it does | Cost | Scope |
|---|---|---|---|
| search_people | Find people matching an ideal-customer-profile description — titles, seniority, department, location, employer. Returns who they are, not their email address. | Spends credits | enrich:write |
| enrich_people | Resolve identifiers you already hold — a LinkedIn URL, an email, or a name plus employer — into full person records, up to 100 per call. This is also where work email addresses come from: ask for them with fields: ["email"]. | Spends credits | enrich:write |
| search_companies | Find companies matching a description — industry, size, location, founding year. | Spends credits | enrich:write |
| enrich_companies | Resolve domains, names or LinkedIn URLs into company records — description, industry, headcount, location, founding year — up to 100 per call. | Spends credits | enrich:write |
| get_job | Poll a job started by any search or enrich tool and page through its results. Free — polling costs no credits. | Free | enrich:read |
| search | ChatGPT Deep Research alias. A ten-result search returning citable ids; Claude and other clients can ignore it. | Spends credits | enrich:write |
| fetch | ChatGPT Deep Research alias. Reads the record behind a search id. Free — it returns something already paid for. | Free | enrich:read |
Small requests answer inline. Larger ones are queued: the tool returns a job id with results: null, and the agent polls get_job until done is true. Polling is free.
email is never returned unless it is named in fields. It is the one expensive field and it is billed per address actually found, so the intended shape of a run is: discover without it, decide which rows you want, then make one enrich_people call asking for it on exactly those rows.
What comes back
People fields: email, linkedin_url, title, seniority, department, location, country, company, company_domain, headline, phone, company_profile.
Company fields: company, company_domain, linkedin_url, location, country, headline, plus firmographics that ride along with any company row.
Each field is described on the API reference, which is generated from the same schemas these tools validate with.
Connecting a client
Every client below authenticates the same way: an API key, created in the app and shown once, sent as Authorization: Bearer. A key belongs to an organization rather than to a person, and carries scopes — a new key holds both enrichment scopes, so every tool above is callable with it.
Claude, Cursor, and anything that accepts a remote MCP URL
Point the client at the endpoint and give it the header. In Cursor this is ~/.cursor/mcp.json for every project, or .cursor/mcp.json inside one repository. In a Claude client that accepts a custom connector URL, add the endpoint and, where the request-headers option is offered, the same header.
mcp.json
{
"mcpServers": {
"enrichments": {
"url": "https://www.enrichments.io/api/mcp",
"headers": {
"Authorization": "Bearer ek_live_xxxxxxxxxxxxxxxxxxxx"
}
}
}
}
Claude Desktop, and other stdio-only clients
A client that cannot reach a remote server directly bridges to it over stdio. The bridge is a development convenience rather than part of this product. Add the block below to the Claude Desktop config file for your platform, quit Claude Desktop completely, and reopen it.
claude_desktop_config.json
{
"mcpServers": {
"enrichments": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://www.enrichments.io/api/mcp",
"--header", "Authorization: Bearer ek_live_xxxxxxxxxxxxxxxxxxxx"
]
}
}
}
ChatGPT and the Responses API
Declare the server inline on a Responses API request and pass the key in authorization. Deep Research calls only search and fetch, which this server registers with the shapes OpenAI documents.
Responses API request
{
"model": "gpt-5",
"tools": [
{
"type": "mcp",
"server_label": "enrichments",
"server_url": "https://www.enrichments.io/api/mcp",
"authorization": "Bearer ek_live_xxxxxxxxxxxxxxxxxxxx",
"require_approval": "never"
}
],
"input": "Find heads of platform engineering at German fintech companies."
}
Adding the server through the ChatGPT app's connector dialog is not supported yet: that flow expects the server to authenticate over OAuth, and the authorization-code flow is not available here. Use a client that can send a fixed Authorization header.
Codex
Codex reads its servers from ~/.codex/config.toml. The stdio form works on every version; a build with direct remote Streamable HTTP support can use the endpoint and header instead.
~/.codex/config.toml
[mcp_servers.enrichments]
command = "npx"
args = [
"-y", "mcp-remote", "https://www.enrichments.io/api/mcp",
"--header", "Authorization: Bearer ek_live_xxxxxxxxxxxxxxxxxxxx",
]
What the server will refuse
- Mobile numbers are available as the `phone` field and billed per number found. 15 common aliases — mobile, cell, direct dial, telephone and the rest — resolve to it rather than failing. Unlike an email address a number carries no deliverability verdict, because nothing checks a phone the way a mailbox can be checked.
- A phone number being available is not advice that it is lawful to call. Obligations under TCPA, DNC registries and local consent rules are the caller's.
- The field catalogue is closed. A request for anything outside the 12 people fields is a validation error, not an empty column.
- Email addresses are work addresses found from public sources. Personal contact details are not part of the catalogue.
- Enrichment is live rather than a licensed static database, so the same query can legitimately return different data tomorrow.
The refusals are validation errors at the edge with a sentence explaining them, not empty columns — an agent that asks for a phone number is told plainly that there is no phone field, which is what stops it retrying in a loop.
Questions
What is the Enrichments MCP server URL?
https://www.enrichments.io/api/mcp. It speaks the Model Context Protocol over Streamable HTTP and authenticates with an Enrichments API key sent as an Authorization: Bearer header.
Which tools does the MCP server expose?
7 tools: search_people, enrich_people, search_companies, enrich_companies, get_job, search, fetch. The last two are aliases required by ChatGPT Deep Research; other clients can ignore them.
Can I connect it to Claude?
Yes. A Claude client that accepts a remote connector URL can point straight at the endpoint and supply the API key as an Authorization header. Claude Desktop, which reads a local config file, connects through the mcp-remote stdio bridge.
Can I connect it to ChatGPT?
Yes, by declaring the server inline on a Responses API request with the API key in the authorization field. The ChatGPT app's own connector dialog is not supported yet, because that flow expects the server to authenticate over OAuth and the authorization-code flow is not available here.
Does calling the MCP tools cost credits?
The search and enrich tools spend credits, charged only for data actually returned; polling a job and fetching a record you already paid for are free. Each tool advertises this to the client through the MCP read-only hint, so a client that auto-approves read-only tools cannot spend your balance unattended.
Does the MCP server return phone numbers?
Mobile numbers are returned as the `phone` field, billed per number found, and never carry a deliverability verdict.
Prices per delivered unit are on pricing; the REST contract is on the API reference.