New Relic NerdGraph MCP Server について
NerdGraph API経由でNew Relicアカウントのデータを照会・管理するMCPサーバーです。汎用クエリに加え、エンティティ、APM、Syntheticモニター、アラートを扱えます。
主な機能
- 01NerdGraphとNRQLのクエリ実行
- 02エンティティの検索と詳細取得
- 03APMアプリとSyntheticモニターの一覧
- 04ブラウザーモニターの作成
- 05アラートインシデントの確認と承認
活用シーン
- 01NRQLによるアカウントテレメトリの調査
- 02アプリやホストなどの詳細確認
- 03Syntheticブラウザーモニターの作成
- 04未解決アラートの絞り込みと承認
MCP 対応
New Relicのクエリ、リソース、操作ツールをMCPクライアントに公開します。設定にはNew Relic APIキーとアカウントIDが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
New Relic NerdGraph MCP サーバー
このリポジトリは、New Relic NerdGraph API とやり取りするための Model Context Protocol(MCP) サーバーを提供します。MCP クライアント(Claude Desktop など)が自然言語または特定のコマンドを使って、New Relic アカウントのデータや機能を照会し、操作できるようにします。
fastmcp フレームワークを使用して構築されています。
機能
この MCP サーバーは、以下を含むさまざまな New Relic の機能をツールおよびリソースとして公開します。
- アカウントの詳細: 設定済みアカウントの基本情報を取得します。
- 汎用 NerdGraph クエリ: 任意の NerdGraph クエリを実行します。
- NRQL クエリ: アカウントデータに対して特定の NRQL クエリを実行します。
- エンティティ管理: エンティティ(アプリケーション、ホスト、モニターなど)を検索し、GUID を指定して詳細情報を取得します。
- APM: Application Performance Monitoring(APM)アプリケーションを一覧表示します。
- Synthetics: Synthetic モニターを一覧表示し、シンプルなブラウザーモニターを作成します。
- アラート: アラートポリシーを一覧表示し、未解決のインシデントを確認して、インシデントを承認します。
前提条件
- Python: Python 3.10 以降を推奨します(
fastmcpの要件)。 - pip: Python パッケージインストーラー。
- New Relic アカウント: New Relic アカウントへのアクセス権。
- New Relic User API キー: 認証には User API キーが必要です。こちらで生成できます。このキーは安全に保管してください!
- New Relic アカウント ID: ほとんどの操作で New Relic アカウント ID が必要です。New Relic UI(多くの場合、URL またはアカウント設定内)で確認できます。
セットアップとインストール
-
リポジトリをクローンします:
git clone <repository_url> # Replace <repository_url> with the actual URL cd mcp-server-newrelic -
依存関係をインストールします:
pip install -r requirements.txtこれにより、
fastmcp、requestsと、それらの依存関係がインストールされます。
設定
サーバーを動作させるには、New Relic API キーとアカウント ID が必要です。サーバーを実行する前に、環境変数を使ってこれらを設定してください。
# Replace YOUR_API_KEY and YOUR_ACCOUNT_ID with your actual credentials
export NEW_RELIC_API_KEY="YOUR_API_KEY"
export NEW_RELIC_ACCOUNT_ID="YOUR_ACCOUNT_ID"
セキュリティに関する注意: API キーをソースコードにハードコードしないでください。環境変数を使う方法を推奨します。direnv などのツールを使うか、これらの export コマンドをシェルのプロファイル(.zshrc、.bashrc など)に記述して永続化することもできますが、セキュリティ上の影響に注意してください。
サーバーの実行
設定後、fastmcp コマンドラインツールを使ってサーバーを起動します。
fastmcp run server.py:mcp
server.py:メインのエントリーポイントスクリプトです。mcp:server.py内で作成されるFastMCPインスタンスの名前です。
サーバーが起動すると、登録メッセージを出力し、受信する MCP 接続を待ち受けます(通常はデフォルトでポート 8000 を使用し、fastmcp が管理します)。以下のような出力が表示されます。
Using New Relic Account ID: YOUR_ACCOUNT_ID
Registering common features...
Registering entity features...
Registering APM features...
Registering Synthetics features...
Registering Alerts features...
Feature registration complete.
INFO: Started server process [XXXXX]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
このターミナルウィンドウは開いたままにしてください。
MCP クライアントでの使用方法
-
MCP サーバーを起動する(上記の説明を参照)。
-
MCP クライアントを再起動する(例:Claude Desktop)。
-
クライアントは実行中のサーバーを自動的に検出し、接続するはずです。外部ツールが利用可能であることを示すインジケーター(Claude Desktop の 🔨 アイコンなど)が表示される場合があります。
-
これで、自然言語を使うか、以下に記載されているツールを直接呼び出して、New Relic アカウントを操作できます。
- 自然言語の例:「APM アプリケーションを表示して」または「アカウント 1234567 の未解決の重大なインシデントを一覧表示して」
- 直接呼び出す場合(対応している場合):
list_apm_applications()またはlist_open_incidents(priority='CRITICAL', target_account_id=1234567)
利用可能なツールとリソース
サーバーは、Model Context Protocol を通じてアクセスできる以下の関数を提供します。
共通(features/common.py)
-
ツール:
query_nerdgraph- 説明: 任意の NerdGraph クエリを実行します。特定のツールで対応していない操作に使用します。
- 引数:
nerdgraph_query(str):GraphQL クエリ文字列。variables(Optional[Dict]):クエリ用の変数を含む JSON 辞書。
- 戻り値: クエリ結果の JSON 文字列。
-
ツール:
run_nrql_query- 説明: NRQL クエリを実行します。
- 引数:
nrql(str):NRQL クエリ文字列(例:"SELECT count(*) FROM Transaction TIMESERIES")。target_account_id(Optional[int]):クエリ対象のアカウント ID(省略した場合は env のデフォルト値を使用)。
- 戻り値: NRQL 結果の JSON 文字列。
-
リソース:
get_account_details- 説明: 設定済みの New Relic アカウントの基本情報(ID、名前)を提供します。
- URI:
newrelic://account_details - 戻り値: アカウント情報を含む JSON 文字列(
{"data": {"id": ..., "name": ...}})、またはエラー。
エンティティ(features/entities.py)
-
ツール:
search_entities- 説明: 条件に基づいて New Relic エンティティを検索します。
- 引数:
name(Optional[str]):名前で絞り込みます(あいまい一致)。entity_type(Optional[str]):タイプで絞り込みます(例:'APPLICATION'、'HOST')。domain(Optional[str]):ドメインで絞り込みます(例:'APM'、'INFRA')。tags(Optional[List[Dict]]):タグで絞り込みます(例:[{"key": "env", "value": "prod"}])。target_account_id(Optional[int]):検索対象のアカウント ID を明示的に指定します。limit(int):結果の最大件数(デフォルトは 50)。
- 戻り値: 検索結果の JSON 文字列。
-
リソース:
get_entity_details- 説明: 特定のエンティティの詳細情報を取得します。共通フィールドのほか、APM、Browser、Infra、Synthetics、Dashboards などのタイプ固有の詳細情報が含まれます。
- URI:
newrelic://entity/{guid}({guid}をエンティティ GUID に置き換えます) - 戻り値: エンティティ詳細の JSON 文字列。
-
プロンプト:
generate_entity_search_query- 説明:
entitySearchNerdGraph フィールド用のquery文字列の条件部分を生成します。検索クエリの組み立てに役立ちます。 - 引数:
entity_name(str):検索する名前(プロンプトの生成時には完全一致が使用されます)。entity_domain(Optional[str]):クエリ条件に含めるドメイン。entity_type(Optional[str]):クエリ条件に含めるタイプ。target_account_id(Optional[int]):クエリ条件に含めるアカウント ID。
- 戻り値: 検索条件を表す文字列(例:
"accountId = 123 AND name = 'My App' AND domain = 'APM'")。
- 説明:
APM (features/apm.py)
- ツール:
list_apm_applications- 説明: APM アプリケーションの一覧を取得します。
- 引数:
target_account_id(Optional[int]):照会するアカウント ID(省略した場合はデフォルトを使用します)。
- 戻り値: APM アプリケーションの一覧を含む JSON 文字列。
Synthetics (features/synthetics.py)
-
ツール:
list_synthetics_monitors- 説明: Synthetic モニターの一覧を取得します。
- 引数:
target_account_id(Optional[int]):照会するアカウント ID(省略した場合はデフォルトを使用します)。
- 戻り値: Synthetic モニターの一覧を含む JSON 文字列。
-
ツール:
create_simple_browser_monitor- 説明: 基本的な Synthetics シンプルブラウザーモニターを作成します。
- 引数:
monitor_name(str):新しいモニターの名前。url(str):監視する URL。locations(List[str]):パブリックロケーションラベルの一覧(例:["AWS_US_EAST_1"])。period(str):チェック頻度(例:"EVERY_15_MINUTES")。デフォルト:"EVERY_15_MINUTES"。status(str):初期ステータス("ENABLED"または"DISABLED")。デフォルト:"ENABLED"。target_account_id(Optional[int]):作成先のアカウント ID(省略した場合はデフォルトを使用します)。tags(Optional[List[Dict]]):任意のタグ(例:[{"key": "team", "value": "ops"}])。
- 戻り値: 新しいモニターの GUID を含む結果の JSON 文字列。
-
リソース: モニターの GUID(
newrelic://entity/{monitor_guid})を指定して、get_entity_detailsリソースで Synthetics モニターの詳細を取得できます。
アラート (features/alerts.py)
-
ツール:
list_alert_policies- 説明: アラートポリシーの一覧を取得します。名前による絞り込みも可能です。
- 引数:
target_account_id(Optional[int]):照会するアカウント ID(省略した場合はデフォルトを使用します)。policy_name_filter(Optional[str]):名前にこの文字列を含むポリシーに絞り込みます。
- 戻り値: アラートポリシーの一覧を含む JSON 文字列。
-
ツール:
list_open_incidents- 説明: 現在オープン中のアラートインシデントの一覧を取得します。
- 引数:
target_account_id(Optional[int]):照会するアカウント ID(省略した場合はデフォルトを使用します)。priority(Optional[str]):優先度で絞り込みます('CRITICAL'、'WARNING')。
- 戻り値: オープン中のインシデントの一覧を含む JSON 文字列。
-
ツール:
acknowledge_alert_incident- 説明: オープン中のアラートインシデントを確認済みにします。
- 引数:
incident_id(int):確認済みにするインシデントの ID。target_account_id(Optional[int]):インシデントが発生したアカウント ID(省略した場合はデフォルトを使用します)。message(Optional[str]):確認時に任意のメッセージを指定します。
- 戻り値: 確認処理の結果を含む JSON 文字列。
貢献
貢献を歓迎します!お気軽にイシューやプルリクエストを送信してください。
- リポジトリをフォークします。
- 新しいブランチを作成します(
git checkout -b feature/your-feature)。 - 変更を加えます。
- 変更をコミットします(
git commit -am 'Add some feature')。 - ブランチにプッシュします(
git push origin feature/your-feature)。 - プルリクエストを作成します。
ライセンス
このプロジェクトは MIT License の下でライセンスされています。詳細は LICENSE ファイルを参照してください(LICENSE ファイルが存在する場合)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
