📕

🚀 究極のデバッグの果てに:Neo4j MCPサーバーを動かし、AIエージェントに知識グラフを統合する

に公開

はじめに

前回、私たちはWindows環境におけるMCPサーバーの「起動不能」という大きな壁に挑み、実行ファイルのフルパス指定という力技でNeo4jサーバーの起動に成功しました。
本記事は、その苦労が報われる瞬間、すなわち**「Claude Desktopが知識グラフデータベース(Neo4j)を自律的に操作し、高度な質問に答える」**という実践テストの記録です。
MCPによる機能拡張がいかに強力であるかを、具体的なテスト例と成功ログを通じて解説します。

1. 成功の証:3つの機能が連携する環境

まず、私たちが構築した環境は、以下の3つのサーバーがJSON設定で連携しています。
Neo4jサーバーの起動コマンドは、環境依存を避けるためにフルパスで固定されています。

サーバー名 機能 役割 備考
filesystem ファイル操作 ローカルファイルの作成・編集 Node.jsベース
fetch Webページ取得 URLの内容を読み込み要約 Pythonベース
movies-neo4j 知識グラフ検索 Neo4jデータベースへCypherクエリ実行 Pythonベース(フルパスで起動)

DXTインストールとフルパス指定の教訓(備忘録の要約)

今回の経験から得られた教訓は、環境構築の安定性です。
DXTファイルのインストール: .dxtファイルはダブルクリックで動作せず、Claude Desktop > 設定 > 拡張機能 > 詳細設定からClaude Extensionフォルダにファイルを移動した後にインストールする必要がありました。
起動コマンドの安定化: uvxやpython -mといった環境依存のコマンドを避け、"command": "C:\Users\...\mcp-neo4j-cypher.exe"のように実行ファイルのフルパスを直接指定することが、最も安定した起動を実現しました。

実行してみるが、エラー発生。

さっそくプロンプトを入力してみるも、データベースに接続できないとエラーが発生しました。
MCPサーバ”mcp-neo4j-cypher”のclaude_desktop_config.jsonファイルの環境変数が間違っていたのが原因のようです。
変更前

