Skip to main content

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:

EnvironmentURL
Productionhttps://backend.ecoreservice.com/api/v1/mcp
Testhttps://test.ecoreservice.com/backend/api/v1/mcp
note

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.

ToolTypeDescriptionArgumentsCost
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, offsetFree
search_companies🔵Search unique companies/accounts by industry, size, revenue, HQ location.industry, company_name, contact_office_country, employee_range, revenue_range, limit, offsetFree
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_website1 on success
enrich_phone🟠Find a person's phone from LinkedIn URL, email, or name + company.linkedin_url, email, or name + company5 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 + company1 (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 email1 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 emailsVariable (per validated email)
check_email_validation_status🔵Poll a validate_emails job for status and results.job_idFree

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

ActionCost
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 + phoneup to 7 credits
tip

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" }
}
note

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.