Skip to main content
Glama
neo4j-labs

io.github.neo4j-labs/neo4j-mcp-canary

Official
by neo4j-labs

Neo4j MCP Canary — カナリアが最初に飛び込むので、私たちは何が来るのかを知ることができる

Neo4j MCP Canary は、公式サーバーへの採用が検討される前に、新たに登場する機能を試したいお客様向けの、迅速に更新される実験的リリースです。

Neo4j 用の公式 Model Context Protocol (MCP) サーバーのソースをベースに構築されたこのバリアントは、実験を通じて潜在的な新機能を探求するためのものです。

ラボプロジェクトであるため、以下の点に注意してください:

  • サポート対象外です。

  • 自身のリリース間や、公式の Neo4j MCP サーバーとの間で破壊的な変更が含まれる可能性があります。

  • 使用前にテストする必要があります。

貢献は歓迎します — 特にこのカナリアチャンネルでは、常に新しいアイデアを受け付けています。

カナリアがお客様の環境で動作するとは想定しないでください。まずテストしてください。

前提条件

  • 稼働中の Neo4j データベースインスタンス。選択肢には AuraNeo4j Desktopセルフマネージド があります。

  • Neo4j インスタンスに APOC プラグインがインストールされていること(必須 — get-schemaapoc.meta.schema を使用します)。

  • MCP 互換のクライアント(例:MCP サポート を備えた VSCode)。

⚠️ 既知の問題: Neo4j 5.26.18 には APOC のバグがあり、get-schema ツールが失敗します。これは 5.26.19 以降で修正されています。5.26.18 を使用している場合は、アップグレードしてください。詳細は #136 を参照してください。

Related MCP server: FastMCP Production-Ready Server

起動時チェックと適応動作

サーバーは起動時に、環境が正しく構成されていることを確認するための事前チェックをいくつか実行します。

STDIO モード — 必須要件

STDIO モードでは、サーバーは以下を検証します。いずれかのチェックが失敗した場合(例:無効な設定、誤った認証情報、APOC の欠落)、サーバーは起動しません:

  • Neo4j インスタンスへの有効な接続。

  • クエリを実行できること。

  • APOC プラグインが存在すること。

HTTP モード — 検証はスキップ

HTTP モードでは、認証情報がリクエストごとの認証ヘッダーから取得されるため、起動時の検証チェックはスキップされます。サーバーは Neo4j に接続せずにすぐに起動します。唯一の例外は Query API モード です。このモードの最小バージョンチェックは、認証不要の GET のみを必要とし、リクエストごとの認証情報に依存しないため、両方のトランスポートモードで起動時に実行されます。

オプションの要件

オプションの依存関係が欠落している場合、サーバーは適応モードで起動します。たとえば、Graph Data Science (GDS) ライブラリが検出されない場合、サーバーは起動しますが、list-gds-procedures などの GDS に依存するツールは自動的に無効化されます。他のすべてのツールは引き続き利用可能です。

インストール(バイナリ)

リリース: https://github.com/neo4j-labs/neo4j-mcp-canary/releases

  1. お使いの OS/アーキテクチャ用のアーカイブをダウンロードします。

  2. 解凍して、neo4j-mcp-canaryPATH に配置します。

Mac / Linux:

Mac では、バイナリを初めて実行しようとしたときに警告が表示される場合があります。その場合は、システム設定 → プライバシーとセキュリティ から承認してください。

chmod +x neo4j-mcp-canary
sudo mv neo4j-mcp-canary /usr/local/bin/

Windows(PowerShell / cmd):

move neo4j-mcp-canary.exe C:\Windows\System32

インストールを確認します:

neo4j-mcp-canary -v

インストールされたバージョンが表示されます。

ソースからのビルド

Go 1.25.3+ が必要です(go.mod を参照)。

Task を使用して現在のプラットフォーム用にビルドします:

task build

これにより bin/neo4j-mcp-canary が生成されます。Task を使用しない場合の同等のコマンドは次のとおりです:

go build -C cmd/neo4j-mcp -o ../../bin/

macOS / Linux 向けのクロスコンパイル

GOOS/GOARCH を設定し、cgo を無効にしてクロスコンパイルします(コードベースは純粋な Go であるため、CGO_ENABLED=0 はターゲットマシン上で実行時依存関係のない完全に静的なバイナリを生成します):

