16
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RaspberryPi4にGrafana MCP Serverを立ててClaude Codeから使ってみた

Last updated at Posted at 2025-12-02

## 目次

  1. 想定読者
  2. AI Influence Level (AIL)
  3. 前提環境
  4. MCPとは
  5. Grafana MCP Serverとは
  6. 導入
  7. 動作確認
  8. まとめ

## 想定読者

以下のような読者を想定しています。

  • Grafanaを利用していてダッシュボードの情報をAIで効率的に取得したい方
  • Grafana MCP Serverを立ててみたい方

## AI Influence Level (AIL)

この記事におけるAIの活用度はDaniel MiesslerのAI Influence Levelにおいて、
誤字脱字のチェックにのみ利用し、1: Human Created, Minor AI Assistanceに相当します。

public.avif
AI Influence Level (AIL) v1.0より引用

## 前提環境

我が家には簡易的な空気監視システムがあります。
BME280から取得した温湿度および大気圧をESP32経由でRaspberryPi4(以下、Raspi4)に送信しています。
Raspi4ではMosquitto, Node-RED, InfluxDB, Prometheus, Grafanaを利用し可視化しています。

なお、Linux kernelは「RaspberryPi4でOpenTelemetry eBPF Instrumentationを試してみた🔭」の記事でeBPFを有効にするために独自でビルドしたバージョンを利用しています。

項目 バージョン
Raspberry Pi OS Debian GNU/Linux 12 (bookworm)
Linux kernel 6.12.57-v8-beyla-compatible+
Docker 28.5.2

## MCPとは

MCP (Model Context Protocol) はAIを用いたアプリケーションと他のデータソースやコンポーネントとの接続のために標準化された通信方式を指します。公式ドキュメントにもあるように、電子機器のためのUSB Type-Cのようなものとよく例えられます。

そのためMCPを使えばAIを用いる世界において他のコンポーネントとの接続を容易にしてくれます。

Specificationの更新も頻繁に行われており、2025年12月3日現在、2025年11月25日にリリースされたSpecificationが最新となっています。

## Grafana MCP Serverとは

Grafana MCP ServerはGrafanaが公式で提供するMCP Serverです。このMCP Serverをホスティングすることによって、Claudeを始めとするAI AgentがGrafanaに関する情報を取得し様々な処理を行うことができます。

GitHubのREADMEによると下記のことを始めとして、Grafanaに関する情報であれば幅広く取得可能なようです。

  • ダッシュボードの検索、取得
  • データソースに関する情報の取得
  • Prometheusへのクエリ実行
  • Lokiへのクエリ実行
  • アラートルールの情報の取得

## 導入

### サービスアカウントの作成

まずは既に動作しているGrafanaに対して、Grafana MCP Serverのためのアクセストークンを発行します。

Home > Administration から Users and access を選択します。

スクリーンショット 2025-11-29 18.01.06.png

Users and access のうち Service accounts を選択します。

スクリーンショット 2025-11-29 18.01.45.png

ここでは、人間ではない機械ユーザのためのアカウントであるサービスアカウントの作成を行うことが可能です。
Add service accountから新規のサービスアカウントを作成します。

スクリーンショット 2025-11-29 18.01.55.png

ここでは以下のようにしています。閲覧権限のみであればViewerを、ダッシュボードの編集等も行いたい場合にはEditorを選択すると良いかと思います。

Display name: grafana-mcp-server
Role: Editor

スクリーンショット 2025-11-29 18.02.24.png

実際にサービスアカウントの作成が完了すると作成日時や権限の確認が可能となります。
現在はトークンの発行がされていないため、Add service account tokenよりトークンの発行を行います。

スクリーンショット 2025-11-29 18.04.15.png

トークンの表示名と有効期限を決めることができますが、ここはデフォルトのままにしています。

スクリーンショット 2025-11-29 18.04.50.png

### Grafana MCP Serverの起動

今回はDocker Containerでの起動を行います。また Raspi4上でAI Agentを動かさずに、外部の端末から動作させるためStreamable HTTPによる通信を行う方式で立てています。
先ほど発行したトークンはこちらで利用することで、Grafana MCP ServerがGrafanaの情報を取得することが可能になります。

docker pull mcp/grafana

docker run -d \
--name mcp-grafana \
--restart unless-stopped \
--network host \
-e GRAFANA_URL=http://localhost:3000 \
-e GRAFANA_SERVICE_ACCOUNT_TOKEN=<先に発行したトークン> \
mcp/grafana \
-t streamable-http

### Claude Codeの設定

最後にClaude Codeに対してMCP Serverの追加を行なっていきます。Grafana MCP ServerをStreamable HTTPでの通信を行うようにしたため、transport オプションには http を指定し、接続先のIPには Raspi4が立っているIPを指定します。

claude mcp add --transport http grafana http://<Raspi4 IP>:8000/mcp

今回はRaspi4への接続にTailscaleを利用しているため、MCP Serverに対する認証は省略していますが、接続元を制限していないIPでServerを公開する場合には、適宜認証を考えた方が良いかと思います。

## 動作確認

