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:
claude mcp add --transport http leadocean https://api.leadocean.io/mcp
claude mcp login leadoceanCursor. Add a remote server to mcp.json, in the url form shown in the Cursor MCP docs, September 2026:
{
"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.
| Input | Type | Meaning |
|---|---|---|
linkedin_url | URL | LinkedIn profile URL. The preferred key. |
email | string | Work email. Use it when you want the person behind an address. |
phone | string | A number in any common format. Reverse lookup: who is this. |
person_id | digits | The id from meta.source_ids.person_id on a search row. Reaches people with no LinkedIn URL. |
reveal_email | boolean | Default 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
| Prompt | What the agent calls | Records |
|---|---|---|
| "Enrich this LinkedIn profile and give me the work email, its status and the current title." | get_lead with linkedin_url, reveal_email true | 1 |
| "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_id | 10 at most |
| "Who owns +1 415 555 0100? Stop if we hold nothing." | get_lead with phone | 1 |
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.
{
"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
| Error | Cause | Fix |
|---|---|---|
| 401 | The OAuth sign-in is missing or expired. | Run /mcp in Claude Code and re-authenticate. In Cursor, sign in again from the MCP settings. |
| 402 | The free 1,000 records are spent. The free plan is one-off and does not reset. | Move to Pro at $499 a month. |
| 429 | Over 100 requests per second per key. | Wait the Retry-After seconds, then retry. Ask the agent to work in small batches. |
| 404 | We hold nothing for that person. | Costs nothing. Try another identifier or move on. |
| Wrong enum | A 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 →