infoblox-ddi-mcp
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., "@infoblox-ddi-mcpProvision a host named web-01 in the prod IP space"
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.
Infoblox DDI — MCP Server
26 intent-level workflow tools for managing Infoblox Universal DDI via the Model Context Protocol.
Any MCP-compatible AI agent can manage your entire DDI infrastructure — DNS, DHCP, IPAM, security, and federation — without being an Infoblox expert.
Why Intent-Level Tools (Not 1:1 API Mapping)
The Infoblox Universal DDI platform has 300+ REST API endpoints across DDI, Security, and Insights services. A naive MCP implementation would expose each endpoint as a separate tool. This server takes a fundamentally different approach: 26 intent-level workflow tools backed by 303 API methods that abstract multi-step operations into single calls.
The problem with 1:1 mapping:
# What an agent must do to provision a host with 1:1 tools (7 API calls):
1. list_ip_spaces(filter="name==prod") → resolve space name to ID
2. list_subnets(filter="space==ipam/ip_space/1") → find subnets
3. get_next_available_ip(subnet_id) → allocate IP
4. list_auth_zones(filter="fqdn==example.com") → resolve zone
5. create_ipam_host(name, addresses, ...) → create host
6. create_dns_record(type="A", ...) → create A record
7. create_dns_record(type="PTR", ...) → create PTR record# Same operation with intent-level tool (1 call):
provision_host(hostname="web-01", space="prod", zone="example.com")Concern | 1:1 Mapping (300+ tools) | Intent Layer (26 tools) |
LLM tool selection | Agent must choose from 300+ tools — high hallucination rate | 26 tools with |
Token efficiency | 5-7 API calls per workflow, each consuming context window | Single call, single response |
Error handling | Agent must implement rollback, partial-success, retry | Server-side orchestration with |
Domain knowledge | Agent needs to know Infoblox resource IDs, filter syntax, API paths | Agent speaks business intent: "provision host", "diagnose DNS" |
Safety | Every destructive call is directly exposed |
|
Consistency | Each agent builds its own workflow logic | Standardized response envelope ( |
Key design principles:
One tool per user intent — "provision a host", "diagnose DNS", "investigate a threat"
Resolvers handle name→ID mapping — agents pass human-readable names, not resource IDs
Dry-run by default on all mutating operations — agents must explicitly opt in
Guided next actions — every response suggests what to do next, reducing multi-turn back-and-forth
Related MCP server: Apstra MCP Server
Quick Start
Option A: uv (recommended)
cd infoblox-ddi-mcp
# Install dependencies
uv pip install -r requirements.txt
# Configure credentials
cp .env.example .env
# Edit .env — add INFOBLOX_API_KEY
# Run (stdio)
uv run python mcp_intent.py
# Run (HTTP)
uv run python mcp_intent.py --httpOption B: Docker (one command)
docker build -t infoblox-ddi-mcp .
docker run -p 4005:4005 -e INFOBLOX_API_KEY=your_key infoblox-ddi-mcpOr with docker compose (reads .env automatically):
cp .env.example .env # add your INFOBLOX_API_KEY
docker compose up -dOption C: pip install
cd infoblox-ddi-mcp
pip install .
# Now available as a CLI command:
infoblox-ddi-mcp --httpTransport Modes
Mode | Command | Use Case |
stdio (default) |
| Claude Desktop, Cursor, Windsurf, Claude Code |
HTTP streamable |
| HCL AEX, LangChain, OpenAI SDK, remote clients |
Docker |
| Production, Kubernetes, HCL evaluation |
Stdio transport communicates via stdin/stdout JSON-RPC. HTTP transport runs a spec-compliant MCP server on port 4005 (configurable via MCP_PORT).
Configuration
Environment Variable | Default | Description |
| (required) | Infoblox CSP API key |
|
| CSP portal URL |
|
| HTTP bind address |
|
| HTTP port |
|
| HTTP endpoint path |
| (optional) | Bearer token for HTTP transport authentication |
| (optional) | OTLP endpoint to enable tracing (requires |
When MCP_AUTH_TOKEN is set, all HTTP requests must include Authorization: Bearer <token>. Stdio transport is unaffected (authentication is handled by the host process).
Connect to AI Frameworks
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"infoblox-ddi": {
"command": "python",
"args": ["/absolute/path/to/infoblox-ddi-mcp/mcp_intent.py"],
"env": {
"INFOBLOX_API_KEY": "your_api_key_here",
"INFOBLOX_BASE_URL": "https://csp.infoblox.com"
}
}
}
}Restart Claude Desktop — the 26 tools appear in the tool picker.
Claude Code (CLI)
# Add the MCP server (stdio — Claude Code launches the process)
claude mcp add infoblox-ddi -e INFOBLOX_API_KEY=your_api_key_here -- python /absolute/path/to/infoblox-ddi-mcp/mcp_intent.py
# Or connect to a running HTTP server
claude mcp add --transport http infoblox-ddi http://localhost:4005/mcpAnthropic Python SDK
import anthropic
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
mcp_servers=[
{
"type": "url",
"url": "https://your-gateway.example.com/mcp", # must be HTTPS
"name": "infoblox-ddi",
"authorization_token": "your_mcp_auth_token", # optional, if MCP_AUTH_TOKEN is set
}
],
tools=[
{
"type": "mcp_toolset",
"mcp_server_name": "infoblox-ddi",
}
],
messages=[{"role": "user", "content": "Show me all IP spaces and their utilization"}],
betas=["mcp-client-2025-11-20"],
)Note: The Anthropic MCP connector requires the server to be reachable via HTTPS. For local testing, use Claude Desktop (stdio) instead.
LangChain / LangGraph
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient(
{
"infoblox-ddi-stdio": {
"command": "python",
"args": ["/path/to/infoblox-ddi-mcp/mcp_intent.py"],
"transport": "stdio",
},
# Or use HTTP (streamable_http is recommended over sse):
# "infoblox-ddi-http": {
# "url": "http://127.0.0.1:4005/mcp",
# "transport": "streamable_http",
# },
}
)
tools = await client.get_tools()
# Use with any LangChain agent or LangGraph workflowOpenAI Agents SDK
from agents import Agent, Runner
from agents.mcp import MCPServerStdio, MCPServerStreamableHttp
# Option A: stdio transport
async with MCPServerStdio(
name="infoblox-ddi",
params={
"command": "python",
"args": ["/path/to/infoblox-ddi-mcp/mcp_intent.py"],
},
) as server:
agent = Agent(name="ddi-agent", mcp_servers=[server])
result = await Runner.run(agent, "Show me all IP spaces")
print(result.final_output)
# Option B: HTTP streamable transport (start server first with --http)
async with MCPServerStreamableHttp(
name="infoblox-ddi",
params={"url": "http://127.0.0.1:4005/mcp"},
) as server:
agent = Agent(name="ddi-agent", mcp_servers=[server])
result = await Runner.run(agent, "List all DNS zones")
print(result.final_output)Cursor IDE
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"infoblox-ddi": {
"command": "python",
"args": ["/absolute/path/to/infoblox-ddi-mcp/mcp_intent.py"],
"env": {
"INFOBLOX_API_KEY": "your_api_key_here"
}
}
}
}Windsurf IDE
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"infoblox-ddi": {
"command": "python",
"args": ["/absolute/path/to/infoblox-ddi-mcp/mcp_intent.py"],
"env": {
"INFOBLOX_API_KEY": "your_api_key_here"
}
}
}
}HCL BigFix AEX
AEX has native MCP client support. In Admin Console → Agent Studio:
Add an MCP Server tool source
Set the endpoint to
http://<host>:4005/mcpStart the server with
python mcp_intent.py --httpThe 26 tools are auto-discovered and available to AEX agents
Any HTTP Client
# Step 1: Initialize session (capture the Mcp-Session-Id header from the response)
curl -v -X POST http://127.0.0.1:4005/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {"name": "curl", "version": "1.0"}
}
}'
# Look for the response header: Mcp-Session-Id: <session-id>
# Step 2: List available tools (pass the session ID from step 1)
curl -X POST http://127.0.0.1:4005/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: <session-id>" \
-d '{"jsonrpc": "2.0", "id": 2, "method": "tools/list"}'
# Step 3: Call a tool
curl -X POST http://127.0.0.1:4005/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: <session-id>" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "explore_network",
"arguments": {"depth": "summary"}
}
}'Remote Access (HTTP Transport)
Any MCP-compatible client can connect remotely over HTTP. Start the server with --http and point clients to the endpoint:
http://<host>:4005/mcpLocal network:
# Start the server
python mcp_intent.py --http
# Any client on the network connects to:
# http://192.168.1.100:4005/mcpDocker (remote host):
docker run -p 4005:4005 -e INFOBLOX_API_KEY=your_key infoblox-ddi-mcp
# Clients connect to:
# http://your-docker-host:4005/mcpWith authentication:
# Start with auth token
MCP_AUTH_TOKEN=my-secret-token python mcp_intent.py --http
# Clients must include the header:
# Authorization: Bearer my-secret-tokenProduction (TLS): For internet-facing deployments, place the server behind a reverse proxy (nginx, API gateway) that handles TLS. See Production Deployment below.
Summary:
stdio= client launches the server locally.HTTP= server runs independently, clients connect tohttp://host:4005/mcp. UseMCP_AUTH_TOKENto secure HTTP access.
Available Tools
Discovery & Exploration (Read-only)
Tool | Description |
| Browse the IP hierarchy tree (Spaces → Blocks → Subnets) with utilization. Use for navigating network structure |
| Find resources by keyword across all DDI domains (IP, hostname, domain, comment) |
| Executive dashboard with counts and health across all DDI infrastructure |
Provisioning (Write)
Tool | Description |
| Create host + IP + DNS in one call. Supports auto-IP from subnet and auto-DNS (atomic A/PTR via API) or manual DNS creation |
| Create a new DNS record with automatic zone discovery and validation |
| Reverse provisioning with dry-run safety — detects auto-generated DNS (system records) vs manual DNS and handles each correctly |
Troubleshooting (Read-only)
Tool | Description |
| Diagnose DNS resolution problems: zone, records, security policies, and optional cache flush |
| Detect overlapping subnets, duplicate reservations, DHCP usage, and host associations |
| Verify Infoblox API connectivity for all three service clients (DDI, Insights, ATCFW) with response latency |
| HA groups, DHCP hosts, DNS zones, DNS views, IP spaces, on-prem appliance and service health |
Security (Read + Write)
Tool | Description |
| SOC insights with threat indicators, affected assets, and timeline events |
| Security policies, category filters, compliance, and analytics scorecard |
| CRUD for named lists (with partial add/remove items), app filters, internal domains, access codes |
| Update status, bulk triage by priority, get comment history |
IPAM Management (CRUD)
Tool | Description |
| Create, update, delete, get, or list IP spaces, address blocks, subnets, and ranges |
| Reserve/release fixed IPs and DHCP static leases |
DNS Configuration (CRUD)
Tool | Description |
| Create, delete, list, or get authoritative and forward zones |
| Update, delete, list, or get DNS records (smart lookup by name+zone+type) |
DHCP Configuration (CRUD)
Tool | Description |
| CRUD for HA groups, option codes, hardware/option filters, hardware entries |
| List/search active leases, clear (wipe) leases, or resend DDNS updates |
DNS Traffic Control (CRUD)
Tool | Description |
| Manage DTC/GSLB: LBDNs, pools, servers, and policies for global server load balancing and traffic steering |
Federation (CRUD)
Tool | Description |
| Manage realms, blocks, delegations, pools, overlapping/reserved blocks |
Reporting (Read-only)
Tool | Description |
| Capacity planning — utilization by space, block, and subnet |
Response Format
Every tool returns a standard envelope:
{
"status": "success | partial | failed",
"summary": "Human-readable one-liner",
"steps": [
{"step": "Resolve IP space", "status": "success", "result": {"space_id": "ipam/ip_space/abc"}},
{"step": "Create subnet", "status": "success", "result": {"id": "ipam/subnet/xyz"}}
],
"result": { "..." : "..." },
"warnings": ["Optional warnings"],
"next_actions": ["Suggested follow-up tool calls"]
}This makes it easy for any LLM to:
Check
statusto know if the operation succeededRead
summaryfor a one-line answer to show the userInspect
stepsto understand the multi-step workflowFollow
next_actionsfor intelligent follow-up suggestions
Example Conversations
"Show me what's in our network"
→ explore_network(depth="full")
→ Returns hierarchical tree: IP spaces → address blocks → subnets with utilization %"Create a /24 subnet in the prod space for web servers"
→ manage_network(resource_type="subnet", action="create", address="10.20.3.0/24", space="prod", comment="Web servers")
→ Resolves space name → ID, validates CIDR, creates subnet"Set up a new host called web-prod-01 in the prod space"
→ provision_host(hostname="web-prod-01", space="prod", subnet="10.20.3.0/24", zone="example.com", view="default")
→ Auto-assigns next available IP (10.20.3.50), creates IPAM host + DNS A/PTR atomically"Provision web-prod-02 but I want to manage DNS records separately"
→ provision_host(hostname="web-prod-02", ip="10.20.3.51", space="prod", zone="example.com", auto_dns=False)
→ Creates IPAM host, then A and PTR records as separate API calls"DNS isn't working for api.example.com"
→ diagnose_dns(domain="api.example.com")
→ Returns zone status, records found, security blocks, and fix recommendations"Reserve 10.20.3.100 for the new database server"
→ manage_ip_reservation(action="reserve", address="10.20.3.100", space="prod", hostname="db-01", mac="AA:BB:CC:DD:EE:FF")
→ Checks availability, validates MAC, creates fixed address reservation"Close all low-priority security insights"
→ triage_security_insight(action="bulk_triage", priority_filter="low", status="CLOSED", dry_run=True)
→ DRY RUN: Shows 15 insights that would be closed
→ triage_security_insight(action="bulk_triage", priority_filter="low", status="CLOSED", dry_run=False)
→ Bulk closes 15 insights"What would happen if I decommissioned web-prod-01?"
→ decommission_host(identifier="web-prod-01", dry_run=True)
→ "Would delete: 1 host, 1 A record, 1 PTR, release IP 10.20.3.50"Docker Deployment
# Build
make docker-build # or: docker build -t infoblox-ddi-mcp .
# Run standalone
make docker-run # or: docker run --rm -p 4005:4005 -e INFOBLOX_API_KEY=... infoblox-ddi-mcp
# Run with compose (reads .env)
make docker-up # or: docker compose up -d
make docker-down # or: docker compose downThe Docker image:
Uses multi-stage build (small final image)
Runs as non-root user
Has a health check built in
Binds to
0.0.0.0:4005by defaultAccepts all config via environment variables
OpenTelemetry (Optional)
Distributed tracing is available as an optional extra:
pip install infoblox-ddi-mcp[otel]Enable by setting OTEL_EXPORTER_OTLP_ENDPOINT:
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
python mcp_intent.py --httpAll MCP tool calls are auto-traced with service name infoblox-ddi-mcp. Works with Jaeger, Grafana Tempo, Datadog, or any OTLP-compatible backend. If the packages aren't installed, the server runs normally without tracing.
Production Deployment
Behind an API Gateway (Recommended)
For production environments, run the MCP server behind an API gateway for TLS termination, rate limiting, and centralized authentication.

