一个精简的MCP(模型上下文协议)服务器,提供LLM代理透明访问多个Prometheus实例进行指标分析和SRE操作。
该服务器使用现代FastMCP库实现MCP协议,允许LLM代理通过统一接口查询多个Prometheus实例。它支持发现、查询和分析Prometheus指标,并内置了安全验证和全面的可观测性。
@tool装饰器list_datasources:列出所有可用的Prometheus数据源list_metrics:从数据源获取所有可用的指标名称get_metric_metadata:获取特定指标的元数据query_instant:执行即时PromQL查询query_range:执行范围PromQL查询get_metric_labels:获取特定指标的所有标签名称get_label_values:获取特定标签的所有值find_metrics_by_pattern:查找匹配正则表达式模式的指标# 克隆并设置
git clone <repository-url>
cd proms-mcp
make install
# 1. 登录到目标集群并获取您的令牌
oc login https://api.your-cluster.example.com:6443
export OPENSHIFT_TOKEN=$(oc whoami -t)
# 2. 使用您的令牌创建数据源配置
# 这假设您的OpenShift令牌可用于在Prometheus上进行身份验证
cat > local_config/datasources.yaml << EOF
datasources:
- name: "my-prometheus"
type: "prometheus"
url: "https://prometheus.your-cluster.example.com"
jsonData:
httpHeaderName1: "Authorization"
secureJsonData:
httpHeaderValue1: "Bearer ${OPENSHIFT_TOKEN}"
EOF
# 3. 启动带有认证的服务器
make run-auth OPENSHIFT_API_URL=$(oc whoami --show-server)
# 或者不带认证运行服务器 - 与Prometheus的连接仍然会进行认证
make run
# 4. 配置您的MCP客户端(例如,使用Cursor和启用认证的proms-mcp)
cat > .cursor/mcp.json << EOF
{
"mcpServers": {
"proms-mcp-local-auth": {
"url": "http://localhost:8000/mcp/",
"headers": {
"Authorization": "Bearer ${OPENSHIFT_TOKEN}"
}
}
}
}
EOF
# 构建容器
podman build -t proms-mcp .
# 创建数据源配置(参见配置部分)
# 使用配置运行
podman run -p 8000:8000 \
-v ./datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml:ro \
proms-mcp
服务器支持两种认证模式:
开发(无认证):
{
"mcpServers": {
"proms-mcp-dev": {
"url": "http://localhost:8000/mcp/",
"description": "开发服务器 - 无认证"
}
}
}
生产(Bearer Token认证):
{
"mcpServers": {
"proms-mcp": {
"url": "https://proms-mcp.apps.cluster.example.com/mcp",
"headers": {
"Authorization": "Bearer your-openshift-token-here"
},
"description": "具有OpenShift Bearer令牌认证的生产服务器"
}
}
}
⚠️ 安全提示:永远不要将
.cursor/mcp.json中包含真实令牌的内容提交到Git。它已经在.gitignore中。
查看.cursor/mcp-examples.json以获取完整的配置示例,包括:
服务器通过HTTP暴露MCP:
POST http://localhost:8000/mcp/(或您部署的URL)application/jsonapplication/json, text/event-streamAUTH_MODE=active时,在Authorization头中使用Bearer令牌📝 路径行为:服务器使用
/mcp/(带尾部斜杠)以避免可能导致某些MCP客户端认证问题的HTTP 307重定向。始终在客户端配置中使用尾部斜杠。
PORT:MCP服务器端口(默认:8000)HEALTH_METRICS_PORT:健康和指标服务器端口(默认:8080)LOG_LEVEL:日志级别(默认:INFO)GRAFANA_DATASOURCES_PATH:数据源配置文件路径(默认:/etc/grafana/provisioning/datasources/datasources.yaml)QUERY_TIMEOUT:查询超时时间(秒,默认:30)服务器支持两种认证模式:
AUTH_MODE:认证模式(none或active,默认:active)OPENSHIFT_API_URL:OpenShift API服务器URL(Bearer令牌认证所需)OPENSHIFT_CA_CERT_PATH:CA证书文件路径(可选,仅需自定义证书时)# 显式禁用认证以供开发
AUTH_MODE=none uv run python -m proms_mcp
# 使用Bearer令牌认证运行
AUTH_MODE=active \
OPENSHIFT_API_URL=https://api.cluster.example.com:6443 \
uv run python -m proms_m
认证实现:
服务器使用Kubernetes TokenReview API进行自我验证以认证OpenShift Bearer令牌。每个用户的令牌自行验证 - 不需要特殊的RBAC权限。认证由与FastMCP认证系统集成的自定义TokenReviewVerifier处理。
创建Grafana数据源配置YAML文件。只有type: "prometheus"的数据源会被处理。
示例datasources.yaml:
apiVersion: 1
prune: true
datasources:
- name: "prod-prometheus"
type: "prometheus"
url: "https://prometheus-prod.example.com"
access: "proxy"
editable: false
jsonData:
httpHeaderName1: "Authorization"
secureJsonData:
httpHeaderValue1: "Bearer prod-token"
- name: "demo-prometheus"
type: "prometheus"
url: "https://demo.robustperception.io:9090"
access: "proxy"
editable: false
服务器实现了基本的安全检查:
使用提供的OpenShift模板进行部署:
# 开发部署(无认证)
oc process -f openshift/deploy.yaml \
-p IMAGE=quay.io/app-sre/proms-mcp \
-p IMAGE_TAG=latest \
-p AUTH_MODE=none \
| oc apply -f -
# 生产部署(Bearer令牌认证)
oc process -f openshift/deploy.yaml \
-p IMAGE=quay.io/app-sre/proms-mcp \
-p IMAGE_TAG=v1.0.0 \
-p AUTH_MODE=active \
-p OPENSHIFT_API_URL=https://api.cluster.example.com:6443 \
| oc apply -f -
# 不需要额外的RBAC设置 - 服务器使用自我验证
模板参数:
AUTH_MODE:none(开发)或active(生产,默认)OPENSHIFT_API_URL:OpenShift API服务器URL(默认:https://kubernetes.default.svc,针对集群内部)OPENSHIFT_CA_CERT_PATH:CA证书路径(默认:集群内部服务账户CA)NAMESPACE:目标命名空间(必需)HOSTNAME:路由主机名(必需){
"mcpServers": {
"proms-mcp-dev": {
"url": "http://localhost:8000/mcp"
}
}
}
{
"mcpServers": {
"proms-mcp": {
"url": "https://proms-mcp.apps.cluster.example.com/mcp",
"headers": {
"Authorization": "Bearer ${OPENSHIFT_TOKEN}"
}
}
}
}
获取您的OpenShift令牌:
export OPENSHIFT_TOKEN=$(oc whoami -t)
对于生产(Bearer令牌认证)部署:
proms-mcp-server(由模板创建) - 仅用于pod身份oc whoami -t)模板为pod身份创建ServiceAccount。由于认证使用自我验证,因此不需要ClusterRoleBindings或特殊权限。
make format # 格式化代码并修复导入
make lint # 检查代码并进行类型检查
make test # 运行测试并生成覆盖率报告
proms-mcp/
proms_mcp/ # 主要包
auth.py # 基于TokenReview的身份验证,与FastMCP集成
server.py # 包含8个MCP工具的FastMCP服务器
client.py # Prometheus API封装
config.py # 支持认证的配置解析器
monitoring.py # 健康/指标端点
logging.py # 结构化日志配置
tests/ # 测试套件(镜像包结构)
openshift/deploy.yaml # 带有RBAC支持的OpenShift模板
local_config/ # 本地开发配置
GRAFANA_DATASOURCES_PATH是否指向您的数据源文件datasources数组,其中包含type: "prometheus"条目make run,它会自动将路径设置为local_config/datasources.yamlsecureJsonData中的Bearer令牌QUERY_TIMEOUT环境变量application/json, text/event-streamLOG_LEVEL=DEBUG make run
curl http://localhost:8080/health
curl http://localhost:8080/metrics | grep mcp_
make format lint testApache License 2.0