Alibaba Cloud Observability

Access Alibaba Cloud observability products such as SLS, ARMS, and CloudMonitor.

阿里云可观测 MCP Server(Go 版)


📌 重要提示

本项目已使用 Go 语言重构。如需使用原 Python 版本,请访问 v1 目录:

  • 📖 v1/README.md - Python 版本文档
  • 📦 Python 版本通过 pip install mcp-server-aliyun-observability 安装

阿里云可观测 MCP Server 的 Go 语言实现,为 AI 模型提供对阿里云日志服务(SLS)和云监控(CMS)的结构化数据访问能力。基于 Model Context Protocol 协议,可与 Cursor、Kiro、Cline、Windsurf 等 AI 工具无缝集成。

特性

  • 支持 stdio、SSE、streamable-http 三种传输模式
  • 模块化工具集架构:PaaS(云监控 2.0)、IaaS(SLS/CMS 直接访问)、Shared
  • 灵活的时间表达式解析:相对时间、绝对时间戳、Grafana 风格、预设关键词
  • 时序数据对比分析:统计计算、趋势分析、差异评分
  • 结构化错误处理:中文错误描述和解决方案建议
  • 稳定性保障:重试(指数退避)、熔断器、优雅关闭
  • 结构化 JSON 日志(slog)
  • 单一二进制文件,零运行时依赖

快速开始

下载与安装

Releases 页面下载对应平台的二进制文件:

# Linux amd64
wget https://github.com/aliyun/alibabacloud-observability-mcp-server/releases/latest/download/alibabacloud-observability-mcp-server-linux-amd64.tar.gz
tar -xzf alibabacloud-observability-mcp-server-linux-amd64.tar.gz

# macOS arm64 (M1/M2)
wget https://github.com/aliyun/alibabacloud-observability-mcp-server/releases/latest/download/alibabacloud-observability-mcp-server-darwin-arm64.tar.gz
tar -xzf alibabacloud-observability-mcp-server-darwin-arm64.tar.gz

解压后包含:

  • alibabacloud-observability-mcp-server - 可执行文件
  • config.yaml - 默认配置文件

配置凭证

# 设置阿里云 AccessKey
export ALIBABA_CLOUD_ACCESS_KEY_ID=<your_access_key_id>
export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<your_access_key_secret>

AccessKey 获取方式:阿里云 AccessKey 管理

启动服务

# stdio的方式启动
./alibabacloud-observability-mcp-server start --stdio

# 以sse的方式启动(默认的transport 在config.yaml中设置sse/streamable-http)
./alibabacloud-observability-mcp-server start --config config.yaml

CLI 命令

# 查看版本信息
./alibabacloud-observability-mcp-server version

# 列出所有已注册工具
./alibabacloud-observability-mcp-server tools

从源码构建

前置条件

  • Go 1.22+

构建

# 克隆仓库
git clone https://github.com/aliyun/alibabacloud-observability-mcp-server.git
cd alibabacloud-observability-mcp-server

# 构建当前平台
make build

# 构建所有平台
make build-all

生成的二进制文件位于 bin/ 目录。

配置

配置采用两层结构:

  1. config.yaml - 服务器配置(传输模式、日志、网络等)
  2. .env 文件或环境变量 - 凭证和运行时参数

配置文件

复制示例文件开始配置:

cp config.yaml config.yaml.bak       # 备份默认配置(可选)
cp .env.example .env                  # 凭证(AccessKey)

config.yaml 搜索路径:当前目录 → ./config/

.env 文件从当前目录加载,适合存放不宜提交到版本控制的凭证信息。

config.yaml 结构

# 服务器配置
server:
  transport: streamable-http  # stdio, sse, streamable-http
  host: "0.0.0.0"
  port: 8080

# 日志配置
logging:
  level: info                 # debug, info, warn, error
  debug_mode: false

# 工具集配置
toolkit:
  scope: all                  # all, paas, iaas
  # 精细化工具选择(可选,非空时仅注册列表中的工具)
  # enabled_tools:
  #   - list_workspace
  #   - umodel_get_entities
  #   - sls_query_logstore

# 网络配置
network:
  max_retry: 1
  retry_wait_seconds: 1
  read_timeout_ms: 610000
  connect_timeout_ms: 30000

# 本地化配置
locale:
  timezone: Asia/Shanghai
  language: zh-CN

精细化工具选择

默认情况下,toolkit.scope 控制按类别启用工具(all/paas/iaas)。如果需要更细粒度的控制,可以使用 toolkit.enabled_tools 指定要启用的工具列表:

toolkit:
  scope: all
  enabled_tools:
    - list_workspace
    - list_domains
    - umodel_get_entities
    - umodel_get_metrics
    - sls_query_logstore

enabled_tools 非空时,只有列表中的工具会被注册,其余工具不可用。scope 仍然决定加载哪些 toolkit 模块,enabled_tools 在此基础上进一步过滤。

完整的工具列表及分类说明请参考 config.yaml 中的注释模板。

CLI 参数

参数说明默认值
--config指定配置文件路径自动搜索

环境变量(凭证和运行时参数)

环境变量说明必需
ALIBABA_CLOUD_ACCESS_KEY_IDAccessKey ID
ALIBABA_CLOUD_ACCESS_KEY_SECRETAccessKey Secret
ALIBABA_CLOUD_SECURITY_TOKENSTS Token(临时凭证)
ALIBABA_CLOUD_REGION默认区域
ALIBABA_CLOUD_WORKSPACE默认工作空间(PaaS 工具需要)

凭证优先从 .env 文件读取,如未找到则从 shell 环境变量读取。

💡 默认值自动填充

当设置了 ALIBABA_CLOUD_REGIONALIBABA_CLOUD_WORKSPACE 时,如果工具调用中未提供 regionIdworkspace 参数,服务会自动使用环境变量中的值作为默认值。用户显式传入的值不会被覆盖。

AI 工具集成

Cursor / Kiro / Cline

