mcpField
M
MCP Server for Perses

MCP Server for Perses

ローカル
github.com/persesデータ・分析323 週間前に更新

MCP Server for Perses について

MCP Server for Perses は、ローカルで動作する MCP サーバーで、OpenCode、Claude Desktop、VS Code、Cursor などの LLM ホストから標準的な方法で Perses アプリケーションを操作できます。Perses でダッシュボードやデータソースを管理するチーム向けです。

主な機能

  1. 01stdio と Streamable HTTP の両トランスポートに対応
  2. 02プロジェクト、ダッシュボード、エフェメラルダッシュボードの管理
  3. 03グローバルおよびプロジェクトのデータソース管理とプロキシクエリ
  4. 04読み取り専用モードによる書き込み操作の無効化
  5. 05基本認証と Bearer トークン認証

活用シーン

  1. 01AI クライアントやエディターから Perses のダッシュボードを参照・編集する
  2. 02Perses のプロキシ経由でデータソースバックエンドにクエリを送信する
  3. 03Grafana のダッシュボードを Perses へ移行する

MCP 対応

本プロジェクトは MCP サーバーとして、Perses のプロジェクト、ダッシュボード、データソース、ロールなどを管理するツールを MCP クライアントに公開します。リソースグループは resources 設定項目で個別に選択できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Perses

Perses 用 MCP サーバー

概要

Perses MCP サーバーは、LLM ホスト(OpenCode、Claude Desktop、VS Code、Cursor)が Perses アプリケーションと標準化された方法で連携できるようにするローカルの Model Context Protocol (MCP) サーバーです。

デモ

OpenCode

https://github.com/user-attachments/assets/03706209-abef-47f2-8067-67c723537750

はじめに

前提条件
  • 実行中の Perses インスタンス
  • MCP サーバーのバイナリ — リリースページ からダウンロードし、展開して実行可能にします:
    chmod +x /path/to/perses-mcp-server
    
1. 設定ファイルを作成する

YAML 設定ファイル(例:perses-mcp-config.yaml)を作成します。各認証方法の詳細については 認証 を参照してください。

# MCP transport mode: "stdio" or "http"
transport: stdio

# Address to listen on for HTTP transport (e.g., ":8000")
listen_address: ":8000"

# Restrict the server to read-only operations
read_only: false

# Comma-separated list of resources to register (if empty, all resources are registered)
resources: ""

# Perses server connection configuration
perses_server:
  url: "http://localhost:8080"

  # Authentication (choose one method):
  # It is recommended to use environment variables for sensitive values.
  # Refer the "Environment Variables" section.

  # Option 1: Basic authentication (login/password)
  # native_auth:
  #   login: "admin"
  #   password: "password"

  # Option 2: Bearer token (e.g., from `percli whoami --show-token`)
  # authorization:
  #   type: Bearer
  #   credentials: "<YOUR_TOKEN>"
  #   # credentials_file: "/path/to/token/file"  # Alternative: read token from file

  # TLS configuration (optional)
  # tls_config:
  #   ca_file: "/path/to/ca.pem"
  #   insecure_skip_verify: false

メモ

設定値は次の順序で解決されます(後のものが優先):組み込みのデフォルト < YAML 設定ファイル < 環境変数。

利用可能なリソース

resources フィールドには、以下のリソース名を指定できます(大文字と小文字を区別しません、カンマ区切り):

リソース説明
dashboardダッシュボード管理ツール
ephemeraldashboardエフェメラルダッシュボード管理ツール
projectプロジェクト管理ツール
datasourceプロジェクトレベルのデータソースツール
globaldatasourceグローバルデータソースツール
roleプロジェクトレベルのロールツール
globalroleグローバルロールツール
rolebindingプロジェクトレベルのロールバインディングツール
globalrolebindingグローバルロールバインディングツール
variableプロジェクトレベルの変数ツール
globalvariableグローバル変数ツール
pluginプラグインツール
migrateGrafana → Perses ダッシュボード移行ツール
環境変数