CGO_ENABLED=0 GOOS=darwin  GOARCH=amd64 go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary_darwin_amd64
CGO_ENABLED=0 GOOS=darwin  GOARCH=arm64 go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary_darwin_arm64
CGO_ENABLED=0 GOOS=linux   GOARCH=amd64 go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary_linux_amd64
CGO_ENABLED=0 GOOS=linux   GOARCH=arm64 go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary_linux_arm64

バイナリにバージョンを刻印するには(-v / --version)、ldflags のオーバーライドを渡します。これはリリースパイプラインがタグ付きビルドに対して行う処理です:

go build -C cmd/neo4j-mcp -o ../../dist/neo4j-mcp-canary \
  -ldflags "-X 'main.Version=$(git rev-parse --short HEAD)'"

これがない場合、Version"development" にデフォルト設定され、NEO4J_TELEMETRY に関係なくテレメトリも無効になります(テレメトリ を参照)。

公式のマルチプラットフォームリリースアーカイブ(Windows を含む)は、.goreleaser.yaml に従って GoReleaser によってビルドされます。ローカルでビルドする代わりにこれらをダウンロードするには、インストール(バイナリ) を参照してください。

トランスポートモード

Neo4j MCP Canary サーバーは 2 つのトランスポートモードをサポートしています:

  • STDIO(デフォルト):デスクトップクライアント(Claude Desktop、VSCode)向けの、stdin/stdout を介した標準的な MCP 通信。

  • HTTP:Web ベースのクライアントやマルチテナントシナリオ向けに、リクエストごとの Bearer トークンまたは Basic 認証を備えた RESTful HTTP サーバー。標準の Authorization ヘッダーを使用できない場合は、カスタムヘッダー名を設定できます。

主な違い

項目

STDIO

HTTP

起動時検証

必須 — サーバーは APOC、接続、クエリを検証

スキップ — サーバーはすぐに起動

認証情報

環境変数で設定

リクエストごとに Bearer トークンまたは Basic 認証ヘッダーで指定

テレメトリ

起動時に Neo4j のバージョン、エディション、Cypher バージョンを収集

unknown-http-mode を報告 — リクエストごとの認証情報により内部情報の取得を防止

両モードの設定手順については、クライアントセットアップガイド を参照してください。

認証不要の MCP クライアントリクエスト

デフォルトでは、HTTP(S) トランスポートを使用する場合、MCP クライアントが認証なしで送信できるリクエストが 4 つあります。一部の統合(AWS AgentCore、AWS Gateway など)は、これを初期ヘルスチェックメカニズムとして利用しています:

  • ping

  • initialize

  • tools/list

  • notifications/initialize

これらが不要な場合は、以下の変数を使用して個別に認証を強制できます。

環境変数

CLI フラグ

デフォルト

目的

NEO4J_HTTP_ALLOW_UNAUTHENTICATED_PING

--neo4j-http-allow-unauthenticated-ping

true

認証不要の ping ヘルスチェックを許可

NEO4J_HTTP_ALLOW_UNAUTHENTICATED_TOOLS_LIST

--neo4j-http-allow-unauthenticated-tools-list

true

認証不要のツール一覧取得を許可

NEO4J_HTTP_ALLOW_UNAUTHENTICATED_INITIALIZE

--neo4j-http-allow-unauthenticated-initialize

true

認証不要の initialize を許可

NEO4J_HTTP_ALLOW_UNAUTHENTICATED_NOTIFICATIONS_INITIALIZE

--neo4j-http-allow-unauthenticated-notifications-initialize

true

認証不要の notifications/initialize を許可

TLS/HTTPS 設定

HTTP トランスポートを使用する場合、以下の変数を使用して安全な通信のための TLS を有効にします。

環境変数

CLI フラグ

デフォルト

目的

NEO4J_MCP_HTTP_TLS_ENABLED

--neo4j-http-tls-enabled

false

TLS/HTTPS を有効にする

NEO4J_MCP_HTTP_TLS_CERT_FILE

--neo4j-http-tls-cert-file

TLS 証明書へのパス(TLS 使用時に必須)

NEO4J_MCP_HTTP_TLS_KEY_FILE

--neo4j-http-tls-key-file

TLS 秘密鍵へのパス(TLS 使用時に必須)