実際にClaude CodeがGrafana MCP Serverに接続できているかclaude mcp listから確かめてみます。

grafana-mcp % claude mcp list
Checking MCP server health...

grafana: http://<Raspi4 IP>:8000/mcp (HTTP) - ✓ Connected

問題なく接続できてますね。

/mcpからもGrafana MCP Serverが有している56 Toolsが取得出来ています。

スクリーンショット 2025-11-29 21.02.55.png

Grafanaのダッシュボード一覧の取得を試みると、Claudeが認識して Search dashboards のツールを自動的に利用しようとしています。

スクリーンショット 2025-11-29 21.04.39.png

現在Grafana上に存在する3つのダッシュボードを取得してくれました。このうち空気監視のためのダッシュボードであるAirに関してもう少し聞いてみましょう。

スクリーンショット 2025-11-29 21.06.03.png

ダッシュボードから取得可能な情報も全て表示できていますね。

スクリーンショット 2025-11-29 21.12.31.png

実際のダッシュボードは以下のようなものです。ちゃんと取れていて良い感じですね。

スクリーンショット 2025-11-29 21.21.03.png

Grafana MCP Serverが立っている Raspi4のパフォーマンスに関する懸念も聞いてみましょう。

スクリーンショット 2025-11-29 21.26.37.png

メトリクスデータはPrometheusに格納しているため、実際にQueryを実行してから判断してくれていますね。

> では Raspi4のパフォーマンスにおいて懸念されることはある?

⏺ Airダッシュボードのデータから、Raspberry Pi 4のパフォーマンスに関する懸念事項を分析するため、現在のメトリクスを取得します。

⏺ grafana - Query Prometheus metrics (MCP)(datasourceUid: "cevz7aexb1erkf", expr: "100 * (1 - avg(rate(node_cpu_seconds_total{mode=\"idle\", instance=\"localhost:9100\"}[5m])))", queryType: "instant",
                                          startTime: "now")
  ⎿  [
       {
         "metric": {},
     … +6 lines (ctrl+o to expand)

⏺ grafana - Query Prometheus metrics (MCP)(datasourceUid: "cevz7aexb1erkf", expr: "(1 - (node_memory_MemAvailable_bytes{instance=\"localhost:9100\", job=\"node\"} /
                                          node_memory_MemTotal_bytes{instance=\"localhost:9100\", job=\"node\"})) * 100", queryType: "instant", startTime: "now")
  ⎿  [
       {
         "metric": {
     … +9 lines (ctrl+o to expand)

⏺ grafana - Query Prometheus metrics (MCP)(datasourceUid: "cevz7aexb1erkf", expr: "((node_memory_SwapTotal_bytes{instance=\"localhost:9100\",job=\"node\"} -
                                          node_memory_SwapFree_bytes{instance=\"localhost:9100\",job=\"node\"}) / (node_memory_SwapTotal_bytes{instance=\"localhost:9100\",job=\"node\"})) * 100", queryType:
                                          "instant", startTime: "now")
  ⎿  [
       {
         "metric": {
     … +9 lines (ctrl+o to expand)

⏺ grafana - Query Prometheus metrics (MCP)(datasourceUid: "cevz7aexb1erkf", expr: "node_thermal_zone_temp{instance=\"localhost:9100\"}", queryType: "instant", startTime: "now")
  ⎿  [
       {
         "metric": {
     … +12 lines (ctrl+o to expand)

⏺ grafana - Query Prometheus metrics (MCP)(datasourceUid: "cevz7aexb1erkf", expr: "((node_filesystem_size_bytes{instance=\"localhost:9100\", job=\"node\", mountpoint=\"/\", fstype!=\"rootfs\"} -
                                          node_filesystem_avail_bytes{instance=\"localhost:9100\", job=\"node\", mountpoint=\"/\", fstype!=\"rootfs\"}) /
                                          node_filesystem_size_bytes{instance=\"localhost:9100\", job=\"node\", mountpoint=\"/\", fstype!=\"rootfs\"}) * 100", queryType: "instant", startTime: "now")
  ⎿  [
       {
         "metric": {
     … +12 lines (ctrl+o to expand)

## まとめ

認証認可を考えない限り、MCP Serverを立ててStreamable HTTPで通信すること自体は簡単で、Raspi4で動作させることも問題ありませんでした。

Grafanaが公式でサポートしているため、Prometheusに格納されているデータであればQueryを実行して情報を取得できました。ただし今回のように一部データをInfluxDBに格納しているケースでは、Grafana MCP Serverが未対応のため情報を取得できませんでした。

今回は動作確認するところまでは出来ていませんが、有用なユースケースとしては以下のようなものがありそうです。

  • 既にGrafanaのダッシュボードが存在しており、なおかつPrometheusやLokiを利用している中で、情報量が多く追っていくのが大変な状況における情報把握
  • Grafanaのアラート機能を利用しており、PrometheusやLokiへのQuery検索を伴う調査、対応

Grafana MCP Serverは2025年12月3日現在、v0.7.9でありメジャーリリースは行われていないため、今後のアップデートにも注目して情報を追っていきたいですね。

16
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?