mcpField
C
Cairn

Cairn

リモート
github.com/jasondostalメモリ・ナレッジ719 週間前に更新

Cairn について

Cairnは、エージェントやチーム向けのセルフホスト可能な永続メモリ基盤です。セッションをまたいで決定事項や事実、プロジェクト情報を保存・検索し、ナレッジグラフやコード構造の照会にも対応します。プロジェクトは終了・アーカイブされ、開発はrillに移行しています。

主な機能

  1. 01セッションをまたぐメモリ保存と検索
  2. 02ベクトル・キーワード・時間を組み合わせた検索
  3. 03信念・ルール・作業項目の管理
  4. 04ナレッジグラフと思考シーケンス
  5. 05コードグラフ照会とアーキテクチャ検証

活用シーン

  1. 01エージェントのセッション間でプロジェクト情報を引き継ぐ
  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 — エージェントと人間のための永続メモリ

リリース ライセンス MCP PostgreSQL

重要

Cairn は提供を終了し、このリポジトリはアーカイブ(読み取り専用)になっています。 後継プロジェクトは rill です。Cairn の良かった点も 問題だった点もすべて活かして開発された、Go 製のより高速で軽量な MCP ネイティブのメモリサーバーです。Cairn が最初のプロジェクトであり、今後の開発は rill で続きます。 このリポジトリは読み取り専用アーカイブとして公開されています。自由に調べたり、フォークしたりできますが、新しい開発は rill で行われます。


AI エージェントと人間のための、セルフホスト可能な永続メモリプラットフォームです。一度保存すれば、セッションをまたいで、プロジェクトをまたいで、後から見つけられます。4 つのコンテナを起動して、docker compose up を実行すれば完了です。

Cairn はメモリの中枢です。エージェントのランタイムが実行を担い、Cairn は情報を把握します。どのような決定がなされたか、どんな事実が分かっているか、プロジェクトをまたいでどのようなパターンが現れるかを扱います。

システムを扱う人、好奇心旺盛な人、T 字型のスキルを持つ人のために作られています。あらゆるものを、一度に、自分のやり方で扱えるメモリを必要とする人のためのものです。

クイックスタート

1. プルして起動する
curl -O https://raw.githubusercontent.com/jasondostal/cairn-mcp/main/docker-compose.yml
docker compose up -d

4 つのコンテナが起動します。

  • cairn(ポート 8000、MCP サーバー+REST API)
  • cairn-ui(ポート 3000、Web ダッシュボード)
  • cairn-db(PostgreSQL 16+pgvector)
  • cairn-graph(Neo4j 5、ナレッジグラフ)

初回起動時にマイグレーションが実行されます。約 1 分で準備が整います。

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

またはセットアップウィザードを実行すると、LLM バックエンド、データベース、埋め込み、認証、IDE の設定まで、すべての手順が案内されます。

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

ティア(ローカル開発、推奨、エンタープライズ、カスタム)を選ぶと、ウィザードはそのティアに必要な項目だけを収集します。CI 向けに --dry-run と --non-interactive をサポートしています。

3. 使ってみる

エージェントに、次の内容を覚えてもらいます。

「ストレージに 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。

同梱機能

セッションをまたいで保持されるメモリ。 エージェントが午前2時に判断を下します。翌朝、別のセッションで、その判断を見つけます。これが中核機能です。二時点追跡により、何かが起きた時点(event_at)と、それを知った時点(created_at)を区別します。アクセスされないメモリは自然に減衰し、重要なメモリは保護されます。関連するメモリは自動的に統合され、より高次の知見になります。

信念。 確信度とともに保持される、持続的な認識状態です。仮説を信念として結晶化させ、反証によって検証し、誤りであれば撤回できます。信念はルールやメモリとともにセッション起動時に提示され、組織が何を知っているか、またその確信度をエージェントが明確に把握できるようにします。

複数のシグナルを融合する検索。 ベクトル類似度、鮮度、アクセス頻度、キーワードの一致、タグの重複を、Reciprocal Rank Fusion で組み合わせます。プロジェクト、種類、期間で絞り込めます。as_of を使えば「火曜日時点で何を知っていましたか?」、event_after/event_before を使えば「先週何が起きましたか?」といった時間的なクエリを実行できます。

ナレッジグラフ。 エンティティと事実を抽出して Neo4j グラフに登録し、共通の人物、場所、プロジェクト、概念を通じてメモリをつなぎます。オプションですが、複数の領域にまたがって作業するときに強力です。

思考の連鎖。 構造化された検討プロセスです。目標から始め、思考(観察、仮説、分析、代替案)を追加し、結論を出します。人間とエージェントの両方が参加できます。探索そのものが検索可能なメモリになります。

作業管理。 依存関係の追跡、人間の判断を待つゲート、アクティビティの記録を備えた階層型の作業項目です。実験的な機能であり、何が有効かを学びながら進化しています。