YAML ファイルの設定値は、PERMCP_ プレフィックスを付けた環境変数で上書きできます。変数名は、各 YAML キーを大文字にし、ネストされたキーを _ で連結して生成されます。

たとえば、YAML パス perses_server.native_auth.password は PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD になります。

これは、設定ファイルに保存すべきでないパスワードやトークンなどの機密値に特に便利です。

環境変数設定パス説明
PERMCP_TRANSPORTtransportトランスポートモード
PERMCP_LISTEN_ADDRESSlisten_addressHTTP リッスンアドレス
PERMCP_READ_ONLYread_only読み取り専用モード
PERMCP_RESOURCESresources登録するリソース
PERMCP_PERSES_SERVER_URLperses_server.urlPerses サーバーの URL
PERMCP_PERSES_SERVER_NATIVE_AUTH_LOGINperses_server.native_auth.loginBasic 認証のユーザー名
PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORDperses_server.native_auth.passwordBasic 認証のパスワード
PERMCP_PERSES_SERVER_AUTHORIZATION_TYPEperses_server.authorization.type認証タイプ(例:Bearer)
PERMCP_PERSES_SERVER_AUTHORIZATION_CREDENTIALSperses_server.authorization.credentials認証トークン

環境変数が設定ファイルを上書きする方法の詳細については、Perses 設定ドキュメント を参照してください。

2. MCP サーバーをクライアントに追加する

標準設定はほとんどのクライアントで動作します:

{
  "mcpServers": {
    "perses-mcp": {
      "command": "<ABSOLUTE_PATH_TO_PERSES_MCP_BINARY>",
      "args": [
        "--config",
        "<ABSOLUTE_PATH_TO_CONFIG_YAML>"
      ]
    }
  }
}

ヒント

機密性の高い認証情報は、設定ファイルに保存するのではなく、環境変数として渡してください:

Basic 認証: PERMCP_PERSES_SERVER_NATIVE_AUTH_LOGIN と PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD

Bearer トークン: PERMCP_PERSES_SERVER_AUTHORIZATION_CREDENTIALS

完全なリストについては環境変数を参照してください。

OpenCode

OpenCode 設定の mcp の下に以下を追加してください。詳細は OpenCode MCP ドキュメントを参照してください。

{
  "mcp": {
    "perses": {
      "command": [
        "<ABSOLUTE_PATH_TO_PERSES_MCP_BINARY>",
        "--config",
        "<ABSOLUTE_PATH_TO_CONFIG_YAML>"
      ],
      "environment": {
        "PERMCP_PERSES_SERVER_NATIVE_AUTH_LOGIN": "{env:PERMCP_PERSES_SERVER_NATIVE_AUTH_LOGIN}",
        "PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD": "{env:PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD}"
      },
      "enabled": true,
      "type": "local"
    }
  }
}
Claude Code

Claude Code CLI を使用して Perses MCP サーバーを追加します。詳細は Claude Code MCP ドキュメントを参照してください。

claude mcp add --transport stdio \
  --env PERMCP_PERSES_SERVER_NATIVE_AUTH_LOGIN=<YOUR_LOGIN> \
  --env PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD=<YOUR_PASSWORD> \
  perses-mcp -- <ABSOLUTE_PATH_TO_PERSES_MCP_BINARY> --config <ABSOLUTE_PATH_TO_CONFIG_YAML>
Claude Desktop

Claude Desktop の設定ファイルを次の場所に作成または編集します:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

このファイルには Claude > Settings > Developer > Edit Config からアクセスすることもできます。

