observability-mcp

observability-mcp

MCP server for querying observability data from Elasticsearch, SkyWalking, and Prometheus/VictoriaMetrics, enabling AI models to search logs, traces, and metrics across environments.

Category
访问服务器

README

Observability MCP

这是一个可观测性 MCP 服务,让 AI 模型可以查询:

  • 正式环境的 Elasticsearch 日志
  • 测试环境的 SkyWalking 日志和 Trace
  • Prometheus 或 VictoriaMetrics 指标

服务使用 Streamable HTTP,MCP 地址为:

http://你的服务器IP:8000/mcp

健康检查地址为:

http://你的服务器IP:8000/health

1. 准备配置

项目配置放在 .env 文件中。先复制示例:

cp .env.example .env

然后编辑 .env

nano .env

至少需要检查下面这些配置:

# MCP 服务监听地址
MCP_HOST=0.0.0.0
MCP_PORT=8000

# Elasticsearch,多个地址使用英文逗号分隔
ES_URLS=http://es-node-1:9200,http://es-node-2:9200
ES_AUTH_TYPE=basic
ES_USERNAME=your-user
ES_PASSWORD=your-password
ES_DEFAULT_INDEX=*
ES_ALLOWED_INDEX_PATTERNS=*

# Prometheus 或 VictoriaMetrics
METRICS_API_BASE_URL=http://prometheus:9090/api/v1
METRICS_AUTH_TYPE=none

# SkyWalking OAP GraphQL 地址
SKYWALKING_GRAPHQL_URL=http://skywalking-oap:12800/graphql
SKYWALKING_AUTH_TYPE=none

认证方式支持:

  • none:不认证
  • basic:用户名和密码
  • bearer:Bearer Token
  • api_key:API Key

.env 中可能包含密码,不要把它提交到 Git 或发到公开环境。

2. Linux 使用 Python 启动

环境要求

  • Linux
  • Python 3.11 或更高版本
  • 可以访问 Elasticsearch、SkyWalking 和指标后端

安装

进入项目目录:

cd /path/to/mxmcp

创建 Python 虚拟环境:

python3 -m venv .venv

启用虚拟环境:

source .venv/bin/activate

安装依赖:

python -m pip install --upgrade pip
python -m pip install -r requirements.txt

.env 加载为环境变量:

set -a
source .env
set +a

启动服务:

python -m observability_mcp

看到服务监听 8000 端口后,打开另一个终端验证:

curl http://127.0.0.1:8000/health

停止服务时按 Ctrl+C

3. 使用 Docker Compose 启动

环境要求

  • Docker
  • Docker Compose

确认项目目录中已经有配置好的 .env,然后执行:

docker compose up -d --build

查看运行状态:

docker compose ps

查看日志:

docker compose logs -f observability-mcp

验证服务:

curl http://127.0.0.1:8000/health

停止服务:

docker compose down

更新代码后重新构建:

docker compose up -d --build

注意:容器中的 127.0.0.1 指向容器自己。如果 Elasticsearch、SkyWalking 或 Prometheus 在其他机器上,.env 中应填写那台机器可访问的 IP 或域名。

4. 连接 MCP 客户端

在支持 Streamable HTTP 的 MCP 客户端中填写:

http://服务器IP:8000/mcp

如果 MCP 客户端和服务在同一台机器,可以使用:

http://127.0.0.1:8000/mcp

环境选择规则已经写入 MCP instructions:

  • 用户提到测试环境或测试线:查询 SkyWalking
  • 用户提到正式环境或生产环境:查询 Elasticsearch
  • 用户没有说明环境:默认查询正式环境 Elasticsearch
  • 查询无结果时不会自动跨环境重试,而是提示确认环境

5. MCP 工具

日志工具

  • list_log_indices:列出 Elasticsearch 索引、Alias 或 Data Stream
  • search_logs:查询正式环境 Elasticsearch 日志
  • list_skywalking_services:列出测试环境 SkyWalking 服务
  • search_skywalking_logs:查询测试环境 SkyWalking 日志
  • get_skywalking_trace:查询测试环境 SkyWalking Trace

search_logs 支持的常用条件:

  • trace_id
  • node_ip
  • keyword
  • level
  • start_timeend_time
  • index
  • limit

建议尽量指定索引和时间范围。例如:

{
  "level": "ERROR",
  "node_ip": "zp-llm-app-12-193",
  "index": "applog-*",
  "start_time": "2026-08-07T00:00:00+08:00",
  "end_time": "2026-08-07T23:59:59+08:00",
  "limit": 20
}

如果响应中 has_moretrue,下一页只传 next_cursor

{
  "cursor": "lc_xxxxxxxxxxxxxxxxxxxxxxxx"
}

指标工具

  • query_instant:查询某个时刻的 PromQL
  • query_range:查询一段时间内的 PromQL
  • get_label_values:查询某个标签的可选值

6. 日志 Profile

日志字段配置位于:

config/log-profiles.yaml

Profile 用来告诉服务不同索引中的时间、消息、级别、Trace ID、节点和错误堆栈 分别存在哪些字段中。调用者不需要传 Profile,服务会根据索引自动选择。

默认规则包括:

  • filebeat-*logs-ecs-*:使用 ecs
  • applog-*:使用 offset-log
  • 其他索引:使用 generic

修改 Profile 后需要重启 MCP 服务。

7. 常见问题

服务无法启动

先检查 Python 版本和依赖:

python --version
python -m pip install -r requirements.txt

再确认 .env 已经加载。Linux Python 启动方式需要先执行:

set -a
source .env
set +a

无法连接 Elasticsearch 或指标后端

从 MCP 所在机器测试目标地址:

curl http://目标地址:端口

同时检查用户名、密码、防火墙和网络路由。

无法连接 SkyWalking

应连接 OAP 的 HTTP/GraphQL 端口,通常是 12800

SKYWALKING_GRAPHQL_URL=http://OAP地址:12800/graphql

30000 通常是 SkyWalking UI 端口,不是首选的 OAP GraphQL 地址。

日志查询很慢

避免同时使用下面两个条件:

  • index=*
  • 不设置开始和结束时间

推荐指定较小的索引范围和时间范围。limit=5 只限制返回数量,不代表 Elasticsearch 只检查 5 条数据。

8. 开发测试

安装开发依赖:

python -m pip install -r requirements-dev.txt

运行测试和代码检查:

python -m pytest -q
python -m ruff check .

License

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选