NEO4J_MCP_HTTP_PORT

--neo4j-http-port

TLS 有効時は 443、無効時は 80

HTTP サーバーのポート

NEO4J_HTTP_AUTH_HEADER_NAME

--neo4j-http-auth-header-name

Authorization

認証情報を読み取るヘッダー名

セキュリティ設定

  • 最小 TLS バージョン: TLS 1.2(利用可能な場合は TLS 1.3 がネゴシエーションされます)

  • 暗号スイート: Go の安全なデフォルト暗号スイート

  • デフォルトポート: TLS が有効な場合は自動的に 443 を使用

export NEO4J_URI="bolt://localhost:7687"
export NEO4J_TRANSPORT_MODE="http"
export NEO4J_MCP_HTTP_TLS_ENABLED="true"
export NEO4J_MCP_HTTP_TLS_CERT_FILE="/path/to/cert.pem"
export NEO4J_MCP_HTTP_TLS_KEY_FILE="/path/to/key.pem"

neo4j-mcp-canary
# Server listens on https://127.0.0.1:443 by default

本番環境での使用: 本番環境へのデプロイには、信頼できる CA(Let's Encrypt、組織の CA など)の証明書を使用してください。

証明書の生成、TLS テスト、本番環境へのデプロイの詳細な手順については、CONTRIBUTING.md を参照してください。

設定オプション

neo4j-mcp-canary サーバーは、環境変数、CLI フラグ、および/またはオプションの設定ファイルで構成されます。CLI フラグは環境変数よりも優先され、環境変数はオプションの設定ファイルよりも優先されます。

環境変数

コアの接続と動作:

環境変数

デフォルト

目的

NEO4J_URI

Neo4j 接続 URI(必須)

NEO4J_USERNAME

データベースのユーザー名(STDIO モードでは必須。HTTP モードでは未設定である必要があります)

NEO4J_PASSWORD

データベースのパスワード(STDIO モードでは必須。HTTP モードでは未設定である必要があります)

NEO4J_DATABASE

neo4j

データベース名

NEO4J_READ_ONLY

false

true の場合、write-cypher ツールは登録されません

NEO4J_TELEMETRY

true

匿名テレメトリを有効/無効にする

NEO4J_SCHEMA_SAMPLE_SIZE

1000

スキーマ推論時に APOC が検査するラベルあたりのノード数

NEO4J_LOG_LEVEL

info

debuginfonoticewarningerrorcriticalalertemergency

NEO4J_LOG_FORMAT

text

text または json

NEO4J_OUTPUT_FORMAT

json

LLM クライアントに送信されるツール応答形式:json または toon

NEO4J_TRANSPORT_MODE

stdio

stdio または http(非推奨の NEO4J_MCP_TRANSPORT を置き換えます)

Bolt の代わりに Query API 経由で接続する

NEO4J_URI のスキームによって、サーバーが Neo4j との通信に使用するワイヤプロトコルが決まります。別途フラグは必要ありません:

  • bolt://bolt+s://neo4j://neo4j+s:// など → Bolt ドライバー(デフォルト、動作は変更なし)。

  • http:// または https://Neo4j Query API、Neo4j の HTTP ベースのクエリインターフェース。HTTP のみを公開するデプロイや、Bolt を使用しない方がよい場合に便利です。

Query API モードには、Neo4j 2026.07 以降(カレンダーバージョン形式のリリース)、または 5.27-aura 以降(クラシックバージョン形式の Aura リリースのみ。-aura 接尾辞のない素のクラシックバージョンはサポートされません)が必要です。この下限は、Query API 自体の一般提供開始(2026.06)より 1 リリース先です。read-cypher の書き込みクエリ拒否は、クエリ応答内の queryType フィールドに依存しますが、Neo4j がこれを導入したのは 2026.07 になってからです。2026.06 のサーバーには、クエリを実行前に読み取り専用として分類するための信頼できるシグナルがありません。サーバーは起動時に、接続先インスタンスが報告するバージョンをこの下限と照合し(ベース URI への未認証 GET 経由)、古すぎる場合は、検出したバージョンと必要な最小バージョンを示すエラーとともに起動を拒否します。

NEO4J_USERNAME/NEO4J_PASSWORD とリクエストごとの Basic/Bearer 認証情報は、Query API モードでも Bolt の場合と同様に機能します。トランスポートモード認証方法(HTTP モード)を参照してください。

Cypher 実行の保護機能(Cypher 実行の保護機能を参照):

環境変数

デフォルト

目的

NEO4J_CYPHER_MAX_ROWS

1000

read-cypher / write-cypher の呼び出しごとの行数上限。0 で無効

NEO4J_CYPHER_MAX_BYTES

900000

応答エンベロープの呼び出しごとのバイト上限(~900 KB)。0 で無効

NEO4J_CYPHER_TIMEOUT

30

実行タイムアウト(秒)。0 で無効

NEO4J_CYPHER_MAX_ESTIMATED_ROWS

1000000

EXPLAIN 時のプランナー見積もりがこの値を超えると read-cypher がクエリを拒否。0 で無効

HTTP トランスポート、TLS、認証(上記の表を参照)。

CLI フラグ

CLI フラグを使用して、任意の環境変数を上書きできます:

neo4j-mcp-canary \
  --neo4j-uri "bolt://localhost:7687" \
  --neo4j-username "neo4j" \
  --neo4j-password "password" \
  --neo4j-database "neo4j" \
  --neo4j-read-only false \
  --neo4j-telemetry true

利用可能なフラグ:

接続と動作

  • --neo4j-uriNEO4J_URI を上書き

  • --neo4j-usernameNEO4J_USERNAME を上書き

  • --neo4j-passwordNEO4J_PASSWORD を上書き

  • --neo4j-databaseNEO4J_DATABASE を上書き

  • --neo4j-read-onlyNEO4J_READ_ONLY を上書き(true / false)

  • --neo4j-telemetryNEO4J_TELEMETRY を上書き(true / false)

  • --neo4j-schema-sample-sizeNEO4J_SCHEMA_SAMPLE_SIZE を上書き

  • --neo4j-output-formatNEO4J_OUTPUT_FORMAT を上書き(json / toon)

Cypher 実行の保護機能

  • --neo4j-cypher-max-rowsNEO4J_CYPHER_MAX_ROWS を上書き(0 で無効)

  • --neo4j-cypher-max-bytesNEO4J_CYPHER_MAX_BYTES を上書き(0 で無効)

  • --neo4j-cypher-timeoutNEO4J_CYPHER_TIMEOUT を上書き(秒。0 で無効)

  • --neo4j-cypher-max-estimated-rowsNEO4J_CYPHER_MAX_ESTIMATED_ROWS を上書き(0 で無効)

トランスポート / HTTP

  • --neo4j-transport-modestdio または http

  • --neo4j-http-hostNEO4J_MCP_HTTP_HOST を上書き

  • --neo4j-http-portNEO4J_MCP_HTTP_PORT を上書き

  • --neo4j-http-allowed-originsNEO4J_MCP_HTTP_ALLOWED_ORIGINS を上書き(カンマ区切りの CORS オリジン)

  • --neo4j-http-tls-enabledNEO4J_MCP_HTTP_TLS_ENABLED を上書き

  • --neo4j-http-tls-cert-fileNEO4J_MCP_HTTP_TLS_CERT_FILE を上書き

  • --neo4j-http-tls-key-fileNEO4J_MCP_HTTP_TLS_KEY_FILE を上書き

  • --neo4j-http-auth-header-nameNEO4J_HTTP_AUTH_HEADER_NAME を上書き

  • --neo4j-http-allow-unauthenticated-pingNEO4J_HTTP_ALLOW_UNAUTHENTICATED_PING を上書き

  • --neo4j-http-allow-unauthenticated-tools-listNEO4J_HTTP_ALLOW_UNAUTHENTICATED_TOOLS_LIST を上書き

  • --neo4j-http-allow-unauthenticated-initializeNEO4J_HTTP_ALLOW_UNAUTHENTICATED_INITIALIZE を上書き

  • --neo4j-http-allow-unauthenticated-notifications-initializeNEO4J_HTTP_ALLOW_UNAUTHENTICATED_NOTIFICATIONS_INITIALIZE を上書き

説明付きの完全な一覧を表示するには、neo4j-mcp-canary --help を実行してください。

設定ファイル

環境変数に対する優先度が最も低い代替手段として、neo4j-mcp-canary はオプションの JSON または YAML ファイルから設定を読み取ることができます:

neo4j-mcp-canary --config-file /etc/neo4j-mcp/config.yaml
# or
NEO4J_CONFIG_FILE=/etc/neo4j-mcp/config.yaml neo4j-mcp-canary

キーは、対応する環境変数を小文字にした形式です:

neo4j_uri: bolt://localhost:7687
neo4j_username: neo4j
neo4j_password: password
neo4j_read_only: false
neo4j_transport_mode: http
neo4j_http_tls_enabled: true
neo4j_cypher_max_rows: 500

同等の JSON も受け付けられます(.json 拡張子)。サポートされるのはスカラー値(文字列、数値、ブール値)のみで、ネストしたオブジェクトやリストは起動エラーになります。CLI フラグまたは環境変数の値は常に設定ファイルより優先されます。読み取りまたは解析に失敗した --config-file は起動エラーになります。

サーバーに新しい設定パラメータを追加する(環境変数 + CLI フラグ + 設定ファイルのキーを一度に)には、internal/config/schema.gofields スライスに 1 エントリを追加します。形式については、そのファイルの doc コメントを参照してください。

応答形式(JSON と TOON)

ツールの応答(read-cypherwrite-cypherget-schemalist-gds-procedures)は、デフォルトでは JSON でレンダリングされます。NEO4J_OUTPUT_FORMAT(または --neo4j-output-format)を toon に設定すると、代わりに TOON(Token-Oriented Object Notation)でレンダリングされます。これは、JSON と比較して LLM のトークン使用量を削減する、コンパクトでありながら人間が読める形式で、特にこれらのツールが返す表形式の行形状に適しています:

neo4j-mcp-canary --neo4j-output-format toon
# or
NEO4J_OUTPUT_FORMAT=toon neo4j-mcp-canary

read-cypher の結果を JSON で表したもの:

{
  "rows": [
    { "name": "Alice", "age": 30 },
    { "name": "Bob", "age": 25 }
  ],
  "rowCount": 2,
  "truncated": false
}

同じ結果を TOON で表したもの:

rowCount: 2
rows[2]{age,name}:
  30,Alice
  25,Bob
truncated: false

無効な値は、NEO4J_LOG_FORMAT と同様に、stderr への警告とともに json にフォールバックします。

Cypher 実行の保護機能

read-cypherwrite-cypher は、4 層の保護機能によって守られており、これらが連携して、過剰に実行しようとする LLM が MCP トランスポートをハングさせたり、データベースを枯渇させたりするのを防ぎます。各層は異なる障害モードを捕捉し、全体として多層防御として機能します。

設定

デフォルト

発動タイミング

プランナー見積もり

NEO4J_CYPHER_MAX_ESTIMATED_ROWS

1000000

実行前 — プランナーのルート EstimatedRows がしきい値を超えるとクエリを拒否

実行タイムアウト

NEO4J_CYPHER_TIMEOUT

30s

実行中 — 期限を過ぎるとクエリをキャンセル

行数上限

NEO4J_CYPHER_MAX_ROWS

1000

ストリーミング中 — 行数制限で応答を切り詰め

バイト上限

NEO4J_CYPHER_MAX_BYTES

900000

ストリーミング中 — エンベロープが ~900 KB を超えると応答を切り詰め

任意の値を 0 に設定すると、その特定の層が無効になります。

切り詰めエンベロープ

行数上限またはバイト上限のいずれかが発動すると、ツールはすでに収集した行と切り詰めエンベロープを返します:

{
  "rows": [ /* ... */ ],
  "rowCount": 1000,
  "truncated": true,
  "truncationReason": "rows",
  "maxRows": 1000,
  "hint": "Results were truncated at 1000 rows. Add a LIMIT clause or a more selective filter and retry for a complete result."
}

呼び出し元(LLM エージェントを含む)は、truncated / truncationReason / hint をプログラムで読み取り、不透明なトランスポートレベルの失敗を見る代わりに、より厳密なクエリで再試行できます。

タイムアウトとキャンセルのエラー

NEO4J_CYPHER_TIMEOUT が発動すると、ツールは設定された制限を明示し、ツール固有の対処法を提示する分類済みエラーを返します(read-cypher では可変長パターンのバインド、WHERE フィルターの追加、または LIMITwrite-cypher ではバッチサイズの削減、MATCH の絞り込み、または apoc.periodic.iterate の使用)。呼び出し元によるキャンセル(タイムアウトとは区別)は、対処法のガイダンスなしに簡潔な cancelled メッセージとして表面化します。

プランナー見積もりによる拒否

プランナー見積もりガードは、クエリの実行前に EXPLAIN プランのルート EstimatedRows を読み取ります。Neo4j は LIMIT をルート見積もりに組み込むため、正当な MATCH ... LIMIT 100 クエリは ~100 の見積もりで問題なく通過しますが、数百万行のラベルに対する素の MATCH は、開始前に拒否されます。

認証方法(HTTP モード)

HTTP トランスポートモードを使用する場合、Neo4j MCP Canary サーバーは、さまざまなデプロイシナリオに対応するために 2 つの認証方法をサポートしています。

Bearer トークン認証

Bearer トークン認証により、ID 管理に SSO/OAuth/OIDC を使用する Neo4j Enterprise Edition および Neo4j Aura 環境とのシームレスな統合が可能になります。この方法は、以下に最適です:

  • 一元化された ID プロバイダー(Okta、Azure AD など)を使用するエンタープライズデプロイ

  • SSO が設定された Neo4j Aura データベース

  • OAuth 2.0 準拠を必要とする組織

  • 多要素認証のシナリオ

例:

curl -X POST http://localhost:8080/mcp \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

Bearer トークンは ID プロバイダーから取得され、認証のために Neo4j に渡されます。MCP サーバーはパススルーとして機能し、トークンを Neo4j の認証システムに転送します。

Basic 認証

従来のユーザー名/パスワード認証で、以下に適しています:

  • Neo4j Community Edition

  • 開発環境およびテスト環境

  • SSO を使用しない直接のデータベース認証情報

例:

curl -X POST http://localhost:8080/mcp \
  -u neo4j:password \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

クライアント設定

MCP クライアント(VSCode、Claude Desktop など)で Neo4j MCP Canary サーバーを使用するように設定するには、以下を参照してください:

📘 クライアントセットアップガイド – STDIO モードと HTTP モードの完全な設定。

ツールと使用方法

提供されるツール:

ツール

ReadOnly

目的

備考

get-schema

true

ラベル、リレーションシップタイプ、プロパティキーをイントロスペクト

apoc.meta.schema を使用。サンプリングは NEO4J_SCHEMA_SAMPLE_SIZE で制御。

read-cypher

true

任意の読み取り専用 Cypher を実行

書き込み、スキーマ/管理 DDL、EXPLAINPROFILE を拒否。Cypher 実行の保護機能を参照。

write-cypher

false

任意の Cypher を実行(書き込みモード)

注意: LLM が生成したクエリは害を及ぼす可能性があります。開発環境でのみ使用してください。NEO4J_READ_ONLY=true の場合は登録されません。

list-gds-procedures

true

Neo4j インスタンスで利用可能な GDS プロシージャを一覧表示

GDS がインストールされていない場合は自動的に無効になります。

give-feedback

true

MCP サーバー自体に関する自由記述のフィードバックを送信

サーバー(ツール、動作、ドキュメント)に関するフィードバック用。Cypher/データベースの問題は対象外。300 文字まで。フィードバックを参照。

読み取り専用モードフラグ

NEO4J_READ_ONLY=true を設定すると読み取り専用モードが有効になります(受け入れられる値: true / false。デフォルト: false)。

CLI フラグを使用することもできます:

neo4j-mcp-canary \
  --neo4j-uri "bolt://localhost:7687" \
  --neo4j-username "neo4j" \
  --neo4j-password "password" \
  --neo4j-read-only true

有効にすると、書き込みツール(例: write-cypher)はクライアントに公開されません。

クエリの分類

read-cypher は、実行前に呼び出し元のクエリを読み取りまたは書き込みとして分類するために、クエリの先頭に EXPLAIN を付加します。結果:

  • 書き込み操作CREATEMERGEDELETESETREMOVE など)— write-cypher への誘導メッセージ付きで拒否されます。

  • スキーマ/DDL操作CREATE INDEXDROP CONSTRAINT など)— 同じメッセージで拒否されます。

  • 管理コマンドSHOW USERSSHOW DATABASES など)— 同じメッセージで拒否されます。

  • EXPLAIN プレフィックス — プランナー見積もりガードと実行タイムアウトによって暴走クエリ保護がすでに提供されていること、およびプロファイリングされたプランについては write-cypher を参照することを示す専用メッセージ付きで拒否されます。

  • PROFILE プレフィックスwrite-cypher への誘導メッセージ付きで拒否されます。

  • 読み取り専用の SHOW コマンドSHOW INDEXESSHOW CONSTRAINTSSHOW PROCEDURESSHOW FUNCTIONS)— 許可されます。