{
  "mcpServers": {
    "perses-mcp": {
      "command": "<ABSOLUTE_PATH_TO_PERSES_MCP_BINARY>",
      "args": [
        "--config",
        "<ABSOLUTE_PATH_TO_CONFIG_YAML>"
      ],
      "env": {
        "PERMCP_PERSES_SERVER_NATIVE_AUTH_LOGIN": "<YOUR_LOGIN>",
        "PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD": "<YOUR_PASSWORD>"
      }
    }
  }
}

変更を反映するには Claude Desktop を再起動してください。

VS Code

VS Code の MCP 設定ファイルに以下を追加してください。詳細は VS Code MCP ドキュメントを参照してください。

{
  "servers": {
    "perses-mcp": {
      "command": "<ABSOLUTE_PATH_TO_PERSES_MCP_BINARY>",
      "args": [
        "--config",
        "<ABSOLUTE_PATH_TO_CONFIG_YAML>"
      ],
      "env": {
        "PERMCP_PERSES_SERVER_NATIVE_AUTH_LOGIN": "<YOUR_LOGIN>",
        "PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD": "<YOUR_PASSWORD>"
      }
    }
  }
}

Streamable HTTP モード

Streamable HTTP モードでは、MCP サーバーが HTTP 経由で LLM ホストと通信できるようになります。これはリモートホスティングや、複数のクライアントが同じサーバーインスタンスに接続する場合に便利です。

詳細は MCP プロトコル仕様ドキュメントを参照してください。

設定ファイルで transport: http を設定します:

transport: http
listen_address: ":8000"
perses_server:
  url: "http://localhost:8080"
  native_auth:
    login: "admin"
    password: "password"

次に、MCP クライアントを HTTP エンドポイントに向けます:

VS Code
{
  "servers": {
    "perses-http": {
      "type": "http",
      "url": "http://localhost:8000/mcp"
    }
  }
}

認証

Perses インスタンスで MCP サーバーを認証する方法は 2 つあります。設定ファイルの perses_server の下に関連するブロックを追加してください。

Basic 認証 (ユーザー名/パスワード)

Perses のユーザー名とパスワードをそのまま使用します:

native_auth:
  login: "your-username"
  password: "your-password"
Bearer トークン (percli 経由)
  1. percli をインストールし、Perses サーバーにログインします:
percli login <PERSES_SERVER_URL>

例えば、percli login https://demo.perses.dev

  1. ログインに成功したら、トークンを取得します:
percli whoami --show-token
  1. 設定ファイルでトークンを使用します:
authorization:
  type: Bearer
  credentials: "<YOUR_TOKEN>"

警告

Bearer トークンは、Perses サーバーの access_token_ttl 設定 (デフォルト: 15 分) に基づいて自動的に期限切れになります。これは Perses アプリの設定で変更できます。

コマンドラインでの使用方法

perses-mcp-server --config /path/to/config.yaml
FlagDefaultDescription
--config""YAML 設定ファイルへのパス
-log.levelinfoログレベル (オプション: panic、fatal、error、warning、info、debug、trace)
-log.formattextログ形式 (オプション: text、json)
-log.method-tracefalse呼び出し元のメソッドをログのフィールドとして含める

ツール

メモ


読み取り専用モード (設定で read_only: true) で実行している場合、情報を取得するツールのみが利用可能です。すべての書き込み操作 (作成、更新、削除) は読み取り専用モードでは無効になります。

プロジェクト
ツール説明必須パラメータ
perses_list_projectsすべてのプロジェクトを一覧表示します-
perses_get_project_by_name名前でプロジェクトを取得しますname
perses_create_project新しいプロジェクトを作成しますproject
perses_update_project既存のプロジェクトを更新しますname
perses_delete_projectプロジェクトを削除しますname
ダッシュボード
ツール説明必須パラメータ
perses_list_dashboards特定のプロジェクトのすべてのダッシュボードを一覧表示しますproject
perses_get_dashboard_by_nameプロジェクトのダッシュボードを名前で取得しますproject, name
perses_create_dashboardプロジェクトとダッシュボード設定を指定してダッシュボードを作成しますproject, dashboard
perses_update_dashboardプロジェクト内の既存のダッシュボードを更新しますproject, dashboard
perses_delete_dashboardプロジェクトからダッシュボードを削除しますproject, name

