mcpField
C
Cairn

Cairn

远程服务
github.com/jasondostal记忆与知识719 周前更新

关于 Cairn

Cairn 是面向 Agent 和团队的可自托管持久记忆平台,可跨会话保存和检索决策、事实与项目知识,并提供知识图谱及代码结构查询。项目已退役并归档,新开发转向 rill。

主要功能

  1. 01跨会话记忆存储与检索
  2. 02融合向量、关键词和时间的搜索
  3. 03信念、规则与工作项管理
  4. 04知识图谱与思考序列
  5. 05代码图谱查询与架构检查

适用场景

  1. 01让 Agent 在不同会话延续项目背景
  2. 02按时间查找决策与事实
  3. 03查询代码依赖和调用关系

MCP 相关

Cairn 提供 MCP 服务与 REST API,向客户端开放记忆、检索、规则、工作项及代码查询等工具;支持本地 IDE 连接,也可配置 OAuth2 远程 MCP 访问。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cairn": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CAIRN_DB_HOST",
"-e",
"CAIRN_DB_PASS",
"-e",
"CAIRN_TRANSPORT",
"-e",
"CAIRN_LLM_BACKEND",
"ghcr.io/jasondostal/cairn-mcp:0.21.2"
],
"env": {
"CAIRN_DB_HOST": "<CAIRN_DB_HOST>",
"CAIRN_DB_PASS": "<CAIRN_DB_PASS>",
"CAIRN_TRANSPORT": "<CAIRN_TRANSPORT>",
"CAIRN_LLM_BACKEND": "<CAIRN_LLM_BACKEND>"
}
}
}
}
启动命令docker run -i --rm -e CAIRN_DB_HOST -e CAIRN_DB_PASS -e CAIRN_TRANSPORT -e CAIRN_LLM_BACKEND ghcr.io/jasondostal/cairn-mcp:0.21.2
需要配置的环境变量
CAIRN_DB_HOSTPostgreSQL host (pgvector)
CAIRN_DB_PASS密钥PostgreSQL password
CAIRN_TRANSPORTTransport mode: stdio or http
CAIRN_LLM_BACKENDLLM backend for enrichment: bedrock or ollama

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/jasondostal/cairn-mcp:0.21.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Cairn — 为 Agent 和人类提供持久记忆

发布版本 许可证 MCP PostgreSQL

重要

Cairn 已停止维护,本仓库已归档(只读)。 其后继项目是 rill——一个更快速、更精简、 原生支持 MCP、使用 Go 编写的记忆服务,它汲取了 Cairn 的所有成功经验 (以及失败教训)。Cairn 是第一个;后续工作将在 rill 中继续。 本仓库将作为只读归档保留——你可以探索、派生,但新开发 都将在 rill 中进行。


一个可自托管的持久记忆平台,服务于 AI Agent 和人类。存储一次,之后即可跨会话、跨项目查找。四个容器。运行 docker compose up。完成。

Cairn 是记忆中枢。你的 Agent 运行时负责执行——Cairn 负责记忆。做出了哪些决策、已知哪些事实,以及跨项目浮现了哪些模式。

它为系统思考者、好奇者和 T 型人才打造。为那些需要一种能按自己的方式、跨越所有事物并同时运作的记忆的人打造。

快速开始

1. 拉取并运行
curl -O https://raw.githubusercontent.com/jasondostal/cairn-mcp/main/docker-compose.yml
docker compose up -d

四个容器将启动:

  • cairn,端口 8000(MCP 服务 + REST API)
  • cairn-ui,端口 3000(Web 仪表板)
  • cairn-db(PostgreSQL 16 + pgvector)
  • cairn-graph(Neo4j 5,知识图谱)

首次启动时会运行迁移。大约一分钟后即可就绪。

2. 连接你的 IDE

将以下内容添加到 MCP 配置中:

