はじめに
Model Context Protocol(MCP)を利用して、CursorのチャットからNewRelicのトランザクション情報を取得してみました。
Python+FastMCP+GraphQLで試してみました。
作業手順
まずは環境構築をします。
※Python3.x.xをインストール済なことが前提です。
以下の手順で確認し、未インストールだった場合はインストールしてください。
# Pythonバージョン確認(Python 3.x.x ならOK)
python --version
作業ディレクトリを作成する。
# 作業ディレクトリを作成し、移動する。
mkdir newrelic
cd newrelic
仮想環境を構築し、有効化する。
# 仮想環境の作成
python3 -m venv venv
# 仮想環境の有効化
source venv/bin/activate
必要ライブラリをインストールする。
# ライブラリのインストール
pip install "mcp[cli]" gql requests requests-toolbelt
newrelicディレクトリ直下に newrelic_mcp.py を作成する。
import os
import json
from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport
from mcp.server.fastmcp import FastMCP
# MCPサーバー初期化
mcp = FastMCP("newrelic")
# New Relic設定
NR_URL = "https://api.newrelic.com/graphql"
API_KEY = os.getenv("NEW_RELIC_API_KEY")
ACCOUNT_ID = os.getenv("NEW_RELIC_ACCOUNT_ID")
# gql クライアント設定
transport = RequestsHTTPTransport(
url=NR_URL,
headers={
"API-Key": API_KEY,
"Content-Type": "application/json",
},
verify=True,
retries=3,
)
gql_client = Client(transport=transport, fetch_schema_from_transport=True)
@mcp.tool()
async def fetch_newrelic_logs(query: str):
try:
# GraphQLクエリ生成
graphql_query = gql(f"""
{{
actor {{
account(id: {ACCOUNT_ID}) {{
nrql(query: "{query}") {{
results
}}
}}
}}
}}
""")
# 実行
result = gql_client.execute(graphql_query)
items = result["actor"]["account"]["nrql"]["results"]
# 整形
if not items:
return "No results"
return json.dumps(items, indent=2, ensure_ascii=False)
except Exception as e:
return f"Error querying logs: {e}"
if __name__ == "__main__":
mcp.run()
MCPを全く勉強できていないのですが、
関数を@mcp.tool()でツール登録すると、LLMが使ってくれるという感じですかね。
動きとしては、NRQLでNewRelicから取得したデータをJSON形式でLLMに返しています。
あとは、Cursor側も設定していきます。
Cursor > Preferences > Cursor Settingsに遷移する。
「Add new global MCP server」を押下する。
mcp.jsonを以下のとおり修正する。
{
"mcpServers": {
"newrelic": {
"command": "python3",
"args": ["<「newrelic_mcp.py」のフルパス>"],
"env": {
"NEW_RELIC_API_KEY": "<NewRelicのAPIキー(NR・・・)>",
"NEW_RELIC_ACCOUNT_ID": "<NewRelicのアカウントID>"
}
}
}
}
正しく登録されると、MCP Serversに追加され、一覧のインジケータが緑色になります。
実際のNewRelic上の表示はこんな感じ。それっぽいですね。
おわりに
今回はCursorからMCP経由でNewRelicへ情報取得しましたが、
LLMとMCPを共にクラウド上にあげてやってみたいですね。
アラートが発生したらそれを契機にLLM→MCP→NewRelicと動いて情報取得し、
必要に応じて勝手にリカバリとかやって欲しいです。