ラップされたクエリが構文エラーを生成した場合、サーバーは返却前にエラーテキスト、列オフセット、キャレットの位置合わせから内部の EXPLAIN プレフィックスを除去します。これにより、呼び出し元の元のクエリが直接送信されたかのようにエラーが読み取れます。

read-cypher / write-cypher のレスポンス形式

ドライバーの型は、Cypher の慣例に合わせた camelCase の JSON 形式でラップされます:

  • ノード: { "elementId": "...", "labels": [...], "properties": {...} }

  • リレーションシップ: { "elementId": "...", "startElementId": "...", "endElementId": "...", "type": "...", "properties": {...} }

  • パス: { "nodes": [...], "relationships": [...] }

  • ポイント: { "x": ..., "y": ..., "srid": ... }(3D の場合は z も含む)

  • Date / Time / DateTime / LocalTime / LocalDateTime / Duration: ISO 8601 文字列

非推奨の数値型 id / startId / endId 識別子は返却されませんelementId / startElementId / endElementId のみが返される識別子です。

フィードバック

give-feedback を使用すると、エージェントは MCP サーバー自体に関する自由形式のフィードバック(肯定的または否定的)を、単一の feedback 文字列引数として送信できます。文字数は 300 文字に制限されています(公開されているツールスキーマとハンドラーの両方で強制されます。クライアントが送信前にスキーマを検証しない場合に備えています)。これはサーバーのツール、動作、またはドキュメントに関するフィードバック用であり、Cypher/データベースエラーの報告用ではありません。