{
  "mcpServers": {
    "cairn": {
      "type": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

配置文件位置:

IDE配置文件
Claude Code项目根目录中的 .mcp.json
Cursor.cursor/mcp.json
Windsurf.windsurf/mcp.json
ClineVS Code 中的 MCP 设置面板
Continue.continue/config.yaml
PiClaw.pi/mcp.json

也可以运行设置向导——它会引导你完成所有配置:大模型后端、数据库、嵌入、身份验证和 IDE 配置:

git clone https://github.com/jasondostal/cairn-mcp.git && ./cairn-mcp/scripts/setup.sh

选择一个层级(本地开发、推荐、企业或自定义),向导只会收集该层级所需的信息。支持在 CI 中使用 --dry-run 和 --non-interactive。

3. 使用

告诉你的 Agent 记住一件事:

“记住,我们选择 PostgreSQL 作为存储,因为它无需单独的向量数据库就能处理混合搜索。”

之后再搜索:

“我们对存储层做了什么决定?”

就这样。共有 11 个工具可用。你最常用的工具有:

工具功能
store保存记忆并自动补充信息。支持 event_at 和 valid_until,用于双时态跟踪
search查找记忆(向量 + 关键词 + 时效性 + 标签)。时态筛选器:as_of、event_after、event_before
recall获取特定记忆 ID 对应的完整内容
orient启动会话并载入规则、近期活动、信念和未完成的工作
rules加载行为准则(全局或针对单个项目)
beliefs持久的认知状态——以置信度跟踪为基础,凝练、质疑、撤回知识
work_items创建、认领和完成带有依赖项和关卡的任务
working_memory捕获短暂想法——假设、问题、矛盾——并随显著性衰减
projects管理项目文档(简介、PRD、计划)
code_query结构化查询:依赖项、影响、调用方、被调用方、死代码、复杂度、热点
arch_check根据导入规则验证架构边界

其余工具:modify、insights、think、status、consolidate、ingest。

包含内容

可跨会话持久保存的记忆。 你的 Agent 在凌晨 2 点做出一个决定。第二天早上,换了一个会话,它仍能找到那个决定。这就是核心功能。双时态跟踪将事件发生的时间(event_at)与获知事件的时间(created_at)区分开来。未被访问的记忆会自然衰减;重要记忆则会受到保护。相关记忆会自动整合为更高阶的洞见。

信念。 持久的认知状态——以一定置信度持有的知识。将假设提炼为信念,用反面证据质疑它们,并在它们出错时撤回。信念会与规则和记忆一同出现在会话启动时,让 Agent 清楚了解组织已知什么,以及对此有多大把握。

融合多种信号的搜索。 通过倒数排名融合(Reciprocal Rank Fusion)综合向量相似度、时效性、访问频率、关键词匹配和标签重合度。可按项目、类型或时间范围筛选。支持时间查询:通过 as_of 查询“截至周二我们知道什么?”,通过 event_after/event_before 查询“上周发生了什么?”。

知识图谱。 实体和事实会被提取到 Neo4j 图谱中,通过共同的人物、地点、项目和概念串联记忆。此功能可选,但在跨领域工作时非常强大。

思考序列。 结构化推理——从目标开始,添加想法(观察、假设、分析、备选方案),最后得出结论。人类和 Agent 都可以参与。探索过程本身也会成为可搜索的记忆。

工作管理。 支持依赖关系跟踪的分层工作项、可暂停以等待人工决策的关卡,以及活动日志记录。此功能仍处于实验阶段,会随着我们不断摸索有效做法而持续演进。

Web 仪表板。 浏览记忆,使用 OKLCH 着色的切换筛选器、分数渐变条和可分享的 URL 状态。探索知识图谱及实体关系。查看分析数据并管理工作项。端口 3000。

Cairn 仪表板,显示记忆增长和令牌用量
按类型展示的记忆增长、令牌用量跟踪,以及完整导航栏。

代码智能。 独立工作进程使用 tree-sitter(30 种语言)为代码库建立索引,并在 Neo4j 中构建代码图谱。服务端查询图谱时完全不会接触源文件。提出结构性问题——“哪些内容依赖此文件?”、“哪些地方调用了此函数?”、“影响范围有多大?”——即可从代码图谱中获取答案。支持调用图提取、圈复杂度计算和死代码检测。通过 YAML 规则强制执行架构边界。支持跨项目使用。

支持的语言(30 种)
类别语言
系统语言C、C++、Rust、Go、Zig
JVMJava、Scala、Kotlin、Groovy
.NETC#
脚本语言Python、Ruby、PHP、Lua、Bash
WebTypeScript/TSX、HTML、CSS
AppleSwift、Objective-C
ML/科学计算OCaml、MATLAB
配置与数据JSON、YAML、TOML、HCL(Terraform)、Dockerfile、Makefile、SQL、Markdown

多用户身份验证和 RBAC。 默认关闭,通过一条命令即可从零配置到企业级。./scripts/setup.sh 包含身份验证配置,也可以单独运行 ./scripts/setup-auth.sh。支持选择身份验证模式(none / local JWT / OIDC SSO)、生成 JWT 密钥并验证 OIDC 提供商。为机器客户端提供个人访问令牌,为 MCP 提供 stdio 身份。设有三种角色,支持项目级范围控制,并由首位用户自动成为管理员。支持通过 OIDC 同步群组。请参阅**身份验证指南**。

灾难恢复。 提供适用于 Cron 的脚本,可转储 PostgreSQL 并导出 Neo4j 图谱,且保留期限可配置。恢复流程经过测试,并包含迁移安全检查。请参阅**备份指南**。

我需要大模型吗?

不需要。存储、搜索、回忆和规则都可以在没有大模型的情况下运行。你将无法使用自动丰富功能(摘要、标签、重要性评分)、知识提取和思考功能。

如果你需要内容丰富功能:

后端设置
Ollama(默认)安装 Ollama,拉取一个模型。Cairn 会连接到 host.docker.internal:11434。
AWS Bedrock设置 CAIRN_LLM_BACKEND=bedrock,导出 AWS 凭据。
Google Gemini设置 CAIRN_LLM_BACKEND=gemini,添加 CAIRN_GEMINI_API_KEY。提供免费套餐。
兼容 OpenAI 的服务设置 CAIRN_LLM_BACKEND=openai,添加密钥。可与 OpenAI、Groq、Together、LM Studio、vLLM 配合使用。

配置

所有配置都通过环境变量设置。以下是重要变量:

变量默认值作用
CAIRN_PROFILE(空)预设:vector、enriched、knowledge、enterprise。设置功能默认值。
CAIRN_LLM_BACKENDollama大模型提供方:ollama、bedrock、gemini、openai
CAIRN_DB_PASScairn-dev-password数据库密码。本地使用以外的场景都应修改此项。
CAIRN_AUTH_ENABLEDfalse多用户身份验证(JWT、PAT、OIDC/SSO)
CAIRN_AUTH_JWT_SECRET(空)JWT 签名密钥(启用身份验证时必填)
CAIRN_OIDC_ENABLEDfalseOIDC/SSO 集成(支持任何符合 OIDC 标准的提供方)
CAIRN_MCP_OAUTH_ENABLEDfalse面向远程 MCP 客户端(Claude.ai、移动端)的 OAuth2 授权服务器
CAIRN_GRAPH_BACKEND(已禁用)设置为 neo4j 以启用知识图谱
CAIRN_KNOWLEDGE_EXTRACTIONfalse存储时提取实体/陈述
CAIRN_EMBEDDING_BACKENDlocallocal(MiniLM,384 维)或 bedrock(Titan V2,1024 维)
CAIRN_INGEST_DIR/data/ingest大型文档通过文件路径导入时使用的暂存目录
CAIRN_CODE_DIR/data/code代码智能索引的根目录(在此处挂载代码库)

完整参考见 docker-compose.yml。每个变量都有合理的默认值。

身份验证

默认关闭。最快的启用方式是使用设置向导:

./scripts/setup.sh          # includes auth as step 2
./scripts/setup-auth.sh     # or run auth setup standalone

支持三种模式——无身份验证、本地 JWT 或 OIDC/SSO。向导会生成密钥、验证身份提供方的发现端点,并写入 .env。针对 Authentik、Keycloak、Auth0、Okta 和 Azure AD 提供特定的 URL 提示。两个脚本都支持 --dry-run 和 --non-interactive,可用于 CI。

首个注册的用户将成为管理员。基于角色的访问控制会在 REST API、MCP HTTP 和 Web UI 中强制执行权限。支持供机器客户端使用的个人访问令牌,以及与 OIDC 同步的群组。

完整参考请参阅 身份验证指南,其中涵盖所有身份验证模式、OIDC 提供方配置和 MCP 客户端示例。

安全说明: Cairn 的身份验证系统功能完备,并经过生产环境测试,但尚未接受独立审计。对于暴露在网络中的部署,请添加 TLS 终止和网络级访问控制。

远程 MCP 访问(Claude.ai、移动端)

将 Cairn 连接到 Claude.ai、Claude 移动应用或任何支持 OAuth2 的 MCP 客户端。Cairn 充当 OAuth2 授权服务器,并将用户身份验证委托给你现有的 OIDC 身份提供商。

**前置条件:**已启用身份验证(CAIRN_AUTH_ENABLED=true)、已配置 OIDC(CAIRN_OIDC_ENABLED=true),并已设置公共 URL(CAIRN_PUBLIC_URL)。

启用方法:

CAIRN_MCP_OAUTH_ENABLED=true

从 Claude.ai 连接:

  1. 前往 Claude.ai Settings > Integrations > Add custom MCP
  2. 输入你的 Cairn URL:https://your-cairn-domain.com/mcp
  3. Claude.ai 会自动发现 OAuth2 端点
  4. 你将被重定向到身份提供商进行登录
  5. 登录后,Claude.ai 即可完全访问你的 Cairn MCP 工具

OAuth2 流程使用授权码 + PKCE,并结合动态客户端注册(RFC 7591)。如果你的身份提供商支持 SSO 会话,首次登录后,身份验证重定向将不可见。

有关反向代理配置、安全加固和故障排除,请参阅 远程 MCP 指南。

代码智能

代码智能以独立工作进程的形式运行,用于索引源代码并写入 Neo4j。cairn 服务器会查询图谱,但不会直接接触源文件。这种分离意味着索引过程不会阻塞事件循环,而且工作进程可以运行在代码所在的机器上。

**要求:**Neo4j(docker-compose 中的 cairn-graph 服务)必须正在运行。

快速开始
# Index a single project (one-shot, no watching)
python -m cairn.code \
  --watch /path/to/your/repo:your-project \
  --neo4j-uri bolt://localhost:7687 \
  --cairn-url http://localhost:8000 \
  --no-watch

# Index and watch for changes (long-running)
python -m cairn.code \
  --watch /home/user/working/myproject:myproject \
  --watch /home/user/working/other:other \
  --neo4j-uri bolt://my-server:7687
环境变量
变量默认值作用
CAIRN_NEO4J_URIbolt://localhost:7687Neo4j bolt URI
CAIRN_NEO4J_USERneo4jNeo4j 用户名
CAIRN_NEO4J_PASSWORDcairn-dev-passwordNeo4j 密码
CAIRN_API_URLhttp://localhost:8000Cairn 服务器 URL(用于解析项目 ID)
CAIRN_API_KEY(empty)启用 cairn 身份验证时使用的 API 密钥
CAIRN_CODE_PROJECTS(empty)以逗号分隔的 project=path 键值对(可替代 --watch)
CAIRN_CODE_WATCHtrue初始索引后启用文件系统监视
CAIRN_CODE_FORCEfalse即使内容哈希未更改,也强制重新索引
Docker / 远程代码库

将源代码挂载到 cairn 容器中,并设置 CAIRN_CODE_DIR:

# docker-compose.yml
volumes:
  - /path/to/code:/data/code:ro   # read-only mount
environment:
  CAIRN_CODE_DIR: /data/code

或者在代码所在的主机上运行工作进程,并将其指向你的 cairn 和 Neo4j 实例:

CAIRN_NEO4J_URI=bolt://cairn-host:7687 \
CAIRN_API_URL=http://cairn-host:8000 \
CAIRN_CODE_PROJECTS="myproject=/home/user/code/myproject" \
python -m cairn.code
索引内容
  • **符号:**函数、类、方法、接口、枚举、React 组件/钩子
  • 关系:IMPORTS(文件级)、CALLS(函数级)、CONTAINS(父子级)
  • **元数据:**签名、文档字符串、圈复杂度、行号、内容哈希
  • **语言:**Python、TypeScript/TSX,以及其他 28 种语言(C、Rust、Go、Java、Ruby 等)
查询示例(通过 code_query MCP 工具)
操作作用
dependents导入目标文件的文件
dependencies目标文件导入的文件
callers调用目标函数的函数
callees目标函数调用的函数
call_chain跟踪两个函数之间的调用路径
dead_code没有调用者的函数
complexity按圈复杂度对函数排序
impact影响范围 — 传递依赖项
hotspotsPageRank — 结构上重要的文件
search对符号名称和文档字符串进行全文搜索

架构

MCP clients (Claude Code, Cursor, PiClaw)    REST clients (web UI, scripts)
        |                                            |
        | MCP (stdio or HTTP)                        | REST API
        |                                            |
+-------v--------------------------------------------v--------+
|  cairn.server (MCP tools)     cairn.api (FastAPI endpoints) |
|                                                             |
|  core: memory, search, enrichment, extraction, clustering   |
|        working memory, beliefs, thinking, work items        |
|                                                             |
|  embedding: local (MiniLM) or Bedrock (Titan V2)            |
|  llm: Ollama, Bedrock, Gemini, OpenAI-compatible            |
+------+----------------------------------------------+------++
       |                                              |       |
       v                                              v       |
  PostgreSQL 16 + pgvector                    Neo4j 5 <-------+
                                             (optional)       |
                                                ^             |
  code worker (python -m cairn.code)            |             |
  tree-sitter parsing, call graph      --------+             |
  watches filesystem for changes                             |

基准测试

基于 LoCoMo 进行测试。LoCoMo 是一项长对话记忆基准测试,涵盖五个类别,共有 1,986 个问题。

系统得分LLM
Cairn81.6%Llama-3.3-70B
人类基准87.9%—
Letta/MemGPT74.0%GPT-4o-mini
Mem066.9%GPT-4o

测试配置:Titan V2 嵌入(Bedrock,1024 维)、情景式摄取(原始轮次 + 两遍事实提取)、以图谱为主要检索方式的 Search V2、类型路由、交叉编码器重排序,以及由 LLM 充当评判者的评估。完整结果和方法见 eval/。

开发

git clone https://github.com/jasondostal/cairn-mcp.git
cd cairn-mcp
cp .env.example .env
docker compose up -d --build

状态

Cairn 正在积极开发中。这是一个每天在生产环境中实际使用的系统,并且随着我逐步了解哪些方法真正适用于 Agent 记忆,它也在不断演进。迁移会处理架构变更。如果遇到问题,请提交 issue。

许可证

GNU 通用公共许可证 v3.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。