MCP server that dispatches physical-world tasks to humans through a unified API
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
๐ humandispatch.ai โ Homepage & provider docs
A universal dispatch layer for AI-agent-to-human task routing โ Any business (law firms, VA services, freelancers, agencies) can plug in via webhooks and start receiving AI-dispatched tasks in minutes.
Routes tasks to registered webhook providers with smart matching, fallback chains, and proof-of-completion tracking. Any service provider registers a webhook, and the router matches tasks to providers based on capabilities, region, and budget.
The easiest way to verify the server is working:
Open http://localhost:5173, enter the proxy session token shown in your terminal, and click Connect.
List backends โ call human_list_backends to see webhook_provider and manual
Register a provider โ call human_register_provider:
human_dispatch_task with Raw JSON input mode:The task should route to your registered provider. If no providers match, it falls through to the manual backend.
Note: HTTP transport binds to
127.0.0.1only. For remote access, place a TLS-terminating reverse proxy (e.g. nginx, Caddy) in front of the server. Never expose the port directly.
Required: HTTP transport refuses to start without
MCP_AUTH_TOKENset. AllPOST /mcprequests must includeAuthorization: Bearer <MCP_AUTH_TOKEN>. The/callbacks/task/:taskIdendpoint uses HMAC-signature auth instead โ providers do not see the bearer token.
| Tool | Description |
|---|---|
human_dispatch_task | Submit a task to be completed by a human worker via the best matching provider |
human_get_task_status | Poll the current status, worker info, and proof submissions for a task |
human_cancel_task | Cancel a pending or in-progress task |
human_list_tasks | List tasks with filters (status, backend, category) and pagination |
human_list_backends | Show available backends, their configuration status, and capabilities |
human_register_provider | Register a webhook provider to receive dispatched tasks |
human_list_providers | List registered providers with stats and filters |
human_remove_provider | Deregister a webhook provider |
Any business can register as a provider to receive AI-dispatched tasks. Here's how:
Your endpoint receives POST requests with these headers:
| Header | Description |
|---|---|
x-dispatch-signature | sha256=<hmac_hex> โ HMAC-SHA256 of the request body using your shared secret |
X-Dispatch-Event | Event type: task.new, task.cancel, or provider.verify |
X-Dispatch-TaskId | UUID of the task |
task.new eventsRequest body:
payload_version is the request-shape version; pin your parser to a known version and reject unknown ones. Today only 1 is sent.
Respond with:
Or reject:
provider.verify eventsWhen a provider is registered, the server immediately POSTs a provider.verify event to confirm the endpoint is reachable and willing. A 200 alone is not enough โ your endpoint must return { "verified": true } in the JSON body. Anything else (missing field, false, non-JSON) marks verification as unreachable. This makes registration require explicit consent from your endpoint, not just URL reachability.
POST to http://<server>/callbacks/task/<task_id> with headers:
x-provider-id: Your provider UUIDx-dispatch-signature: sha256=<hmac_hex> of the bodyAlways verify incoming webhooks using your shared secret:
HMAC canonicalization contract (load-bearing): the signature is computed over the exact bytes the request was POSTed with, not over a re-serialized JSON object. When you send a callback, sign the byte string you put on the wire โ do not parse the body, re-stringify it, and sign that, because key ordering or whitespace may differ. Use JSON.stringify(payload) once, capture the resulting string, sign that string, send that string. The server applies the same rule on the receiving side: it captures the raw request body buffer before any JSON parser touches it.
The router automatically picks the best backend based on:
preferred_backends and fallback_chain are honored firstmanual backend is always available as the ultimate fallbackNo reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/human-dispatch-mcp)<a href="https://allmcps.com/mcp/human-dispatch-mcp"><img src="https://allmcps.com/api/badge/human-dispatch-mcp?style=directory" alt="Human Dispatch MCP on AllMCPs" /></a>