TL;DR
- You connect LeadOcean to VS Code chat once, then ask for the C-level and VP people at any company domain.
- It takes about 10 minutes the first time and about 3 after that.
- A full run spends 12 LeadOcean records: 10 for the search, 2 for enriching the people you pick. Counting is free.
Prerequisites
- A LeadOcean account. Start free: no card, 1,000 records one-off, work email required.
- VS Code with chat set up. The VS Code MCP docs, October 2026, describe how servers are added.
- Optional, for the script in Step 6:
$LEADOCEAN_API_KEYin your shell andcurl.
You paste no API key into VS Code. The MCP server uses OAuth sign-in. Full client setup is on Connect LeadOcean to VS Code.
Step 1: Add the LeadOcean server to mcp.json
Create .vscode/mcp.json in your project with one http server. VS Code's config key is servers.
{
"servers": {
"leadocean": {
"type": "http",
"url": "https://api.leadocean.io/mcp"
}
}
}Do not add a headers entry. There is no key or token to paste.
Step 2: Sign in and check the tools
Run MCP: List Servers from the Command Palette, pick leadocean and choose Start Server. Approve the sign-in in your browser, then return to VS Code.
Open the Configure Tools button in the chat input. You should see 13 tools. Seven of them are free, and leadocean_count_leads is the one you use next.
Step 3: Size the decision makers before you pull anyone
Ask for a count first. Counting costs 0 records, so you can tune the filters as often as you like. Open chat, switch to Agent mode and send:
Use the leadocean tools only. How many C-Team and VP people in
Finance & Accounting are in the US? Count only. Do not pull anyone.The agent calls leadocean_count_leads with these arguments:
{
"jobLevel": ["C-Team", "VP"],
"jobFunction": ["Finance & Accounting"],
"country": ["US"],
"facets": false
}The values are exact strings. If the agent guesses one, tell it to call leadocean_list_enum_values first.
Step 4: Search one company by domain
Now point the same levels at one company. Use the domain, not the company name. Names match loosely, and a domain matches the employer exactly.
Use the leadocean tools only. Find decision makers at acme.com:
C-Team and VP level people. Call leadocean_search_leads with limit 10.
Show title, level and whether an email is on file. Do not enrich anyone yet.The tool call looks like this:
{
"domain": ["acme.com"],
"jobLevel": ["C-Team", "VP"],
"limit": 10
}This spends up to 10 records, one per person returned. A small company returns fewer. Swap acme.com for the domain you care about.
Step 5: Enrich the two people you want
Search rows carry a person_id. Enriching by that id reaches a person with no LinkedIn URL. Ask the agent to enrich only the people you picked:
Enrich the CFO and the VP of Finance from that list with
leadocean_get_lead using their person_id. Show the work email and its
email_status. Tell me how many records this call spent.Each enrichment costs 1 record. A person we hold nothing for is a miss, and a miss costs nothing. Read email_status before you send anything. Bounced emails are not refunded.
Step 6: Run the same search from the VS Code terminal
The agent calls the same API you can call yourself. Use this when you want the list in a file instead of a chat. The search body is flat JSON, and filters are arrays.
curl -s -X POST https://api.leadocean.io/v1/people/search \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": ["acme.com"], "jobLevel": ["C-Team", "VP"], "limit": 10}'Enrich one person with the id from the search row:
curl -s -X POST https://api.leadocean.io/v1/people/enrich \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"person_id": "1234567890", "reveal_email": true}'Enrich takes exactly one of linkedin_url, email, phone or person_id. To list everyone we hold at a company instead, use GET /v1/companies/acme.com/people, which bills one record per person returned.
What you get
The count in Step 3 is a live result. We ran it on 2026-10-21 through the LeadOcean MCP server (trimmed):
{
"total": 201499,
"totalIsExact": true,
"totalAll": 607760,
"distinctCompanies": 92341,
"credits": 0,
"defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all), which is this tool's default."
}That is 201,499 mailable C-Team and VP finance leaders in the US, with a verified, catch_all_valid or catch_all email. It cost 0 records. With no email condition the same filters match 607,760 people. A REST count with count=true caps meta.total at 100,000, so use the MCP tool for a number this size.
For one company, the people come back in the response shape from the API reference. These are placeholder values, not a real person:
{
"success": true,
"data": [
{
"profile_data": { /* name, title, company for Jane Doe at acme.com */ },
"contact_data": {
"has_email": true,
"has_phone": true,
"email_status": "verified",
"email_type": "work"
},
"meta": { "source_ids": { "person_id": "1234567890" } }
}
],
"meta": { "count": 1, "nextCursor": null }
}Search shows flags such as has_email, not the address. Enrich with reveal_email set to true returns contact_emails and contact_phones, a phone looking like +1 415 555 0133, at no extra record.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key header on a script call, or the MCP sign-in was not approved. | Check $LEADOCEAN_API_KEY, or restart the server from MCP: List Servers and approve again. |
| 402 | Free plan: the 1,000 records are spent. | Check leadocean_get_account, or move to Solo at $97 a month. |
| 429 | Above your plan's rate: 5 requests a second on Free, 200 on Agency. | Wait a second and retry. Add a short delay between calls. |
| Empty results | An enum value is not an exact string, such as VP of Finance for jobLevel. | Call leadocean_list_enum_values and copy the value. Use title for free-text job titles. |
| 404 on enrich | We hold no person for that identifier. | Search by domain first, then enrich by person_id. A 404 costs nothing. |
| Export refused | A bulk pull is past 50,000 rows a request or 500,000 a day. | Split the pull into smaller exports across days. |
FAQ
How many decision makers will I find at one company?
It depends on company size. A 10-person startup may return two or three C-level people, and a large company can fill the 10-row limit. Page with cursor for more, and each extra person costs 1 record.
Do I need Copilot to do this?
The VS Code MCP docs, October 2026, name no paid plan for adding an MCP server. They say your organization can restrict which servers are available, so ask your admin if LeadOcean is blocked.
What counts as a decision maker?
Use jobLevel set to C-Team and VP as the base. Add Director for mid-market accounts. Add jobFunction or title when you want one buyer, such as a head of RevOps.
Is the agent's answer always right?
Check the tool call before you accept it. Confirm the domain, the levels and the limit. A wrong limit is the usual way to spend more records than you planned.
Find the decision makers at your next target account, free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →