MCPサーバー

leadmarina

com.leadmarina/leadmarina
マーケティング・広告 営業・CRM 公開・接続可能 MCP 2026-07-28

このMCPでできること

Finds and enriches local-business sales leads, verifies contact details, queries a lead library, and exports or schedules recurring searches to CRM, spreadsheet, or file destinations.

create_automation
Schedule a recurring search
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. Up to 20 automations, 25 cities each.
外部アクセスあり
入力スキーマ
{'type': 'object', 'required': ['keyword', 'cities', 'cadence'], 'properties': {'cities': {'type': 'array', 'items': {'type': 'string'}, 'description': "Cities to search, e.g. ['Austin, TX'] (max 25)."}, 'cadence': {'enum': ['once', 'daily', 'weekly', 'monthly', 'yearly'], 'type': 'string', 'description': 'How often it repeats.'}, 'keyword': {'type': 'string', 'description': "The niche to search, e.g. 'roofing contractor'."}, 'start_at': {'type': 'string', 'description': 'ISO timestamp for the first run. Defaults to now (runs on the next tick, within 15 min).'}, 'destination': {'enum': ['none', 'close', 'ghl', 'google_sheets', 'csv', 'xlsx', 'json'], 'type': 'string', 'description': "Where each run's leads go. 'none' just saves them to the library."}, 'spreadsheet_id': {'type': 'string', 'description': 'google_sheets only: append to this existing LeadMarina-created sheet.'}}}
出力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}, 'note': {'type': 'string'}, 'cities': {'type': 'array', 'items': {'type': 'string'}}, 'cadence': {'type': 'string'}, 'keyword': {'type': 'string'}, 'destination': {'type': 'string'}, 'next_run_at': {'type': ['string', 'null']}}}
delete_automation
Delete an automation
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.
破壊的操作あり 冪等
入力スキーマ
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The automation id from list_automations.'}}}
出力スキーマ
{'type': 'object', 'required': ['id', 'deleted'], 'properties': {'id': {'type': 'string'}, 'note': {'type': 'string'}, 'deleted': {'type': 'boolean'}}}
enrich_domains
Enrich business domains
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 domain. Returns a search_id to poll with get_search_results.
外部アクセスあり
入力スキーマ
{'type': 'object', 'required': ['domains'], 'properties': {'domains': {'type': 'array', 'items': {'type': 'string'}, 'description': "Business domains, e.g. ['acme.com'] (max 10)."}}}
出力スキーマ
{'type': 'object', 'required': ['search_id', 'enriching', 'enrichment'], 'properties': {'enriching': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Domains accepted (balance-capped).'}, 'next_step': {'type': 'string'}, 'search_id': {'type': 'string'}, 'enrichment': {'type': 'string'}}}
export_leads
Export leads to a destination
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' (emailed to the account owner + download link). Exports EITHER one search's leads (pass search_id) or the whole library (set all=true, optionally narrowed with the same filters as query_leads). 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 — relay that to the user, the export was partial. Previously exported leads are UPDATED in place (matched by Google CID) — never duplicated; the user's own CRM notes/columns are never touched.
外部アクセスあり 冪等
入力スキーマ
{'type': 'object', 'required': ['destination'], 'properties': {'all': {'type': 'boolean', 'description': 'Export the whole library instead of one search.'}, 'filters': {'type': 'array', 'items': {'type': 'object'}, 'description': 'With all=true: narrow the library using query_leads-style filter rows.'}, 'search_id': {'type': 'string', 'description': "Export this search's leads."}, 'destination': {'enum': ['close', 'ghl', 'google_sheets', 'csv', 'xlsx', 'json'], 'type': 'string', 'description': 'Where the leads go.'}, 'spreadsheet_id': {'type': 'string', 'description': 'google_sheets only: add to this existing LeadMarina-created sheet instead of a new one.'}}}
出力スキーマ
{'type': 'object', 'required': ['exported', 'outcome'], 'properties': {'file': {'type': 'string', 'description': 'File exports only: the file name.'}, 'note': {'type': 'string'}, 'limit': {'type': 'number', 'description': 'The per-call limit that applied, when truncated.'}, 'outcome': {'type': 'string', 'description': 'Human-readable result, e.g. added/updated counts.'}, 'warning': {'type': 'string', 'description': 'Present when truncated: what happened and how to get the rest.'}, 'exported': {'type': 'number', 'description': 'Leads sent to the destination.'}, 'truncated': {'type': 'boolean', 'description': "True when more leads matched than this destination's limit — the export was PARTIAL."}, 'download_url': {'type': 'string', 'description': 'File exports only: 7-day download link.'}}}
get_balance
Get lead balance
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.
読み取り専用
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['leads_remaining', 'plan'], 'properties': {'note': {'type': 'string'}, 'plan': {'type': 'string'}, 'period_used': {'type': 'number'}, 'period_limit': {'type': 'number'}, 'leads_remaining': {'type': 'number'}, 'period_resets_at': {'type': ['string', 'null']}}}
get_search_results
Get search results
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.
読み取り専用
入力スキーマ
{'type': 'object', 'required': ['search_id'], 'properties': {'limit': {'type': 'number', 'description': 'Max leads to return (default 25, max 1000).'}, 'offset': {'type': 'number', 'description': 'Pagination offset (default 0).'}, 'search_id': {'type': 'string', 'description': 'The search_id returned by search_leads or enrich_domains.'}}}
出力スキーマ
{'type': 'object', 'required': ['search_id', 'enrichment', 'total_leads', 'results'], 'properties': {'query': {'type': ['string', 'null']}, 'stage': {'type': 'string', 'description': "queued | discovering | enriching | verifying | complete | failed | cancelled. 'verifying' means every row is delivered and contacts are being verified — often the longest phase, not a stall."}, 'period': {'type': ['object', 'null'], 'description': 'On a rate-limited plan: { limit, used, resets_at }. Null on a metered plan.'}, 'results': {'type': 'array', 'items': {'type': 'object', 'properties': {'city': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'state': {'type': ['string', 'null']}, 'rating': {'type': ['number', 'null']}, 'reviews': {'type': ['number', 'null']}, 'socials': {'description': 'Social profile links keyed by platform.'}, 'website': {'type': ['string', 'null']}, 'category': {'type': ['string', 'null']}, 'owner_name': {'type': ['string', 'null']}, 'emails_data': {'description': 'Verified emails with SMTP status.'}, 'phones_data': {'description': 'Verified phones with line type + carrier.'}, 'enrichment_status': {'type': ['string', 'null']}}}}, 'showing': {'type': 'string', 'description': "Range shown, e.g. '1–25'."}, 'location': {'type': ['string', 'null']}, 'progress': {'type': ['object', 'null'], 'description': '{ done, total } rows enriched so far.'}, 'search_id': {'type': 'string'}, 'enrichment': {'type': 'string', 'description': "'pending' or 'complete'."}, 'next_offset': {'type': ['number', 'null'], 'description': 'Pass as offset to fetch the next page; null on the last page.'}, 'total_leads': {'type': 'number'}, 'queue_position': {'type': ['number', 'null'], 'description': "For queued searches, the place in this account's own queue (1 = next)."}, 'leads_remaining': {'type': ['number', 'null'], 'description': 'Leads spendable now. On a plan with no monthly quota this is what is left in the current 7-day period, not a monthly balance.'}}}
list_automations
List scheduled searches
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.
読み取り専用
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['count', 'automations'], 'properties': {'count': {'type': 'number'}, 'automations': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'active': {'type': 'boolean'}, 'cities': {'type': 'array', 'items': {'type': 'string'}}, 'cadence': {'type': 'string'}, 'keyword': {'type': 'string'}, 'destination': {'type': 'string'}, 'last_run_at': {'type': ['string', 'null']}, 'last_status': {'type': ['string', 'null']}, 'next_run_at': {'type': ['string', 'null']}}}}}}
list_integrations
List connected integrations
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.
読み取り専用
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['integrations'], 'properties': {'integrations': {'type': 'array', 'items': {'type': 'object', 'properties': {'note': {'type': 'string'}, 'ready': {'type': 'boolean', 'description': 'Connected AND usable as an export destination right now.'}, 'provider': {'type': 'string'}, 'connected': {'type': 'boolean'}}}}}}
list_searches
List recent searches
The account's recent searches (id, niche, location, result count, when) — use a search_id with get_search_results or export_leads.
読み取り専用
入力スキーマ
{'type': 'object', 'properties': {'limit': {'type': 'number', 'description': 'Max searches (default 10, max 25).'}}}
出力スキーマ
{'type': 'object', 'required': ['searches'], 'properties': {'searches': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'keyword': {'type': ['string', 'null']}, 'created_at': {'type': ['string', 'null']}, 'result_count': {'type': ['number', 'null']}, 'location_name': {'type': ['string', 'null']}}}}}}
list_views
List saved views
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.
読み取り専用
入力スキーマ
{'type': 'object', 'properties': {}}
出力スキーマ
{'type': 'object', 'required': ['count', 'views'], 'properties': {'count': {'type': 'number'}, 'views': {'type': 'array', 'items': {'type': 'object', 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}, 'filters': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Pass straight to query_leads or export_leads.'}}}}}}
query_leads
Query the lead library
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. Filter fields include: name, category, city, state, rating, reviews, website, claimed, owner_name, phone_1, email_1, email_status, phone_1_type, google_cid. Operators: contains, not_contains, is, is_not, starts_with, gt, gte, lt, lte, is_empty, is_not_empty, is_true, is_false. Combine rows with conj 'and'/'or'. Example: find rated-4.5+ plumbers in Austin with a verified email: filters=[{field:'category',operator:'contains',value:'plumb'},{field:'city',operator:'is',value:'Austin',conj:'and'},{field:'email_status',operator:'is',value:'safe',conj:'and'}].
読み取り専用
入力スキーマ
{'type': 'object', 'properties': {'sort': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string'}, 'dir': {'enum': [1, -1], 'type': 'number'}}}, 'description': "Sort keys, e.g. [{id:'reviews',dir:-1}]. Optional."}, 'limit': {'type': 'number', 'description': 'Max leads to return (default 25, max 1000).'}, 'cursor': {'type': 'string', 'description': 'Opaque pagination cursor from a previous call.'}, 'filters': {'type': 'array', 'items': {'type': 'object', 'required': ['field', 'operator'], 'properties': {'conj': {'enum': ['and', 'or'], 'type': 'string'}, 'field': {'type': 'string'}, 'value': {'type': 'string'}, 'operator': {'type': 'string'}}}, 'description': 'Filter conditions (optional — omit for everything, newest data first).'}}}
出力スキーマ
{'type': 'object', 'required': ['returned', 'results'], 'properties': {'results': {'type': 'array', 'items': {'type': 'object', 'properties': {'city': {'type': ['string', 'null']}, 'name': {'type': ['string', 'null']}, 'state': {'type': ['string', 'null']}, 'rating': {'type': ['number', 'null']}, 'reviews': {'type': ['number', 'null']}, 'socials': {'description': 'Social profile links keyed by platform.'}, 'website': {'type': ['string', 'null']}, 'category': {'type': ['string', 'null']}, 'owner_name': {'type': ['string', 'null']}, 'emails_data': {'description': 'Verified emails with SMTP status.'}, 'phones_data': {'description': 'Verified phones with line type + carrier.'}, 'enrichment_status': {'type': ['string', 'null']}}}}, 'returned': {'type': 'number'}, 'next_cursor': {'type': ['string', 'null'], 'description': "Pass back as 'cursor' for the next page."}, 'total_matching': {'type': ['number', 'null'], 'description': 'Exact match count (first page only; absent on later pages).'}}}
search_leads
Search local-business leads
Run a live search for local businesses by niche + city (e.g. query 'electrician', location 'Austin, TX'). Returns the first batch immediately with a search_id; more results are found and verified in the background — every email is SMTP-checked and every phone verified with line type + carrier. Spends 1 lead per result. Poll get_search_results until enrichment is 'complete'.
外部アクセスあり
入力スキーマ
{'type': 'object', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': "Business niche/category keyword, e.g. 'electrician'."}, 'location': {'type': 'string', 'description': "City, e.g. 'Austin, TX'. Ignored if location_code is given."}, 'location_code': {'type': 'number', 'description': 'Optional exact location code (skips the city lookup).'}}}
出力スキーマ
{'type': 'object', 'required': ['search_id', 'query', 'delivered_so_far', 'enrichment'], 'properties': {'query': {'type': 'string'}, 'location': {'type': ['string', 'null']}, 'next_step': {'type': 'string'}, 'search_id': {'type': 'string'}, 'enrichment': {'type': 'string', 'description': "'pending' until background verification finishes."}, 'leads_remaining': {'type': 'number', 'description': 'Leads spendable now. On a plan with no monthly quota this is what is left in the current 7-day period.'}, 'delivered_so_far': {'type': 'number'}}}
update_automation
Pause or resume an automation
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.
冪等
入力スキーマ
{'type': 'object', 'required': ['id', 'active'], 'properties': {'id': {'type': 'string', 'description': 'The automation id from list_automations.'}, 'active': {'type': 'boolean', 'description': 'false to pause, true to resume.'}}}
出力スキーマ
{'type': 'object', 'required': ['id', 'active'], 'properties': {'id': {'type': 'string'}, 'note': {'type': 'string'}, 'active': {'type': 'boolean'}}}
追加
delete_automation
2026年9月17日12:35
追加
update_automation
2026年9月17日12:35
追加
create_automation
2026年9月17日12:35
追加
list_automations
2026年9月17日12:35
追加
list_integrations
2026年9月17日12:35
追加
list_views
2026年9月17日12:35
追加
get_balance
2026年9月17日12:35
追加
list_searches
2026年9月17日12:35
追加
export_leads
2026年9月17日12:35
追加
query_leads
2026年9月17日12:35
追加
enrich_domains
2026年9月17日12:35
追加
get_search_results
2026年9月17日12:35
追加
search_leads
2026年9月17日12:35