关于 Fireweed
Fireweed 是面向 Agent 的记忆 MCP 服务,只有在引用证据支持声明时才保存,并为记忆保留来源范围和可验证凭据。它可拒绝无依据的回忆,并为删除操作签发证明;记忆提取需由外部提供。
主要功能
- 01验证声明是否受引用证据支持
- 02回忆时返回来源字节范围
- 03重新校验收据与来源完整性
- 04追溯记忆到来源及记录事件
- 05删除记忆并签发签名证书
- 06导出开放格式记忆数据
适用场景
- 01保存可追溯来源的 Agent 记忆
- 02避免回忆中补造存储中不存在的事实
- 03审计记忆内容及来源是否被篡改
- 04证明指定记忆已删除
MCP 相关
作为 MCP 服务,向客户端提供 remember、recall、verify_receipts、trace_evidence、review_reads、forget 和 export_memory 等工具。声明与证据由调用方提供,服务通过确定性检查决定是否接纳。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
10收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| claim | string | 是 | 要记住的事实 |
| evidence | string | 是 | 支持该事实的逐字文本 |
| source_id | string | 否 | 此内容的来源(默认值:agent) |
| source_text | string | 否 | 引用此证据的完整文档。传入该文档后,主张将绑定到其中可验证的字节范围——即回执。可选,但这才是关键。 |
详细介绍
fireweed-mcp
Agent 记忆中的每条事实都有据可查。
remember(claim = "Priya joined Acme in 2019 under duress.",
evidence = "Priya Raman joined Acme in 2019 as a logistics analyst.")
REFUSED (asserts_more_than_evidence) — the claim adds something the evidence does not say.
claim : Priya joined Acme in 2019 under duress.
evidence: Priya Raman joined Acme in 2019 as a logistics analyst.
recall("Priya's salary")
ABSTAINED (unknown_predicate) — no claims ground "salary"; 1 claim about Priya Raman exists
This is a refusal, not an empty result.
forget("Priya")
ERASED Priya Raman — certificate issued
signature : hmac-sha256:f4d0768ef3b0fec624afec12f25bfd91…
nodes in closure : 1
every probe abstains : True
bystanders surviving : 1
最后那项就是这句话背后的产物:"将我从你的 Agent 记忆中删除——并证明这一点。
安装
uvx fireweed-mcp # try it
pip install fireweed-mcp # keep it
claude mcp add fireweed -- uvx fireweed-mcp
无依赖项。无需 API 密钥。无需模型——此服务中的任何内容都不会调用 LLM。
功能
| 工具 | |
|---|---|
remember | 仅当你引用的证据确实支持该说法时才接受。拒绝结果会注明类型并说明需要修正什么。 |
recall | 返回有依据的说法,并附上其来源的字节范围;无法提供依据时会放弃作答,并指出无法找到依据的术语 |
verify_receipts | 重新哈希每个来源,重新切分每个范围——可检测篡改 |
trace_evidence | 逆向审计一条记忆,追溯到其证据的到达过程:它绑定的字节、这些字节是否仍然匹配、记录该文档的账本事件,以及证据链是否通过验证 |
review_reads | 查看针对该底层系统提出了什么请求,以及它如何作答——默认关闭;查询内容会以加盐指纹记录,除非你还选择记录文本 |
forget | 精确闭环地擦除,并提供签名证书;不相关的记录会保留 |
export_memory | 将整个底层系统导出为可移植的开放格式数据块 |
为什么拒绝才是关键
大多数记忆服务会存储模型所说的内容,并返回最接近的结果。这个服务会审定内容。
规则是:模型提出,确定性代码裁决。 跨越 RPC 边界后,这就不再是一句口号:你的 Agent 是提议者,而它无法靠说辞绕过关卡,因为这道关卡不是提示词。传入一条说法和你引用的文本;纯函数会检查证据是否指出了主体、保留了关系、没有捏造数字,也没有断言原文片段未提及的内容。通过检查的内容会连同指向来源的字节范围一起存储。
之后,任何人都可以核查——包括既不信任你的 Agent,也不信任此服务的人。这就是整个产品。
它不会做什么
先说明这一点,因为本项目上一版 README 宣称的关键数字后来被证实毫无意义 (请参阅撤回声明,其中附带了一个可以证明这一点的脚本):
-
服务本身不会从自由文本中提取记忆。 你提供声明和证据,而这个服务中没有任何部分会调用模型。从 0.5.0 起,一个可选的配套组件
fireweed_extractor可以使用你运行的模型,从对话记录中提出声明/证据对,但绝不会被信任:每条提议都要经过与手动编写的提议相同的四项检查。在四种模型系列中测得的通过率从 0% 到 99.3% 不等,而所有不忠实的提议都因明确的类型化原因而被拒绝。一个 4B 模型提出的 46 对内容,其引用的片段并不支持这些内容;这 46 对全部被拒绝。故障模式是记忆更少,而不是记忆不实。 -
它不会让 LLM 变得诚实。 它管控哪些内容可以进入记录,以及哪些内容可以被证明。你的模型仍然可以在自己的文字中随意发言。
-
召回是薄弱的一环,诚实的数字远比本页过去宣称的差。 先前版本的 README 称,门控器有 98.4% 的概率找到已存储的事实。该数字现已撤回。它是在一个语料库上测得的,其中十四种问题表述全部都能在手写类别表中找到匹配条目来回答——因为这些条目正是根据同一语料库中的失败案例得出的。它测量的是该表对一组问题的覆盖率,而不是系统的召回率。
2026-08-27 的测量使用了在两个维度上都留出的语料库——未见过的角色,以及至关重要的、未见过的问题表述:
提问方式…… 默认安装会拒绝 表格构建所依据的表述 4.8% 从未见过的表述 99.2% 对于用未经调优的措辞表达的问题,默认安装几乎什么都回答不了。这才是描述该系统的数字,它取代了本页此前所有关于召回率的说法。
-
真正强的一项是另一个维度。 对于答案缺失陷阱,门控器能正确拒绝 96.1% 的请求——它拒绝请求的能力远胜于回答问题,而且不会捏造内容。如果你需要一个绝不编造的记忆系统,这就是你要的。如果你需要一个能可靠找到信息的系统,它还做不到,而上面的数字正说明了原因。
-
它目前还不能对涉及多个主体的问题进行范围限定。 只提及一个主体的问题会限定在该主体范围内;提及两个或更多主体的问题仍会与整个存储库匹配。
这些数字来自一个经过校准的测量工具,它会在测量前打印自身的控制参数。语料库和方法保存在私有评估仓库中,因此请将这些数字视为报告结果,而非可独立核验的结果——写入路径、回执、来源追溯和擦除功能,则可通过上面的命令自行验证。
你的数据
~/.fireweed/mcp/(可通过 FIREWEED_MCP_STORE 更改)。底层存储采用开放格式——请参阅open_format/SPEC.md——而 open_format/reference_reader.py 仅使用标准库即可读取。你的记忆不会因这个服务、这个引擎或任何模型而消失。有一项测试会验证这一往返过程。
不要安装 fireweed-mcp[semantic]。 它会在 recall 中启用释义匹配;针对答案缺失陷阱的测量显示,它会让正确拒绝率从 96.1% 降至 32.8%——对于答案根本不在存储库中的问题,它会回答其中三分之二。阈值扫描未发现任何既能提升召回率又不产生这种代价的设置:如果阈值收紧到足够安全,它就完全不起作用。它仍可安装,因为如果将此机制限制在某个主体自己的谓词范围内,或许还有挽救的可能,但这一点尚未经过测试。在此之前,该功能保持关闭,而 memory_stats 会告诉你当前处于哪种模式。
许可证
FSL-1.1-ALv2 — 源码可用。除构建竞品外,其他用途均免费;将于 2028-01-01 转为 Apache 2.0。完整文本见 LICENSE.md。
想在商业产品或竞品服务中使用 Fireweed?→ [email protected]
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。