フィードバックはサーバーの他のテレメトリとともに Mixpanel イベントとして送信されるため、テレメトリが有効な場合にのみ記録されます(テレメトリ を参照)— いずれの場合もツール呼び出し自体は常に成功します。

使用ガイダンス

カナリアテストから得られた、LLM(または人間)が read-cypher を最大限に活用するための教訓:

  1. データベース内で集約する。 countsumavgcollectreducepercentileContstDev などの集約関数は 1 行に集約され、行数上限の影響を受けません。UNWIND range(1, 50000) AS i RETURN sum(i) のようなクエリは問題なく実行されます。同じ範囲を 1 行ずつストリーミングすると、行数上限で切り詰められます。

  2. 探索的なクエリには常に LIMIT を使用する。 行数上限は裸の MATCH の戻り値を切り詰めます。切り詰めエンベロープの hint フィールドは、呼び出し元に LIMIT の追加を指示します。サーバーが課すものよりも、自分で選んだ LIMIT を優先してください。

  3. 幅広いノードでは RETURN プロジェクションを絞り込む。 レコードが多くのプロパティを持つ場合(例: 19 フィールドを持つ完全な Company ノード)、行数上限の前にバイト上限が発動します。ノード全体ではなく、必要なフィールドのみを返してください(RETURN c.name, c.companyNumber)。

  4. ネストされたマップを含むパラメータを使用する。 パラメータプレースホルダー($name)は params オブジェクトからバインドされます。ネストされたアクセスも機能します($config.thresholds.pr)。必須パラメータが欠落している場合は明確な ParameterMissing エラーが生成され、余分なパラメータは黙って無視されます。

  5. 比較では型を明示する。 t.amount > "foo" のような型をまたぐ比較は null と評価され、すべてを黙ってフィルタリングします — エラーは発生せず、空の結果セットになるだけです。結果の形状に驚いた場合は、呼び出し側で受信パラメータの型を検証してください。

  6. SHOW INDEXES / SHOW CONSTRAINTS は許可されています。 インデックスに依存するクエリを書く前や、マッチが遅い理由のデバッグに役立ちます。

  7. EXPLAINPROFILEread-cypher では公開されていません。 暴走クエリ保護はプランナー見積もりガードと実行タイムアウトによってすでに処理されています。実行時統計を含むプロファイリングされたプランが必要な場合は、PROFILE を付けて write-cypher を使用してください。

  8. パスを返すときはペイロードの重複に注意する。 RETURN p, nodes(p), relationships(p) はシリアライズされたペイロードを 3 倍にします。パスまたはその構成要素のいずれかを返し、両方は返さないでください。

  9. 長時間実行クエリは分類されたエラーを返します。 NEO4J_CYPHER_TIMEOUT が発動すると、エラーはタイムアウト値を示し、ドライバーからの生の context deadline exceeded の代わりに改善策(可変長パターンのバインド、WHERE フィルターの追加、LIMIT の使用)を提案します。

  10. 欠落データには OPTIONAL MATCH を使用する。 一部の ID が存在しない可能性がある ID による検索では、OPTIONAL MATCH は行を落とす代わりに欠落に対して null を返します — バッチルックアップに適しています。

  11. デフォルト値は調整済みであり、恣意的ではありません。 1000 行 / 約900 KB / 30秒 / 1M のプランナー見積もりは、圧倒的多数の探索的および本番クエリをカバーします。バルクエクスポートのワークロードでは増やし、高トラフィックのエージェントデプロイメントにサービスを提供する場合は減らしてください。

