humanforai
OfficialClick on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@humanforaiVerify that the ACME store on 5th Ave is open and take a photo."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
humanforai
Python client and command-line tool for Human For AI — a human endpoint for AI agents. Let your agent, pipeline, or script hire a verified human operator for tasks that need physical presence, human perception, or human judgment:
Real-world verification — confirm a place, product, price, or claim exists, with photo/text evidence
Product or app testing — a real human installs, uses, and reports
Human judgment and feedback — tone, clarity, trustworthiness, design quality
AI output review — human review before your output reaches production
Data collection — gathering or labeling that needs human perception or local access
Local physical-world tasks — visit, photograph, check, measure, observe
Decision escalation — a human read on a judgment call before you act
…and anything else a human can legally and safely do (
custom_human_in_the_loop)
No API key. Free during the proof-of-concept pilot. Every task is reviewed by the human before acceptance; illegal, harmful, deceptive, unsafe, or privacy-invasive tasks are rejected. First response within 12 hours, any day of the week — typically much faster.
Zero dependencies (standard library only). Python 3.9+.
Install
pip install humanforaiWith offline receipt verification (needs cryptography):
pip install "humanforai[receipt]"Related MCP server: ProofStream MCP Server
Command line
humanforai services # the catalog with task_type identifiers
humanforai submit \
--type real_world_verification \
--description "Verify that [business] at [address] is open; photograph the storefront and posted hours." \
--location "City, address or area" \
--output-format text_report_with_photos \
--email you@your-domain.com
humanforai status HFAI-2026-XXXXXXXXXXXXXXXX # one look
humanforai status HFAI-2026-XXXXXXXXXXXXXXXX --watch # poll until delivered or rejected
humanforai message --reply-to you@your-domain.com --message "Can you cover [city] next week?"
humanforai thread MSG-ID --token ACCESS_TOKEN
humanforai verify-receipt HFAI-2026-XXXXXXXXXXXXXXXX # offline check of the signed receipt
humanforai healthEvery command accepts --json for raw output. Exit codes: 0 ok, 2 usage, 3 API error, 4 the task was rejected.
No mailbox? Autonomous agents can submit with --status-poll instead of --email: the deliverable arrives as text in operator_notes on the status endpoint (budget: one such task per client per day). Keep the task_id — it is your only key to the result.
Python
from humanforai import Client, HumanForAIError
client = Client(requester="my-agent/1.0")
task = client.submit_task(
task_type="ai_output_review",
description="Review these 10 AI-written product descriptions for plausibility and tone; "
"verdict + one-line reason each: [content or link].",
output_format="structured_json",
contact_email="you@your-domain.com",
)
print(task["task_id"], task["status_url"])
# Human review is not instant. Poll every minute or slower.
final = client.wait_for_task(task["task_id"], poll_interval=120)
print(final["status"], final.get("operator_notes"))Errors are structured:
try:
client.get_task("HFAI-NOPE")
except HumanForAIError as exc:
print(exc.status, exc.error, exc.message, exc.details, exc.rate_limit)Every response carries the standard RateLimit-* headers; the most recent set is on client.last_rate_limit. Retrying a submission with the same idempotency_key replays the original response instead of creating a duplicate.
Status transparency
get_task returns progress, not just the final state: seen_by_operator_at (the moment a human actually saw the task), eta (set on acceptance), and status_history (submitted → accepted → delivered, or rejected).
Signed receipts
Every delivered task carries receipt, a compact JWS (Ed25519) binding the deliverable's SHA-256 to the task's lifecycle timestamps. Verify it offline against the public key at https://humanforai.dev/.well-known/jwks.json:
from humanforai.receipt import verify_receipt
task = client.get_task(task_id)
payload = verify_receipt(task["receipt"], client.jwks(), deliverable_text=task["operator_notes"])A valid receipt proves the deliverable is byte-identical to what was delivered and that it was issued by humanforai.dev. It does not prove the timestamps were witnessed by anyone else — they are the service's own signed assertion. Details: https://humanforai.dev/trust#receipts.
Other ways in
MCP (streamable HTTP, no auth):
https://humanforai.dev/mcp— ornpx -y humanforaifor stdio clientsREST: https://humanforai.dev/api · OpenAPI: https://humanforai.dev/openapi.json
Agent manifest: https://humanforai.dev/.well-known/agent.json · llms.txt: https://humanforai.dev/llms.txt
Agent skill in one fetch: https://humanforai.dev/skill.md
Trust, in one paragraph
You never pay, never create an account, and are never asked for credentials — a request for payment or credentials is not from this service. You send a task description and an optional contact email; the worst case is a rejected task. Deliverables are one careful human's observation with stated confidence, not guaranteed truth. New here? Send a small, checkable test task first. Full analysis: https://humanforai.dev/trust.
License
MIT
Available Tools
6 toolscheck_message_threadRead a message threadARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes | The message id from message_human_operator, e.g. MSG-2026-1A2B3C4D | |
| access_token | Yes | The access_token returned once at submission — the only key to the thread. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the readOnlyHint annotation by explicitly stating it reads a thread and explains that an empty replies list means no answer yet. It goes beyond the annotation by describing the expected state of the output based on operator behavior, though it does not detail side effects (which is fine for a read operation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and front-loaded with the primary purpose. It uses only a few sentences to convey the output, parameter source, and polling guidance, with no redundant or vague phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of sibling tools, the description is complete enough: it explains the output, the meaning of an empty reply list, and the expected polling behavior. It lacks an explicit output schema, but the described output contents are sufficient for an agent to use the result. Minor edge cases (e.g., errors) are not covered but are not critical for this read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes both parameters with examples, and the description adds the context that these come from the submission response, clarifying their origin. This extra context helps the agent know where to obtain the values, going slightly beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a message thread, listing the exact output contents (original text, replies oldest-first, answer status). It distinguishes itself from sibling tools like reply_in_message_thread or submit_human_task by focusing on reading rather than sending or submitting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use the tool: after receiving a submission response, and it advises polling occasionally instead of in a loop due to human-speed responses. It does not explicitly mention alternatives or when not to use it, but the read-only nature is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_task_statusCheck task statusARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID returned by submit_human_task, e.g. HFAI-2026-A1B2C3D4E5F60718 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only nature is known. The description adds valuable behavioral detail: it specifies the response includes status history, seen_by_operator_at, eta, notes, and for delivered tasks a receipt and deliverable_sha256 with verification instructions. This goes beyond the annotations and helps the agent understand the full lifecycle and verification process.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that front-loads the primary purpose and then lists the return fields in order of importance. It is somewhat long but every sentence contributes meaningful information, including the verification URL. It is efficient without being terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one parameter and no output schema, the description covers all essential aspects: what it returns, the special fields, the verification mechanism for delivered tasks, and the source of the task_id. An agent has enough information to call it correctly and interpret the response. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter task_id, and the schema already explains it is the ID returned by submit_human_task. The description adds no further semantic detail about the parameter itself; it merely references 'task_id' in passing. Baseline of 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Look up' and the resource 'submitted task by its task_id', and then enumerates exactly what information is returned. It distinguishes itself from siblings like submit_human_task or message_human_operator by focusing solely on status retrieval, so an agent can identify it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly conveys when to use the tool: after a task has been submitted via submit_human_task, to check its status. It does not explicitly list exclusions or alternatives, but the context is clear given the sibling tools. It could have said 'Use this after submitting a task' but the implication is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_human_servicesList human servicesARead-only
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description uses 'Fetch' and 'Call this first,' which imply a read-only, informational operation consistent with the readOnlyHint annotation. It also aligns with openWorldHint by stating the catalog is examples, not limits. The description adds context about the manifest contents beyond the annotations, providing transparent expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with the first sentence listing the manifest contents and the second providing a clear usage directive. The open-world note is brief and adds value without bloat. The structure is front-loaded with the core purpose and then actionable guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for its simple, parameterless, read-only nature. It explains what information will be returned (services, profile, policies, etc.), how to use the information (decide whether and how to hire), and how to handle catalog gaps. No output schema is present, but the description sufficiently covers expected content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema description coverage is 100% (empty schema). There is nothing to explain about parameters; the description correctly omits any parameter discussion. The baseline for high schema coverage applies, and no additional compensation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches the Human For AI manifest and enumerates its contents (services, operator profile, response times, task types, trust & safety). It also explicitly says 'Call this first to decide whether and how to hire the human,' which distinguishes its purpose from the sibling tools that submit or check tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit timing guidance: 'Call this first to decide whether and how to hire the human.' This tells the agent when to use this tool relative to the alternatives (e.g., before submit_human_task or message_human_operator). The note that unlisted needs are welcome as custom_human_in_the_loop also clarifies how to handle catalog gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
message_human_operatorMessage the human operatorA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Your agent or system identifier | |
| message | Yes | The message. Plain language, English. | |
| subject | No | Short subject line | |
| reply_to | Yes | REQUIRED. Email address for the reply (real, reachable, MX-checked) — or an https webhook URL for a signed push. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, open-world operation. The description adds valuable context: reply_to is required and can be an MX-checked email or a signed webhook URL; the response includes thread_url and access_token; every message becomes a pollable thread; and the token is shown only once. These specifics go beyond the annotation flags and clarify the reply mechanism, though it does not detail the exact response schema (which is absent).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact paragraph of four sentences, front-loaded with the purpose, then the required parameter, the reply mechanism, and the token caveat. It is efficient with no filler, though it packs several details into a dense structure that could be slightly more scannable with line breaks. Still, it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters (two required) and no output schema, the description covers the essential operational details: how to specify the reply destination, how to read the response, and the security caveat about the token. It doesn't mention error conditions or immediate side effects, but those are not critical given the open-world hint and the clear mechanism for obtaining the reply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter is documented in the schema. The description goes further by explaining the dual nature of reply_to (email vs. webhook) and the one-time token behavior, which adds meaning beyond the schema's simple descriptions. This justifies a score above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb (send), the resource (human operator), and the scope (free-form messages, questions, scoping, custom/recurring projects, anything not a ready-made task). This explicitly differentiates it from submit_human_task, which handles ready-made tasks, so an agent can easily distinguish purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'anything that is not yet a ready-made task,' which tells the agent when to use this tool instead of submit_human_task. It also names check_message_thread as the way to read replies, providing a clear alternative for follow-up. No ambiguity remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_in_message_threadFollow up in a message threadA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The follow-up text | |
| message_id | Yes | The message id from message_human_operator | |
| access_token | Yes | The access_token returned once at submission |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only, non-idempotent, non-destructive; description adds context that it modifies an existing thread and can withdraw a request, making side effects clear. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences; no redundancy; clear structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a simple 3-param tool; includes purpose, guidance, and source of required values; no output schema needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions for all three params are clear and the description reiterates where message_id and access_token come from.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verb 'Add a follow-up' to a thread, lists concrete use cases (answer question, add detail, correct, withdraw), and explicitly distinguishes from sending a brand-new message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Prefer this over sending a brand-new message about the same subject' and notes required inputs from submission response. Could further contrast with message_human_operator for new threads, but current guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_human_taskSubmit a task to the humanA
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).
| Name | Required | Description | Default |
|---|---|---|---|
| deadline | No | ISO 8601 datetime, e.g. 2026-07-10T12:00:00+03:00 | |
| delivery | No | 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. | |
| requester | No | Your agent or system identifier, e.g. my-agent/1.0 | |
| task_type | Yes | 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 | |
| description | Yes | What to do, where, and what success looks like. Specific, self-contained tasks are accepted faster. | |
| contact_email | No | 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. | |
| output_format | No | text_report (default), text_report_with_photos, structured_json, annotated_screenshots, or video | |
| location_detail | No | City, address, or area — required in practice when location_required is true | |
| location_required | No | true if the task needs physical presence (coverage is confirmed at review) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, openWorldHint=true) already signal a real-world write, and the description adds substantial behavior beyond them: the human reviews every task before accepting, this is not instant execution, the operator is push-notified on submission, MX-checking on contact_email, and the pilot is free. This is exactly the kind of async and validation context an agent needs and that structured annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with zero waste, and the most critical caveat (human review, not instant execution) is front-loaded. Every clause earns its place: async review, push notification, pilot free, MX-check, and the status_poll fallback all carry distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex open-world tool (9 params, no output schema), the description is remarkably complete: it covers the return value (task_id), the async acceptance flow, the tracking path via check_task_status, both delivery modes with their constraints, and the daily budget. The only minor omission is what happens on task rejection, which is acceptable for a submission tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema descriptions are themselves rich (delivery enum, task_type guidance). The description adds genuine cross-parameter value on top: the contact_email↔delivery coupling (email needs a real MX-checked mailbox; status_poll is the no-mailbox path), the 1-per-day status_poll budget, and 'keep the task_id, it is your only key.' That goes beyond a baseline 3 but the schema already does heavy lifting, so 4 is right.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Submit a task for the human operator to perform in the real world') and immediately scopes it as an async submission, not execution. It is clearly distinguishable from siblings: get_human_services (listing), check_task_status (tracking), message_human_operator (conversation). The core action, the return value, and the non-instant nature are all in the first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Routes the agent to the correct follow-up tool ('check_task_status shows seen_by_operator_at...') and to get_human_services for task_type descriptions, and gives an explicit alternative for the delivery path ('No mailbox? Set delivery to status_poll instead'). It lacks explicit when-not guidance versus the messaging siblings (message_human_operator), so it earns a 4 rather than a 5, but the workflow routing is solid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v0.1.0- First observed
check_message_thread - First observed
check_task_status - First observed
get_human_services - First observed
message_human_operator - First observed
reply_in_message_thread - First observed
submit_human_task
TDQS
Each tool targets a distinct resource and action: service discovery, task submission, task status polling, initiating a message thread, reading a thread, and replying within a thread. The descriptions clarify boundaries between tasks and messages, so an agent is unlikely to confuse them.
All tool names follow a consistent verb_noun pattern: get_human_services, submit_human_task, check_task_status, message_human_operator, check_message_thread, reply_in_message_thread. The verbs are clear and the objects are descriptive, with no style mixing.
Six tools is well-scoped for a human-in-the-loop service: two for task lifecycle (submit/check), three for threaded messaging (message/check/reply), and one for capability discovery. Every tool serves a distinct purpose without bloat.
The core workflows are covered: discover services, submit tasks, track task status, and hold asynchronous conversations. Minor gaps exist such as no explicit task cancellation or listing all tasks, but these can be worked around via messaging and the returned task_id, so the surface is largely complete for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hire humans for tasks agents cannot do: errands, calls, photos, verification. Escrowed, verified.
Human-as-a-Service for AI agents. Delegate tasks that need a real human, get results via API.
Human-in-the-loop API for AI agents. CAPTCHA, OTP, KYC, and approvals by real humans.
Dispatch real-world physical tasks to verified human operators. Escrow or direct-settlement.
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables AI agents to search for and hire humans for real-world tasks.33627MIT
- AlicenseAqualityCmaintenanceEnables AI agents to dispatch human verifiers for physical world tasks like product authentication, property inspection, and document verification, returning timestamped evidence reports.347MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to route tasks requiring human judgment (e.g., content moderation, refund decisions, data verification) to a vetted worker pool, with verified results returned via Lightning Network payments.MIT
- FlicenseNot gradedqualityDmaintenanceLets AI agents natively discover and hire human experts for tasks they can't do themselves, such as research, verification, and expert calls.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/humanforai/humanforai-python'
If you have feedback or need assistance with the MCP directory API, please join our Discord server