"env": {
        "NEO4J_URI": "bolt://localhost:7687",
        "NEO4J_USERNAME": "neo4j",
        "NEO4J_PASSWORD": "recommendations",
        "NEO4J_DATABASE": "neo4j"       

変更後

"env": {
        "NEO4J_URI": "bolt://localhost:7473",
        "NEO4J_USERNAME": "recommendations",
        "NEO4J_PASSWORD": "recommendations",
        "NEO4J_DATABASE": "recommendations"

ポート番号が違っていたこと、username, password, database, すべて” recommendations”に変更して再度実行すると以下のようにMCPサーバが動きました。


2. 実践テスト:AIエージェントに知識グラフを渡す

Neo4jサーバーがRunning状態になったことで、AIエージェントは知識グラフにアクセスする新しい「ツール」を獲得しました。
テストは、まず既存のfetchサーバーを使ってNeo4jのチュートリアル情報を取得するところから始めました。

2-1. Fetchサーバーによる予備調査


MCPの強みの一つは、複数のツールを連携できることです。
まず、fetchツールを利用してNeo4jのチュートリアルURLを読み込み、どのような質問が有効かをClaudeに調べさせました。
Claudeへの指示: 「指定したURLを読み込んで、MCPサーバmcp-neo4j-cypherのチュートリアルを実行します。まず最初にMCPサーバへの指示の具体例を示してください。」
結果: ClaudeはURLの内容を要約し、以下の具体的な質問例を生成しました。

💡 Claudeが提示したNeo4jへの指示例



基本的な検索クエリ: 映画データベースでクエンティン・タランティーノが監督した映画を調べてください。
関連情報の検索: キルビルの俳優たちが出演した他の人気映画は何ですか?
スキーマ情報の取得と詳細調査: Tuskについて詳しく教えてください。
レコメンデーション: GattacaやKill Billの俳優から得られた映画リストの中で、最も高評価の映画を詳細情報付きで教えてください。

2-2. 自律動作の検証と成功ログの解析

これらの高度な質問を実行することで、AIエージェントが自律的にツールを選択し、正しいパラメータ(Cypherクエリ)を生成できるかを検証します。
最も基本的な質問である「クエンティン・タランティーノが監督した映画を調べてください」をClaudeに投げかけた際の成功ログは以下の通りです。

1. Claudeの推論とツール呼び出し(tools/call)

Claudeは質問の意図を理解し、movies-neo4jサーバーのツール(おそらくcypher_query)を呼び出すことを決定します。
その際に、質問内容をNeo4jが理解できるCypher言語に変換します。

CypherMATCH (p:Person {name: 'Quentin Tarantino'})-[:DIRECTED]->(m:Movie)
RETURN m.title, m.year, m.imdbRating
ORDER BY m.year

2. サーバーからの正常なレスポンス

Neo4jサーバーはこのCypherクエリを受け取り、データベースに実行を依頼します。
結果はJSON-RPC形式でClaude Desktopに返却されます。

[
  {"m.title": "Reservoir Dogs", "m.year": 1992, "m.imdbRating": 8.4},
  {"m.title": "Pulp Fiction", "m.year": 1994, "m.imdbRating": 8.9},
  {"m.title": "Four Rooms", "m.year": 1995, "m.imdbRating": 6.7},
  // ... 他の映画が続く
]

クエンティン・タランティーノが監督した映画を時系列順に見つけました:

  1. Reservoir Dogs (1992) - IMDb評価: 8.4
  2. Pulp Fiction (1994) - IMDb評価: 8.9
  3. Four Rooms (1995) - IMDb評価: 6.7
  4. Jackie Brown (1997) - IMDb評価: 7.5
  5. Kill Bill: Vol. 1 (2003) - IMDb評価: 8.1
  6. Kill Bill: Vol. 2 (2004) - IMDb評価: 8.0
  7. Sin City (2005) - IMDb評価: 8.1
  8. Grindhouse (2007) - IMDb評価: 7.6
  9. Death Proof (2007) - IMDb評価: 7.1
  10. Inglourious Basterds (2009) - IMDb評価: 8.3
  11. Django Unchained (2012) - IMDb評価: 8.5
  12. The Hateful Eight (2015) - IMDb評価: 8.0
    最も高い評価を受けているのはPulp Fiction(1994年、8.9)で、次いでDjango Unchained(2012年、8.5)となっています。


このJSON結果をClaudeがコンテキストとして受け取り、人間が理解しやすい自然言語で回答を生成することで、一連のプロセスが完了しました。


3. 結論:MCPはAIエージェントの「脳」を拡張する

今回の検証を通じて、MCPサーバーの自作・統合が、単なるAPI連携に留まらない、AIエージェントの推論能力の拡張であることを実感しました。
環境構築という障壁は高かったものの、フルパス指定という解決策を見つけたことで、私たちは以下の能力を手に入れました。
高度な情報検索: データベース内の複雑な関係性(知識グラフ)に基づいた検索が可能。
自律的な言語変換: AIが自然言語の質問を、データベースのクエリ言語(Cypher)に自ら変換し実行する。
この成功体験は、MCPの可能性を示す大きな一歩です。今後もこの知識グラフを使いこなし、より複雑なタスクに挑戦していきたいと思います。

参考:claude_desktop_config.json 設定例

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "c:\\Users\\Public\\Documents",
        "c:\\Users\\Public\\Downloads"
      ]
    },
    "fetch": {
      "command": "python",
      "args": ["-m", "mcp_server_fetch"],
      "env": {
        "PYTHONIOENCODING": "utf-8"
      }
    },
      "movies-neo4j": {
      "command": "C:\\Users\\Koga Hiroaki\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\Scripts\\mcp-neo4j-cypher.exe",
       "args": [ "--db-url", "neo4j+s://demo.neo4jlabs.com",
        "--user", "recommendations",
        "--password", "recommendations"  ],
      "env": {
        "NEO4J_URI": "bolt://localhost:7473",
        "NEO4J_USERNAME": "recommendations",
        "NEO4J_PASSWORD": "recommendations",
        "NEO4J_DATABASE": "recommendations"                          
    }
  }
 }
}

参考URL

https://neo4j.com/blog/developer/claude-converses-neo4j-via-mcp/

Discussion