The MCP server runs plain HTTP internally. The gateway handles TLS and external auth. Set MCP_AUTH_TOKEN as a shared secret between the gateway and the server for an additional layer of security.
Kubernetes / Docker Compose
# docker-compose.prod.yml
services:
infoblox-mcp:
image: infoblox-ddi-mcp:latest
restart: always
environment:
- INFOBLOX_API_KEY=${INFOBLOX_API_KEY}
- INFOBLOX_BASE_URL=${INFOBLOX_BASE_URL:-https://csp.infoblox.com}
- MCP_HOST=0.0.0.0
- MCP_PORT=4005
- MCP_AUTH_TOKEN=${MCP_AUTH_TOKEN}
ports:
- "127.0.0.1:4005:4005" # bind to localhost only — gateway handles external traffic
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:4005/mcp')"]
interval: 30s
timeout: 5s
retries: 3
deploy:
resources:
limits:
memory: 512M
cpus: "0.5"Nginx Reverse Proxy Example
upstream mcp_backend {
server 127.0.0.1:4005;
}
server {
listen 443 ssl;
server_name mcp.example.com;
ssl_certificate /etc/ssl/certs/mcp.crt;
ssl_certificate_key /etc/ssl/private/mcp.key;
location /mcp {
proxy_pass http://mcp_backend/mcp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Authorization "Bearer ${MCP_AUTH_TOKEN}";
# Rate limiting
limit_req zone=mcp burst=20 nodelay;
}
}AWS API Gateway
Create an HTTP API in API Gateway
Add a route:
POST /mcp→ integration to your ECS/EKS service on port 4005Attach a Lambda authorizer or Cognito user pool for auth
Enable CloudWatch logging for audit trail
Kubernetes Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: infoblox-mcp
spec:
replicas: 2
selector:
matchLabels:
app: infoblox-mcp
template:
metadata:
labels:
app: infoblox-mcp
spec:
containers:
- name: mcp
image: infoblox-ddi-mcp:latest
ports:
- containerPort: 4005
env:
- name: INFOBLOX_API_KEY
valueFrom:
secretKeyRef:
name: infoblox-secrets
key: api-key
- name: MCP_AUTH_TOKEN
valueFrom:
secretKeyRef:
name: infoblox-secrets
key: mcp-token
livenessProbe:
httpGet:
path: /mcp
port: 4005
initialDelaySeconds: 10
periodSeconds: 30
resources:
limits:
memory: "512Mi"
cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
name: infoblox-mcp
spec:
selector:
app: infoblox-mcp
ports:
- port: 4005
targetPort: 4005Deployment Checklist
Step | Action |
1 | Set |
2 | Set |
3 | Bind to |
4 | Enable TLS on the gateway (never expose plain HTTP externally) |
5 | Configure rate limiting (recommended: 60 req/min per client) |
6 | Enable access logging on the gateway for audit |
7 | Set resource limits (512MB RAM, 0.5 CPU is sufficient) |
8 | Monitor health check endpoint |
Makefile Targets
make install Install dependencies with uv
make dev Install in editable mode
make run Run MCP server (stdio)
make run-http Run MCP server (HTTP)
make lint Run ruff linter
make format Run ruff formatter
make test Run test suite (163 tests)
make docker-build Build Docker image
make docker-run Run Docker container
make docker-up Start with docker compose
make docker-down Stop docker compose
make check Verify syntax
make clean Remove build artifactsArchitecture

Project Structure
infoblox-ddi-mcp/
├── mcp_intent.py ← MCP server entry point (run this)
├── services/
│ ├── infoblox_client.py ← Infoblox DDI API client (90 methods)
│ ├── insights_client.py ← SOC Insights API client (13 methods)
│ ├── atcfw_client.py ← DNS Security API client (12 methods)
│ └── metrics.py ← Internal metrics collection
├── tests/ ← 163 tests (validators, resolvers, tools, resources)
│ ├── conftest.py
│ ├── test_validation.py
│ ├── test_resolvers.py
│ ├── test_tools.py
│ └── test_resources.py
├── examples/ ← Integration examples
│ ├── anthropic_sdk.py
│ ├── openai_agents.py
│ ├── langchain_example.py
│ └── curl_test.sh
├── .github/workflows/
│ ├── ci.yml ← Lint + test (3.10-3.13) + Docker
│ └── publish.yml ← PyPI publishing on v* tags
├── pyproject.toml ← Package metadata (uv/pip install)
├── requirements.txt ← Pinned dependencies
├── Dockerfile ← Production container image
├── docker-compose.yml ← One-command deployment
├── Makefile ← Developer shortcuts
├── .pre-commit-config.yaml ← Ruff + pre-commit hooks
├── CHANGELOG.md
├── SECURITY.md
├── .env.example
└── README.mdTroubleshooting
"Unexpected non-whitespace character after JSON"
→ Something is writing to stdout. This server routes all logging to stderr. If you added custom print statements, use print(..., file=sys.stderr).
"Infoblox client not initialized"
→ INFOBLOX_API_KEY is missing or invalid. Check your .env file or environment variables.
"IP space 'prod' not found"
→ The space name doesn't match exactly. Use explore_network() to see available space names.
"DNS zone 'example.com' not found"
→ The zone doesn't exist in Infoblox. Use manage_dns_zone(action="list") to see available zones, or manage_dns_zone(action="create", fqdn="example.com") to create one.
Tools not appearing in Claude Desktop
→ Restart Claude Desktop after editing claude_desktop_config.json. Check the path to mcp_intent.py is absolute.
HTTP server not responding
→ Start with python mcp_intent.py --http. Test with: curl -X POST http://127.0.0.1:4005/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Dry run confusion
→ All destructive operations (delete, release, bulk triage) default to dry_run=True. They show what would happen without making changes. Set dry_run=False to execute.
Token overflow / response too large
→ Use limit parameters to reduce result sizes. The intent layer already truncates large results, but specific queries return less data.
Available Tools
26 toolsassess_security_postureARead-only
Assess overall DNS security posture: policies, named lists, category filters, compliance, and analytics. USE THIS for security audits and compliance reporting. For active threat investigation use investigate_threat(). For triage actions use triage_security_insight().
Returns: Security posture assessment with policy status, category filter coverage, compliance findings, and recommendations
Examples: - assess_security_posture() → full security assessment
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description doesn't need to repeat those. It adds context about the scope of the assessment (policies, named lists, etc.) and the return contents, which is useful but not deep behavioral disclosure. No additional constraints like pagination or permission requirements are mentioned, so a mid-score is appropriate.
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 packed: a one-line purpose, explicit usage guidance, alternative tool references, return value summary, and example. Every sentence earns its place with no redundancy 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 zero parameters, a read-only annotation, and a separate output schema, the description covers all necessary context: what the tool does, when to use it, what it returns, and how it differs from related tools. No gaps remain for the agent to operate effectively.
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. The description provides an example call with no arguments, clarifying that the tool takes no input. There is nothing more to explain beyond what the schema already shows (empty properties).
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 clearly states the tool assesses overall DNS security posture with specific areas (policies, named lists, category filters, compliance, analytics). It distinguishes from sibling tools like investigate_threat and triage_security_insight by explicitly naming them as alternatives.
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 instructs to use for security audits and compliance reporting, and provides direct alternatives for active threat investigation and triage actions. This gives clear when-to-use and when-not-to-use guidance, referencing sibling tools by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_api_healthARead-only
Verify Infoblox API connectivity for all three service clients (DDI, Insights, ATCFW). USE THIS to diagnose connection issues, check if API keys are valid, or verify the MCP server can reach Infoblox. For infrastructure health (HA groups, DNS zones, etc.) use check_infrastructure_health().
Returns: Health status for each API client with response times
Examples: - check_api_health() → shows which APIs are reachable and response latency
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the bar is lower. The description adds meaningful context by specifying the three service clients checked, the diagnostic purpose (API key validation, connectivity), and that response times are returned. No contradictions with annotations.
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 well-organized with clear sections (purpose, usage, returns, example). It is slightly repetitive in phrases like 'Verify connectivity' and 'verify the MCP server can reach Infoblox,' but overall it is appropriately sized and 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?
Given the tool's simplicity (no params, output schema exists, annotations cover safety), the description fully covers purpose, usage, and output. It is complete for an agent to select and invoke correctly, especially with the explicit alternative.
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 and schema coverage is 100% (empty schema), so the baseline is 4. The description adds relevant context about the scope (all three service clients) even though there are no parameters to explain.
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 verifies Infoblox API connectivity for three specific service clients (DDI, Insights, ATCFW). It explicitly distinguishes itself from the sibling check_infrastructure_health, making its purpose 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?
It provides explicit usage guidance: 'USE THIS to diagnose connection issues, check if API keys are valid, or verify the MCP server can reach Infoblox.' It also names the alternative tool for infrastructure health, giving clear when-to-use and when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_infrastructure_healthARead-only
Check the health of all DDI infrastructure components: HA groups, DHCP hosts, DNS zones, DNS views, and IP spaces. USE THIS for operational health monitoring and alerting. For capacity planning use get_ip_utilization(). For security health use assess_security_posture().
Returns: Health report with HA status, DHCP status, DNS status, DNS views, and recommendations
Examples: - check_infrastructure_health() → full health check of all DDI components
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true. The description adds specific context about the scope (which infrastructure components are covered) and the nature of the output (health report with statuses and recommendations), which supplements the annotations without contradiction.
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 efficiently organized: purpose statement first, clear usage callout, alternative named, return description, and an example. Every sentence adds value and the structure is scannable.
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 low complexity (no parameters, output schema available, read-only annotation), the description provides all necessary context: what it checks, return content, and use case. There is no missing information that would hinder correct tool selection or 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 tool has zero parameters and the input schema has 100% coverage. The baseline for zero parameters is 4 per the rubric. The example invocation confirms no arguments are needed, and no additional parameter explanation is necessary or possible.
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: 'Check the health of all DDI infrastructure components' and enumerates exact component types (HA groups, DHCP hosts, DNS zones, DNS views, IP spaces). It clearly distinguishes from sibling tools by noting alternatives for capacity and security.
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?
Explicit guidance is provided: 'USE THIS for operational health monitoring and alerting.' It also names alternatives for capacity planning (get_ip_utilization) and security health (assess_security_posture), covering both when to use and when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decommission_hostADestructive
Decommission a host: removes IPAM host, DNS records, and releases IP addresses. USE THIS to fully remove a host. For partial cleanup use manage_dns_record() or manage_ip_reservation().
IMPORTANT: Runs in dry_run mode by default — shows what WOULD be deleted without actually deleting. Set dry_run=False to execute the actual decommission.
Args: identifier: Hostname, FQDN, or IP address to decommission dry_run: If True (default), only shows what would be deleted. Set to False to actually delete.
Returns: List of resources that were (or would be) deleted
Examples: - decommission_host(identifier="web-prod-01") → shows what would be deleted - decommission_host(identifier="web-prod-01", dry_run=False) → actually deletes everything - decommission_host(identifier="10.20.3.50") → finds and decommissions host at this IP
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the destructiveHint annotation by explaining the dry_run default, what gets deleted (IPAM host, DNS records, IP addresses), and the return value (list of resources deleted). It also includes an explicit warning about setting dry_run=False, which is critical behavioral context for a destructive operation.
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 well-structured and front-loaded: the first sentence gives the core purpose, followed by usage direction, an important warning, parameter docs, return info, and examples. Every sentence adds value, and the examples clarify edge cases without being verbose.
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 destructive nature and the presence of an output schema, the description still provides complete context: it defines all parameters, explains return values, includes multiple examples, and notes the dry_run safety mechanism. It leaves no ambiguity about how to invoke the tool for either dry-run or actual decommission.
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 only lists 'identifier' and 'dry_run' with types, but the description adds meaning: identifier can be a hostname, FQDN, or IP address, and dry_run defaults to True with clear semantics. Since schema description coverage is 0%, the description fully compensates by defining each parameter's purpose and acceptable values.
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 action: 'Decommission a host: removes IPAM host, DNS records, and releases IP addresses.' This states the specific verb, resource, and scope, and distinguishes it from sibling tools by explicitly naming alternatives for partial cleanup (manage_dns_record, manage_ip_reservation).
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 guidance is explicit: 'USE THIS to fully remove a host. For partial cleanup use manage_dns_record() or manage_ip_reservation().' It also clearly explains the dry_run default behavior and how to execute the actual decommission, giving an agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_dnsARead-only
Diagnose DNS resolution problems for a domain: checks zone, records, and security policies. USE THIS when a domain isn't resolving or has DNS issues. For IP-level issues use diagnose_ip_conflict(). For infrastructure-wide health use check_infrastructure_health().
Args: domain: Domain name to diagnose (e.g., "web-prod-01.example.com" or "example.com") view: Optional DNS view name or ID. Required when a zone exists in multiple views (e.g., "default", "Azure.private-2") flush_cache: If True, flushes the DNS cache for the domain before diagnosing. Useful when DNS changes aren't propagating. ASK the user before flushing.
Returns: Diagnostic report with zone status, records found, and recommendations
Examples: - diagnose_dns(domain="app.example.com") → checks zone, A/AAAA/CNAME records, security - diagnose_dns(domain="app.example.com", view="default") → checks in specific view - diagnose_dns(domain="app.example.com", flush_cache=True) → flushes cache then diagnoses
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | ||
| domain | Yes | ||
| flush_cache | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the flush_cache behavior, which mutates DNS cache state, and instructs to ASK the user before flushing. It also notes when 'view' is required, adding contextual constraints not in annotations.
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 well-organized with sections for summary, usage, args, returns, and examples. Every sentence provides necessary information, and examples clarify usage without redundancy.
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 (3 params, one required) and presence of output schema, the description still summarizes the return report. It covers alternatives, parameters, side effects, and examples, making it fully self-contained 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 has 0% description coverage, but the description fully documents each parameter: domain with examples, view with requirement context, and flush_cache with usage and caution. This adds substantial meaning 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 states a specific action: diagnose DNS resolution problems, and specifies the scope (zone, records, security policies). It distinguishes from sibling tools by pointing to diagnose_ip_conflict for IP-level issues and check_infrastructure_health for infrastructure-wide health.
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 states when to use: 'USE THIS when a domain isn't resolving or has DNS issues.' It names alternatives for IP-level and infrastructure-wide issues, giving clear context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_ip_conflictARead-only
Check an IP address for conflicts: overlapping subnets, duplicate reservations, DHCP usage, and host associations. USE THIS when troubleshooting IP conflicts or verifying an IP is safe to use. For DNS-level issues use diagnose_dns(). For infrastructure-wide health use check_infrastructure_health().
Args: address: IP address to check (e.g., "10.20.3.50")
Returns: Conflict report with overlapping resources, DHCP lease status, host associations, and recommendations
Examples: - diagnose_ip_conflict(address="10.20.3.50") → checks for conflicts on this IP - diagnose_ip_conflict(address="192.168.1.1") → checks subnet membership and reservations
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds behavioral context beyond this, detailing exactly what is checked (overlapping subnets, duplicate reservations, DHCP usage, host associations) and what the return report contains. No contradictions with annotations are present.
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 well-structured with a clear purpose statement, usage guidance, argument definition, return summary, and examples. It is moderately detailed but every section serves a purpose; the examples are practical and avoid redundancy. It is not excessively wordy.
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 read-only diagnostic tool, the description covers all essential context: what it does, when to use it, alternatives, parameter format, and return value. The presence of an output schema reduces the need to enumerate return fields. The examples further anchor correct usage.
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 provides only a type for 'address' with no description (0% schema coverage). The description fully compensates by defining 'address' as 'IP address to check' and giving concrete examples ('10.20.3.50', '192.168.1.1'). This adds essential meaning for correct invocation.
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 specifies the tool's purpose: 'Check an IP address for conflicts' and enumerates the specific conflict types it covers (overlapping subnets, duplicate reservations, DHCP usage, host associations). This level of specificity distinguishes it from sibling tools like diagnose_dns and check_infrastructure_health.
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 states when to use the tool: 'USE THIS when troubleshooting IP conflicts or verifying an IP is safe to use.' It also provides clear alternatives: 'For DNS-level issues use diagnose_dns(). For infrastructure-wide health use check_infrastructure_health().' This gives the agent direct guidance on selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_networkARead-only
Browse the IP hierarchy tree (Spaces → Blocks → Subnets) with utilization data. USE THIS to navigate and drill into network structure. For executive dashboards use get_network_summary(). For keyword search use search_infrastructure().
Args: scope: Optional IP space name to focus on (e.g., "prod", "corp"). If not set, shows all spaces. depth: Level of detail — "summary" (counts only), "blocks" (include address blocks), or "full" (include subnets) limit: Max items per category (address blocks, subnets) per space. Default 500.
Returns: Hierarchical network view with utilization percentages
Examples: - explore_network() → overview of all IP spaces with counts - explore_network(scope="prod") → detailed view of the prod IP space - explore_network(depth="full") → complete hierarchy with all subnets
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | summary | |
| limit | No | ||
| scope | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and openWorldHint=true, so the description doesn't need to disclose safety. It adds context about returning a hierarchical view with utilization percentages, and clarifies that depth controls detail. Minor gap: it doesn't explicitly say whether the operation is safe or has side effects, but annotations cover 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 well-organized with clear sections (Args, Returns, Examples) and is appropriately sized for the tool's complexity. Every sentence adds value—no fluff or repetition of schema details. Examples are compact and illustrative.
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 moderate complexity (3 optional params, output schema), the description is complete: it explains the hierarchy, usage boundaries, parameter semantics, and return expectations. Sibling tools are distinguished, and examples show typical calls. No missing critical information.
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 carries full responsibility for explaining parameters. It does so effectively: scope is described as optional IP space name with examples ('prod', 'corp'), depth explains the three levels, and limit explains default and meaning. Examples illustrate usage combinations.
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's function: 'Browse the IP hierarchy tree (Spaces → Blocks → Subnets) with utilization data.' It uses a specific verb ('browse') and resource, and distinguishes itself from siblings by naming alternatives for other use cases, such as get_network_summary and search_infrastructure.
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?
Explicit guidance is provided: 'USE THIS to navigate and drill into network structure.' It also states when NOT to use it and points to alternatives: 'For executive dashboards use get_network_summary(). For keyword search use search_infrastructure().' This exceeds basic requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ip_utilizationARead-only
Get IP address utilization percentages for capacity planning. USE THIS to find overutilized subnets and plan expansions. For hierarchy browsing use explore_network(). For infrastructure health use check_infrastructure_health().
Args: scope: Optional IP space name to focus on. If not set, shows all.
Returns: Utilization report with percentages per space/block/subnet
Examples: - get_ip_utilization() → all spaces - get_ip_utilization(scope="production") → production space only
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds contextual detail about returning a utilization report with percentages per space/block/subnet and scope behavior. It does not contradict annotations and provides extra value beyond them, though it does not cover edge cases like invalid scope.
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 well-structured with sections for purpose, usage, arguments, returns, and examples. Every sentence contributes useful information without fluff or redundancy.
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 read-only tool with one optional parameter and an output schema available, the description covers purpose, usage, parameter meaning, return value characteristics, and sibling differentiation. It is sufficiently complete for an AI agent to select and invoke 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?
The schema has one parameter 'scope' with no description (0% coverage). The description fully compensates by explaining 'Optional IP space name to focus on. If not set, shows all' and provides concrete examples for both usage patterns.
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 'Get IP address utilization percentages for capacity planning' with a specific verb and resource. It also distinguishes itself from siblings by naming explore_network() and check_infrastructure_health() as alternatives.
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 says 'USE THIS to find overutilized subnets and plan expansions' and provides direct alternatives: 'For hierarchy browsing use explore_network(). For infrastructure health use check_infrastructure_health().' This gives clear when-to-use and 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.
get_network_summaryARead-only
Get an executive dashboard with counts and health across all DDI infrastructure. USE THIS for high-level overviews and reporting. For hierarchy browsing use explore_network(). For keyword search use search_infrastructure().
Args: scope: Optional IP space name to focus on. If not set, summarizes everything.
Returns: Summary with counts, utilization percentages, and health status
Examples: - get_network_summary() → full infrastructure overview - get_network_summary(scope="production") → production space only
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds useful context about the return type (counts, utilization, health) and optional scope behavior. No contradictions found.
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-structured: purpose, usage, args, returns, examples. Every sentence adds value with no filler or redundancy.
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 simple tool with one optional parameter and an output schema. The description covers purpose, scope semantics, return type, and examples comprehensively. No meaningful gaps remain.
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 lone parameter 'scope' is clearly defined: 'Optional IP space name to focus on. If not set, summarizes everything.' Examples demonstrate usage (e.g., scope='production'). This fully compensates for the 0% schema coverage.
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 ('executive dashboard') with clear scope ('all DDI infrastructure'). It explicitly distinguishes from siblings: 'For hierarchy browsing use explore_network(). For keyword search use search_infrastructure().'
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 provides explicit guidance: 'USE THIS for high-level overviews and reporting' and names alternatives for specific use cases (hierarchy browsing, keyword search). Examples further illustrate appropriate contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
investigate_threatARead-only
Investigate active security threats: aggregates SOC insights, indicators, affected assets, and timeline events. USE THIS for threat investigation and incident response. For policy compliance use assess_security_posture(). For triage actions use triage_security_insight().
Args: query: Optional search term or threat type (e.g., "malware", "phishing", "data_exfiltration") priority: Filter by priority level limit: Maximum insights to return (default: 20)
Returns: Aggregated threat intelligence with indicators, affected assets, events timeline, and recommendations
Examples: - investigate_threat() → all open security insights - investigate_threat(priority="critical") → critical threats only - investigate_threat(query="malware") → malware-related insights
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| priority | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, so the read-only nature is already conveyed. The description adds useful context about aggregation and return content (indicators, affected assets, timeline, recommendations). No behavioral contradictions exist. It doesn't mention rate limits or permissions, but those aren't expected for this kind of tool given the annotations.
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 well-structured with sections for purpose, usage guidance, args, returns, and examples. Every section adds value and none are redundant. It is appropriately sized for the tool's complexity.
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 output schema exists and annotations cover read-only behavior, the description is complete. It provides clear usage context, parameter semantics, and examples. It covers the main behavior (aggregating active security threats) and return content sufficiently.
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 0%, so the description fully carries parameter explanation. It defines query as an optional search term or threat type with examples ('malware', 'phishing'), priority as a filter by priority level, and limit as maximum insights with a default of 20. Examples further illustrate usage.
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's purpose: 'Investigate active security threats: aggregates SOC insights, indicators, affected assets, and timeline events.' It uses a specific verb and resource, and explicitly differentiates from siblings by referencing assess_security_posture for policy compliance and triage_security_insight for triage actions.
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?
Explicit usage guidance is provided: 'USE THIS for threat investigation and incident response. For policy compliance use assess_security_posture(). For triage actions use triage_security_insight().' This clearly states when to use this tool and direct alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_dhcpADestructive
Manage DHCP configuration: HA groups, option codes, hardware filters, option filters, hardware, DHCP servers, option groups/spaces, MAC address items, DHCP hosts, global config, and config profiles. USE THIS for DHCP-specific CRUD. For IP reservations use manage_ip_reservation(). For network topology use manage_network().
Args: resource_type: Type of DHCP resource to manage action: Operation to perform (bulk_create for mac_item; link/delink for config_profile) name: Resource name resource_id: Resource ID for get/update/delete mode: HA group mode (e.g., "active-active", "active-passive") — for ha_group create hosts: HA group hosts list — for ha_group create code: DHCP option code number — for option_code create option_type: Option code type (e.g., "string", "uint8") — for option_code create protocol: Protocol for hardware filters (e.g., "dhcpv4") — for hardware_filter create mac_address: MAC address — for hardware/mac_item create comment: Description items: List of MAC item dicts for bulk_create (each: {"mac": "AA:BB:CC:DD:EE:FF"}) object_id: Object ID for config_profile list/link/delink (e.g., subnet ID) tags: Resource tags dry_run: If True (default), delete shows resource only. Set False to execute.
Returns: DHCP operation result
Examples: - manage_dhcp(resource_type="ha_group", action="list") - manage_dhcp(resource_type="dhcp_server", action="list") - manage_dhcp(resource_type="option_group", action="create", name="my-group") - manage_dhcp(resource_type="mac_item", action="bulk_create", items=[{"mac": "AA:BB:CC:DD:EE:FF"}]) - manage_dhcp(resource_type="config_profile", action="link", resource_id="dhcp/config_profile/abc", object_id="ipam/subnet/xyz") - manage_dhcp(resource_type="dhcp_global", action="get") - manage_dhcp(resource_type="option_code", action="delete", resource_id="dhcp/option_code/123", dry_run=False)
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| mode | No | ||
| name | No | ||
| tags | No | ||
| hosts | No | ||
| items | No | ||
| action | Yes | ||
| comment | No | ||
| dry_run | No | ||
| protocol | No | ||
| object_id | No | ||
| mac_address | No | ||
| option_type | No | ||
| resource_id | No | ||
| resource_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true. The description adds valuable safety context by documenting the dry_run parameter ('If True (default), delete shows resource only. Set False to execute.'), a behavioral trait not present in annotations. It also clarifies special action assignments like 'bulk_create for mac_item' and 'link/delink for config_profile'. However, it could further disclose permission requirements or side effects of updates, but the dry-run disclosure substantially raises transparency beyond annotations.
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?
Despite its length, the description is well-structured into Args, Returns, and Examples. Each sentence adds information, with no filler. Front-loaded purpose and usage guidance make key information immediately accessible. The format is appropriate for a tool with 12 resource types and 15 parameters.
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, the description is remarkably complete: it covers all parameters, special constraints (dry_run, bulk_create/link/delink), includes extensive examples, and provides alternate tool guidance. The existence of an output schema reduces the need to describe return values in prose, and the description still notes 'Returns: DHCP operation result'.
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 carries the full burden. It provides semantics for all 15 parameters, linking each to the relevant resource type/action (e.g., 'mode: HA group mode (e.g., "active-active", "active-passive") — for ha_group create'). The examples further clarify parameter usage, making the tool usable without schema property 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 opens with 'Manage DHCP configuration' and enumerates 12 resource types, clearly distinguishing it from siblings by explicitly directing IP reservations to manage_ip_reservation() and network topology to manage_network(). The verb and resource scope are specific and 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?
Provides explicit usage guidance: 'USE THIS for DHCP-specific CRUD' and names two alternative tools for adjacent concerns. Examples illustrate typical calls across multiple resource types and actions, giving the agent clear context for when to choose this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_dhcp_leaseADestructive
Manage DHCP leases: list/search active leases, wipe leases, or resend DDNS updates. USE THIS for DHCP lease visibility and maintenance. For DHCP configuration use manage_dhcp().
IMPORTANT: "clear" permanently removes leases. Runs in dry_run mode by default for clear/resend_ddns. Set dry_run=False to actually execute destructive actions.
Args: action: Operation — list, get, clear (wipe lease), or resend_ddns address: IP address to filter/target mac_address: MAC address to filter (for list) hostname: Hostname to filter (for list) state: Lease state filter (e.g., "issued", "used") space: IP space name or ID (required for clear/resend_ddns to resolve address) resource_id: Lease resource ID for get dry_run: If True (default), clear/resend_ddns show what would happen. Set to False to execute. limit: Max results for list (default 100)
Returns: Lease operation result
Examples: - manage_dhcp_lease(action="list") → all active leases - manage_dhcp_lease(action="list", mac_address="AA:BB:CC:DD:EE:FF") - manage_dhcp_lease(action="get", resource_id="dhcp/lease/abc123") - manage_dhcp_lease(action="clear", address="10.0.0.50", space="prod") - manage_dhcp_lease(action="resend_ddns", address="10.0.0.50", space="prod")
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| space | No | ||
| state | No | ||
| action | Yes | ||
| address | No | ||
| dry_run | No | ||
| hostname | No | ||
| mac_address | No | ||
| resource_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already flag destructiveHint=true, the description adds crucial context: 'clear permanently removes leases' and 'Runs in dry_run mode by default for clear/resend_ddns. Set dry_run=False to actually execute destructive actions.' This informs the agent of the tool's safety default and the irreversible nature of clear, going well beyond the annotation.
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 well-structured with clear sections (overview, usage note, Args, Returns, Examples) and is front-loaded with purpose. It is somewhat longer than strictly necessary, but every sentence contributes useful information, and the examples justify the length.
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 (9 parameters, 4 action modes, destructive behavior), the description covers all parameter semantics, safety defaults, alternatives, and usage examples. The presence of an output schema means the return value is already structurally documented, so no further return explanation is needed. This is a complete and robust description.
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 0% description coverage for parameters, but the description explicitly defines every parameter (action, address, mac_address, hostname, state, space, resource_id, dry_run, limit). It adds meaning by explaining under what conditions each is required (e.g., 'space is required for clear/resend_ddns to resolve address') and provides concrete usage examples.
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 'Manage DHCP leases: list/search active leases, wipe leases, or resend DDNS updates', which clearly identifies the tool's resource (DHCP leases) and its operations. It also explicitly distinguishes from sibling manage_dhcp by stating 'For DHCP configuration use manage_dhcp()'. This makes the tool's purpose unmistakable and well differentiated.
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: 'USE THIS for DHCP lease visibility and maintenance. For DHCP configuration use manage_dhcp().' It also includes multiple examples for each action, clarifying when to use list, get, clear, and resend_ddns. The dry_run warning further explains safe usage for destructive actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_dns_recordADestructive
Update, delete, list, or get existing DNS records. Supports smart lookup by name+zone+type. USE THIS for record lifecycle after creation. For creating new records use provision_dns() (or call this with action="create" — it routes there automatically and explains why). For zone management use manage_dns_zone().
Args: action: Operation to perform on the record record_id: DNS record ID (optional — can look up by name+zone+type) zone: DNS zone FQDN for filtering/lookup view: Optional DNS view name or ID. Required when a zone exists in multiple views (e.g., "default", "Azure.private-2") record_type: Record type filter — "A", "AAAA", "CNAME", "MX", "TXT", "PTR", "SRV", "NS" name: Record name for lookup (e.g., "www" or "www.example.com") rdata: New rdata for update (e.g., {"address": "10.0.0.1"} for A record) ttl: New TTL for update comment: New comment for update dry_run: If True (default), delete shows record details only. Set False to execute. limit: Max records for list (default: 50)
Returns: Record operation result
Examples: - manage_dns_record(action="list", zone="example.com") → all records in zone - manage_dns_record(action="list", zone="example.com", record_type="A") → A records only - manage_dns_record(action="get", record_id="dns/record/abc123") - manage_dns_record(action="update", record_id="dns/record/abc123", rdata={"address": "10.0.0.2"}) - manage_dns_record(action="delete", name="old-host", zone="example.com", record_type="A", dry_run=False)
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | ||
| name | No | ||
| view | No | ||
| zone | No | ||
| limit | No | ||
| rdata | No | ||
| action | Yes | ||
| comment | No | ||
| dry_run | No | ||
| record_id | No | ||
| record_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations (destructiveHint=true) by disclosing the dry_run default (True) for delete ('delete shows record details only. Set False to execute'), which is critical safety information. It also transparently states that action='create' routes to provision_dns and 'explains why', adding behavioral context not present in annotations.
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 longer than minimal but well-structured: purpose, usage guidance, Args, Returns, and Examples. It front-loads the key purpose and usage rules. While it is verbose due to 11 parameters and 5 actions, every sentence serves a purpose without redundancy. A small deduction for length, but not for 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?
Given the tool's complexity (multiple actions, 11 params, smart lookup, dry-run safety), the description is exceptionally complete. It covers all parameters, gives concrete examples for list/get/update/delete, explains inter-tool routing, and includes the output schema expectation. With an output schema present, it does not need to detail return values. 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?
With 0% schema description coverage, the description carries the full burden of explaining parameters. The 'Args:' section defines every parameter, including types, defaults, and purpose, plus an example for rdata ('{"address": "10.0.0.1"}'). This fully compensates for the bare input schema and provides more context than a typical 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 and specifically states the tool's function: 'Update, delete, list, or get existing DNS records.' It also distinguishes from sibling tools by explicitly naming `provision_dns()` for creation and `manage_dns_zone()` for zone management. This leaves no ambiguity about what this 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?
Usage guidance is explicit: 'USE THIS for record lifecycle after creation' and alternatives are named directly ('For creating new records use provision_dns()', 'For zone management use manage_dns_zone()'). It even explains the fallthrough behavior for action='create' and provides multiple actionable examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_dnssecADestructive
Manage DNSSEC key lifecycle for authoritative zones: sign, unsign, check status, export trust anchors, delete keys, and import keysets. For zone management use manage_dns_zone(). For RPZ rules use manage_rpz_policies().
Args: action: DNSSEC operation to perform zone_id: Single zone ID for status/delete_key/import_keyset operations zone_ids: List of zone IDs for sign/unsign/export_trust_anchors operations key_id: DNSSEC key ID for delete_key keyset: Keyset dict for import_keyset
Returns: DNSSEC operation result
Examples: - manage_dnssec(action="sign", zone_ids=["dns/auth_zone/abc", "dns/auth_zone/def"]) - manage_dnssec(action="unsign", zone_ids=["dns/auth_zone/abc"]) - manage_dnssec(action="status", zone_id="dns/auth_zone/abc") - manage_dnssec(action="export_trust_anchors", zone_ids=["dns/auth_zone/abc"]) - manage_dnssec(action="delete_key", zone_id="dns/auth_zone/abc", key_id="dns/auth_zone/abc/dnssec_key/k123") - manage_dnssec(action="import_keyset", zone_id="dns/auth_zone/abc", keyset={"keys": [...]})
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| key_id | No | ||
| keyset | No | ||
| zone_id | No | ||
| zone_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include destructiveHint=true and idempotentHint=false, so the safety profile is known. The description adds the list of operations and parameter scoping, but it does not elaborate on side effects (e.g., unsign removes DNSSEC signatures, delete_key is irreversible) or the exact return format beyond 'DNSSEC operation result'. This is adequate 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 well-organized with a concise summary, explicit alternatives, an Args list, Returns line, and representative examples. Every sentence earns its place; there is no fluff or redundancy. It is compact yet comprehensive.
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 5 parameters, 6 actions, and an output schema present, the description covers the key aspects: it lists all operations, documents each parameter, provides usage examples, and clarifies tool boundaries. The lack of detailed keyset structure or per-action side effects is a minor gap, but overall it is nearly complete for a tool of this 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?
Schema description coverage is 0%, so the description must compensate. It does so with an Args section that explains each parameter and maps zone_id vs zone_ids to specific actions. Examples further clarify usage, though the keyset dict is only shown as {'keys': [...]}, leaving some structure implicit. Overall, it adds substantial value beyond the bare 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 the tool's purpose: 'Manage DNSSEC key lifecycle for authoritative zones' and enumerates the specific operations (sign, unsign, status, export trust anchors, delete keys, import keysets). It also differentiates from siblings by explicitly mentioning manage_dns_zone and manage_rpz_policies. This is a specific verb+resource+scope formulation.
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 says when to use alternative tools: 'For zone management use manage_dns_zone(). For RPZ rules use manage_rpz_policies().' This provides clear when-not guidance. Additionally, the Args and Examples sections illustrate how to use each action, reinforcing when to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_dns_zoneADestructive
Manage DNS zones, views, RPZ, delegations, ACLs, NSGs, servers, hosts, services, and global config. USE THIS for zone lifecycle operations. For DNS record CRUD use manage_dns_record(). For record creation use provision_dns().
Quick routing guide:
Authoritative zones: resource_type="auth_zone" (default) → create, list, get, delete, sign, unsign, dnssec_status, copy
Forward zones: resource_type="forward_zone" → create, list, copy
DNS views: resource_type="dns_view" → create, list, get, update, delete
RPZ (Response Policy Zones): resource_type="rpz" → create, list, get, update, delete, reorder
Delegations: resource_type="delegation" → create, list, get, update, delete
DNS ACLs: resource_type="dns_acl" → create, list, get, update, delete
Auth NSGs: resource_type="auth_nsg" → create, list, get, update, delete
Forward NSGs: resource_type="forward_nsg" → create, list, get, update, delete
DNS Servers: resource_type="dns_server" → create, list, get, update, delete
DNS Hosts: resource_type="dns_host" → list, get, update
DNS Services: resource_type="dns_service" → list, get
DNS Global: resource_type="dns_global" → get, update
IMPORTANT: ALL mutating actions (create, update, delete) default to dry_run=True and must be explicitly set to dry_run=False to execute. sign/unsign/dnssec_status only work with auth_zone. reorder only works with rpz.
View scoping: when view is supplied on list/get/delete, it MUST be the exact DNS view name configured in Infoblox (not the literal string "default" unless the customer named a view that). Use manage_dns_zone(action="list", resource_type="dns_view") to see the actual view names first. UUIDs (dns/view/...) are also accepted.
Args: action: Operation to perform resource_type: DNS resource type to manage fqdn: Zone FQDN for create/delete (e.g., "example.com") name: Name for dns_view/acl/nsg/server create primary_type: For auth/rpz zones — "cloud" or "external" view: DNS view name (optional) target_view: Target view for copy action forward_to: List of forwarder IPs for forward zones delegation_servers: List of delegation server objects for delegation create zone_ids: List of zone IDs for sign/unsign/reorder operations disabled: Set zone disabled state (for update) comment: Description resource_id: Resource ID for get/update/delete/dnssec_status/copy tags: Resource tags dry_run: If True (default), delete shows record count only. Set False to execute.
Returns: Zone operation result
Examples: - manage_dns_zone(action="list") → all authoritative zones - manage_dns_zone(action="list", resource_type="dns_acl") → all DNS ACLs - manage_dns_zone(action="create", resource_type="dns_acl", name="internal-acl") - manage_dns_zone(action="create", resource_type="auth_nsg", name="primary-nsg") - manage_dns_zone(action="copy", resource_type="auth_zone", resource_id="dns/auth_zone/abc", target_view="external") - manage_dns_zone(action="get", resource_type="dns_global") - manage_dns_zone(action="list", resource_type="dns_service") → all DNS services - manage_dns_zone(action="sign", resource_type="auth_zone", zone_ids=["dns/auth_zone/abc"]) - manage_dns_zone(action="reorder", resource_type="rpz", zone_ids=["id1", "id2"]) - manage_dns_zone(action="delete", fqdn="old.example.com", dry_run=False)
| Name | Required | Description | Default |
|---|---|---|---|
| fqdn | No | ||
| name | No | ||
| tags | No | ||
| view | No | ||
| action | Yes | ||
| comment | No | ||
| dry_run | No | ||
| disabled | No | ||
| zone_ids | No | ||
| forward_to | No | ||
| resource_id | No | ||
| target_view | No | ||
| primary_type | No | ||
| resource_type | No | auth_zone | |
| delegation_servers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds critical behavioral context beyond the annotations: dry_run defaults to True for mutating actions, sign/unsign/dnssec_status restricted to auth_zone, reorder restricted to rpz, and the view scoping requirement with a recommendation to list view names first. No contradiction with the destructiveHint annotation; the dry_run safety is a valuable complement.
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 exceptionally well-structured: a purpose statement, routing guide, important notes, args, and examples. Every section provides high-value, non-redundant information. The front-loaded sibling differentiation and routing table make it easy 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?
For a tool with 15 parameters and 12 resource types, the description is remarkably complete. It covers action/resource_type matrices, dry-run safety, view scoping nuances, and provides 11 examples. Since an output schema exists, the terse 'Returns: Zone operation result' is acceptable—return format is documented 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 description coverage is 0%, so the description carries the full burden—and it succeeds. The Args section explains all 15 parameters with contextual meanings (e.g., 'primary_type: For auth/rpz zones — cloud or external', 'zone_ids: List of zone IDs for sign/unsign/reorder operations'). Examples further demonstrate parameter usage for different resource types.
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 manages DNS zones and related resources, and explicitly distinguishes it from siblings: 'USE THIS for zone lifecycle operations. For DNS record CRUD use manage_dns_record(). For record creation use provision_dns().' The broad resource list is anchored by a specific directive.
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 an extensive quick routing guide mapping each resource_type to supported actions, explicitly names alternative tools, and gives operational caveats like dry_run behavior and view scoping. This goes far beyond minimal guidance and gives concrete when-to-use and when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_dohADestructive
Manage DNS-over-HTTPS (DoH) FQDNs, Point-of-Presence regions, threat feeds, threat indicators, and application/block approval lists.
Args: action: Operation to perform fqdn: DoH FQDN to create (for create_doh_fqdn) data: Raw payload dict for create_doh_fqdn or create_threat_indicator updates: Update payload for update_app_approvals / update_block_approvals
Returns: Operation result
Examples: - manage_doh(action="list_pop_regions") → list all PoP regions - manage_doh(action="create_doh_fqdn", fqdn="doh.example.com") → register DoH FQDN - manage_doh(action="list_threat_feeds") → list available threat feeds - manage_doh(action="create_threat_indicator", data={"type": "ip", "indicator": "1.2.3.4"}) - manage_doh(action="list_app_approvals") → list application approvals - manage_doh(action="update_app_approvals", updates={"approved": [...]}) - manage_doh(action="list_block_approvals") - manage_doh(action="update_block_approvals", updates={"blocked": [...]})
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| fqdn | No | ||
| action | Yes | ||
| updates | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and idempotentHint=false. The description adds some context by showing create/update/list operations in examples, which align with the destructive hint. However, it does not disclose specific side effects, permissions, or what gets modified beyond the action names.
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 well-organized with an overview sentence, Args, Returns, and Examples. The examples are numerous but each adds value by covering a distinct action. It is somewhat long, but the structure keeps it scannable and the content is purposeful.
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 (8 actions, 4 params, output schema present), the description covers all actions with examples and parameter mappings. It does not explicitly explain mutual exclusivity of params or return value details, but the output schema and examples mitigate this. Overall, a solid baseline for an action-dispatching tool.
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?
With 0% schema description coverage, the description compensates by explaining each parameter's role: action as operation selector, fqdn for create_doh_fqdn, data for create_doh_fqdn/create_threat_indicator, and updates for approval updates. This goes well beyond the raw schema and gives actionable mapping to specific actions.
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 manages DoH FQDNs, PoP regions, threat feeds/indicators, and approval lists, which distinguishes it from sibling network/DNS tools. The verb 'Manage' is broad, but the enumerated resources and examples give concrete 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 examples that imply when to use each action (e.g., 'list_pop_regions', 'create_doh_fqdn'), but it does not explicitly state when to prefer this tool over alternatives or when not to use it. Usage guidance is implied through the action list, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_dtcADestructive
Manage DNS Traffic Control (DTC/GSLB): LBDNs, pools, servers, and policies. USE THIS for global server load balancing and traffic steering. For DNS zones use manage_dns_zone(). For DNS records use manage_dns_record().
IMPORTANT: Delete runs in dry_run mode by default. LBDN is the primary resource; pools, servers, and policies are supporting configuration.
Args: resource_type: Type of DTC resource to manage action: Operation to perform name: Resource name (for create/update) resource_id: Resource ID for get/update/delete view: DNS view ID (for LBDN create) dtc_policy: DTC policy ID (for LBDN create) comment: Description dry_run: If True (default), delete shows resource only. Set False to execute.
Returns: DTC operation result
Examples: - manage_dtc(resource_type="lbdn", action="list") → all LBDNs - manage_dtc(resource_type="lbdn", action="create", name="app.example.com", view="dns/view/1", dtc_policy="dtc/policy/1") - manage_dtc(resource_type="pool", action="list") → all DTC pools - manage_dtc(resource_type="server", action="list") → all DTC servers - manage_dtc(resource_type="policy", action="list") → all DTC policies
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| view | No | ||
| action | Yes | ||
| comment | No | ||
| dry_run | No | ||
| dtc_policy | No | ||
| resource_id | No | ||
| resource_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, but the description adds essential context: 'Delete runs in dry_run mode by default' and explains that LBDN is the primary resource with pools/servers/policies as supporting configuration. This goes beyond annotations, though it stops short of detailing dependency effects or auth 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 well-structured: clear purpose, usage guidance, a prominent dry-run warning, parameter list, returns, and examples. Every section earns its place, is front-loaded, and avoids fluff.
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 (4 resource types, 5 actions, 8 params) and the presence of an output schema, the description covers core aspects well with examples for list and LBDN create. However, it lacks a matrix of valid resource_type/action combinations and deeper dependency semantics (e.g., whether pools must be linked to an LBDN), which an agent might need 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?
Despite 0% schema description coverage signal, the Args section adds meaning: 'name: Resource name (for create/update)', 'resource_id: Resource ID for get/update/delete', and 'view: DNS view ID (for LBDN create)' clarify parameter roles and conditional usage. It compensates reasonably, though some descriptions remain generic ('Type of DTC resource to manage').
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 'Manage DNS Traffic Control (DTC/GSLB): LBDNs, pools, servers, and policies,' which clearly states the verb and resource scope. It explicitly distinguishes from sibling tools by directing users to manage_dns_zone() and manage_dns_record() for other DNS tasks, making the purpose 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?
It explicitly says 'USE THIS for global server load balancing and traffic steering' and provides clear alternatives: 'For DNS zones use manage_dns_zone(). For DNS records use manage_dns_record().' It also flags the dry-run default for delete, guiding safe usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_federationADestructive
Manage federated IPAM: realms, blocks, delegations, pools, overlapping blocks, reserved blocks, and forward delegations. USE THIS for federated/multi-site IPAM operations. For local IPAM use manage_network(). For IP reservations use manage_ip_reservation().
Args: resource_type: Type of federation resource to manage action: Operation to perform ("allocate_next" only for blocks) name: Resource name (for realms, pools) resource_id: Resource ID for get/update/delete address: CIDR address for blocks/delegations realm: Federated realm name or ID cidr: CIDR prefix length for allocate_next delegated_to: Delegation target identifier comment: Description dry_run: If True (default), delete shows resource only. Set False to execute.
Returns: Federation operation result
Examples: - manage_federation(resource_type="realm", action="list") - manage_federation(resource_type="realm", action="create", name="region-us-east") - manage_federation(resource_type="block", action="create", address="10.0.0.0/8", realm="region-us-east") - manage_federation(resource_type="block", action="allocate_next", resource_id="federation/block/abc", cidr=24) - manage_federation(resource_type="delegation", action="create", address="10.1.0.0/16", realm="us-east", delegated_to="team-a")
| Name | Required | Description | Default |
|---|---|---|---|
| cidr | No | ||
| name | No | ||
| realm | No | ||
| action | Yes | ||
| address | No | ||
| comment | No | ||
| dry_run | No | ||
| resource_id | No | ||
| delegated_to | No | ||
| resource_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, and the description adds crucial context by explaining the dry_run parameter defaults to True and that delete only shows the resource unless set to False. It also notes that allocate_next is restricted to blocks. While it doesn't describe every mutation detail, it covers the most salient behavioral aspects beyond what annotations provide.
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 well-structured with an intro, usage guidance, an Args list, Returns, and Examples. Every line serves a purpose, and the parameter list is compact yet informative. The examples are practical and demonstrate correct invocation. The length is justified given the tool's complexity.
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 all essential aspects: what the tool does, when to use it, what each parameter means, and concrete examples. It even clarifies the default behavior of dry_run. Since an output schema exists, the brief 'Returns: Federation operation result' is sufficient. This description is complete for an agent to correctly select and invoke the tool.
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?
Despite 0% schema description coverage, the description manually documents all 10 parameters with clarifying context. It explains the role of each parameter (e.g., 'cidr: CIDR prefix length for allocate_next', 'address: CIDR address for blocks/delegations') and clarifies constraints like 'allocate_next only for blocks'. This fully compensates for the lack of schema 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 clearly states it manages federated IPAM and enumerates the specific resource types (realms, blocks, delegations, pools, etc.). It also explicitly differentiates itself from sibling tools by saying 'USE THIS for federated/multi-site IPAM operations' and pointing to manage_network() for local IPAM and manage_ip_reservation() for reservations.
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 explicit when-to-use guidance and names alternatives: 'USE THIS for federated/multi-site IPAM operations. For local IPAM use manage_network(). For IP reservations use manage_ip_reservation().' The included examples further illustrate common usage patterns, leaving no ambiguity about when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_ip_reservationADestructive
Reserve, release, list, get, or update fixed IP addresses and DHCP static leases. USE THIS for IP reservation CRUD. For network topology use manage_network(). For IP conflicts use diagnose_ip_conflict().
IMPORTANT: Release runs in dry_run mode by default — shows host associations before releasing.
Args: action: Operation to perform on IP reservations address: IP address to reserve/release (e.g., "10.20.3.50") space: IP space name or ID (required for reserve) mac: MAC address to bind to reservation hostname: Hostname for the reservation comment: Description resource_id: Fixed address resource ID for get/update/release dry_run: If True (default), release shows associations only. Set False to execute.
Returns: Reservation operation result
Examples: - manage_ip_reservation(action="reserve", address="10.20.3.50", space="prod", mac="AA:BB:CC:DD:EE:FF") - manage_ip_reservation(action="list", space="prod") → all reservations in space - manage_ip_reservation(action="release", address="10.20.3.50", dry_run=False) - manage_ip_reservation(action="update", resource_id="ipam/fixed_address/abc", comment="Updated")
| Name | Required | Description | Default |
|---|---|---|---|
| mac | No | ||
| space | No | ||
| action | Yes | ||
| address | No | ||
| comment | No | ||
| dry_run | No | ||
| hostname | No | ||
| resource_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark destructiveHint=true, and the description adds a crucial safety detail: 'Release runs in dry_run mode by default — shows host associations before releasing.' This goes beyond the annotation without contradicting it. However, it does not elaborate on other potential side effects (e.g., permanent deletion on release with dry_run=False), so it's not a full 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?
The description is logically organized into summary, explicit usage note, Args, Returns, and Examples. It is a bit lengthy but every section serves a purpose, and the important dry_run warning is prominently placed. Minor redundancy like 'Reservation operation result' could be trimmed, but it's well structured.
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 (8 params, 5 actions, output schema present), the description covers purpose, when-to-use, parameter semantics, safety behavior, and multiple examples. Output schema exists, so return details are unnecessary. This is a complete, actionable description for an AI 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 descriptions are absent (0% coverage), so the description carries the full burden. It defines every parameter in the Args section (action, address, space, mac, hostname, comment, resource_id, dry_run), notes requirements (e.g., 'space required for reserve'), and illustrates usage with concrete examples. This fully compensates for the schema gap.
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 'Reserve, release, list, get, or update fixed IP addresses and DHCP static leases,' which is a specific verb+resource pairing. It further orients by saying 'USE THIS for IP reservation CRUD,' explicitly distinguishing from related sibling 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 provides explicit when-to-use guidance: 'USE THIS for IP reservation CRUD. For network topology use manage_network(). For IP conflicts use diagnose_ip_conflict().' It also warns about the default dry_run behavior for release, which is essential usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_networkADestructive
Manage IPAM network resources: create, update, delete, get, list, and allocate next-available subnets/blocks. USE THIS for IPAM CRUD operations. For IP reservations use manage_ip_reservation(). For utilization use get_ip_utilization().
IMPORTANT: Delete runs in dry_run mode by default — shows impact without deleting. next_available_subnet and next_available_address_block require resource_type="address_block" + resource_id + cidr.
Args: resource_type: Type of IPAM network resource to manage action: Operation to perform name: Resource name (for create or lookup) address: CIDR notation for subnets/blocks (e.g., "10.20.0.0/16"), or IP for ranges space: IP space name or ID (required for create) start: Start IP for ranges end: End IP for ranges resource_id: Resource ID for get/update/delete/next_available_* cidr: CIDR prefix length for next_available_subnet/next_available_address_block (e.g., 24) count: Number of resources to allocate (default 1) for next_available_* actions comment: Description tags: Optional tags dict dry_run: If True (default), delete shows impact only. Set False to execute.
Returns: Operation result with resource details
Examples: - manage_network(resource_type="subnet", action="create", address="10.20.3.0/24", space="prod", comment="Web servers") - manage_network(resource_type="subnet", action="get", resource_id="ipam/subnet/abc123") - manage_network(resource_type="range", action="create", start="10.20.3.100", end="10.20.3.200", space="prod") - manage_network(resource_type="address_block", action="delete", resource_id="ipam/address_block/xyz", dry_run=False) - manage_network(resource_type="address_block", action="next_available_subnet", resource_id="ipam/address_block/xyz", cidr=24) - manage_network(resource_type="address_block", action="next_available_address_block", resource_id="ipam/address_block/xyz", cidr=20)
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| cidr | No | ||
| name | No | ||
| tags | No | ||
| count | No | ||
| space | No | ||
| start | No | ||
| action | Yes | ||
| address | No | ||
| comment | No | ||
| dry_run | No | ||
| resource_id | No | ||
| resource_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only provide destructiveHint and idempotentHint. The description adds valuable behavioral context: delete defaults to dry_run, and next_available_* actions require specific resource_type and params. No contradiction with annotations, though it doesn't cover permission requirements 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?
The description is organized with a summary, usage notes, parameter list, return note, and examples. Each section serves a purpose; the length is justified by the tool's complexity and the lack of schema descriptions.
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?
Covers all 7 actions, explains key constraints (dry_run, required params for next_available), and provides 6 examples across different resource types and actions. The output schema is noted, so return details are not necessary. It is complete for such a versatile tool.
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 has 0% description coverage, so the description must compensate. It explains every parameter (resource_type, action, name, address, space, start, end, resource_id, cidr, count, comment, tags, dry_run) in plain language and includes multiple examples demonstrating usage.
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 starts with 'Manage IPAM network resources: create, update, delete, get, list, and allocate next-available subnets/blocks' — a clear verb+resource statement. It also distinguishes from siblings by naming manage_ip_reservation() and get_ip_utilization() as alternatives.
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 says 'USE THIS for IPAM CRUD operations' and directs to alternatives for reservations and utilization. Also highlights the dry_run default and the required parameters for next_available_* actions, giving clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_rpz_policiesADestructive
Manage RPZ (Response Policy Zone) rules — the individual DNS override entries within an RPZ zone. For RPZ zone lifecycle (create/delete the zone itself) use manage_dns_zone(resource_type='rpz').
Args: action: Operation to perform zone: RPZ zone ID (required for create and list with zone filter) name: Rule name / trigger FQDN (required for create) resource_id: Rule ID for get/update/delete rdata: Rule response data dict (required for create, e.g. {"type": "CNAME", "cname": "."}) comment: Description disabled: Disable/enable rule (for update) dry_run: If True (default), delete shows rule only. Set False to execute.
Returns: RPZ rule operation result
Examples: - manage_rpz_policies(action="list") → all RPZ rules - manage_rpz_policies(action="list", zone="dns/rpz_zone/abc") → rules in a zone - manage_rpz_policies(action="get", resource_id="dns/rpz_rule/xyz") - manage_rpz_policies(action="create", zone="dns/rpz_zone/abc", name="bad.example.com", rdata={"type": "CNAME", "cname": "."}) - manage_rpz_policies(action="update", resource_id="dns/rpz_rule/xyz", disabled=True) - manage_rpz_policies(action="delete", resource_id="dns/rpz_rule/xyz", dry_run=False)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| zone | No | ||
| rdata | No | ||
| action | Yes | ||
| comment | No | ||
| dry_run | No | ||
| disabled | No | ||
| resource_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=false), the description explains the dry_run parameter, revealing that delete is non-destructive by default and requires explicit opt-in to execute. This is valuable behavioral context not evident from annotations alone. No contradiction with annotations.
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 well-structured with a concise purpose sentence followed by Args, Returns, and Examples. Each section provides necessary information without fluff, and the examples are particularly useful. The length is appropriate given the tool's complexity.
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 all actions, parameters, and even provides a fallback to manage_dns_zone for zone lifecycle. With an output schema present, the vague Returns line is acceptable. The tool is fully contextualized within its sibling set and usage scenarios.
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 has no parameter descriptions (0% coverage), but the description's Args section compensates fully by explaining every parameter, including required conditions and an example rdata structure. This adds significant meaning beyond the raw 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 the tool manages RPZ rules, defined as the individual DNS override entries within an RPZ zone. It also distinguishes from manage_dns_zone by explicitly directing zone lifecycle operations elsewhere, making the purpose 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 explicitly states when to use this tool instead of manage_dns_zone for RPZ zone lifecycle. The examples also illustrate various actions (list, get, create, update, delete) and parameter combinations, providing clear usage context. The dry_run guidance for delete adds important when-to-use detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_security_policyADestructive
Manage DNS security resources: policies (read-only), named lists, application filters, internal domains, access codes, and category filters. USE THIS for security policy CRUD. For posture assessment use assess_security_posture(). For threat investigation use investigate_threat().
NOTE: Security policies are read-only via API (list/get only). Named lists support full CRUD + partial item updates. Category filters use full replace (PUT) for updates — both name and categories are required.
Args: resource_type: Type of security resource to manage action: Operation to perform. "add_items" and "remove_items" are for named_list only — they add/remove domains from an existing list without replacing the entire list. name: Resource name resource_id: Resource ID for get/update/delete/add_items/remove_items items: List of domains/IPs for named lists or internal domain lists. For "add_items": items to add. For "remove_items": items to remove. categories: List of content category names — for category_filter create/update description: Description text list_type: Named list type (e.g., "custom_list") — for named_list create criteria: Application filter criteria — for app_filter create activation: Access code activation date (ISO 8601) — for access_code create expiration: Access code expiration date (ISO 8601) — for access_code create rules: Access code rules — for access_code create dry_run: If True (default), delete shows resource only. Set False to execute.
Returns: Security resource operation result
Examples: - manage_security_policy(resource_type="policy", action="list") → all security policies - manage_security_policy(resource_type="named_list", action="list") - manage_security_policy(resource_type="named_list", action="create", name="block-list", list_type="custom_list", items=["bad.com"]) - manage_security_policy(resource_type="named_list", action="update", resource_id="...", items=["bad.com", "evil.com"]) - manage_security_policy(resource_type="named_list", action="add_items", resource_id="...", items=["new-bad.com"]) - manage_security_policy(resource_type="named_list", action="remove_items", resource_id="...", items=["old-entry.com"]) - manage_security_policy(resource_type="category_filter", action="list") → all category filters - manage_security_policy(resource_type="category_filter", action="create", name="block-adult", categories=["Adult Content"]) - manage_security_policy(resource_type="category_filter", action="update", resource_id="123", name="block-adult", categories=["Adult Content", "Malware"]) - manage_security_policy(resource_type="internal_domains", action="create", name="corp-domains", items=["corp.local"])
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| items | No | ||
| rules | No | ||
| action | Yes | ||
| dry_run | No | ||
| criteria | No | ||
| list_type | No | ||
| activation | No | ||
| categories | No | ||
| expiration | No | ||
| description | No | ||
| resource_id | No | ||
| resource_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond destructiveHint, the description discloses the dry_run default for delete, read-only policy access, named_list add/remove semantics (without full replacement), and category filter full-replace behavior. These details are crucial for safe invocation and are not present in annotations.
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 well-structured with clear sections (overview, usage notes, args, returns, examples). Every sentence adds operational value; the examples illustrate complex combinations without redundancy.
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 (8 resource types, 7 actions, 13 parameters), the description comprehensively covers all resource types, action constraints, parameter semantics, and dry_run behavior. It also points to sibling tools for adjacent use cases, making selection and invocation unambiguous.
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?
All 13 parameters are meaningfully explained in the Args section, including action-specific meanings (e.g., items for add_items vs remove_items) and dry_run default. Since schema description coverage is 0%, the description fully compensates and provides essential context.
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 it 'Manage DNS security resources' and enumerates specific resource types (policies, named lists, application filters, etc.). It also distinguishes from siblings by explicitly directing posture assessment and threat investigation to other 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 says 'USE THIS for security policy CRUD' and names alternatives: assess_security_posture and investigate_threat. It also clarifies when not to use it (e.g., policies are read-only) and specific constraints for category filters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
provision_dnsA
Create a new DNS record with automatic zone discovery and validation. USE THIS to create records. For update/delete/list use manage_dns_record().
IMPORTANT: Runs in dry_run mode by default — shows what WOULD be created without actually creating. Set dry_run=False to execute the actual DNS record creation.
Args: name: Record name (e.g., "www" for www.example.com, or full FQDN "www.example.com") record_type: DNS record type value: Record value — IP for A/AAAA, domain for CNAME/MX/PTR/NS, text for TXT zone: DNS zone name (e.g., "example.com"). If not provided, extracted from the name. view: Optional DNS view name or ID. Required when a zone exists in multiple views (e.g., "default", "Azure.private-2") ttl: Time to live in seconds (optional) dry_run: If True (default), only shows what would be created. Set to False to actually create. comment: Optional description
Returns: Created DNS record details
Examples: - provision_dns(name="www", record_type="A", value="10.20.3.50", zone="example.com") → DRY RUN - provision_dns(name="www", record_type="A", value="10.20.3.50", zone="example.com", dry_run=False) - provision_dns(name="app.example.com", record_type="CNAME", value="lb.example.com", dry_run=False)
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | ||
| name | Yes | ||
| view | No | ||
| zone | No | ||
| value | Yes | ||
| comment | No | ||
| dry_run | No | ||
| record_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits beyond annotations: default dry_run mode, automatic zone discovery, view requirement, and value format expectations for different record types. The description clearly states that setting dry_run=False executes actual creation, which aligns with destructiveHint=false since creation isn't destructive.
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?
Although detailed, the description is well-structured with sections for usage, args, returns, and examples. Every sentence adds value, and the examples clarify usage without redundancy.
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 (8 parameters, enum, output schema), the description covers purpose, usage vs alternatives, parameter semantics, dry_run behavior, view caveat, return type, and examples. It is complete even without relying on the output schema for return 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?
With 0% schema_description_coverage, the description fully compensates by explaining every parameter: name, record_type, value, zone, view, ttl, dry_run, and comment. It even provides per-record-type value formats and illustrative examples: 'IP for A/AAAA, domain for CNAME/MX/PTR/NS, text for TXT.'
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 'Create a new DNS record with automatic zone discovery and validation,' clearly stating the verb and resource. It also explicitly distinguishes from sibling tools: 'For update/delete/list use manage_dns_record().'
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 explicit usage guidance: 'USE THIS to create records. For update/delete/list use manage_dns_record().' It also states prerequisites like 'Required when a zone exists in multiple views' and examples showing dry_run behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
provision_hostA
Provision a complete host in one step: creates IPAM host + IP + optional DNS A/PTR records. USE THIS when adding a new host to the network. For DNS-only changes use provision_dns(). To remove a host use decommission_host().
IMPORTANT: Runs in dry_run mode by default — shows what WOULD be created without actually creating. Set dry_run=False to execute the actual provisioning.
IMPORTANT: When a zone is provided, ASK the user whether they want auto_dns=True (recommended, lets the API create DNS records atomically with the host) or auto_dns=False (creates DNS A/PTR records as separate steps after host creation, giving more control but less atomicity).
Args: hostname: Host name (e.g., "web-prod-01"). If zone is provided, will be used as FQDN: hostname.zone space: IP space name or ID where the host should be created (e.g., "prod", "corp", or full resource ID) ip: Optional specific IP address. If not provided, auto-assigns the next available IP from the subnet. zone: Optional DNS zone name for creating A/PTR records (e.g., "prod.example.com") view: Optional DNS view name or ID. Required when a zone exists in multiple views (e.g., "default", "Azure.private-2") subnet: Optional subnet address (CIDR) or ID for auto-IP assignment (e.g., "10.10.20.0/24"). Required when multiple subnets exist in the space and no IP is specified. auto_dns: If True (default), DNS records (A + PTR) are auto-generated atomically by the API during host creation — this matches the "Auto-generate DNS records" option in the UI. If False, DNS A and PTR records are created as separate API calls after host creation. dry_run: If True (default), only shows what would be created. Set to False to actually provision. comment: Optional description for the host
Returns: Complete provisioning result with host, IP, and DNS record details
Examples: - provision_host(hostname="web-01", space="prod", ip="10.20.3.50", zone="prod.example.com") → DRY RUN - provision_host(hostname="web-01", space="prod", ip="10.20.3.50", zone="prod.example.com", dry_run=False) - provision_host(hostname="db-replica-02", space="corp", subnet="10.10.20.0/24", dry_run=False)
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | ||
| view | No | ||
| zone | No | ||
| space | Yes | ||
| subnet | No | ||
| comment | No | ||
| dry_run | No | ||
| auto_dns | No | ||
| hostname | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant context beyond annotations. It discloses that dry_run=True by default (shows without creating) and how to execute. It explains the atomicity difference between auto_dns=True (records created atomically) and False (separate steps). This is valuable behavioral insight, especially given the openWorldHint annotation which is vague.
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 longer than average but every part serves a purpose: intro, usage directive, important notes, args, return, and examples. It uses clear section breaks and bullets, making it easy to scan. No redundant 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 (9 parameters, optional behavior, multiple resources affected), the description is complete. It covers purpose, usage, parameter details, return value, and provides three examples. The output schema exists, so the return description is sufficient. No gaps identified.
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?
With 0% schema description coverage, the description fully compensates by providing an 'Args:' section that explains every parameter, including conditions (e.g., subnet required when multiple subnets exist and no IP specified; view required when zone exists in multiple views). It gives examples and types, making the parameter semantics crystal clear.
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's purpose: 'Provision a complete host in one step: creates IPAM host + IP + optional DNS A/PTR records.' It uses a specific verb (provision) and resource (host), and explicitly distinguishes from siblings by directing DNS-only changes to provision_dns() and removal to decommission_host().
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 explicit when-to-use guidance: 'USE THIS when adding a new host to the network.' Names alternatives: 'For DNS-only changes use provision_dns(). To remove a host use decommission_host().' Also explains dry_run default and instructs to ask the user about auto_dns, giving clear decision points.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_infrastructureARead-only
Find resources by keyword across all DDI domains (IP, hostname, domain, comment). USE THIS when looking for something specific by name or address. For hierarchy browsing use explore_network(). For dashboards use get_network_summary().
Args: query: Search term (IP address, hostname, domain name, comment text, etc.) types: Optional list of resource types to search. If not set, searches all types. limit: Maximum results per type (default: 20, max: 100)
Returns: Matching resources grouped by type
Examples: - search_infrastructure(query="10.20.3") → finds subnets, hosts, addresses matching - search_infrastructure(query="web-prod", types=["hosts", "dns_records"]) - search_infrastructure(query="example.com", types=["dns_records"])
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| types | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the description doesn't need to cover safety. It adds useful behavioral details such as searching across all DDI domains, grouping results by type, and the limit per type. This goes beyond what annotations provide, though it doesn't elaborate on openWorldHint implications or potential rate limits, so 4 is appropriate.
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 well-structured with a clear summary line, usage guidance, args list, return description, and examples. Every section adds value and there is no filler. It is front-loaded with the core purpose.
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 search tool with multiple optional parameters and an output schema, the description covers purpose, parameters, return format, and usage examples. It provides enough context for an agent to select and invoke it correctly without needing additional information.
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 has zero descriptions, but the description fully explains each parameter. query is clarified as a search term with examples (IP, hostname, domain, comment). types is described as optional and defaults to all types. limit is given a default and maximum. This fully compensates for the schema's lack of 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 clearly states the tool's function: 'Find resources by keyword across all DDI domains' and specifies the types of searchable values (IP, hostname, domain, comment). It distinguishes itself from sibling tools by naming alternatives like explore_network and get_network_summary.
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?
Explicit guidance is provided: 'USE THIS when looking for something specific by name or address.' It also gives direct alternative recommendations: 'For hierarchy browsing use explore_network(). For dashboards use get_network_summary().' This leaves no ambiguity about when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
triage_security_insightADestructive
Triage security insights: update status, bulk triage by priority, or get comment history. USE THIS for incident response actions. For investigation use investigate_threat(). For posture review use assess_security_posture().
Args: action: Triage operation to perform insight_id: Single insight ID (for update_status, get_history) insight_ids: List of insight IDs (for bulk_triage; auto-populated from priority_filter if not set) status: New status for the insight(s) comment: Triage comment priority_filter: For bulk_triage — fetches matching open insights by priority dry_run: If True (default), bulk_triage shows what would be updated. Set False to execute.
Returns: Triage operation result
Examples: - triage_security_insight(action="get_history", insight_id="abc123") - triage_security_insight(action="update_status", insight_id="abc123", status="IN_PROGRESS", comment="Investigating") - triage_security_insight(action="bulk_triage", priority_filter="low", status="CLOSED", comment="Low priority batch close") - triage_security_insight(action="bulk_triage", insight_ids=["id1", "id2"], status="FALSE_POSITIVE", dry_run=False)
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| status | No | ||
| comment | No | ||
| dry_run | No | ||
| insight_id | No | ||
| insight_ids | No | ||
| priority_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavior beyond annotations: it explains the dry_run default and that bulk_triage shows what would be updated without executing, discloses that insight_ids auto-populate from priority_filter, and notes that priority_filter fetches matching open insights. This complements the destructiveHint annotation by detailing safety mechanisms.
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 well-structured: a one-line summary, usage guidance, a compact Args section, a Returns line, and concrete examples. Every sentence is informative and contributes to understanding the tool, with no filler or redundancy.
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 (7 parameters, 3 actions, a destructive operation), the description covers all necessary context: parameter semantics, operation behavior, the dry_run safety, and examples for each action. An output schema exists, so the return description is sufficient. No gaps are evident.
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 description compensates for the lack of schema descriptions by giving each parameter a clear semantic meaning, including which actions they apply to (e.g., 'insight_id: Single insight ID (for update_status, get_history)'). It also explains the auto-population logic and dry_run behavior, going beyond the schema's raw definitions.
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's purpose: 'Triage security insights: update status, bulk triage by priority, or get comment history.' It lists specific operations and explicitly differentiates from siblings by advising to use this for incident response actions, while pointing to investigate_threat() and assess_security_posture() for other contexts.
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 usage guidance: 'USE THIS for incident response actions.' It also names alternatives: 'For investigation use investigate_threat(). For posture review use assess_security_posture().' This is a clear when-to-use and when-not-to-use statement.
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.
26 tool updates
v2.2.3- First observed
assess_security_posture - First observed
check_api_health - First observed
check_infrastructure_health - First observed
decommission_host - First observed
diagnose_dns - First observed
diagnose_ip_conflict - First observed
explore_network - First observed
get_ip_utilization - First observed
get_network_summary - First observed
investigate_threat - First observed
manage_dhcp - First observed
manage_dhcp_lease - First observed
manage_dns_record - First observed
manage_dns_zone - First observed
manage_dnssec - First observed
manage_doh - First observed
manage_dtc - First observed
manage_federation - First observed
manage_ip_reservation - First observed
manage_network - First observed
manage_rpz_policies - First observed
manage_security_policy - First observed
provision_dns - First observed
provision_host - First observed
search_infrastructure - First observed
triage_security_insight
TDQS
Scored across 26 tools
Each tool targets a distinct domain (DHCP, DNS, IPAM, security, etc.) and descriptions include explicit cross-references, so an agent can reliably choose the correct tool without ambiguity.
All tools follow a consistent snake_case verb_noun pattern with repeated prefixes like manage_, provision_, check_, and diagnose_, making the naming predictable and uniform.
With 26 tools, the set exceeds the 25-tool threshold and feels heavy, even though the broad Infoblox DDI scope justifies many of the tools individually.
The tool surface covers IPAM, DHCP, DNS, DNSSEC, RPZ, DTC, DoH, security, provisioning, and diagnostics, providing comprehensive lifecycle operations with no major gaps.
Maintenance
Related MCP Connectors
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.
Manage hosts, redirects, SSL, and traffic analytics from Claude and other AI assistants.
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables comprehensive interaction with NetBox infrastructure management through both read and write operations. Supports full CRUD operations for devices, IP addresses, sites, racks, and other NetBox objects through natural language commands.917Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables natural language management of Juniper Apstra datacenter networks, including blueprints, virtual networks, connectivity templates, and deployment.2-
- AlicenseAqualityCmaintenanceEnables LLMs to manage IP addresses, subnets, and network sections through natural language, with security features like read-only by default.13MIT
- AlicenseNot gradedqualityDmaintenanceEnables natural language automation of Cisco SD-WAN vManage, including device management, template deployment, policy configuration, monitoring, and software upgrades.MIT