Neo4j MCP サーバー
これは、知識グラフ管理のためのバックエンドストレージとしてNeo4jを使用するメモリ制御プロトコル(MCP)サーバー実装です。グラフデータベース形式で知識を保存および取得するためのstdioベースのインターフェースを提供します。
前提条件
Python 3.8以上
Neo4j データベース (ローカルまたはリモート)
Poetry (Python パッケージ マネージャー)
Docker と Docker Compose (Neo4j を実行するため)
Go Task(オプション、タスク自動化用)
Related MCP server: MCP Neo4j Knowledge Graph Memory Server
インストール
リポジトリをクローンします。
git clone <repository-url>
cd neo4j_mcp_serverまだインストールしていない場合は、Poetry をインストールしてください。
curl -sSL https://install.python-poetry.org | python3 -依存関係をインストールします:
poetry install構成
クロードデスクトップ構成
Claude Desktop を実行している Ubuntu ユーザーの場合は、次の Claude デスクトップ構成ファイルに MCP サーバーを追加して構成できます。
~/.config/Claude/claude_desktop_config.json設定する前に、スタンドアロン実行可能ファイルをビルドする必要があります。
task buildこれによりdist/neo4j_mcp_serverにバイナリが作成されます。設定ファイルのパスを、ビルドされた実行ファイルを指すように更新してください。
設定例はexample_mcp_config.jsonに記載されています。このファイルをコピーして変更することができます。
cp example_mcp_config.json ~/.config/Claude/claude_desktop_config.json次に、構成ファイル内のcommandパスを編集して、ビルドした実行可能ファイルを指すようにします。
{
"mcpServers": [
{
"name": "neo4j-knowledge-graph",
"command": ["/path/to/your/dist/neo4j_mcp_server"],
...
}
]
}構成には以下が含まれます。
サーバー名と説明
サーバーを起動するコマンド(ビルドされた実行ファイルへのパス)
利用可能なツールとそのパラメータ
必須フィールドとデータ型
サーバーの実行
タスクの使用(推奨)
Go Task がインストールされている場合は、提供されている Taskfile を使用してサーバーを管理できます。
# Show available tasks
task
# Start everything (Docker + Server)
task run
# Start development environment (Docker + Server + Test)
task dev
# Stop all services
task downDocker Composeを直接使用する
Neo4j コンテナを起動します。
docker-compose up -dNeo4j の準備ができるまで待ちます (コンテナは
docker psで「正常」と表示されます)
MCPサーバーを直接実行する
次のコマンドでサーバーを起動します。
poetry run python mcp_neo4j_knowledge_graph/mcp/server.pyサーバーは stdio モードで起動し、MCP プロトコル メッセージを受け入れる準備が整います。
利用可能なツール
1. エンティティを作成する
ナレッジグラフに新しいエンティティを作成します。各エンティティにはタイプとプロパティが必要です。IDは、明示的に指定されていない場合は、nameプロパティから自動的に設定されます。
パラメータ:
entities: エンティティ オブジェクトのリスト。各オブジェクトには次のものが含まれます。type: 文字列 - エンティティの種類(例:Person、Organization)properties: オブジェクト - エンティティプロパティのキーと値のペア(「id」または「name」のいずれかを含める必要があります)
入力例:
{
"entities": [{
"type": "Person",
"properties": {
"name": "John Doe",
"occupation": "Developer",
"age": 30
}
}]
}2. 関係を構築する
ナレッジグラフ内の既存のエンティティ間の関係を作成します。関係を作成する前に、参照されるすべてのエンティティが存在している必要があります。
パラメータ:
relations: リレーション オブジェクトのリスト。各オブジェクトには次のものが含まれます。type: 文字列 - 関係の種類(例:KNOWS、WORKS_FOR)from: 文字列 - ソースエンティティのIDto: 文字列 - 対象エンティティのID
入力例:
{
"relations": [{
"type": "KNOWS",
"from": "john_doe",
"to": "jane_smith"
}]
}3. エンティティを検索する
強力なテキストマッチングとフィルタリング機能を用いて、ナレッジグラフ内のエンティティを検索します。テキストによる検索、タイプ別のエンティティ一覧、特定のプロパティを持つエンティティの検索、あるいはこれらのフィルターの任意の組み合わせが可能です。
パラメータ:
search_term: 文字列(オプション) - エンティティプロパティで検索するテキスト。指定されていない場合は、他のフィルターに基づいてエンティティが返されます。entity_type: 文字列(オプション) - エンティティの種類(例:Person、Organization)で結果をフィルタリングします。単独で指定した場合は、その種類のすべてのエンティティが返されます。properties: List[String] (オプション) - フィルタリングするプロパティ名のリスト:search_term を使用: これらのプロパティで用語を検索します
search_term がない場合: これらのプロパティのいずれかが定義されているエンティティを返します
include_relationships: ブール値(オプション、デフォルト: false) - 接続されたエンティティとリレーションシップを含めるかどうかfuzzy_match: ブール値(オプション、デフォルト: true) - search_term が指定されている場合に大文字と小文字を区別しない部分一致を使用するかどうか
入力例:
// Search by text with type filter
{
"search_term": "John",
"entity_type": "Person",
"properties": ["name", "occupation"],
"include_relationships": true
}
// List all entities of a type
{
"entity_type": "Person"
}
// Find entities with specific properties
{
"properties": ["email", "phone"],
"entity_type": "Contact"
}
// Combine filters
{
"entity_type": "Person",
"properties": ["email"],
"search_term": "example.com",
"fuzzy_match": true
}
// Return all entities (no filters)
{}戻り値:
{
"results": [
{
"id": "john_doe",
"type": ["Entity", "Person"],
"properties": {
"name": "John Doe",
"email": "john@example.com"
},
"relationships": [ // Only included if include_relationships is true
{
"type": "WORKS_AT",
"direction": "outgoing",
"node": {
"id": "tech_corp",
"type": "Company",
"properties": {
"name": "Tech Corp"
}
}
}
]
}
]
}注記:
フィルタが指定されていない場合は、すべてのエンティティを返します
エンティティ タイプのフィルタリングは完全一致(あいまい一致ではない)です
プロパティの存在チェックは
IS NOT NULLで行われますテキスト検索は、fuzzy_match が true の場合、大文字と小文字を区別しない部分一致をサポートします。
空の結果はエラーではなく、空の配列として返されます。
パフォーマンスに関する考慮事項:
種類によるフィルタリングはテキスト検索よりも効率的です
プロパティの存在チェックが最適化されています
すべてのプロパティを検索する代わりに、特定のプロパティを使用することを検討してください
将来のバージョンでは、大きな結果セットがページ分けされる可能性があります。
4. エンティティの更新
ナレッジグラフ内の既存のエンティティを更新します。プロパティとラベルの追加/削除をサポートします。
パラメータ:
updates: 更新オブジェクトのリスト。各オブジェクトには次のものが含まれます。id: 文字列(必須) - 更新するエンティティのIDproperties: オブジェクト(オプション) - 更新または追加するプロパティremove_properties: List[String] (オプション) - 削除するプロパティ名add_labels: List[String] (オプション) - エンティティに追加するラベルremove_labels: List[String] (オプション) - エンティティから削除するラベル
入力例:
{
"updates": [{
"id": "john_doe",
"properties": {
"occupation": "Senior Developer",
"salary": 100000
},
"remove_properties": ["temporary_note"],
"add_labels": ["Verified"],
"remove_labels": ["Pending"]
}]
}5. エンティティを削除する
オプションで関係のカスケード削除を使用して、ナレッジ グラフからエンティティを削除します。
パラメータ:
entity_ids: List[String] (必須) - 削除するエンティティIDのリストcascade: ブール値(オプション、デフォルト: false) - 接続された関係を削除するかどうかdry_run: ブール値 (オプション、デフォルト: false) - 変更を加えずに削除の影響をプレビューします
入力例:
{
"entity_ids": ["john_doe", "jane_smith"],
"cascade": true,
"dry_run": true
}戻り値:
success: ブール値 - 操作が成功したかどうかdeleted_entities: 削除されたエンティティのリストdeleted_relationships: 削除された関係のリストerrors: エラーメッセージのリスト(ある場合)impacted_entities: 影響を受けるエンティティのリスト(dry_run のみ)impacted_relationships: 影響を受ける関係のリスト(dry_run のみ)
6. スキーマのイントロスペクト
ノード ラベル、関係タイプ、それらのプロパティなど、Neo4j データベース スキーマに関する包括的な情報を取得します。
パラメータ: 不要
戻り値:
schema: 次のものを含むオブジェクト:node_labels: データベース内のすべてのノードラベルのリストrelationship_types: すべての関係タイプのリストnode_properties: ラベルとプロパティ名のリストのマップrelationship_properties: 関係タイプとプロパティ名のリストのマップ
入力例:
{}テスト
テストスクリプト
このプロジェクトには、システムのさまざまな側面に対するいくつかのテスト スクリプトが含まれています。
mcp_neo4j_knowledge_graph/test_mcp_client.py- MCP クライアント機能をテストしますサーバーの起動を確認する
テストツール一覧
スキーマイントロスペクションをテストする
エンティティ作成テスト GXP18
mcp_neo4j_knowledge_graph/test_mcp_config.py- MCP 構成をテストします構成ファイルの読み込みを検証します
公式MCP SDKを使用してサーバー接続をテストします
必要なツールがすべて利用可能であることを確認します GXP19
mcp_neo4j_knowledge_graph/test_neo4j_connection.py- Neo4j データベース接続をテストしますデータベースの接続性を検証する
基本的なクエリ機能をテストします
環境設定をチェックする GXP20
テストの実行
テストはいくつかの方法で実行できます。
すべてのテストをまとめて実行します。
task test # Runs all tests including pytest and integration tests個別のテスト タイプを実行します。
task test-client # Run MCP client test task test-config # Run MCP config test task test-db # Run Neo4j connection test task test-integration # Run integration testspytest で直接テストを実行します。
poetry run pytest # Run all pytest-compatible tests
発達
タスクの使用
このプロジェクトには、いくつかの開発タスクが含まれます。
# Format code
task format
# Run linter
task lint
# Run tests
task test
# Start development environment
task dev直接実行
このプロジェクトでは、Poetry とともに自動的にインストールされるいくつかの開発ツールを使用します。
コードフォーマット用の
blackインポートソート用の
isort糸くず除去用
flake8テスト用の
pytest
Poetry を使用してこれらのツールを実行できます。
# Format code
poetry run black .
# Sort imports
poetry run isort .
# Run linter
poetry run flake8
# Run tests
poetry run pytestエラー処理
サーバーには、次の包括的なエラー処理が含まれています。
データベース接続の問題
無効なクエリ
欠落ノード
無効なリクエスト形式
スキーマ検証エラー
関係構築の失敗
エンティティ更新の競合
すべてのエラーは、MCP プロトコル形式の適切なエラー メッセージとともに返されます。
Dockerの設定
Neo4j コンテナは次の設定で構成されます。
ポート: 7474 (HTTP) および 7687 (Bolt)
デフォルトの資格情報: neo4j/password
APOCプラグインが有効
ファイルのインポート/エクスポートが有効
ヘルスチェックが設定されました
これらの設定はdocker-compose.ymlファイルで変更できます。
タスクコマンドリファレンス
task- 利用可能なタスクを表示task run- DockerとMCPサーバーを起動するtask dev- 開発環境(Docker + サーバー + テスト)を起動するtask docker- Neo4j データベースを起動するtask server- MCPサーバーを実行するtask test- すべてのテストを実行するtask test-client- MCP クライアントテストを実行するtask test-config- MCP 構成テストを実行するtask test-db- データベーステストを実行するtask test-integration- 統合テストを実行するtask down- すべてのDockerサービスを停止しますtask format- blackとisortを使ったコードのフォーマットtask lint- flake8 linter を実行するtask help- すべてのタスクの詳細なヘルプを表示します