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

Server definition

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

The blob, as servednamed by its sha256

{ "instructions": "outsend extracts B2B prospecting data (Google Maps + enrichment). Start with list_modules. Jobs are ASYNC: create, then poll get_job until done, then get_job_results (preview + download link — never paste thousands of rows). Estimate big scrapes first with estimate_scrap; use stop_at when the user wants ~N results.", "tools": [ { "description": "Enrich the results of a finished job (async): find emails, scrape reviews, detect social networks, verify emails, tech stack, etc. Returns the new job id.", "inputSchema": { "properties": { "email_mode": { "description": "Only for enrichment=emails. Default normal.", "enum": [ "normal", "deep" ], "type": "string" }, "enrichment": { "enum": [ "ads_intelligence", "brand_assets", "dead_check", "emails", "legal_data", "legal_ids", "legal_mentions", "pagespeed", "phone_info", "phones_extra", "pricing", "reviews", "socials", "techstack", "verify_emails" ], "type": "string" }, "source_job_id": { "description": "A job with status=done", "type": "string" } }, "required": [ "enrichment", "source_job_id" ], "type": "object" }, "name": "create_enrichment_job", "outputSchema": null }, { "description": "Create AND start a multi-step pipeline (e.g. scrap → emails → verify_emails). Keep chains LINEAR (each block feeds the next). Edges use the keys \"from\" and \"to\" — NOT source/target. Call get_pipeline_schema first for the valid block types and their config fields. Returns pipeline id + initial job ids.\nExample definition:\n{\"nodes\": [{\"id\": \"n1\", \"type\": \"scrap\", \"config\": {\"queries\": [\"plombier\"], \"zones\": [\"Lyon\"], \"stop_at\": 500}}, {\"id\": \"n2\", \"type\": \"emails\", \"config\": {}}], \"edges\": [{\"id\": \"e1\", \"from\": \"n1\", \"to\": \"n2\"}]}", "inputSchema": { "properties": { "definition": { "description": "{nodes: [{id, type, config}], edges: [{id, from, to}]} — edge keys are \"from\"/\"to\", not source/target", "properties": { "edges": { "items": { "type": "object" }, "type": "array" }, "nodes": { "items": { "type": "object" }, "type": "array" } }, "required": [ "nodes" ], "type": "object" }, "name": { "maxLength": 100, "type": "string" } }, "required": [ "definition" ], "type": "object" }, "name": "create_pipeline", "outputSchema": null }, { "description": "Launch a Google Maps extraction (async). Returns the job id immediately; poll get_job until status=done, then use get_job_results. When the user wants ~N results, set stop_at.", "inputSchema": { "properties": { "country": { "description": "ISO3, default FRA", "type": "string" }, "extra_columns": { "items": { "enum": [ "gps", "departement", "region" ], "type": "string" }, "type": "array" }, "max_per_phone": { "minimum": 0, "type": "integer" }, "queries": { "items": { "type": "string" }, "maxItems": 20, "minItems": 1, "type": "array" }, "scrap_mode": { "enum": [ "fast", "normal", "ultra" ], "type": "string" }, "stop_at": { "minimum": 1, "type": "integer" }, "zones": { "items": { "type": "string" }, "maxItems": 50, "minItems": 1, "type": "array" } }, "required": [ "queries", "zones" ], "type": "object" }, "name": "create_scrap_job", "outputSchema": null }, { "description": "Turn a finished job or pipeline into recurring monitoring: outsend re-runs it every N days and computes the diff (new / removed / modified places).", "inputSchema": { "properties": { "frequency_days": { "maximum": 90, "minimum": 1, "type": "integer" }, "name": { "maxLength": 100, "minLength": 1, "type": "string" }, "source_job_id": { "type": "string" }, "source_pipeline_id": { "type": "string" } }, "required": [ "name", "frequency_days" ], "type": "object" }, "name": "create_veille", "outputSchema": null }, { "description": "Estimate the cost (EF) and volume of a Google Maps extraction WITHOUT launching it. Always estimate before creating a large job. 1 EF = a full-France scrape for one query type.", "inputSchema": { "properties": { "country": { "description": "ISO3 country code, default FRA", "type": "string" }, "queries": { "description": "Business types, e.g. ['plombier', 'electricien']", "items": { "type": "string" }, "maxItems": 20, "minItems": 1, "type": "array" }, "scrap_mode": { "enum": [ "fast", "normal", "ultra" ], "type": "string" }, "stop_at": { "description": "Stop after N unique places (recommended when the user gives a number)", "minimum": 1, "type": "integer" }, "zones": { "description": "Cities, departments, regions or 'France'", "items": { "type": "string" }, "maxItems": 50, "minItems": 1, "type": "array" } }, "required": [ "queries", "zones" ], "type": "object" }, "name": "estimate_scrap", "outputSchema": null }, { "description": "Account event feed (job.completed, pipeline.completed, veille.run_completed…). Cursor-based: pass back last_id as since_id.", "inputSchema": { "properties": { "limit": { "maximum": 100, "minimum": 1, "type": "integer" }, "since_id": { "minimum": 0, "type": "integer" }, "types": { "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "name": "get_events", "outputSchema": null }, { "description": "Status, counters and download URL of a job.", "inputSchema": { "properties": { "job_id": { "type": "string" } }, "required": [ "job_id" ], "type": "object" }, "name": "get_job", "outputSchema": null }, { "description": "Preview of a finished job's rows (max 50 per call, paginate with offset) + total count + CSV download URL. Never dump thousands of rows into the conversation: show a sample, give the link.", "inputSchema": { "properties": { "job_id": { "type": "string" }, "limit": { "maximum": 50, "minimum": 1, "type": "integer" }, "offset": { "minimum": 0, "type": "integer" } }, "required": [ "job_id" ], "type": "object" }, "name": "get_job_results", "outputSchema": null }, { "description": "Machine contract for building pipelines: valid block types, per-block config schema, and chaining rules. Use before create_pipeline.", "inputSchema": { "properties": {}, "type": "object" }, "name": "get_pipeline_schema", "outputSchema": null }, { "description": "The account's recent jobs, newest first.", "inputSchema": { "properties": { "limit": { "maximum": 50, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "list_jobs", "outputSchema": null }, { "description": "Catalog of outsend data modules: what each one needs and produces. Call this first to know what is possible. Modules listed as coming_soon cannot be launched.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_modules", "outputSchema": null }, { "description": "The account's pipelines with status.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_pipelines", "outputSchema": null }, { "description": "The account's recurring monitors.", "inputSchema": { "properties": {}, "type": "object" }, "name": "list_veilles", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:a4f361b5b224eae27b4a5a105880c7108ef0389b871ce45c6cd46b36d9f166af | sha256sum