Irontrellis Evidence

io.github.zerohourzulu由 GitHub 帳號 zerohourzulu 發布v1.0.0-rc.2更新於 Oct 30, 2026

Local MCP server that copies selected files into an evidence packet while the agent holds authority

已驗證STDIO僅桌面檔案與儲存安全與監控

概覽

AI 產生的概覽

本機 stdio MCP 伺服器:只有在設定的代理仍於 IronTrellis 歷史中持有權限時,才把操作人員預先選定的檔案複製成受保護的證據包。

可以做什麼
  • 蒐集證據:在代理授權仍有效時,依操作 ID 把預先選定的檔案複製成新的證據包,並記錄回執。
  • 重試對帳:重複同一個操作 ID 時只檢查原本的嘗試,不會再次複製。
  • 回報結果:回覆會區分已記錄、僅對帳、結果未知、遭拒絕、遭退回與忙碌等狀態,並附上證據包驗證旗標。
  • 拒絕並留痕:授權被撤銷時回傳拒絕,並由代理自身的工作階段寫入歷史。
適用情境
適合使用 IronTrellis 記錄「誰可以代表誰行事」的團隊,希望讓代理從操作人員事先選定的檔案整理出有界、可核驗的證據包。它是同一權限邊界的最小範例,而非通用檔案工具。
執行需求
以 stdio 方式在本機執行,來自 npm 套件 @ramex-labs/irontrellis-mcp(安裝 next 標籤)。需要一份 gateway.json 設定(權限 0600),其中指定歷史檔案、授權網域、擁有者與控制器、工作階段、角色與任期、資源、輸入與輸出目錄、固定選取集,以及存放工作階段私鑰的 keyFile。未宣告任何環境變數或標頭。
安裝前請注意
此工具會寫入檔案到輸出目錄並在歷史中留下紀錄,但從不刪除。設定中的 keyFile 保存私鑰,應保持案例目錄私密。示範中用戶端與伺服器以同一使用者執行,具備相同檔案系統存取權的用戶端可繞過此工具;真正的邊界需要為代理與伺服器使用不同的作業系統身分。紀錄由代理的工作階段金鑰而非擁有者金鑰簽署,因此在擁有者下次寫入前處於未見證狀態。證據包只能證明複製了哪些位元組,不能證明內容為真。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Irontrellis Evidence,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

IronTrellis Evidence MCP server

IronTrellis (formerly Continuity) keeps a checkable record of who may act for whom, and which duties survive when an AI agent is replaced.

irontrellis-evidence is a stdio MCP (Model Context Protocol) server with one tool, irontrellis_collect_evidence, that copies operator-selected files into a protected evidence packet if the configured agent still holds the authority in a format-2 IronTrellis history (format 2 is the history format this release writes). One operation id is one operation, so a retry reconciles the original attempt instead of copying again.

Need several approved tools, or tools the model may call repeatedly? Use @ramex-labs/irontrellis-mcp-gateway (exactly-once jobs and per-call mode). This package is the smallest complete example of the same boundary: your application chooses the agent, the source files, the destination and the key before launching the server; none of them is a tool argument. Concepts: docs/PRINCIPLES.md, docs/GLOSSARY.md.

This is 1.0.0-rc.2.3; install it from the next tag.

What happens, call by call

The quickstart below builds this case and runs its first two steps: an agent, bea, holds a grant to collect the evidence packet for incident:42, and one input file is selected.

StepWhat the server doesThe tool answers
bea asks for the packet, operation id example:collectionChecks bea's authority in the history, copies the selected file into a new packet and records the acknowledgmentRECORDED, packetVerified: true
bea repeats the same callInspects the original attempt; copies nothing; the history file is unchangedRECONCILIATION_ONLY
The owner revokes the grant, and bea asks again under a new idCopies nothing; bea's own session records the refusal in the history (code REVOKED)DENIED, reason: CORE_POLICY

60-second quickstart

sh
npm install -g @ramex-labs/irontrellis-mcp@next   # provides irontrellis-evidence (alias irontrellis-mcp), -setup and -demoirontrellis-evidence-setup /absolute/new-case     # synthetic input, disposable Ed25519 key, format-2 history, gateway.jsonirontrellis-evidence-demo /absolute/new-case/gateway.json

Expected: Tools: irontrellis_collect_evidence, then a RECORDED packet on the first call and RECONCILIATION_ONLY on the repeat, with packetVerified: true both times. To connect another MCP client, configure it to launch irontrellis-evidence --config /absolute/new-case/gateway.json (stdio).

