使用说明
传说
链接对象检索引擎 --会说话的个人知识服务器 主控程序.
研究预览。API表面可能会在不同版本之间发生变化。
给所有AI代理相同的内存。存储事实,将其关联为知识图,并通过混合搜索从任何支持MCP的客户端检索它们,包括 claude.ai, chatgpt.com克劳德桌面和克劳德代码。在Cloudflare Workers上运行,个人规模的持续成本为零。
为什么
LLM助理在两次会议之间会忘记一切。LORE为您的代理提供了一个共享的持久内存,他们都可以通过MCP进行读写。条目带有出处(来源、参与者、信任度),因此您的代理人或您可以判断一条知识的可信度。
所有代理共享一个内存
通过部署一个LORE端点,每个连接的代理都可以看到相同的知识库:
- 从一个客户端保存某些内容,然后从另一个客户端检索。
- 保持本地应用程序和网络助手之间的上下文一致。
- 减少跨工具的重复提示和重新解释。
能力
迁移说明
公共v0 MCP表面正好有四个工具: link_object, object_create, retrieve,以及 engine_check.
传统工具名称,如 store, update, delete, query, query_graph, upsert_entity,以及 resolve_conflict 不再是公共v0表面的一部分。
工具
| 工具 | 说明 |
|---|---|
link_object |
创建或更新存储对象之间的显式关系 |
object_create |
创建一个 note 或 entity 带有出处、有效性、标签和可选的相关链接 |
retrieve |
通过可选的链接扩展跨笔记、实体和链接进行统一检索 |
engine_check |
帮助、实例状态、历史记录和一次性自动更新链接生成 |
资源(分页、基于光标)
knowledge://entries--所有条目knowledge://graph/triples--所有三元组knowledge://history/transactions--事务日志
提示
ingest-memory--具有出处的知识存储指南retrieve-context--统一检索、分页和链接扩展指南correct-stale-facts--替换过时事实和将对象链接到deleted
建筑
MCP Client ──► Cloudflare Worker ──► Durable Object (MyMCP)
│ │
│ ├── D1 (SQLite)
│ │ ├── entries + FTS5
│ │ ├── triples
│ │ ├── canonical_entities / aliases
│ │ └── transactions (undo log)
│ │
│ ├── Vectorize (optional, semantic search)
│ └── Workers AI (optional, embeddings)
│
├── KV (OAuth state, TOTP secrets, rate-limit counters)
└── OAuth 2.1 + TOTP two-factor auth
回收管道。 查询并行运行三个信号,并将它们与可配置的权重合并(默认值为0.3/0.5/0.2):
- 词汇的 --FTS5得分为BM25(如果FTS5不可用,则退回LIKE)
- 语义 --将最近邻矢量化
bge-base-en-v1.5嵌入(当绑定不存在时跳过) - 图 --通过三重店进行1店社区扩张
当Vectorize未绑定时,语义权重会自动重新分配给词汇和图。
统一检索。 retrieve 将注释、实体和链接结果合并到一个流中,因此客户端不需要预先预测正确的存储类型。
仅附加校正模型。 通过创建新对象并将其链接到 supersedes,或通过将对象链接到 deleted而不是篡改历史。
审计追踪。 每个突变都会在事务日志中记录一个前后快照。 engine_check 从同一公共界面公开历史记录和一次性自动更新安装链接流。
快速开始
在Cloudflare上安装(一键)
- 单击按钮并按照Cloudflare提示进行操作。
- 当系统提示时
ACCESS_PASSPHRASE,创建一个长而唯一的密码短语(使用密码管理器)。 - 完成部署,然后打开
https://<your-worker>.workers.dev/authorize. - 首次登录时,使用身份验证器应用程序扫描TOTP二维码并验证。
- 连接您的MCP客户端(见下文)。
Wrangler从以下位置提供KV命名空间和D1数据库 wrangler.jsonc 在首次部署期间,因此模板不需要提交到仓库的特定于帐户的资源ID。
从克劳德桌面连接
{
"mcpServers": {
"lore": {
"command": "npx",
"args": [
"mcp-remote",
"https://<your-worker>.<subdomain>.workers.dev/mcp"
]
}
}
}
从克劳德代码连接
claude mcp add --transport http lore https://<your-worker>.<subdomain>.workers.dev/mcp
从Web代理连接(claude.ai/chatgpt.com)
在连接器/集成设置中使用此MCP端点:
https://<your-worker>.<subdomain>.workers.dev/mcp
连接后,这些代理与您的桌面和CLI客户端共享相同的LORE内存。
认证
单一所有者,两个因素:
- 口令短语 --通过设置
ACCESS_PASSPHRASE秘密 - 通行密钥 (WebAuthn)--首选2FA,在首次密码登录后注册
- 基于时间的一次性密码 --回退2FA,如果跳过密钥,则通过二维码注册
安全详细信息:
- 所有身份验证表单上的CSRF令牌
- OAuth请求和注册流的一次性非限制(带TTL的KV)
- 密码和TOTP的定时安全比较
- 5次尝试失败后基于IP的锁定(15分钟窗口,在所有身份验证方法之间共享)
- 安全标头:CSP(带有密钥JS的nonce)、HSTS、X-Frame-Options、无存储
要重置凭据,请执行以下操作:
npx wrangler kv key delete --binding OAUTH_KV "ks:passkey:cred" # reset passkey
npx wrangler kv key delete --binding OAUTH_KV "ks:totp:secret" # reset TOTP
本地开发
bun install
cp .dev.vars.example .dev.vars # set ACCESS_PASSPHRASE in .dev.vars
npx wrangler dev
运行测试:
bun test
可观测性
结构化JSON事件通过以下方式发出 console.log 并由自动索引 Cloudflare工作日志:
| 事件 | 字段 |
|---|---|
mutation |
op, id, ok |
retrieval |
mode, results, ms |
conflict |
scope, conflict_id |
conflict_resolved |
conflict_id, strategy, triple_id |
policy_rejection |
op, reason, field 或 confidence |
Eval套房
评估运行器当前未包含在此存储库快照中。
看 docs/quality/evals.md 在CI中连接eval命令之前查看当前状态。
更新
依赖凸块更新程序位于Cloudflare部署shell仓库中,而不是此核心源代码仓库中。一键部署后,使用 engine_check(action="enable_auto_updates") 安装 .github/workflows/upstream-sync.yml 进入您的下游部署仓库。工作人员根据Cloudflare构建期间记录的分支和提交验证目标仓库,然后安装一个托管工作流,检查 rudavko/lore-mcp 最新消息 v* 标记、重新编码 lore-mcp 部署仓库中的依赖关系,运行 bun install,并打开对碰撞的拉取请求。
先决条件 (在叉子上一次性设置 设置→ 秘密和变量→ 行动 安装工作流后):
| 机密 | 描述 |
|---|---|
CLOUDFLARE_API_TOKEN |
具有Workers+D1编辑权限的API令牌 |
CLOUDFLARE_ACCOUNT_ID |
您的Cloudflare帐户ID |
如果缺少机密,仍然可以在GitHub中创建依赖关系缓冲拉取请求,但合并的更改可能会在下一次Cloudflare部署中失败。
看 docs/operations/updates.md 用于精确的设置路径和PAT要求。
项目结构
src/
├── index.orch.0.js # Worker entry orchestration and dependency wiring
├── *.pure.js # Pure logic (deterministic, no I/O)
├── *.efct.js # Effect boundaries (I/O, platform APIs)
├── *.ops.efct.js # Orchestrated effect operations
├── db/
│ ├── schema.efct.js
│ ├── entries.*.js
│ ├── triples.*.js
│ ├── entities.*.js
│ ├── search.*.js
│ ├── conflicts.*.js
│ ├── history.*.js
│ └── summary.*.js
├── domain/
│ ├── conflict.*.js
│ ├── policy.*.js
│ ├── ingestion.*.js
│ └── github-workflow.*.js
├── mcp/
│ ├── tools.*.js
│ ├── resources.efct.js
│ ├── prompts.*.js
│ └── subscriptions.*.js
├── lib/
│ ├── *.pure.js
│ ├── *.efct.js
│ └── *.type.js
├── wiring/
│ ├── runtime.efct.js
│ ├── default-handler.efct.js
│ ├── loremcp.efct.js
│ └── schedule.pure.js
└── templates/
├── auth-page.*.js
├── enroll-passkey.*.js
├── enroll-totp.*.js
└── install-workflow.*.js
evals/
├── baselines/ # Placeholder directory in current snapshot
└── datasets/ # Placeholder directory in current snapshot
已知限制
- 仅限单一所有者。 一个密码、一个TOTP密钥、一个用户。
- 没有多租户隔离。 所有数据都存储在一个D1数据库中。
- 标签分页是近似值。 当仅按标签过滤时(没有主题或内容),分页可以以非常低的标签选择性跳过一些匹配。要进行详尽的导出,请使用
knowledge://entries并在客户端进行过滤。 - 矢量化需要单独设置。 语义搜索仅在wrangler.json中配置了AI和Vectorize绑定时才有效。
- D1行大小限制。 异步摄取将每个任务的内容限制在约900KB。对于较大的输入,请使用预块和单独创建笔记
object_create.
许可证
PolyForm非商业版1.0.0 --免费用于个人、研究和非商业用途。看 许可证.