知识图谱检索引擎

LORE是一个个人知识服务器,通过MCP协议为AI代理提供共享的持久性记忆存储和检索功能。

  • by rudavko
  • JavaScript
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 rudavko/lore-mcp

使用说明

传说

链接对象检索引擎 --会说话的个人知识服务器 主控程序.

研究预览。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):

  1. 词汇的 --FTS5得分为BM25(如果FTS5不可用,则退回LIKE)
  2. 语义 --将最近邻矢量化 bge-base-en-v1.5 嵌入(当绑定不存在时跳过)
  3. 图 --通过三重店进行1店社区扩张

当Vectorize未绑定时,语义权重会自动重新分配给词汇和图。

统一检索。 retrieve 将注释、实体和链接结果合并到一个流中,因此客户端不需要预先预测正确的存储类型。

仅附加校正模型。 通过创建新对象并将其链接到 supersedes,或通过将对象链接到 deleted而不是篡改历史。

审计追踪。 每个突变都会在事务日志中记录一个前后快照。 engine_check 从同一公共界面公开历史记录和一次性自动更新安装链接流。

快速开始

在Cloudflare上安装(一键)

  1. 单击按钮并按照Cloudflare提示进行操作。
  2. 当系统提示时 ACCESS_PASSPHRASE,创建一个长而唯一的密码短语(使用密码管理器)。
  3. 完成部署,然后打开 https://<your-worker>.workers.dev/authorize.
  4. 首次登录时,使用身份验证器应用程序扫描TOTP二维码并验证。
  5. 连接您的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 --免费用于个人、研究和非商业用途。看 许可证.