MCP Server
The eCore MCP (Model Context Protocol) server lets an AI assistant — ChatGPT, Claude, Attio, or any MCP-capable client — talk to eCore DataCore directly for B2B contact search, unlock, and enrichment. Paste one URL into your assistant's connector settings and it can search, unlock, and enrich contacts on your behalf.
1. Connect
Register this base URL as an MCP server / connector:
| Environment | URL |
|---|---|
| Production | https://backend.ecoreservice.com/api/v1/mcp |
| Test | https://test.ecoreservice.com/backend/api/v1/mcp |
It's a single endpoint. POST carries JSON-RPC (initialize, tools/list, tools/call); GET opens the SSE stream. Your MCP connector handles all of this automatically once you paste the URL.
2. Authentication
Authentication is OAuth 2.0 (Authorization Code + PKCE) and is auto-discovered — clients fetch metadata from <server-url>/.well-known/oauth-authorization-server, then run the login flow:
- Sign in with Google, Salesforce, or email + password.
- On success the server issues your eCore API token, which the connector sends as
Authorization: Bearer <token>on every tool call.
Direct API callers may also use Authorization: Token <api_token> — the same token scheme used across the REST API.
3. Protocol
Standard MCP JSON-RPC 2.0. List the available tools:
POST /api/v1/mcp
Authorization: Bearer <token>
Content-Type: application/json
{ "jsonrpc": "2.0", "id": 1, "method": "tools/list" }
Call a tool:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "search_contacts",
"arguments": { "industry": "Software", "job_level": "C Level", "limit": 10 }
}
}
4. Tools
Ten tools. Legend: 🔵 read-only (free) · 🟠 consumes credits · 🟢 batch.
| Tool | Type | Description | Arguments | Cost |
|---|---|---|---|---|
search_contacts | 🔵 | Search DataCore for B2B contacts. Email & phone stay hidden until unlocked. | industry, job_title, job_level, company_name, contact_office_country, employee_range, revenue_range, limit, offset | Free |
search_companies | 🔵 | Search unique companies/accounts by industry, size, revenue, HQ location. | industry, company_name, contact_office_country, employee_range, revenue_range, limit, offset | Free |
unlock_contacts | 🟠 🟢 | Reveal email or phone for contacts you already have (by UUID). | uuids (array, required), unlock_type: "email" | "phone" (required) | 1 / email · 5 / phone |
enrich_email | 🟠 | Find a person's email from a LinkedIn URL, or name + company. | linkedin_url, or first_name + last_name + company_name/company_website | 1 on success |
enrich_phone | 🟠 | Find a person's phone from LinkedIn URL, email, or name + company. | linkedin_url, email, or name + company | 5 on success |
enrich_contact | 🟠 | Email and phone in a single lookup. Charges only for what's found and what your balance covers. | linkedin_url, email, or name + company | 1 (email) + 5 (phone), only for fields returned |
enrich_profile | 🟠 | Full enrichment — name, title, company, company website, location, work history, plus email + phone. Resolves the professional profile and looks up contact data. | linkedin_url, or first_name + last_name + company_name (URL resolved automatically), optional email | 1 profile + 1 email (if found) + 5 phone (if found), balance permitting |
check_wallet | 🔵 | Return your current eCore credit balance. | — | Free |
validate_emails | 🟠 🟢 | Batch-validate a list of email addresses. Starts an async job and returns a job id. | list of emails | Variable (per validated email) |
check_email_validation_status | 🔵 | Poll a validate_emails job for status and results. | job_id | Free |
The search_* and enrich_* tools mirror the Search, Unlock, Email/Phone Enrichment, and Email Validation REST endpoints. Filter values (industry, job_level, employee_range, revenue_range) follow the Filter Values reference.
5. Credits
| Action | Cost |
|---|---|
| Search (contacts / companies) | Free |
| Email (unlock or enrich) | 1 credit |
| Phone (unlock or enrich) | 5 credits |
Profile enrichment (enrich_profile) | 1 credit |
| Full profile with email + phone | up to 7 credits |
You are only charged for data actually returned, and never beyond your balance — if your credits don't cover a phone, the phone simply isn't included (and isn't billed). See Credit Costs.
6. Examples
Enrich a full profile by LinkedIn URL
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "enrich_profile",
"arguments": { "linkedin_url": "https://www.linkedin.com/in/janedoe/" }
}
}
Returns name, title, company, company website, location, work history, and — if found — email & phone, with a credits-charged summary.
Enrich by name + company (URL resolved automatically)
{
"name": "enrich_profile",
"arguments": { "first_name": "Jane", "last_name": "Doe", "company_name": "Acme" }
}
Search, then unlock
// 1) search_contacts -> returns contacts with UUIDs (email/phone hidden)
// 2) unlock_contacts:
{
"name": "unlock_contacts",
"arguments": { "uuids": ["<uuid1>", "<uuid2>"], "unlock_type": "email" }
}
For bulk / asynchronous enrichment over many records, use the one-flow Pipeline API (POST /api/v1/pipeline/) instead of calling the enrich tools one by one.