streamable-http 模式(推荐):

  1. 配置 config.yaml(设置 server.transport: streamable-http
  2. 启动服务:
./bin/alibabacloud-observability-mcp-serve start
  1. 配置 mcp.json
{
  "mcpServers": {
    "alibaba_cloud_observability": {
      "url": "http://localhost:8080"
    }
  }
}

stdio 模式:

  1. 配置 config.yaml(设置 server.transport: stdio,或使用默认值)
  2. 配置 mcp.json
{
  "mcpServers": {
    "alibaba_cloud_observability": {
      "command": "./bin/alibabacloud-observability-mcp-serve",
      "args": ["start"],
      "env": {
        "ALIBABA_CLOUD_ACCESS_KEY_ID": "<your_access_key_id>",
        "ALIBABA_CLOUD_ACCESS_KEY_SECRET": "<your_access_key_secret>"
      }
    }
  }
}

注意:stdio 模式下,如果 config.yaml 不存在,将使用内置默认值。

工具集

PaaS 工具集(云监控 2.0,推荐)

基于统一数据模型,工具名以 umodel_ 为前缀。

实体管理工具

工具说明关键参数
umodel_get_entities获取实体列表workspacedomainentity_set_nameregionId(必需)
umodel_get_neighbor_entities获取实体邻居关系workspacedomainentity_set_nameentity_idsregionId(必需)
umodel_search_entities搜索实体workspacesearch_textregionId(必需)

数据集管理工具

工具说明关键参数
umodel_list_data_set列出数据集workspacedomainentity_set_nameregionId(必需);data_set_types(可选)
umodel_search_entity_set搜索实体集合workspacesearch_textregionId(必需)
umodel_list_related_entity_set列出关联实体集合workspacedomainentity_set_nameregionId(必需)

数据查询工具

工具说明关键参数
umodel_get_metrics查询指标数据workspacedomainentity_set_namemetric_domain_namemetricregionId(必需);analysis_mode(basic/cluster/forecast/anomaly_detection)、offset(时序对比)、time_range(可选)
umodel_get_golden_metrics查询黄金指标workspacedomainentity_set_nameregionId(必需);offsettime_range(可选)
umodel_get_relation_metrics查询关系指标workspacesrc_domainsrc_entity_set_namesrc_entity_idsrelation_typedirectionregionId(必需)
umodel_get_logs查询日志数据workspacedomainentity_set_namelog_set_domainlog_set_nameregionId(必需)
umodel_get_events查询事件数据workspacedomainentity_set_nameevent_set_domainevent_set_nameregionId(必需)
umodel_get_traces查询链路数据workspacedomainentity_set_nametrace_set_domaintrace_set_nametrace_idsregionId(必需)
umodel_search_traces搜索链路workspacedomainentity_set_nametrace_set_domaintrace_set_nameregionId(必需);conditionslimit(可选)
umodel_get_profiling查询性能剖析数据workspacedomainentity_set_nameprofile_set_domainprofile_set_nameentity_idsregionId(必需)
umodel_compare_metrics指标对比分析workspacedomainentity_set_namemetric_domain_namemetricregionId(必需);offsettime_range(可选)
umodel_data_agent_query自然语言数据查询queryworkspaceregionId(必需);time_range(可选)

IaaS 工具集(SLS/CMS 直接访问)

直接访问底层 API,工具名以 sls_cms_ 为前缀。

SLS 工具

工具说明关键参数
sls_query_logstore查询日志库projectlogStorequeryregionId(必需);from_timeto_time(可选)
sls_query_metricstore查询指标库(PromQL)projectmetricStorequeryregionId(必需);from_timeto_time(可选)
sls_list_projects列出项目regionId(必需)
sls_list_logstores列出日志库projectregionId(必需)
sls_list_metricstores列出指标库projectregionId(必需)
sls_text_to_sql自然语言转 SQLtextprojectlogStoreregionId(必需)
sls_text_to_promql自然语言转 PromQLtextprojectmetricStoreregionId(必需)
sls_text_to_spl自然语言转 SPLtextprojectlogStoredata_sampleregionId(必需)
sls_execute_sql执行 SQL 查询projectlogStorequeryregionId(必需);from_timeto_timelimitoffsetreverse(可选)
sls_execute_spl执行原生 SPL 查询queryprojectlogStoreregionId(必需);from_timeto_time(可选)
sls_get_context_logs获取日志上下文projectlogStorepack_idpack_metaregionId(必需);back_linesforward_lines(可选)
sls_log_explore日志探索分析projectlogStoreregionId(必需);queryfrom_timeto_timemax_patternssample_size(可选)
sls_log_compare日志对比分析projectlogStoreregionId(必需);current_from_timecurrent_to_timebaseline_from_timebaseline_to_time(可选)
sls_sopSLS 运维助手textregionId(必需)

CMS 工具

工具说明关键参数
cms_query_metric查询云监控指标namespacemetricNameregionId(必需);dimensionsfrom_timeto_time(可选)
cms_list_metrics列出可用指标namespaceregionId(必需)
cms_list_namespaces列出命名空间regionId(必需)
cms_execute_promql执行 PromQL 查询projectmetricStorequeryregionId(必需);from_timeto_time(可选)

Shared 工具集

工具说明关键参数
list_workspace列出工作空间regionId(必需)
list_domains列出实体域workspaceregionId(必需)
introduction服务介绍无参数

时间表达式

所有数据查询工具支持灵活的时间范围格式:

格式示例
相对预设last_5mlast_1hlast_3dlast_1wlast_1Mlast_1y
相对时间now()-1hnow-30mnow()-7d
Grafana 风格now-15m~now-5mnow/dnow-1d/d
关键词todayyesterday
绝对时间戳1718451045(秒)、1718451045000(毫秒)
日期时间字符串2024-01-01 00:00:002024-01-01T00:00:00Z

高级功能

时序对比分析

umodel_get_metricsumodel_get_golden_metrics 支持通过 offset 参数进行时序对比:

# 对比当前1小时与1天前的数据
umodel_get_metrics(
    domain="apm", entity_set_name="apm.service",
    metric_domain_name="apm.metric.apm.service", metric="request_count",
    time_range="last_1h", offset="1d"
)

返回结果包含:

  • current: 当前时段统计(max, min, avg, count)
  • compare: 对比时段统计
  • diff: 变化分析(trend, avg_change, avg_change_percent)
  • diff_score: 差异评分(0-1,越大差异越显著)

高级分析模式

umodel_get_metrics 支持四种分析模式:

模式说明输出字段
basic原始时序数据(默认)__ts__, __value__, __labels__
clusterK-Means时序聚类__cluster_index__, __entities__, __sample_value__
forecast时序预测(需1-5天历史数据)__forecast_ts__, __forecast_value__, __forecast_lower/upper_value__
anomaly_detection异常检测(需1-3天数据)__anomaly_list_, __anomaly_msg__, __value_min/max/avg__

项目结构

├── cmd/server/          # CLI 入口(cobra)
├── internal/
│   ├── config/          # 配置管理(viper + sync.Once)
│   ├── server/          # MCP Server 核心
│   ├── toolkit/         # 工具集接口与注册中心
│   │   ├── paas/        # PaaS 工具集
│   │   ├── iaas/        # IaaS 工具集
│   │   └── shared/      # Shared 工具集
│   ├── client/          # SLS/CMS 客户端封装
│   ├── errors/          # 结构化错误与错误码映射
│   ├── stability/       # 重试与熔断器
│   └── logger/          # 结构化日志
├── pkg/
│   ├── timeparse/       # 时间表达式解析
│   └── endpoint/        # 端点解析
├── docs/
│   └── AGENTS.md        # AI Agent 开发规范
├── Makefile
├── go.mod
└── go.sum

开发

# 构建
make build

# 运行测试
make test

# 代码检查
make lint

# 清理构建产物
make clean

测试

项目采用单元测试 + 属性测试双轨策略:

  • 单元测试:表驱动测试,覆盖具体示例和边界条件
  • 属性测试:使用 gopter,验证跨所有输入的通用正确性属性
# 运行所有测试
go test ./... -v

# 仅运行属性测试
go test ./... -run TestProperty_

AI Agent 开发规范

参见 docs/AGENTS.md,包含项目结构说明、代码风格约定、新增工具流程、测试规范等。

权限要求

为了确保 MCP Server 能够成功访问和操作您的阿里云可观测性资源,您需要配置以下权限:

阿里云访问密钥 (AccessKey)

  • 服务运行需要有效的阿里云 AccessKey ID 和 AccessKey Secret
  • 获取和管理 AccessKey,请参考 阿里云 AccessKey 管理官方文档
  • 支持使用 STS Token 临时凭证(设置 ALIBABA_CLOUD_SECURITY_TOKEN 环境变量)

RAM 授权

与 AccessKey 关联的 RAM 用户或角色必须被授予访问相关云服务所需的权限。

强烈建议遵循"最小权限原则":仅授予运行您计划使用的 MCP 工具所必需的最小权限集。

根据您需要使用的工具,参考以下文档进行权限配置:

服务权限文档说明
日志服务 (SLS)SLS 权限说明sls_* 工具需要
应用实时监控 (ARMS)ARMS 权限说明umodel_* 工具需要
云监控 (CMS)CMS 权限说明cms_* 工具需要

特殊权限说明

  • 使用 SQL 生成类工具(如 sls_text_to_sql)需要单独授予 sls:CallAiTools 权限
  • 使用数字员工对话功能需要授予:cms:CreateChatcms:CreateThreadcms:GetThreadcms:ListThreads

安全建议

  • 服务不会存储 AccessKey,仅在运行时用于 API 调用
  • SSE/HTTP 模式下,务必自行做好接入点的访问控制
  • 建议部署在内部网络或 VPC 内,避免直接暴露于公网
  • 切勿在无认证的情况下将配置了 AccessKey 的服务端点暴露在公网
  • 推荐使用阿里云函数计算 (FC) 部署,并配置为仅 VPC 内访问

许可证

本项目遵循与原 Python 版相同的许可协议。

Related Servers