ダッシュボードの設定については、Perses Dashboards を参照してください。

エフェメラルダッシュボード

エフェメラルダッシュボードは、TTL (time-to-live) を持つ一時的なダッシュボードです。有効期限が切れると自動的にクリーンアップされます。

ツール説明必須パラメータ
perses_list_ephemeral_dashboards特定のプロジェクトのすべてのエフェメラルダッシュボードを一覧表示しますproject
perses_get_ephemeral_dashboard_by_nameプロジェクトのエフェメラルダッシュボードを名前で取得しますproject, name
perses_create_ephemeral_dashboardプロジェクトとダッシュボード設定を指定してエフェメラルダッシュボードを作成しますproject, dashboard
perses_update_ephemeral_dashboardプロジェクト内の既存のエフェメラルダッシュボードを更新しますproject, dashboard
perses_delete_ephemeral_dashboardプロジェクトからエフェメラルダッシュボードを削除しますproject, name

エフェメラルダッシュボードの設定については、Perses EphemeralDashboard を参照してください。

データソース
ツール説明必須パラメータオプションパラメータ
perses_list_global_datasourcesすべてのグローバルデータソースを一覧表示します--
perses_get_global_datasource_by_name名前でグローバルデータソースを取得しますname-
perses_query_global_datasourcePerses プロキシ経由でグローバルデータソースのバックエンドに HTTP リクエストを送信しますdatasource_namemethod、path、query_params、body、headers
perses_create_global_datasource新しいグローバルデータソースを作成しますname、type、urldisplay_name、proxy_type
perses_update_global_datasource既存のグローバルデータソースを更新しますname、type、urldisplay_name、proxy_type
perses_delete_global_datasourceグローバルデータソースを削除しますname-
perses_list_project_datasources特定のプロジェクトのすべてのデータソースを一覧表示しますproject-
perses_get_project_datasource_by_name名前でプロジェクトデータソースを取得しますproject、name-
perses_query_project_datasourcePerses プロキシ経由でプロジェクトデータソースのバックエンドに HTTP リクエストを送信しますproject、datasource_namemethod、path、query_params、body、headers
perses_create_project_datasourceプロジェクトに新しいデータソースを作成しますproject、datasource-
perses_update_project_datasourceプロジェクトの既存のデータソースを更新しますproject、datasource-
perses_delete_project_datasourceプロジェクトからデータソースを削除しますproject、name-
データソースのクエリ

perses_query_project_datasource と perses_query_global_datasource は、Perses プロキシ経由で設定済みのデータソースバックエンドに HTTP リクエストを転送します。つまり:

  • 認証情報は自動的に注入されます — Perses で設定されたデータソースのシークレット (Bearer トークン、Basic 認証、OAuth) はサーバー側で適用され、ツールの呼び出し元に公開されることはありません。
  • 許可されたエンドポイントが強制されます — データソースの allowedEndpoints 設定で許可されたエンドポイントにのみ到達できます。
  • method のデフォルトは GET です。GET と POST のみを受け付けます。
  • path はデータソースからの相対エンドポイントパスです。たとえば Prometheus では /api/v1/query_range、Loki では /loki/api/v1/query_range です。
  • query_params はクエリ文字列パラメータとして追加されるキー/値の文字列ペアのオブジェクトです。
  • body は生の文字列ボディです (JSON または application/x-www-form-urlencoded)。ボディが指定された場合、Content-Type のデフォルトは application/json です。
  • headers を使用すると、追加のリクエストヘッダーを渡せます。Authorization ヘッダーはツール入力では常にブロックされます。認証には Perses のシークレットを使用してください。
  • レスポンスボディは、LLM のコンテキスト制限を超えないよう、1 MiB に制限されます。

