Tools & Protocol
The developer view of the eCore MCP server: the JSON-RPC protocol, the full tool list with arguments and credit costs, and worked examples. To connect a client, see Connect.
Endpoint
| 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. The connector handles this once you paste the URL.
Authentication
OAuth 2.0 (Authorization Code + PKCE), auto-discovered from <server-url>/.well-known/oauth-authorization-server. On success the server issues your eCore API token, sent as Authorization: Bearer <token> on every tool call. Direct API callers may also use Authorization: Token <api_token> — the same scheme as the REST API.
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 }
}
}
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.
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.
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/" }
}
}
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.