关于 Holographic Memory
Holographic Memory 是面向 Agent 和应用开发者的嵌入式 Rust 引擎,用于本地文档、向量和事实记忆。它将搜索与记忆操作整合在一起且不发起网络调用,并提供语言绑定、HTTP 与 MCP 服务。
主要功能
- 01全文、向量与混合搜索
- 02记住、回忆、遗忘和解释 API
- 03带时间有效性与对话来源的事实
- 04可选 AES-256-GCM 加密
- 05支持多种语言绑定的 Rust 引擎
适用场景
- 01为 Agent 添加持久的本地记忆
- 02在离线应用中搜索文档和向量
- 03通过 HTTP 服务存储并查询向量
- 04研究向量符号记忆和事实查询
MCP 相关
hms-mcp 服务通过 stdio 或 HTTP 向 Model Context Protocol 客户端提供本地存储访问。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Holographic Memory
为 Agent 和应用提供本地记忆:全文和向量搜索、记忆 API,以及向量符号事实存储,全部集成于一个可嵌入的 Rust 引擎中,且不会发起网络调用。
网站 · 文档 · 快速开始 · 结果 · 为什么叫“全息”? · 功能 · 限制 · 贡献
## 它是什么
Holographic Memory(简称 HMS)是一个 Rust 库,可将文本、向量和事实存储在你设备上的目录中,并在需要时检索。它提供 Node.js 绑定、C、WASM 和 UniFFI 绑定、带 Python 客户端的 HTTP 服务器,以及 MCP 服务。除非你启用了需要它们的功能,否则不会调用任何服务、收集遥测数据或下载模型。
| 能力 | 你将获得 |
|---|---|
| 文档搜索 | 分块、基于阻塞倒排列表的词干化 BM25、布尔和短语查询、与所提供嵌入向量的混合融合、元数据筛选、字节偏移量 |
| 向量索引 | 带内存映射顶点文件的图索引、用于插入和删除的可更新增量,以及可选的、通过示例查询训练的查询感知路由 |
| 记忆 API | 支持时间有效性和取代关系的 remember、recall、forget 和 explain;带来源溯源信息的对话记忆 |
| 存储 | 原子替换和删除、防崩溃日志与检查点、经验证的压缩、每个存储实例仅允许一个写入者 |
| 安全 | 可选的静态 AES-256-GCM 加密、签名审计日志、COSE/SCITT 溯源 |
| 向量符号层 | 支持绑定、捆绑和置换的稀疏超向量、支持多跳查询的三元组、Hopfield 清理 |
适用对象
| 你正在构建 | 你将获得 |
|---|---|
| 需要记忆的 Agent 或助手 | 可从存储中移除事实的记忆 API,以及面向编辑器和 Agent 宿主的 MCP 服务 |
| 本地优先或离线应用 | 存储在单个目录中的嵌入式搜索和存储,无需服务器进程,并支持可选加密 |
| 需要向量或文本搜索的服务 | 带租户和作用域密钥的 HTTP hms-server,或在进程内使用该库 |
| 向量符号记忆研究 | 绑定/捆绑代数、意义记忆和容量实验及其结果文件 |
基准结果
每一行都链接到对应的已提交文件。这些结果来自单台机器和注明的协议,不能替代对你自己的数据进行测试。
| 结果 | 条件 | 源文件 |
|---|---|---|
| Bemula 遗忘分数为 0.322;已发表结果中的最佳值为 0.310(LangMem) | 完整拆分:50 段对话,135 个遗忘请求。Agent 和评判模型均为通过 OpenRouter 固定使用 DeepSeek 的 deepseek-v4-flash-0731,温度为 0;评判模型的快照是根据作者的运行元数据推断的。使用 text-embedding-3-small 的混合检索,k=5。与论文已发表的 DeepSeek 结果行比较;当天重新运行该测试套件的朴素 RAG 基线,得分为 0.075。运行一次。 | bemula_v1.json |
| LongMemEval dev:100 题中答对 89.75 题(4 次运行的均值,范围为 87 至 93) | 使用官方生成和评判提示词,gpt-4o-2024-08-06 作为阅读器和评判模型,上下文取前 10 条。检索采用基于缓存的 Qwen3 分数进行参考轮次排序,而非原生对话记忆检索。k 值是在 dev 集上选取的;没有留出集结果。 | longmemeval_official_dev_summary.json |
| VIBE llama-128-ip 的严格 recall@100 最高可达 0.99687,吞吐量为 1,457 QPS | 使用官方测试查询,单线程,查询感知图(ef=512)。两个冻结的 RoarGraph 配置均未达到 0.99。在 0.95 和 0.99 QPS 下表现落后(见下文)。 | query_aware_graph_v1/README.md |
| VIBE yi-128-ip 在召回率 0.95 时:3,214 QPS,对比 1,953(MLANN RF80) | 相同协议;仅与此处测得的冻结 RoarGraph 和 MLANN 配置比较。未达到召回率 0.99。 | query_aware_graph_v1/README.md |
| SIFT-1M 在 recall@10 为 0.95 时的 QPS:17,481,对比 hnswlib 的 7,630(2.29 倍,区间为 1.95 至 2.39) | Core Ultra 9 185H,单客户端线程逐个发出查询,进程未固定到某个核心,使用 8 个线程构建索引。通过 Rust API 计时,hnswlib 则通过其 Python 绑定计时。 | heavy-ann-sift-...-185h-22c-27g.json |
| SciFact 混合检索 nDCG@10 为 0.729,高于其自身 BM25(0.688)和稠密检索(0.645) | 5,183 个文档,300 个查询,使用测试框架提供的 MiniLM 嵌入。NFCorpus:0.355,对比 0.323 和 0.317。 | public_scifact.json、public_nfcorpus.json |
表现落后的项目
| 结果 | 条件 | 源文件 |
|---|---|---|
| ann-benchmarks 在召回率 0.95 时:sift 为 2,819 QPS,对比 faiss-ivfpqfs 的 3,788(0.74 倍);glove 为 1,019,对比 ScaNN 的 1,535(0.66 倍) | 使用官方 ann-benchmarks 运行器,每次运行固定到一个 CPU,AVX2 主机 | ann_benchmarks_harness_wl02_v1.json |
| VIBE llama-128-ip QPS:召回率 0.95 时比 RoarGraph 低 24.6%,召回率 0.99 时比 MLANN RF80 低 54.8% | 单线程,使用官方测试查询 | query_aware_graph_v1/README.md |
| SIFT-1M 构建时间为 hnswlib 的 0.58 倍,服务 RSS 为其 0.46 倍 | 与上文 QPS 行使用相同的运行 | docs/benchmarks/GAPS.md |
| 在大多数语料上,文本搜索的导入时间、服务 RSS 和冷启动表现均落后于 SQLite FTS5 和 tantivy | BEIR 和记忆语料,两台主机 | docs/benchmarks/GAPS.md |
| 使用稀疏向量路径时,glove-100-angular 的 recall@10 为 0.252,吞吐量为 33.7 QPS;对比 FAISS HNSW 的 0.832 和 4,111 QPS | 单线程,Apple M4;稀疏路径仍处于实验阶段 | public_glove-100-angular.json |
方法、区间和所有落后项目:docs/benchmarks 和
基准测试页面。
由 hms-bench table 根据 benchmarks/results/competitive/ 生成;方法和注意事项见 docs/benchmarks/COMPARISON.md。W = HMS 领先(95% 区间不包含持平),T = 持平,L = 对比项领先。
| 数据集 | 指标 | HMS | 最佳其他项 | 优势 | |
|---|---|---|---|---|---|
| sift-128-euclidean | QPS @ recall@10 >= 0.95 (QPS) | 17,481 | hnswlib 7,630 | 2.29x | W |
| sift-128-euclidean | p99 latency @ 0.95 (us) | 105 | hnswlib 220 | 2.10x | W |
| sift-128-euclidean | 构建时间 (s) | 312.60 | hnswlib 182.49 | 0.58x | L |
| sift-128-euclidean | RSS,服务期间 (MiB) | 2,204 | hnswlib 1,019 | 0.46x | L |
| sift-128-euclidean | 索引大小 (MiB) | 446.3 | hnswlib 873.8 | 1.96x | - |
| beir:fiqa | nDCG@10 | 0.2654 | SQLite FTS5 0.2678 | 0.99x | T |
| beir:fiqa | QPS(单线程)(QPS) | 3,576 | tantivy 1,617 | 2.21x | W |
| beir:fiqa | p99 延迟 (us) | 501 | tantivy 1,269 | 2.53x | W |
| beir:fiqa | 导入/构建时间 (s) | 2.16 | SQLite FTS5 1.18 | 0.55x | L |
| beir:fiqa | 峰值 RSS,服务期间 (MiB) | 2,480 | SQLite FTS5 2,480 | 1.00x | T |
| beir:fiqa | 磁盘占用 (MiB) | 20.6 | Apache Lucene 9.12.3 (JVM) 12.2 | 0.59x | L |
| memory | nDCG@10 | 0.4561 | Apache Lucene 9.12.3 (JVM) 0.4627 | 0.99x | T |
| memory | QPS(单线程)(QPS) | 2,225 | tantivy 2,399 | 0.93x | T |
| memory | p99 延迟 (us) | 786 | tantivy 733 | 0.93x | T |
| memory | 导入/构建时间 (s) | 2.52 | SQLite FTS5 2.06 | 0.82x | L |
| memory | 峰值 RSS,服务期间 (MiB) | 66 | SQLite FTS5 26 | 0.39x | L |
| memory | 磁盘占用 (MiB) | 9.8 | Apache Lucene 9.12.3 (JVM) 10.3 | 1.05x | W |
| memory | nDCG@10 | 0.4561 | Apache Lucene 9.12.3 (JVM) 0.4627 | 0.99x | T |
| memory | QPS(单线程)(QPS) | 11,857 | tantivy 4,591 | 2.58x | W |
| memory | p99 延迟 (us) | 145 | tantivy 412 | 2.85x | W |
| memory | 导入/构建时间 (s) | 1.21 | SQLite FTS5 0.88 | 0.73x | L |
| memory | 峰值 RSS,服务期间 (MiB) | 2,480 | SQLite FTS5 2,480 | 1.00x | T |
| memory | 磁盘占用 (MiB) | 9.8 | Apache Lucene 9.12.3 (JVM) 10.3 | 1.05x | W |
| beir:nfcorpus | nDCG@10 | 0.2916 | SQLite FTS5 0.2914 | 1.00x | T |
| beir:nfcorpus | QPS(单线程)(QPS) | 38,963 | tantivy 14,705 | 2.65x | W |
| beir:nfcorpus | p99 延迟 (us) | 57 | tantivy 150 | 2.62x | W |
| beir:nfcorpus | 导入/构建时间 (s) | 0.23 | SQLite FTS5 0.14 | 0.59x | L |
| beir:nfcorpus | 峰值 RSS,服务期间 (MiB) | 748 | SQLite FTS5 748 | 1.00x | T |
| beir:nfcorpus | 磁盘占用 (MiB) | 2.1 | Apache Lucene 9.12.3 (JVM) 1.5 | 0.72x | L |
| beir:nfcorpus | nDCG@10 | 0.2916 | SQLite FTS5 0.2914 | 1.00x | T |
| beir:nfcorpus | QPS(单线程)(QPS) | 9,532 | tantivy 7,105 | 1.34x | T |
| beir:nfcorpus | p99 延迟 (us) | 298 | tantivy 300 | 1.01x | T |
| beir:nfcorpus | 导入/构建时间 (s) | 0.59 | SQLite FTS5 0.29 | 0.48x | L |
| beir:nfcorpus | 峰值 RSS,服务期间 (MiB) | 57 | SQLite FTS5 30 | 0.53x | L |
| beir:nfcorpus | 磁盘占用 (MiB) | 2.1 | Apache Lucene 9.12.3 (JVM) 1.5 | 0.72x | L |
| beir:scifact | nDCG@10 | 0.7027 | Apache Lucene 9.12.3 (JVM) 0.7022 | 1.00x | T |
| beir:scifact | QPS(单线程)(QPS) | 17,782 | tantivy 6,450 | 2.76x | W |
| beir:scifact | p99 延迟 (us) | 95 | tantivy 292 | 3.09x | W |
| beir:scifact | 导入/构建时间 (s) | 0.31 | SQLite FTS5 0.20 | 0.63x | L |
| beir:scifact | 峰值 RSS,服务期间 (MiB) | 196 | tantivy 174 | 0.89x | T |
| beir:scifact | 磁盘占用 (MiB) | 2.9 | Apache Lucene 9.12.3 (JVM) 2.0 | 0.68x | L |
| beir:scifact | nDCG@10 | 0.7027 | Apache Lucene 9.12.3 (JVM) 0.7022 | 1.00x | T |
| beir:scifact | QPS(单线程)(QPS) | 2,711 | tantivy 2,879 | 0.94x | L |
| beir:scifact | p99 延迟 (us) | 526 | tantivy 520 | 0.99x | T |
| beir:scifact | 导入/构建时间 (s) | 1.42 | SQLite FTS5 0.43 | 0.30x | L |
| beir:scifact | 峰值 RSS,服务期间 (MiB) | 160 | SQLite FTS5 54 | 0.34x | L |
| beir:scifact | 磁盘占用 (MiB) | 2.9 | Apache Lucene 9.12.3 (JVM) 2.0 | 0.68x | L |
开始使用
只需克隆一次:git clone https://github.com/writerslogic/holographic-memory && cd holographic-memory。
运行离线 Agent 记忆演示:cargo run --release --example demo-offline-agent。
Rust
在你自己的 Rust 项目中,添加当前的 Apache-2.0 源码:
cargo add holographic-memory --git https://github.com/writerslogic/holographic-memory
已发布的 crate 0.6.1 仍采用 AGPL-3.0-or-later 许可。
use holographic_memory::{DocumentInput, HmsCore, SearchOptions};
let dir = tempfile::tempdir()?;
let hms = HmsCore::new(4096, Some(dir.path().display().to_string()), None)?;
hms.memorize_document(DocumentInput {
id: "backups".into(),
text: "Restore deleted documents from verified backups.".into(),
source_uri: Some("operations.md".into()),
version: Some("1".into()),
metadata: Some(serde_json::json!({ "project": "alpha" })),
chunk_words: None, overlap_words: None, store_text: None, embeddings: None, title_weight: None,
})?;
let hits = hms.search_documents("restore backups", &SearchOptions::default())?;
println!("{} {:?}", hits[0].document_id, hits[0].source_uri);
Node.js
安装 Node.js 绑定(该软件包会为你的平台选择原生二进制文件):
npm install holographic-memory
若要改为从源代码构建原生模块(需要 Rust):
npm ci --omit=optional && npm run build
const { HolographicMemorySystem } = require('holographic-memory')
const { DocumentMemory } = require('holographic-memory/semantic')
async function main() {
const dir = require('node:fs').mkdtempSync(require('node:path').join(require('node:os').tmpdir(), 'hms-readme-'))
const memory = new DocumentMemory(new HolographicMemorySystem(4096, dir))
await memory.memorize({
id: 'backups', text: 'Restore deleted documents from verified backups.',
sourceUri: 'operations.md', version: '1', metadata: { project: 'alpha' },
})
const [hit] = await memory.search('restore backups', { filter: { project: 'alpha' } })
console.log(hit.documentId, hit.sourceUri, hit.text)
await memory.flush()
}
main().catch(error => { console.error(error); process.exit(1) })
服务端和 Python
Python 软件包 holographic-memory-sdk 是 hms-server 的 HTTP 客户端;hms-server 用于存储你提供的向量。(holographic-memory-py 提供原生向量搜索和相位向量,但不提供文档搜索。)
cargo build --release --features server --bin hms-server
HMS_API_KEY=change-me target/release/hms-server --input-dim 384 &
uv pip install holographic-memory-sdk
from holographic_sdk import HolographicClient
client = HolographicClient(url="http://127.0.0.1:8080", api_key="change-me", tenant_id="demo")
client.add_documents([{"id": "a", "vector": [0.1] * 384, "text": "hello", "metadata": {}}])
print(client.query([0.1] * 384, top_k=1)["matches"][0]["id"])
端点、标志、租户和限制请参阅
服务端文档。可运行的 Python 快速入门示例(使用玩具嵌入器)位于 examples/quickstart/python。
MCP
hms-mcp 可通过标准输入/输出或 HTTP,向任意模型上下文协议客户端提供存储:
npx -y holographic-memory-mcp # stdio; downloads a verified binary on first run
npx -y holographic-memory-mcp --transport http # http://127.0.0.1:8765/mcp
MCP 软件包是独立的启动器。若要从源代码构建服务端:
cargo build --release --features mcp,security --bin hms-mcp # add local-models for semantic recall
./target/release/hms-mcp # stdio
./target/release/hms-mcp --transport http # http://127.0.0.1:8765/mcp
客户端设置、数据目录和单写入者规则:MCP 集成。
五分钟快速入门
将介绍 Rust、Python 和 Node 中的数据摄取、搜索、与 SQLite FTS5 的比较以及加密;CI 还会在每个拉取请求中运行这些代码。若要体验无需嵌入和网络的完整 Agent 记忆,请运行 cargo run --example demo-offline-agent。
为什么叫“全息”?
在全息图中,底片的每个碎片都包含整幅图像的模糊副本。将它切成两半,你得到的仍是整幅图像,只是分辨率较低,而不是半幅图像。全息降维表示和向量符号架构(VSA)让记忆具备了这一特性:
- 绑定两个向量(此处为稀疏位集合的异或),将角色与填充值关联起来:
capital ⊗ paris。再次用角色进行绑定,即可还原出填充值的噪声副本。 - 将多个绑定对捆绑到一个固定大小的向量中。结果与每个组成部分仍保持相似,因此一个向量就能存储完整记录,且没有任何单个位承载某条事实。
- **通过共振回忆。**输入带噪提示,最近的已存储模式就会胜出(相似度搜索、Hopfield 清理)。损坏向量会让每个条目都略微退化,而非删除少数条目,因此噪声越大,回忆能力就逐渐下降。
你可以用几行代码观察这一过程(将 100 个条目合并为并集,并逐步损坏):
cargo run --release --manifest-path examples/quickstart/rust/Cargo.toml --bin holographic。
**这里哪些内容是真正的全息技术:**稀疏超向量类型及其绑定、捆绑和置换操作;关系型“意义记忆”(将三元组存储为绑定复合体,支持多跳查询和 Hopfield 清理);并集捆绑成员资格测试和共振器网络(均需启用 experimental 功能)。
**哪些内容属于常规工程:**文档搜索(词干化 BM25 加精确余弦相似度;不读取超向量)、图索引和倒排文件向量索引、记忆 API、日志存储和各类服务端。这些内容均不声称具备全息行为。包含测试数据的详细版本见 概念。
当前提供的功能
| 功能 | 状态 | 文档中说明的限制 |
|---|---|---|
| 混合文档搜索(BM25 + 精确余弦相似度、筛选条件、字节偏移量) | 已提供 | 精确扫描符合条件的文本块;请先对语料库进行基准测试,再评估容量(指南) |
布尔词法搜索(+required、-excluded、带引号的短语) | 已提供 | 仅支持扁平查询,不支持嵌套;空查询或仅包含排除项的查询不会匹配任何内容(设计文档) |
| 原子替换/删除、崩溃安全日志、经过验证的压缩、进程锁 | 已提供 | 每个存储仅支持一个写入者;压缩不属于安全擦除 |
向量索引(qgraph 顶点图,内存映射) | 已提供 | 在 SIFT-1M 上,构建时间和服务阶段的 RSS 不及 hnswlib(差距) |
| 可更新向量索引(用于插入和删除的持久化增量) | 已提供 | 仅支持一个写入者;格式见 VECTOR-UPDATES.md |
| 查询感知图路由(基于示例查询训练) | 已提供(可选启用) | 需要有代表性的训练查询;已在 VIBE llama 和 yi 上测试(报告) |
| 记忆 API:记住、回忆、忘记、解释 | 已提供 | 忘记会从存储中移除事实,但无法覆盖模型推断出的内容(文档) |
对话记忆(conversation-memory) | 已提供 | 有界上下文,精确记录来源;原生回忆功能尚未在 LongMemEval 上完成端到端基准测试 |
| 语义记忆:三元组、多跳、Hopfield 清理 | 已提供(运行时可选启用) | 已在合成数据集和包含 2,120 条事实的数据集上测试(research_bench_16384_256.json) |
联合包成员资格(experimental) | 研究中 | 在 D = 16,384 时,相对于 N = 500 存在正间隙(4% 的误报率),测试规模最高达 2,500(benchmark_scaling_results.json) |
稀疏向量索引(memorize_vector) | 实验性 | 性能不及 HNSW(结果) |
加密存储(security) | 已提供 | AES-256-GCM、Argon2id;覆盖日志、索引缓存和文本段。元数据、文件名和大小未加密 |
签名审计日志、凭据门控访问、COSE/SCITT/C2PA(provenance) | 已提供 | 主机必须对 DID 进行身份验证;尚未实现 PoSME、RATS、did:web |
设备端模型(local-models:Qwen3 嵌入/重排/LLM) | 已提供 | 仅使用本地权重;绝不下载 |
hms-server HTTP API,多租户(server) | 已提供 | 单节点;TLS、按租户限定范围的密钥(指南) |
MCP 服务(mcp:hms-mcp,stdio 和 HTTP) | 已提供 | 加密需要启用 security;语义回忆需要启用 local-models |
| Node.js 绑定 | 已在 npm 上提供,也可从源代码构建 | 安装时根据平台选择原生二进制文件 |
| C、Go、.NET、Java、Kotlin、Swift 和 WebAssembly 绑定 | 可获取源代码 | 需要本地构建;语言包和原生捆绑包尚未发布(运行时指南) |
| Python | 客户端 + 阶段底座 | 不支持进程内文档搜索 |
查询隐私搜索(private-search) | 实验性 | 用于搜索由他人持有的索引;仅向评分器隐藏查询向量(说明) |
除文档搜索和向量索引外,上述所有功能都需要通过默认关闭的 Cargo 功能或运行时选项启用;Cargo 功能列出了所有选项。
架构
flowchart TB
subgraph bindings["Bindings and servers"]
rust["Rust crate"]
node["Node.js (napi)"]
ffi["C, WASM, UniFFI"]
python["Python: holographic-memory-sdk"]
server["hms-server (HTTP)"]
mcp["hms-mcp (stdio, HTTP)"]
end
subgraph engine["Engine API"]
core["HmsCore: documents, vectors, facts, mutation gate"]
prov["Security and provenance: signed audit log, COSE/SCITT"]
end
subgraph indexes["Indexes and memory"]
text["Text index: blocked postings, BM25, Boolean and phrase"]
vector["Vector index (qgraph): vertex file, updatable delta, query-aware projection"]
memory["Memory API: remember, recall, forget, conversation memory"]
vsa["Vector-symbolic layer: bind, bundle, Hopfield cleanup"]
end
subgraph storage["Storage"]
journal["Journal and checkpoints"]
segments["Append-only segments (CRC32, LZ4)"]
mapped["Memory-mapped files"]
crypto["AES-256-GCM encryption (optional)"]
end
python --> server
rust --> core
node --> core
ffi --> core
server --> core
mcp --> core
core --> text
core --> vector
core --> memory
core --> vsa
core --> prov
memory --> text
text --> journal
vector --> journal
memory --> journal
journal --> segments
segments --> mapped
segments --> crypto
模块图:docs/ARCHITECTURE.md。
限制
- 并非匿名。 超向量草图和术语计数不是加密;任何拥有存储库的人都可以对候选文本进行编码并进行比较。
storeText: false仍会保留术语计数、ID 和嵌入,因此不是隐私保护措施。 - 文档搜索采用传统方式。 它不使用超向量;全息部分是代数和语义记忆。
- 每个存储库只能有一个写入者。 第二个写入进程在打开时会因锁定错误而失败。
- 容量数据是点值,并非保证值,且仅针对已测试范围给出(容量)。
- 基准测试结果来自单台机器。 条件见各结果文件;单核 ann-benchmarks 运行和 VIBE 高召回率数据点均有损耗(参见表现较差之处)。
- 掩码只是混淆处理。 客户端向量掩码会保留所有成对相似度。
- 存储库是一个目录,而
HmsCore::new(.., None, ..)使用当前目录。
完整声明:docs/PRIVACY.md。请通过 SECURITY.md 私下报告漏洞。
贡献
CONTRIBUTING.md:环境设置、CI 运行的检查、DCO 签署(git commit -s,无需 CLA)。从一个适合新手的议题或讨论区开始。请参阅行为准则。基准测试变更会重新生成其涉及的结果文件;README 引用的是文件,而非凭记忆记录的数据。
许可证
Apache-2.0。请参阅 LICENSE。可在开源或专有软件(包括网络服务)中使用、修改和嵌入,且无需承担著佐权义务。直到 crate 0.6.1(含)为止的版本均以 AGPL-3.0-or-later 发布,并继续适用这些条款。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。