accueil / serveurs / Données & BDD / com.leadmarina/leadmarina
com.leadmarina/leadmarina
serveur MCP (Model Context Protocol) · leadmarina 1.3.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que com.leadmarina/leadmarina est sûr ?
Au dernier audit MCP Hub, le serveur MCP « com.leadmarina/leadmarina » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 13 outils
- create_automation≈ 650 tokens
Create an automation: re-run a search on a schedule and send the results somewhere automatically. Pass cities as plain strings (e.g. ['Austin, TX', 'Dallas, TX']) — they're resolved for you. IT SPENDS LEADS ON EVERY RUN, one per result, so confirm the niche, cities and cadence with the user before creating one. A destination of 'close', 'ghl' or 'google_sheets' requires that integration to be connected already (Close also needs one manual export first to save its field mapping); 'csv' | 'xlsx' | 'json' emails a file and needs nothing set up. Every city must resolve and the destination must be one of the listed values, or nothing is created and the error says what to fix. Up to 20 automations, 25 cities each. Automations search US places only for now: a city outside the US is refused.
Paramètres, retour & exemple (6)
Paramètrescities· array · requis
Cities to search, e.g. ['Austin, TX'] (max 25).cadence· string · requis · once | daily | weekly | monthly | yearly
How often it repeats.keyword· string · requis
The niche to search, e.g. 'roofing contractor'.start_at· string · optionnel
ISO timestamp for the first run. Defaults to now (runs on the next tick, within 15 min).destination· string · optionnel · none | close | ghl | google_sheets | csv | xlsx | json
Where each run's leads go. 'none' just saves them to the library.spreadsheet_id· string · optionnel
google_sheets only: add each run to this existing LeadMarina-created sheet, updating rows already in it.
Exemple d'appel{"name": "create_automation", "arguments": {"cities": [], "cadence": "once", "keyword": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"id": "texte", "note": "texte", "cities": [], "cadence": "texte", "keyword": "texte", "destination": "texte", "next_run_at": "texte", "data_sources": "texte"}} - delete_automation≈ 200 tokens
Permanently delete an automation. This cannot be undone — confirm with the user first, and prefer update_automation with active=false if they only want it to stop for now. Leads already collected by past runs are kept; only the schedule is removed.
Paramètres, retour & exemple (1)
Paramètresid· string · requis
The automation id from list_automations.
Exemple d'appel{"name": "delete_automation", "arguments": {"id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"id": "texte", "note": "texte", "deleted": true}} - enrich_domains≈ 331 tokens
Already have businesses? Pass up to 10 website domains to run the full enrichment + verification pipeline on them (verified emails + phones, owner name, socials). Costs 1 lead per distinct domain — spellings of the same site (acme.com, www.acme.com, https://acme.com/contact) count once. Returns a search_id to poll with get_search_results. US businesses only for now: their phones are read as US numbers.
Paramètres, retour & exemple (1)
Paramètresdomains· array · requis
Business domains, e.g. ['acme.com'] (max 10).
Exemple d'appel{"name": "enrich_domains", "arguments": {"domains": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"note": "texte", "enriching": [], "next_step": "texte", "search_id": "texte", "enrichment": "texte"}} - export_leads≈ 1149 tokens
Push leads into a connected destination: 'close' (CRM — uses the account's saved field mapping), 'ghl' (GoHighLevel sub-account), 'google_sheets' (new spreadsheet, or pass spreadsheet_id for one LeadMarina created before), or a file — 'csv' | 'xlsx' | 'json' (a 7-day download link, also emailed to the account owner when the file is small enough to attach). Exports EITHER one search's leads (pass search_id) or the whole library (set all=true). Either can be narrowed with the same filter rows as query_leads — with search_id they apply within that search. Leads go out best-ranked first (rank, then id), the order of the leads table. LIMITS PER CALL, which differ by destination because CRMs take one API call per lead: csv/xlsx 50,000 · json 25,000 · google_sheets 5,000 · close/ghl 1,000. For a big library going to a CRM, export csv and import the file instead. If more leads match than the limit, the response sets truncated=true and returns next_cursor — relay that to the user, the export was partial; to send the next batch, call export_leads again with the SAME destination, search_id or all, and filters, plus cursor=next_cursor. A next_cursor with not_sent means the destination's time limit cut this batch short: the same call with that cursor sends the rest. An all=true export spread over several calls reads the library live, so a lead that a search running between calls finds again can be skipped or sent twice; for one consistent copy, export the library in a single csv/xlsx (up to 50,000 leads) or json (up to 25,000) call while no search is running. Close, GoHighLevel and a LeadMarina-created sheet passed as spreadsheet_id UPDATE previously exported leads in place (matched by Google CID), never touching the user's own CRM notes/columns; a file or a new sheet is a fresh copy every time — so do not repeat a call that succeeded.
Paramètres, retour & exemple (6)
Paramètresall· boolean · optionnel
Export the whole library instead of one search.cursor· string · optionnel
Continue an export: the next_cursor a previous export_leads call returned. Pass it with the same search_id/all and filters.filters· array · optionnel
Optional query_leads-style filter rows: within the search when search_id is given, across the library with all=true.search_id· string · optionnel
Export this search's leads.destination· string · requis · close | ghl | google_sheets | csv | xlsx | json
Where the leads go.spreadsheet_id· string · optionnel
google_sheets only: add to this existing LeadMarina-created sheet instead of a new one.
Exemple d'appel{"name": "export_leads", "arguments": {"destination": "close"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"file": "texte", "note": "texte", "limit": 1, "outcome": "texte", "warning": "texte", "exported": 1, "not_sent": 1, "truncated": true, "next_cursor": "texte", "data_sources": "texte", "download_url": "texte"}} - get_balance≈ 188 tokens
What the account has left, and when it resets. On a plan with a rate limit (no monthly quota) this is the leads left in the current 7-day period; on a metered plan it is the monthly allotment remaining.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "get_balance", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"note": "texte", "plan": "texte", "period_used": 1, "period_limit": 1, "leads_remaining": 1, "period_resets_at": "texte"}} - get_search_results≈ 1242 tokens
Fetch a search's leads with verification filled in as enrichment progresses. Poll until enrichment is 'complete'. Each lead includes verified emails (SMTP status), verified phones (line type + carrier), owner name where identified, socials, and the business profile.
Paramètres, retour & exemple (3)
Paramètreslimit· number · optionnel
Max leads to return (default 25, max 1000).offset· number · optionnel
Pagination offset (default 0).search_id· string · requis
The search_id returned by search_leads or enrich_domains.
Exemple d'appel{"name": "get_search_results", "arguments": {"search_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"query": "texte", "stage": "texte", "period": {}, "results": [], "showing": "texte", "location": "texte", "progress": {}, "search_id": "texte", "enrichment": "texte", "next_offset": 1, "total_leads": 1, "data_sources": "texte"}} - list_automations≈ 310 tokens
The account's automations — saved searches that re-run on a schedule and export themselves. Shows each one's niche, cities, cadence, destination, whether it's active, when it next runs, and how the last run went.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_automations", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"count": 1, "automations": [], "data_sources": "texte"}} - list_integrations≈ 260 tokens
Which export destinations this account has connected (Close, GoHighLevel, Google Sheets) and whether each is ready to receive leads. Check this BEFORE export_leads or create_automation with a CRM destination — those fail if the integration isn't connected, and Close additionally needs one manual export first to save its field mapping. File destinations (csv/xlsx/json) always work and need nothing connected.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_integrations", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"integrations": []}} - list_searches≈ 205 tokens
The account's recent searches (id, niche, location, result count, when) — use a search_id with get_search_results or export_leads.
Paramètres, retour & exemple (1)
Paramètreslimit· number · optionnel
Max searches (default 10, max 25).
Exemple d'appel{"name": "list_searches", "arguments": {"limit": 1}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"searches": []}} - list_views≈ 231 tokens
The account's saved views from the leads table — each a named set of filters the user already built (e.g. 'Roofers with a mobile number'). Returns each view's filter conditions in the exact shape query_leads and export_leads accept, so "export my Hot Leads view to Close" works without rebuilding the filters by hand.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_views", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"count": 1, "views": []}} - query_leads≈ 2040 tokens
Search ALL leads the account has ever collected (across every search) with filters and sorting — no new search is run and no leads are spent. A Google listing found more than once appears once, with its most recent data. Up to 1,000 leads per call (default 25). When next_cursor is set, call again with cursor = next_cursor for the next page: the cursor carries its filters and sort, so it can be sent alone. Pass search_id to query one search's leads instead of the whole library. Example — plumbers in Austin rated 4.5 or higher with a safe email, most-reviewed first: filters=[{field:'category',operator:'contains',value:'plumb'},{field:'city',operator:'is',value:'Austin',conj:'and'},{field:'rating',operator:'gte',value:'4.5',conj:'and'},{field:'email_status',operator:'is',value:'safe',conj:'and'}], sort=[{id:'reviews',dir:-1}]. A field, operator or value the tool cannot use comes back as an error that names it and lists what works.
Paramètres, retour & exemple (5)
Paramètressort· array · optionnel
Sort keys in priority order, e.g. [{id:'reviews',dir:-1}] for most-reviewed first. id is any filter field id (the column ids email_1, email_1_status, phone_1, phone_1_type and phone_1_carrier work too); dir is 1 ascending (the default) or -1 descending. A lead with no value for a key (null) sorts after the leads that have one, in either direction — except social_facebook, social_instagram, social_linkedin, social_x, social_youtube, social_tiktok, social_yelp, gbp_url, logo_url, main_image_url, which sort by whether a lead has one, not by the link: ascending puts the leads WITHOUT one first, so use dir -1 to put the leads that have one first. Without a sort the order is arbitrary but stable.limit· number · optionnel
Max leads to return (default 25, max 1,000).cursor· string · optionnel
next_cursor from the previous call, for the next page. It carries that call's filters and sort: send it alone, or with the same filters and sort — different ones are refused. Leave it out to start a new query.filters· array · optionnel
Conditions, each {field, operator, value, conj}; omit to match every lead. text fields [operators: contains, not_contains, is, is_not, is_empty, is_not_empty]: name, category, city, state, country, postal_code, address, website, primary_email (or email_1), email_2, email_3, primary_phone (or phone_1), phone_carrier (or phone_1_carrier), phone_2, phone_2_carrier, phone_3, phone_3_carrier, owner_name, contact_name, contact_title, social_facebook, social_instagram, social_linkedin, social_x, social_youtube, social_tiktok, social_yelp, gbp_url, google_cid, logo_url, main_image_url. number fields [operators: eq, neq, gt, gte, lt, lte, is_empty, is_not_empty]: rank, rating, reviews, people. yes/no fields [operators: is_true, is_false, is_empty, is_not_empty]: claimed. choice fields [operators: is, is_not, is_empty, is_not_empty]: website_status take none (No website), live, unreachable, blocked (Blocked our crawler), unknown, pending; email_status (or email_1_status), email_2_status, email_3_status take safe, risky, invalid, unknown; phone_line_type (or phone_1_type), phone_2_type, phone_3_type take mobile, fixed_line (Landline), fixed_line_or_mobile (Landline or mobile), voip, non_fixed_voip, toll_free (Toll-free), premium_rate, shared_cost, personal_number (Personal), pager, uan, voicemail, unknown. value is one string (a number as text, e.g. '4.5'); is_empty, is_not_empty, is_true and is_false take none. Text matching ignores case. Phone fields compare digits, so '(512) 555' finds +15125550100; website is / is_not compare domains when given a domain ('acme.com', or 'https://www.acme.com/'), and whole addresses when given a path, a query or a fragment ('acme.com/locations/austin'), either way ignoring http(s)://, www. and a closing slash. conj ('and' or 'or') joins a condition to the one before it, and 'and' binds tighter: A and B or C means (A and B) or C. To match any of several values, send one condition per value joined with conj 'or', repeating the other conditions in each group.search_id· string · optionnel
Only this search's leads (a search_id from search_leads or list_searches) — e.g. to narrow one search before export_leads with the same search_id and filters. Omit to query the whole library.
Exemple d'appel{"name": "query_leads", "arguments": {"sort": [], "limit": 1, "cursor": "texte", "filters": [], "search_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"results": [], "returned": 1, "next_cursor": "texte", "data_sources": "texte", "total_matching": 1}} - search_leads≈ 1137 tokens
Run a live search for local businesses by niche + city (e.g. query 'electrician', location 'Austin, TX'). Returns a search_id and, usually, the first batch immediately (its listings are in `results`; their emails and phones are not verified yet — when discovery is 'in_progress' the provider was slow and the whole search was queued, so the leads arrive through get_search_results); more results are found and verified in the background — every email is SMTP-checked and phones are verified with line type + carrier. Spends 1 lead per result. Poll get_search_results until enrichment is 'complete'. If enrichment is already 'complete', nothing was found and nothing more is coming; if capped is true, the balance covered fewer leads than were found.
Paramètres, retour & exemple (3)
Paramètresquery· string · requis
Business niche/category keyword, e.g. 'electrician'.location· string · optionnel
City, e.g. 'Austin, TX'. Not needed with location_code, which is always what is searched.location_code· number · optionnel
Optional exact location code. When given, it is what is searched, whatever location says. Sent with location, the search is named after the code's own place (or after location when the code's own name cannot be looked up); sent alone, the search is unnamed and location comes back null. A code for a place outside the US is refused, as is a location ending in another country ('London, UK').
Exemple d'appel{"name": "search_leads", "arguments": {"query": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"found": 1, "query": "texte", "capped": true, "results": [], "location": "texte", "discovery": "texte", "next_step": "texte", "search_id": "texte", "enrichment": "texte", "data_sources": "texte", "leads_remaining": 1, "delivered_so_far": 1}} - update_automation≈ 281 tokens
Pause an automation (active=false) so it stops running and stops spending leads, or resume it (active=true). Pausing is the safe way to stop an automation you might want back — use delete_automation only when the user wants it gone for good.
Paramètres, retour & exemple (2)
Paramètresid· string · requis
The automation id from list_automations.active· boolean · requis
false to pause, true to resume.
Exemple d'appel{"name": "update_automation", "arguments": {"id": "texte", "active": true}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"id": "texte", "note": "texte", "active": true, "data_sources": "texte"}}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».