MCP DuckDB Knowledge Graph Memory Server について
公式の Knowledge Graph Memory Server をフォークしたプロジェクトで、JSON ファイルによるストアを DuckDB に置き換え、Fuse.js によるあいまい検索を追加しています。より大量のエンティティと関係を永続化し検索したい場合に適しています。
主な機能
- 01DuckDB によるナレッジグラフの保存
- 02エンティティ・観察・関係のリレーショナル構造
- 03SQL クエリと Fuse.js によるあいまい検索
- 04トランザクションとインデックスのサポート
- 05npx または Docker での実行
活用シーン
- 01Claude Desktop に永続的なメモリを持たせる
- 02大規模なエンティティと関係データの保存と検索
- 03構造化クエリを必要とするナレッジグラフのメモリ管理
MCP 対応
本プロジェクトは MCP サーバーであり、ナレッジグラフによるメモリ機能を MCP クライアントに提供します。データは DuckDB のデータベースファイルに保存されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP DuckDB ナレッジグラフメモリーサーバー
公式ナレッジグラフメモリーサーバーをフォークしたバージョンです。
インストール
Smithery 経由でインストールする
Smithery を使って、Claude Desktop に DuckDB Knowledge Graph Memory Server を自動でインストールするには:
npx -y @smithery/cli install @IzumiSy/mcp-duckdb-memory-server --client claude
手動インストール
または、@IzumiSy/mcp-duckdb-memory-server を claude_desktop_config.json に手動で追加してください(MEMORY_FILE_PATH は省略可能です)。
{
"mcpServers": {
"graph-memory": {
"command": "npx",
"args": [
"-y",
"@izumisy/mcp-duckdb-memory-server"
],
"env": {
"MEMORY_FILE_PATH": "/path/to/your/memory.data"
}
}
}
}
このパスに保存されるデータは DuckDB データベースファイルです。
Docker
ビルド
docker build -t mcp-duckdb-graph-memory .
実行
docker run -dit mcp-duckdb-graph-memory
使い方
以下の指示の例を使用してください。
Follow these steps for each interaction:
1. User Identification:
- You should assume that you are interacting with default_user
- If you have not identified default_user, proactively try to do so.
2. Memory Retrieval:
- Always begin your chat by saying only "Remembering..." and search relevant information from your knowledge graph
- Create a search query from user words, and search things from "memory". If nothing matches, try to break down words in the query at first ("A B" to "A" and "B" for example).
- Always refer to your knowledge graph as your "memory"
3. Memory
- While conversing with the user, be attentive to any new information that falls into these categories:
a) Basic Identity (age, gender, location, job title, education level, etc.)
b) Behaviors (interests, habits, etc.)
c) Preferences (communication style, preferred language, etc.)
d) Goals (goals, targets, aspirations, etc.)
e) Relationships (personal and professional relationships up to 3 degrees of separation)
4. Memory Update:
- If any new information was gathered during the interaction, update your memory as follows:
a) Create entities for recurring organizations, people, and significant events
b) Connect them to the current entities using relations
b) Store facts about them as observations
開発の動機
このプロジェクトは、バックエンドを DuckDB に置き換えることで、元の MCP Knowledge Graph Memory Server を強化します。
DuckDB を選ぶ理由
元の MCP Knowledge Graph Memory Server は、データストアとして JSON ファイルを使用し、メモリー内で検索を実行していました。この方法は小規模なデータセットではうまく機能しますが、いくつかの課題があります。
- パフォーマンス:データセットが大きくなるにつれて、メモリー内検索のパフォーマンスが低下します
- スケーラビリティ:大量のエンティティや関係を扱う際、メモリー使用量が大幅に増加します
- クエリーの柔軟性:複雑なクエリーや条件付き検索の実装が困難です
- データの整合性:トランザクションや CRUD 操作の原子性を確保するのが困難です
これらの課題に対応するため、DuckDB を採用しました。
- 高速なクエリー処理:DuckDB は分析クエリーに最適化されており、大規模なデータセットでも優れたパフォーマンスを発揮します
- SQL インターフェース:標準 SQL を使って複雑なクエリーを簡単に実行できます
- トランザクションのサポート:データの整合性を維持するため、トランザクション処理をサポートします
- インデックス機能:検索パフォーマンスを向上させるインデックスを作成できます
- 組み込みデータベース:外部データベースサーバーを必要とせず、アプリケーション内で動作します
実装の詳細
この実装ではバックエンドのストレージシステムとして DuckDB を使用し、次の 2 つの主要な側面に重点を置いています。
データベース構造
以下に示すように、ナレッジグラフはリレーショナルデータベース構造で保存されます。
erDiagram
ENTITIES {
string name PK
string entityType
}
OBSERVATIONS {
string entityName FK
string content
}
RELATIONS {
string from_entity FK
string to_entity FK
string relationType
}
ENTITIES ||--o{ OBSERVATIONS : "has"
ENTITIES ||--o{ RELATIONS : "from"
ENTITIES ||--o{ RELATIONS : "to"
このスキーマ設計により、エンティティ、観察、関係の間の関連性を維持しながら、ナレッジグラフの構成要素を効率的に保存および取得できます。
ファジー検索の実装
この実装では、柔軟なエンティティ検索を実現するために、SQL クエリーと Fuse.js を組み合わせています。
- DuckDB の SQL クエリーで、データベースから基本データを取得します
- Fuse.js は取得したデータに対してファジーマッチング機能を提供します
- このハイブリッド方式により、構造化クエリーと柔軟なテキストマッチングの両方が可能になります
- 検索結果には完全一致と部分一致の両方が含まれ、関連性の高い順に表示されます
開発
セットアップ
pnpm install
テスト
pnpm test
ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細については LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。