Skip to main content
Glama
iracic82

infoblox-ddi-mcp

by iracic82

CI Python 3.10+ License: MIT OR Apache-2.0 MCP PyPI

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 USE THIS for X / For Y use Z disambiguation

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 steps[] tracking

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

dry_run=True by default, input validation, filter injection protection

Consistency

Each agent builds its own workflow logic

Standardized response envelope (status, summary, steps, result, warnings, next_actions)

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

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 --http

Option B: Docker (one command)

docker build -t infoblox-ddi-mcp .
docker run -p 4005:4005 -e INFOBLOX_API_KEY=your_key infoblox-ddi-mcp

Or with docker compose (reads .env automatically):

cp .env.example .env   # add your INFOBLOX_API_KEY
docker compose up -d

Option C: pip install

cd infoblox-ddi-mcp
pip install .

# Now available as a CLI command:
infoblox-ddi-mcp --http

Transport Modes

Mode

Command

Use Case

stdio (default)

python mcp_intent.py

Claude Desktop, Cursor, Windsurf, Claude Code

HTTP streamable

python mcp_intent.py --http

HCL AEX, LangChain, OpenAI SDK, remote clients

Docker

docker run -p 4005:4005 ...

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

INFOBLOX_API_KEY

(required)

Infoblox CSP API key

INFOBLOX_BASE_URL

https://csp.infoblox.com

CSP portal URL

MCP_HOST

0.0.0.0

HTTP bind address

MCP_PORT

4005

HTTP port

MCP_PATH

/mcp

HTTP endpoint path

MCP_AUTH_TOKEN

(optional)

Bearer token for HTTP transport authentication

OTEL_EXPORTER_OTLP_ENDPOINT

(optional)

OTLP endpoint to enable tracing (requires [otel] extra)

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/mcp

Anthropic 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 workflow

OpenAI 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:

  1. Add an MCP Server tool source

  2. Set the endpoint to http://<host>:4005/mcp

  3. Start the server with python mcp_intent.py --http

  4. The 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/mcp

Local network:

# Start the server
python mcp_intent.py --http

# Any client on the network connects to:
# http://192.168.1.100:4005/mcp

Docker (remote host):

docker run -p 4005:4005 -e INFOBLOX_API_KEY=your_key infoblox-ddi-mcp

# Clients connect to:
# http://your-docker-host:4005/mcp

With 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-token