ウェブダッシュボード。 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
ウェブTypeScript/TSX, HTML, CSS
AppleSwift, Objective-C
ML/科学技術OCaml, MATLAB
設定・データJSON, YAML, TOML, HCL (Terraform), Dockerfile, Makefile, SQL, Markdown

マルチユーザー認証と RBAC。 デフォルトでは無効で、コマンド 1 つでエンタープライズ向けの構成にできます。./scripts/setup.sh には認証設定が含まれています。または、単独で ./scripts/setup-auth.sh を実行してください。認証モードの選択(none / local JWT / OIDC SSO)、JWT シークレットの生成、OIDC プロバイダーの検証に対応しています。マシンクライアント向けの Personal Access Token、MCP 向けの stdio ID にも対応しています。3 つのロール、プロジェクト単位のスコープ設定、最初のユーザーを管理者にする機能を備えています。OIDC 同期に対応したグループも利用できます。**認証ガイド**を参照してください。

災害復旧。 PostgreSQL ダンプと Neo4j グラフのエクスポートに対応した、cron で実行できるスクリプトを用意しています。保持期間を設定できます。マイグレーションの安全性チェックを含む、テスト済みの復元手順を利用できます。**バックアップガイド**を参照してください。

LLM は必要ですか?

いいえ。保存、検索、想起、ルールは LLM なしで動作します。ただし、自動エンリッチメント(要約、タグ、重要度のスコアリング)、ナレッジ抽出、思考機能は利用できません。

エンリッチメントを利用する場合:

バックエンドセットアップ
Ollama(デフォルト)Ollama をインストールし、モデルをプルします。Cairn は host.docker.internal:11434 に接続します。
AWS BedrockCAIRN_LLM_BACKEND=bedrock を設定し、AWS 認証情報をエクスポートします。
Google GeminiCAIRN_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_BACKENDollamaLLM プロバイダー: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 の 3 種類です。シークレットを生成し、ID プロバイダーのディスカバリーエンドポイントを検証して、.env を書き込みます。Authentik、Keycloak、Auth0、Okta、Azure AD 向けにプロバイダー固有の URL のヒントが表示されます。どちらのスクリプトも、CI 向けに --dry-run と --non-interactive をサポートしています。

最初に登録したユーザーが管理者になります。ロールベースのアクセス制御により、REST API、MCP HTTP、ウェブ UI 全体の権限が適用されます。マシンクライアント向けのパーソナルアクセストークンや、OIDC 同期に対応したグループも利用できます。

すべての認証モード、OIDC プロバイダーの設定、MCP クライアントの例を含む詳細なリファレンスは、認証ガイド をご覧ください。

セキュリティに関する注意: Cairn の認証システムは機能しており、本番環境でのテストも済んでいますが、第三者による監査は受けていません。ネットワークに公開する環境では、TLS 終端とネットワークレベルのアクセス制御を追加してください。

リモート MCP アクセス(Claude.ai、モバイル)

Cairn を Claude.ai、Claude モバイルアプリ、または OAuth2 対応の MCP クライアントに接続します。Cairn は OAuth2 認可サーバーとして動作し、ユーザー認証を既存の OIDC ID プロバイダーに委任します。

**前提条件:**認証を有効にする(CAIRN_AUTH_ENABLED=true)、OIDC を設定する(CAIRN_OIDC_ENABLED=true)、公開 URL を設定する(CAIRN_PUBLIC_URL)。

有効にする:

CAIRN_MCP_OAUTH_ENABLED=true

Claude.ai から接続する:

  1. Claude.ai の[設定]>[インテグレーション]>[カスタム MCP を追加]に移動します
  2. Cairn の URL を入力します:https://your-cairn-domain.com/mcp
  3. Claude.ai が OAuth2 エンドポイントを自動的に検出します
  4. ID プロバイダーにリダイレクトされ、ログインします
  5. ログイン後、Claude.ai は Cairn の MCP ツールにフルアクセスできます

OAuth2 フローでは、Dynamic Client Registration(RFC 7591)を使用した Authorization Code + PKCE を使用します。ID プロバイダーが 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(空)cairn の認証が有効な場合の API キー
CAIRN_CODE_PROJECTS(空)カンマ区切りの 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_chain2 つの関数間の呼び出し経路を追跡する
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を使用してテストしました。5つのカテゴリーにわたる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-dim)、エピソード取り込み(生のターン+2パスの事実抽出)、グラフ優先の検索を行う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は現在も活発に開発されています。これは本番環境で毎日使用されている実システムであり、エージェントのメモリに実際に有効なものを学ぶにつれて進化しています。スキーマの変更はマイグレーションで処理されます。問題が発生した場合は、issueを作成してください。

ライセンス

GNU General Public License v3.0

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。