例 — グローバルデータソース経由の Prometheus インスタントクエリ:

{
  "datasource_name": "my-prometheus",
  "method": "POST",
  "path": "/api/v1/query",
  "query_params": {
    "query": "up",
    "time": "2024-01-01T00:00:00Z"
  }
}

例 — プロジェクトデータソース経由の Prometheus レンジクエリ:

{
  "project": "my-project",
  "datasource_name": "my-prometheus",
  "method": "POST",
  "path": "/api/v1/query_range",
  "query_params": {
    "query": "rate(http_requests_total[5m])",
    "start": "2024-01-01T00:00:00Z",
    "end": "2024-01-01T01:00:00Z",
    "step": "60"
  }
}
ロール
ツール説明必須パラメータ
perses_list_global_rolesすべてのグローバルロールを一覧表示します-
perses_get_global_role_by_name名前でグローバルロールを取得しますname
perses_create_global_role新しいグローバルロールを作成しますname, actions, scopes
perses_update_global_role既存のグローバルロールを更新しますname, actions, scopes
perses_delete_global_roleグローバルロールを削除しますname
perses_list_global_role_bindingsすべてのグローバルロールバインディングを一覧表示します-
perses_get_global_role_binding_by_name名前でグローバルロールバインディングを取得しますname
perses_create_global_role_binding新しいグローバルロールバインディングを作成しますname, role, subjects
perses_update_global_role_binding既存のグローバルロールバインディングを更新しますname, role, subjects
perses_delete_global_role_bindingグローバルロールバインディングを削除しますname
perses_list_project_roles特定のプロジェクトのすべてのロールを一覧表示しますproject
perses_get_project_role_by_name名前でプロジェクトロールを取得しますproject, name
perses_create_project_role新しいプロジェクトロールを作成しますproject, name, actions, scopes
perses_update_project_role既存のプロジェクトロールを更新しますproject, name, actions, scopes
perses_delete_project_roleプロジェクトロールを削除しますproject, name
perses_list_project_role_bindingsプロジェクトのすべてのロールバインディングを一覧表示しますproject
perses_get_project_role_binding_by_name名前でプロジェクトロールバインディングを取得しますproject, name
perses_create_project_role_binding新しいプロジェクトロールバインディングを作成しますproject, name, role, subjects
perses_update_project_role_binding既存のプロジェクトロールバインディングを更新しますproject, name, role, subjects
perses_delete_project_role_bindingプロジェクトロールバインディングを削除しますproject, name
プラグイン
ツール説明必須パラメータ
perses_list_pluginsすべてのプラグインを一覧表示します-
変数
ツール説明必須パラメータ
perses_list_global_variablesすべてのグローバル変数を一覧表示します-
perses_get_global_variable_by_name名前でグローバル変数を取得しますname
perses_create_global_variable新しいグローバル変数を作成しますname, value
perses_update_global_variable既存のグローバル変数を更新しますname, value
perses_delete_global_variableグローバル変数を削除しますname
perses_list_project_variables特定のプロジェクトのすべての変数を一覧表示しますproject
perses_get_project_variable_by_name名前でプロジェクト変数を取得しますproject, name
perses_create_project_variableプロジェクトレベルの変数を作成しますname, project
perses_update_project_variable既存のプロジェクト変数を更新しますproject, name, value
perses_delete_project_variableプロジェクト変数を削除しますproject, name

ローカル開発

ソースからのビルド

MCP サーバーをソースコードからビルドしたい場合(開発またはコントリビューション目的)、ソースコードのルートディレクトリで次のコマンドを実行します。

make build

これにより、mcp-server という名前のバイナリを含む bin ディレクトリが作成されます。MCP サーバーの設定で使用するために、このバイナリの絶対パスをコピーしてください。

ライセンス

このコードは Apache 2.0 ライセンスの下でライセンスされています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。