Production (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 to http://host:4005/mcp. Use MCP_AUTH_TOKEN to secure HTTP access.


Available Tools

Discovery & Exploration (Read-only)

Tool

Description

explore_network

Browse the IP hierarchy tree (Spaces → Blocks → Subnets) with utilization. Use for navigating network structure

search_infrastructure

Find resources by keyword across all DDI domains (IP, hostname, domain, comment)

get_network_summary

Executive dashboard with counts and health across all DDI infrastructure

Provisioning (Write)

Tool

Description

provision_host

Create host + IP + DNS in one call. Supports auto-IP from subnet and auto-DNS (atomic A/PTR via API) or manual DNS creation

provision_dns

Create a new DNS record with automatic zone discovery and validation

decommission_host

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

Diagnose DNS resolution problems: zone, records, security policies, and optional cache flush

diagnose_ip_conflict

Detect overlapping subnets, duplicate reservations, DHCP usage, and host associations

check_api_health

Verify Infoblox API connectivity for all three service clients (DDI, Insights, ATCFW) with response latency

check_infrastructure_health

HA groups, DHCP hosts, DNS zones, DNS views, IP spaces, on-prem appliance and service health

Security (Read + Write)

Tool

Description

investigate_threat

SOC insights with threat indicators, affected assets, and timeline events

assess_security_posture

Security policies, category filters, compliance, and analytics scorecard

manage_security_policy

CRUD for named lists (with partial add/remove items), app filters, internal domains, access codes

triage_security_insight

Update status, bulk triage by priority, get comment history

IPAM Management (CRUD)

Tool

Description

manage_network

Create, update, delete, get, or list IP spaces, address blocks, subnets, and ranges

manage_ip_reservation

Reserve/release fixed IPs and DHCP static leases

DNS Configuration (CRUD)

Tool

Description

manage_dns_zone

Create, delete, list, or get authoritative and forward zones

manage_dns_record

Update, delete, list, or get DNS records (smart lookup by name+zone+type)

DHCP Configuration (CRUD)

Tool

Description

manage_dhcp

CRUD for HA groups, option codes, hardware/option filters, hardware entries

manage_dhcp_lease

List/search active leases, clear (wipe) leases, or resend DDNS updates

DNS Traffic Control (CRUD)

Tool

Description

manage_dtc

Manage DTC/GSLB: LBDNs, pools, servers, and policies for global server load balancing and traffic steering

Federation (CRUD)

Tool

Description

manage_federation

Manage realms, blocks, delegations, pools, overlapping/reserved blocks

Reporting (Read-only)

Tool

Description

get_ip_utilization

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 status to know if the operation succeeded

  • Read summary for a one-line answer to show the user

  • Inspect steps to understand the multi-step workflow

  • Follow next_actions for 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 down

The 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:4005 by default

  • Accepts 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 --http

All 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

For production environments, run the MCP server behind an API gateway for TLS termination, rate limiting, and centralized authentication.

Production Deployment

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

  1. Create an HTTP API in API Gateway

  2. Add a route: POST /mcp → integration to your ECS/EKS service on port 4005

  3. Attach a Lambda authorizer or Cognito user pool for auth

  4. 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: 4005

Deployment Checklist

Step

Action

1

Set INFOBLOX_API_KEY via secrets manager (never in plain text)

2

Set MCP_AUTH_TOKEN for server-to-gateway authentication

3

Bind to 127.0.0.1 or internal network only (gateway handles external)

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 artifacts

Architecture

Architecture


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.md

Troubleshooting

"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 tools
assess_security_postureA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_healthA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_healthA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_hostA
Destructive

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

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
identifierYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_dnsA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNo
domainYes
flush_cacheNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_conflictA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_networkA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNosummary
limitNo
scopeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_utilizationA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_summaryA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_threatA
Read-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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
priorityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_dhcpA
Destructive

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNo
modeNo
nameNo
tagsNo
hostsNo
itemsNo
actionYes
commentNo
dry_runNo
protocolNo
object_idNo
mac_addressNo
option_typeNo
resource_idNo
resource_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_leaseA
Destructive

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")

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
spaceNo
stateNo
actionYes
addressNo
dry_runNo
hostnameNo
mac_addressNo
resource_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_recordA
Destructive

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNo
nameNo
viewNo
zoneNo
limitNo
rdataNo
actionYes
commentNo
dry_runNo
record_idNo
record_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_dnssecA
Destructive

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": [...]})

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
key_idNo
keysetNo
zone_idNo
zone_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_zoneA
Destructive

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
fqdnNo
nameNo
tagsNo
viewNo
actionYes
commentNo
dry_runNo
disabledNo
zone_idsNo
forward_toNo
resource_idNo
target_viewNo
primary_typeNo
resource_typeNoauth_zone
delegation_serversNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_dohA
Destructive

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": [...]})

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
fqdnNo
actionYes
updatesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_dtcA
Destructive

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

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
viewNo
actionYes
commentNo
dry_runNo
dtc_policyNo
resource_idNo
resource_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_federationA
Destructive

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")

ParametersJSON Schema
NameRequiredDescriptionDefault
cidrNo
nameNo
realmNo
actionYes
addressNo
commentNo
dry_runNo
resource_idNo
delegated_toNo
resource_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_reservationA
Destructive

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")

ParametersJSON Schema
NameRequiredDescriptionDefault
macNo
spaceNo
actionYes
addressNo
commentNo
dry_runNo
hostnameNo
resource_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_networkA
Destructive

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
cidrNo
nameNo
tagsNo
countNo
spaceNo
startNo
actionYes
addressNo
commentNo
dry_runNo
resource_idNo
resource_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_policiesA
Destructive

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
zoneNo
rdataNo
actionYes
commentNo
dry_runNo
disabledNo
resource_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_policyA
Destructive

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"])

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
itemsNo
rulesNo
actionYes
dry_runNo
criteriaNo
list_typeNo
activationNo
categoriesNo
expirationNo
descriptionNo
resource_idNo
resource_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNo
nameYes
viewNo
zoneNo
valueYes
commentNo
dry_runNo
record_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
ipNo
viewNo
zoneNo
spaceYes
subnetNo
commentNo
dry_runNo
auto_dnsNo
hostnameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_infrastructureA
Read-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"])

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
typesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_insightA
Destructive

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
statusNo
commentNo
dry_runNo
insight_idNo
insight_idsNo
priority_filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 26 tool updatesv2.2.3
    • First observedassess_security_posture
    • First observedcheck_api_health
    • First observedcheck_infrastructure_health
    • First observeddecommission_host
    • First observeddiagnose_dns
    • First observeddiagnose_ip_conflict
    • First observedexplore_network
    • First observedget_ip_utilization
    • First observedget_network_summary
    • First observedinvestigate_threat
    • First observedmanage_dhcp
    • First observedmanage_dhcp_lease
    • First observedmanage_dns_record
    • First observedmanage_dns_zone
    • First observedmanage_dnssec
    • First observedmanage_doh
    • First observedmanage_dtc
    • First observedmanage_federation
    • First observedmanage_ip_reservation
    • First observedmanage_network
    • First observedmanage_rpz_policies
    • First observedmanage_security_policy
    • First observedprovision_dns
    • First observedprovision_host
    • First observedsearch_infrastructure
    • First observedtriage_security_insight

TDQS

A4.3/5.0

Scored across 26 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count2/5

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.

Completeness5/5

The tool surface covers IPAM, DHCP, DNS, DNSSEC, RPZ, DTC, DoH, security, provisioning, and diagnostics, providing comprehensive lifecycle operations with no major gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers