Illumio MCP Server
Use conversational AI to operate Illumio PCE: manage policy objects, analyze traffic/enforcement posture, and automate segmentation/compliance workflows.
CRUD workloads, labels, IP lists, services, rulesets, and allow/deny/override-deny rules.
Query workloads, labels, services, rulesets, IP lists, events, PCE health/capacity, and credential status.
Analyze traffic with detailed flows, summaries, timelines, process/egress discovery, identity graphs, unmanaged/unknown endpoints, and lateral-movement paths.
Automate ringfencing with selective enforcement, deny-consumer options, dry runs, gap-filling, batch ringfencing, and infrastructure-first ordering.
Identify infrastructure services and assess enforcement readiness and policy coverage.
Compare draft vs active policy and provision pending policy changes.
Run compliance posture checks and collect segmentation audit evidence for frameworks including PCI-DSS, DORA, NIS2, NIST, CIS, ISO 27001, SWIFT CSP, HIPAA, and general best practices.
Inspect Kubernetes/container clusters, Kubernetes workloads, container workload profiles, and pairing profiles.
Manage per-user PCE credentials and check which credential mode applies.
Run over stdio or authenticated HTTP with OAuth, role-based authorization, audit logging, and confirm tokens for sensitive mutations.
Use guided prompts for ringfencing an application and analyzing application traffic.
Fetch the server changelog when tool behavior changes or cached assumptions are stale.
Offers containerized deployment of the Illumio MCP server with configuration options for environment variables, volume mounting, and integration with Claude Desktop.
Creates diagram visualizations for Illumio project planning and implementation timelines.
Provides an interface to interact with Illumio PCE (Policy Compute Engine), enabling programmatic management of workloads, labels, and traffic flow analysis in Illumio's zero-trust segmentation platform.
Generates visualizations and interactive components for Illumio data analysis, including application dependencies, traffic patterns, security assessments, and remediation planning.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Illumio MCP Servershow me traffic flows from the last 24 hours"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Illumio MCP Server
π Documentation site β installation, getting started, workflows, the full tool reference, and central deployment.
A Model Context Protocol (MCP) server that provides an interface to interact with Illumio PCE (Policy Compute Engine). This server enables programmatic access to Illumio workload management, label operations, traffic flow analysis, automated ringfencing, and infrastructure service identification.
What can it do?
Use conversational AI to talk to your PCE:
Full CRUD on workloads, labels, IP lists, services, and rulesets
Traffic analysis over the whole window β summaries aggregate every flow the PCE returns, not the first 500, and report how much exists vs how much is shown
Aggregate on any label β
app/envby default, or business unit, compliance scope, role+location; whatever dimensions your PCE definesShadow-AI / egress discovery β which process talks to which provider, with attribution from RDAP and vendor-published ranges refreshed weekly in CI
Process-qualified policy β "only this binary may reach that app", via Windows egress services and service references in rules
Automated ringfencing β analyze traffic and create app-to-app segmentation policies with one command
Selective enforcement β add deny rules for apps in selective mode with configurable consumer flavors
Infrastructure service identification β discover which apps are infrastructure services using graph centrality analysis, so you know what to policy first
Deny rule management β create, update, and delete deny rules (including override deny for emergencies)
Rules editable in place β
update-sec-rule/delete-sec-ruleinstead of rebuilding a rulesetEvent monitoring β query PCE events with severity and type filters
PCE health checks β verify connectivity and credentials
Tells you when it changed β
get-server-changelogreports behaviour changes to a session whose cached tool list is stale
Related MCP server: OpenCTI MCP Server
Prerequisites
Python 3.12 or 3.13 (see
requires-pythoninpyproject.toml)Access to an Illumio PCE instance
Valid API credentials for the PCE
Installation
Clone the repository:
git clone https://github.com/alexgoller/illumio-mcp-server.git
cd illumio-mcp-serverInstall dependencies:
uv syncConfiguration
You should run this using the uv command, which makes it easier to pass in environment variables and run it in the background.
Using uv and Claude Desktop
On MacOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%/Claude/claude_desktop_config.json
Add the following to the custom_settings section:
"mcpServers": {
"illumio-mcp": {
"command": "uv",
"args": [
"--directory",
"/path/to/illumio-mcp-server",
"run",
"illumio-mcp"
],
"env": {
"PCE_HOST": "your-pce-host",
"PCE_PORT": "your-pce-port",
"PCE_ORG_ID": "1",
"API_KEY": "api_key",
"API_SECRET": "api_secret"
}
}
}
}Using with Claude Code
One command registers the server as a stdio MCP server for Claude Code. Replace
the path and the five PCE values; -s user makes it available in every project
(-s project writes a shareable .mcp.json into the current repo instead --
do not put real credentials in that one).
claude mcp add -s user illumio-mcp \
-e PCE_HOST=https://your-pce.example.com \
-e PCE_PORT=443 \
-e PCE_ORG_ID=1 \
-e API_KEY=api_xxxxxxxxxxxxxxxx \
-e API_SECRET=your_api_secret \
-- uv --directory /path/to/illumio-mcp-server run illumio-mcpOptional: -e PCE_TLS_VERIFY=false for a self-signed PCE certificate, and
-e MCP_LOG_LEVEL=DEBUG while diagnosing (the log is illumio-mcp.log in the
repo directory, because --directory makes it the working directory).
Verify, then ask Claude Code to call check-pce-connection:
claude mcp get illumio-mcp # Status: β Connected, and the env you set
claude mcp list # every server and whether it connects
claude mcp remove -s user illumio-mcp # to undoAlready have a .env in the repo? The server loads it from the working
directory, so with --directory set you can omit the -e flags entirely --
but the file then holds the secrets, so keep it out of git (it is in
.gitignore).
HTTP transport with OAuth Resource Server (Phase 3a)
The server runs over HTTP using the MCP Streamable HTTP transport (spec rev 2025-03-26) and validates OAuth 2.1 bearer tokens issued by your IdP. This is Phase 3a: identity is enforced; per-user PCE keys land in Phase 3b.
Running with auth (production-shaped)
export MCP_PUBLIC_URL=https://mcp.illumio.example
export MCP_OAUTH_ISSUER=https://login.microsoftonline.com/<tenant-id>/v2.0
export MCP_OAUTH_JWKS_URL=https://login.microsoftonline.com/<tenant-id>/discovery/v2.0/keys
export MCP_OAUTH_AUDIENCE=https://mcp.illumio.example
export MCP_OAUTH_REQUIRED_SCOPE=illumio-mcp.use # default; override if needed
illumio-mcp-http --host 127.0.0.1 --port 8080The server refuses to start without these env vars (unless MCP_DEV_INSECURE=1).
MCP clients discover the AS via the standard RFC 9728 endpoint:
GET /.well-known/oauth-protected-resourceUnauthenticated requests to /mcp return 401 with
WWW-Authenticate: Bearer resource_metadata="<URL>", which any spec-compliant
MCP client (Claude Desktop, ChatGPT, MCP Inspector) follows automatically to
run PKCE auth code flow against the configured AS.
Running without auth (dev only)
MCP_DEV_INSECURE=1 illumio-mcp-httpThe server logs a prominent warning. Do NOT use in production.
Health endpoints (always unauthenticated)
GET /healthzβ livenessGET /readyzβ readiness (Phase 3a returns the same as healthz; Phase 3b/c will add PCE + JWKS reachability)
Two PCE modes (Phase 3b vs Phase 3e)
The HTTP server supports three ways to source PCE credentials, selected via
MCP_PCE_MODE:
Mode |
| PCE creds | Onboarding | PCE-side audit |
Per-user (default) |
| One PCE API key per authenticated user, encrypted in keystore | User registers via | PCE logs show the real human via per-user API key |
Shared |
| One PCE service-account key from env (same as stdio) | None β works immediately for any authenticated user | PCE logs show the service account; the MCP audit log is the source of truth for "who did what" |
Hybrid |
| Per-user key where the user registered one; the shared service account otherwise | Optional β works immediately; | Mixed by design: the human where registered, the service account elsewhere. Every MCP audit row records |
Choose per-user when:
You want PCE-side audit attribution to identify the human
Users are happy to provide their own PCE API key once
You can tolerate the per-user PCE key sprawl (PCE has limits)
Choose shared when:
The PCE limits API keys per user too aggressively for per-user mode
You want zero-friction onboarding (no
/setupstep)You're OK relying on the MCP audit log alone for human-level attribution
You operate the PCE service account yourself and rotate it on a schedule
Choose hybrid when:
You rolled out in shared mode and want a stepwise migration to per-user
Compliance needs named PCE-side attribution for some users without forcing everyone to onboard
You accept that the PCE audit log is mixed, and will read
effective_pce_modein the MCP audit log
Hybrid requires both the shared env (PCE_*, API_*) and MCP_KEK; it refuses to
start without either. check-pce-credentials-status reports the mode that applies
to the calling user for this request β including the case where their stored
key exists but could not be used and the call ran as the service account.
In shared mode, /setup is not mounted, the credential-management tools
(register-pce-credentials, delete-pce-credentials) refuse with a friendly
error, and MCP_KEK is not required. SSO + JWT + role-based authz + audit
log + confirm tokens all still apply identically.
# Shared mode β same env that stdio uses today, plus auth/role config
export MCP_PCE_MODE=shared
export PCE_HOST=https://your-pce.example.com
export PCE_PORT=8443
export PCE_ORG_ID=1
export API_KEY=your_pce_api_key_name
export API_SECRET=your_pce_api_key_secret
# (other auth/role env vars from earlier sections still apply)
illumio-mcp-httpPer-user PCE keys (Phase 3b)
Each authenticated user has their own PCE API key/secret stored in an encrypted SQLite keystore. PCE-side audit logs attribute correctly per human; revoking a user is a single tool call.
Additional env required when running with auth:
export MCP_KEK=$(python -c 'import os, base64; print(base64.b64encode(os.urandom(32)).decode())')
export MCP_KEYSTORE_PATH=/var/lib/illumio-mcp/keys.db # default: ./data/keys.dbThe KEK is never stored next to the database. Loss of KEK = total loss of stored creds (intentional, fail-closed). For production, source MCP_KEK from KMS or Vault rather than the operator's shell.
Onboarding paths (either works):
Browser β visit
/setupafter authenticating; paste credentials in the form.MCP client β call the
register-pce-credentialstool; the only tool available before credentials are registered.
Other credential tools:
check-pce-credentials-statusβ does this user have credentials registered?delete-pce-credentialsβ remove this user's credentials.
Role-based authorization (Phase 3c)
The server maps each user's IdP groups to one of three internal roles:
reader, operator, admin. Per-tool authorization is enforced by the
dispatcher using the roles metadata on each ToolSpec.
Configure group β role mapping via env (comma-separated):
# A user matching ANY of these groups gets that role; highest role wins.
export MCP_ROLE_GROUPS_ADMIN=sg-illumio-mcp-admin
export MCP_ROLE_GROUPS_OPERATOR=sg-illumio-mcp-operator,sg-illumio-mcp-admin
export MCP_ROLE_GROUPS_READER=sg-illumio-mcp-readonly,sg-illumio-mcp-operator,sg-illumio-mcp-admin
# Optional: fallback role when no group matches. Leave unset to refuse.
# export MCP_ROLE_DEFAULT=readerTool-by-tool defaults:
Tool category | Roles allowed | Examples |
Reads | reader, operator, admin |
|
Writes | operator, admin |
|
Provisioning + bulk | admin |
|
A user without a matching role (and no MCP_ROLE_DEFAULT) receives a structured
forbidden_no_role error.
Audit log (Phase 3c)
Every dispatcher decision (allow / deny / error) is written to a SQLite audit database. Schema and storage location:
# Defaults to <keystore_dir>/audit.db
export MCP_AUDIT_LOG_PATH=/var/lib/illumio-mcp/audit.dbAudit rows include (ts, sub, iss, tool, decision, reason, role, request_id)
β never tool arguments. The request_id matches the X-Request-Id
response header so external traces can be correlated.
Query examples:
-- Recent denied calls per user
SELECT ts, sub, tool, reason FROM audit_log
WHERE decision='denied'
ORDER BY ts DESC LIMIT 20;
-- Tool-call volume by user
SELECT sub, COUNT(*) FROM audit_log
WHERE ts > date('now', '-7 days')
GROUP BY sub ORDER BY 2 DESC;Confirm tokens for mutating tools (Phase 3d)
Tools marked requires_confirm=True (currently provision-policy,
ringfence-batch, register-pce-credentials, delete-pce-credentials) require
a server-issued single-use confirm token in params._meta.confirm_token when
called over HTTP. Stdio mode is unaffected β the operator who launched the
process can call mutating tools directly.
Required env in auth mode:
export MCP_CONFIRM_HMAC_KEY=$(python -c 'import os, base64; print(base64.b64encode(os.urandom(32)).decode())')
# Optional:
# export MCP_CONFIRM_TTL_SECONDS=120
# export MCP_CONFIRM_JTI_PATH=/var/lib/illumio-mcp/jti.db
# export MCP_CONFIRM_FRESH_AUTH_SECONDS=300 # require JWT auth_time within 5 minHow a client uses it
Call the mutating tool without a token β server returns:
{"error": "confirm_required", "params_hash": "<sha256>", "message": "..."}Call
POST /confirmwith the JWT and the params_hash:curl -X POST https://mcp.illumio.example/confirm \ -H "Authorization: Bearer $JWT" \ -H "Content-Type: application/json" \ -d '{"tool":"provision-policy","params_hash":"<sha256>"}' # β {"confirm_token": "...", "expires_in": 120}Re-call the tool with the token in
params._meta.confirm_token.
Tokens are single-use (replays return confirm_token_replay) and scoped
to (sub, tool, params_hash). Tampering with any field invalidates the token.
Step-up auth (optional, recommended for production)
Set MCP_CONFIRM_FRESH_AUTH_SECONDS=300 to require the JWT's auth_time
claim to be within the last 5 minutes. Forces the user to re-authenticate
before minting a token β the strongest prompt-injection defense available
without an interactive session model. Requires the IdP to issue auth_time
(Entra and Okta both do for OIDC sign-in flows).
Tools
Workload Management
get-workloadsβ Retrieve workloads with optional filtering by name, hostname, IP, labels, and max resultscreate-workloadβ Create an unmanaged workload with name, IP addresses, and labelsupdate-workloadβ Update an existing workload's propertiesdelete-workloadβ Remove a workload from PCE
Label Operations
get-labelsβ Retrieve labels with optional filtering by key, value, and max resultscreate-labelβ Create a new label with key-value pairupdate-labelβ Update an existing labeldelete-labelβ Remove a label
Ruleset & Rule Management
get-rulesetsβ Get rulesets with optional filtering by name, description, and enabled statuscreate-rulesetβ Create a new ruleset with scopesupdate-rulesetβ Update ruleset propertiesdelete-rulesetβ Remove a rulesetcreate-deny-ruleβ Create a deny rule (regular or override deny) in a rulesetupdate-deny-ruleβ Update an existing deny ruledelete-deny-ruleβ Remove a deny rule
IP List Management
get-iplistsβ Get IP lists with structuredip_rangesandfqdns,pversiondraft|active,is_defaulton the Any list, andcontains_ipfor an exact server-side "which lists cover this address" lookupcreate-iplistβ Create a new IP listupdate-iplistβ Update an existing IP listdelete-iplistβ Remove an IP list
Service Management
get-servicesβ Get services with optional filtering by name, port, protocol, and max resultscreate-serviceβ Create a new service definitionupdate-serviceβ Update an existing servicedelete-serviceβ Remove a service
Traffic Analysis
get-traffic-flowsβ Get detailed traffic flow data with filtering by date range, source/destination, service, policy decision, and moreget-traffic-flows-summaryβ Get aggregated traffic summaries grouped by app, env, port, and protocol
Automated Ringfencing
create-ringfenceβ Automated app-to-app segmentation policy creation. Analyzes traffic flows to discover which remote apps communicate with a target app, then creates a ruleset with:Intra-scope allow rule β all workloads within the app can communicate freely
Extra-scope allow rules β each discovered remote app gets an allow rule on All Services
Selective enforcement mode (
selective=true) β adds a deny rule blocking all inbound, with allow rules for known apps processed first. Gets you to enforcement faster than full enforcement mode.Deny consumer flavors (
deny_consumerparameter):any(default) β IP list Any (0.0.0.0/0) as consumer, deny only at destination. Safest.amsβ All Workloads as consumer, deny pushed to every managed workload. Broader.ams_and_anyβ Both. Maximum coverage.
Policy coverage awareness β each rule is annotated as
already_allowed(traffic covered by existing policy, created for documentation) ornewly_allowed(filling a policy gap). Summary shows how many remote apps are already covered vs need new rules.skip_allowedparameter β set totrueto only create rules for traffic not yet covered by existing policy, producing minimal rulesets that fill gaps onlyMerge-safe β detects existing rulesets and rules, never creates duplicates
Dry-run support β preview what would be created without making changes
Infrastructure Service Identification
identify-infrastructure-servicesβ Discover which apps are infrastructure services by analyzing traffic patterns. Builds an app-to-app communication graph and uses dual-pattern scoring to recognize two types of infrastructure:Provider infra (AD, DNS, shared DB) β consumed by many apps, high in-degree, low out-degree. Consumer infra (monitoring, backup, log shipping) β connects out to many apps, high out-degree, low in-degree.
Two scores are computed per app, and the higher one wins:
Score
Degree metric (40%)
Directionality (30%)
Betweenness (25%)
Volume (5%)
Provider
In-degree
Consumer ratio (in/total)
Betweenness centrality
Connection volume
Consumer
Out-degree
Producer ratio (out/total)
Betweenness centrality
Connection volume
Mixed-traffic dampening:
score *= 1 / (1 + min(in_degree, out_degree) * 0.3)β apps with both significant inbound AND outbound connections are business apps, not infrastructure. Pure directional apps (all in OR all out) get no penalty.Non-production environments (staging, dev, etc.) receive a 50% score penalty since infrastructure services typically live in production.
Apps are classified into tiers:
Core Infrastructure (score >= 75) β monitoring, AD, SIEM, DNS. Policy these first.
Shared Service (score >= 50) β shared databases, message queues. Policy these second.
Standard Application (score < 50) β normal business apps.
Each result includes a
dominant_patternfield ("provider" or "consumer") indicating which type of infrastructure the app resembles.Why this matters: Infrastructure services are consumed by many apps OR connect out to many apps. If you ringfence apps without allowing infrastructure services first, you break dependencies. This tool tells you what to policy first.
Policy Lifecycle
provision-policyβ Provision pending draft changes to move them from draft to active state. Can provision all pending changes or specific items by href. Includes change descriptions for audit trail.compare-draft-activeβ Compare draft vs active policy to preview what would change on provisioning. Shows created, updated, and deleted rulesets, rules, IP lists, and services.
Enforcement Readiness
enforcement-readinessβ Assess whether an app is ready for enforcement. Analyzes traffic flows, existing policy coverage, enforcement modes, and ringfence status. Returns a readiness score (0-100) with actionable recommendations:Policy coverage (40 points) β what percentage of traffic is covered by rules
Ringfence exists (20 points) β has a ringfence ruleset been created
Enforcement mode (20 points) β are workloads in full/selective/visibility_only
No blocked traffic (10 points) β no unintended blocks
All remote apps covered (10 points) β no uncovered remote app traffic
Batch Operations
ringfence-batchβ Ringfence multiple apps at once. Optionally usesidentify-infrastructure-servicesto auto-order apps by infrastructure score (infrastructure first, then standard apps). Supports dry-run mode to preview all changes before applying.
Workload Enforcement Status
get-workload-enforcement-statusβ Get enforcement mode status across workloads, grouped by app and environment. Shows counts per mode (idle, visibility_only, selective, full) and identifies apps with mixed enforcement states β a common issue during rollouts.
Policy Coverage
get-policy-coverage-reportβ Generate a policy coverage report for an app showing what traffic is covered by existing rules vs what would be blocked. Breaks down by inbound/outbound, identifies uncovered services and remote apps, and provides an overall coverage percentage.find-unmanaged-trafficβ Find traffic involving unmanaged workloads or IP addresses. These are sources/destinations without app/env labels, representing policy blind spots. Filters by direction (inbound/outbound/both) and connection count.
Security Analysis
detect-lateral-movement-pathsβ Detect potential lateral movement paths by analyzing app-to-app traffic patterns. Identifies articulation points (bridge nodes) whose compromise would provide access to otherwise disconnected app groups. Computes reachability from any starting app and traces multi-hop paths up to a configurable depth.compliance-checkβ First look at policy posture against a framework (PCI-DSS, DORA, NIS2, NIST 800-53, CIS Controls, ISO 27001, SWIFT CSP, HIPAA, or general best practices). Keyword-routed heuristics on draft policy and recent traffic, summarised as a score with per-check findings (PASS/FAIL/WARNING). Not audit evidence.collect-compliance-evidenceβ Audit evidence for segmentation controls per app/env scope pair, from active policy and observed traffic: inventory, enforcement, VEN health, unmanaged workloads, described providing rules, no broad consumer, admitted services versus an approved list, inbound and outbound boundary crossings with a blocked-flow timeline, draft-versus-active drift, events and flows in the window. Per test and pair: PASS/FAIL/EXCEPTION/NOT_TESTED with the rule, the measured values and the rows. A capped pull never passes. Framework mapping lives in theillumio://compliance/*resources.
Event Monitoring
get-eventsβ Get PCE events with optional filtering by event type, severity, status, and result limits
Connection Testing
check-pce-connectionβ Verify PCE connectivity and credentials
Testing
The project includes a comprehensive integration test suite that runs against a real PCE using the MCP protocol.
# Set up credentials in .env
cat > .env << EOF
PCE_HOST=your-pce-host
PCE_PORT=8443
PCE_ORG_ID=1
API_KEY=your-api-key
API_SECRET=your-api-secret
EOF
# Run all tests
uv run pytest tests/ -vThe test suite covers:
Tool listing and schema validation
Full CRUD lifecycle for workloads, labels, IP lists, services, rulesets, and deny rules
Traffic flow queries and summaries
Ringfence creation (standard, selective, deny consumer flavors, merge idempotency)
Infrastructure service identification (scoring, sorting, tier classification)
Error handling for missing resources
Illumio Rule Processing Order
Understanding rule processing is essential for ringfencing:
Essential rules β built-in, cannot be modified
Override Deny rules β block traffic overriding all allows (emergency use)
Allow rules β permit traffic (ringfence remote app rules go here)
Deny rules β block specific traffic (ringfence deny-all-inbound goes here)
Default action β selective mode = allow-all, full enforcement = deny-all
In selective enforcement, the default is allow-all, so a deny rule is needed to make the ringfence effective. Known remote apps get allow rules (step 3) which are processed before the deny (step 4).
Visual Examples
All the examples below were generated by Claude Desktop and with data obtained through this MCP server.
Application Analysis
Detailed view of application communication patterns and dependencies
Analysis of traffic patterns between different application tiers
Infrastructure Insights
Overview dashboard showing key infrastructure metrics and status
Detailed analysis of infrastructure service communications
Security Assessment
Comprehensive security analysis report
Security assessment findings for high-risk vulnerabilities
PCI compliance assessment findings
SWIFT compliance assessment findings
Remediation Planning
Overview of security remediation planning
Detailed steps for security remediation implementation
Policy Management
Management interface for IP lists
Overview of ruleset categories and organization
Configuration of application ruleset ordering
Workload Management
Detailed workload analysis and metrics
Identification and analysis of workload traffic patterns
Label Management
Organization of PCE labels by type and category
Service Analysis
Automatic inference of service roles based on traffic patterns
Analysis of top 5 traffic sources and destinations
Project Planning
Project implementation timeline and milestones
Available Prompts
Ringfence Application
The ringfence-application prompt helps create security policies to isolate and protect applications by controlling inbound and outbound traffic.
Required Arguments:
application_name: Name of the application to ringfenceapplication_environment: Environment of the application to ringfence
Features:
Creates rules for inter-tier communication within the application
Uses traffic flows to identify required external connections
Implements inbound traffic restrictions based on source applications
Creates outbound traffic rules for necessary external communications
Handles both intra-scope (same app/env) and extra-scope (external) connections
Creates separate rulesets for remote application connections
Analyze Application Traffic
The analyze-application-traffic prompt provides detailed analysis of application traffic patterns and connectivity.
Required Arguments:
application_name: Name of the application to analyzeapplication_environment: Environment of the application to analyze
Analysis Features:
Orders traffic by inbound and outbound flows
Groups by application/environment/role combinations
Identifies relevant label types and patterns
Displays results in a React component format
Shows protocol and port information
Attempts to identify known service patterns (e.g., Nagios on port 5666)
Categorizes traffic into infrastructure and application types
Determines internet exposure
Displays Illumio role, application, and environment labels
How to use MCP prompts
Step1: Click "Attach from MCP" button in the interface

Step 2: Choose from installed MCP servers

Step 3: Fill in required prompt arguments:

Step 4: Click Submit to send the configured prompt
How prompts work
The MCP server sends the configured prompt to Claude
Claude receives context through the Model Context Protocol
Allows specialized handling of Illumio-specific tasks
This workflow enables automated context sharing between Illumio systems and Claude for application traffic analysis and ringfencing tasks.
Docker
The application is available as a Docker container from the GitHub Container Registry.
Pull the container
docker pull ghcr.io/alexgoller/illumio-mcp-server:latestYou can also use a specific version by replacing latest with a version number:
docker pull ghcr.io/alexgoller/illumio-mcp-server:1.0.0Run with Claude Desktop
To use the container with Claude Desktop, you'll need to:
Create an environment file (e.g.
~/.illumio-mcp.env) with your PCE credentials:
PCE_HOST=your-pce-host
PCE_PORT=your-pce-port
PCE_ORG_ID=1
API_KEY=your-api-key
API_SECRET=your-api-secretAdd the following configuration to your Claude Desktop config file:
On MacOS (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"illumio-mcp-docker": {
"command": "docker",
"args": [
"run",
"-i",
"--init",
"--rm",
"-v",
"/Users/YOUR_USERNAME/tmp:/var/log/illumio-mcp",
"-e",
"DOCKER_CONTAINER=true",
"-e",
"PYTHONWARNINGS=ignore",
"--env-file",
"/Users/YOUR_USERNAME/.illumio-mcp.env",
"illumio-mcp:latest"
]
}
}
}Make sure to:
Replace
YOUR_USERNAMEwith your actual usernameCreate the log directory (e.g.
~/tmp)Adjust the paths according to your system
Run Standalone
You can also run the container directly:
docker run -i --init --rm \
-v /path/to/logs:/var/log/illumio-mcp \
-e DOCKER_CONTAINER=true \
-e PYTHONWARNINGS=ignore \
--env-file ~/.illumio-mcp.env \
ghcr.io/alexgoller/illumio-mcp-server:latestDocker Compose
For development or testing, you can use Docker Compose:
version: '3'
services:
illumio-mcp:
image: ghcr.io/alexgoller/illumio-mcp-server:latest
init: true
volumes:
- ./logs:/var/log/illumio-mcp
environment:
- DOCKER_CONTAINER=true
- PYTHONWARNINGS=ignore
env_file:
- ~/.illumio-mcp.envThen run:
docker-compose upContributing
Fork the repository
Create a feature branch
Commit your changes
Push to the branch
Create a Pull Request
License
This project is licensed under the GPL-3.0 License. See the LICENSE file for details.
Support
For support, please create an issue.
Available Tools
55 toolsbuild-identity-graphA
Identity-centric view of traffic: which ACCOUNT the communicating process ran as, which workloads it acted from, what it reached, and over what period. Answers least-privilege questions that workload labels cannot -- what can this account reach, and from how many places. Resolves DOMAIN\user and user@realm to one identity, so a person appearing as both CRYSTAL\jdoe and jdoe is not counted twice. Classifies service accounts (root, SYSTEM, mysql) separately from interactive ones, because wide host spread is normal for a daemon and notable for a person. Findings are ranked by how unexpected they are, and are observations, not verdicts.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Destinations/ports/processes listed per identity (default 10) | |
| end_date | No | YYYY-MM-DD; defaults to today | |
| identity | No | Restrict to these accounts. Domain-qualified or bare both work: 'CRYSTAL\jdoe' and 'jdoe' select the same identity. | |
| start_date | No | YYYY-MM-DD; defaults to lookback_days ago | |
| include_edges | No | Include the identity -> workload -> destination edges. Capped at 400, ranked by connections; the identity rollup answers most questions without them. | |
| lookback_days | No | Used when start_date is omitted (default 30) | |
| include_sources | No | Source filters: label HREFs or key=value (ANDed), IP list/workload HREFs, IPs, e.g. ['app=vdi'] | |
| policy_decisions | No | allowed, blocked, potentially_blocked | |
| include_destinations | No | Destination filters, same forms as include_sources plus FQDNs | |
| include_service_accounts | No | Include daemon accounts (root, SYSTEM, mysql, ...). Default true. Set false to look only at interactive users. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden well: it explains identity normalization, separate handling of service accounts, ranking of findings by unexpectedness, and that results are observations rather than verdicts. It does not cover permissions, performance limits, or output shape in detail, but the key interpretive behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but mostly front-loaded, starting with the identity-centric view and then explaining differentiation, identity resolution, service-account handling, and ranking caveats. Each sentence contributes useful context, though it is longer than strictly necessary for a well-described schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex ten-parameter analysis tool with no output schema and no annotations, the description provides the conceptual model an agent needs: what is analyzed, how identities are normalized, how service accounts are treated, and how findings are ranked. It lacks explicit output structure details, but the schema covers parameter mechanics and the description covers interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all ten parameters are already documented. The description reinforces the identity-resolution and service-account concepts that matter for interpretation, but adds little parameter-specific syntax or constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly establishes an identity-centric traffic view and enumerates what it reports: account, workloads, destinations, and time period. It distinguishes itself from workload-label-based views, but does not explicitly name a sibling tool or use a direct verb phrase such as 'builds an identity graph.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: answering least-privilege questions about what an account can reach and from how many places, especially where workload labels fall short. It does not provide explicit exclusions or point to named alternative tools for overlapping traffic-analysis tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check-pce-connectionA
Is the PCE answering, and how fast. Probes GET /health first and returns JSON: status (ok | unreachable), health_http_status, health_round_trip_ms, total_seconds. On failure the error names the host, how long it waited and the HTTP status or timeout -- a 5xx is the PCE or its front end, a timeout is the network. Waits are bounded (MCP_PCE_RETRIES, MCP_PCE_REQUEST_TIMEOUT); run this first when any other tool returns tool_timeout.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it discloses the return fields (status, health_http_status, health_round_trip_ms, total_seconds), what error messages contain (host, wait duration, HTTP status/timeout), how to interpret failures (5xx = PCE/front end, timeout = network), and that waits are bounded by MCP_PCE_RETRIES and MCP_PCE_REQUEST_TIMEOUT.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core question ('Is the PCE answering, and how fast'), followed by endpoint, return shape, failure semantics, and the operational trigger. No sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter diagnostic tool with no annotations and no output schema, the description fully compensates by specifying the call, the response fields, the error content, timeout interpretation, and bounded-wait controls. An agent has everything needed to invoke and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. There is nothing parameter-wise for the description to add or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: it probes GET /health to determine whether the PCE is answering and how fast. This is clearly distinct from sibling tools like check-pce-credentials-status or get-workloads, and even names the exact endpoint being called.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit usage trigger -- 'run this first when any other tool returns tool_timeout' -- which is strong operational guidance. It does not explicitly distinguish itself from the related check-pce-credentials-status sibling, so this is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check-pce-credentials-statusA
Check which PCE credentials apply to the current user without revealing secrets. Always carries mode: per_user (your own key), shared (the operator's service account -- PCE-side audit shows it, not you), or stdio. In hybrid mode this reflects THIS request: registered users whose key could not be used are told they ran as shared.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses that secrets are never revealed and explains the three possible `mode` values plus the hybrid-mode caveat that a user may actually have run as shared. It stops short of explicitly declaring read-only/idempotency or error behavior, but the mode disclosure is meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first clause, followed by the mode explanation. The final hybrid-mode sentence is dense and jargon-heavy but earns its place as the only documentation of an undocumented output field.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, annotation-less, output-schema-less tool, the description supplies the key missing surface: what `mode` means and how hybrid mode can misattribute the caller. Remaining gaps (read-only confirmation, error cases) are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero input parameters, so the baseline is 4. The description goes further by documenting `mode` semantics (per_user/shared/stdio) that would otherwise be invisible, though that is an output field not present anywhere in the provided schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('Check which PCE credentials apply to the current user') plus scope ('without revealing secrets'), which cleanly separates it from register-pce-credentials and delete-pce-credentials. An agent can identify it as the read-only credential-status probe without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the read-only 'check ... status' framing and by contrast with the register/delete siblings, but the description never explicitly states when to call this versus those tools or any preconditions. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
collect-compliance-evidenceA
Audit evidence for segmentation controls, per app/env scope pair, from ACTIVE policy (pversion=active by default) and observed traffic. Runs the framework-independent tests the illumio-compliance-evidence skill defines (T1 inventory, T2 enforcement, T3 VEN health, T4 unmanaged in scope, T5 providing rules described, T6 no broad consumer, T7 admitted services vs approved list, T8 inbound boundary flows with potentially-blocked and blocked evidence plus a per-day timeline, T9 outbound crossings, T11 draft-vs-active drift for the scope's rulesets, T14 events and flows present) and returns, per test and per pair, {result: PASS|FAIL|EXCEPTION|NOT_TESTED, measured, rows, evidence}. No score. A capped pull never yields PASS (EXCEPTION). An unknown scope label is an error. T10 (unknown endpoints), T12 and T13 (attestations) are listed in not_run. Framework requirement mapping stays in the illumio://compliance/* resources. Read-only. Query cost: scope-wide one pull each of labels, rulesets, IP lists, services, pending changes and events, plus per pair one workload pull, four traffic queries and one deny-rule read per matched ruleset; queries reports the count.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | Yes | Scope pairs, e.g. [{"app": "pay", "env": "prod"}]. Each is resolved to label hrefs; an unknown value is an error listing the valid values. | |
| tests | No | Subset of test ids to run, e.g. ["T1", "T2", "T5"]. Default: every runnable test (T1-T9, T11, T14). The inventory (T1 data) is always collected because an empty pair makes the rest NOT_TESTED. | |
| end_date | No | Window end, YYYY-MM-DD (with start_date). | |
| max_rows | No | Evidence rows returned per test and pair (default 200); rows_total and rows_truncated say when more exist. | |
| pversion | No | Policy version the ruleset tests read. Evidence packs cite active; echoed as policy_version. | active |
| start_date | No | Window start, YYYY-MM-DD (with end_date). | |
| max_results | No | Row cap per traffic query (default 500). A query returning exactly the cap is capped and cannot PASS; narrow the window or raise this. | |
| lookback_days | No | Traffic and event window ending today (default 30; PCI packs use 90). Ignored when start_date and end_date are given. | |
| approved_services | No | The organisation's approved service list. Without it the approved-list clauses of T7, T8 and T9 are NOT_TESTED and the observed set is returned as the candidate list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: 'Read-only', no score, capped pulls never PASS (EXCEPTION), unknown scope is an error, T10/T12/T13 land in not_run, and it discloses query cost in concrete pulls. This is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph, front-loaded with purpose, then test list, return shape, edge-case rules, and cost. Despite length every sentence carries distinct information; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but the description specifies the return object {result: PASS|FAIL|EXCEPTION|NOT_TESTED, measured, rows, evidence}, the not_run behavior, rows_total/rows_truncated, and query cost. Complete enough for an agent to invoke and interpret correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds genuine meaning beyond the schema - PCI packs use 90-day lookback, pversion is echoed as policy_version, and the capped-result consequence for max_results - which justifies above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (audit evidence for segmentation controls per app/env scope pair) and enumerates the exact tests T1-T9, T11, T14 it runs, plus what it returns. The agent can distinguish this from siblings like compliance-check or find-unmanaged-traffic from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains defaults (all runnable tests), the always-collected T1 inventory, that unknown scope labels are errors listing valid values, and that framework requirement mapping lives in illumio://compliance/* resources. It gives strong context but does not explicitly name a sibling alternative or when-not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare-draft-activeA
Compare draft vs active policy to see what would change on provisioning. Shows new, modified, and deleted rulesets, rules, IP lists, and services.
| Name | Required | Description | Default |
|---|---|---|---|
| resource_type | No | Type of resource to compare (default: all) | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does well by stating this is a comparison operation that 'shows' changes, strongly implying a non-mutating preview rather than an actual provisioning action. It also discloses exactly what categories of changes are reported (new, modified, deleted), though it does not discuss output format, limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences with no filler. The action and purpose are front-loaded, and the output detail is compressed into a single clear list. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (one optional enum parameter, no required inputs, no nested objects), the description is largely complete for selection and invocation. It explains what the tool does, why you would use it, and what kinds of results to expect. The absence of an output schema or more explicit return-format details is a minor gap, not a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single parameter fully with an enum, a default, and a description, so schema coverage is 100%. The tool description adds little parameter-specific meaning beyond listing resources conceptually; the baseline of 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear, specific action: 'Compare draft vs active policy' and names the resource (policy) plus the purpose ('to see what would change on provisioning'). It also enumerates the output categories (rulesets, rules, IP lists, services), making the tool's function distinct from siblings like provision-policy or get-rulesets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'to see what would change on provisioning' implies this is a pre-check tool used before applying a draft, which provides some usage context. However, there is no explicit when-to-use/when-not-to-use guidance and no named alternatives or exclusions, so the guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compliance-checkA
First look at policy posture against a framework (PCI-DSS, DORA, NIS2, NIST, CIS, ISO 27001, SWIFT CSP, HIPAA): keyword-routed heuristics on draft policy and recent traffic, summarised as a score. Not audit evidence: for per-test results from ACTIVE policy for an app/env scope use collect-compliance-evidence. An unknown app_name or env_name label is an error, not an estate-wide run.
| Name | Required | Description | Default |
|---|---|---|---|
| app_name | No | Application to check (optional β if omitted, checks all apps) | |
| env_name | No | Environment to check (optional) | |
| framework | No | Compliance framework to check against (default: general). Read the corresponding illumio://compliance/* resource for detailed framework guidance. | general |
| lookback_days | No | Number of days to look back for traffic analysis (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden well: it discloses that analysis runs against DRAFT policy and recent traffic rather than active policy, that results are heuristic and score-summarised, and that unknown scope labels fail rather than widening. It stops short of stating read-only safety, lookback implications, or result stability/rate behavior, leaving a small gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what the tool is, then the exclusion/alternative, then the scoping gotcha. No filler and no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Four all-optional parameters and no output schema are handled adequately: inputs are documented in the schema, the tool's purpose and limits are described, and the output is characterised as a score. The one remaining gap is what the score response actually contains (per-framework breakdown? findings?), which matters since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema by clarifying the failure mode of app_name/env_name (unknown label = error) and by pointing to the illumio://compliance/* resources for framework guidance. It does not explain how lookback_days interacts with the heuristic scoring beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('check policy posture against a framework'), names the supported frameworks, and describes the mechanism (keyword-routed heuristics on draft policy plus recent traffic) and output shape (a score). It is explicitly differentiated from the sibling collect-compliance-evidence, so an agent can tell them apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions itself as a 'first look' and states when NOT to use it ('Not audit evidence: for per-test results from ACTIVE policy for an app/env scope use collect-compliance-evidence'), naming the alternative and the selecting condition. It also adds a scoping rule β an unknown app_name/env_name label is an error, not an estate-wide run β which prevents a common misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-deny-ruleA
Create a deny rule in an existing ruleset. Deny rules block specific traffic (processed after allow rules). Override deny rules (override_deny=true) are the HIGHEST priority β they block traffic even when allow rules exist, meaning 'this must not happen under any circumstances.' Use override deny for emergency isolation, hard compliance blocks, or active attack response β NOT for normal segmentation or ringfencing. Rule processing order: 1) Essential rules, 2) Override Deny (blocks above all), 3) Allow rules, 4) Deny rules, 5) Default action. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| consumers | Yes | Array of consumer (source) references: 'ams' for all workloads, label hrefs, key=value pairs, or 'iplist:<name>' | |
| providers | Yes | Array of provider (destination) references: 'ams' for all workloads, label hrefs, key=value pairs, or 'iplist:<name>' | |
| ruleset_href | No | Href of the ruleset to add the deny rule to (e.g., /orgs/1/sec_policy/draft/rule_sets/123) | |
| ruleset_name | No | Name of the ruleset to add the deny rule to (alternative to ruleset_href) | |
| override_deny | No | If true, creates an override deny rule β the highest priority deny that blocks traffic even if allow rules exist. Means 'this must not happen under any circumstances.' Use for emergency isolation, hard compliance blocks (e.g., PCI zones), or active attack response. If false (default), creates a regular deny rule (processed after allow rules). | |
| ingress_services | Yes | Services this rule covers. Each entry is EITHER an inline port ({'port': 443, 'proto': 'tcp'}), OR a service object by href ({'href': '/orgs/1/sec_policy/draft/services/42'}), OR a service by exact name ({'service': 'All Services'}). Mixing those keys in one entry is an error. For 'any service' use {'service': 'All Services'} β an empty list is rejected by the PCE and {'port': 0} does not mean all ports. Deny rules cannot use services carrying Windows process qualifiers; write those as an allow above a broad deny. | |
| unscoped_consumers | No | Whether to allow unscoped consumers (extra-scope rule) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden and meets it: it flags 'WRITE OPERATION: changes PCE state,' discloses that gated clients pause for user approval, and warns that 'the call has not failed and must not be retried while waiting.' It also discloses the priority-ordering behavior (override deny blocks above all). This is exactly the operational context an agent needs to avoid retrying a write that is merely awaiting approval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, then structured with a numbered list for processing order and an all-caps 'WRITE OPERATION' flag for the critical warning. Every sentence carries distinct information β purpose, priority semantics, use cases, exclusion, order, and retry behavior β with no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter write operation with no annotations and no output schema, the description covers the invocation semantics, use-case selection, priority behavior, and the approval-gating pause comprehensively. The remaining gaps are minor: it doesn't state what a successful response returns or how conflicts with existing rules are handled. These are non-blocking for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning on top by explaining the full rule processing order (1-5), which gives the override_deny parameter its operational weight, and by reinforcing the 'must not happen under any circumstances' semantics. It does not add much for consumers/providers/ruleset addressing, but the schema already documents those thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Create a deny rule in an existing ruleset,' and immediately defines what a deny rule does (blocks specific traffic, processed after allow rules). It clearly distinguishes override deny rules from regular deny rules, and the tool is unambiguously differentiated from siblings like delete-deny-rule, update-deny-rule, create-ruleset, and create-ringfence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: override deny for 'emergency isolation, hard compliance blocks, or active attack response' and an explicit exclusion β 'NOT for normal segmentation or ringfencing.' The numbered processing order also tells the agent where deny rules sit relative to allow rules. The only gap is that it never names the alternative sibling tool (e.g., create-ringfence) for the normal segmentation case, leaving that to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-iplistA
Create an IP List from IP ranges, FQDNs (api.example.com, *.example.com), or both. At least one entry is required. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| fqdn | No | Deprecated alias for a single fqdns entry; use fqdns. | |
| name | Yes | Name of the IP List | |
| fqdns | No | FQDN entries, e.g. ["*.example.com", {"fqdn": "api.example.com", "description": "vendor API"}]. An IP list can be FQDN-only; ip_ranges is then optional. | |
| ip_ranges | No | List of IP ranges to include | |
| description | No | Description of the IP List |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so effectively: it explicitly labels this a 'WRITE OPERATION' that changes PCE state, and explains the approval-gating behavior in clients (call pauses, not failed, must not be retried). This is critical context beyond what any structured field provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core purpose, then the entry constraint, then the write-operation warning and client-gating detail. Every sentence contributes essential information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, no annotations, no output schema), the description is complete enough: it covers what the tool does, how to call it (at least one entry), the write side effect, and the client-specific approval behavior. It does not need to explain return values since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter. The description adds a meaningful constraint not present in the schemaβ'At least one entry is required' (the schema only requires 'name')βwhich helps the agent avoid invalid calls. It also repeats the input types (ranges, FQDNs) but goes beyond schema by clarifying the minimum content requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('IP List') and enumerates the input types (IP ranges, FQDNs, or both), which clearly distinguishes it from sibling tools like update-iplist and delete-iplist. An agent can identify the tool's function without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: it creates a new IP list and requires at least one entry. However, it does not explicitly state when to use this versus update-iplist or mention any exclusions or prerequisites. The usage is strongly implied but not fully elaborated with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-labelB
Create a label of a specific type and the value in the PCE WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on the transparency burden. It explicitly states this is a write operation that changes PCE state and explains the approval-gating behavior in clients, including the key caveat that the call must not be retried while waiting. This is valuable behavioral disclosure beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences and no filler. The first sentence states the action, and the second delivers a necessary operational warning. Well front-loaded and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition covers side effects and approval handling, which is important for a write operation. However, with 0% schema coverage and no explanation of key/value semantics, valid label types, response behavior, or potential uniqueness constraints, the description is not fully self-sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented key and value parameters. It mentions 'a specific type and the value' but never explicitly maps type to the key parameter or defines allowed/formatted values. An agent would struggle to confidently populate the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete operationβ'create a label'βwith a resource (label) and context (PCE). It is not a tautology and is distinguishable from update-label and delete-label. However, the phrase 'a specific type and the value' is slightly vague and does not explicitly say key/value.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to choose create-label over update-label or delete-label, and names no alternatives or preconditions. The retry warning is about post-invocation behavior, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-ringfenceA
Create a ringfencing policy for an application. This analyzes traffic flows to discover which other apps communicate with this app, then creates a ruleset with:
An intra-scope rule allowing all workloads within the app to communicate on All Services
Extra-scope rules for each remote app+env discovered in traffic, allowing them in on All Services The result is a coarse-grained segmentation that controls which apps can talk to each other, reducing risk without requiring per-port policies. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | If true, analyze traffic and report what would be created without actually creating anything (default: false) | |
| app_name | Yes | Application label value (e.g., 'CRM', 'Ordering', 'ELK') | |
| env_name | Yes | Environment label value (e.g., 'Production', 'Staging', 'Development') | |
| selective | No | If true, adds a deny rule blocking all inbound traffic to the app. In selective enforcement mode the default action is allow-all, so without this deny rule the ringfence has no teeth. Allow rules for known remote apps are processed before the deny rule (rule order: override_deny > allow > deny > default), so known apps pass through and everything else hits the deny. This gets you to enforcement faster than full enforcement mode. | |
| deny_service | No | Service the selective-mode deny rule covers. Defaults to All Services ('deny everything except the allows above'). Narrow it to deny only specific ports. | |
| ruleset_name | No | Custom name for the ringfence ruleset (default: 'RF-<app_name>-<env_name>') | |
| skip_allowed | No | If true, skip creating rules for remote apps whose traffic is already fully allowed by existing policy. Default is false, meaning rules are created for all observed traffic regardless of policy decision. This makes the ringfence ruleset self-documenting β it shows the complete picture of app connectivity. Set to true for minimal rulesets that only fill policy gaps. | |
| deny_consumer | No | Controls which consumers the deny rule targets (only used with selective=true). Illumio pushes deny rules to the source workload, so this choice matters: 'any' (default) = IP list Any (0.0.0.0/0) as consumer, deny rule only written to destination workloads inside the scope. Safest, no impact on remote workloads. 'ams' = All Workloads as consumer, deny rule pushed to every managed workload outside the scope. Broader enforcement but wider blast radius. 'ams_and_any' = both All Workloads and Any IP list, maximum coverage for managed and unmanaged sources. | any |
| lookback_days | No | Number of days to look back for traffic flows (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It explicitly flags 'WRITE OPERATION: changes PCE state,' explains that gated clients may pause for user approval, warns that the call should not be retried while waiting, and details rule ordering and how deny rules are pushed to source workloads. This goes well beyond a generic 'update' warning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense, with a numbered list breaking down the generated rules and a clearly separated approval caveat. It is front-loaded with the core purpose. Some detail, such as selective-mode rule ordering, is repeated in the schema, so a couple of sentences could theoretically be trimmed, but the structure keeps it navigable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, nine parameters, and absence of annotations or output schema, the description is very complete: it explains side effects, approval behavior, generated rule types, and coarse-grained intent. The main gap is that it does not describe what the API returns or how to interpret the response after the approval completes, though that is not strictly required for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the description does not need to re-document parameters. It does add high-level context by explaining the overall policy structure and selective-mode rule ordering, but it does not add unique meaning for most individual parameters beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Create a ringfencing policy for an application.' It then distinguishes the tool's behavior from general policy creation by detailing the intra-scope and extra-scope rules it generates. This makes its function clear even alongside siblings like create-ruleset and ringfence-batch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this when you need a coarse-grained segmentation policy discovered from traffic flows. It explains what the result looks like and even warns about approval pauses in gated clients. However, it does not explicitly contrast itself with alternatives such as ringfence-batch or create-ruleset, so it lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-rulesetA
Create a ruleset in the PCE with support for ring-fencing patterns WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the ruleset (e.g., 'RS-ELK'). Must be unique in the PCE. | |
| rules | No | ||
| scopes | Yes | List of label combinations that define scopes. Each scope is an array of label values. This need to be label references like /orgs/1/labels/57 or similar. Get the label href from the get-labels tool. | |
| description | No | Description of the ruleset (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It explicitly warns that this is a WRITE OPERATION that changes PCE state and describes the approval-pause behavior in gated clients, including the important warning that the call must not be retried while waiting. This is strong context, though it does not cover post-approval outcomes or failure semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two efficient sentences with no filler. The most operationally important factsβthat this is a write operation and that gated clients pause for approvalβare front-loaded, and every clause adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The write/approval behavior is clearly conveyed and the schema covers most parameter semantics, but the description omits guidance on how this tool relates to the ring-fencing sibling tools and does not describe result/return behavior in the absence of an output schema. For a complex create operation with no annotations, this is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, and the schema already provides rich parameter-level documentation for scopes, rules, ingress/egress services, and name uniqueness. The tool description itself adds no parameter-specific meaning, so it stays at the baseline rather than exceeding what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a ruleset in the PCE', which clearly distinguishes it from update/delete ruleset tools and from workload/IP-list creation tools. However, it does not differentiate it from the closely related create-ringfence or ringfence-batch sibling tools, so it stops one step short of a top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives, such as create-ringfence, ringfence-batch, or create-deny-rule. Mentioning 'support for ring-fencing patterns' hints at relevance but does not tell an agent when this generic ruleset creation path is preferable to the ring-fence-specific tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-serviceA
Create a service in the PCE. Supply at least one of service_ports, windows_services or windows_egress_services. windows_egress_services matches a process on the consumer side and needs a Windows VEN there. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the service | |
| description | No | Description of the service | |
| service_ports | No | Array of port/protocol definitions | |
| windows_services | No | Inbound Windows process/service qualifiers. Each entry needs at least one of port, process_name, service_name. | |
| windows_egress_services | No | Outbound process qualifiers, matched on the CONSUMER side. Takes process_name/service_name ONLY β the PCE rejects port/proto here, so pair it with service_ports for the port. Requires a Windows VEN on the consumer; non-Windows consumers ignore the process and match on port alone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and explicitly states 'WRITE OPERATION: changes PCE state.' It also discloses that clients may pause for user approval and that retrying during the wait is incorrect. This meaningfully informs agent behavior beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: purpose, critical parameter constraint, and an operational warning. Every sentence earns its place, and the most important usage requirement is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with no annotations and no output schema, the description covers the essential selection, parameter constraints, side-effect, and retry behavior. It does not discuss duplication, authorization, or the return value, but those are less critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: the at-least-one-of constraint, the consumer-side matching behavior of windows_egress_services, and the note that egress only takes process_name/service_name and must be paired with service_ports. This compensates well for what the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Create a service in the PCE.' It then elaborates the three supported service definitions. It does not explicitly contrast with siblings like update-service or get-services, but the action and noun are specific enough for basic differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical usage constraints: 'Supply at least one of service_ports, windows_services or windows_egress_services.' It also flags a conditional requirement for windows_egress_services needing a Windows VEN on the consumer. It does not explicitly name alternatives or when not to use this tool, so it misses the top benchmark.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create-workloadA
Create a Illumio Core unmanaged workload in the PCE WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| labels | No | ||
| ip_addresses | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It explicitly warns that this is a WRITE OPERATION changing PCE state and that gated clients may pause for user approval, adding important operational context beyond the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with two sentences that each earn their place: one for purpose and one for critical write-approval behavior. It is front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the useful gating warning, the description omits parameter guidance, return-value expectations, and any constraints on labels or IP address formats. Since there is no output schema and no annotations, these gaps leave the tool only partially specified for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description provides no information about 'name', 'labels', or 'ip_addresses'. The description does not compensate for the schema's lack of parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Create') and a specific resource ('an Illumio Core unmanaged workload in the PCE'), making the tool's purpose clear. It also distinguishes itself from sibling tools like update-workload and delete-workload.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating unmanaged workloads, but it does not explicitly compare with alternatives or describe when not to use it. It gives clear context for the operation but no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-deny-ruleA
Delete a deny rule from a ruleset by its href WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | Yes | Deny rule href (e.g., /orgs/1/sec_policy/draft/rule_sets/123/deny_rules/456) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explicitly discloses that this is a write operation that 'changes PCE state' and warns about the approval pause in gated clients, advising against retries. This is valuable non-obvious behavior. It doesn't cover side effects or error cases, but for a single-parameter delete it is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The purpose is front-loaded, and the critical operational warning follows immediately. Every word earns its place; the all-caps 'WRITE OPERATION' is a minor stylistic choice that doesn't harm clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description sufficiently covers what it does and the most important runtime behavior (approval gating). Explicit return-value semantics would be nice but are not necessary given the simplicity and absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the href parameter is fully described with an example path format. The description merely restates 'by its href' without adding new detail, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete'), a specific resource ('deny rule from a ruleset'), and a selection mechanism ('by its href'). This clearly differentiates it from sibling tools like delete-sec-rule or delete-ruleset without needing to open schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this when deleting a deny rule. It does not explicitly name alternatives (e.g., update-deny-rule for modification), but the operation is unambiguous given the sibling set. The approval-gating note provides additional operational context, though it is more about behavior than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-iplistA
Delete an IP List from the PCE. Provide either 'href' or 'name' (but not both) to identify the IP List. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | No | Href of the IP List to delete (e.g., /orgs/1/sec_policy/draft/ip_lists/123) | |
| name | No | Name of the IP List to delete (alternative to href) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly labels the operation as a WRITE OPERATION that changes PCE state, and discloses that gated clients pause for user approval, warning that the call has not failed and must not be retried. This is exactly the behavioral context an agent needs beyond the action itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: action, parameter selection rule, and critical behavioral warning. The most important information is front-loaded, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with two optional parameters and no output schema, the description fully equips an agent to invoke it correctly. It covers resource, identification method, exclusivity constraint, operation type, and client-side behavior. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters have descriptions, so the baseline is 3. The description adds meaningful value by specifying the exclusive-or relationship between 'href' and 'name' ('but not both'), which is not captured in the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Delete an IP List from the PCE.' This clearly distinguishes it from sibling tools like create-iplist, update-iplist, and get-iplists. No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs how to identify the resource: provide either 'href' or 'name' but not both. It clearly states the context for use ('Delete an IP List from the PCE'). It does not explicitly name exclusions or alternatives, but the operation is unambiguous and the identification rule is strong guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-labelA
Delete a label in the PCE WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly warns that this is a write operation that changes PCE state and that approval pauses are not failures, which prevents dangerous retries. This is strong transparency beyond what the schema offers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and front-loaded with the core action and state-change warning. The only minor issue is the run-together phrasing 'PCE WRITE OPERATION', which could be misread, but overall every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete operation with no output schema, the description covers the most important behavioral context, especially the approval-gating and retry guidance. It is not fully complete because it omits parameter semantics and any side effects of deleting a label, but it is adequate for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has two required parameters, key and value, with 0% description coverage. The tool description does not explain what key and value represent, how they identify the label, or any constraints on their values. The names imply they are label identifiers, but the description provides no real semantic help.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a label') and the target resource ('in the PCE'), and explicitly characterizes it as a write operation. It does not explicitly contrast with siblings like create-label or update-label, but the verb and resource make the intended operation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful operational guidance by warning that gated clients pause for approval and that the call must not be retried while waiting. However, it does not provide explicit guidance about when to choose delete-label over alternatives such as update-label or create-label.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-pce-credentialsA
Remove the current user's stored PCE credentials. Idempotent β safe to call even if no credentials are stored. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it delivers. It explicitly states this is a WRITE OPERATION that changes PCE state, discloses idempotency, and warns about approval pauses in gated clients with the crucial guidance that the call has not failed and must not be retried while waiting. This is exemplary behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action is in the first sentence, followed by essential behavioral notes. Every sentence earns its place, covering action, idempotency, side-effect, and client-gating behavior without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, no-output-schema tool, the description is complete. It tells the agent what is removed, what side effects occur, how to handle approval delays, and that failure is not implied. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4; no parameter semantics are needed. The description accurately reflects that the operation targets the current user's credentials without requiring additional inputs, which fully covers the parameter dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Remove') and a precise resource ('the current user's stored PCE credentials'), clearly distinguishing it from sibling tools like register-pce-credentials and check-pce-credentials-status. An agent knows exactly what operation this performs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes when this tool is appropriate: remove stored credentials for the current user. It also adds important usage context by noting the operation is idempotent and safe to call even when no credentials are stored, so the agent need not pre-check. It does not explicitly name alternatives, but for a simple delete operation the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-rulesetA
Delete a ruleset from the PCE by its href WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | Yes | Href of the ruleset to delete (e.g., /orgs/1/sec_policy/draft/rule_sets/123) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It explicitly flags this as a WRITE OPERATION that changes PCE state and warns that gated clients will pause for approval, emphasizing that retries are inappropriate while waiting. This is valuable context beyond what the schema or name alone would convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first fronts the core purpose and the second delivers a critical non-obvious operational warning. Every word earns its place, and the all-caps 'WRITE OPERATION' usefully emphasizes the mutation risk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no output schema and no annotations, the description covers the essential behavior: what is deleted, what changes, and how approval-gated clients behave. It does not describe post-approval responses or failure modes, but this is minor for such a simple operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single href parameter, and the schema already includes a descriptive example. The description merely says 'by its href' without adding format constraints, validation rules, or behavioral meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Delete a ruleset from the PCE') and the required input mechanism ('by its href'). This clearly differentiates it from sibling delete tools such as delete-workload, delete-deny-rule, and delete-sec-rule by naming the exact resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrasing implies the tool is used when a ruleset needs to be deleted by href, but it does not explicitly contrast this with alternatives like update-ruleset or delete-deny-rule. No exclusions or prerequisites are mentioned beyond what the schema already states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-sec-ruleA
Delete a single allow rule from a ruleset, leaving the rest of the ruleset intact. For deny rules use delete-deny-rule. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | Yes | Rule href, e.g. /orgs/1/sec_policy/draft/rule_sets/2/sec_rules/3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden. It declares 'WRITE OPERATION: changes PCE state,' which is a critical side-effect disclosure, and goes further to warn that in gated clients the call pauses for user approval and 'must not be retried while waiting.' This is exemplary behavioral transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with no filler. The core action, sibling alternative, side-effect warning, and retry instruction each earn their place and are ordered logically, from definition to operation to caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter delete tool with no output schema, the description supplies all essential context: what it does, when to use, side effects, and client-specific approval behavior. The only minor omission is what happens after approval, but that can be inferred from the call completing normally, so this is essentially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, href, has a 100% descriptive schema including an example. The description adds no extra parameter-level semantics, so it correctly rests on the schema. Baseline 3 applies by design.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Delete a single allow rule from a ruleset, leaving the rest of the ruleset intact.' It explicitly differentiates from the sibling delete-deny-rule by naming it and stating the condition ('For deny rules use delete-deny-rule'). This leaves no ambiguity about what the tool operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use this tool ('allow rule') and when not to ('For deny rules use delete-deny-rule'). The phrase 'leaving the rest of the ruleset intact' also signals that this tool is for single-rule deletion rather than deleting the whole ruleset. This is direct, actionable usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-serviceA
Delete a service from the PCE. Identify by href (preferred) or name. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | No | Service href (e.g., /orgs/1/sec_policy/draft/services/123) | |
| name | No | Service name (alternative to href) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it explicitly flags 'WRITE OPERATION: changes PCE state' and explains the approval-pause behavior in gating clients, including that the call has not failed and must not be retried. This is valuable behavioral disclosure beyond the bare delete action, though it does not mention irreversibility or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then state-change warning, then approval-pause guidance. Every sentence adds distinct value with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete tool without an output schema, the description covers the essential operational context: the write side effect, the approval delay, and identifier selection. It could explicitly state that at least one of href or name is required, but this is reasonably implied and not a major gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents href and name. The description adds only a preference hint ('href preferred') without new semantic detail, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Delete a service from the PCE.' This clearly distinguishes it from sibling tools like delete-workload, delete-iplist, or delete-ruleset. The resource scope (PCE service) is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives parameter-usage guidance ('Identify by href (preferred) or name') but does not explicitly state when to use this tool versus alternatives like delete-workload or delete-sec-rule. The context is implied by the tool name and resource, but no exclusions or sibling comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete-workloadA
Delete a workload from the PCE. Identify by href (preferred) or name. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | No | Workload href (e.g., /orgs/1/workloads/xxxx) | |
| name | No | Workload name (alternative to href) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it labels the tool as 'WRITE OPERATION: changes PCE state' and warns that in gated clients the call pauses for user approval, adding that the call has not failed and must not be retried while waiting. This is significant behavioral context, though it does not discuss side effects or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each earning its place: the action, the identification guidance, and the critical behavioral warning. It is front-loaded with the main purpose and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive operation with no annotations and no output schema, the description covers the essential facts: what is deleted, how to identify it, that it changes PCE state, and the approval-gating behavior affecting retries. It omits finer details like permanence or cancellation handling, but is strong for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for both parameters, including the fact that name is an alternative to href. The description reinforces this with 'href (preferred) or name' but adds no new semantic information beyond what the schema already states, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Delete a workload from the PCE.' This clearly distinguishes it from sibling tools like delete-deny-rule or delete-iplist, and even from update-workload and create-workload, by naming the workload as the target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives invocation-level guidance ('Identify by href (preferred) or name') but does not explicitly describe when to use this tool versus alternatives such as update-workload or other delete-* siblings. No exclusions or alternative routing is provided; the usage context is implied through the tool name and action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect-lateral-movement-pathsA
Analyze traffic patterns to detect potential lateral movement paths β chains of connections that could allow an attacker to pivot between applications. Identifies apps that serve as bridges between otherwise disconnected app groups.
| Name | Required | Description | Default |
|---|---|---|---|
| app_name | No | Starting application to analyze paths from (optional β if omitted, analyzes all apps) | |
| env_name | No | Environment to focus on (optional) | |
| max_hops | No | Maximum number of hops to trace (default: 4) | |
| lookback_days | No | Number of days to look back (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the analytical nature ('Analyze traffic patterns', 'detect potential') and the key concept of bridge apps, implying a read-only, heuristic analysis. But it does not mention data dependencies, limitations, or whether results are approximate or require additional validation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The primary purpose is stated first, and the bridge-identification detail adds meaningful clarification without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a moderately complex analysis tool with no output schema and no annotations, so the description needs to explain what the agent will receive and any important caveats. It gives only a high-level notion of output ('identifies apps that serve as bridges') and omits details about result structure, false-positive potential, or how the optional parameters shape the output. An agent would likely need to call it experimentally to understand the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameters with clear descriptions. The tool description adds nothing beyond the schema about how these parameters influence the analysis, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Analyze') and resource ('traffic patterns') and clearly states the outcome: detecting lateral movement paths and identifying bridge apps. This is distinct from siblings like get-traffic-flows, which simply retrieve traffic data, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: when you need to find potential lateral movement paths or bridge applications. However, it does not explicitly contrast this with alternatives or state when not to use it, so the guidance is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover-process-egressA
Find which processes talk to destinations outside this PCE's managed estate - the shadow-IT / unsanctioned-egress question. Returns ranked findings of process -> external destination with port, protocol, the user, current policy decision and volume, preferring an FQDN over a bare IP where the PCE resolved one. Use this instead of get-traffic-flows when the question is 'what is talking out', not 'show me all traffic'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max findings returned. Default 50. | |
| process | No | Only these processes. Substring, case-insensitive, e.g. ['claude','chrome']. Omit for all. | |
| end_date | No | End (YYYY-MM-DD). Defaults to now. | |
| start_date | No | Start (YYYY-MM-DD). Overrides lookback_days. | |
| max_results | No | Max flows to pull from the PCE. Capped at 500. | |
| lookback_days | No | Days to look back. Default 7. Ignored if start_date is given. | |
| include_sources | No | Restrict to these sources. Accepts label shorthand 'key=value' (e.g. 'app=vdi'), label/IP list/workload HREFs or IPs (FQDNs are destination-only). | |
| policy_decisions | No | Filter by decision, e.g. ['allowed'] to show only egress current policy permits. | |
| only_named_processes | No | Default true. When false, also returns egress with no process attribution (the PCE only reports process names where the VEN has process visibility enabled). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and mostly does: it discloses the return record shape (process -> external destination with port, protocol, user, policy decision, volume), the ranking behavior, and the FQDN-over-bare-IP preference. It does not state that the operation is read-only or whether results are scoped by PCE permissions, which is the remaining gap for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core question, then the return shape, then the disambiguation against the sibling. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter, zero-annotation tool with no output schema, the description supplies the return contract and the selection rule, which is what an agent most needs. Missing are permission/scope caveats and the only_named_processes attribution caveat, which currently lives only in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all nine parameters are already documented in the schema, making 3 the baseline. The description adds one genuinely useful cross-parameter constraint implicitly by noting FQDNs only apply to destinations, but it does not explain limit vs max_results or when to prefer lookback_days over start_date beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Find which processes talk to destinations outside this PCE's managed estate') and frames it as the shadow-IT/unsanctioned-egress question. It also explicitly distinguishes itself from get-traffic-flows, so an agent can pick between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: use this instead of get-traffic-flows when the question is 'what is talking out', not 'show me all traffic'. That is a when-to-use plus a named alternative plus the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enforcement-readinessA
Assess whether an application is ready for enforcement by analyzing its traffic flows, existing policy coverage, and identifying potential gaps. Provides a readiness score and actionable recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| app_name | Yes | Application label value (e.g., 'CRM', 'Ordering') | |
| env_name | Yes | Environment label value (e.g., 'Production', 'Staging') | |
| lookback_days | No | Number of days to look back for traffic flows (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does reveal the analysis process and the output, but it does not explicitly state that this is a read-only assessment or mention permissions, side effects, or underlying data sources. 'Assess' implies no mutation, but that is not made explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first states the outcome and method, the second states the deliverable. Every phrase earns its place, and the key purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity assessment tool, the description covers what it analyzes, what it returns, and the inputs are fully covered by the schema. It lacks a score range or example output, but it is sufficiently explicit for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: app_name, env_name, and lookback_days are already documented in the input schema. The tool description adds no parameter-level meaning beyond the schema, so it meets the baseline of 3 but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Assess') and a distinct resource ('whether an application is ready for enforcement'), and details the method ('analyzing traffic flows, existing policy coverage, and identifying potential gaps') and output ('readiness score and actionable recommendations'). This clearly differentiates it from siblings like get-traffic-flows or get-workload-enforcement-status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for readiness evaluation before enforcement, but it never explicitly says when to use it versus related tools such as get-traffic-flows, get-policy-coverage-report, or compliance-check. There is no when-to-use / when-not-to-use guidance or naming of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-unknown-endpointsA
Which IP addresses show up in traffic that the PCE does not know as a workload at all, and what do they do. Unknown = Explorer attached no workload to that side of the flow AND the IP is not an interface address of any inventoried workload (managed or unmanaged). Not the same as find-unmanaged-traffic, whose test is 'no app label'. One Explorer pull, one workload pull, one IP-list pull. Per endpoint: fqdn, address_class (private | public | link_local | multicast | broadcast | loopback), ip_lists (named lists containing it; the 0.0.0.0/0 default list is dropped), likely_provider for public addresses, neighbourhood (the /24 or /64 it shares with N managed workloads), as_source / as_destination blocks (connections, flows, peer workloads, peer apps as 'app (env)', top-10 ports with an admin flag, policy mix, first/last seen), peers_enforced, and profile shapes: scanner, fan_in_server, admin_reach, high_volume, single_peer, with the numbers each test used. Noise classes are counted but listed only with include_noise. With ip set, profiles that one address: full peer x port table and a timeline (1h buckets up to two days, else 1d) with the shared spike rule. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | Profile this one address instead of listing: Explorer is filtered to it server-side, the peer x port table is complete, and a timeline is added. An address that is in the inventory is reported as known without a query. | |
| top_n | No | Endpoints to return, ranked by connections (default 50). totals.unknown_endpoints says how many exist. | |
| end_date | No | YYYY-MM-DD or ISO-8601 timestamp; defaults to today | |
| direction | No | Relative to workloads: inbound = unknown sources reaching workloads (as_source), outbound = workloads reaching unknown destinations (as_destination). Default both. | |
| query_name | No | ||
| start_date | No | YYYY-MM-DD or ISO-8601 timestamp; defaults to lookback_days ago | |
| max_results | No | Explorer cap per query (default 200000); totals.flows_truncated says when it was hit | |
| include_noise | No | Also list link-local, multicast, broadcast and loopback endpoints under `noise` (default false; they are always counted) | |
| lookback_days | No | Used when start_date is omitted (default 7) | |
| max_workloads | No | Inventory cap (default 10000); totals.inventory_truncated says when it was hit | |
| min_connections | No | Drop endpoints with fewer connections in the chosen direction (default 1) | |
| include_services | No | Restrict the pull to these services, as in the other traffic tools | |
| policy_decisions | No | Default ['allowed', 'potentially_blocked', 'blocked'] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does: it declares 'Read-only', discloses the three underlying data pulls, enumerates the per-endpoint payload blocks, and explains derived classifications (profile shapes with the numbers each test used). It also discloses non-obvious behaviors: noise classes are counted but suppressed from output, and the timeline bucket size changes with range under a shared spike rule.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operative question and then the disambiguation, so the agent gets the decision-relevant content first. The middle is dense and run-on (a long comma-chained list of endpoint fields), but each clause carries real information rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with no output schema, the description supplies the return shape in detail (per-direction blocks, peers, ports, policy mix, timestamps) plus truncation/ranking semantics that live only in the schema. Nothing needed to call it correctly or interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 92%, so the schema already documents nearly every parameter. The description reinforces the `ip` mode and the include_noise gating, but largely restates what the schema says rather than adding new semantics; the field-level detail it provides (neighbourhood, admin flag) describes return values, not inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with the exact question the tool answers ('Which IP addresses show up in traffic that the PCE does not know as a workload at all') and then formalizes the definition of 'unknown' precisely (no workload attached to that side AND not an interface address of any inventoried workload). It explicitly names and rules out the nearest sibling, find-unmanaged-traffic, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear discriminator against find-unmanaged-traffic ('no app label' vs. no workload plus no interface match) and states the two operating modes (list vs. profile-a-single-address with `ip`). It also states when noise endpoints appear (only with include_noise). Missing a short 'reach for this whenβ¦' framing for the broader tool family (get-traffic-flows, discover-process-egress), but the alternatives are largely addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find-unmanaged-trafficA
Find traffic involving unmanaged (unlabeled) workloads or IP addresses. These are sources or destinations without app/env labels, representing potential policy blind spots.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Number of top results to return (default: 50) | |
| direction | No | Filter by traffic direction relative to managed workloads (default: both) | both |
| lookback_days | No | Number of days to look back (default: 30) | |
| min_connections | No | Minimum connections to include (filters noise, default: 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does usefully define the domain logic ('unmanaged' = no app/env labels on sources or destinations), but it does not disclose output shape, whether results are aggregated, query cost/scale implications, or anything about the return format β significant given the absence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler: the first states the action and subject, the second defines the key term and its significance. The core function is front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param tool with fully documented optional parameters and sensible defaults, the call contract is reasonably inferable. However, with no output schema, the description should explain what results look like (return format, ordering by 'top'), and it also lacks routing guidance relative to the traffic-related siblings β both are gaps an agent must resolve elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and descriptors already document all four parameters. The description adds genuine meaning beyond the schema by defining 'unmanaged', which clarifies the central concept the direction parameter ('relative to managed workloads') depends on, adding value the schema alone does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb+resource ('Find traffic involving unmanaged workloads or IP addresses') and defines the scope precisely: sources or destinations lacking app/env labels. The policy-blind-spot framing differentiates it semantically from sibling traffic tools like get-traffic-flows, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by 'representing potential policy blind spots' β the agent can infer this is a discovery/analysis tool for surfacing coverage gaps. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as get-traffic-flows or detect-lateral-movement-paths that might overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-container-clustersA
Get container clusters (Kubernetes/OpenShift) registered in the PCE. Shows cluster name, CLAS mode, online status, kubelink version, and node count.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by cluster name (partial match) | |
| max_results | No | Maximum results to return (default 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It implies a read-only operation and lists the returned fields, but it does not explain behavior around filtering, max_results, pagination, or potential prerequisites/errors. This is acceptable for a simple getter but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no filler. The main action and scope are front-loaded, and the second sentence efficiently summarizes the return fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter getter with no output schema, the description covers the core purpose and the main output fields. It is slightly incomplete in terms of explicit usage guidance and behavioral caveats, but the schema fills in the parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add significant parameter-level meaning beyond what the schema already provides, but it does not need to because both parameters are already documented with clear descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Get), a specific resource (container clusters), and the scope (registered in the PCE). It further distinguishes itself from workload-level sibling tools by naming cluster-specific output fields such as CLAS mode, kubelink version, and node count.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: querying container clusters registered in the PCE and viewing their status/version details. It does not explicitly mention when not to use it or point to alternatives, but the scope is clear enough for a simple list/get tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-container-workload-profilesB
Get Container Workload Profiles for a container cluster. These profiles control how Kubernetes pods are managed by Illumio β mapping K8s namespaces to Illumio labels and enforcement modes.
| Name | Required | Description | Default |
|---|---|---|---|
| managed | No | Filter by managed (true) or unmanaged (false) profiles | |
| namespace | No | Filter by Kubernetes namespace name | |
| cluster_href | No | Container cluster href (e.g., /orgs/1/container_clusters/uuid). If omitted, lists all container clusters first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does add context by explaining what the profiles represent and how they control pod management. However, it does not disclose read-only expectations, filtering interactions, pagination, or what happens when no cluster_href is provided (that detail is only in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, followed by a concise explanation of domain meaning. Every sentence earns its place and there is no redundant wording or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with three optional filters and no output schema, the description plus schema cover most invocation needs. However, the description alone does not mention how to discover the cluster_href (sibling get-container-clusters), nor what a typical response contains. It is adequate but leaves the agent to infer these details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-specific meaning beyond the schema; the phrase 'for a container cluster' loosely aligns with cluster_href but doesn't explain filter semantics or combinations. The schema already handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource: 'Get Container Workload Profiles for a container cluster.' It also adds a useful conceptual explanation of what these profiles are (mapping K8s namespaces to Illumio labels and enforcement modes). It does not explicitly distinguish itself from sibling tools like get-container-clusters or get-kubernetes-workloads, hence no 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as get-container-clusters, get-kubernetes-workloads, or update-container-workload-profile. The description implies a use case (inspecting profiles for a cluster) but never states conditions, exclusions, or preferred alternatives. The only usage hint (cluster_href behavior when omitted) lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-eventsA
PCE audit events as data. Each event carries created_by as {type: user|agent|system, username, href}, resource_changes as [{resource_type, href, name, change_type, changes}] (which ruleset, rule, workload... changed and how), notifications as [{notification_type, info}] and action as {api_endpoint, api_method, src_ip, http_status_code}. Filter by event_type (one string or a list, ORed) or by kind: policy = sec_policy.create/restore, rule_set., sec_rule., deny_rule., ip_list., service.* (create/update/delete); enforcement = workloads.bulk_update / workload.update whose changes name enforcement_mode; ven = agent.activate/deactivate/tampering/clone_detected/suspend/unsuspend, workloads.unpair; auth = user.login/logout/sign_in/sign_out/authenticate, request.authorization_failed. Verified on a live PCE (26.30): rule_set., sec_rule.create/delete, deny_rule., ip_list., service., workloads.bulk_update, request.authorization_failed. The rest are Illumio's documented names not yet seen on a PCE (expected); event_types_unverified lists them per call. The PCE filters on one event_type per request, so a list or kind is one request per type, merged newest-first and capped at max_results; event_types_queried echoes the list.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Named group of event types: policy (provisioning, ruleset/rule/ip list/service changes), enforcement (enforcement mode changes), ven (pairing/unpairing/tampering), auth (user login/logout). See the tool description for the exact strings. | |
| status | No | Filter by event status | |
| severity | No | Filter by event severity | |
| created_by | No | Filter by creator (user, agent, or system) | |
| event_type | No | Event type string, or a list of them (OR). E.g. 'sec_policy.create' or ['rule_set.update', 'sec_rule.update']. Combines with kind. | |
| max_results | No | Maximum number of events to return | |
| timestamp_gte | No | Earliest event timestamp (RFC 3339 format) | |
| timestamp_lte | No | Latest event timestamp (RFC 3339 format) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses the per-request single-event-type PCE constraint, one-request-per-type fan-out, newest-first merging, max_results capping, and that event_types_queried echoes the list. It also flags which event names are verified versus merely documented, which is unusually candid. It still omits permission requirements, default time window, and whether results are read-only in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and payload, then moves to filtering, verification status, and request semantics. The single dense paragraph wastes little, though the verification caveat and request-fan-out details could be split for readability. Every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must convey return values; it partially does by describing created_by, resource_changes, notifications, action, and the event_types_queried/unverified fields. It does not describe the full response envelope, pagination tokens, or default time range, which leaves some gaps for an 8-parameter tool, but the critical invocation semantics are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds real value: it defines exactly which event_type strings belong to each kind, explains that event_type accepts a single string or an ORed list, that kind and event_type combine, and how max_results interacts with the fan-out. It does not add much on status, severity, created_by, or the timestamp parameters beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'PCE audit events as data', then enumerates the event payload fields. An agent immediately knows this retrieves audit event records, which no sibling tool does. Distinguishable from the policy/workload CRUD and traffic-flow siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Extensive guidance on how to filter (kind vs event_type, OR semantics) but no explicit statement of when to use this tool versus alternatives, or when not to use it. Usage is implied by the audit-event framing, but there is no named alternative or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-iplistsA
Get IP lists from the PCE with optional filtering. Each list carries ip_ranges as [{from_ip, to_ip, exclusion, description}] and fqdns as [{fqdn, description}], plus is_default: true on the built-in list that covers 0.0.0.0/0 or ::/0. Use contains_ip for an exact 'which lists cover this address' answer, evaluated server-side (CIDRs, from/to spans, exclusions, IPv4 and IPv6); the ip_address filter is the PCE's substring match on the range text and does not look inside CIDRs.
| Name | Required | Description | Default |
|---|---|---|---|
| fqdn | No | Filter by FQDN (supports partial matches) | |
| name | No | Filter IP lists by name (supports partial matches) | |
| pversion | No | Policy version to read (default draft). Echoed as policy_version in the response. | |
| ip_address | No | PCE-side substring match on the range text (e.g. '10.20.30.4' matches '10.20.30.40/32' and never matches an address inside a CIDR). Use contains_ip for exact containment. | |
| contains_ip | No | A single IPv4 or IPv6 address. Return only the IP lists whose ranges contain it, honouring exclusion ranges; each returned list carries matched_range. Combine with is_default to tell 'in a real list' from 'only in Any'. | |
| description | No | Filter by description (supports partial matches) | |
| max_results | No | Maximum number of IP lists to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden; it discloses the returned shape (ip_ranges, fqdns, is_default on the 0.0.0.0/0 or ::/0 list), that containment is evaluated server-side across CIDRs, spans, exclusions and both IP families. It stops short of stating read-only safety explicitly or pagination/limits behavior beyond the max_results parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then return shape, then the filtering semantics that matter most. Dense but every clause carries information; the final sentence is long but is the single most decision-relevant sentence in the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description supplies the return structure (ip_ranges with from_ip/to_ip/exclusion/description, fqdns, is_default, matched_range) and the filter semantics an agent needs. Nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3; the description adds real meaning by explaining the semantic gap between contains_ip (exact containment, honours exclusions, returns matched_range) and ip_address (substring on range text, never matches inside a CIDR). It also explains is_default, which is not a parameter but shapes filtering strategy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get IP lists from the PCE'), adds scope ('optional filtering'), and distinguishes itself from the address-containment query path. An agent can tell it apart from siblings like create-iplist/update-iplist without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use contains_ip for an exact 'which lists cover this address' answer, while ip_address is only a substring match on range text. It also explains how to combine contains_ip with is_default to separate 'in a real list' from 'only in Any'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-kubernetes-workloadsB
Get Kubernetes Workloads (CLAS mode) from a container cluster. Shows Deployments, Services, and other K8s objects managed by Illumio with their labels and policy sync state.
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | Filter by Kubernetes namespace | |
| max_results | No | Maximum results to return (default 500) | |
| cluster_href | No | Container cluster href (e.g., /orgs/1/container_clusters/uuid). If omitted, lists all clusters first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It discloses that the tool operates in 'CLAS mode' and shows policy sync state, which adds context. However, it does not mention pagination behavior beyond the max_results parameter, whether the operation is read-only, or what happens when cluster_href is omitted (though the parameter description partially covers that).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The main purpose is front-loaded, and the second sentence adds useful output detail. It is appropriately sized for a tool with three parameters and no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a read-style list tool, but with no annotations and no output schema, it could be more complete. It does not explain what 'CLAS mode' means, how policy sync state is represented, or how the tool behaves when no cluster_href is provided (though the parameter description covers the fallback). An agent could call it correctly, but some behavioral context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds minimal parameter meaning beyond the schema: it mentions labels and policy sync state, which relate to the output rather than the parameters. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('Kubernetes Workloads (CLAS mode) from a container cluster'), and lists what it shows (Deployments, Services, other K8s objects, labels, policy sync state). It is clear enough to distinguish from the sibling 'get-workloads' (which likely targets non-container workloads), though it does not explicitly name that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it is for Kubernetes/container cluster workloads managed by Illumio, and the cluster_href parameter description says 'If omitted, lists all clusters first,' which gives some behavioral guidance. However, it does not explicitly state when to use this tool versus alternatives like get-workloads or get-container-clusters, nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-labelsA
Get labels from the PCE with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Filter by label key/type, matched exactly (e.g., 'role', 'app', 'env', 'loc'). 'role' will not match 'servicerole' | |
| usage | No | Include label usage flags | |
| value | No | Filter by label value (supports partial matches) | |
| max_results | No | Maximum number of labels to return | |
| include_deleted | No | Include deleted labels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It communicates a read-only list operation with optional filtering, but it does not disclose response format, pagination behavior, or default handling of deleted labels. This is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the resource, operation, and key capability without redundant elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with well-documented optional parameters, the description is adequate but lean. It does not mention what a label is, what the response looks like, or any default behavior, which matters since there is no output schema and no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters clearly. The description adds no parameter-specific meaning beyond calling the filters 'optional,' which is appropriate but does not elevate the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('labels') with a clear source ('PCE'), and optional filtering is mentioned. It is immediately distinguishable from the label mutation tools like create-label, update-label, and delete-label.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the tool to use when retrieving labels, but it does not explicitly state when to use it over alternatives or when not to use it. It provides no exclusions or comparative guidance, so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-pairing-profilesA
Get pairing profiles from the PCE. Pairing profiles define the initial enforcement mode and labels for VENs when they pair with the PCE.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by pairing profile name (partial match) | |
| max_results | No | Maximum results to return (default 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. The verb 'Get' clearly indicates a read operation, but the description does not explicitly state that it is non-mutating, nor does it mention pagination behavior or response characteristics. The domain context is helpful, but behavioral detail beyond the verb is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the action and resource, the second provides essential domain context. The description is front-loaded with the primary purpose and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list/retrieval tool with full parameter schema coverage and no complex behavior, the description is largely complete. It lacks an explicit output schema or description of the return format, but the concept of pairing profiles is defined well enough for an agent to know what the tool returns and when to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters ('name' partial match and 'max_results' default 50). The tool description adds no additional parameter-level semantics, but with full schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation as 'Get pairing profiles from the PCE' and explains what pairing profiles are, which is a specific resource not covered by any sibling tool. The phrase 'initial enforcement mode and labels for VENs' adds useful domain context that distinguishes this from other get-* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used when pairing profiles are needed, but it does not explicitly state when to prefer this tool over alternatives or when not to use it. No exclusions or sibling comparisons are provided, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-pce-capacityA
How full is this PCE, against its limits. Reads the documented metrics -- flow storage and retention per source vs limits (traffic_flows/database_metrics), managed-workload count over time (reports/time_series_statistics), and soft_limit_exceeded / hard_limit_exceeded events in the window -- and probes the object-limit API (/api/v2/object_limit_profiles and /api/v2/api_usage_limit_profiles, root-level, undocumented). A 403 there is reported as 'exists but this key is not allowed' (the PCE logs an authorization_failed audit event), a 404 as 'not on this PCE version', a 200 passed through with a best-effort summary. warnings lists anything at or above 80% of a limit or above a soft limit.
| Name | Required | Description | Default |
|---|---|---|---|
| lookback_days | No | Window for the workload trend and limit events (default 30, max 365) | |
| include_object_limits | No | Probe the object-limit and API-usage-limit routes (default true). Each attempt without permission writes an audit event on the PCE. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it names the undocumented root-level endpoints probed, maps 403 to 'exists but this key is not allowed' (and discloses the authorization_failed audit event), maps 404 to 'not on this PCE version', and explains the 200 pass-through. It also warns that probing without permission writes an audit event and defines the `warnings` threshold (>=80% of a limit or above a soft limit).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core question, then ordered by data source, error semantics, and the warnings field. It is dense and somewhat run-on in the middle clause, but essentially every sentence earns its place by adding behavioral or return-value information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must cover returns; it defines `warnings` and the three probe outcomes (403/404/200), which is substantial. It stops short of describing the shape of the metrics payload itself, but for a 2-param diagnostic tool the coverage is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, establishing the baseline of 3. The description reinforces the object-limit probing behavior and audit-event side effect but adds no syntax, format, or default detail beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific, memorable framing: 'How full is this PCE, against its limits.' The verb+resource (capacity/limit assessment of a PCE) is unambiguous and clearly distinct from every sibling, none of which report capacity. An agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose strongly implies a diagnostic/health-check use case, but there is no explicit when-to-use or when-not-to-use wording, and no named alternative (e.g., check-pce-connection or enforcement-readiness) is contrasted. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-policy-coverage-reportB
Generate a policy coverage report for an app, showing what traffic is covered by existing rules vs what would be blocked. Helps understand how much of an app's traffic is already policy'd.
| Name | Required | Description | Default |
|---|---|---|---|
| app_name | Yes | Application label value | |
| env_name | Yes | Environment label value | |
| lookback_days | No | Number of days to look back for traffic flows (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the report's analytical purpose and the covered-vs-blocked framing, which is useful. However, it doesn't disclose whether the report is read-only, whether it triggers any background computation, or what the output format looks like. The description adds some behavioral context but leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action and purpose are front-loaded, and the second sentence adds the use-case context. It earns its place, though it could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a report-generation tool with no output schema and no annotations, the description should clarify what the report contains and how it's returned. The covered-vs-blocked framing helps, but an agent still doesn't know whether the report is a file, a JSON object, or a summary. Given the tool's moderate complexity and the absence of structured metadata, this is a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds the high-level concept of 'traffic flows' and 'policy'd' but doesn't add meaning beyond the schema's parameter descriptions. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generate'), a resource ('policy coverage report for an app'), and the report's purpose ('showing what traffic is covered by existing rules vs what would be blocked'). This clearly distinguishes it from sibling tools like get-traffic-flows or get-rulesets, though it doesn't explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it ('Helps understand how much of an app's traffic is already policy'd'), which gives an agent a clear context signal. However, it doesn't explicitly state when not to use it or name alternative tools for related tasks like get-traffic-flows-summary or find-unmanaged-traffic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-rulesetsA
Get rulesets and their rules, from draft or active policy, rendered as data: scopes as [{key, value, href}], consumers/providers as {label: {key, value, href}} | {all_workloads: true} | {ip_list: {name, href}} | {label_group: {name, href}}, ingress_services as {port, proto} or {service: {name, href}}. Allow, deny and override_deny rules share one shape (rule_type). Rulesets and rules carry created_at, updated_at, update_type and created_by/updated_by as {username, href} when the PCE sends them (username needs GET /users; null if this key may not list users). labels matches ruleset SCOPE; actor_labels returns only the rules that NAME those labels as consumer or provider, in any ruleset -- 'the policy that touches app X'. Each ruleset costs one extra request for its deny rules, so filter where you can.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter rulesets by name (supports partial matches) | |
| labels | No | Scope filter: key=value or label HREFs, ANDed (['app=shop', 'env=prod'] = rulesets scoped to exactly that app). A pre-encoded JSON string is still accepted. | |
| enabled | No | Filter by enabled/disabled status | |
| pversion | No | Policy version to read (default draft). Echoed as policy_version. | |
| actor_side | No | Which side actor_labels must appear on (default any) | |
| description | No | Filter rulesets by description (supports partial matches) | |
| max_results | No | Maximum number of rulesets to return | |
| actor_labels | No | Return only rules whose consumers or providers reference ALL of these labels (key=value or HREF). Rulesets with no matching rule are omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work: it discloses the per-ruleset extra request for deny rules ('filter where you can'), that username resolution needs GET /users and comes back null when the key cannot list users, and that timestamps/authors may be absent if the PCE omits them. It doesn't cover pagination behavior or what happens on empty results, so it stops short of full disclosure for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very dense but nearly every clause carries information the agent needs, especially the render shapes since there is no output schema. It front-loads the return format rather than the core purpose, which is a minor structural weakness, and it is a single unbroken block that is harder to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately documents the exact returned shapes (scopes, consumers/providers variants, ingress_services) so an agent can parse results. Combined with the cost warning about unneeded calls, this covers most of what's needed; only pagination/max_results behavior and empty-result handling are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics beyond the schema by framing `labels` as scope-matching versus `actor_labels` as any-ruleset rule-level matching ('the policy that touches app X'). The pversion draft/active meaning is largely already in the schema, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get rulesets and their rules, from draft or active policy') and makes clear it returns rules nested inside their rulesets. It does not explicitly name or contrast with read-side siblings like compare-draft-active or get-policy-coverage-report, so an agent must infer the boundary from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an actionable selection rule between the two filter params: '`labels` matches ruleset SCOPE; `actor_labels` returns only the rules that NAME those labels ... the policy that touches app X.' It also advises 'filter where you can' because of per-ruleset cost. There are no explicit when-not-use cases or named alternatives for the other read tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-server-changelogA
What changed in this MCP server. Call this when tool behaviour does not match what you expect, after the server has been updated mid-session, or before relying on assumptions formed earlier in a long session -- a cached tools/list and remembered response shapes are not refreshed when the server changes. The unlearn field lists behaviour changes that make previously correct assumptions wrong. Needs no PCE connection.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Only report releases newer than this version, e.g. '0.2.0'. Omit for the full history. | |
| unlearn_only | No | Return only the behaviour changes that invalidate earlier assumptions, omitting the feature lists. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explains that cached tools/list and response shapes are not refreshed on server changes, clarifies the semantics of the `unlearn` field, and states the no-PCE-connection requirement. This goes well beyond a basic changelog summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then usage triggers and a behavioral caveat, then the no-connection note. Every sentence earns its place with no filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter introspection tool with no output schema, the description provides enough context for selection and invocation, including the stale-cache caveat and the unlearn behavior. The return structure is not detailed, but 'changelog' combined with the `since` parameter makes it sufficiently inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes both parameters, so the baseline is 3. The description adds value by explaining the `unlearn` field as listing behavior changes that invalidate earlier assumptions, reinforcing the purpose of `unlearn_only` beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'What changed in this MCP server,' giving a clear subject and intent. Among the PCE-focused sibling tools, its scope is unambiguous even though it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete triggers: call when behavior mismatches expectations, after a mid-session update, or before relying on assumptions from earlier in a long session. It also notes that no PCE connection is required. It lacks explicit when-not-to-use guidance, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-servicesB
Get services from the PCE with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter services by name (supports partial matches) | |
| port | No | Filter services by port number | |
| proto | No | Filter services by protocol (e.g., tcp, udp) | |
| description | No | Filter services by description (supports partial matches) | |
| max_results | No | Maximum number of services to return | |
| process_name | No | Filter services by process name | |
| egress_process_name | No | Return only services whose windows_egress_services reference this process (substring, case-insensitive). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It only restates the purpose; it does not explicitly state that this is a read-only operation, has no side effects, how filters combine (AND/OR), what happens with no filters, or any limits. 'Get' implies read-only, but that is not made explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence with no filler. It front-loads the core purpose and filtering capability, making it appropriately concise and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 optional parameters, no output schema, and no annotations, the description is too thin. It does not mention the return shape (e.g., list of services), filter combination logic, pagination, or default behavior for max_results. An agent would have to guess important invocation semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 7 parameters are already documented in the input schema. The description adds only 'optional filtering' and no parameter-specific meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('get') and resource ('services from the PCE'), and mentions optional filtering. It is clear enough to distinguish from sibling mutation tools like create-service, update-service, and delete-service, though it does not explicitly name alternatives or scope nuances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given. 'Optional filtering' implies this is the tool for retrieving services with filters, but the description does not direct the agent away from or toward any sibling tools, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-traffic-flowsC
Get traffic flows from the PCE with comprehensive filtering options
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | Ending datetime (YYYY-MM-DD or timestamp) | |
| group_by | No | Dimensions to aggregate by. Any of: process, service_name, user, source, source_app, destination, dest_app, fqdn, ip_list, port, proto, policy, rule, direction. Fewer dimensions gives fewer, larger rows - e.g. ['process','fqdn'] answers 'which binary talks to which external name'. Defaults to a full per-flow breakdown. | |
| query_name | No | ||
| start_date | Yes | Starting datetime (YYYY-MM-DD or timestamp) | |
| max_results | No | ||
| exclude_sources | No | Sources to exclude (label/IP list/workload HREFs, IPs; FQDNs are destination-only) | |
| include_sources | No | Sources to include. Accepts label shorthand 'key=value' (e.g. 'app=vdi'), which the server resolves to a label HREF, as well as label/IP list/workload HREFs and IPs. FQDNs and broadcast/multicast/unicast are destination-only (the PCE rejects them on sources). Omit to match all sources. | |
| exclude_services | No | ||
| include_services | No | ||
| policy_decisions | No | ||
| exclude_destinations | No | Destinations to exclude (label/IP list/workload HREFs, FQDNs, IPs) | |
| include_destinations | No | Destinations to include. Accepts label shorthand 'key=value' (e.g. 'app=vdi'), as well as label/IP list/workload HREFs, FQDNs and IPs. Omit to match all destinations. | |
| exclude_workloads_from_ip_list_query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing beyond the bare operation. It does not state that this is a read-only query, how max_results or query_name behave, whether results are paginated, or what a returned flow record contains β meaningful gaps for a 13-parameter analytics query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence is efficiently sized, but it is not front-loaded with anything actionable and the 'comprehensive filtering options' clause is filler that could have been replaced with real guidance at no extra length cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters, no annotations, and no output schema, the description is far too thin: it does not explain the return shape, result caps, the purpose of query_name, or the source-vs-destination asymmetry that the schema only partially captures. An agent would be calling this largely blind.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 54%, and the description contributes nothing parameter-specific β 'comprehensive filtering options' tells an agent nothing about include/exclude semantics, group_by aggregation, or the port/proto service objects. Parameters left undocumented in the schema (query_name, max_results, include_services, policy_decisions, exclude_workloads_from_ip_list_query) remain unexplained in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get traffic flows from the PCE'), so an agent knows the core operation. However, it does not distinguish this from close siblings such as get-traffic-flows-summary, get-traffic-timeline, or find-unmanaged-traffic, and the trailing phrase 'with comprehensive filtering options' adds no discriminating information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no when-not-to-use exclusions, and no mention of the summary/timeline siblings that overlap heavily. An agent must infer from the name alone whether it wants raw per-flow data or an aggregated view.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-traffic-flows-summaryA
Summarize traffic flows as structured JSON. Sections: by_process (which binary talks to which destination, on which port, under which policy, and as which user), external_destinations (traffic leaving the managed estate), blocked (what policy is stopping), app_to_app (coarse view). Prefer this over get-traffic-flows for analysis - it is far smaller and answers the usual questions directly.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | Ending datetime (YYYY-MM-DD or timestamp) | |
| query_name | No | ||
| start_date | Yes | Starting datetime (YYYY-MM-DD or timestamp) | |
| max_results | No | ||
| detail_level | No | How much of each section to show. 'standard' (default) shows the top 100 per section; 'full' shows everything that fits the response limit, which can be ~10x the tokens. Analysis always covers the WHOLE window either way -- totals and section_totals are computed over every row, so the numbers are identical; only the displayed rows differ. | |
| exclude_sources | No | Sources to exclude (label/IP list/workload HREFs, IPs; FQDNs are destination-only). Best case these are hrefs like /orgs/1/labels/57 or similar. Other way is app=env as an example (label key and value) | |
| identity_labels | No | Label dimensions that define an endpoint's identity in app_to_app. Defaults to ['app','env'] because that is how Illumio defines an application, but ANY label this PCE defines works: ['bu'] for a business-unit view, ['compliance','env'] for a compliance view, ['role','loc'] for a tiered one. The response's available_dimensions lists what this PCE actually has. | |
| include_sources | No | Sources to include (label/IP list/workload HREFs, IPs; FQDNs are destination-only). Best case these are hrefs like /orgs/1/labels/57 or similar. Other way is app=env as an example (label key and value) | |
| exclude_services | No | ||
| include_services | No | ||
| policy_decisions | No | ||
| exclude_destinations | No | Destinations to exclude (label/IP list/workload HREFs, FQDNs, IPs). Best case these are hrefs like /orgs/1/labels/57 or similar. Other way is app=env as an example (label key and value) | |
| include_destinations | No | Destinations to include (label/IP list/workload HREFs, FQDNs, IPs). Best case these are hrefs like /orgs/1/labels/57 or similar. Other way is app=env as an example (label key and value) | |
| exclude_workloads_from_ip_list_query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full disclosure burden, and it delivers the most important behavioral fact for an agent: the response shape (four named sections) and the cost tradeoff versus the raw flows tool. It stops short of stating permission/auth requirements, the hard response size limit, or pagination behavior, which leaves real gaps for a heavy read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and return shape, and the section enumeration earns its length by telling the agent exactly what analysis it can answer without a follow-up call. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 14-parameter tool with no output schema and no annotations, so the description has to compensate, and it largely does by describing the four output sections in useful detail. The filtering surface (most of those 14 params) remains under-explained, both in the description and partly in the schema, which is the one meaningful shortfall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 57%, so roughly half the 14 parameters lean on the schema alone. The description adds only an implicit hint about detail_level cost ("far smaller") and says nothing about query_name, max_results, policy_decisions, the include/exclude service pairs, or exclude_workloads_from_ip_list_query. Baseline 3 for a mid-coverage schema is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Summarize traffic flows as structured JSON") and then enumerates the exact sections returned (by_process, external_destinations, blocked, app_to_app). It also explicitly positions itself against the sibling get-traffic-flows, so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool by name and gives the selection condition: use this for analysis because it is far smaller and answers the usual questions directly. The only minor omission is a reverse pointer back to get-traffic-flows for raw row-level detail, but the routing guidance is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-traffic-timelineA
Time-bucketed flow counts from ONE Explorer query: how many flows and connections fell into each 15m/1h/6h/1d bucket of the window, with every bucket present (zeros included). Use it for 'blocked flows per hour for app X' instead of one summary query per bucket. Rows are bucketed by first_detected; Explorer aggregates a persistent connection (and, for older data, several days) into one row, so rows_spanning_buckets and resolution_note say how much the start of the window is smeared. spikes=true applies the shared rule: a bucket >= 3x the median of the non-zero buckets is a spike, and worst names the largest with its multiple.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | No | Bucket size (default 1h). Buckets align to the wall clock, not the window start. Max 2000 buckets. | |
| spikes | No | Add `spikes`: median of non-zero buckets, threshold (3x), the buckets above it and the worst one | |
| end_date | No | YYYY-MM-DD or ISO-8601 timestamp; defaults to today | |
| split_by | No | Add a per-bucket breakdown: by_policy_decision or by_flow_direction | |
| query_name | No | ||
| start_date | No | YYYY-MM-DD or ISO-8601 timestamp; defaults to lookback_days ago | |
| max_results | No | Query cap (default 200000); counts are lower bounds when hit | |
| lookback_days | No | Used when start_date is omitted (default 1) | |
| exclude_sources | No | Sources to exclude | |
| include_sources | No | Sources to include: label HREFs or key=value (entries are ANDed), IP list/workload HREFs, IPs. FQDNs are destination-only | |
| exclude_services | No | ||
| include_services | No | ||
| policy_decisions | No | e.g. ['blocked'] for a blocked-flow timeline | |
| exclude_destinations | No | Destinations to exclude | |
| include_destinations | No | Destinations to include, same forms as include_sources plus FQDNs and broadcast/multicast/unicast | |
| exclude_workloads_from_ip_list_query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does it well: it explains bucketing by first_detected, that persistent connections smear across buckets, that rows_spanning_buckets/resolution_note quantify the smear, that counts become lower bounds at max_results, and the exact spike rule (>=3x median of non-zero buckets, worst multiple).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core purpose and the alternative-avoidance hint before the caveats. Some sentences are dense (the first_detected smearing clause), but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter tool with no annotations and no output schema, the description covers the key return concepts (bucket fields, rows_spanning_buckets, resolution_note, spikes/worst) and the main caveats. The filter parameters are only covered by schema, which is acceptable but leaves minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, so the schema already documents many params; the description adds real semantics beyond it by explaining the spike threshold computation and the lower-bound behavior of max_results, though it leaves the include/exclude filter families entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Time-bucketed flow counts from ONE Explorer query', and immediately specifies the four bucket sizes and zero-filling. An agent can distinguish this from summary/flow-list siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case ('blocked flows per hour for app X') and explains why not to loop a summary query per bucket, which implicitly steers away from get-traffic-flows-summary. It never names sibling tools explicitly or states when-not to use it, keeping it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-workload-enforcement-statusA
Get enforcement mode status across all workloads, grouped by application and environment. Shows counts per enforcement mode and identifies apps with mixed enforcement states.
| Name | Required | Description | Default |
|---|---|---|---|
| app_name | No | Filter by application name (optional) | |
| env_name | No | Filter by environment name (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It does add some behavioral context (grouping behavior and mixed-state detection) beyond the tool name. However, it does not disclose the response format, whether the operation is read-only, pagination behavior, or what happens when no workloads match.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the core purpose front-loaded and a useful second sentence about mixed enforcement states. No wasted words, though the structure could be slightly improved by explicitly noting the read-only nature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 optional parameters, 100% schema coverage, and no output schema, the description is adequate but minimal. It explains what the tool does but not what the response looks like, which could matter for an agent deciding whether this tool provides the needed detail versus a more granular tool like get-workloads.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both parameters are described as optional filters), so the schema handles parameter documentation. The description adds marginal value by implying the filters map to grouping dimensions (application and environment), but it doesn't add syntax or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('get'), a resource ('enforcement mode status'), and adds context about grouping by application/environment and identifying mixed states. This makes the purpose understandable, though it doesn't explicitly distinguish it from related tools like get-workloads or get-rulesets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to check enforcement status across workloads) and mentions optional filtering via parameters, but it provides no explicit guidance on when to use it versus a sibling tool, nor any exclusions or alternatives. The usage context is clear enough but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get-workloadsA
Get workloads from the PCE. Use detail_level to control breadth vs depth: 'compact' (default) for tabular overviews of thousands of workloads, 'full' for complete data on specific workloads, 'labels_only' for maximum breadth with just identity and labels.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter by workload name (supports partial matches) | |
| labels | No | JSON-encoded list of label URIs to filter by | |
| online | No | Filter online (true) or offline (false) workloads | |
| managed | No | Filter managed (true) or unmanaged (false) workloads | |
| hostname | No | Filter by hostname (supports partial matches) | |
| ip_address | No | Filter by IP address (supports partial matches) | |
| description | No | Filter by description (supports partial matches) | |
| max_results | No | Maximum number of workloads to return (default 10000) | |
| detail_level | No | Level of detail. 'compact' (default): tabular summary with key fields, labels, and VEN health (ven_status, last_heartbeat_on, agent_version, policy_sync_state, health_errors) -- enough for 'stale VEN' questions without 'full'. 'full': complete workload data including services, VEN agent, interfaces. 'labels_only': minimal table of href, name, hostname, and labels. | compact |
| enforcement_mode | No | Filter by enforcement mode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the scale/breadth tradeoff (tabular overviews of thousands vs. complete data on specific workloads), which is genuinely useful, but says nothing about pagination, the default result cap, or authentication/PCE-connection prerequisites implied by siblings like check-pce-credentials-status.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and then the key parameter tradeoff. Every clause earns its place and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a ten-parameter read tool with no output schema and no annotations, the description covers the one non-obvious parameter and the scale expectations well. It stops short of mentioning pagination or auth prerequisites, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all ten parameters are already documented, establishing a baseline of 3. The description reinforces detail_level with a breadth-vs-depth framing, but adds no syntax or format detail beyond what the enum description already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get workloads from the PCE') with no ambiguity about what is returned. However, it never distinguishes itself from close siblings in the list such as get-kubernetes-workloads or get-container-workload-profiles, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does give useful selection guidance for the detail_level parameter (compact for thousands, full for specific workloads, labels_only for breadth), which is a real usage decision. But it offers no when-to-use/when-not guidance for the tool itself versus the Kubernetes/container workload siblings, leaving tool-level routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
identify-infrastructure-servicesA
Analyze traffic flows to identify infrastructure services in your environment. Builds an app-to-app communication graph and computes centrality metrics to rank apps by how 'infrastructure-like' they are. Infrastructure services (DNS, AD, logging, monitoring platforms, shared databases) are consumed by many apps and should be policy'd first during segmentation rollouts. Returns a ranked list with scores, classification tiers, and connectivity details.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Number of top results to return (default: 20) | |
| lookback_days | No | Number of days to look back for traffic flows (default: 90) | |
| min_connections | No | Minimum total connections for an edge to be included β filters noise (default: 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It frames the tool as read-only analysis ('Analyze traffic flows', 'Builds a graph', 'computes centrality metrics') and describes returned artifacts, but it does not explicitly state that no state is changed, nor cover edge cases such as insufficient flow data or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three purposeful sentences: the first states the action, the second explains the computation, and the third gives the use case and output. No fluff, and the main verb is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only analysis tool with no output schema and no annotations, the description covers the important ground: purpose, method, return value, and why the result matters. It could add details on how to interpret scores/tiers or prerequisites, but it is not materially incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three optional parameters. The description adds no parameter-specific meaning, but it also doesn't need to; the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Analyze traffic flows to identify infrastructure services', a specific verb+resource pair, then clarifies the method (app-to-app graph, centrality metrics) and output (ranked list with scores, classification tiers, connectivity details). This clearly differentiates it from siblings like get-traffic-flows or get-traffic-flows-summary, which are raw/summary traffic tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly grounds usage in a segmentation rollout context: infrastructure services 'should be policy'd first during segmentation rollouts.' This gives clear when-to-use guidance, though it does not name alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
provision-policyA
Provision pending draft policy changes in the PCE. This moves draft rulesets, rules, IP lists, services, and label groups from draft to active state. You can provision all pending changes or specific items by href. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting. Additionally requires an explicit confirm token, so it takes two steps: the first call returns a token to be passed back in the second.
| Name | Required | Description | Default |
|---|---|---|---|
| hrefs | No | List of specific draft hrefs to provision (e.g., ['/orgs/1/sec_policy/draft/rule_sets/123']). If omitted, provisions ALL pending changes. | |
| change_description | No | Description of the provisioning change (for audit trail) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does well: it explicitly flags WRITE OPERATION, notes PCE state changes, warns about user-approval pauses, and cautions that retries are inappropriate while waiting. It discloses the two-step token flow, though it leaves ambiguous how the token parameter is supplied since no token field appears in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: purpose, scope, write warning, client behavior, and confirmation flow. The write warning is placed prominently and the two-step behavior is communicated in a compact sequence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the operation well and partially covers return behavior by saying the first call returns a token. However, with no output schema and no token parameter in the input schema, the exact mechanism for passing the token back is unexplained, leaving an important gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters at 100% coverage, including the important 'provisions ALL pending changes' behavior for omitted hrefs. The description adds little beyond that, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Provision pending draft policy changes in the PCE.' It clarifies exactly what changes state, naming the affected entity types and the draft-to-active transition, which distinguishes it from siblings like compare-draft-active or enforcement-readiness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains when to use the tool: to provision pending draft changes, either all pending changes or specific items by href. It does not explicitly name alternative tools or exclusions, but the described action and the two-step confirmation flow give clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register-pce-credentialsA
Register (or overwrite) PCE credentials for the current authenticated user. After registering, all PCE tools become available in this session. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional human-readable label for this credential set | |
| api_key | Yes | PCE API key name | |
| pce_host | Yes | PCE hostname or IP address | |
| pce_port | Yes | PCE API port (typically 443 or 8443) | |
| api_secret | Yes | PCE API key secret | |
| pce_org_id | Yes | PCE organisation ID | |
| tls_verify | No | Verify TLS certificates (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral burden, and it does so well: it flags the mutation via 'WRITE OPERATION: changes PCE state' and explains the client-gating pause, including the critical instruction not to retry while waiting. Overwrite semantics are also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences convey purpose, effect, and a crucial behavioral warning with no filler. The most important operational facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with no annotations or output schema, the description covers the essential context: what changes, what becomes available, the approval pause, and retry guidance. Together with fully documented parameters, an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters. The description adds no parameter-level meaning, which is acceptable but does not raise the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation ('Register (or overwrite) PCE credentials') tied to 'the current authenticated user' and states the concrete effect: all PCE tools become available in the session. This clearly distinguishes it from sibling tools like delete-pce-credentials and check-pce-credentials-status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended use obvious: register/overwrite credentials for the current user so PCE tools become available. It does not explicitly contrast with alternative status/check tools, but the overwrite wording and availability effect give clear context for when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ringfence-batchA
Create ringfence policies for multiple applications at once. Optionally auto-discovers infrastructure services and ringfences them first, then standard apps. Uses the same logic as create-ringfence for each app. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting. Additionally requires an explicit confirm token, so it takes two steps: the first call returns a token to be passed back in the second.
| Name | Required | Description | Default |
|---|---|---|---|
| apps | Yes | List of applications to ringfence | |
| dry_run | No | If true, preview what would be created without making changes | |
| auto_order | No | If true, uses identify-infrastructure-services to order apps by infrastructure score (infra first). Default: false | |
| lookback_days | No | Number of days to look back for traffic flows (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly labels the operation as a WRITE OPERATION that changes PCE state, warns that gated clients pause for user approval, states that the call has not failed and must not be retried, and discloses the two-step token requirement. This is strong and goes well beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized. It opens with the purpose, then adds auto-discovery context, connects to create-ringfence, and finishes with side effects and the two-step workflow. Every sentence contributes useful information with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, multi-step tool with no annotations and no output schema, the description covers the core behavioral contract: side effects, approval pause, retry guidance, and the token-return flow. It is slightly incomplete because the second-step token is not represented in the input schema, so an agent would still need to infer how to pass it back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some context around auto-discovery, which maps to auto_order, and explains the confirm-token workflow. However, it does not elaborate on apps, dry_run, or lookback_days, and it mentions a token to pass back without a corresponding input-schema field, a minor inconsistency.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states the exact action and resource: 'Create ringfence policies for multiple applications at once.' The description also references 'the same logic as create-ringfence,' which lets an agent distinguish this batch tool from the single-application sibling without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: it is for multiple applications, can optionally auto-discover infrastructure services first, and it explains the approval-gating and two-step confirm-token flow. It does not explicitly state when to use create-ringfence instead of this tool, so it falls just short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-container-workload-profileA
Update a Container Workload Profile to manage Kubernetes pods in Illumio. Set managed=true and assign labels to start managing pods in a namespace. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| managed | No | Set to true to manage pods in this namespace | |
| profile_href | Yes | Full href of the container workload profile (e.g., /orgs/1/container_clusters/uuid/container_workload_profiles/uuid) | |
| assign_labels | No | Illumio labels to assign to pods (e.g., [{'href': '/orgs/1/labels/5'}]) | |
| enforcement_mode | No | Enforcement mode for managed pods |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly marks the operation as a WRITE OPERATION that changes PCE state, and it explains the approval-gated behavior in Claude Desktop/Claude Code, including the critical instruction that the call should not be retried while waiting. This is unusually transparent and actionable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the purpose, gives the key action, and then prominently warns about write behavior and approval gating. Every sentence earns its place, with no redundant filler or buried-critical warnings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 4-parameter tool with 100% schema coverage and no output schema, the description covers the essential operational context: purpose, how to trigger management, mutation side effect, and approval pause behavior. It does not describe return values or prerequisites in prose, but for this tool the schema and description together are sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents every parameter. The description mostly rephrases what the schema says about managed and assign_labels without adding new syntax, constraints, or cross-parameter relationships. This meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('Update'), the resource ('Container Workload Profile'), and the broader purpose ('manage Kubernetes pods in Illumio'). However, it does not explicitly differentiate this from sibling tools like update-workload or get-container-workload-profiles, so it stops short of full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context and actionable guidance ('Set managed=true and assign labels to start managing pods in a namespace'), but it never says when to choose this tool over alternatives or when not to use it. There is no exclusion or alternative routing, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-deny-ruleA
Update an existing deny rule in a ruleset. Identify the rule by its href. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | Yes | Deny rule href (e.g., /orgs/1/sec_policy/draft/rule_sets/123/deny_rules/456) | |
| enabled | No | Enable or disable the deny rule | |
| consumers | No | Updated consumer references: 'ams', label hrefs, key=value pairs, or 'iplist:<name>' | |
| providers | No | Updated provider references: 'ams', label hrefs, key=value pairs, or 'iplist:<name>' | |
| ingress_services | No | Replaces the rule's services. Services this rule covers. Each entry is EITHER an inline port ({'port': 443, 'proto': 'tcp'}), OR a service object by href ({'href': '/orgs/1/sec_policy/draft/services/42'}), OR a service by exact name ({'service': 'All Services'}). Mixing those keys in one entry is an error. For 'any service' use {'service': 'All Services'} β an empty list is rejected by the PCE and {'port': 0} does not mean all ports. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly flags 'WRITE OPERATION: changes PCE state,' and goes further by explaining client-side approval gating and the critical retry warning: 'the call has not failed and must not be retried while waiting.' With no annotations provided, this is substantial behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: the function, the write-operation warning, and the gating/retry note. Every sentence carries operational value, and the most critical behavior is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Between the description and the rich schema, all necessary parameters and the key side-effect behaviors are covered. There is no output schema and no mention of success or error responses, a minor gap for an update operation, but not enough to impede correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (href, enabled, consumers, providers, ingress_services) already carries detailed descriptions and constraints. The description adds only minimal href identification guidance, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific action ('Update an existing deny rule in a ruleset') and the resource ('deny rule'), with the identifier mechanism ('by its href'). This clearly differentiates it from siblings like create-deny-rule, delete-deny-rule, and update-sec-rule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'existing deny rule' implies this is for modifying an existing rule rather than creating or deleting, which is clear contextual guidance. It does not name explicit alternatives or when-not conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-iplistA
Update an existing IP List in the PCE. Provide either 'href' or 'name' (but not both) to identify the IP List. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| fqdn | No | Deprecated alias for a single fqdns entry; use fqdns. | |
| href | No | Href of the IP List to update (e.g., /orgs/1/sec_policy/draft/ip_lists/123) | |
| name | No | Name of the IP List to update (alternative to href) | |
| fqdns | No | Replaces the IP list's FQDN entries (like ip_ranges replaces the ranges). Omit to leave them unchanged. | |
| ip_ranges | No | New list of IP ranges | |
| description | No | New description for the IP List (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does meaningful work: it declares state mutation, warns that approval gating is expected client behavior, and explicitly forbids retrying while paused β a real failure mode this tool would otherwise cause. It omits permission prerequisites and what happens if the href/name does not resolve, so not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: identity rule first, then the write/gating warning. Every clause is load-bearing and the retry warning is placed where an agent will read it before acting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists but the tool returns a mutated resource, so return values go unmentioned; the pre-call behavior an agent most needs (approval pause, no retry) is covered. Sufficient for correct invocation, though error/not-found behavior is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the replace-vs-omit semantics for fqdns and ip_ranges and the deprecated fqdn alias are already documented structurally. The description's only added parameter meaning is the href/name mutual exclusivity, which is genuinely useful but narrow against a 6-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing IP List in the PCE'), which unambiguously separates it from create-iplist/delete-iplist siblings by verb alone. It does not explicitly name which sibling to use for lookups, but the resource is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the concrete selection rule for its own two identifiers ('provide either href or name, but not both') and labels itself a write operation, which tells the agent when it is appropriate. It stops short of pointing to get-iplists for discovery or create-iplist for new lists, so no explicit alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-labelA
Update an existing label in the PCE. Provide either: 1) href + new_value (optionally with key), or 2) key + value + new_value to identify and update the label. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Label type (e.g., role, app, env, loc). Required when using value to identify label, or when using href. | |
| href | No | Label href (e.g., /orgs/1/labels/42). Use this to directly identify the label. | |
| value | No | Current value of the label. Used with key to identify the label when href is not provided. | |
| new_value | No | New value for the label. Always required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explicitly flags 'WRITE OPERATION: changes PCE state,' and crucially warns that approval-gated clients may pause and that the call must not be retried while waiting. This non-obvious, actionable behavior goes well beyond what the schema conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose, invocation methods, then the critical write/approval warning. Each sentence earns its place. It loses a point for the misleading 'optionally with key' phrasing, which introduces ambiguity in an otherwise efficient structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, invocation options, and a key behavioral warning, which is substantial. However, the key/href contradiction creates a real gap that could prevent correct invocation. It also does not mention what happens on success or how to handle cases where both identification methods are provided, making it minimally viable but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description's parameter guidance contradicts the schema: it says href + new_value is used 'optionally with key,' while the schema states key is required when using href. This conflicting instruction can mislead an agent into constructing an invalid call. The description also does not clarify precedence if both href and key+value are supplied, so it subtracts value rather than adding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Update an existing label in the PCE.' This clearly distinguishes it from siblings like create-label, delete-label, and get-labels. It further clarifies the resource scope and that only existing labels are affected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides two explicit identification methods (href-based and key+value-based) and states that new_value is always required. This gives clear context on how to invoke the tool. However, it does not explicitly state when not to use it, such as pointing to create-label for new labels or delete-label for removals, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-rulesetA
Update an existing ruleset in the PCE. Provide either 'href' or 'name' (but not both) to identify the ruleset. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | No | Href of the ruleset to update (e.g., /orgs/1/sec_policy/active/rule_sets/123) | |
| name | No | Name of the ruleset to update (alternative to href) | |
| scopes | No | New scopes for the ruleset. Each scope is an array of label identifiers (either href strings like '/orgs/1/labels/42', or key=value strings like 'role=web', or objects with href property). | |
| enabled | No | Whether the ruleset is enabled | |
| description | No | New description for the ruleset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well. It explicitly labels the operation as a WRITE OPERATION that changes PCE state, and it warns that in gated clients the call pauses for user approval and must not be retried. This is valuable behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the operation, then the key identifier constraint, then the critical write/approval behavior. Every sentence contributes necessary information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no annotations and no output schema, the description covers the main things an agent needs: what it updates, how to identify the target, and the approval-pause behavior. It could go further by explaining whether unspecified fields are left unchanged and what the response contains, but the core invocation guidance is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful value by stating that either 'href' or 'name' must be provided but not both, which is a critical constraint not evident from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates an existing ruleset in the PCE, using a specific verb and resource. This distinguishes it from sibling tools like create-ruleset and delete-ruleset without requiring the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: updating an existing ruleset, rather than creating or deleting one. It does not explicitly name alternatives or provide when-not-to-use guidance, but the 'existing' qualifier and write-operation warning make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-sec-ruleA
Update an allow rule inside a ruleset, identified by its href. Only the fields you supply change. Use this to refine a rule in place β swapping an inline port for a process-qualified service, for example β instead of rebuilding the ruleset. For deny rules use update-deny-rule. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | Yes | Rule href, e.g. /orgs/1/sec_policy/draft/rule_sets/2/sec_rules/3 | |
| enabled | No | Enable or disable the rule | |
| consumers | No | Replaces consumers. Same forms as providers. | |
| providers | No | Replaces providers. 'ams', 'iplist:<name>', 'key=value', or an href. | |
| description | No | New description | |
| egress_services | No | Consumer-side process qualifier: services carrying windows_egress_services, which restrict WHICH PROCESS on the consumer may use this rule. Separate from ingress_services (the provider-side port) β the PCE refuses a Windows egress service in ingress_services. Use both together for 'this binary, to that port'. | |
| ingress_services | No | Replaces the rule's services. Inline port, {href}, or {service: 'name'}. | |
| unscoped_consumers | No | True makes this an extra-scope rule |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden and does so thoroughly. It flags 'WRITE OPERATION: changes PCE state,' explains that in gated clients the call pauses for user approval, and warns that 'the call has not failed and must not be retried while waiting.' It also discloses partial-update semantics with 'Only the fields you supply change.' These are meaningful behavioral traits beyond what the schema conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly written with no filler. It front-loads the core action and identification method, then efficiently covers the usage rationale, sibling routing, and the critical write-operation approval behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is remarkably complete. It covers purpose, scope, the distinction from sibling tools, partial-update behavior, write side effects, approval-pause behavior, and a retry prohibition. The rich parameter schema covers field-level semantics, so nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value beyond the schema. Notably, it explains egress_services as a consumer-side process qualifier distinct from ingress_services, states that the PCE refuses a Windows egress service in ingress_services, and clarifies that both should be used together for 'this binary, to that port.' The partial-update statement also informs how all parameters behave.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Update an allow rule inside a ruleset, identified by its href.' It clearly distinguishes this from the sibling update-deny-rule by explicitly noting 'For deny rules use update-deny-rule.' An agent can tell exactly what this tool does and what it does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: 'Use this to refine a rule in place... instead of rebuilding the ruleset.' It also names the alternative for deny rules and gives a concrete example use case (swapping an inline port for a process-qualified service). This leaves no ambiguity about when to select it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-serviceA
Update an existing service in the PCE. Identify by href (preferred) or name. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | No | Service href (e.g., /orgs/1/sec_policy/draft/services/123) | |
| name | No | Service name to find (alternative to href) | |
| new_name | No | New name for the service | |
| description | No | New description | |
| service_ports | No | New port/protocol definitions (replaces existing) | |
| windows_services | No | Replaces the inbound Windows qualifiers. | |
| windows_egress_services | No | Replaces the outbound process qualifiers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'WRITE OPERATION: changes PCE state,' which is the most important behavioral trait. It also discloses the approval-gating behavior in Claude Desktop/Claude Code and warns that the call 'has not failed and must not be retried while waiting.' This is exceptionally useful and prevents an agent from making a dangerous retry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tightly packed sentences. The first sentence states the action and identification strategy, the second flags the write nature, and the third warns about approval gating and retry. Every sentence earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, this description covers the essential call-time knowledge: what is updated, how to identify the target, that state changes, and how to handle approval pauses. It does not explicitly explain the effect of omitting fields, but the schema already documents replacement semantics for the array parameters. A short note on 'unspecified fields remain unchanged' would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the schema already documents all seven parameters thoroughly. The description adds only the guidance that href is preferred over name, which is a minor semantic clarification. No additional parameter-level meaning is missing because the schema already explains fields, nesting, and replacement semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Update an existing service in the PCE.' This clearly distinguishes the tool from create-service, delete-service, and update-* tools targeting other resources like workloads or rulesets. The identification mechanism (href preferred or name) further clarifies scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when updating an existing service in the PCE, identified by href or name. It also implicitly distinguishes from creation by saying 'existing service.' It does not explicitly name alternatives or exclusions, but the resource-specific language is enough for typical routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update-workloadA
Update a workload in the PCE. Identify by href (preferred) or name. Provide only fields you want to change. WRITE OPERATION: changes PCE state. In clients that gate tool calls (Claude Desktop, Claude Code), this pauses for the user to approve it -- the call has not failed and must not be retried while waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| href | No | Workload href (e.g., /orgs/1/workloads/xxxx). Preferred identifier. | |
| name | No | Workload name to find (alternative to href). If updating, this finds the workload. | |
| labels | No | Labels to assign (replaces existing labels). Each item has 'key' and 'value'. | |
| hostname | No | New hostname for the workload | |
| new_name | No | New name for the workload | |
| description | No | New description for the workload | |
| ip_addresses | No | New IP addresses (replaces existing interfaces) | |
| enforcement_mode | No | Enforcement mode to set |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure, and it does this exceptionally well. It explicitly flags this as a WRITE OPERATION that changes PCE state, and explains the user-approval gating behavior in Claude Desktop/Claude Code, including the critical warning not to retry while the call is paused.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action, identifier strategy, partial-update behavior, and the critical write/approval warning all appear in a few purposeful sentences. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with 8 optional parameters, no required fields, and no output schema, the description covers everything needed to call it correctly: how to identify the target, how to specify partial changes, and what to expect during an approval-gated write operation. The absence of return-value details is acceptable without an output schema and given the clear operational warning.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 8 parameters. The description adds meaningful selection semantics by stating that href is the preferred identifier, name is an alternative for finding the workload, and only provided fields will be changed. This exceeds the baseline expected when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and a specific resource ('a workload in the PCE'), and clarifies how to identify the target via href or name. This is sufficient to distinguish it from sibling tools like create-workload, delete-workload, and update-label.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear practical usage context: identify by href (preferred) or name, and provide only the fields to change. It does not explicitly call out when not to use this tool in favor of create-workload or delete-workload, but the update semantics are stated clearly enough that an agent can infer the appropriate scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.13.1- Changed
create-iplist3 fields changed- changed
Input schema / properties / fqdn / descriptionPrevious value: -"Fully Qualified Domain Name (optional)"New value: +"Deprecated alias for a single fqdns entry; use fqdns." - added
Input schema / properties / fqdnsAdded value: +{ + "description": "FQDN entries, e.g. [\"*.example.com\", {\"fqdn\": \"api.example.com\", \"description\": \"vendor API\"}]. An IP list can be FQDN-only; ip_ranges is then optional.", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "properties": { + "description": { + "type": "string" + }, + "fqdn": { + "type": "string" + } + }, + "required": [ + "fqdn" + ], + "type": "object" + } + ] + }, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "name", - "ip_ranges" -]New value: +[ + "name" +]
- Changed
update-iplist2 fields changed- changed
Input schema / properties / fqdn / descriptionPrevious value: -"New Fully Qualified Domain Name (optional)"New value: +"Deprecated alias for a single fqdns entry; use fqdns." - added
Input schema / properties / fqdnsAdded value: +{ + "description": "Replaces the IP list's FQDN entries (like ip_ranges replaces the ranges). Omit to leave them unchanged.", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "properties": { + "description": { + "type": "string" + }, + "fqdn": { + "type": "string" + } + }, + "required": [ + "fqdn" + ], + "type": "object" + } + ] + }, + "type": "array" +}
10 tool updates
v0.13.0- Changed
build-identity-graph2 fields changed- changed
Input schema / properties / include_destinations / descriptionPrevious value: -"Label filters on the destination side"New value: +"Destination filters, same forms as include_sources plus FQDNs" - changed
Input schema / properties / include_sources / descriptionPrevious value: -"Label filters, e.g. ['app=vdi']"New value: +"Source filters: label HREFs or key=value (ANDed), IP list/workload HREFs, IPs, e.g. ['app=vdi']"
- Added
collect-compliance-evidence - Changed
compliance-check1 field changed- changed
Input schema / properties / framework / enumPrevious value: -[ - "pci-dss", - "dora", - "nist", - "cis", - "iso-27001", - "swift-csp", - "hipaa", - "general" -]New value: +[ + "pci-dss", + "dora", + "nis2", + "nist", + "cis", + "iso-27001", + "swift-csp", + "hipaa", + "general" +]
- Changed
discover-process-egress1 field changed- changed
Input schema / properties / include_sources / descriptionPrevious value: -"Restrict to these sources. Accepts label shorthand 'key=value' (e.g. 'app=vdi'), HREFs, IPs or FQDNs."New value: +"Restrict to these sources. Accepts label shorthand 'key=value' (e.g. 'app=vdi'), label/IP list/workload HREFs or IPs (FQDNs are destination-only)."
- Added
find-unknown-endpoints - Changed
get-events4 fields changed- added
Input schema / properties / event_type / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - changed
Input schema / properties / event_type / descriptionPrevious value: -"Filter by event type (e.g., 'system_task.expire_service_account_api_keys')"New value: +"Event type string, or a list of them (OR). E.g. 'sec_policy.create' or ['rule_set.update', 'sec_rule.update']. Combines with kind." - removed
Input schema / properties / event_type / typeRemoved value: -"string" - added
Input schema / properties / kindAdded value: +{ + "description": "Named group of event types: policy (provisioning, ruleset/rule/ip list/service changes), enforcement (enforcement mode changes), ven (pairing/unpairing/tampering), auth (user login/logout). See the tool description for the exact strings.", + "enum": [ + "policy", + "enforcement", + "ven", + "auth" + ], + "type": "string" +}
- Changed
get-iplists3 fields changed- added
Input schema / properties / contains_ipAdded value: +{ + "description": "A single IPv4 or IPv6 address. Return only the IP lists whose ranges contain it, honouring exclusion ranges; each returned list carries matched_range. Combine with is_default to tell 'in a real list' from 'only in Any'.", + "type": "string" +} - changed
Input schema / properties / ip_address / descriptionPrevious value: -"Filter by IP address (supports partial matches)"New value: +"PCE-side substring match on the range text (e.g. '10.20.30.4' matches '10.20.30.40/32' and never matches an address inside a CIDR). Use contains_ip for exact containment." - added
Input schema / properties / pversionAdded value: +{ + "description": "Policy version to read (default draft). Echoed as policy_version in the response.", + "enum": [ + "draft", + "active" + ], + "type": "string" +}
- Changed
get-traffic-flows2 fields changed- changed
Input schema / properties / exclude_sources / descriptionPrevious value: -"Sources to exclude (label/IP list/workload HREFs, FQDNs, IPs)"New value: +"Sources to exclude (label/IP list/workload HREFs, IPs; FQDNs are destination-only)" - changed
Input schema / properties / include_sources / descriptionPrevious value: -"Sources to include. Accepts label shorthand 'key=value' (e.g. 'app=vdi'), which the server resolves to a label HREF, as well as label/IP list/workload HREFs, FQDNs and IPs. Omit to match all sources."New value: +"Sources to include. Accepts label shorthand 'key=value' (e.g. 'app=vdi'), which the server resolves to a label HREF, as well as label/IP list/workload HREFs and IPs. FQDNs and broadcast/multicast/unicast are destination-only (the PCE rejects them on sources). Omit to match all sources."
- Changed
get-traffic-flows-summary2 fields changed- changed
Input schema / properties / exclude_sources / descriptionPrevious value: -"Sources to exclude (label/IP list/workload HREFs, FQDNs, IPs). Best case these are hrefs like /orgs/1/labels/57 or similar. Other way is app=env as an example (label key and value)"New value: +"Sources to exclude (label/IP list/workload HREFs, IPs; FQDNs are destination-only). Best case these are hrefs like /orgs/1/labels/57 or similar. Other way is app=env as an example (label key and value)" - changed
Input schema / properties / include_sources / descriptionPrevious value: -"Sources to include (label/IP list/workload HREFs, FQDNs, IPs). Best case these are hrefs like /orgs/1/labels/57 or similar. Other way is app=env as an example (label key and value)"New value: +"Sources to include (label/IP list/workload HREFs, IPs; FQDNs are destination-only). Best case these are hrefs like /orgs/1/labels/57 or similar. Other way is app=env as an example (label key and value)"
- Changed
get-traffic-timeline2 fields changed- changed
Input schema / properties / include_destinations / descriptionPrevious value: -"Destinations to include, same forms as include_sources"New value: +"Destinations to include, same forms as include_sources plus FQDNs and broadcast/multicast/unicast" - changed
Input schema / properties / include_sources / descriptionPrevious value: -"Sources to include: label HREFs or key=value (entries are ANDed), IP list/workload HREFs, FQDNs, IPs"New value: +"Sources to include: label HREFs or key=value (entries are ANDed), IP list/workload HREFs, IPs. FQDNs are destination-only"
1 tool update
v0.12.0- Added
get-pce-capacity
4 tool updates
v0.11.0- Added
build-identity-graph - Changed
get-rulesets6 fields changed- added
Input schema / properties / actor_labelsAdded value: +{ + "description": "Return only rules whose consumers or providers reference ALL of these labels (key=value or HREF). Rulesets with no matching rule are omitted.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / actor_sideAdded value: +{ + "description": "Which side actor_labels must appear on (default any)", + "enum": [ + "consumer", + "provider", + "any" + ], + "type": "string" +} - changed
Input schema / properties / labels / descriptionPrevious value: -"JSON-encoded list of label URIs to filter by scope"New value: +"Scope filter: key=value or label HREFs, ANDed (['app=shop', 'env=prod'] = rulesets scoped to exactly that app). A pre-encoded JSON string is still accepted." - added
Input schema / properties / labels / itemsAdded value: +{ + "type": "string" +} - changed
Input schema / properties / labels / typePrevious value: -"string"New value: +"array" - added
Input schema / properties / pversionAdded value: +{ + "description": "Policy version to read (default draft). Echoed as policy_version.", + "enum": [ + "draft", + "active" + ], + "type": "string" +}
- Added
get-traffic-timeline - Changed
get-workloads1 field changed- changed
Input schema / properties / detail_level / descriptionPrevious value: -"Level of detail. 'compact' (default): tabular summary with key fields and labels. 'full': complete workload data including services, VEN agent, interfaces. 'labels_only': minimal table of href, name, hostname, and labels."New value: +"Level of detail. 'compact' (default): tabular summary with key fields, labels, and VEN health (ven_status, last_heartbeat_on, agent_version, policy_sync_state, health_errors) -- enough for 'stale VEN' questions without 'full'. 'full': complete workload data including services, VEN agent, interfaces. 'labels_only': minimal table of href, name, hostname, and labels."
47 tool updates
v0.8.0- Removed
add-note - Added
check-pce-credentials-status - Added
compare-draft-active - Added
compliance-check - Added
create-deny-rule - Added
create-ringfence - Changed
create-ruleset6 fields changed- added
Input schema / properties / rules / items / properties / egress_servicesAdded value: +{ + "description": "Consumer-side process qualifier: services carrying windows_egress_services, which restrict WHICH PROCESS on the consumer may use this rule. Separate from ingress_services (the provider-side port) β the PCE refuses a Windows egress service in ingress_services. Use both together for 'this binary, to that port'.", + "items": { + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "port": { + "type": "integer" + }, + "proto": { + "description": "tcp, udp, icmp or a protocol number" + }, + "to_port": { + "type": "integer" + } + }, + "required": [ + "port" + ] + }, + { + "additionalProperties": false, + "properties": { + "href": { + "type": "string" + } + }, + "required": [ + "href" + ] + }, + { + "additionalProperties": false, + "properties": { + "service": { + "type": "string" + } + }, + "required": [ + "service" + ] + } + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / rules / items / properties / ingress_services / descriptionAdded value: +"Services this rule covers. Each entry is EITHER an inline port ({'port': 443, 'proto': 'tcp'}), OR a service object by href ({'href': '/orgs/1/sec_policy/draft/services/42'}), OR a service by exact name ({'service': 'All Services'}). Mixing those keys in one entry is an error. For 'any service' use {'service': 'All Services'} β an empty list is rejected by the PCE and {'port': 0} does not mean all ports." - added
Input schema / properties / rules / items / properties / ingress_services / items / oneOfAdded value: +[ + { + "additionalProperties": false, + "properties": { + "port": { + "type": "integer" + }, + "proto": { + "description": "tcp, udp, icmp or a protocol number" + }, + "to_port": { + "type": "integer" + } + }, + "required": [ + "port" + ] + }, + { + "additionalProperties": false, + "properties": { + "href": { + "type": "string" + } + }, + "required": [ + "href" + ] + }, + { + "additionalProperties": false, + "properties": { + "service": { + "type": "string" + } + }, + "required": [ + "service" + ] + } +] - removed
Input schema / properties / rules / items / properties / ingress_services / items / propertiesRemoved value: -{ - "port": { - "type": "integer" - }, - "proto": { - "type": "string" - } -} - removed
Input schema / properties / rules / items / properties / ingress_services / items / requiredRemoved value: -[ - "port", - "proto" -] - added
Input schema / properties / rules / items / properties / rule_typeAdded value: +{ + "default": "allow", + "description": "Type of rule: 'allow' (default), 'deny' to block specific traffic, or 'override_deny' to block traffic overriding ALL allow rules (emergency use only β highest priority deny)", + "enum": [ + "allow", + "deny", + "override_deny" + ], + "type": "string" +}
- Added
create-service - Changed
create-workload4 fields changed- removed
Input schema / properties / labels / items / keyRemoved value: -{ - "type": "string" -} - added
Input schema / properties / labels / items / propertiesAdded value: +{ + "key": { + "type": "string" + }, + "value": { + "type": "string" + } +} - added
Input schema / properties / labels / items / typeAdded value: +"object" - removed
Input schema / properties / labels / items / valueRemoved value: -{ - "type": "string" -}
- Added
delete-deny-rule - Changed
delete-iplist2 fields changed- removed
Input schema / oneOfRemoved value: -[ - { - "required": [ - "href" - ] - }, - { - "required": [ - "name" - ] - } -] - changed
Input schema / properties / href / descriptionPrevious value: -"Href of the IP List to delete"New value: +"Href of the IP List to delete (e.g., /orgs/1/sec_policy/draft/ip_lists/123)"
- Added
delete-pce-credentials - Changed
delete-ruleset4 fields changed- removed
Input schema / oneOfRemoved value: -[ - { - "required": [ - "href" - ] - }, - { - "required": [ - "name" - ] - } -] - changed
Input schema / properties / href / descriptionPrevious value: -"Href of the ruleset to delete"New value: +"Href of the ruleset to delete (e.g., /orgs/1/sec_policy/draft/rule_sets/123)" - removed
Input schema / properties / nameRemoved value: -{ - "description": "Name of the ruleset to delete (alternative to href)", - "type": "string" -} - added
Input schema / requiredAdded value: +[ + "href" +]
- Added
delete-sec-rule - Added
delete-service - Changed
delete-workload3 fields changed- added
Input schema / properties / hrefAdded value: +{ + "description": "Workload href (e.g., /orgs/1/workloads/xxxx)", + "type": "string" +} - added
Input schema / properties / name / descriptionAdded value: +"Workload name (alternative to href)" - removed
Input schema / requiredRemoved value: -[ - "name" -]
- Added
detect-lateral-movement-paths - Added
discover-process-egress - Added
enforcement-readiness - Added
find-unmanaged-traffic - Added
get-container-clusters - Added
get-container-workload-profiles - Changed
get-events3 fields changed- added
Input schema / properties / created_byAdded value: +{ + "description": "Filter by creator (user, agent, or system)", + "type": "string" +} - added
Input schema / properties / timestamp_gteAdded value: +{ + "description": "Earliest event timestamp (RFC 3339 format)", + "type": "string" +} - added
Input schema / properties / timestamp_lteAdded value: +{ + "description": "Latest event timestamp (RFC 3339 format)", + "type": "string" +}
- Changed
get-iplists6 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Filter by description (optional)"New value: +"Filter by description (supports partial matches)" - added
Input schema / properties / fqdnAdded value: +{ + "description": "Filter by FQDN (supports partial matches)", + "type": "string" +} - added
Input schema / properties / ip_addressAdded value: +{ + "description": "Filter by IP address (supports partial matches)", + "type": "string" +} - removed
Input schema / properties / ip_rangesRemoved value: -{ - "description": "Filter by IP ranges (optional)", - "items": { - "type": "string" - }, - "type": "array" -} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Maximum number of IP lists to return", + "type": "integer" +} - changed
Input schema / properties / name / descriptionPrevious value: -"Filter IP lists by name (optional)"New value: +"Filter IP lists by name (supports partial matches)"
- Added
get-kubernetes-workloads - Changed
get-labels7 fields changed- added
Input schema / properties / include_deletedAdded value: +{ + "description": "Include deleted labels", + "type": "boolean" +} - added
Input schema / properties / keyAdded value: +{ + "description": "Filter by label key/type, matched exactly (e.g., 'role', 'app', 'env', 'loc'). 'role' will not match 'servicerole'", + "type": "string" +} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Maximum number of labels to return", + "type": "integer" +} - removed
Input schema / properties / nameRemoved value: -{ - "type": "string" -} - added
Input schema / properties / usageAdded value: +{ + "description": "Include label usage flags", + "type": "boolean" +} - added
Input schema / properties / valueAdded value: +{ + "description": "Filter by label value (supports partial matches)", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[]
- Added
get-pairing-profiles - Added
get-policy-coverage-report - Changed
get-rulesets5 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "Filter rulesets by description (supports partial matches)", + "type": "string" +} - changed
Input schema / properties / enabled / descriptionPrevious value: -"Filter by enabled/disabled status (optional)"New value: +"Filter by enabled/disabled status" - added
Input schema / properties / labelsAdded value: +{ + "description": "JSON-encoded list of label URIs to filter by scope", + "type": "string" +} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Maximum number of rulesets to return", + "type": "integer" +} - changed
Input schema / properties / name / descriptionPrevious value: -"Filter rulesets by name (optional)"New value: +"Filter rulesets by name (supports partial matches)"
- Added
get-server-changelog - Changed
get-services4 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Filter services by description"New value: +"Filter services by description (supports partial matches)" - added
Input schema / properties / egress_process_nameAdded value: +{ + "description": "Return only services whose windows_egress_services reference this process (substring, case-insensitive).", + "type": "string" +} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Maximum number of services to return", + "type": "integer" +} - changed
Input schema / properties / name / descriptionPrevious value: -"Filter services by name"New value: +"Filter services by name (supports partial matches)"
- Changed
get-traffic-flows3 fields changed- added
Input schema / properties / group_byAdded value: +{ + "description": "Dimensions to aggregate by. Any of: process, service_name, user, source, source_app, destination, dest_app, fqdn, ip_list, port, proto, policy, rule, direction. Fewer dimensions gives fewer, larger rows - e.g. ['process','fqdn'] answers 'which binary talks to which external name'. Defaults to a full per-flow breakdown.", + "items": { + "type": "string" + }, + "type": "array" +} - changed
Input schema / properties / include_destinations / descriptionPrevious value: -"Destinations to include (label/IP list/workload HREFs, FQDNs, IPs)"New value: +"Destinations to include. Accepts label shorthand 'key=value' (e.g. 'app=vdi'), as well as label/IP list/workload HREFs, FQDNs and IPs. Omit to match all destinations." - changed
Input schema / properties / include_sources / descriptionPrevious value: -"Sources to include (label/IP list/workload HREFs, FQDNs, IPs)"New value: +"Sources to include. Accepts label shorthand 'key=value' (e.g. 'app=vdi'), which the server resolves to a label HREF, as well as label/IP list/workload HREFs, FQDNs and IPs. Omit to match all sources."
- Changed
get-traffic-flows-summary2 fields changed- added
Input schema / properties / detail_levelAdded value: +{ + "description": "How much of each section to show. 'standard' (default) shows the top 100 per section; 'full' shows everything that fits the response limit, which can be ~10x the tokens. Analysis always covers the WHOLE window either way -- totals and section_totals are computed over every row, so the numbers are identical; only the displayed rows differ.", + "enum": [ + "standard", + "full" + ], + "type": "string" +} - added
Input schema / properties / identity_labelsAdded value: +{ + "description": "Label dimensions that define an endpoint's identity in app_to_app. Defaults to ['app','env'] because that is how Illumio defines an application, but ANY label this PCE defines works: ['bu'] for a business-unit view, ['compliance','env'] for a compliance view, ['role','loc'] for a tiered one. The response's available_dimensions lists what this PCE actually has.", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
get-workload-enforcement-status - Changed
get-workloads11 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "Filter by description (supports partial matches)", + "type": "string" +} - added
Input schema / properties / detail_levelAdded value: +{ + "default": "compact", + "description": "Level of detail. 'compact' (default): tabular summary with key fields and labels. 'full': complete workload data including services, VEN agent, interfaces. 'labels_only': minimal table of href, name, hostname, and labels.", + "enum": [ + "compact", + "full", + "labels_only" + ], + "type": "string" +} - added
Input schema / properties / enforcement_modeAdded value: +{ + "description": "Filter by enforcement mode", + "enum": [ + "visibility_only", + "full", + "idle", + "selective" + ], + "type": "string" +} - added
Input schema / properties / hostnameAdded value: +{ + "description": "Filter by hostname (supports partial matches)", + "type": "string" +} - added
Input schema / properties / ip_addressAdded value: +{ + "description": "Filter by IP address (supports partial matches)", + "type": "string" +} - added
Input schema / properties / labelsAdded value: +{ + "description": "JSON-encoded list of label URIs to filter by", + "type": "string" +} - added
Input schema / properties / managedAdded value: +{ + "description": "Filter managed (true) or unmanaged (false) workloads", + "type": "boolean" +} - added
Input schema / properties / max_resultsAdded value: +{ + "description": "Maximum number of workloads to return (default 10000)", + "type": "integer" +} - added
Input schema / properties / name / descriptionAdded value: +"Filter by workload name (supports partial matches)" - added
Input schema / properties / onlineAdded value: +{ + "description": "Filter online (true) or offline (false) workloads", + "type": "boolean" +} - removed
Input schema / requiredRemoved value: -[ - "name" -]
- Added
identify-infrastructure-services - Added
provision-policy - Added
register-pce-credentials - Added
ringfence-batch - Added
update-container-workload-profile - Added
update-deny-rule - Changed
update-iplist2 fields changed- removed
Input schema / oneOfRemoved value: -[ - { - "required": [ - "href" - ] - }, - { - "required": [ - "name" - ] - } -] - changed
Input schema / properties / href / descriptionPrevious value: -"Href of the IP List to update"New value: +"Href of the IP List to update (e.g., /orgs/1/sec_policy/draft/ip_lists/123)"
- Changed
update-label5 fields changed- removed
Input schema / oneOfRemoved value: -[ - { - "required": [ - "href", - "key", - "new_value" - ] - }, - { - "required": [ - "key", - "value", - "new_value" - ] - } -] - changed
Input schema / properties / href / descriptionPrevious value: -"Label href (e.g., /orgs/1/labels/42). Either href or both key and value must be provided to identify the label."New value: +"Label href (e.g., /orgs/1/labels/42). Use this to directly identify the label." - changed
Input schema / properties / key / descriptionPrevious value: -"Label type (e.g., role, app, env, loc)"New value: +"Label type (e.g., role, app, env, loc). Required when using value to identify label, or when using href." - changed
Input schema / properties / new_value / descriptionPrevious value: -"New value for the label"New value: +"New value for the label. Always required." - changed
Input schema / properties / value / descriptionPrevious value: -"Current value of the label"New value: +"Current value of the label. Used with key to identify the label when href is not provided."
- Changed
update-ruleset5 fields changed- removed
Input schema / oneOfRemoved value: -[ - { - "required": [ - "href" - ] - }, - { - "required": [ - "name" - ] - } -] - changed
Input schema / properties / href / descriptionPrevious value: -"Href of the ruleset to update"New value: +"Href of the ruleset to update (e.g., /orgs/1/sec_policy/active/rule_sets/123)" - changed
Input schema / properties / scopes / descriptionPrevious value: -"New scopes for the ruleset"New value: +"New scopes for the ruleset. Each scope is an array of label identifiers (either href strings like '/orgs/1/labels/42', or key=value strings like 'role=web', or objects with href property)." - added
Input schema / properties / scopes / items / items / descriptionAdded value: +"Label identifier - can be a string (href or key=value) or an object with href property" - removed
Input schema / properties / scopes / items / items / oneOfRemoved value: -[ - { - "description": "Label href or key=value string", - "type": "string" - }, - { - "properties": { - "href": { - "description": "Label href", - "type": "string" - } - }, - "required": [ - "href" - ], - "type": "object" - } -]
- Added
update-sec-rule - Added
update-service - Changed
update-workload13 fields changed- added
Input schema / properties / descriptionAdded value: +{ + "description": "New description for the workload", + "type": "string" +} - added
Input schema / properties / enforcement_modeAdded value: +{ + "description": "Enforcement mode to set", + "enum": [ + "visibility_only", + "full", + "idle", + "selective" + ], + "type": "string" +} - added
Input schema / properties / hostnameAdded value: +{ + "description": "New hostname for the workload", + "type": "string" +} - added
Input schema / properties / hrefAdded value: +{ + "description": "Workload href (e.g., /orgs/1/workloads/xxxx). Preferred identifier.", + "type": "string" +} - added
Input schema / properties / ip_addresses / descriptionAdded value: +"New IP addresses (replaces existing interfaces)" - added
Input schema / properties / labels / descriptionAdded value: +"Labels to assign (replaces existing labels). Each item has 'key' and 'value'." - removed
Input schema / properties / labels / items / keyRemoved value: -{ - "type": "string" -} - added
Input schema / properties / labels / items / propertiesAdded value: +{ + "key": { + "type": "string" + }, + "value": { + "type": "string" + } +} - added
Input schema / properties / labels / items / typeAdded value: +"object" - removed
Input schema / properties / labels / items / valueRemoved value: -{ - "type": "string" -} - added
Input schema / properties / name / descriptionAdded value: +"Workload name to find (alternative to href). If updating, this finds the workload." - added
Input schema / properties / new_nameAdded value: +{ + "description": "New name for the workload", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "name", - "ip_addresses" -]
22 tool updates
v1.0.0- Added
add-note - Added
check-pce-connection - Added
create-iplist - Added
create-label - Added
create-ruleset - Added
create-workload - Added
delete-iplist - Added
delete-label - Added
delete-ruleset - Added
delete-workload - Added
get-events - Added
get-iplists - Added
get-labels - Added
get-rulesets - Added
get-services - Added
get-traffic-flows - Added
get-traffic-flows-summary - Added
get-workloads - Added
update-iplist - Added
update-label - Added
update-ruleset - Added
update-workload
TDQS
Scored across 55 tools
The set is unusually well disambiguated for its size: allow rules vs deny rules are split into separate tools, and the overlapping analytics reads (get-traffic-flows vs get-traffic-flows-summary vs get-traffic-timeline, discover-process-egress vs build-identity-graph, find-unmanaged-traffic vs find-unknown-endpoints, compliance-check vs collect-compliance-evidence) each carry explicit 'use this instead of X' guidance. Residual confusion remains between create-ruleset (ring-fencing patterns), create-ringfence, and ringfence-batch, and between get-rulesets/get-policy-coverage-report/enforcement-readiness, but descriptions mostly resolve it.
Nearly everything follows verb_noun kebab-case (get-workloads, create-iplist, update-deny-rule, delete-service), which is predictable and readable. Minor deviations: the 'sec-rule' abbreviation alongside the full 'deny-rule' naming, and noun-first analysis names like compare-draft-active, compliance-check, and enforcement-readiness that break the verb_noun rhythm without breaking comprehension.
At 55 tools this is far past the practical ceiling for reliable tool selection, even for a broad domain spanning policy CRUD, traffic analytics, compliance, Kubernetes, credentials, and server metadata. Several clusters could be consolidated (four deny-rule tools, four allow-rule tools, per-resource get/update pairs), and the sheer surface raises misselection risk despite good descriptions.
CRUD coverage is strong across rulesets, allow rules, deny rules, labels, IP lists, services, and workloads, plus provisioning, drift comparison, compliance evidence, and cluster visibility β notably few dead ends. Gaps are minor: no standalone create-allow-rule (rules only via ruleset create/update), no label-group management despite label groups appearing in ruleset shapes, and only update (no create/delete) for container workload profiles.
Maintenance
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
A Model Context Protocol server for Wix AI tools
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoβ¦
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that connects AI assistants to MISP threat intelligence platforms. It enables threat intelligence search, IOC lookup, and event analysis through natural conversation.-
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that connects AI assistants to OpenCTI threat intelligence platforms. It enables natural language interaction for searching threat intelligence, analyzing reports, managing indicators, and monitoring connectors.-
- AlicenseNot gradedqualityDmaintenanceModel Context Protocol server that connects AI agents with CrowdStrike Falcon platform for intelligent security analysis and automation.MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that enables AI assistants to perform comprehensive AWS security analysis through natural language queries, bridging AI with AWS security services.2Apache 2.0