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 分

    請在儲存庫或註冊中心條目中宣告授權條款。