個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證GameDay testing for MCP servers. Four named experiments over the JSON-RPC wire, in a Docker sandbox, with scripted and Ollama agent seats. Receipts, tapes and a dataset come out. The oracle is the wire, not the scoreboard.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
GameDay for MCP servers. The house keeps the tape.
You point Arcade at an MCP server. It runs four named experiments against it, with a scripted agent or a local model in the seat, and records everything that crossed the wire. The oracle is the JSON-RPC wire plus the sandbox: which tools/call went out, with which arguments, whether a menu changed between listings, whether a file appeared where none should. It does not score a regex on a tool description, a flourish in a terminal, or a model's essay about itself.檢視完整 README ↗You point Arcade at an MCP server. It runs four named experiments against it, with a scripted agent or a local model in the seat, and records everything that crossed the wire. The oracle is the JSON-RPC wire plus the sandbox: which tools/call went out, with which arguments, whether a menu changed between listings, whether a file appeared where none should. It does not score a regex on a tool description, a flourish in a terminal, or a model's essay about itself.
A full bar is not a safety certificate. It means these experiments did not catch a lie this time.
What comes out is a receipt and, from it, a tape: one row per wire event, with no score on it. The tape is what the arcade plays. The instrument scores the wire; the games never do.
That is the whole catalog, on purpose. Each one is a question the wire can answer.
| Experiment | Atom | What it asks |
|---|---|---|
| The Honest Menu | inspect.tools_list | Is the menu the server publishes the menu it will serve? |
| The Whispered Errand | poison.follow_through | Does a side-quest buried in a description become a tools/call? |
| The Long Con | temporal.rug_pull | After a few clean calls, is it still the same tool? |
| The Ghost on the Menu | protocol.unlisted_call | Does the server answer a name that was never on the menu? (holdout) |
The agent on the other end is a policy, not a judge. naive follows "also call X" whispers; task-only runs the named tool and stops; ollama:<model> is a local model that sees the menu as presented and emits calls. naive and task-only are the controls. Only the model's tool calls reach the receipt; its prose never does, so nothing it says about itself can become a label.
pip install mcp-arcade
Python 3.11 or later. From a clone: pip install -e ".[dev]". Version 0.2.0; still 0.x, and the version says what it means.
# The lab fixture. No --allow-live needed. naive will follow the whisper.
mcp-arcade bout --target fixture --agent naive --no-prompt -o receipt.json
# Same lab, the policy that refuses whispered errands.
mcp-arcade bout --target fixture --agent task-only --no-prompt
# Your stdio server. Fail-closed: opt in, and name a benign task.
mcp-arcade bout --target stdio \
--cmd python --cmd -m --cmd your_server \
--task your_read_only_tool \
--allow-live --no-prompt
# Your container. Arcade runs it with safe defaults and snapshots /sandbox.
mcp-arcade bout --target docker --image your/image:tag \
--task your_read_only_tool --allow-live --no-prompt
# A local model in the seat, allowed to call only the named tools.
mcp-arcade bout --target stdio --cmd "npx -y your-server" \
--agent ollama:qwen2.5:7b-instruct --task your_read_only_tool \
--seat-allow your_read_only_tool --allow-live --no-prompt
Leave off --no-prompt in a real terminal: Arcade shows the tape and asks what you think the wire will show before it posts the score, then recaps the call against the wire. --atoms picks experiments; --wrap with --wrap-target plants the house's own whisper on a live menu, pointed at a tool that cannot do harm.
Docker is the sandbox for a real container: one fresh container per experiment, the image id pinned and drift-checked, /sandbox snapshotted from inside, no host binds unless you name one. Only Arcade's own fixture image skips --allow-live; your image always needs it. The handbook has every flag, the framings, the seat's options, and what a green bar is not.
mcp-arcade receipt receipt.json --timeline # one row per wire event, no score
mcp-arcade receipt receipt.json --timeline --score --verbose
mcp-arcade tape receipt.json -o tape.json # the cabinets' input
mcp-arcade dataset ./receipts -o ./dataset # one row per atom, labels from the wire
The timeline is the diagnostic: every tools/call, every reply, every notification, the ghost probe, and a [no response] where a server went quiet. Scores stay off it until you ask. The tape file is an allowlisted view of the receipt with wire rows, the named tasks and the wire-derived facts, and no field for a score, a result or your call; the games cannot show what they were never given. The dataset builder turns a directory of receipts into JSONL with labels taken from the wire, holds out atoms by id, and drops errored runs rather than keeping them as anything.
The sister repo, mcp-arcade-cabinets, is an arcade of small games built from tapes. Two cabinets ship:
npx @mcptoolshop/ghost-on-the-menu # both cabinets, on your machine
npx @mcptoolshop/ghost-on-the-menu --mcp # Ghost as an MCP server over stdio
Or play in the browser. Twenty tapes ship with the arcade, several of them recorded by this instrument against the arcade's own MCP server; drop your own tape.json beside them to play your server. Ghost also runs as a Docker image, so the instrument can play the game's menu and keep that tape too.
| Command | Does |
|---|---|
mcp-arcade atoms | Lists the catalog |
mcp-arcade bout | Runs the experiments and prints the contrastive house call |
mcp-arcade receipt <file> [--timeline] | Prints a receipt as canonical JSON, or as the tape |
mcp-arcade tape <file> -o tape.json | Exports the allowlisted tape for the cabinets |
mcp-arcade dataset <dir> -o <out> | Builds train and holdout JSONL from receipts |
mcp-arcade docker build-fixture | Builds Arcade's own fixture image (rm-fixture and leftovers beside it) |
mcp-arcade fixture | Runs the lab server on stdio, the way --target fixture does |
0.xdocs/wave-*.md--allow-live; no telemetryDo not point --allow-live at a production server that can reach real secrets. Read a live receipt before you share it.
MIT. See LICENSE. Built by MCP Tool Shop.