自然言語プロンプトの例

Copilot またはその他の MCP クライアントで試すプロンプト:

  • 「私の Neo4j インスタンスには何が含まれていますか?すべてのノードラベル、リレーションシップタイプ、プロパティキーを一覧表示してください。」

  • 「すべての Person ノードを検索し、それらの上位リレーションシップを 50 件に制限して表示してください。」

  • 「データベースに存在するインデックスと制約は何ですか?」

  • 「トランザクショングラフを要約してください: 総数、平均金額、PageRank による上位 5 顧客。」

セキュリティのヒント

  • 探索には制限付きの Neo4j ユーザーを使用してください。

  • 本番データベースで実行する前に、LLM が生成した Cypher をレビューしてください。

  • グラフを変更すべきでないデプロイメントでは、NEO4J_READ_ONLY=true を維持してください。

  • 変更する具体的な理由がない限り、Cypher の安全装置はデフォルトのままにしてください。

ロギング

サーバーは、複数のログレベルと出力形式をサポートする構造化ロギングを使用します。

設定

ログレベルNEO4J_LOG_LEVEL、デフォルト: info

詳細度を制御します。すべての MCP ログレベル をサポートします: debuginfonoticewarningerrorcriticalalertemergency

ログ形式NEO4J_LOG_FORMAT、デフォルト: text

  • text — 人間が読み取り可能(デフォルト)

  • json — 構造化 JSON(ログ集約に便利)

