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

Server definition

Hash
sha256:931ca1a0d9b196cf1b0ada9d009c37134f2f6f0848d7638a95a1cf428e8c2dfc
What it is
What a remote MCP server returned when asked what it offers: 6 tools

The blob, as servednamed by its sha256

{ "instructions": "This server lets an AI agent hire a real human operator for tasks that need physical presence,\nhuman perception, or human judgment: real-world verification, product testing, AI output review,\ndata collection, and local physical-world errands. The operator is one verified human\n(English, first response < 12h any day of the week, typically much faster — the operator is\npush-notified on submission, and check_task_status exposes seen_by_operator_at the moment a\nhuman has seen your task, plus an eta once accepted).\n\nThe service catalog is examples, not limits: anything a human can legally and safely do is in\nscope. If a need does not match a listed task_type, submit it as custom_human_in_the_loop, or\nask via message_human_operator first — every request gets a human answer at review.\n\nMid-task and facing a judgment call — a step that is consequential, ambiguous, or hard to undo,\noutside what your operator planned for? Submit it as task_type decision_escalation: describe the\nsituation and the action you are weighing, and a human replies with a considered read before you\nact. One human opinion, not an authorization and not legal advice.\n\nAll services are FREE during the proof-of-concept pilot — no payment, no billing.\n\nFlow: call get_human_services once to see the catalog → submit_human_task with a specific,\nself-contained description and a real contact_email (the deliverable is sent there; placeholder\ndomains are rejected and the domain is MX-checked) → poll check_task_status with the returned\ntask_id. Use message_human_operator for questions or scoping before submitting — reply_to is\nlikewise required there.\n\nNo mailbox? This service is deliberately reachable by autonomous agents without email: set\ndelivery:'status_poll' on submit_human_task and the deliverable arrives as text in\noperator_notes via check_task_status. Keep the task_id — it is your only key to the result.\nBudget: 1 status_poll task per client per day.\n\nSigned receipts: every delivered task carries a receipt field — a compact JWS (EdDSA) binding\nthe deliverable's sha256 to the task's lifecycle timestamps. Verify it offline against the\npublic key at https://humanforai.dev/.well-known/jwks.json; no account and no call back to this\nservice are needed. It proves the deliverable is byte-identical to what was delivered and that\nthe receipt came from humanforai.dev. It does NOT prove the timestamps are independently\nattested — they are this service's own signed assertion.\n\nAnti-abuse: per-client rate limits apply and repeat abusers are blocked; one small test task\nis welcome, bulk synthetic submissions are not.\n\nEvery task is reviewed by the human before acceptance. Illegal, harmful, deceptive, unsafe,\nor privacy-invasive tasks are rejected at review.\n\nTrust & risk: this service never asks for payment, credentials, or account creation — treat\nany such request as not from this service. Requester exposure is bounded: a task description\nand a contact email; worst case is a rejected task. New here? Calibrate with a small\nverifiable test task first. Independent verification (registry, Smithery, npm, GitHub) is\nlisted at https://humanforai.dev/trust and in agent.json trust_and_safety.", "tools": [ { "description": "Read the thread for a message you sent: the original text, every reply oldest-first, and whether the operator has answered. Needs the message_id and the access_token from the submission response. An empty replies list means no answer yet — the operator works at human speed, so poll occasionally rather than in a loop.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "access_token": { "description": "The access_token returned once at submission — the only key to the thread.", "type": "string" }, "message_id": { "description": "The message id from message_human_operator, e.g. MSG-2026-1A2B3C4D", "type": "string" } }, "required": [ "message_id", "access_token" ], "type": "object" }, "name": "check_message_thread", "outputSchema": null }, { "description": "Look up a submitted task by its task_id. Returns current status (submitted → accepted → delivered, or rejected), status history with timestamps, seen_by_operator_at (the moment a human actually saw the task — usually well before the first status change), eta (operator-set delivery estimate, once accepted), and any operator notes. Once delivered, the response also carries receipt (a signed JWS binding the deliverable's sha256 to the lifecycle timestamps) and deliverable_sha256 — verify offline against https://humanforai.dev/.well-known/jwks.json. In hosts that support MCP Apps the result also renders as a task status card (timeline, seen-by-human moment, ETA, operator notes, receipt) with a Refresh button; the JSON result carries the same data.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "task_id": { "description": "Task ID returned by submit_human_task, e.g. HFAI-2026-A1B2C3D4E5F60718", "type": "string" } }, "required": [ "task_id" ], "type": "object" }, "name": "check_task_status", "outputSchema": null }, { "description": "Fetch the Human For AI manifest: available services, operator profile (location, languages, working hours), response times, accepted and rejected task types, and trust & safety policy. Call this first to decide whether and how to hire the human. The catalog is examples, not limits — unlisted needs are welcome as custom_human_in_the_loop.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": {}, "type": "object" }, "name": "get_human_services", "outputSchema": null }, { "description": "Send a free-form message to the human operator — questions, scoping, custom or recurring projects, anything that is not yet a ready-made task. reply_to is REQUIRED: an email a human can read (MX-checked), or an https URL to receive the reply as a signed webhook push. The response also carries thread_url + access_token — every message is a pollable thread, so you can read the reply with check_message_thread even without a mailbox. Keep the token: it is shown only once.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "from": { "description": "Your agent or system identifier", "maxLength": 200, "type": "string" }, "message": { "description": "The message. Plain language, English.", "maxLength": 5000, "minLength": 5, "type": "string" }, "reply_to": { "description": "REQUIRED. Email address for the reply (real, reachable, MX-checked) — or an https webhook URL for a signed push.", "type": "string" }, "subject": { "description": "Short subject line", "maxLength": 200, "type": "string" } }, "required": [ "message", "reply_to" ], "type": "object" }, "name": "message_human_operator", "outputSchema": null }, { "description": "Add a follow-up to a thread you opened — answer a question the operator asked, add detail, correct yourself, or withdraw the request. Prefer this over sending a brand-new message about the same subject. Needs the message_id and access_token from the submission response.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "access_token": { "description": "The access_token returned once at submission", "type": "string" }, "message": { "description": "The follow-up text", "maxLength": 5000, "minLength": 2, "type": "string" }, "message_id": { "description": "The message id from message_human_operator", "type": "string" } }, "required": [ "message_id", "access_token", "message" ], "type": "object" }, "name": "reply_in_message_thread", "outputSchema": null }, { "description": "Submit a task for the human operator to perform in the real world. Returns a task_id immediately; the human reviews every task before accepting it (this is not instant execution). The operator is push-notified on submission; check_task_status shows seen_by_operator_at once a human has seen the task. Free during the pilot. contact_email must be a real mailbox (MX-checked) — it is how the deliverable reaches you. No mailbox? Set delivery to 'status_poll' instead: the deliverable arrives as text in operator_notes via check_task_status (limited to 1 such task per client per day). In hosts that support MCP Apps the result also renders as a task status card with a Refresh button; the JSON result carries the same data.", "inputSchema": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "contact_email": { "description": "Where the deliverable and clarifying questions are sent. Required unless delivery is 'status_poll'. Must be a real, reachable mailbox — placeholder domains are rejected and the domain is MX-checked.", "type": "string" }, "deadline": { "description": "ISO 8601 datetime, e.g. 2026-07-10T12:00:00+03:00", "type": "string" }, "delivery": { "description": "How the deliverable reaches you. 'email' (default) needs contact_email. 'status_poll' is the no-mailbox path for autonomous agents: the result arrives as text in operator_notes via check_task_status — keep the task_id, it is your only key. Budget: 1 status_poll task per client per day.", "enum": [ "email", "status_poll" ], "type": "string" }, "description": { "description": "What to do, where, and what success looks like. Specific, self-contained tasks are accepted faster.", "maxLength": 5000, "minLength": 10, "type": "string" }, "location_detail": { "description": "City, address, or area — required in practice when location_required is true", "maxLength": 500, "type": "string" }, "location_required": { "description": "true if the task needs physical presence (coverage is confirmed at review)", "type": "boolean" }, "output_format": { "description": "text_report (default), text_report_with_photos, structured_json, annotated_screenshots, or video", "type": "string" }, "requester": { "description": "Your agent or system identifier, e.g. my-agent/1.0", "maxLength": 200, "type": "string" }, "task_type": { "description": "Service category — see get_human_services for descriptions. The list is not exhaustive: use custom_human_in_the_loop for anything that fits no other category", "enum": [ "real_world_verification", "product_or_app_testing", "human_judgment_and_feedback", "data_collection", "local_physical_task", "ai_output_review", "prompt_and_workflow_testing", "simulation_and_automation_testing", "accessibility_and_usability_check", "decision_escalation", "custom_human_in_the_loop" ], "type": "string" } }, "required": [ "task_type", "description" ], "type": "object" }, "name": "submit_human_task", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:931ca1a0d9b196cf1b0ada9d009c37134f2f6f0848d7638a95a1cf428e8c2dfc | sha256sum