ShipReceipt MCP Server

ShipReceipt MCP Server

Provides tools to create, run, and verify deterministic delivery receipts for completion claims, enabling reviewers to check freshness and correctness of evidence.

Category
访问服务器

README

ShipReceipt

A receipt for every “done.” ShipReceipt turns a delivery claim into fresh, machine-checkable local evidence: the claim, safe deterministic probes, captured output, exit codes, relevant file hashes, and a portable report.

Tests tell you what ran. ShipReceipt tells a reviewer which exact completion claim those tests support—and when later changes mean that proof is no longer fresh.

CI Live demo Demo video License: MIT

ShipReceipt landing page

Why it exists

Coding agents are good at confident summaries. Reviewers need a tighter contract:

“The release marker is valid.”
       ↓
claim + files + executable argv + captured evidence + file hashes
       ↓
verified / contradicted / unverified / stale

If a relevant file changes after a probe runs, ShipReceipt marks the claim stale. It does not leave yesterday’s green check pretending to prove today’s tree.

Quickstart

Requires Node 20+ and npm.

npm install
npm run build

# Create a receipt in the current repository
node packages/cli/dist/index.js init

# Record a narrow claim. Everything after -- is executable plus argv, never a shell string.
node packages/cli/dist/index.js claim "The unit suite passes." \
  --file packages/core/src/core.ts -- node --test

# Direct CLI execution needs an explicit approval flag; previously allowlisted contracts can re-run without it.
node packages/cli/dist/index.js run clm_yourclaim --approve
node packages/cli/dist/index.js status
node packages/cli/dist/index.js export --format html --out shipreceipt-report.html

See the full state machine in 10 seconds

npm run smoke

The smoke fixture creates a passing claim, a failing claim, then modifies the passing claim’s tracked file. Its final status contains stale and contradicted; it also exports a static HTML report.

For the browser demo:

npm run build --workspace=@shipreceipt/web
npx serve packages/web/dist -l 4173

The dashboard’s buttons run an in-browser fixture only. To use the same UI against a real local receipt, start its local-only reader after building:

npm run live --workspace=@shipreceipt/web -- --root /path/to/repository

It serves packages/web/dist and a local /receipt.json status endpoint; it never executes probes. The hosted static demo never executes commands or reads a visitor’s filesystem.

CLI

Command Purpose
init [--root path] Create .shipreceipt/receipt.json.
claim "text" --file path -- executable argv Add a claim and a deterministic probe.
allow <id> Allowlist a claim’s full probe contract for later local re-runs.
run <id> --approve Execute its probes with limits and capture evidence.
status Print the current state for every claim.
`export --format json html --out file`
demo [--root path] Build the bundled contradiction/staleness scenario.

--root is supported on every command. A probe’s command is stored as an executable and argv array. There is no shell interpolation or shell: true path. run needs an explicit --approve, unless the full probe contract (argv, cwd, timeout, expected exit, files, and allowed environment names) was previously recorded with allow.

Receipt states

State Meaning
unverified No complete probe evidence exists.
verified Every probe exited with its expected code and current file hashes match evidence.
contradicted A probe failed, timed out, or exited unexpectedly.
stale Relevant file hashes no longer match those recorded at probe time.

Codex plugin and MCP

The repository includes a repo-local marketplace at .agents/plugins/marketplace.json and an installable plugin in plugins/shipreceipt.

Build first, then add the repository marketplace and install the plugin:

codex plugin marketplace add /path/to/shipreceipt
codex plugin add shipreceipt@shipreceipt-marketplace

The plugin carries a self-contained bundled stdio MCP server and exposes five deterministic tools:

  • shipreceipt_init
  • shipreceipt_claim
  • shipreceipt_run (runs only contracts already allowlisted through the local CLI)
  • shipreceipt_status
  • shipreceipt_report

The skill at plugins/shipreceipt/skills/shipreceipt/SKILL.md instructs Codex to use narrow claims, explain intended execution, and cite a receipt ID/status rather than claim success from prose. MCP callers cannot self-approve execution: after a claim is recorded, the user must inspect and allowlist its full probe contract through the local shipreceipt allow <id> CLI command before shipreceipt_run can execute it. npm run build refreshes the plugin-local MCP bundle before installation.

Freshness and contradiction states

You can smoke the server directly using newline-delimited JSON-RPC:

printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize"}' | node packages/mcp/dist/index.js

Architecture

Codex skill / CLI / MCP
          │
          ▼
  @shipreceipt/core
  schemas · safe runner · hash snapshots · receipt store
          │
          ▼
 .shipreceipt/receipt.json ──► status / HTML report / local dashboard

The core library owns schemas, hashing, persistence, status calculation, redaction, and command execution. The CLI and MCP server are thin adapters. The web dashboard is static and uses a bundled demo state; it can be hosted without credentials. See architecture notes and decisions.

Safety and threat model

ShipReceipt is local-first, but running a probe is still code execution. The runner:

  • requires explicit approval in the CLI and MCP interface;
  • stores commands as executable plus argv and sets shell: false;
  • restricts probe working directories to the receipt root;
  • uses a default 30-second timeout capped at two minutes;
  • caps each stdout/stderr stream at 64 KiB;
  • forwards no environment variables unless named in the probe allowlist, except the minimal inherited PATH needed to locate an executable;
  • applies best-effort redaction to common token/key, authorization, cookie, URL-credential, cloud-key, and private-key forms before storing output.

The receipt’s hashes and chain are tamper-evident only within a documented threat model. Before status, export, or execution, ShipReceipt verifies event linkage, every current claim/evidence binding, evidence hashes, and probe contracts; an integrity failure fails closed rather than reporting a green claim. Someone who can rewrite the receipt and all local files can still rewrite its history. Hashes prove consistency of what ShipReceipt recorded; they do not establish identity, remote provenance, or a secure audit trail. Do not put secrets in commands, claims, or files. See security notes.

Deployment

vercel.json builds and serves packages/web/dist as a static site. It has no server code and no command-execution endpoint. For another static host, run npm run build --workspace=@shipreceipt/web and publish that same directory.

Development and verification

npm install
npm run lint
npm run typecheck
npm test
npm run build
npm run smoke
npm run plugin:check

Build Week / Codex disclosure

This is an OpenAI Build Week 2026 submission. GPT-5.6 in a persistent Codex session accelerated implementation: workspace setup, TypeScript core/CLI/MCP/dashboard code, tests, fixture, documentation drafts, and verification iteration. Human product decisions defined the problem, local-first evidence model, safety boundaries, visual direction, project scope, and final review criteria. No OpenAI API key is required: GPT-5.6 runs in the authenticated Codex host, while ShipReceipt itself is deterministic local tooling. See the public Codex build trace.

License

MIT. See LICENSE.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选