Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "get_search_results", "query_leads" and "search_leads"
⟨218 unchanged words⟩ "type":["string","null"]},"country":{"description":"ISO 3166 alpha-2 (\"US\", \"GB\").","type":["string","null"]},"email_status":{"description":"Email 1's SMTP verdict ⟨116 unchanged words⟩ :"Verified phones with line type + carrier."},"postal_code":{"type":["string","null"]},"primary_email":{"description":"Email 1: ⟨134 unchanged words⟩
⟨66 unchanged words⟩ is_not_empty]: name, category, city, state, country, postal_code, address, website, primary_email (or email_1), email_2 ⟨426 unchanged words⟩
⟨133 unchanged words⟩ "type":["string","null"]},"country":{"description":"ISO 3166 alpha-2 (\"US\", \"GB\").","type":["string","null"]},"email_status":{"description":"Email 1's SMTP verdict ⟨116 unchanged words⟩ :"Verified phones with line type + carrier."},"postal_code":{"type":["string","null"]},"primary_email":{"description":"Email 1: ⟨103 unchanged words⟩
⟨231 unchanged words⟩ "type":["string","null"]},"country":{"description":"ISO 3166 alpha-2 (\"US\", \"GB\").","type":["string","null"]},"emails_data":{"description":"Verified emails with SMTP ⟨42 unchanged words⟩ :"Verified phones with line type + carrier."},"postal_code":{"type":["string","null"]},"rating":{"type":["number", ⟨35 unchanged words⟩
Changed the definition of "create_automation", "enrich_domains", "query_leads" and 1 more
⟨116 unchanged words⟩ fix. Up to 20 automations, 25 cities each. Automations search US places only for now: a city outside the US is refused.
⟨44 unchanged words⟩ once. Returns a search_id to poll with get_search_results. US businesses only for now: their phones are read as US numbers.
Changed the definition of "get_search_results", "query_leads" and "search_leads"
⟨178 unchanged words⟩ "type":["boolean","null"]},"contact_name":{"description":"The person the business's own website names as running part of it (a manager, a practice's doctor) when it names no owner.","type":["string","null"]},"contact_title":{"description":"That person's role, as the website gives it.","type":["string","null"]},"email_status":{"description":"Email 1's SMTP verdict ⟨50 unchanged words⟩ "]},"owner_name":{"type":["string","null"]},"people":{"description":"Everyone the business's own website names as working there, each { name, title, kind } (kind: owner, manager, practitioner, staff).","items":{"type":"object"},"type":["array","null"]},"phone":{"description" ⟨178 unchanged words⟩
Changed the definition of "create_automation", "export_leads", "get_search_results" and 4 more
⟨7 unchanged words⟩ :"string"},"type":"array"},"data_sources":{"description":"Where the sources, licences and notices are for emails and owner names that may come from open datasets and public records. Pass it on with any of this data you share.","type":"string"},"destination":{"description":"The destination as saved ⟨26 unchanged words⟩
{"properties":{"data_sources":{"description":"Where the sources, licences and notices are for emails and owner names that may come from open datasets and public records. Pass it on with any of this data you share.","type":"string"},"download_url":{"description":"File exports only: ⟨171 unchanged words⟩
Changed the definition of "create_automation", "enrich_domains", "export_leads" and 3 more
⟨84 unchanged words⟩ 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.
⟨66 unchanged words⟩ ,"spreadsheet_id":{"description":"google_sheets only:appendadd each run to this existing LeadMarina-createdsheet.sheet, updating rows already in it.","type":"string"},"start_at":{ ⟨27 unchanged words⟩
Certificate recorded, valid to 2026-11-21
Authorization not required
First tool surface recorded: 13 tools (server version 1.2.0)
Showing the latest 8 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨84 unchanged words⟩ 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 ⟨13 unchanged words⟩ lte, is_empty, is_not_empty]: rank, rating,reviews.reviews, people. yes/no fields [operators: is_true, is_false, is_empty, ⟨4 unchanged words⟩ [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 ⟨352 unchanged words⟩
⟨63 unchanged words⟩ 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').","type":"number"},"query":{ ⟨12 unchanged words⟩
⟨191 unchanged words⟩ "type":["string","null"]},"contact_name":{"description":"The person the business's own website names as running part of it (a manager, a practice's doctor) when it names no owner.","type":["string","null"]},"contact_title":{"description":"That person's role, as the website gives it.","type":["string","null"]},"emails_data":{"description":"Verified emails with SMTP ⟨9 unchanged words⟩ "]},"owner_name":{"type":["string","null"]},"people":{"description":"Everyone the business's own website names as working there, each { name, title, kind } (kind: owner, manager, practitioner, staff).","items":{"type":"object"},"type":["array","null"]},"phones_data":{"description" ⟨45 unchanged words⟩
{"properties":{"data_sources":{"description":"Where the sources, licences and notices are for emails and owner names that may come from open datasets and public records. Pass it on with any of this data you share.","type":"string"},"enrichment":{"description":"'pending' or 'complete'.", ⟨380 unchanged words⟩
⟨41 unchanged words⟩ "},"count":{"type":"number"},"data_sources":{"description":"Where the sources, licences and notices are for emails and owner names that may come from open datasets and public records. Pass it on with any of this data you share.","type":"string"}},"required":["count","automations"],"type":"object"}
{"properties":{"data_sources":{"description":"Where the sources, licences and notices are for emails and owner names that may come from open datasets and public records. Pass it on with any of this data you share.","type":"string"},"next_cursor":{"description":"Pass back as 'cursor' ⟨263 unchanged words⟩
⟨18 unchanged words⟩ the user.","type":"boolean"},"data_sources":{"description":"Where the sources, licences and notices are for emails and owner names that may come from open datasets and public records. Pass it on with any of this data you share.","type":"string"},"delivered_so_far":{"type":"number"},"discovery" ⟨199 unchanged words⟩
{"properties":{"active":{"type":"boolean"},"data_sources":{"description":"Where the sources, licences and notices are for emails and owner names that may come from open datasets and public records. Pass it on with any of this data you share.","type":"string"},"id":{"type":"string"},"note" ⟨7 unchanged words⟩
⟨8 unchanged words⟩ ,"type":"array"},"destination":{"description":"The destination as saved — what each run will actually use.","type":"string"},"id":{"type" ⟨15 unchanged words⟩
⟨24 unchanged words⟩ name, socials). Costs 1 lead perdomain.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.
⟨15 unchanged words⟩ ,"next_step":{"type":"string"},"note":{"description":"Present when a delivered domain was listed more than once, or when the balance left some domains out (named, not charged).","type":"string"},"search_id":{"type":"string"}},"required ⟨5 unchanged words⟩
⟨31 unchanged words⟩ file — 'csv' | 'xlsx' | 'json' (a 7-day download link, also emailed to the account owner+whendownloadthelinkfile is small enough to attach). Exports EITHER one search's leads (pass search_id) or the whole library (set all=true,).optionallyEither can be narrowed with the samefiltersfilter 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 ⟨41 unchanged words⟩ than the limit, the response sets truncated=true and returns next_cursor — relay that to the user, the export waspartial.partial;Previouslytoexportedsend 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)areorUPDATEDjson (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)—, neverduplicated;touching the user's own CRMnotes/columnsnotes/columns;areaneverfiletouched.or a new sheet is a fresh copy every time — so do not repeat a call that succeeded.
⟨9 unchanged words⟩ one search.","type":"boolean"},"cursor":{"description":"Continue an export: the next_cursor a previous export_leads call returned. Pass it with the same search_id/all and filters.","type":"string"},"destination":{"description":"Where the leads go. ⟨8 unchanged words⟩ :"string"},"filters":{"description":"WithOptionalall=truequery_leads-style filter rows:narrowwithin thelibrarysearchusingwhenquery_leads-stylesearch_idfilterisrows.given, across the library with all=true.","items":{"type":"object"}, ⟨31 unchanged words⟩
⟨37 unchanged words⟩ when truncated.","type":"number"},"next_cursor":{"description":"Present when the per-call limit or this call's time limit left matching leads unsent: pass it as cursor, with the same destination, search_id/all and filters, to send them. It does not offer again a lead the destination refused (counted as failed in outcome).","type":"string"},"not_sent":{"description":"Leads of this batch the destination's time limit did not reach.","type":"number"},"note":{"type":"string"},"outcome" ⟨26 unchanged words⟩ },"warning":{"description":"Present whentruncatedthe per-call limit or this call's time limit left leads unsent: what happened and how togetsend them. Leads therest.destination refused are not covered here — outcome counts them as failed.","type":"string"}},"required": ⟨4 unchanged words⟩
{"destructiveHint":false,"idempotentHint":truefalse,"openWorldHint":true,"readOnlyHint":false,"title" ⟨5 unchanged words⟩
⟨111 unchanged words⟩ "results":{"items":{"properties":{"address":{"description":"Street address from the Google listing.","type":["string","null"]},"category":{"type":["string","null"]},"city":{"type":["string","null"]},"claimed":{"description":"Whether the owner has claimed the Google listing.","type":["boolean","null"]},"email_status":{"description":"Email 1's SMTP verdict: safe | risky | invalid | unknown.","type":["string","null"]},"emails_data":{"description":"Verified emails with SMTP ⟨2 unchanged words⟩ "type":["string","null"]},"google_cid":{"description":"Google listing id (the query_leads google_cid field).","type":["string","null"]},"maps_url":{"description":"The Google Maps link for the listing.","type":["string","null"]},"name":{"type":["string","null"]},"owner_name":{"type":["string","null"]},"phone":{"description":"The Google Maps number.","type":["string","null"]},"phone_line_type":{"description":"Phone 1's line type: mobile, fixed_line, voip or toll_free usually; also unknown, fixed_line_or_mobile and the other values query_leads lists.","type":["string","null"]},"phones_data":{"description":"Verified phones with line type + carrier."},"primary_email":{"description":"Email 1: the first address in emails_data, the one email_status describes. Before emails are verified, the lead's primary address.","type":["string","null"]},"primary_phone":{"description":"Phone 1: the first number in phones_data, the one phone_line_type describes. Before phones are verified, the lead's primary number, or its Google Maps number.","type":["string","null"]},"rating":{"type":["number", ⟨82 unchanged words⟩
⟨18 unchanged words⟩ search is run and no leads are spent.FilterAfieldsGoogleinclude:listingname,foundcategory,morecity,thanstate,oncerating,appearsreviewsonce,website,withclaimed,itsowner_name,mostphone_1,recentemail_1,data.email_status,Upphone_1_typeto 1,000google_cid.leadsOperators:percontains,callnot_contains,(default 25). When next_cursor is,is_notset,starts_with,callgt,againgte,withlt,cursorlte,=is_empty,next_cursoris_not_empty,foris_truethe next page: the cursor carries its filters and sort,is_false.soCombineitrowscanwithbeconjsent'and'/'or'.alone.Example:Passfindsearch_idrated-4.5+to query one search's leads instead of the whole library. Example — plumbers in Austin rated 4.5 or higher with averifiedsafe 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.
{"properties":{"cursor":{"description":"Opaquenext_cursorpaginationfromcursorthefromprevious 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 apreviousnewcall.query.","type":"string"},"filters":{"description":"FilterConditions,conditionseach(optional{field,—operator, value, conj}; omitfortoeverythingmatch every lead. text fields [operators: contains,
⟨3 unchanged words⟩ :"Pass back as 'cursor' for the next page (it carries the filters and sort); null on the last page.","type":["string","null"]},"results":{"items":{"properties":{"address":{"description":"Street address from the Google listing.","type":["string","null"]},"category":{"type":["string","null"]},"city":{"type":["string","null"]},"claimed":{"description":"Whether the owner has claimed the Google listing.","type":["boolean","null"]},"email_status":{"description":"Email 1's SMTP verdict: safe | risky | invalid | unknown.","type":["string","null"]},"emails_data":{"description":"Verified emails with SMTP ⟨2 unchanged words⟩ "type":["string","null"]},"google_cid":{"description":"Google listing id (the query_leads google_cid field).","type":["string","null"]},"maps_url":{"description":"The Google Maps link for the listing.","type":["string","null"]},"name":{"type":["string","null"]},"owner_name":{"type":["string","null"]},"phone":{"description":"The Google Maps number.","type":["string","null"]},"phone_line_type":{"description":"Phone 1's line type: mobile, fixed_line, voip or toll_free usually; also unknown, fixed_line_or_mobile and the other values query_leads lists.","type":["string","null"]},"phones_data":{"description":"Verified phones with line type + carrier."},"primary_email":{"description":"Email 1: the first address in emails_data, the one email_status describes. Before emails are verified, the lead's primary address.","type":["string","null"]},"primary_phone":{"description":"Phone 1: the first number in phones_data, the one phone_line_type describes. Before phones are verified, the lead's primary number, or its Google Maps number.","type":["string","null"]},"rating":{"type":["number","null" ⟨27 unchanged words⟩ "total_matching":{"description":"Exact match count(— on the first page only;absent
⟨12 unchanged words⟩ query 'electrician', location 'Austin, TX'). Returns a search_id and, usually, the first batch immediatelywith(itsalistingssearch_id;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 andeveryphonesphoneare 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.
⟨2 unchanged words⟩ {"description":"City, e.g. 'Austin, TX'.IgnoredNotifneeded with location_code, which isgiven.always what is searched.","type":"string"},"location_code":{"description":"Optional exact locationcodecode. When given, it is what is searched, whatever location says. Sent with location, the search is named after the code's own place (skipsor after location when thecitycode'slookupown name cannot be looked up).; sent alone, the search is unnamed and location comes back null.","type":"number"},"query":{ ⟨12 unchanged words⟩
{"properties":{"capped":{"description":"True when the lead balance covered fewer leads than were found — relay this to the user.","type":"boolean"},"delivered_so_far":{"type":"number"},"discovery":{"description":"'complete', or 'in_progress' when the search was queued whole.","type":"string"},"enrichment":{"description":"'pending' until background verificationfinishes.finishes; 'complete' at once when nothing was found.","type":"string"},"found":{"description":"Listings found in the first batch, before the balance capped delivery.","type":"number"},"leads_remaining":{"description":"Leads spendable now. On ⟨16 unchanged words⟩ ,"type":"number"},"location":{"description":"The place searched, as the location list names it (the location sent, when a code's own name could not be looked up); null for a location_code sent alone.","type":["string","null"]},"next_step":{"type":"string"},"query":{"type":"string"},"results":{"description":"The first batch, as delivered — contacts are verified in the background (get_search_results).","items":{"properties":{"category":{"type":["string","null"]},"city":{"type":["string","null"]},"emails_data":{"description":"Verified emails with SMTP status."},"enrichment_status":{"type":["string","null"]},"name":{"type":["string","null"]},"owner_name":{"type":["string","null"]},"phones_data":{"description":"Verified phones with line type + carrier."},"rating":{"type":["number","null"]},"reviews":{"type":["number","null"]},"socials":{"description":"Social profile links keyed by platform."},"state":{"type":["string","null"]},"website":{"type":["string","null"]}},"type":"object"},"type":"array"},"search_id":{"type":"string"} ⟨7 unchanged words⟩