MCP Server for Perses について
MCP Server for Perses は、ローカルで動作する MCP サーバーで、OpenCode、Claude Desktop、VS Code、Cursor などの LLM ホストから標準的な方法で Perses アプリケーションを操作できます。Perses でダッシュボードやデータソースを管理するチーム向けです。
主な機能
- 01stdio と Streamable HTTP の両トランスポートに対応
- 02プロジェクト、ダッシュボード、エフェメラルダッシュボードの管理
- 03グローバルおよびプロジェクトのデータソース管理とプロキシクエリ
- 04読み取り専用モードによる書き込み操作の無効化
- 05基本認証と Bearer トークン認証
活用シーン
- 01AI クライアントやエディターから Perses のダッシュボードを参照・編集する
- 02Perses のプロキシ経由でデータソースバックエンドにクエリを送信する
- 03Grafana のダッシュボードを Perses へ移行する
MCP 対応
本プロジェクトは MCP サーバーとして、Perses のプロジェクト、ダッシュボード、データソース、ロールなどを管理するツールを MCP クライアントに公開します。リソースグループは resources 設定項目で個別に選択できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
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 | プラグインツール |
migrate | Grafana → Perses ダッシュボード移行ツール |
環境変数
YAML ファイルの設定値は、PERMCP_ プレフィックスを付けた環境変数で上書きできます。変数名は、各 YAML キーを大文字にし、ネストされたキーを _ で連結して生成されます。
たとえば、YAML パス perses_server.native_auth.password は PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD になります。
これは、設定ファイルに保存すべきでないパスワードやトークンなどの機密値に特に便利です。
| 環境変数 | 設定パス | 説明 |
|---|---|---|
PERMCP_TRANSPORT | transport | トランスポートモード |
PERMCP_LISTEN_ADDRESS | listen_address | HTTP リッスンアドレス |
PERMCP_READ_ONLY | read_only | 読み取り専用モード |
PERMCP_RESOURCES | resources | 登録するリソース |
PERMCP_PERSES_SERVER_URL | perses_server.url | Perses サーバーの URL |
PERMCP_PERSES_SERVER_NATIVE_AUTH_LOGIN | perses_server.native_auth.login | Basic 認証のユーザー名 |
PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD | perses_server.native_auth.password | Basic 認証のパスワード |
PERMCP_PERSES_SERVER_AUTHORIZATION_TYPE | perses_server.authorization.type | 認証タイプ(例:Bearer) |
PERMCP_PERSES_SERVER_AUTHORIZATION_CREDENTIALS | perses_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_PASSWORDBearer トークン:
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 経由)
- percli をインストールし、Perses サーバーにログインします:
percli login <PERSES_SERVER_URL>
例えば、percli login https://demo.perses.dev
- ログインに成功したら、トークンを取得します:
percli whoami --show-token
- 設定ファイルでトークンを使用します:
authorization:
type: Bearer
credentials: "<YOUR_TOKEN>"
警告
Bearer トークンは、Perses サーバーの
access_token_ttl設定 (デフォルト: 15 分) に基づいて自動的に期限切れになります。これは Perses アプリの設定で変更できます。
コマンドラインでの使用方法
perses-mcp-server --config /path/to/config.yaml
| Flag | Default | Description |
|---|---|---|
--config | "" | YAML 設定ファイルへのパス |
-log.level | info | ログレベル (オプション: panic、fatal、error、warning、info、debug、trace) |
-log.format | text | ログ形式 (オプション: text、json) |
-log.method-trace | false | 呼び出し元のメソッドをログのフィールドとして含める |
ツール
メモ
読み取り専用モード (設定で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_datasource | Perses プロキシ経由でグローバルデータソースのバックエンドに HTTP リクエストを送信します | datasource_name | method、path、query_params、body、headers |
perses_create_global_datasource | 新しいグローバルデータソースを作成します | name、type、url | display_name、proxy_type |
perses_update_global_datasource | 既存のグローバルデータソースを更新します | name、type、url | display_name、proxy_type |
perses_delete_global_datasource | グローバルデータソースを削除します | name | - |
perses_list_project_datasources | 特定のプロジェクトのすべてのデータソースを一覧表示します | project | - |
perses_get_project_datasource_by_name | 名前でプロジェクトデータソースを取得します | project、name | - |
perses_query_project_datasource | Perses プロキシ経由でプロジェクトデータソースのバックエンドに HTTP リクエストを送信します | project、datasource_name | method、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 ライセンスの下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。