Enrichment MCP

Enrich Person with MCP

Give Claude or Cursor a LinkedIn URL, work email, phone or person_id and the agent calls get_lead for you. One URL, OAuth sign-in, 1 record per found person.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

Give Claude or Cursor a LinkedIn URL, work email, phone or person_id and the agent calls get_lead for you. One URL, OAuth sign-in, 1 record per found person.

This page is about setup and prompts. For the REST endpoint and the full schema, see Enrich Person. Other clients are on the MCP hub.

Connect the server

The server is https://api.leadocean.io/mcp. It signs in with OAuth 2.1, so there is no key to paste. Create a free account first.

Claude Code. The command format is from the Claude Code MCP docs, September 2026:

bash
claude mcp add --transport http leadocean https://api.leadocean.io/mcp
claude mcp login leadocean

Cursor. Add a remote server to mcp.json, in the url form shown in the Cursor MCP docs, September 2026:

json
{
  "mcpServers": {
    "leadocean": {
      "url": "https://api.leadocean.io/mcp"
    }
  }
}

Cursor starts the sign-in the first time the server is used. In the Claude app, add the URL under Settings, Connectors. Other clients are in the LeadOcean MCP docs.

The tool

The tool is get_lead. The server lists it as leadocean_get_lead. It costs 1 record per found person, with or without reveal_email. The REST twin is POST /v1/people/enrich.

InputTypeMeaning
linkedin_urlURLLinkedIn profile URL. The preferred key.
emailstringWork email. Use it when you want the person behind an address.
phonestringA number in any common format. Reverse lookup: who is this.
person_iddigitsThe id from meta.source_ids.person_id on a search row. Reaches people with no LinkedIn URL.
reveal_emailbooleanDefault false. True returns every email and phone we hold, at no extra record.

Send exactly one identifier. Two is a 400. There is no name plus company lookup, so the agent searches first and then enriches by person_id.

Prompts that work

PromptWhat the agent callsRecords
"Enrich this LinkedIn profile and give me the work email, its status and the current title."get_lead with linkedin_url, reveal_email true1
"Find 5 VPs of Sales in Canada at companies with 51-200 staff. Enrich the ones that have an email."count_leads, search_leads with limit 5, then get_lead with person_id10 at most
"Who owns +1 415 555 0100? Stop if we hold nothing."get_lead with phone1

Put the record limit in the prompt. "Stop after 25 records" is enough for the agent to hold a batch. Ask it to check has_email and has_phone on search rows first, since a row with both false has nothing to return.

What the agent gets back

The result is one leadocean.person.v1 object plus a meta block. Field groups are from the enrich docs, September 2026. Values below are placeholders.

json
{
  "person": {
    "profile_data": {
      "profile_full_name": "Jane Doe",
      "profile_headline": "Title at Company",
      "profile_url": "https://www.linkedin.com/in/jane-doe"
    },
    "contact_data": {
      "has_email": true,
      "email_status": "verified",
      "email_type": "work",
      "contact_emails": [
        { "email": "jane@example.com", "type": "work", "status": "verified", "verified_batch_date": "YYYY-MM-DD" }
      ],
      "contact_phones": [{ "phone": "+1 ...", "type": "mobile" }],
      "contact_current_experiences": [
        { "company_name": "Company", "company_domain": "example.com", "job_title": "Title" }
      ]
    },
    "resume_data": {}
  },
  "meta": { "source": "...", "key_hash": "...", "schema": "leadocean.person.v1" }
}

Emails and phones appear only with reveal_email true. Unknown values are null, never guessed. Over MCP, resume_data is empty today, per the server's own tool description, so do not ask the agent for career history.

Read email_type and email_status before sending. work is the current employer, work_other is usually an old one. Send to verified or catch_all_valid. There is no credit-back for bounces.

Free checks first

count_leads, list_enum_values and get_account spend no records. Run them before any paid call.

We ran count_leads with jobLevel: ["VP"], jobFunction: ["Sales & Business Development"] and country: ["US"] on 2026-10-01. It returned total: 115336, totalIsExact: true, credits: 0. That counts mailable people (verified, catch_all_valid or catch_all), not everyone we hold. Size the list first, then enrich only the people you will contact.

Troubleshooting

ErrorCauseFix
401The OAuth sign-in is missing or expired.Run /mcp in Claude Code and re-authenticate. In Cursor, sign in again from the MCP settings.
402The free 1,000 records are spent. The free plan is one-off and does not reset.Move to Pro at $499 a month.
429Over 100 requests per second per key.Wait the Retry-After seconds, then retry. Ask the agent to work in small batches.
404We hold nothing for that person.Costs nothing. Try another identifier or move on.
Wrong enumA filter value is not in the catalogue, for example a made-up job function.Call list_enum_values with a search term and use the exact string it returns.

FAQ

Do I need an API key for MCP?

No. The MCP server uses OAuth sign-in. The REST API uses an x-api-key header. Both draw on the same records, and Free includes both.

What does a call cost, and what does a miss cost?

A found person costs 1 record, and reveal_email adds nothing. A miss costs nothing, over MCP or REST. The REST endpoint returns a 404, and get_lead finding nobody is not charged either.

Can the agent enrich by name and company?

No. It needs a LinkedIn URL, email, phone or person_id. With a name and a domain, the agent searches by domain, picks the row, then calls get_lead with its person_id. For the company side, see enrich company with MCP.

The free plan is 1,000 records, one-off, no card. For a packaged version of these steps, see the Enrich Person skill.

Enrich your first person from Claude, free

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →