关于 MCP Server for Perses
MCP Server for Perses 是一个本地运行的 MCP 服务,使 OpenCode、Claude Desktop、VS Code、Cursor 等 LLM 宿主能够以标准方式操作 Perses 应用。适合使用 Perses 管理仪表盘与数据源的团队。
主要功能
- 01支持 stdio 与 Streamable HTTP 两种传输模式
- 02管理项目、仪表盘与临时仪表盘
- 03管理全局与项目级数据源并可代理查询
- 04可通过只读模式限制写操作
- 05支持基本认证与 Bearer 令牌认证
适用场景
- 01在编辑器或 AI 客户端中查询与编辑 Perses 仪表盘
- 02通过 Perses 代理向数据源后端发送查询请求
- 03将 Grafana 仪表盘迁移到 Perses
MCP 相关
该项目是一个 MCP 服务,向 MCP 客户端暴露用于管理 Perses 项目、仪表盘、数据源、角色等资源的工具。部分资源可通过 resources 配置项选择性注册。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Perses 的 MCP 服务
概述
Perses MCP 服务是一个本地 Model Context Protocol (MCP) 服务,可让大模型宿主(OpenCode、Claude Desktop、VS Code、Cursor)以标准化方式与 Perses 应用交互。
演示
OpenCode
https://github.com/user-attachments/assets/03706209-abef-47f2-8067-67c723537750
入门
先决条件
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 | 基本身份验证用户名 |
PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORD | perses_server.native_auth.password | 基本身份验证密码 |
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>"
]
}
}
}
提示
请将敏感的身份验证值作为环境变量传递,而不是存储在配置文件中:
基本身份验证:
PERMCP_PERSES_SERVER_NATIVE_AUTH_LOGIN和PERMCP_PERSES_SERVER_NATIVE_AUTH_PASSWORDBearer 令牌:
PERMCP_PERSES_SERVER_AUTHORIZATION_CREDENTIALS完整列表请参阅环境变量。
OpenCode
将以下内容添加到 mcp 下的 OpenCode 配置中。更多详情请参阅 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 与大模型宿主通信。这适用于远程托管,或允许多个客户端连接到同一个服务实例。
更多详情请参阅 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 服务进行身份验证。在配置文件的 perses_server 下添加相应配置块。
基本身份验证(用户名/密码)
直接使用 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
| 标志 | 默认值 | 描述 |
|---|---|---|
--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 仪表板
临时仪表板
临时仪表板是带有 TTL(生存时间)的临时仪表板。过期后会自动清理。
| 工具 | 描述 | 必需参数 |
|---|---|---|
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 临时仪表板
数据源
| 工具 | 描述 | 必填参数 | 可选参数 |
|---|---|---|---|
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 密钥进行身份验证。- 响应正文上限为 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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。