MeatSpace

io.github.zmarten由 GitHub 账号 zmarten 发布v0.1.0更新于 Oct 24, 2026

Human-in-the-loop for AI agents. Submit choices, get a human decision.

已验证Streamable HTTP可网页运行效率与工作流沟通与协作

概览

AI 生成的概览

MeatSpace 是一个远程人在回路服务,让助手把 2–4 个选项的选择提交给真人审阅者,并取回被选中的答案。

可以做什么
  • 检查服务可用性,并获取何时应升级给人类决策的建议
  • 提交标题、可选内容和 2–4 个带标签的选项给真人审阅者,并取回所选选项
  • 短暂等待答复;若无人回应,则返回待处理状态以及审阅链接和轮询链接
  • 无需认证即可签发新的 API 密钥,受每个邮箱地址的数量限制
适用场景
适合助手遇到主观、含糊或后果重大的决策时使用,例如部署、删除或付款前的审批,口味类选择,或置信度不足时的平局裁决。不适用于确定性、可自动验证或易于回退的任务。
运行要求
远程 Streamable HTTP 端点,无需本地安装。ask_human 工具需要 Authorization Bearer 令牌,可通过免认证的签发工具或 REST 密钥接口创建。需要能访问该服务的网络。
安装前请注意
签发工具无需认证即可创建真实 API 密钥,任何能访问该端点的人都能生成;密钥按邮箱地址限量。请求会把标题、内容和选项发送给第三方服务及真人审阅者,请勿提交机密材料。该工具可能阻塞约 20 秒,并可能只返回待处理而非最终决定。

安装

在 SourceWeft 中

  1. 打开 控制台中的 MeatSpace,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.zmarten%2Fmeatspace/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "meatspace": {
      "type": "http",
      "url": "https://meatspace.run/api/mcp"
    }
  }
}

README

MeatSpace

Human-in-the-loop service for AI agents. When an agent hits a subjective, high-stakes, or ambiguous decision, MeatSpace routes it to a human who picks one of 2–4 options and returns a structured result.

Live at meatspace.run

What it does

An agent posts a title, optional content (text, markdown, HTML, or an image), and 2–4 labeled choices. A human reviewer is shown the request, picks one, and the API returns the selected id and label. The agent waits via long-poll or webhook.

Typical use cases:

  • Approval gates before destructive or irreversible actions (deploys, deletes, payments).
  • Subjective tie-breaks where the model is below its confidence threshold.
  • Tasteful judgment calls — copy choices, design preferences, ranking ties.
  • Escalation when an agent has run out of deterministic checks.

Don't use it when the task is deterministic, automatically verifiable, or low-stakes and easily reversible.

Three integration methods

MethodEndpointBest for
REST APIPOST /api/requestsAny HTTP client, custom agent frameworks, server-to-server.
MCPPOST /api/mcp (Streamable HTTP)Claude, Claude Code, MCP-compatible clients.
Browser SDK/sdk/meatspace.jsAgents running in a browser tab.

All three sit on the same backing API and accept the same Bearer token.

Zero-setup self-service flow

A new agent can fully onboard itself in three calls — no signup page, no approval queue, no human in the setup loop:

  1. POST /api/keys with {"name": "your-agent", "email": "[email protected]"} → returns an API key instantly. Rate-limited to 5 keys per email.
  2. POST /api/requests with the Bearer token, your title, and choices → creates the review request.
  3. GET /api/requests/{id}/wait → blocks until the human responds, or times out and returns pending with a review_url and poll_url.

The same flow is available over MCP: initialize → tools/list → provision_api_key → ask_human. The provision_api_key and get_service_status tools require no auth, so a fresh MCP client can connect without credentials and bootstrap itself.

REST quickstart

Provision a key:

bash
curl -X POST https://meatspace.run/api/keys \  -H "Content-Type: application/json" \  -d '{"name": "my-agent", "email": "[email protected]"}'

The response includes api_key — shown once, save it. All subsequent calls use Authorization: Bearer <token>.

Create a request:

bash
curl -X POST https://meatspace.run/api/requests \  -H "Authorization: Bearer $MEATSPACE_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "agent_name": "my-agent",    "title": "Ship v2.0 to production?",    "content": "All tests pass. Staging looks good. 2 minor lint warnings.",    "choices": [      { "id": "ship", "label": "Ship it" },      { "id": "wait", "label": "Wait for next cycle" }    ],    "confidence": 0.7,    "consequence_of_wrong_choice": "Premature ship affects ~50k users"  }'

