Human-in-the-loop for AI agents. Submit choices, get a human decision.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer token for the ask_human tool. Optional — get_service_status and provision_api_key require no auth, so a fresh client can connect without credentials and call provision_api_key to mint a token instantly.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Present content to a human and ask them to choose between options. Use this for subjective judgment, approval, preference, or tie-breaks. Avoid using it for deterministic checks or reversible low-stakes choices. The tool waits briefly for a result, then returns pending if the human has not responded yet.
Short title for the request (max 200 chars)
2-4 choices for the human to pick from
Your agent/tool name (max 100 chars)
Optional workflow run identifier
Content for the human to review (text, markdown, HTML, or image URL). Max 50KB.
Optional metadata passed through to webhook
Optional trace identifier
Agent confidence between 0 and 1
Optional HTTPS webhook URL for async notification
How to render the content. Default: text
Why the agent is escalating this to a human (max 500 chars)
Request expiry in seconds (default 3600, max 86400)
Optional choice id the agent currently recommends
Why a wrong choice matters (max 500 chars)
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Present content to a human and ask them to choose between options. Use this for subjective judgment, approval, preference, or tie-breaks. Avoid using it for deterministic checks or reversible low-stakes choices. The tool waits briefly for a result, then returns pending if the human has not responded yet.
| Argument | Type | Description |
|---|---|---|
| title* | string | Short title for the request (max 200 chars) |
| run_id | string | Optional workflow run identifier |
| choices* | array | 2-4 choices for the human to pick from |
| content | string | Content for the human to review (text, markdown, HTML, or image URL). Max 50KB. |
| metadata | object | Optional metadata passed through to webhook |
| trace_id | string | Optional trace identifier |
| agent_name* | string | Your agent/tool name (max 100 chars) |
| confidence | number | Agent confidence between 0 and 1 |
| callback_url | string | Optional HTTPS webhook URL for async notification |
| content_type | string | How to render the content. Default: text |
| decision_reason | string | Why the agent is escalating this to a human (max 500 chars) |
| timeout_seconds | number | Request expiry in seconds (default 3600, max 86400) |
| recommended_option | string | Optional choice id the agent currently recommends |
| consequence_of_wrong_choice | string | Why a wrong choice matters (max 500 chars) |
{
"type": "object",
"required": [
"agent_name",
"title",
"choices"
],
"properties": {
"title": {
"type": "string",
"description": "Short title for the request (max 200 chars)"
},
"run_id": {
"type": "string",
"description": "Optional workflow run identifier"
},
"choices": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"label"
],
"properties": {
"id": {
"type": "string",
"description": "Unique choice identifier (max 50 chars)"
},
"label": {
"type": "string",
"description": "Human-readable label (max 100 chars)"
}
}
},
"maxItems": 4,
"minItems": 2,
"description": "2-4 choices for the human to pick from"
},
"content": {
"type": "string",
"description": "Content for the human to review (text, markdown, HTML, or image URL). Max 50KB."
},
"metadata": {
"type": "object",
"description": "Optional metadata passed through to webhook"
},
"trace_id": {
"type": "string",
"description": "Optional trace identifier"
},
"agent_name": {
"type": "string",
"description": "Your agent/tool name (max 100 chars)"
},
"confidence": {
"type": "number",
"description": "Agent confidence between 0 and 1"
},
"callback_url": {
"type": "string",
"description": "Optional HTTPS webhook URL for async notification"
},
"content_type": {
"enum": [
"text",
"markdown",
"html",
"image"
],
"type": "string",
"description": "How to render the content. Default: text"
},
"decision_reason": {
"type": "string",
"description": "Why the agent is escalating this to a human (max 500 chars)"
},
"timeout_seconds": {
"type": "number",
"description": "Request expiry in seconds (default 3600, max 86400)"
},
"recommended_option": {
"type": "string",
"description": "Optional choice id the agent currently recommends"
},
"consequence_of_wrong_choice": {
"type": "string",
"description": "Why a wrong choice matters (max 500 chars)"
}
}
}Check whether MeatSpace is available and when to use a human. Call this when deciding whether to escalate a subjective or high-consequence choice.
No arguments.
{
"type": "object",
"required": [],
"properties": {}
}Create a MeatSpace API key instantly. No authentication required. Returns a Bearer token for use with the ask_human tool. Max 5 active keys per email address.
| Argument | Type | Description |
|---|---|---|
| name* | string | Agent or tool name (max 100 chars) |
| email* | string | Owner email address |
{
"type": "object",
"required": [
"name",
"email"
],
"properties": {
"name": {
"type": "string",
"description": "Agent or tool name (max 100 chars)"
},
"email": {
"type": "string",
"description": "Owner email address"
}
}
}