Keep the case directory private; setup refuses to overwrite an existing directory. All three commands take --help and --version. A refusal (an existing target, a missing parent, a configuration that is missing, not 0600 or not valid) is one JSON line on stderr with exit code 2, {"status":"REFUSED","reason":<CODE>,"detail":<why>} (the server's own line names GATEWAY_CONFIGURATION_UNAVAILABLE as its reason and may add the underlying code), where detail names the file, field or limit at fault and never echoes configuration values or keys.

The tool

irontrellis_collect_evidence { operationId, resource }

ArgumentRule
operationIdA stable, application-owned id, 1–128 characters. Repeating it reconciles the original attempt.
resourceMust equal the configured resource; the schema pins it with an enum.

Annotations: readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false. It creates files and never deletes any; repeating an id copies nothing.

ResultMeaningMCP tool error
RECORDEDAdmitted, copied, acknowledged in the history; acknowledgment is the recorded packet acknowledgment.no
RECONCILIATION_ONLYThe original attempt was inspected; nothing was copied. If that attempt's acknowledgment was never recorded, it may be recorded now; packetVerified and disposition say what the attempt achieved.no
OUTCOME_UNKNOWNAdmitted, but the copy or its acknowledgment is not confirmed (for example the selected input changed); packetVerified says whether the packet verified. Investigate; do not pick a new id.yes
DENIEDreason: CORE_POLICY (no current grant): the agent's own session records the refusal in the history, unless an identical refusal was recorded in the last minute or the agent's refusals pass six a minute; the reply's refusal says which (recorded: true with the eventId, or recorded: false with the reason). reason: ADDITIONAL_POLICY: an additional policy supplied by an embedding host refused the call or could not answer; the history records no refusal for it, and the policy's own audit holds the decision.yes
REFUSEDA bounded code: INVALID_ARGUMENTS, RUNTIME_NOT_CURRENT (retired or expired session), OPERATION_CONFLICT, CAPACITY_CONTROL_ONLY, … or GATEWAY_UNAVAILABLE.yes
BUSYOne collection at a time; repeat the same call.yes

An MCP tool error is a reply with isError: true. externalOutcome, which RECORDED, RECONCILIATION_ONLY and OUTCOME_UNKNOWN replies carry, is always NOT_PROVEN: a packet proves which selected bytes were copied, not that their contents are true.

Configuration

gateway.json (0600) has exactly these fields. Every choice is the operator's.

FieldWhat it holds
historyFileThe format-2 history
domainThe history's authorization domain
owner, controllerThe owner profile
sessionThe admitted runtime session
role, tenureThe agent's role and its current tenure
resourceThe one resource the tool acts on
inputDirectory, outputDirectoryWhere the selected files are read, and where packets are written
selectionFrom selectEvidence(inputDirectory); reopening never re-selects changed files
keyFileThe session's private key, 0x + 64 hex. The scheme is read from the session, and a key that is not the session's credential refuses startup.

The copy is bounded: at most 8 files, 64 KiB each, 256 KiB in total, into outputDirectory/<sha256(operationId)>/.

Embedding

createEvidenceServer(loadEvidenceTool(configFile, { additionalPolicy? })) returns an SDK Server (@modelcontextprotocol/server); serveEvidence(tool) serves it on stdio, to 2026-07-28 and 2025-era clients alike, behind a strict-JSON input guard (16 KiB frames, no duplicate keys, 5-second frame deadline, at most 1,024 messages in any 60 seconds). Input that breaks the guard never reaches the tool: the server stops with exit code 2.

The server refuses at startup rather than serving a configuration it cannot verify (GATEWAY_CONFIGURATION_UNAVAILABLE, exit 2). A legacy or format-1 history opens read only and the tool does not act on it; migrate it with irontrellis migrate.

Limits

LimitWhat it means for you
The demo runs client and server under one userA client with the same filesystem access can bypass the tool. A real boundary needs separate OS identities for the agent and the server, with the source, key, history and output directories reachable only by the server.
The server signs its records with the agent's session key, never the owner keyThose records stay unattested and unwitnessed until the owner's next write (docs/SECURITY.md).

Check it yourself

From a clone of the repository:

sh
pnpm installpnpm -r buildpnpm --filter @ramex-labs/irontrellis-mcp test

The tests drive the server over stdio, through a real MCP client and with raw frames: a retry, a revoked grant, a retired session, a replaced key, attempts to substitute the actor, paths or resource, duplicate keys, oversized or unfinished frames, and a message flood. They check this package as it ships. They do not test your deployment, and the limits stated above still apply.

Dependencies: @ramex-labs/irontrellis, @modelcontextprotocol/server and @modelcontextprotocol/client (2.2.0, pinned exactly). Apache-2.0.

Last reviewed: 24 October 2026. This page is revisited at each release.

來源:packages/mcp-evidence/README.md,提交 cd34ad7

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:伺服器未能啟動。

版本歷史

1
  1. v1.0.0-rc.2最新Oct 29, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分