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 分