Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,541Letters: 14Defects: 1,323counted just now
teppi

Server definition

Hash
sha256:bb6ec08143bbde86a837a252627865dd502900f1082ec3aa009453a044e15da4
What it is
What a remote MCP server returned when asked what it offers: 13 tools

The blob, as servednamed by its sha256

{ "instructions": "LeadMarina finds local-business leads with every contact verified (emails SMTP-checked; phones verified with line type + carrier). Typical flow: search_leads → poll get_search_results until enrichment is 'complete' → export_leads to the user's CRM (Close/GoHighLevel), Google Sheets, or an emailed CSV/Excel/JSON file. query_leads searches everything already collected (free — no leads spent); list_searches finds past search_ids. Searching/enriching spends leads from the account's lead allowance — a monthly pool on metered plans, a 7-day period allowance on Unlimited (get_balance reports whichever applies). Exports update previously exported leads in place (Google CID identity) — they never duplicate and never touch the user's own CRM notes/columns.", "tools": [ { "description": "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.", "inputSchema": { "properties": { "cadence": { "description": "How often it repeats.", "enum": [ "once", "daily", "weekly", "monthly", "yearly" ], "type": "string" }, "cities": { "description": "Cities to search, e.g. ['Austin, TX'] (max 25).", "items": { "type": "string" }, "type": "array" }, "destination": { "description": "Where each run's leads go. 'none' just saves them to the library.", "enum": [ "none", "close", "ghl", "google_sheets", "csv", "xlsx", "json" ], "type": "string" }, "keyword": { "description": "The niche to search, e.g. 'roofing contractor'.", "type": "string" }, "spreadsheet_id": { "description": "google_sheets only: append to this existing LeadMarina-created sheet.", "type": "string" }, "start_at": { "description": "ISO timestamp for the first run. Defaults to now (runs on the next tick, within 15 min).", "type": "string" } }, "required": [ "keyword", "cities", "cadence" ], "type": "object" }, "name": "create_automation", "outputSchema": { "properties": { "cadence": { "type": "string" }, "cities": { "items": { "type": "string" }, "type": "array" }, "destination": { "type": "string" }, "id": { "type": "string" }, "keyword": { "type": "string" }, "next_run_at": { "type": [ "string", "null" ] }, "note": { "type": "string" } }, "required": [ "id" ], "type": "object" } }, { "description": "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.", "inputSchema": { "properties": { "id": { "description": "The automation id from list_automations.", "type": "string" } }, "required": [ "id" ], "type": "object" }, "name": "delete_automation", "outputSchema": { "properties": { "deleted": { "type": "boolean" }, "id": { "type": "string" }, "note": { "type": "string" } }, "required": [ "id", "deleted" ], "type": "object" } }, { "description": "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.", "inputSchema": { "properties": { "domains": { "description": "Business domains, e.g. ['acme.com'] (max 10).", "items": { "type": "string" }, "type": "array" } }, "required": [ "domains" ], "type": "object" }, "name": "enrich_domains", "outputSchema": { "properties": { "enriching": { "description": "Domains accepted (balance-capped).", "items": { "type": "string" }, "type": "array" }, "enrichment": { "type": "string" }, "next_step": { "type": "string" }, "search_id": { "type": "string" } }, "required": [ "search_id", "enriching", "enrichment" ], "type": "object" } }, { "description": "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.", "inputSchema": { "properties": { "all": { "description": "Export the whole library instead of one search.", "type": "boolean" }, "destination": { "description": "Where the leads go.", "enum": [ "close", "ghl", "google_sheets", "csv", "xlsx", "json" ], "type": "string" }, "filters": { "description": "With all=true: narrow the library using query_leads-style filter rows.", "items": { "type": "object" }, "type": "array" }, "search_id": { "description": "Export this search's leads.", "type": "string" }, "spreadsheet_id": { "description": "google_sheets only: add to this existing LeadMarina-created sheet instead of a new one.", "type": "string" } }, "required": [ "destination" ], "type": "object" }, "name": "export_leads", "outputSchema": { "properties": { "download_url": { "description": "File exports only: 7-day download link.", "type": "string" }, "exported": { "description": "Leads sent to the destination.", "type": "number" }, "file": { "description": "File exports only: the file name.", "type": "string" }, "limit": { "description": "The per-call limit that applied, when truncated.", "type": "number" }, "note": { "type": "string" }, "outcome": { "description": "Human-readable result, e.g. added/updated counts.", "type": "string" }, "truncated": { "description": "True when more leads matched than this destination's limit — the export was PARTIAL.", "type": "boolean" }, "warning": { "description": "Present when truncated: what happened and how to get the rest.", "type": "string" } }, "required": [ "exported", "outcome" ], "type": "object" } }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "get_balance", "outputSchema": { "properties": { "leads_remaining": { "type": "number" }, "note": { "type": "string" }, "period_limit": { "type": "number" }, "period_resets_at": { "type": [ "string", "null" ] }, "period_used": { "type": "number" }, "plan": { "type": "string" } }, "required": [ "leads_remaining", "plan" ], "type": "object" } }, { "description": "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.", "inputSchema": { "properties": { "limit": { "description": "Max leads to return (default 25, max 1000).", "type": "number" }, "offset": { "description": "Pagination offset (default 0).", "type": "number" }, "search_id": { "description": "The search_id returned by search_leads or enrich_domains.", "type": "string" } }, "required": [ "search_id" ], "type": "object" }, "name": "get_search_results", "outputSchema": { "properties": { "enrichment": { "description": "'pending' or 'complete'.", "type": "string" }, "leads_remaining": { "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.", "type": [ "number", "null" ] }, "location": { "type": [ "string", "null" ] }, "next_offset": { "description": "Pass as offset to fetch the next page; null on the last page.", "type": [ "number", "null" ] }, "period": { "description": "On a rate-limited plan: { limit, used, resets_at }. Null on a metered plan.", "type": [ "object", "null" ] }, "progress": { "description": "{ done, total } rows enriched so far.", "type": [ "object", "null" ] }, "query": { "type": [ "string", "null" ] }, "queue_position": { "description": "For queued searches, the place in this account's own queue (1 = next).", "type": [ "number", "null" ] }, "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" }, "showing": { "description": "Range shown, e.g. '1–25'.", "type": "string" }, "stage": { "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.", "type": "string" }, "total_leads": { "type": "number" } }, "required": [ "search_id", "enrichment", "total_leads", "results" ], "type": "object" } }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_automations", "outputSchema": { "properties": { "automations": { "items": { "properties": { "active": { "type": "boolean" }, "cadence": { "type": "string" }, "cities": { "items": { "type": "string" }, "type": "array" }, "destination": { "type": "string" }, "id": { "type": "string" }, "keyword": { "type": "string" }, "last_run_at": { "type": [ "string", "null" ] }, "last_status": { "type": [ "string", "null" ] }, "next_run_at": { "type": [ "string", "null" ] } }, "type": "object" }, "type": "array" }, "count": { "type": "number" } }, "required": [ "count", "automations" ], "type": "object" } }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_integrations", "outputSchema": { "properties": { "integrations": { "items": { "properties": { "connected": { "type": "boolean" }, "note": { "type": "string" }, "provider": { "type": "string" }, "ready": { "description": "Connected AND usable as an export destination right now.", "type": "boolean" } }, "type": "object" }, "type": "array" } }, "required": [ "integrations" ], "type": "object" } }, { "description": "The account's recent searches (id, niche, location, result count, when) — use a search_id with get_search_results or export_leads.", "inputSchema": { "properties": { "limit": { "description": "Max searches (default 10, max 25).", "type": "number" } }, "type": "object" }, "name": "list_searches", "outputSchema": { "properties": { "searches": { "items": { "properties": { "created_at": { "type": [ "string", "null" ] }, "id": { "type": "string" }, "keyword": { "type": [ "string", "null" ] }, "location_name": { "type": [ "string", "null" ] }, "result_count": { "type": [ "number", "null" ] } }, "type": "object" }, "type": "array" } }, "required": [ "searches" ], "type": "object" } }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_views", "outputSchema": { "properties": { "count": { "type": "number" }, "views": { "items": { "properties": { "filters": { "description": "Pass straight to query_leads or export_leads.", "items": { "type": "object" }, "type": "array" }, "id": { "type": "string" }, "name": { "type": "string" } }, "type": "object" }, "type": "array" } }, "required": [ "count", "views" ], "type": "object" } }, { "description": "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'}].", "inputSchema": { "properties": { "cursor": { "description": "Opaque pagination cursor from a previous call.", "type": "string" }, "filters": { "description": "Filter conditions (optional — omit for everything, newest data first).", "items": { "properties": { "conj": { "enum": [ "and", "or" ], "type": "string" }, "field": { "type": "string" }, "operator": { "type": "string" }, "value": { "type": "string" } }, "required": [ "field", "operator" ], "type": "object" }, "type": "array" }, "limit": { "description": "Max leads to return (default 25, max 1000).", "type": "number" }, "sort": { "description": "Sort keys, e.g. [{id:'reviews',dir:-1}]. Optional.", "items": { "properties": { "dir": { "enum": [ 1, -1 ], "type": "number" }, "id": { "type": "string" } }, "required": [ "id" ], "type": "object" }, "type": "array" } }, "type": "object" }, "name": "query_leads", "outputSchema": { "properties": { "next_cursor": { "description": "Pass back as 'cursor' for the next page.", "type": [ "string", "null" ] }, "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" }, "returned": { "type": "number" }, "total_matching": { "description": "Exact match count (first page only; absent on later pages).", "type": [ "number", "null" ] } }, "required": [ "returned", "results" ], "type": "object" } }, { "description": "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'.", "inputSchema": { "properties": { "location": { "description": "City, e.g. 'Austin, TX'. Ignored if location_code is given.", "type": "string" }, "location_code": { "description": "Optional exact location code (skips the city lookup).", "type": "number" }, "query": { "description": "Business niche/category keyword, e.g. 'electrician'.", "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "search_leads", "outputSchema": { "properties": { "delivered_so_far": { "type": "number" }, "enrichment": { "description": "'pending' until background verification finishes.", "type": "string" }, "leads_remaining": { "description": "Leads spendable now. On a plan with no monthly quota this is what is left in the current 7-day period.", "type": "number" }, "location": { "type": [ "string", "null" ] }, "next_step": { "type": "string" }, "query": { "type": "string" }, "search_id": { "type": "string" } }, "required": [ "search_id", "query", "delivered_so_far", "enrichment" ], "type": "object" } }, { "description": "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.", "inputSchema": { "properties": { "active": { "description": "false to pause, true to resume.", "type": "boolean" }, "id": { "description": "The automation id from list_automations.", "type": "string" } }, "required": [ "id", "active" ], "type": "object" }, "name": "update_automation", "outputSchema": { "properties": { "active": { "type": "boolean" }, "id": { "type": "string" }, "note": { "type": "string" } }, "required": [ "id", "active" ], "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:bb6ec08143bbde86a837a252627865dd502900f1082ec3aa009453a044e15da4 | sha256sum