
Cisco Umbrella
io.github.WYRE-AI由 GitHub 账号 WYRE-AI 发布v1.0.3更新于 Oct 29, 2026
MCP server for Cisco Umbrella's deployment, admin, policy, reporting, and investigate APIs.
概览
面向 Cisco Umbrella 的只读 MCP 服务器,让助手查看部署清单、管理员用户与角色、策略、报表以及域名调查信息。
- 可以做什么
- 列出部署清单:公网与内部网络、站点、虚拟设备、漫游客户端计算机及内部绕过域名
- 列出管理控制台的角色、用户和已配置的 API 密钥
- 列出目标(允许/阻止)列表及其中的目标条目
- 获取报表:热门目标、请求总量、热门分类、活动日志、身份、App Discovery 应用及 API 用量
- 调查域名:分类、风险与安全评分、全球热门域名排名、样本、查询量及被动 DNS 记录
- 在列表与报表工具中通过 additionalParams 对象透传额外的 Cisco 查询过滤条件
- 适用场景
- 适合需要助手回答组织 Cisco Umbrella DNS 安全状况问题的场景,例如部署了什么、谁拥有管理员权限、存在哪些阻止列表、报表中出现了哪些流量与威胁,或某个域名的风险如何。它是监控与调查连接器,而非配置工具。
- 运行要求
- 以本地进程(stdio)方式从已发布的容器镜像运行,或通过 HTTP 运行。需要 Umbrella 管理控制台中的 API Key 与 API Secret,通过 CISCOUMBRELLA_API_KEY 和 CISCOUMBRELLA_API_SECRET 提供(AUTH_MODE=env),或在网关模式下每次请求以 X-CiscoUmbrella-Api-Key 和 X-CiscoUmbrella-Api-Secret 头提供。HTTP 模式还需 CONDUIT_S2S_SECRET 和 X-Gateway-S2S 头。需要访问 Cisco API 的网络。
安装
在 SourceWeft 中
- 打开 控制台中的 Cisco Umbrella,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Cisco Umbrella MCP Server
MCP server for Cisco Umbrella's NextGen REST API - deployment inventory, admin, policy, reporting, and investigate visibility - for AI assistants and the WYRE Conduit gateway.
Authentication
Create an API Key in the Umbrella admin console (Admin > API Keys, or Console Settings > API Keys on a Multi-org/MSP console) to receive an API Key and API Secret pair.
The secret is shown only once at creation time and cannot be retrieved later - store it somewhere safe immediately.
This server exchanges that pair for a short-lived (1-hour) Bearer access token via POST /auth/v2/token (grant_type=client_credentials, HTTP Basic auth), and handles the exchange and its refresh on expiry internally. Callers only ever need to supply the long-lived API Key/Secret below.
A note on a real discrepancy in Cisco's own documentation: Cisco's published Postman collection (CiscoDevNet/cloud-security, Umbrella/PostmanExamples/umbrella-external-postman-collection.json) encodes the token request as a bare GET with no body, while Cisco's DevNet "Getting Started" and "Quickstart" prose docs both independently specify POST with a grant_type=client_credentials form body. This server follows the prose docs (POST), since two independent doc pages agree and it matches the standard OAuth2 client_credentials flow Cisco names explicitly - but this was not verified against a live credential pair. If token exchange 401s against a real account, try a bare GET with no body before assuming the credentials are bad.
Configuration
Copy .env.example and set the variables below. The stdio transport reads CISCOUMBRELLA_* and does not use CONDUIT_S2S_SECRET.
/health and /healthz stay unauthenticated and do not read credentials.
HTTP authentication
With MCP_TRANSPORT=http and CONDUIT_S2S_SECRET set, every /mcp request must include X-Gateway-S2S. The check is verifyS2sHeader in src/s2s-verify.ts: the header value is t=<unix seconds>,v1=<hex>, where the hex is HMAC-SHA256 of the literal string t=<unix seconds> keyed with CONDUIT_S2S_SECRET (64 lowercase hex characters). The timestamp must be within 300 seconds of the server clock. A missing or invalid header is HTTP 401, before vendor credentials are read. An empty secret refuses to start unless MCP_ALLOW_INSECURE_DEV=1. A known placeholder (replace-with-a-real-secret, your-s2s-secret, changeme, change-me, placeholder, secret, example, replace-me, s2s-secret, any case) refuses to start even with that flag, so a copied example cannot forge the header.
In AUTH_MODE=gateway, /mcp also requires both X-CiscoUmbrella-Api-Key and X-CiscoUmbrella-Api-Secret. Those headers are the only credential source for that request. A request missing either one returns 401 and does not fall back to CISCOUMBRELLA_* in the process environment.
AUTH_MODE=env still requires a valid X-Gateway-S2S header, then uses CISCOUMBRELLA_API_KEY and CISCOUMBRELLA_API_SECRET from the environment.
Request limits
- HTTP request bodies are capped at 256 KiB (262144 bytes). After the
X-Gateway-S2Scheck passes, aContent-Lengthabove the cap returns 413 with a JSON-RPC error; bodies withoutContent-Lengthare capped by the MCP SDK transport. Unauthenticated requests still get 401 first. tools/callarguments are capped at 10,000 elements (every array item and object key at any depth). Larger inputs return anisErrortool result and are never dispatched.
These limits address CVE-2026-111768 / GHSA-46jr-4wx8-v453 (memory exhaustion during validation) and GHSA-f897-62hf-6gxq (no request body / batch cap).
Tools
Deployments
umbrella_list_networks- list registered public-IP network identities.umbrella_list_internal_networks- list internal (RFC1918) network identities.umbrella_list_sites- list Umbrella sites.umbrella_list_virtual_appliances- list virtual appliances and their status.umbrella_list_roaming_computers- list roaming-client-enrolled computers.umbrella_get_internal_domains- get all internal domains configured to bypass Umbrella DNS.
Admin
umbrella_list_roles- list administrative roles.umbrella_list_users- list admin console users.umbrella_get_user- get a specific admin console user.umbrella_list_api_keys- list configured API keys.
Policies
umbrella_list_destination_lists- list destination (allow/block) lists.umbrella_list_destinations- list destinations within a specific destination list.
Reports
umbrella_top_destinations- most-requested destinations, optionally by traffic type (dns/proxy/firewall).umbrella_total_requests- total request counts, optionally by traffic type.umbrella_top_categories- most-requested content/security categories.umbrella_activity- raw activity log, optionally by traffic type.umbrella_identities- identities (roaming/network/mobile/AD users) with traffic summaries.umbrella_appdiscovery_applications- discovered cloud applications.umbrella_appdiscovery_app_identities- identities observed using a discovered application.umbrella_appdiscovery_app_risk- risk details for a discovered application.umbrella_api_usage_summary/umbrella_api_usage_requests/umbrella_api_usage_responses/umbrella_api_usage_keys- API usage reporting.
Investigate
umbrella_domain_categorization- content/security categorization for a domain.umbrella_domain_risk_score- Cisco's risk score for a domain.umbrella_domain_security_score- detailed security scoring signals for a domain.umbrella_top_most_seen_domains- the top million most globally-popular domains.umbrella_get_samples- malware/file samples for a domain, IP, or URL.umbrella_domain_volume- DNS query volume over time for a domain.umbrella_domain_resource_records- passive DNS resource records for a domain.
Every Reports/Investigate/Deployments/Admin/Policies list tool that Cisco's docs don't fully enumerate the filter set for accepts an optional additionalParams object, passed through verbatim as extra query-string parameters (e.g. categories, identityids, verdict, domains on Reports endpoints) - documented Cisco filters this client doesn't model as first-class arguments.
Scope
This is a v1, read-only surface: this server only implements GET endpoints across Deployments, Admin, Policies, Reports, and Investigate. Explicitly deferred, all real endpoints in Cisco's own Postman collection, out of scope for now:
- Add/remove internal domains (
POST/DELETE /deployments/v2/internaldomains) - Add/remove tunnels (
POST/DELETE /deployments/v2/tunnels) - Add tags and tag/untag devices (
POST /deployments/v2/tags*) - Create/delete users (
POST/DELETE /admin/v2/users) - Create API keys (
POST /admin/v2/apiKeys) - Add/remove destinations on a destination list (
POST/DELETE /policies/v2/destinationlists/{id}/destinations) - Update an App Discovery application's label (
PATCH /reports/v2/appDiscovery/applications/{id})
These are provisioning/mutation actions, out of scope for a read-only monitoring connector - consistent with how other connectors in this wave (Printix, WatchGuard Cloud) deferred provisioning-heavy writes. They can be added as a follow-up if a write-capable v2 is ever needed.
Also explicitly out of scope: the Legacy Umbrella Reporting v1/v2 APIs (different auth, different host - investigate.api.umbrella.com / management.api.umbrella.com) and any Multi-org/MSP child-organization switching via the X-Umbrella-OrgId header - real, documented Cisco behavior, but not covered in enough concrete request/response detail (whether it applies to the token request, every subsequent request, or both) to implement with confidence without a live credential pair to verify against.
Development
Docker
The image listens on 0.0.0.0 inside the container (MCP_HTTP_HOST) and defaults to AUTH_MODE=gateway. Startup still refuses to run without a real CONDUIT_S2S_SECRET. Publish the port on loopback. In gateway mode, Umbrella credentials arrive on each request as headers; they are not read from the environment.
Compose refuses to start when CONDUIT_S2S_SECRET is unset, defaults AUTH_MODE to gateway, publishes 127.0.0.1:8080:8080, and does not set CISCOUMBRELLA_API_KEY, CISCOUMBRELLA_API_SECRET, or env_file:
Single-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses CISCOUMBRELLA_API_KEY and CISCOUMBRELLA_API_SECRET. It is separate from the gateway Compose service above.
Local HTTP without a secret is development-only. It binds 127.0.0.1 (including when MCP_HTTP_HOST is localhost or ::1) and logs a warning. A non-loopback MCP_HTTP_HOST makes startup exit. The container image sets MCP_HTTP_HOST=0.0.0.0, so the bypass inside Docker also needs -e MCP_HTTP_HOST=127.0.0.1. Do not publish that port off loopback.
来源:README.md,提交 817bedc
工具
0版本历史
3- v1.0.3最新Oct 22, 2026
- v1.0.2Oct 19, 2026
- v1.0.0Sep 20, 2026
评分
已满足适用检查项的 40%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
请在仓库或注册中心条目中声明许可证。