/ ディレクトリ / プレイグラウンド / Neo4j
● 公式 neo4j-contrib 🔑 自分のキーが必要

Neo4j

作者 neo4j-contrib · neo4j-contrib/mcp-neo4j

Claude経由でNeo4jグラフにCypherでクエリ・更新 — スキーマイントロスペクションと読み書きCypherをガードレール付きで実行できます。

Neo4j LabsのMCPコレクションは、Cypher実行(mcp-neo4j-cypher)、スキーマ管理、Aura管理をカバーしています。デフォルトのCypherサーバーは、任意のBoltエンドポイントに対して読み取り・書き込みCypherを公開します。本番環境の安全な探索には、読み取り専用のNeo4jユーザーと組み合わせてご利用ください。

なぜ使うのか

主な機能

ライブデモ

実際の動作

neo4j.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "neo4j": {
      "command": "uvx",
      "args": [
        "mcp-neo4j-cypher"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "neo4j": {
      "command": "uvx",
      "args": [
        "mcp-neo4j-cypher"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "neo4j": {
      "command": "uvx",
      "args": [
        "mcp-neo4j-cypher"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "neo4j": {
      "command": "uvx",
      "args": [
        "mcp-neo4j-cypher"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "neo4j",
      "command": "uvx",
      "args": [
        "mcp-neo4j-cypher"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "neo4j": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-neo4j-cypher"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add neo4j -- uvx mcp-neo4j-cypher

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Neo4j

未知のグラフスキーマを5分で探索する

👤 Neo4j DBを引き継いだエンジニア・アナリスト ⏱ ~15 min beginner

使うタイミング: ドキュメントなしのグラフDBを渡された場合。有用なクエリを書く前に、まずメンタルモデルを構築する必要があるとき。

前提条件
  • Neo4jのBolt URL + ユーザー名/パスワードNEO4J_URI=bolt://host:7687, NEO4J_USERNAME, NEO4J_PASSWORD
  • 探索には読み取り専用ユーザーを推奨CREATE USER claude SET PASSWORD '...' SET ROLES reader
フロー
  1. スキーマの概要を取得
    Call get_neo4j_schema. Summarize node labels, relationship types, and the most common (label)-[rel]->(label) patterns.✓ コピーしました
    → サンプルトリプル付きのスキーマサマリー
  2. 代表的なノードをサンプリング
    For the 3 most common labels, MATCH (n:Label) RETURN n LIMIT 3 each. Describe what each label seems to represent.✓ コピーしました
    → ラベルの意味的な説明
  3. 想定されるERモデルを描く
    Based on schema + samples, describe in prose the 'entity' story of this graph. What's the main object, what connects to it, what's peripheral?✓ コピーしました
    → 明確なドメインモデルの説明

結果: 元の作成者に確認できる1ページのドメインモデル。

注意点
  • 小さなグラフのサンプリングは誤ったパターンを示す可能性があるMATCH (n)-[r]->() RETURN type(r), count(*)も実行して、どのリレーションシップが支配的かを確認する
組み合わせ: filesystem

不正リングを検出するグラフクエリを作成する

👤 リスク・不正分析担当者 ⏱ ~40 min advanced

使うタイミング: アカウント間でデバイスや住所を共有する不正リングが疑われる場合。

前提条件
  • User、Device、Address、Paymentノードと:USED、:LIVES_AT、:PAIDリレーションシップを持つグラフ — 典型的な不正検出グラフの構造
フロー
  1. 共有デバイスを検出
    Find devices used by 3+ different users in the last 30 days. Return device_id + list of user_ids + last-used ts per pair.✓ コピーしました
    → リング候補
  2. 連結成分のサイズでスコアリング
    Using GDS or pure Cypher, compute connected components over User-(:USED)-Device-(:USED)-User. Return top 10 components by size.✓ コピーしました
    → 不審なクラスター
  3. アクション可能なリストを作成
    For each top cluster, list distinct users, total transaction volume, and earliest/latest activity. Flag clusters > $10k as high-priority review.✓ コピーしました
    → アナリストのレビューキューエントリ

結果: 正確なCypherが保存された、優先度付きの不正レビューキュー。

注意点
  • ナイーブなトラバーサルはハブノード(1万ユーザーが使う公共WiFiデバイスなど)で爆発する — 深さを制限し、トラバーサル前に次数の高いハブノードをフィルタリングする
組み合わせ: postgres

コンテンツレコメンデーションクエリのプロトタイプを作成する

👤 「この商品を見た人はこちらも」機能を構築するプロダクトエンジニア ⏱ ~30 min intermediate

使うタイミング: User-LIKED->Itemのデータがあり、類似ユーザーからアイテムをレコメンドしたい場合。

フロー
  1. ユーザーを選んで近傍を検索
    For user <id>, find 20 users who share the most LIKED items. Return user_id and overlap count.✓ コピーしました
    → 類似ユーザーのランキング
  2. それらのユーザーが「いいね」したアイテムをレコメンド
    For those top 20 similar users, list items they liked that <id> has NOT liked. Rank by number of similar users who liked it.✓ コピーしました
    → Top-Nレコメンデーション
  3. 再利用可能なクエリに変換
    Parameterize as a callable Cypher with $user_id; add indexes needed for speed.✓ コピーしました
    → 本番対応クエリ + CREATE INDEXステートメント

結果: オンライン配信可能な速度の、動作する協調フィルタリングクエリ。

注意点
  • :User(id)のインデックスを忘れると起動クエリがリニアスキャンになるCREATE INDEX FOR (u:User) ON (u.id)を実行し、EXPLAINで使用されていることを確認する

ステージングテーブルからNeo4jにリレーショナルデータをロードする

👤 SQLからグラフへ移行するデータエンジニア ⏱ ~40 min advanced

使うタイミング: Postgresにユーザーとフォロー関係があり、グラフ表現が必要な場合。

前提条件
  • 書き込み権限のあるNeo4jユーザー — 対象データベースにCREATE権限を持つロール
フロー
  1. ノード/エッジのマッピングを計画
    Given tables users(id, name) and follows(from_id, to_id), propose the Neo4j model. Label(s)? Relationship direction?✓ コピーしました
    → (:User {id,name})-[:FOLLOWS]->(:User)
  2. 最初に制約を作成
    Generate CREATE CONSTRAINT FOR (u:User) REQUIRE u.id IS UNIQUE. Run it.✓ コピーしました
    → 制約が作成された
  3. MERGEで一括ロード
    From the provided user rows, run UNWIND $rows AS r MERGE (:User {id:r.id}) ... then follows with MERGE (a)-[:FOLLOWS]->(b). Batch 10k at a time.✓ コピーしました
    → すべての行が冪等にロードされた

結果: リレーショナルデータをグラフ形式にロードする、再実行可能なETL。

注意点
  • MERGEの代わりにCREATEを使うと再実行時にノードが重複する — アップサートには常にMERGEを使用し、高速な一括MERGEのためにユニーク制約を事前に設定する
組み合わせ: postgres

ナレッジグラフに対して自然言語で質問に回答する

👤 ドメインKGを持つ社内チーム ⏱ ~25 min intermediate

使うタイミング: 小規模なオントロジー(製品、機能、顧客)を構築済みで、Cypherを学ばなくても「機能Xを使っている顧客は?」とClaudeに質問したい場合。

フロー
  1. Claudeにスキーマを理解させる
    Here's the schema [paste get_neo4j_schema output]. From now on, translate my questions to Cypher before running them.✓ コピーしました
    → Claudeがスキーマの理解を返す
  2. 質問してCypher+回答を得る
    Which customers use feature 'export-csv' in the last quarter?✓ コピーしました
    → Cypherの表示+結果テーブル
  3. Cypherが間違っている場合に修正
    That Cypher missed the :USED relationship to Session. Fix it to go through sessions.✓ コピーしました
    → 修正されたCypherの再実行

結果: 非技術メンバー向けの軽量なNL-to-Cypherインターフェース。

注意点
  • Claudeが存在しないラベルを生成してしまう — 「提供されたスキーマのラベル/リレーションシップのみを使用し、それ以外は不明と回答すること」と指示する

組み合わせ

他のMCPと組み合わせて10倍の力を

neo4j + postgres

リレーショナルデータをグラフ表現に同期する

Postgresからユーザーとフォロー関係を取得し、Neo4jに(:User)-[:FOLLOWS]->(:User)としてMERGEする。✓ コピーしました
neo4j + qdrant

グラフ強化RAG:Qdrantでセマンティック検索、Neo4jで正確なリレーションシップを取得

Qdrantで質問に類似したドキュメントを検索し、マッチしたエンティティからNeo4jをトラバースして回答用の構造化ファクトを取得する。✓ コピーしました
neo4j + filesystem

Cypherで生成したレポートをCSV/Markdownとしてエクスポート

不正リングのCypherを実行し、上位50クラスターを/reports/fraud-<date>.csvとしてエクスポートする。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
get_neo4j_schema 新しいセッションでは常に最初に呼び出す free
read_neo4j_cypher query: str, params?: object MATCH / RETURNなどの読み取り専用クエリ free
write_neo4j_cypher query: str, params?: object CREATE/MERGE/SET/DELETEなどの変更操作 free

コストと制限

運用コスト

APIクォータ
Neo4jインスタンスの制限に依存。Aura Free: 20万ノード/40万リレーションシップ。
呼び出しあたりのトークン
スキーマ: 約500トークン。クエリ結果: 行数とプロパティに依存。
金額
Community / セルフホストは無料。Aura Freeティアあり。Aura有料プランは月額約$65から。
ヒント
大規模グラフでは必ず先にEXPLAINを実行。起動ラベルにインデックスがないと5msのクエリが5分のスキャンになります。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: reader role for read-only exploration
認証情報の保管: NEO4J_URINEO4J_USERNAMENEO4J_PASSWORDを環境変数に設定
データ送信先: Neo4j(セルフホストまたはAura)への直接Bolt接続
絶対に付与しない: admin role PUBLIC write access

トラブルシューティング

よくあるエラーと対処法

ServiceUnavailable: Connection refused

Neo4jが起動していないか、Boltポート(デフォルト7687)が間違っています。cypher-shell -a bolt://host:7687で確認してください。

確認: nc -zv host 7687
Neo.ClientError.Security.Unauthorized

ユーザー名またはパスワードが間違っています。管理者セッションからCALL dbms.security.changePassword('new')でリセットしてください。

Neo.ClientError.Statement.SyntaxError

ClaudeのCypherにタイプミスがあります — 正確なエラーメッセージを貼り付けて、修正クエリを依頼してください。

Write operation not allowed in read-only mode

readerロールで接続しています。WRITE権限を持つユーザーに切り替えるか、別のライター接続を使用してください。

代替案

Neo4j 他との比較

代替案代わりに使う場面トレードオフ
Memgraph MCPストリーミンググラフ分析が必要な場合。MemgraphはCypher互換ですエコシステムが小さく、ホスティングオプションが少ない
ArangoDB MCPマルチモデル(グラフ+ドキュメント+KV)が必要な場合CypherではなくAQL。学習コストあり
Postgres + Apache AGE主にリレーショナルで、一部グラフ機能が必要な場合大規模トラバーサルではネイティブNeo4jよりグラフ性能が劣る

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る