Developers
MCP Server
Radar Leads exposes a Model Context Protocol (MCP) server, so any MCP-compatible AI agent — Claude, ChatGPT, Cursor, Windsurf and others — can search 250M+ B2B contacts, reveal verified emails and phone numbers, manage lead lists and export CSVs on your behalf.
Requirements
MCP access is available on all paid plans. Generate an API key from the AI Agent page in your dashboard once you are on a paid plan — you can hold up to five active keys at a time, and any key can be revoked instantly.
Connecting
The server speaks streamable HTTP MCP at https://radarleads.io/api/mcp. Authenticate with your API key as a bearer token. Add the following to your agent's MCP configuration:
mcpServers:
radarleads:
url: https://radarleads.io/api/mcp
headers:
Authorization: "Bearer YOUR_API_KEY"Every request must carry Authorization: Bearer <your-api-key>. Requests without a valid, unrevoked key are rejected with 401. Your key scopes every call to your own organisation.
Tools
Searching is always free — you only spend credits when you reveal a lead, at 1 credit per newly revealed contact. Leads your organisation has already revealed are free forever.
search_leadsFreeSearch the database and get a total count plus masked previews (names, titles and companies visible; emails and phones hidden). Supports cursor pagination via search_after. Use it to check volume before spending credits.
Arguments: filters, pageSize (1–100, default 25), search_after
reveal_leads1 credit per newly revealed leadStarts a job that unlocks real contact details for up to N leads matching your filters. Leads your organisation already owns are returned free. Returns a revealJobId immediately — it does not wait for the job to finish.
Arguments: filters (required), n (required, 1–50000), listId (optional)
check_reveal_statusFreeFetches the result of a reveal job. Credits are only debited and leads only saved once this returns status "finished". If it returns "processing", call it again after a short wait.
Arguments: revealJobId (required), filters, n, listId
list_lead_listsFreeLists every saved lead list for your organisation with lead counts and IDs. Use the returned IDs with reveal_leads or export_leads.
Arguments: none
create_lead_listFreeCreates a new named lead list and returns its ID. List names must be unique within your organisation.
Arguments: name (required)
export_leadsFree (leads must already be revealed)Starts a CSV export job for a list, or for all owned leads if no list is given. Supports exporting a range. Returns an exportJobId immediately.
Arguments: listId, listName, rangeFrom, rangeTo, customName
check_export_statusFreeFetches the result of an export job. Returns a download URL once ready. Download URLs expire after 24 hours.
Arguments: exportJobId (required)
get_creditsFreeReturns your current credit balance broken down by pool: plan credits, rollover credits and purchased extra credits, plus the total available.
Arguments: none
Asynchronous jobs
Both reveal_leads and export_leads start background jobs and return an ID immediately rather than blocking. Follow each with its matching status call — check_reveal_status or check_export_status. Those calls wait briefly server-side, so most jobs resolve on the first check. If one returns status: "processing", simply call it again with the same arguments.
Nothing is charged until a reveal reaches status: "finished". A job that never completes never costs credits.
Filters
All filters are optional. Different filters are ANDed together; multiple values within one filter are ORed. Field names must match exactly — unrecognised names are ignored silently.
Person
Company
Contact availability
Match modes
Example filter object
VPs of Sales at US software companies with 51–500 employees and verified deliverable emails:
{
"personTitleIncludes": ["VP of Sales", "VP Sales", "Head of Sales"],
"seniority": { "anyOf": ["vp"] },
"companyCountry": { "anyOf": ["United States"] },
"companySize": { "anyOf": ["51-200", "201-500"] },
"companyIndustry": { "anyOf": ["Software"] },
"emailStatus": { "anyOf": ["deliverable"] }
}Zero results
When a search returns no matches, the response includes a _diagnosis object explaining why. It reports which single filter is most responsible, how many results you would get if it were removed, and whether the filters are merely narrow or actually contradictory — so your agent can suggest a fix rather than simply reporting failure.
Support
Questions about the MCP server or your integration: [email protected]