Cisco Secure Access Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Cisco Secure Access Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A production-ready Model Context Protocol (MCP) server that wraps the Cisco Secure Access REST API. Enables AI agents to investigate threats, pull reports, manage security policies, and administer deployment infrastructure through a standardized interface.
Cisco Secure Access (formerly Cisco Umbrella / Secure Web Gateway) provides DNS-layer security, web filtering, and Zero Trust network access. This MCP server bridges that platform to AI agents, enabling:
The server implements the Streamable HTTP transport per the MCP specification, runs as a single Python process, and handles OAuth 2.0 token management automatically.
Cisco Secure Access API uses Unix epoch timestamps in milliseconds. This server converts automatically.
All time-accepting tools support three input formats:
| Format | Example | Converted to |
|---|---|---|
| ISO 8601 | 2025-01-15T08:30:00Z | 1736928600000 |
| Relative | 24h, 7d, 30m, 900s | epoch ms from now |
| Keyword | now | current epoch ms |
| Epoch ms | 1735689600000 | passed through |
+-------------+ JSON-RPC 2.0 +------------------+ OAuth2 + REST +--------------------+
| MCP Client | <----------------> | MCP Server | <----------------> | Cisco Secure Access|
| (AI Agent) | Streamable HTTP | FastAPI + | api.sse.cisco.com| API |
| | POST /mcp | Tool Handlers | | |
+-------------+ +------------------+ +--------------------+
|
+------------+
| Token Cache|
| per session|
+------------+cd cisco-secure-access-mcp
# Configure credentials
cp .env.example .env
# Edit .env with your Cisco API key and secret
# Build and run
docker compose up --build -d
# Check health
curl http://localhost:3000/healthdocker build -t cisco-mcp-server .
docker run -d --name cisco-mcp \
-p 3000:3000 \
-e CISCO_API_KEY=your_key_here \
-e CISCO_API_SECRET=your_secret_here \
cisco-mcp-serverpython3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
export CISCO_API_KEY=your_key_here
export CISCO_API_SECRET=your_secret_here
python server.py| Variable | Required | Description | Default |
|---|---|---|---|
CISCO_API_KEY | Yes | OAuth client ID from Cisco portal | -- |
CISCO_API_SECRET | Yes | OAuth client secret | -- |
CISCO_ORG_ID | No | Child org ID for multi-org setups | Parent org |
MCP_SERVER_PORT | No | Listen port | 3000 |
MCP_SERVER_HOST | No | Bind address | 0.0.0.0 |
LOG_LEVEL | No | DEBUG, INFO, WARNING, ERROR | INFO |
Get credentials from the Cisco Secure Access portal: Admin > API Keys > Create New Key.
| Tool | Description |
|---|---|
investigate_domain | DNS query history, IPs, threats for a domain |
investigate_ip | Domains, threats, geo-location for an IP address |
investigate_url | Categorization, threat status for a specific URL |
investigate_user_activity | Complete user history: DNS, web, blocks, threats |
| Tool | Description |
|---|---|
get_activity_report | DNS queries, web requests, connection data |
get_top_threats | Most frequent threat categories and sources |
get_top_destinations | Most visited domains, IPs, and URLs |
get_top_identities | Most active users by request volume |
get_top_ips | Most contacted external IP addresses |
get_summary_report | Aggregate traffic volume and threat counts |
get_threat_types | Breakdown: malware, phishing, C2, etc. |
get_report | Generic handler: app_discovery, metering, api_usage, dlp_events |
| Tool | Description |
|---|---|
add_domain_to_block_list | Block a domain (creates list if needed) |
remove_domain_from_block_list | Unblock a domain from a list |
| Tool | Description |
|---|---|
list_vpn_connections | Current VPN user sessions |
disconnect_vpn_user | Terminate a specific VPN session |
revoke_device_certificates | Revoke device access certificates |
| Tool | Description |
|---|---|
manage_resource | CRUD for all Admin/Policies/Deployments resources |
manage_resource accepts:
domain: admin, policies, deploymentsresource: resource slug (see lists below)operation: list, create, update, deleteresource_id: required for update/deleteresource_params: attributes dict for create/updateparams: query parameters for list operationsAvailable resources per domain:
admin: api_keys, user_devices, vpn_connections, integrations, alert_rules, tenants, threat_intel_feeds, tenant_controls, s3_bucket_key
policies: destination_lists, application_lists, access_rules, network_objects, security_feeds, security_profiles, content_categories, application_categories, ips_profiles, dlp_rules, do_not_decrypt, private_resources
deployments: tunnel_groups, tunnel_regions, connector_groups, connectors, roaming_computers, swg_device_settings, internal_domains, sites, networks, internal_networks, network_devices, dns_forwarders, identity_endpoints, virtual_appliances
{"tool": "investigate_domain", "arguments": {"domain": "suspicious-site.com", "limit": 20}}{"tool": "get_top_threats", "arguments": {"start_time": "7d", "end_time": "now", "limit": 50}}{"tool": "manage_resource", "arguments": {"domain": "deployments", "resource": "sites", "operation": "list"}}{"tool": "add_domain_to_block_list", "arguments": {"domain": "malware.example.com"}}{
"tool": "manage_resource",
"arguments": {
"domain": "deployments",
"resource": "sites",
"operation": "create",
"resource_params": {"name": "office-1", "ipAddresses": ["10.0.0.0/24"]}
}
}{"tool": "disconnect_vpn_user", "arguments": {"user_id": "compromised-user"}}{
"tool": "manage_resource",
"arguments": {
"domain": "policies",
"resource": "destination_lists",
"operation": "update",
"resource_id": "list-abc123",
"resource_params": {"name": "blocked-sites", "entries": ["bad.com"]}
}
}.env files or environment injection via Docker secrets, Kubernetes secrets, or cloud secret managers.manage_resource with domain=admin, resource=api_keys to create/delete keys.appuser account.127.0.0.1 if the MCP client runs locally, or use a VPN/firewall for remote access./health endpoint enables container orchestration liveness checks.deploy.resources.limits for CPU/memory.LOG_LEVEL=DEBUG for troubleshooting, INFO for production.get_report with report_type=api_usage.add_domain_to_block_list).24h, 7d, 30m are simpler than ISO 8601 for most queries.limit and offset parameters for list operations.list the current entries first.For organizations with child orgs, set CISCO_ORG_ID to the child organization's ID. The server adds the X-Umbrella-OrgId header automatically to all API requests.
pip install pytest pytest-asyncio
pytest test_server.py -vCovers: epoch time conversion, tool registration, endpoint mapping, API retry logic, token caching, transport layer, and all 18 tool handlers.
MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.