テレメトリ

デフォルトでは、neo4j-mcp-canary は製品改善のために匿名の使用データを収集します。これには、使用されているツール、オペレーティングシステム、CPU アーキテクチャなどの情報が含まれます。個人情報や機密情報は収集されません。

テレメトリを無効にするには、NEO4J_TELEMETRY=false を設定します(受け入れ値: true / false。デフォルト: true)。--neo4j-telemetry CLI フラグも使用できます。

ドキュメント

📘 クライアントセットアップガイド – VSCode、Claude Desktop、その他の MCP クライアント(STDIO および HTTP モード)の設定 📚 コントリビューティングガイド – コントリビューションのワークフロー、開発環境、モックとテスト

問題 / フィードバック: 再現の詳細を含む GitHub イシューを開いてください(機密データは省略してください)。

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that enables LLMs to perform semantic and fulltext searches within Neo4j while executing complex, search-augmented Cypher queries for GraphRAG applications. It provides tools for database schema discovery and supports multi-provider embeddings to facilitate advanced graph traversals.
    5
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A production-ready MCP server that enables users to interact with Neo4j databases through health checks and Cypher query tools. It features a structured, containerized architecture with built-in support for Azure deployments and environment-driven configuration.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Neo4j graph database operations, enabling Cypher queries, node/relationship management, and schema discovery.
    1
    BSD 3-Clause
  • A
    license
    Not graded
    quality
    C
    maintenance
    Production-ready MCP server for Neo4j graph databases, enabling natural language to Cypher query translation with enterprise security and async performance.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/neo4j-labs/neo4j-mcp-canary'

If you have feedback or need assistance with the MCP directory API, please join our Discord server