AriaOps MCP服务器
A. 模型上下文协议(MCP) VMware Aria操作服务器(本地)。将Aria Ops REST API功能作为MCP工具进行展示,使人工智能助手可以查询基础设施运行状况、警报、指标、容量和报告,并在明确启用时可选地执行写入操作。
特性
- 资源 --列出、搜索、查询虚拟机/主机/集群及其属性
- 警报 --活动警报、定义、注释、促成症状
- 指标 --随时间变化的统计数据、最新值、批量查询、Top-N
- 容量 --每个集群的剩余容量、满负荷时间、策略阈值
- 报告 --列表模板、生成的报告、下载(PDF/CSV)
- 发现 --版本信息、收集器、症状定义、建议
- 写入操作 *(选择加入)* --修改警报、维护模式、计划、报告生成、资源生命周期
支持两者 stdio (本地/测试)以及 streamable HTTP (生产)运输。
需求
- Python 3.11+
- 访问本地VMware Aria Operations 8.x实例
- 波德曼 (可选,用于容器化部署)
快速开始
安装
git clone https://github.com/asnd/ariaops-mcp.git
cd ariaops-mcp
pip install -e .对于开发(包括linting和测试工具):
pip install -e ".[dev]"配置
cp .env.example .env
# Edit .env with your Aria Ops credentialsARIAOPS_HOST=vrops.example.com
ARIAOPS_USERNAME=admin
ARIAOPS_PASSWORD=secret
ARIAOPS_AUTH_SOURCE=local # or your LDAP source name
ARIAOPS_VERIFY_SSL=true运行(stdio--用于MCP客户端)
python -m ariaops_mcp运行(HTTP--生产)
ARIAOPS_TRANSPORT=http ARIAOPS_PORT=8080 python -m ariaops_mcp要在HTTP传输上要求OAuth 2.x承载令牌,请启用该标志并提供资源服务器设置:
ARIAOPS_TRANSPORT=http \
ARIAOPS_HTTP_OAUTH_ENABLED=true \
ARIAOPS_HTTP_OAUTH_ISSUER_URL=https://issuer.example.com \
ARIAOPS_HTTP_OAUTH_RESOURCE_SERVER_URL=https://mcp.example.com \
ARIAOPS_HTTP_OAUTH_JWT_KEY="$(python -c 'import secrets; print(secrets.token_urlsafe(32))')" \
ARIAOPS_HTTP_OAUTH_REQUIRED_SCOPES=mcp:read \
python -m ariaops_mcpOAuth旋钮
| 变量 | 必填 | 默认 | 备注 |
|---|---|---|---|
ARIAOPS_HTTP_OAUTH_ENABLED | 没有 | false | 开启强制执行。需要 ARIAOPS_TRANSPORT=http. |
ARIAOPS_HTTP_OAUTH_ISSUER_URL | 是 | -- | 预计 iss 声明和通过发现文档发布的授权服务器。 |
ARIAOPS_HTTP_OAUTH_RESOURCE_SERVER_URL | yes | -- | 此服务器的资源标识符--用作默认值 aud 并通过暴露 /.well-known/oauth-protected-resource. |
ARIAOPS_HTTP_OAUTH_JWT_KEY | -- | HS256/384/512共享密钥之一(≥32字节) 或 RS\*/ES\*/PS\*的PEM公钥。 | |
ARIAOPS_HTTP_OAUTH_JWKS_URL | -- | JWKS端点URL之一(例如Keycloak的 /realms//protocol/openid-connect/certs).相互排斥 JWT_KEY;旋转关键帧的IdP需要。 | |
ARIAOPS_HTTP_OAUTH_JWT_ALGORITHMS | 没有 | HS256 | 逗号分隔的列表。验证器拒绝不在此列表中的所有算法(因此 alg: none 并且阻止了算法混淆)。 |
ARIAOPS_HTTP_OAUTH_AUDIENCE | no | 资源URL | 如果您的IdP发出不同的请求,则覆盖 aud. |
ARIAOPS_HTTP_OAUTH_REQUIRED_SCOPES | 没有 | [] | 令牌必须包含所有列出的作用域,否则将获得403 insufficient_scope. |
ARIAOPS_HTTP_OAUTH_LEEWAY_SECONDS | 没有 | 30 | 时钟偏斜容差 exp / nbf / iat. |
ARIAOPS_HTTP_OAUTH_JWKS_CACHE_TTL | 没有 | 300 | 重新蚀刻前缓存JWKS密钥的时间。 |
发现: 启用OAuth后,服务器发布 GET /.well-known/oauth-protected-resource 根据RFC 9728,MCP客户端 自动发现授权服务器和所需作用域。
健康: GET /health 故意未经身份验证,因此进行探测和加载 平衡器在OAuth打开的情况下继续工作。
钥匙斗篷设置
Keycloak是受支持的IdP。使用JWKS——Keycloak旋转RS256键。
- 创建客户端 在你的领域(
Clients → Create client):
- *客户端类型:* OpenID连接 - *客户端身份验证:* 为MCP客户保密 - *有效的重定向URI:* 无论您的MCP客户端使用什么
- 添加受众映射器 (
Client scopes → -dedicated → Add mapper → Audience):
- *包括客户受众:* 您想要的客户端ID aud (例如。 mcp-client). - 这是必需的,因为Keycloak可以 不 将资源URL放入 aud 默认情况下。
- 添加范围 (
Client scopes → Create)并分配给客户端(Default或Optional).
- 配置ariaops mcp:
ARIAOPS_TRANSPORT=http \
ARIAOPS_HTTP_OAUTH_ENABLED=true \
ARIAOPS_HTTP_OAUTH_ISSUER_URL=https://kc.example.com/realms/myrealm \
ARIAOPS_HTTP_OAUTH_RESOURCE_SERVER_URL=https://mcp.example.com \
ARIAOPS_HTTP_OAUTH_JWKS_URL=https://kc.example.com/realms/myrealm/protocol/openid-connect/certs \
ARIAOPS_HTTP_OAUTH_JWT_ALGORITHMS=RS256 \
ARIAOPS_HTTP_OAUTH_AUDIENCE=mcp-client \
ARIAOPS_HTTP_OAUTH_REQUIRED_SCOPES=mcp:read \
python -m ariaops_mcp- CLI测试 使用客户端凭据授予:
TOKEN=$(curl -s -X POST \
"https://kc.example.com/realms/myrealm/protocol/openid-connect/token" \
-d grant_type=client_credentials \
-d client_id=mcp-client \
-d client_secret=$KC_SECRET \
-d scope="mcp:read" | jq -r .access_token)
curl -H "Authorization: Bearer $TOKEN" https://mcp.example.com/笔记:
issKeycloak中的令牌正是https:///realms/(没有尾随斜线)。验证器会删除两侧的尾随斜线,因此任何一种形式都可以在config中使用。- 角色(
realm_access.roles,resource_access..roles)不强制执行--仅限OAuthscope。如果需要RBAC,请将角色映射到Keycloak中的作用域。 - 验证器包装
PyJWKClient在asyncio.to_thread,因此JWKS缓存未命中不会阻止事件循环。
与波德曼一起跑步
podman build --format docker -t ariaops-mcp .
podman run --env-file .env -p 8080:8080 ariaops-mcpMCP架构
+---------------------------+ MCP (stdio / streamable HTTP) +---------------------------+
| MCP Client / AI Assistant | | ariaops-mcp server |
| Claude Desktop, IDE, etc. | | |
+-------------+-------------+ | read tools: always on |
| | write tools: opt-in |
| +-------------+-------------+
| |
| | HTTPS REST
| v
| +---------------------------+
+---------------------------------------------------> | VMware Aria Operations |
| /suite-api/api/... |
+---------------------------++-----------------------+ chat / tool plans +-----------------------+
| Browser | | test-ui/app.py |
| Gradio test UI | | Gradio + tool bridge |
+-----------+-----------+ +-----+-----------+-----+
| | |
| | |
| LLM Gateway | | in-process MCP tools
v v v
+-------------------+ +----------------+ +----------------------+
| Human operator | | OpenAI-compat | | ariaops_mcp modules |
+-------------------+ | model gateway | | + AriaOpsClient |
+----------------+ +----------+-----------+
|
v
+----------------------+
| VMware Aria Ops |
+----------------------+MCP客户端集成
添加到MCP配置中(例如。 ~/.claude/mcp_settings.json 对于AI代码助理):
{
"mcpServers": {
"ariaops": {
"command": "python",
"args": ["-m", "ariaops_mcp"],
"env": {
"ARIAOPS_HOST": "vrops.example.com",
"ARIAOPS_USERNAME": "admin",
"ARIAOPS_PASSWORD": "secret"
}
}
}
}可用工具
| 域 | 工具 |
|---|---|
| 资源 | list_resources, get_resource, query_resources, get_resource_properties, get_resource_relationships, list_resource_kinds, list_adapter_kinds, list_resource_groups, get_resource_group_members |
| 警报 | list_alerts, get_alert, query_alerts, get_alert_notes, list_alert_definitions, get_alert_definition, get_contributing_symptoms |
| 指标 | get_resource_stats, get_latest_stats, query_stats, query_latest_stats, get_stat_keys, get_top_n_stats, list_properties_latest |
| 容量 | get_capacity_remaining, get_capacity_overview, list_policies, get_capacity_forecast, get_trend_analysis |
| 报告 | list_report_definitions, get_report_definition, list_reports, get_report, download_report, list_report_schedules |
| 发现 | get_version, list_collectors, list_symptoms, list_recommendations, list_supermetrics |
写入工具(必需 ARIAOPS_ENABLE_WRITE_OPERATIONS=true)
| 域 | 工具 |
|---|---|
| 警报操作 | modify_alerts, add_alert_note, delete_alert_note, delete_canceled_alerts |
| 资源维护 | mark_resources_maintained, unmark_resources_maintained |
| 维护。时间表 | create_maintenance_schedule, update_maintenance_schedule, delete_maintenance_schedule |
| 报告操作 | generate_report, delete_report, create_report_schedule, update_report_schedule, delete_report_schedule |
| 资源生命周期 | create_resource, update_resource, delete_resources |
完整工具目录: TOOLS.md
完整规格: REQUIREMENTS.md
测试UI应用程序
该仓库包括一个基于Gradio的测试UI test-ui/ 用于在通过LLM网关路由聊天时在进程中执行相同的工具处理程序。
首先创建一个本地env文件,这样就不需要在仓库中硬编码租户ID、客户端ID或令牌:
cp .env.example .env集 LITELLM_BASE_URL 对于网关。如果你想使用 通过Azure SSO获取令牌 按钮,也设置:
AZURE_TENANT_ID=your-azure-tenant-id
AZURE_CLIENT_ID=your-azure-client-idpython -m pip install -r test-ui/requirements.txt
python test-ui/app.py --port 7860要运行其自动测试,请执行以下操作:
cd test-ui
pytest tests发展
pip install -e ".[dev]"
pytest # run tests
ruff check src/ tests/ # lint
pyright # type-check
cd test-ui && pytest tests配置参考
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
ARIAOPS_HOST | 是 | -- | Aria Ops主机名(无方案) |
ARIAOPS_USERNAME | 是 | - | neneneba API用户名 |
ARIAOPS_PASSWORD | 是 | - | neneneba API密码 |
ARIAOPS_AUTH_SOURCE | 没有 | local | 身份验证源(本地/LDAP名称) |
ARIAOPS_VERIFY_SSL | 没有 | true | TLS证书验证 |
ARIAOPS_TRANSPORT | 没有 | stdio | stdio 或 http |
ARIAOPS_PORT | 没有 | 8080 | HTTP侦听端口 |
ARIAOPS_HTTP_OAUTH_ENABLED | 没有 | false | 在HTTP MCP传输上要求OAuth 2.x承载令牌 |
ARIAOPS_HTTP_OAUTH_ISSUER_URL | 否 | -- | 启用HTTP身份验证时,向MCP客户端通告OAuth 2.x颁发者URL |
ARIAOPS_HTTP_OAUTH_RESOURCE_SERVER_URL | 否 | -- | 用于OAuth保护的资源元数据的公共MCP HTTP端点URL |
ARIAOPS_HTTP_OAUTH_JWT_KEY | RS\*/ES\*/PS\*的 | -- | HS\*共享密钥(≥32字节)或PEM公钥之一 |
ARIAOPS_HTTP_OAUTH_JWKS_URL | -- | JWKS端点之一(例如Keycloak证书URL);互斥于 JWT_KEY | |
ARIAOPS_HTTP_OAUTH_JWT_ALGORITHMS | 没有 | HS256 | 接受的JWT算法的逗号分隔或JSON数组列表 |
ARIAOPS_HTTP_OAUTH_AUDIENCE | 没有 | ARIAOPS_HTTP_OAUTH_RESOURCE_SERVER_URL | HTTP承载令牌的预期JWT受众 |
ARIAOPS_HTTP_OAUTH_REQUIRED_SCOPES | 否 | -- | HTTP MCP访问所需的逗号分隔或JSON数组范围列表 |
ARIAOPS_HTTP_OAUTH_LEEWAY_SECONDS | 没有 | 30 | 时钟偏斜容差 exp/nbf/iat |
ARIAOPS_HTTP_OAUTH_JWKS_CACHE_TTL | 没有 | 300 | JWKS缓存生存期(秒) |
ARIAOPS_LOG_LEVEL | 没有 | INFO | 日志级别 |
ARIAOPS_ENABLE_WRITE_OPERATIONS | 没有 | false | 启用变异工具(警报管理、维护、报告、资源生命周期) |
LITELLM_BASE_URL | 否 | -- | 测试UI LLM网关基本URL |
LITELLM_TOKEN | 否 | -- | 测试网关的UI JWT |
AZURE_TENANT_ID | 否 | -- | 测试浏览器SSO的UI Azure租户ID |
AZURE_CLIENT_ID | 否 | -- | 测试浏览器SSO的UI Azure客户端ID |
许可证
麻省理工学院
