
Fetch SCITT receipts and on-chain anchors for offline verification
dev.forestrie由 forestrie.dev 发布v0.5.0更新于 Nov 3, 2026
获取 SCITT 收据、其创世记录和链上累加器,供 @forestrie/mcp-verify 进行验证
AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。
原文描述
Fetch a SCITT receipt, its genesis and on-chain accumulator for @forestrie/mcp-verify to verify
发布方自己的服务:Resolve
概览
Fetch SCITT receipts and on-chain anchors for offline verification 的本地 MCP 服务,由 forestrie.dev 发布;无需登录;STDIO。
暂无 AI 概览:以下信息来自注册中心条目和服务本身。
- 发布者
- forestrie.dev
安装
在 SourceWeft 中
- 打开 控制台中的 Fetch SCITT receipts and on-chain anchors for offline verification,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
@forestrie/mcp-resolve
Fetch a SCITT receipt, its log's genesis document and its on-chain
accumulator, and hand them to
@forestrie/mcp-verify
to verify — including the split-view answer, from a chain read. An MCP
server that fetches the material the verifier verifies: a receipt, a
genesis document, an accumulator snapshot, a registration status, a
service configuration. Every result says where its bytes came from and
which of the four questions of the trust model they can support. Listed in
the MCP registry as dev.forestrie/resolve.
The verifier runs entirely in your process with no network, no account, no key and no backend, and its own rule is that installing it can never imply a network dependency. So anything that fetches lives here.
Use
Both environment variables are optional and both are yours. baseUrl is
any SCRAPI base URL and rpcUrl is your own chain access; a call may pass
either explicitly, and the environment values are used only when a call
omits them. The package ships no default operator and no default chain
provider, and names none.
Two public lanes exist and are examples, not defaults:
Requires Node 20.11 or later.
A worked example: one receipt, end to end
Every value below is public, and the ones that change per release come
from the verifier's own tarball. @forestrie/mcp-verify registers each
release in a Forestrie log and ships the receipt under fixtures/self/
(docs/self-registration.md there), so the published package is a
statement, a receipt, a genesis document and a log owner key that this
package can fetch and verify against the live lane. The run below takes
about four seconds and ends in split-view ok from a public RPC
endpoint, with no key and no account.
To have the tarball at hand in an empty directory:
The sequence, with the arguments as JSON and the one-line result each
call returned when run on 2026-09-22 against the published 0.5.0 bundle
(its entry id is a0caa672b7030b000000000000000001; yours is whatever
entry-id.txt says):
fetch_scitt_configuration {"baseUrl": "https://api-a.forest-2.forestrie.dev"}→fetched SCITT configuration (serviceId canopy-dev-1) from …/.well-known/scitt-configurationquery_registration {"baseUrl": …, "bootstrapLogId": "e22c8d55-3f88-b2b5-f225-5d2c2441bcdd", "logId": "da6f297c-4a0c-4c9a-b2ae-e701e558721d", "contentHash": "<sha256 of statement.cose>"}→registration complete; receipt at https://api-a.forest-2.forestrie.dev/logs/e22c8d55-…/da6f297c-…/14/entries/a0caa672b7030b000000000000000001/receipt—status: "receipt-available", thereceiptUrl(with the massif height, 14, inside it) andentryId.fetch_receipt {"receiptUrl": "<from step 2>"}→fetched receipt (438 B) from …/receipt—receipt.sha256equals the digest of the tarball'sreceipt.cbor;receiptLogIdnames the publications log.fetch_genesis {"baseUrl": …, "logId": "e22c8d55-3f88-b2b5-f225-5d2c2441bcdd"}→fetched genesis (160 B) from …/api/forest/e22c8d55-…/genesis: univocity 0xe22c8d553f88b2b5f2255d2c2441bcdd0d50cd58 on chain 84532— byte-identical to the tarball'sgenesis.cbor. Keep it: the calls below pass it back as bytes, never fetched in the same call.verify_fetched_receipt {"receiptUrl": …, "entryId": "<entry-id.txt>", "payload": {"path": "…/fixtures/self/statement.cose"}, "trust": {"root": "known-log-key", "keyXy": {"b64": "<contents of log-key.xy.b64>"}}}→verify: PASS · root=known-log-key · sealing ok, split-view not answered at this root, append-authority not answered at this root, attribution ok- The same call with
"trust": {"root": "genesis", "genesis": {"path": "…/fixtures/self/genesis.cbor"}}→verify: FAILED at signature (delegation_invalid) · root=genesis · …This is expected, not tampering: the genesis root's offline walk resolves one delegation hop from the forest root, and the publications log is a grandchild. The result carriesgenesis_root_reaches_direct_delegates_onlysaying exactly that. Verify this receipt under a key or an accumulator, as in 5 and 7. verify_fetched_receipt {"receiptUrl": …, "entryId": …, "payload": …, "trust": {"root": "known-accumulator", "chain": {"genesis": {"path": "…/fixtures/self/genesis.cbor"}, "rpcUrl": "https://sepolia.base.org", "logId": "da6f297c-4a0c-4c9a-b2ae-e701e558721d"}}}→verify: PASS · root=known-accumulator · sealing ok, split-view ok, append-authority not answered at this root, attribution ok—anchor.blockNumber,anchor.matchedPeakandprovenance.root.from.rpcUrlsay which chain state answered. If the log has grown past the receipt's peak since, the same call looks back through published checkpoints and addsroot_read_from_chain_history.- Optional:
fetch_accumulator {"chain": {…as in 7…}, "forReceipt": {"receipt": …, "payload": …, "entryId": …}}returns the snapshot as bytes to keep; later,@forestrie/mcp-verify'sverify_receiptunder{"root": "known-accumulator", "accumulator": <those bytes>}answers split-view again, offline.
The chain, and where to read it. Step 7 needs JSON-RPC access to
chain 84532 (Base Sepolia). This package ships no provider and names
none as a default; rpcUrl (or FORESTRIE_RPC_URL) is yours. The
endpoints below are third-party public services, listed only as examples
of what answered unauthenticated when this example was written; use your
own provider for anything beyond a first try.
Two traps. keyXy: {"path": "log-key.xy.b64"} fails: that file is
base64 text, and path inputs are read as raw bytes — pass its
contents as b64. And the byte-field name is b64 in both servers
(base64 is accepted here as an alias), so the shapes you learn from the
verifier work here unchanged.
test/core/readme-example.test.ts asserts the coordinates in this
section against the recorded lane-A fixtures, so a fixture re-capture
cannot silently invalidate the example.
The eight tools
fetch_ks256_attestation is for a forest whose root is a contract (a Safe).
Such a root cannot be checked by ecrecover, so the verifier needs the
contract's own answer, and getting it needs a chain read, which the verifier
never makes. Give the tool the receipt and either the root address or a
genesis you hold; it reads isValidSignature(digest, signature) at one block
(default the latest, then pinned) and returns the answer as a canonical-CBOR
attestation:
The result says the certificate is valid under the contract's signers at
that block, and anyone with RPC can re-run the call to confirm it. It
refuses, and returns no attestation, for a root with no contract code (an externally owned root needs none), a reverting call, or any answer but exactly one 32-byte word, 0x1626ba7e followed by 28 zero bytes (a short return, dirty padding, extra words or an echo of the call's own data are refused), and for an RPC on a different chain from your genesis. Both state reads are pinned by the block's hash (EIP-1898), so the hash in the attestation is the state that was read. With root given beside a genesis, root is the contract asked and the genesis supplies only the expected chain.
Every tool is annotated read-only, idempotent and open-world, because every
one of them talks to something outside your process. What each supports
entry means, and why, is in
docs/what-fetching-proves.md.
What a fetched thing proves
A receipt fetched from the operator is the operator's claim until it is
verified under a trust root you hold. The public trust model,
spec/receipt-trust-model.md
in forestrie/protocol, names four questions a receipt can answer
(sealing, split-view, append-authority, attribution) and four trust roots a
caller can verify under (genesis, known-log-key, known-accumulator,
checkpoint-chain). The roots are not ordered. Which one is right depends
on what you hold, and fetching changes what you hold.
That is why every result here carries provenance (for each artefact:
fetched from a URL, read from a chain, or supplied by you, and when) and
supports (which questions the material can serve as evidence for, under
which root, with a one-line note). The notes are fixed strings the tests
assert verbatim; they are listed and explained in
docs/what-fetching-proves.md.
Three consequences are built into the tool surface rather than left to documentation:
- A fetched genesis is never a root.
verify_fetched_receipttakes its root as bytes you supply or as an accumulator read from the chain; its schema has no form that fetches a genesis and verifies under it in the same call. A genesis obtained from the operator at check time makes the operator the supplier of both the receipt and the root, which proves consistency with a document the operator chose to serve today and nothing more.fetch_genesisexists so you can obtain the document once, keep it, and pass it as bytes from then on. - The chain binding is the forest's, never the operator's. The
univocity contract address and chain id are bound in a forest's genesis
document.
fetch_accumulatorand the chain path ofverify_fetched_receipttake them from a genesis you hold, or explicitly, never from a default, never from a genesis fetched inside the call, and never from an environment variable. - A
genesisroot reaches direct delegates only, and the result says so. The verifier's offline walk under a supplied genesis resolves one delegation hop from the forest root. A receipt from a log further down the grant chain — the verifier's own publications log is a grandchild — fails under that root withdelegation_invalid, andverify_fetched_receiptappendsgenesis_root_reaches_direct_delegates_onlyto say that this is the walk's limit, not a finding about the receipt. Verify such a receipt underknown-log-keyorknown-accumulator. - Buried peaks are answered from published history, under the same
root. When later growth has folded a receipt's peak into a bigger one,
the chain path looks back through published checkpoints, within the block
budget you set, and says so (
root_read_from_chain_history). It never scans without a bound.
The verifier's own TRANSPARENCY.md
(shipped in its tarball) explains what a transparency log is and what a
receipt contains; this package does not repeat it. Its
docs/trust-roots.md
explains the roots in depth.
What this package never does
- Never writes: no registration, no grants, no keys.
- Never polls:
query_registrationis one request, and you decide whether to call it again. An HTTP 429 comes back as a structuredproblemwithretryAfterMs, not as an error. - Never chooses an operator or a chain provider for you.
- Never caches a fetched genesis or accumulator across calls: every result
carries a fresh
at. - Never edits the verifier's answers.
verify_fetched_receiptreturns the verifier'sstages,questionsanddiagnosticsunaltered and appends two diagnostics of its own that say where the bytes came from.not_answered_by_this_rootis a real answer and reaches you unchanged.
Layout and gates
CI blocks on the purity and packaging gates described in
AGENTS.md. Unit tests run under a fetch that throws and replay
exchanges recorded under test/fixtures/. A live project against a real lane
exists, is opt-in, and is never a required check.
Conventions, invariants and the release path are in AGENTS.md.
Dependencies
Exact pins in package.json, bumped deliberately. Of
@forestrie/mcp-verify, only the "." core export is used. Every request,
the chain reads included, goes through an injected fetchImpl.
License
MIT.
来源:README.md,提交 2a50000
工具
0版本历史
5- v0.5.0最新Nov 3, 2026
- v0.4.1Oct 20, 2026
- v0.4.0Oct 18, 2026
- v0.3.1Oct 11, 2026
- v0.2.0Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
其他 Resolve 集成
Resolve
ai.resolve官方发布者
Resolve 是一个远程 AI DevOps 调查服务器,让助手跨日志、指标、链路追踪和部署调查告警、做根因分析并回答生产环境问题。

ResolveMCP-ext
由 GitHub 账号 CaptRauti 发布
为助手提供 DaVinci Resolve 21.1.2 中主流 Resolve MCP 服务器未覆盖的脚本能力:片段特效、粘贴属性、导出帧、相册与多机位布局。

DaVinci Resolve
由 GitHub 账号 Aedelon 发布
让 AI 助手通过类型化、可验证的脚本 API 操作 DaVinci Resolve,完成剪辑、调色与交付的 MCP 服务器。

DaVinci Resolve MCP (free edition)
由 GitHub 账号 kingjamesch 发布
通过 Lua 桥接控制 macOS 上的 DaVinci Resolve 21.1(含免费版),让助手管理项目、时间线、媒体和渲染。

Nigeria Bank Resolve MCP by Wycord
由 GitHub 账号 wycord 发布
将尼日利亚银行账号与银行代码解析为开户人姓名,并可列出尼日利亚银行及其代码。