Integrations
MCP server (any client)
LeadMarina's MCP server: endpoint, tools, auth, and config for any MCP-compatible tool.
POST/api/mcp
LeadMarina on the Model Context Protocol
The Model Context Protocol (MCP) is an open standard for connecting AI applications to external systems. Anthropic open-sourced it in November 2024; OpenAI adopted it across its products in March 2025; and in December 2025 the protocol moved to the Agentic AI Foundation, a directed fund under the Linux Foundation co-founded by Anthropic, Block, and OpenAI. It now has first-class support in Claude, ChatGPT, Cursor, VS Code, and other major AI clients.
An MCP server exposes typed tools over JSON-RPC 2.0. The client — your AI application — discovers them with tools/list, reads each tool's JSON Schema, and lets the model invoke them with tools/call. LeadMarina implements the server side of that contract: seven tools that search, verify, query, and export local-business leads, so an agent can run your prospecting pipeline instead of you clicking through a UI.
Connecting
The server runs at https://leadmarina.com/api/mcp over streamable HTTP, the spec's remote transport: a single endpoint, HTTP POST per JSON-RPC message, Server-Sent Events when a response streams. There is nothing to install locally — add the URL wherever your client configures MCP servers (a connector in Claude or ChatGPT, an entry in Cursor's mcp.json, an MCP server in VS Code).
Authentication works two ways:
- OAuth 2.1. On first contact the server returns 401 with a
WWW-Authenticateheader pointing at its protected resource metadata (RFC 9728). Clients that support dynamic client registration (RFC 7591) register themselves, open a browser window for consent, and complete the PKCE flow automatically. From your side this is: paste the URL, click Authorize. - API-key headers. For headless agents or clients without OAuth support, pass a LeadMarina API key — the same bearer keys the REST API uses, available on every plan including free.
The seven tools
search_leads— start a search with one niche and one city per call. It returns asearch_idand the first batch of leads immediately; more results are found and verified in the background. For multiple cities, the agent simply makes one call per city.get_search_results— retrieve the delivered leads for a search; poll it until enrichment reportscompleteto collect everything the background pipeline delivers.query_leads— filter and read leads you already own. Free: it never draws on your lead balance.enrich_domains— submit up to 10 domains you already hold per call and get back the same fully verified profile, one lead per domain.export_leads— push leads to Close, GoHighLevel, Google Sheets, or a CSV/Excel/JSON file. Pass asearch_idto export one search, orall=trueto export from your whole library (capped at 1,000 leads per call), optionally narrowed with the same filter rowsquery_leadsuses. File exports return a download link and email you the file.list_searches— list your recent searches with their ids, lead counts, and dates.get_balance— check remaining leads before committing to a large search.
Every delivered lead is fully verified: up to three emails SMTP-checked and labeled safe/risky/invalid; up to three phones with line type (mobile, landline, VoIP, toll-free) and carrier; owner name where identifiable; Facebook, Instagram, LinkedIn, X, YouTube, TikTok, and Yelp profiles; ratings, reviews, and the full business profile. Billing is a single meter: one lead = one delivered fully verified business.
Searches are asynchronous
search_leads doesn't block while the pipeline runs. Each call returns a search_id and the first batch of results immediately; LeadMarina keeps finding and verifying more businesses in the background. Your agent polls get_search_results with that search_id until the enrichment status reads complete — at that point every lead in the search has been delivered and fully verified. The tool schemas describe this contract, so a capable model works out the poll loop on its own.
A typical session
Say you prompt your agent: "Check my balance, then find plumbers in Austin, Dallas, and Houston with a safe email and a mobile number, and push them into Close."
get_balanceconfirms headroom.search_leadsruns three times — one niche and one city per call — each returning asearch_idand a first batch of leads immediately.get_search_resultsis polled for eachsearch_iduntil enrichment readscomplete, returning the verified businesses.query_leadsnarrows to leads whose email is labeled safe and whose phone line type is mobile.export_leadssends the shortlist to Close — the agent passes eachsearch_idalong with the same filter rows, so only the safe-email, mobile-number leads go across.
Because each tool's schema describes its fields, the model composes these steps itself — you describe outcomes, not calls.
Update and dedupe semantics
All exports update in place, matched by a stable Google business identifier. Re-exporting never creates duplicates and never touches data you created: notes, activities, custom fields, extra rows, and formatting are left alone; in GoHighLevel, tags are additive-only.
- Close: connect via OAuth. The first export opens a field-mapping dialog — native fields map to Close built-ins, everything else to custom fields LeadMarina auto-creates named after its columns. The mapping is saved and tracked by Close field ID, so renaming a field in Close does not break it.
- Google Sheets: export to a new spreadsheet or one LeadMarina created before. All columns export; columns you hide arrive hidden but still update. Row identity lives in a hidden column.
Scheduling
Any search can repeat once, daily, weekly, monthly, or yearly with any export destination. Schedules are created and run inside the LeadMarina app; from MCP, list_searches surfaces each run as it lands — with its id, lead count, and date — and get_search_results pulls the latest run's leads into your agent's context — useful for a weekly agent that reviews fresh leads before they reach your CRM.
Troubleshooting
- 401 on the first request is expected — it starts OAuth discovery. If your client stalls at registration, it may lack dynamic client registration support; switch to an API key.
- Client can't add the server: it must support remote MCP servers over streamable HTTP. If yours doesn't, the REST API covers searching, enrichment, and reading your results with the same bearer keys on every plan — note that it has no export endpoint, so exports run through MCP or the web app.
- Balance exhausted: the free plan includes 100 leads; paid plans are 15,000, 65,000, or 240,000 leads per month.
query_leadsstays free either way, so agents can keep working with leads you already own.
Also listed on: the official MCP Registry and Glama.