Response:

json
{  "success": true,  "data": {    "id": "uuid",    "status": "pending",    "review_url": "https://meatspace.run/review/uuid?token=opaque-review-token",    "poll_url": "/api/requests/uuid",    "expires_at": "2026-04-23T19:00:00.000Z"  }}

Long-poll for the result:

bash
curl https://meatspace.run/api/requests/{id}/wait?timeout=25000 \  -H "Authorization: Bearer $MEATSPACE_API_KEY"

Returns { status: "completed", selected, selected_label, responded_at } when the human responds, or 202 if still pending.

Optional fields on POST /api/requests: content_type (text default, markdown, html, image), decision_reason, confidence (0–1), consequence_of_wrong_choice, recommended_option, callback_url (must be HTTPS and host-allowlisted), metadata (passed through to the webhook), run_id, trace_id, timeout_seconds (default 3600, max 86400).

MCP

MeatSpace implements MCP over Streamable HTTP at https://meatspace.run/api/mcp. The server exposes three tools:

  • get_service_status — availability and escalation guidance. No auth.
  • provision_api_key — mint a Bearer token. No auth, rate-limited.
  • ask_human — submit a decision. Requires Bearer auth.

Claude Code config:

json
{  "mcpServers": {    "meatspace": {      "type": "url",      "url": "https://meatspace.run/api/mcp",      "headers": {        "Authorization": "Bearer <your-api-key>"      }    }  }}

ask_human long-polls for up to 20 seconds. If the human hasn't responded by then, the tool returns status: "pending" with a review_url (for the human) and a poll_url (for the agent).

Browser SDK

For agents running in browser contexts:

html
<script type="module">  import { MeatSpace } from 'https://meatspace.run/sdk/meatspace.js';
  const ms = new MeatSpace();  await ms.getKey({ name: 'browser-agent', email: '[email protected]' });
  const result = await ms.ask({    agentName: 'browser-agent',    title: 'Which option?',    choices: [      { id: 'a', label: 'A' },      { id: 'b', label: 'B' },    ],  });  console.log(result.selected);</script>

Methods: getKey(), createRequest(), pollResult(), waitForResult(), ask() (create + wait).

Webhooks

If callback_url is set on the request, MeatSpace POSTs the result when the human responds:

json
{  "event": "request.completed",  "request_id": "uuid",  "selected": "ship",  "selected_label": "Ship it",  "responded_at": "2026-04-23T18:10:00.000Z",  "metadata": {}}

callback_url must be https:// and the hostname must be explicitly allowlisted by the operator. If no allowlist is configured, request creation rejects callback URLs. Each delivery is signed with X-HITL-Timestamp and X-HITL-Signature headers.

Discovery endpoints

PathFormatPurpose
/.well-known/mcp.jsonJSONMCP server manifest
/.well-known/agent.jsonJSONA2A Agent Card
/api/openapiJSONOpenAPI 3.1 spec
/api/mcp (GET)JSONMCP server info, no auth
/api/statusJSONHealth check + agent guidance
/sdk/meatspace.jsJavaScriptBrowser SDK
/llms.txtTextLLM-readable summary
/llms-full.txtTextFull API documentation
/agents.mdMarkdownFull integration guide
/sitemap.xmlXMLSitemap
/robots.txtTextCrawler directives + discovery pointers

Errors

All errors return:

json
{  "success": false,  "error": "Human-readable message",  "code": "machine_readable_code"}

Common codes: agent_name_required, invalid_choice_count, content_too_large, callback_url_not_allowed, request_create_failed.

Local development

This repo is a Next.js 14 app deployed on Cloudflare Pages.

bash
npm installnpm run dev          # local dev at http://localhost:3000npm run test         # integration testsnpm run build:cf     # build for Cloudflare Pagesnpm run deploy:cf    # build and deploy

Supabase is the system of record for keys and requests; Resend handles transactional email.

License

MIT

来源:README.md,提交 ae06995

工具

3

get_service_status

Check whether MeatSpace is available and when to use a human. Call this when deciding whether to escalate a subjective or high-consequence choice.

无需输入参数。

ask_human

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.

输入参数title必填run_idchoices必填contentmetadatatrace_idagent_name必填confidencecallback_urlcontent_typedecision_reasontimeout_seconds另有 2 个

provision_api_key

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.

输入参数name必填email必填

版本历史

1
  1. v0.1.0最新Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。