Blackveil DNS
Blackveil DNS is an MCP server that performs DNS, email, and web security scanning, scoring, and remediation for domains.
Run full domain security audits (
scan_domain) with a NIST-aligned A+–F grade, maturity stage, and prioritized findings; batch-scan up to 10 domains and compare 2–5 domains side by side.Check email authentication and delivery security: SPF, DMARC, DKIM, MX, MTA-STS, BIMI, TLS-RPT, SubdoMailing risk, MX reputation, and blocklist status.
Audit infrastructure posture: DNSSEC, DNSKEY strength, SSL/TLS, HTTP security headers, NS, CAA, DANE, SVCB/HTTPS, PTR/FCrDNS, resolver consistency, zone hygiene, and authoritative DNS/root-server configuration.
Detect brand and phishing risks: lookalike/typosquat domains, shadow TLD variants, subdomain takeover, brand portfolio discovery, and recurring brand audits with watches.
Generate intelligence and remediation: spoofability scoring, supply-chain mapping, attack-path simulation, compliance mapping (NIST 800-177, PCI DSS 4.0, SOC 2, CIS Controls), domain benchmarks, RDAP/ASN lookups, plus ready-to-publish SPF/DMARC/DKIM/MTA-STS records, fix plans, and fix validation.
Use async and operator-deployable tools for batch scans, brand audits, cloud-bucket discovery, and OSINT investigations (domain, infrastructure, supply chain, username, email) where provisioned.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Blackveil DNSscan example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
BLACKVEIL DNS
Know where you stand.
Source-available DNS & email security scanner for Claude, Cursor, VS Code, and MCP clients across Streamable HTTP, stdio, and legacy HTTP+SSE.
Try it in 30 seconds
Claude Desktop (one-click install):
Download the Blackveil DNS extension and open it — the current 80-tool surface is available instantly. Verify your download.
Claude Code (one command):
claude mcp add --transport http blackveil-dns https://dns-mcp.blackveilsecurity.com/mcpThen ask: scan anthropic.com
Smithery (one command):
smithery mcp add MadaBurns/bv-mcpVerify the endpoint is live:
curl https://dns-mcp.blackveilsecurity.com/healthNo install. No API key. One URL for hosted HTTP:
Endpoint https://dns-mcp.blackveilsecurity.com/mcp
Transport Streamable HTTP · JSON-RPC 2.0
Auth None requiredTransport support:
Streamable HTTP:POST /mcp,GET /mcp,DELETE /mcpNative stdio:blackveil-dns-mcpCLI from theblackveil-dnsnpm packageLegacy HTTP+SSE:GET /mcp/ssebootstrap stream plusPOST /mcp/messages?sessionId=...
For Streamable HTTP, clients should retain the Mcp-Session-Id returned by initialize and send it on every subsequent request, including notifications. Send the negotiated version in MCP-Protocol-Version; unsupported values are rejected with HTTP 400, while expired or terminated sessions return 404 and require a fresh initialize.
Related MCP server: HeaderHawk
What you get
80 MCP tools with 19 scoring categories — SPF, DMARC, DKIM, DNSSEC, SSL/TLS, MTA-STS, NS, CAA, MX, BIMI, TLS-RPT, subdomain takeover, HTTP security headers, DANE, SVCB/HTTPS, DANE-HTTPS, subdomailing, reverse DNS (PTR/FCrDNS), and DNSKEY strength
Maturity staging — Stage 0-4 classification (Unprotected to Hardened) with score-based capping to prevent inflated labels
Trust surface analysis — detects shared SaaS senders in SPF, both cataloged platforms (Google, M365, SendGrid) and uncataloged hosts identifiable by their
spfdelegation label, then cross-references DMARC enforcement to determine real exposureGuided remediation —
generate(artifact=fix_plan) produces provider-aware prioritized actions; its record artifacts (spf_record,dmarc_record,dkim_config,mta_sts_policy,rollout_plan) output ready-to-publish records;validate_fixconfirms whether a fix was applied successfullySupply chain mapping —
map_supply_chaincorrelates DNS signals to build a full third-party dependency graph with trust levels and risk signalsAttack path simulation —
simulate_attack_pathsenumerates specific paths (spoofing, takeover, hijack) with severity, steps, and mitigationsCompliance mapping —
map_compliancemaps scan findings to NIST 800-177, PCI DSS 4.0, SOC 2, and CIS ControlsSelf-tuning scoring — adaptive weights adjust category importance based on patterns seen across scans via Durable Object telemetry
Per-tier analytics — usage tracking by auth tier with operator API for tier summaries, key-level usage, and daily digests
Passive and read-only — all checks use public Cloudflare DNS-over-HTTPS; no authorization required from the target
Tools
80 MCP tools · 7 prompts · 6 resources
Email Auth Infrastructure Brand & Threats Meta
───────────── ────────────── ─────────────── ───────────────
check_mx check_dnssec check_bimi scan_domain
check_spf check_ssl check_tlsrpt batch_scan
check_dmarc check_ns check_lookalikes compare_domains
check_dkim check_caa check_shadow_domains compare_baseline
check_mta_sts check_http_security explain_finding
check_subdomailing check_dane
check_mx_reputation check_dane_https DNS Hygiene Remediation
check_svcb_https ───────────── ───────────────
check_ptr check_txt_hygiene generate (one tool;
Intelligence check_srv artifact=fix_plan,
───────────── check_zone_hygiene spf_record,
get_benchmark check_resolver_ Discovery dmarc_record,
get_domain_rank consistency ───────────── dkim_config,
get_provider_ discover_brand_ mta_sts_policy,
insights check_dbl domains rollout_plan)
assess_spoofability check_rbl brand_audit_single validate_fix
map_supply_chain cymru_asn brand_audit_batch_
analyze_drift rdap_lookup start
resolve_spf_chain check_nsec_ brand_audit_status
discover_subdomains walkability brand_audit_get_
map_compliance check_dnssec_chain report
prioritize_portfolio_
leads
simulate_attack_paths check_fast_flux list_brand_audit_watches
check_agent_discovery check_dnskey_strength
check_authoritative_dns_infra
check_root_server_set register_brand_audit_watch
delete_brand_audit_watch
+ check_subdomain_takeover (standalone tool + internal — runs inside scan_domain)
+ check_authoritative_dns_infra and check_root_server_set (authoritative DNS infrastructure profile)
+ discover_brand_domains_start / discover_brand_domains_status / discover_brand_domains_findings
(async start → poll → fetch sibling of discover_brand_domains, for clients that time out on the ~24s sync call)
Operator-deploy only (BV_RECON binding; degrade to unprovisioned on self-hosted BUSL deployments):
+ check_realtime_threat_feed — curated intel-gateway threat feed lookup
+ scan_buckets_start — async cloud-bucket discovery scan (start → poll → findings)
+ scan_buckets_status — poll status of a running bucket scan
+ scan_buckets_findings — retrieve findings for a completed bucket scan
+ osint_investigate_domain_start — async domain OSINT investigation (start → poll → report)
+ osint_investigate_infrastructure_start — async deep-infrastructure OSINT (domain, IP, or org)
+ osint_investigate_supply_chain_start — async supply-chain OSINT investigation
+ osint_investigate_username_start — async username OSINT (owner/enterprise tier only)
+ osint_investigate_email_start — async email OSINT (owner/enterprise tier only)
+ osint_investigation_status — poll status of any running OSINT investigation
+ osint_investigation_report — retrieve report for a completed OSINT investigation
Internal-only compatibility surface (withdrawn from public `tools/list`; the three active Microsoft 365 / Entra tools proxy through `BV_WEB` and degrade to unprovisioned without it):
+ query_signins — query Microsoft Entra sign-in logs for a tenant
+ query_ual — DEPRECATED tombstone; valid, authorized calls return query_ual_deprecated with no tenant-data access
+ get_ca_policies — retrieve Conditional Access policies for an Entra tenant
+ assess_coverage — assess Conditional Access coverage gaps for an Entra tenantTool discovery metadata (_meta)
tools/list returns every tool with server-specific discovery metadata under each tool's _meta (the MCP-sanctioned extension point), so a client can group or filter the surface without hard-coding tool names:
group— functional group (email_auth,infrastructure,brand_threats,dns_hygiene,intelligence,remediation,discovery,identity_secops,meta).tier— scoring tier (core/protective/hardening); absent for non-scoring tools.scanIncluded—truewhen the tool runs insidescan_domain's parallel audit.recommended— present (true) only on the curated starter set (scan_domain,explain_finding,compare_baseline); omitted otherwise. A client facing the full surface can lead withtools.filter(t => t._meta.recommended)to avoid overwhelming an LLM with all tools flat. Every tool is still listed — this is an additive signal, not a filter.
Authoritative DNS infrastructure
check_authoritative_dns_infra scores authoritative DNS hosting behavior for a hostname. It is designed to consume raw UDP/TCP DNS, authoritative AA/RA behavior, zone-transfer refusal, DNSSEC, abuse-resistance, BGP/RPKI, and multi-vantage evidence from the BV_INFRA_PROBE service binding when that worker is provisioned.
check_root_server_set validates the DNS root-server set against the embedded official root hints. With BV_INFRA_PROBE, it also checks live root priming, glue, parent/child delegation, DNSKEY, and SOA serial evidence across roots.
Self-hosted or local deployments without BV_INFRA_PROBE still return structured partial results. The worker-only mode records the embedded root hints and marks live raw-DNS, routing, RPKI, and vantage capabilities as inconclusive rather than pretending they ran.
Quality & Reliability
The server classifies detected MCP clients by their default response format:
Interactive clients:
claude_mobile,claude_code,cursor,vscode,claude_desktop,claude_connector,windsurf(auto-format:compact)Non-interactive clients:
mcp_remote,blackveil_dns_action,bv_claude_dns_proxy,unknown(auto-format:full)
The bv_load_test class identifies internal load/chaos/tranco-scan traffic so it stays out of real-client analytics segments.
The comprehensive chaos suite validates session stability, authentication precedence, format negotiation, and transport-specific edge cases across Streamable HTTP and Legacy SSE for its supported client fixtures. Without an API key it exercises the public/free-tier path; with a valid key exported as BV_API_KEY, it covers Bearer authentication, legacy self-host ?api_key= compatibility, authenticated SSE bootstrap, and authenticated batch behavior.
Run the client/session chaos suite locally: python3 scripts/chaos/chaos-test-clients.py.
Run repeat force-refresh scans to detect production scoring drift:
BV_API_KEY=... python3 scripts/chaos/score-stability-test.py --count 20 --rounds 3 --concurrency 5The stability harness negotiates MCP protocol 2025-06-18, accepts JSON and Streamable HTTP SSE responses, and exits non-zero on any transport/tool error or score/category drift. Use --from <json-file> with a JSON array of domains for a targeted provider-diversity sweep.
SSOT guardrails are enforced by focused audit tests:
Tool counts and public resource copy are generated from the
TOOLSregistry, not hand-written —npm run generate:tool-surfacerewrites every advertised count, andnpm run check:tool-surfacefails CI if any drifts. Counts advertised to clients use the public surface (TOOLSminus internal-only tools), so the number in the docs, the badge, the VS Code listing and theresources/readcopy is the numbertools/listactually returns.Domain-required validation is derived from each tool input schema.
Scan timeout budgets are resolved from shared runtime config.
WASM tool permissions are generated from MCP tool annotations.
Public quota copy is checked against runtime quota config.
Version stamps in scan output
Every scan_domain / batch_scan result carries three reproducibility stamps. They are three different namespaces — do not compare them to each other, and do not read any of them as the npm package version unless it says so:
Field | What it tracks | How often it moves |
| The scoring policy: category weights, profile weights, grade thresholds, severity penalties, the | Only when a change alters scores or grades. Slowly — most releases do not touch it. |
| The | Every package release — code, new detections, bug fixes. |
| Fingerprint of the effective scoring configuration that produced this result, including any | Whenever the effective config differs. |
scoringModelVersion is independent of dnsChecksPackageVersion and is normally lower — for example model 1.10.0 alongside package 1.18.0. That is not a version gap, and it does not mean a consumer's vendored copy scores differently from the hosted service: the package advanced eight minors without changing scoring policy. Reading the model version as the package version has twice triggered a false "engine version gap" investigation, which is why both are now emitted side by side.
When you publish or cite a score, record scoringConfigHash — not either version number. It is the value that identifies the exact scoring configuration behind a result, so two scans carrying the same hash were graded under the same rules.
Status badge
GET /badge/<domain> returns an embeddable SVG — the badge at the top of this README is a live scan of our own domain. It needs no authentication and is subject to the same anonymous rate limits and daily caps as a public scan.
The badge shows the same customer-facing letter scan_domain reports — the NIST-aligned 6-band grade (A+ ≥95, A ≥90, B ≥80, C ≥70, D ≥60, F <60) — so a domain cannot show one grade on its badge and a different one in its report. Two further states are stated rather than papered over:
<grade> partial— the scan was graded, but did not complete every check (a WAF challenge, a timeout, an unreachable host). The hover/aria title gives the exact coverage, e.g.17 of 19 checks measured. The grade and its colour are unchanged: coverage and posture are different axes.unknown— the domain could not be measured at all. The badge says so instead of substituting a letter, which would publish a failing grade nobody measured.
See docs/scoring.md for the grade scales and the evidence rules behind them.
Architecture
MCP Client
│
│ POST /mcp (JSON-RPC 2.0)
│
┌───▼──────────────────────┐
│ Cloudflare Worker │
│ │
│ Hono ─► Origin check │
│ ─► Auth │
│ ─► Rate limiting │
│ ─► Session mgmt │
└───┬──────────────────────┘
│
┌───▼──────────────────────┐
│ Tool Handlers │
│ 19 scoring categories │
└───┬──────────────────────┘
│
┌───▼──────────────────────┐
│ Generic Scoring Engine │
│ Three-tier model │
└───┬──────────────────────┘
│
┌───▼──────────────────────┐
│ Cloudflare DoH │
│ DNS-over-HTTPS │
└──────────────────────────┘Generic Scoring Engine: Runtime-agnostic, string-keyed three-tier scoring with configurable weights
Infra Probe Binding: Optional
BV_INFRA_PROBEservice binding supplies raw authoritative DNS, root-server, BGP/RPKI, and vantage evidence for the authoritative DNS infrastructure profileWASM Policy Engine: High-performance permission and token checks via
bv-wasm-coreReliable Sessions: Hardened tombstone logic prevents race-condition revival of terminated sessions
Protocol Enforcement: Unsupported MCP versions fail closed; notifications and SSE connections use the same session-validity rules as other post-initialize requests
Bounded Egress: Public CT and target-HTML responses are streamed under byte ceilings before parsing or fingerprinting
Cryptographic Identifiers: Session and brand-report identifiers use Web Crypto randomness
Adaptive Scoring: Durable Object telemetry adjusts weights based on real-world distributions
Client Awareness: Automatic response formatting (
compactvsfull) based on clientUser-Agent
Brand-discovery modes (discover_brand_domains / brand_audit_*)
The discovery_mode argument accepts two values:
classic(the default everywhere this repo runs out-of-the-box) — the public, BUSL-licensed signal-sweep pipeline. Uses only public-internet data sources (DNS, RDAP, CT logs, MX/TXT inspection). This is the only mode supported for self-hosted deployments and the only mode the open test suite covers end-to-end.tiered— layers a portfolio-aware Tier 0 / infrastructure-graph Tier 1 / declared-evidence Tier 2 pipeline in front of the classic sweep. Tiered mode requires private BlackVeil-internal cross-Worker bindings (BV_INFRA_GRAPH,BV_INTEL_GATEWAY,BV_ENTERPRISE) that are not packaged with the open distribution — they live in BlackVeil's production deploy overlay (.dev/wrangler.deploy.jsonc) and call into proprietary Workers. Self-hosters cannot enable tiered mode without those bindings.
BlackVeil's hosted production at dns-mcp.blackveilsecurity.com flips its runtime default to tiered via the env var BRAND_AUDIT_DISCOVERY_MODE_DEFAULT="tiered" in the private overlay; the public schema default in src/schemas/tool-args.ts stays 'classic' permanently so anyone building from main gets the BUSL-licensed behaviour unchanged. An explicit caller-supplied discovery_mode always wins over the env default.
Client setup
The free tier requires no authentication. Authenticated requests bypass per-IP rate limits and follow your tier's daily quota. Hosted production supports:
Header:
Authorization: Bearer <KEY>Header (alternative):
X-API-Key: <KEY>— for clients that cannot setAuthorization. If both are sent,Authorization: Bearerwins.OAuth 2.1: optional authorization-code flow with PKCE, enabled only when operators set
ENABLE_OAUTH=true; owner-key consent is separately gated byENABLE_OWNER_OAUTH=true.
The ?api_key=<KEY> fallback is legacy/self-host compatibility only. BlackVeil hosted production sets REJECT_QUERY_API_KEY=true; clients that cannot send headers should use OAuth or an mcp-remote header bridge.
For full hosted setup examples, stdio usage, OAuth setup, and legacy fallback endpoints, see docs/client-setup.md.
Operator configuration
These settings apply to operators running their own deployment. They are optional — self-hosted (BUSL) deployments fall back to privacy-preserving defaults when they are unset.
Detailed analytics capture
The public /mcp path writes a per-event access log enriched with geolocation and network identity. The write path, PII depth, and retention are operator-controlled:
Binding / var | Type | Purpose |
| Queue | Operator-deploy only. Batches access-log writes off the request path. Absent on self-hosts → inline-insert fallback (no reverse-DNS lookup). |
| var |
|
| var | Access-log retention window in days (default |
PTR third-party disclosure | — | At |
Internal analytics endpoints
These live under the internal auth gate (/internal/*) and are called by bv-web, not the public surface:
Endpoint | Source | Notes |
| D1 | Precise per-customer usage report. |
| Analytics Engine | Geographic rollup (country/region/city/ASN) for dashboards. |
| D1 | STRICT-gated, operator-only. Returns decrypted client IP + PTR for abuse investigation; every call writes a self-audit row. |
Pricing
Free | Pro | Enterprise | |
Price | $0 | $39/mo | |
Scans/day | 25 | 500 | 10,000+ |
Checks/day | Tool-specific limits | Tool-specific limits | Contract limits |
Rate limit | 50 req/min | None | None |
API access | Yes | Yes | Yes |
MCP access | Yes | Yes | Yes |
Offensive/recon and multi-domain tools (subdomain discovery, attack-path simulation, lookalike/shadow-domain detection, fast-flux detection, supply-chain mapping, real-time threat feed, bucket/OSINT investigations, batch_scan, compare_domains, brand audits) require a paid plan (Pro / developer tier or higher); free, unauthenticated, and agent-tier callers get an HTTP 403 upgrade-required response. Unauthenticated callers are additionally capped at a small number of distinct domains per day (best-effort, fail-open). The OSINT/bucket status and report pollers stay free.
Example prompts
These demonstrate core functionality — paste any of them into Claude with the Blackveil DNS connector enabled:
Prompt | What it does |
| Full security audit — score, grade, prioritized findings |
| Side-by-side comparison of two domains' postures |
| Produces a ready-to-publish DNS record |
| Enumerates spoofing, takeover, and hijack vectors |
| Maps findings to compliance framework controls |
Support
Bug reports & feature requests: GitHub Issues
Security vulnerabilities: security@blackveilsecurity.com (see SECURITY.md)
General questions: GitHub Discussions
Support the project: Ko-fi — the hosted scanner is free to use; tips help keep it that way
Responsible use
This tool is intended for authorized security assessments of domains you own or have explicit permission to test. Do not use it for unauthorized reconnaissance, harassment, or any activity that violates applicable laws. Findings from attack simulation, spoofability, and subdomain discovery tools should be used to improve your own security posture, not to exploit others.
If you discover a vulnerability in a third-party domain, please follow coordinated disclosure practices.
Built and maintained by BLACKVEIL — NZ-owned cybersecurity consultancy.
Privacy Policy · License (BUSL-1.1 → MIT on 2030-03-17)
Available Tools
80 toolsanalyze_driftARead-onlyIdempotentInspect
Measure whether a domain's DNS security posture improved or regressed by comparing the current state against a prior scan snapshot. Returns a drift classification (improving/stable/regressing/mixed), score delta, and lists of improvements and regressions. Use to answer "did our security score improve or regress since last time?" — distinct from compare_baseline which checks compliance against a fixed policy (not improvement over time).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to analyze drift for | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| baseline | Yes | Prior scan reference for drift-over-time analysis: a previous ScanScore JSON STRING, or the literal "cached" to reuse the last cached scan (the default when omitted). NOT a policy/requirements object — for compliance enforcement against required controls, use compare_baseline instead. | cached |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds value by specifying the return payload (drift classification, score delta, lists of improvements/regressions) and clarifies the baseline 'cached' reuse, without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with clear information architecture: purpose, output, usage/alternatives. No wasted words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description covers the return values. It also explains when to use the tool and the key baseline parameter behavior (via schema), making it sufficiently complete for a moderate-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with detailed per-param explanations (e.g., baseline's 'cached' literal and exclusion of policy objects). The description itself doesn't add parameter-level semantics beyond schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool measures DNS security posture change against a prior snapshot, using specific verbs and resources. It explicitly distinguishes from compare_baseline by contrasting improvement-over-time vs compliance-to-policy, differentiating it from a key sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit use case ('did our security score improve or regress since last time?') and an explicit exclusion (not for compliance checks — use compare_baseline instead). The baseline parameter schema reinforces this with 'NOT a policy/requirements object — for compliance enforcement against required controls, use compare_baseline instead.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assess_spoofabilityARead-onlyIdempotentInspect
Compute a composite email spoofability risk score (0–100, higher = more spoofable) by combining SPF trust surface, DMARC enforcement, and DKIM coverage. Returns a risk level (minimal→critical), per-control sub-scores, and plain-language summary of how easy it would be to spoof email from the domain. Use when asked how easy it is to spoof email from a domain, or for a composite email spoofing risk score.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=true, idempotentHint=true, and destructiveHint=false, the description adds value by explaining how the score is computed (combining SPF trust surface, DMARC enforcement, DKIM coverage) and what outputs to expect (risk level, sub-scores, plain-language summary). This goes beyond annotation coverage and helps set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no repetition of schema content, and the most important information (what the tool does and its output) is front-loaded. Every phrase serves a purpose, with the usage note placed last as a natural call to action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description's explanation of returned data (risk level, sub-scores, summary) is valuable. It covers the core behavior and usage context. Minor gaps like handling of invalid domains or network-only data sources exist, but they are not critical for a read-only, idempotent tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description doesn't add parameter-level details beyond what the schema already provides (domain, format, force_refresh). It doesn't harm, but it also doesn't compensate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb ('Compute') and clearly names the resource ('composite email spoofability risk score'), including the 0–100 scale and direction. It explicitly distinguishes itself from sibling tools like check_spf, check_dmarc, and check_dkim by framing this as a combined/composite assessment rather than a single-control check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage triggers: 'Use when asked how easy it is to spoof email from a domain, or for a composite email spoofing risk score.' It implies alternatives (individual control checks) exist among siblings but does not name them or state when NOT to use this tool. This is clear context but lacks exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_scanARead-onlyIdempotentInspect
Bulk-scan up to 10 domains in parallel. Runs a full security audit on each domain in the list and returns score, NIST-aligned letter grade (6-band A+/A/B/C/D/F), and finding counts per domain. Use when you want to audit multiple domains at once or do a bulk scan of several domains simultaneously — distinct from compare_domains which does a side-by-side analysis of 2–5 domains. Version stamps (hoisted once per batch): 'scoringModelVersion' is the scoring POLICY semver and is INDEPENDENT of 'dnsChecksPackageVersion', the @blackveil/dns-checks npm engine-package version — the model version legitimately lags and the two must not be compared. Record 'scoringConfigHash' when citing scores.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output verbosity. Auto-detected if omitted. | |
| domains | Yes | Domains to scan (max 10 per request) | |
| force_refresh | No | Bypass cache and run fresh scans. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive traits. The description adds valuable context about version stamps (scoringModelVersion vs dnsChecksPackageVersion independence) and instructs to record scoringConfigHash. No contradictions. It could have mentioned caching behavior (related to force_refresh) but not required given annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-organized and front-loaded with the core purpose. The version stamp paragraph is essential to prevent misuse, so no fluff. Slightly dense but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the key return values (score, grade, finding counts). It also covers usage distinctiveness and the version gotcha. Lacks explicit response structure or error handling, but sufficient for a batch tool with rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and descriptions for each parameter are present. The tool description does not add extra meaning beyond the schema—it repeats the max-10 domain limit and mentions output fields, but that's about return values, not parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Bulk-scan up to 10 domains in parallel. Runs a full security audit on each domain...' and names the return fields (score, NIST-aligned letter grade, finding counts). It also distinguishes from compare_domains, making the tool's scope clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'Use when you want to audit multiple domains at once' and notes distinctness from compare_domains, a side-by-side analysis. It does not explicitly exclude single-domain scans (e.g., scan_domain), but the guidance is sufficient for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_scan_findingsARead-onlyIdempotentInspect
Fetch owner-scoped findings for a completed asynchronous batch scan.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ||
| job_id | Yes | Job ID returned by batch_scan_start. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context beyond annotations: findings are 'owner-scoped' and the scan must be 'completed'. It does not discuss error behavior for incomplete scans, but this is a minor gap given the strong annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, dense sentence that front-loads the action, resource, scope, and precondition. Every word earns its place and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, scope, and the completion precondition, which is sufficient for an agent to decide to call this tool. Since there is no output schema, a bit more detail about the return shape or format semantics would improve completeness, but the low parameter complexity and strong annotations keep this from being a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes job_id, including its pattern and source, but provides no description for the optional 'format' parameter. The tool description adds no parameter-level meaning, failing to clarify the difference between 'full' and 'compact' or any default behavior. With 50% schema coverage, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('owner-scoped findings'), and specifies the condition 'for a completed asynchronous batch scan'. This clearly differentiates it from siblings like batch_scan_start (starting) and batch_scan_status (status).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'completed asynchronous batch scan' clearly implies this tool is used after a batch_scan_start job has finished, giving solid usage context. It does not explicitly name alternatives or state when not to use it, but the timing condition is unambiguous enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_scan_startAInspect
Start a durable asynchronous scan of 1–10 domains. Returns a stable job ID; replaying the same idempotency key with the same principal, normalized inputs, and scoring versions returns the same job.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output verbosity. Auto-detected if omitted. | |
| domains | Yes | Domains to scan (max 10 per request) | |
| force_refresh | No | Bypass cache and run fresh scans. | |
| idempotency_key | Yes | Caller-stable replay key for this exact batch request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: the operation is durable, asynchronous, returns a stable job ID, and has explicit idempotency-replay semantics conditional on principal, normalized inputs, and scoring versions. This complements the annotations (idempotentHint=false) by clarifying that replay is safe only with the same idempotency key, not a general guarantee.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The primary action and scope are in the first clause, and the idempotency/replay behavior is front-loaded in the second sentence. Every sentence adds necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers what the tool does and the key idempotency contract, but it omits guidance on how to retrieve the scan results or monitor progress (e.g., use batch_scan_status or batch_scan_findings). Given there is no output schema, a brief mention of the job ID's role in follow-up steps would make it more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters and their constraints. The description adds no new parameter-level detail; it only references the idempotency key's behavior, which is a behavioral note rather than a semantic explanation of the parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Start') with a clear resource ('durable asynchronous scan of 1–10 domains') and states a concrete outcome (stable job ID). It is semantically clear but does not explicitly differentiate itself from similar batch-start siblings like brand_audit_batch_start or discover_brand_domains_start, nor from the synchronous batch_scan tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for asynchronous batch scans via 'durable asynchronous scan', but it gives no explicit guidance on when to choose this over alternatives, when not to use it, or how it relates to sibling tools like batch_scan_status, batch_scan_findings, or scan_domain. No exclusions or routing hints are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_scan_statusARead-onlyIdempotentInspect
Read the owner-scoped status of an asynchronous batch scan.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ||
| job_id | Yes | Job ID returned by batch_scan_start. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, covering the safety profile. The description adds 'owner-scoped' and 'asynchronous', which are genuinely useful behavioral context, but it does not disclose how unknown job IDs are handled or what the status response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the core action, resource, and scope. There is no filler or repetition of schema information, making it immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple status-read operation and the annotations cover safety, but with no output schema the description does not explain return values or polling/completion semantics. An agent may not know what 'status' looks like or how to interpret its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 50% of parameters with descriptions; job_id is well-documented with a pattern and a note that it comes from batch_scan_start, and format has a self-explanatory enum. The description itself adds no parameter-level meaning, but the critical job_id parameter is already adequately explained in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read'), a clear resource ('status of an asynchronous batch scan'), and an important scoping qualifier ('owner-scoped'). This distinguishes it from sibling status tools like brand_audit_status or discover_brand_domains_status without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus the many sibling status tools, nor does it state prerequisites such as 'use after batch_scan_start'. Though 'batch scan' implies context, no alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_audit_batch_startAInspect
Enqueue an async brand audit across up to 50 target domains with optional standard/deep discovery depth, brand aliases, and caller-supplied candidate domains. Returns { auditId, queuedAt, targetCount, etaSeconds } immediately; poll with brand_audit_status and fetch results with brand_audit_get_report once complete. Each target consumes 1 unit of the monthly BRAND_AUDIT_QUOTAS budget.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Output view mode. 'registrar_complement' produces a registrar-complement payload; requires enterprise tier. Default 'standard'. | |
| depth | No | Discovery depth. standard is default; deep expands candidate seeding and enrichment fanout. | |
| format | No | Inline output mode. Defaults to "both". | |
| domains | Yes | Domains to audit (max 50 per batch). Duplicates are merged. | |
| planner_mode | No | Planner mode for staged discovery fanout. observe emits metrics; enforce applies candidate-backed signal caps. | |
| brand_aliases | No | Optional public brand aliases to seed, such as product or legal-entity labels. | |
| discovery_mode | No | Brand-discovery pipeline mode. classic = legacy sweep; tiered = tenant/graph/evidence wrappers first (BlackVeil-internal). | |
| min_confidence | No | Drop candidates whose combined confidence falls below this threshold (0-1, default 0.5). | |
| candidate_domains | No | Optional candidate domains supplied by the caller for corroboration. | |
| ownership_verified | No | Caller attests that the target domains are owned or authorized for scanning. Required when discovery_mode is "tiered" and the caller is not an enterprise/owner/partner principal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the async behavior, immediate return payload shape, quota cost per target, and the follow-up polling/report tools. With annotations already indicating readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, the description adds the important context that this is a queued operation and consumes budget. It does not mention specific permission requirements for enterprise tier beyond the schema's view field note, but the async and quota context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary action and return type, then the workflow continuation and quota note. Every sentence earns its place and none repeat the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no further explanation; the description covers the async handoff, quota consequence, and sibling tools. It could be more complete by noting that tiered discovery requires ownership_verified for non-enterprise callers, but that is already detailed in the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds valuable semantic context by explaining the async workflow, the returned envelope fields, and quota consumption. However, it does not expand on the meaning of less-common parameters such as planner_mode or discovery_mode beyond their schema descriptions, so it doesn't quite reach a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Enqueue'), a resource ('an async brand audit'), and key scope constraints ('up to 50 target domains' with optional discovery layers). It also names sibling tools for status and report retrieval, so an agent can distinguish this start action from brand_audit_status and brand_audit_get_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent to poll with brand_audit_status and fetch results with brand_audit_get_report, providing a complete start→poll→fetch workflow. It also notes quota consumption, which helps agents decide whether to invoke this tool versus a cheaper or single-domain alternative such as brand_audit_single.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_audit_get_reportARead-onlyIdempotentInspect
Fetch the result JSON for a completed brand audit. With target set, returns the per-target CheckResult; without, returns the audit-level aggregate. Returns notReady when polling an in-flight audit. When a rendered PDF sidecar exists, metadata includes pdfUrl — an authenticated /reports/ download link (same bearer credential as this call). Completed targets whose PDF is still rendering include pdfPending so callers can poll again.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Specific target domain. Omit for audit-level aggregate. | |
| auditId | Yes | Audit ID returned by brand_audit_batch_start. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive, so the base requirement is met. The description adds valuable behavioral details beyond annotations: 'notReady' polling semantics, 'pdfUrl' being an authenticated download link requiring the same bearer credential, and 'pdfPending' for rendering state. This is meaningful supplementary information that helps the agent handle edge cases correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place. The first establishes the core function, the second covers parameter behavior, and the third handles edge cases (notReady, pdfUrl, pdfPending). No filler, front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists Rodríguez, the description appropriately covers runtime behaviors not in the schema: polling (notReady), authentication for pdfUrl, rendering status (pdfPending). This is complete for a tool with two parameters and a rich output contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are 100% documented in the schema, so baseline is 3. The description enhances this by clarifying the semantic distinction: `target` yields per-target CheckResult, while omitting it yields audit-level aggregate. It also explains the meaning of the returned statuses (notReady, pdfUrl, pdfPending), adding value beyond the schema's bare field definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Fetch the result JSON for a brand audit.' It clearly distinguishes this tool from siblings (e.g., brand_audit_status, brand_audit_batch_start) by focusing on retrieving results. The dual mode (per-target vs. aggregate) is explicit, removing ambiguity about what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use it (for completed audits) and explains the behavior of the optional `target` parameter eagerly. It implicitly signals not to use it for in-flight audits by mentioning 'notReady' polling. However, it does not explicitly name alternative tools (e.g., brand_audit_status) for checking status, so a bit more exclusivity would push it to 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_audit_singleARead-onlyIdempotentInspect
Run a full brand audit on a single target with optional standard/deep discovery depth, brand aliases, and caller-supplied candidate domains. Discovers brand-related domains, looks up registrar + registrant for each candidate, and classifies each into consolidated, real registrar-sprawl shadowIt, authorized vendor dependency, indeterminate, or impersonation relationships. Gated tier-wide by monthly BRAND_AUDIT_QUOTAS (free/agent=0, developer=50, partner=200, enterprise=500, owner=unlimited).
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Output view mode. 'registrar_complement' produces a registrar-complement payload; requires enterprise tier. Default 'standard'. | |
| depth | No | Discovery depth. standard is default; deep expands candidate seeding and enrichment fanout. | |
| domain | Yes | Target domain to audit (e.g., apple.com). | |
| format | No | Inline output mode. Defaults to "both". | |
| planner_mode | No | Planner mode for staged discovery fanout. observe emits metrics; enforce applies candidate-backed signal caps. | |
| brand_aliases | No | Optional public brand aliases to seed, such as product or legal-entity labels. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. | |
| discovery_mode | No | Brand-discovery pipeline mode. classic = legacy sweep; tiered = tenant/graph/evidence wrappers first (BlackVeil-internal). | |
| min_confidence | No | Drop candidates whose combined confidence falls below this threshold (0-1, default 0.5). | |
| candidate_domains | No | Optional candidate domains supplied by the caller for corroboration. | |
| ownership_verified | No | Caller attests that the target domain is owned or authorized for scanning. Required when discovery_mode is "tiered" and the caller is not an enterprise/owner/partner principal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag safe, read-only, idempotent behavior. The description adds meaningful non-obvious behavior: it discovers domains, performs registrar/registrant lookups, and classifies relationships, and it discloses tier-wide monthly quota gating with exact limits. This exceeds what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three dense sentences with no filler: purpose first, process second, quota gating third. Every sentence earns its place, though 'shadowIt' appears to be a minor spacing typo.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with a rich output schema, full parameter descriptions, and safety annotations, the description covers the tool's purpose, pipeline, classification outcomes, and quota constraints. It does not describe async/report flows or all discovery-mode caveats, but those are largely carried by sibling names and the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 11 parameters have schema descriptions, so the baseline is 3. The description names depth, brand aliases, and candidate domains but does not add semantic detail beyond the schema; the schema remains the primary source for parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Run a full brand audit on a single target,' and it names optional inputs (depth, aliases, candidate domains) plus the concrete output classification categories. This clearly distinguishes it from discovery-only and batch siblings by emphasizing 'single target' and 'full brand audit.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'single target' and 'full brand audit' imply this is for one-target comprehensive audits, and the quota note tells when it may be blocked, but no alternatives are named or excluded. There is no explicit guidance on choosing this over brand_audit_batch_start or discover_brand_domains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
brand_audit_statusARead-onlyIdempotentInspect
Poll the status of an enqueued brand audit. Returns audit-level status (queued | running | completed | failed), progress 'N/M', and per-target statuses. Owner-scoped — auditIds owned by other principals surface as notFound.
| Name | Required | Description | Default |
|---|---|---|---|
| auditId | Yes | Audit ID returned by brand_audit_batch_start. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint=true and destructiveHint=false. The description adds genuine value by disclosing the owner-scoping edge case ('auditIds owned by other principals surface as notFound') and previewing the return shape (audit status, 'N/M' progress, per-target statuses). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly-written sentences with every clause earning its place. The first sentence front-loads the verb and purpose; the second packs return-shape details and a critical scoping edge case into a single clause. Zero fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter polling tool with an output schema, the description covers all key aspects: purpose, async lifecycle, return shape, and the ownership-related notFound edge case. Given the available schema context and annotations, there are no material gaps that would prevent an agent from using this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description stays at the schema's 100% coverage level. The auditId parameter is fully documented in the schema ('Audit ID returned by brand_audit_batch_start'), with the description adding only the word 'enqueued' as extra context. Schema does the heavy lifting, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening verb-noun pair 'Poll the status of an enqueued brand audit' precisely defines the operation with a specific verb (poll) and resource. It clearly distinguishes itself from sibling tools like brand_audit_single, brand_audit_batch_start, and brand_audit_get_report, making the tool's role in the async workflow unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes clear context: 'Poll the status of an enqueued brand audit' implies usage after brand_audit_batch_start initiates work, and the 'queued | running | completed | failed' state machine signals when it applies. However, it doesn't explicitly name alternatives or state when NOT to use it (e.g., vs. brand_audit_get_report).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_agent_discoveryARead-onlyIdempotentInspect
Assess the security posture of IETF BANDAID agent-discovery records (draft-mozleywilliams-dnsop-dnsaid). Detects SVCB agent records under _agents/index.{protocol}._agents, reports whether the discovery zone is DNSSEC-anchored (unsigned = spoofable agent endpoints), evaluates DANE/TLSA binding trust (RFC 6698 §10.1), and checks capability-document integrity (cap / cap-sha256). Read-only; uses Private-Use SVCB param code points pending IANA assignment.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Resolve a single named agent ({name}.{domain}) instead of enumerating the zone. | |
| domain | Yes | Domain to check for published agent-discovery records (e.g., example.com). | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| protocol | No | Scope discovery to a single agent protocol index (_index._{protocol}._agents). Omit to sweep the zone. | |
| verify_cap | No | Fetch each declared capability document (cap=) over HTTPS via safeFetch and verify it against the cap-sha256 integrity pin. Default false (declaration/existence check only). | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior knee. Description adds substantial behavioral context: it reports on DNSSEC anchoring, DANE binding trust, and capability-document integrity, and notes the use of private-use SVCB parameter codes pending IANA assignment (a caveat about potential instability). These details meaningfully exceed the annotations, so a 4 is warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences front-load the purpose and then list the key checks. Every sentence adds value: purpose, detection scope, and read-only note. It is not overly long, though it packs a lot of technical detail. Slightly above average due to efficiency and prioritization.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a niche protocol tool, this description covers the essential aspects: what records it looks for, what security properties it evaluates (DNSSEC, DANE, capability integrity), and the current standardization status (pending IANA). Combined with a detailed schema and output schema, an agent has sufficient context to select and invoke this tool appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for all 6 parameters (100% coverage), including format, protocol, domain, and verify_cap. The description adds some contextual nuance (e.g., 'reports whether the discovery zone is DNSSEC-anchored' ties protocol to the indexing) but largely complements the schema rather than adds new meaning. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific, concrete language: 'Assess the security posture of IETF BANDAID agent-discovery records (draft-mozleywilliams-dnsop-dnsaid).' It names the exact resource type (SVCB agent records), the naming convention (_agents/_index._{protocol}._agents), and distinguishes itself from the generic DNS-check siblings (check_dnssec, check_dane, etc.) by focusing on a specific draft spec. Purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the specific technical context but never explicitly states when to use this tool over alternatives or when NOT to use it. It is clearly specialized for IETF BANDAID agent-discovery records, but no exclusions or comparisons to sibling tools are given. Given the niche focus, the intended use case is inferable, but explicit guidance would be stronger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_authoritative_dns_infraARead-onlyIdempotentInspect
Check authoritative DNS infrastructure posture for a hostname. Uses BV_INFRA_PROBE when available for raw DNS, routing, RPKI, and vantage-point evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds meaningful context beyond those annotations by revealing the underlying BV_INFRA_PROBE dependency and the evidence categories (raw DNS, routing, RPKI, vantage-point), which helps the agent understand the tool's data acquisition behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences. The first states the purpose, the second names the key data-source detail. No filler, no redundancy, all content earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to explain return values. It covers purpose, scope (authoritative DNS infrastructure), and evidence source. It is slightly less complete than ideal because it omits what the 'posture' result means or how it relates to the many sibling DNS tools, but the schema and annotations fill most gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (domain, format, force_refresh) has a helpful description. The tool description adds no parameter-specific meaning, but the schema already carries that burden sufficiently, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states a specific verb+resource: 'Check authoritative DNS infrastructure posture for a hostname.' This distinguishes it from sibling tools that check individual DNS records (MX, SPF, NS, etc.), though it does not explicitly name the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives. The sibling list contains numerous focused DNS checks (check_ns, check_dnssec, check_dnssec_chain), and the description could have indicated this is the comprehensive posture check while those are for specific record types, but it does not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_bimiARead-onlyIdempotentInspect
Check the BIMI brand-logo record at default._bimi.. Validates the logo URL (l=) and the presence of mark-certificate authority evidence (a=) — the a= tag is a bare URL, so the certificate type (VMC or CMC) is not determined — and verifies the DMARC enforcement prerequisite (p=quarantine/reject) that mail clients require before displaying a BIMI logo. Returns findings for a missing/malformed record or unmet prerequisites. Use to assess brand-indicator readiness in inboxes. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description explains what is actually validated, the limitation that the certificate type is not determined from the bare a= tag, the DMARC enforcement prerequisite, and that findings cover missing/malformed records or unmet prerequisites. This adds meaningful behavioral context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, starts with the core action and target, and every clause adds value: validation logic, limitation, prerequisite, returned findings, and use case. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations describe safety, the schema fully documents parameters, and an output schema exists, the description provides sufficient behavioral detail: exact record, fields validated, limitation, prerequisite, and outcome types. Nothing critical is missing for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents domain, format, and force_refresh. The description adds domain semantics by specifying the lookup at default._bimi.<domain>, but it does not add further detail on format or force_refresh beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (default._bimi.<domain>), a precise action (check/validate), and the exact fields validated (l= and a=), while also verifying the DMARC prerequisite. This clearly distinguishes it from the many other DNS/record checking siblings like check_dmarc or check_tlsrpt.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use it 'to assess brand-indicator readiness in inboxes' and notes it is 'part of the scan_domain audit,' providing clear context. It does not name alternatives or state when not to use it, but the use case is unambiguous enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_caaARead-onlyIdempotentInspect
Look up CAA records for a domain. Shows which Certificate Authorities are authorized to issue certificates. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds the domain-appropriate semantics (shows which CAs are authorized) but does not elaborate on caching behavior or output format, which would be useful given the force_refresh and format parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence states the action and resource, the second clarifies the result's meaning, and the third positions the tool within the scan_domain audit. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, read-only DNS lookup tool with a fully documented schema, annotations, and an output schema, the description is complete. It covers the tool's purpose and context without needing to explain return values or parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage of all three parameters with descriptions, so the baseline is 3. The tool description does not add extra parameter semantics beyond mentioning 'domain' in prose, but the schema already handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Look up') and identifies the exact resource ('CAA records for a domain'), clearly distinguishing it from sibling check_* tools that target other DNS record types. The added context about Certificate Authorities further clarifies the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by noting it is 'Part of the scan_domain audit,' implying when it fits into a broader workflow. It does not explicitly list exclusions or alternatives, but for a DNS record lookup tool, the record type in the name/description makes the intended usage obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_daneARead-onlyIdempotentInspect
Check DANE/TLSA certificate pinning for SMTP at port 25. Resolves the domain's MX hosts and looks up TLSA records at _25._tcp., verifying whether SMTP mail-server certificates are bound in DNS (DNSSEC-backed protection against CA misissuance and MITM on inbound mail). Use when asked if SMTP connections are protected by DANE/TLSA pinning. For HTTPS DANE at port 443, use check_dane_https instead. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, lowering the bar. The description adds meaningful behavioral context by detailing the MX resolution and TLSA lookup at _25._tcp.<mx-host>, and the DNSSEC-backed verification purpose. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact (four sentences) and front-loaded with the core purpose. Every sentence adds value: functionality, mechanism, usage trigger, alternative tool, and audit context. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the availability of an output schema and annotations, the description covers all necessary aspects: the exact DNS lookup procedure, the security rationale, when to use it, and how it differs from the HTTPS variant. It is complete for a DNS-checking tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds context about the domain parameter (MX hosts, port 25) but does not provide additional syntax or meaning for 'format' or 'force_refresh' beyond what the schema already explains. It is adequate but not enriching.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Check') and resource ('DANE/TLSA certificate pinning for SMTP at port 25'), and distinguishes from the sibling tool check_dane_https by explicitly mentioning port 25 and HTTPS port 443. This makes the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use when asked if SMTP connections are protected by DANE/TLSA pinning' and 'For HTTPS DANE at port 443, use check_dane_https instead.' Also notes it is 'Part of the scan_domain audit,' giving clear context for 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.
check_dane_httpsARead-onlyIdempotentInspect
Verify DANE certificate pinning for HTTPS connections. Looks up TLSA records at _443._tcp.{domain} (port 443) and validates their syntax, usage/selector/matching-type fields and DNSSEC backing. The record is reported as present but UNVERIFIED in every deployment: comparison against the certificate the host actually serves is currently withdrawn because the operator probe vantage cannot observe the origin certificate (finding metadata notAssessedReason probe_vantage_intercepted when the probe is bound), so a stale pin is NOT detected here. Distinct from check_dane which covers SMTP at port 25. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, and the description adds substantial behaior beyond that: every deployment reports the record as 'present but UNVERIFIED', names the root cause (probe vantage cannot observe the origin certificate, notAssessedReason probe_vantage_intercetted), and explicitly states the stale-pin limitation. This is exactly the kind of context annotations cannot convey, and it contradicts nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose and mechanism before the caveats. The third sentence is dense, packing in the UNVERIFIED status, the probe_vantage reason, and the stale-pin warning; every sentence earns its place, though that one could be tightened. No filler anywhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's significant caveat (UNVERIFIED status, no stale-pin detection), the description covers purpose, mechanism, limitation, sibling routing, and audit context. An output schema exists so return-value documentation is not the description's job. Nothing an agent needs to select and invoke this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 per rubric. The description adds only one piece of param meaning beyond the schema: that domain is used to construct the _443._tcp.{domain} DNS lookup name. That is useful but minor; format and force_refresh are already fully documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Verify DANE certificate pinning for HTTPS connections' and 'Looks up TLSA records at _443._tcp.{domain} (port 443)', then names exactly what gets validated (syntax, usage/selector/matching-type fields, DNSSEC backing). It explicitly distinguishes itself from the sibling check_dane by protocol and port, so an agent can tell them apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool (check_dane) and the discriminating condition (SMTP at port 25 vs HTTPS at port 443). Also gives a clear when-not: comparison against the served certificate is withdrawn, so 'a stale pin is NOT detected here'. Stating that it is 'Part of the scan_domain audit' adds invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_dblARead-onlyIdempotentInspect
Check domain reputation against DNS-based Domain Block Lists (Spamhaus DBL, URIBL, SURBL). Returns listing status with decoded return codes.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds that it returns decoded return codes, but does not elaborate on caching, network dependencies, or error scenarios; it meets the reduced bar but adds limited extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, focused sentence that front-loads the core purpose and includes concrete block-list names; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a complete schema, comprehensive annotations, and an output schema, the description sufficiently conveys the tool's scope and result format. It could mention cache behavior or default format, but these are covered by parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The tool description adds no additional parameter-level meaning beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Check'), a resource ('domain reputation against DNS-based Domain Block Lists'), and explicitly lists the lists (Spamhaus DBL, URIBL, SURBL), distinguishing it from sibling checks like check_rbl.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when this tool applies (domain reputation on DBLs) but does not explicitly mention alternatives or exclusion cases, such as when to prefer check_rbl for IP-based lists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_dkimARead-onlyIdempotentInspect
Look up DKIM records for a domain. Probes common selectors, validates the signing algorithm used for outgoing email (RSA-1024/2048, Ed25519), and reports key strength. Use to verify that outbound email signatures are cryptographically sound. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| selector | No | DKIM selector. Omit to probe common ones. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds behavioral context by explaining it probes multiple selectors, validates algorithm strength, and reports key strength, which goes beyond annotation details and helps the agent anticipate multiple DNS queries and analysis. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each adding distinct value: what it does, what it validates, and when to use it. It is front-loaded with the primary verb and object, contains no fluff or redundant phrasing, and is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the schema fully documents parameters and an output schema exists, the description does not need to explain return values. It covers purpose, usage context, and behavioral details (selector probing, algorithm validation, key strength reporting), which is more than sufficient for a read-only DNS checking tool. The description is complete for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% parameter description coverage, so the baseline is 3. The description adds slight meaning about selector behavior ('Probes common selectors') which connects to the optional selector parameter, but it does not elaborate on format or force_refresh beyond what the schema already states. The added value is minimal but not redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up DKIM records for a domain, probes common selectors, validates signing algorithms (RSA-1024/2048, Ed25519), and reports key strength. This distinct purpose differentiates it from sibling tools like check_spf, check_dmarc, and check_mx, and the verb 'look up' combined with the resource 'DKIM records' is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'Use to verify that outbound email signatures are cryptographically sound.' It also notes it is part of the scan_domain audit, giving context for when it might be invoked. However, it does not explicitly state when not to use it or name alternative tools, though the purpose naturally excludes other DNS record checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_dmarcARead-onlyIdempotentInspect
Look up and validate the DMARC record for a domain. Shows the enforcement level (none/quarantine/reject), alignment mode (strict/relaxed), and aggregate/forensic reporting destinations. Use to determine a domain's DMARC enforcement level, whether it sends aggregate reports, or if it is protected against email impersonation — distinct from check_shadow_domains (which checks TLD variants) and assess_spoofability (composite score). Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, idempotentHint, and destructiveHint=false. The description adds value by detailing what the tool shows (enforcement level, alignment mode, reporting destinations), but does not disclose potential error modes or network behavior. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: purpose, outputs, and usage/alternatives. Every sentence contributes new information, and it is front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has robust annotations, full schema coverage, an output schema, and clear sibling context. The description covers purpose, usage, and differentiation, making it complete for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter has a clear description (domain, format, force_refresh). The description does not add extra meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Look up and validate the DMARC record'), clearly states the domain scope, and explicitly distinguishes itself from sibling tools like check_shadow_domains and assess_spoofability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('Use to determine a domain's DMARC enforcement level, whether it sends aggregate reports, or if it is protected against email impersonation') and names alternatives with their focus, providing clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_dnskey_strengthARead-onlyIdempotentInspect
Audit the cryptographic strength of DNSKEY signing algorithms used for DNSSEC. Reports which algorithm is used for DNSSEC signing keys (RSA/SHA-1, RSA/SHA-256, ECDSA P-256, Ed25519, etc.), flags deprecated algorithms (RSA/SHA-1, DSA), independent of whether the DNSSEC chain validates. Use when asked what algorithm is used for DNSSEC signing keys, or if deprecated DNSKEY algorithms are in use. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately reflects the tool's read-only, idempotent nature by using terms like 'audit' and 'reports.' It adds context about being independent of chain validation, but does not elaborate on potential side effects or limitations beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using three sentences to convey purpose, output, independence, and usage. It avoids redundancy and each sentence adds meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, usage, and key behavior, and mentions its position in the scan_domain audit. It does not describe output format or error conditions, but these are not critical for a simple read-only tool with clear schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has full coverage with clear descriptions for each parameter (domain, format, force_refresh). The tool description adds no additional information about these parameters, so it contributes nothing beyond the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: auditing the cryptographic strength of DNSKEY signing algorithms, reporting the algorithm used, and flagging deprecated ones. It also explicitly distinguishes this from DNSSEC chain validation, making its scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage scenarios: 'Use when asked what algorithm is used for DNSKEY signing keys, or if deprecated DNSKEY algorithms are in use.' It also notes the tool is part of a broader audit, giving context on when it might be invoked.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_dnssecARead-onlyIdempotentInspect
Check DNSSEC status for a domain. Verifies whether DNS is tamper-proof and protected against cache poisoning and DNS spoofing attacks by validating DNSKEY and DS records. Reports whether DNSSEC is enabled and validating. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. Description adds specific details about DNSKEY/DS validation and reporting, which goes beyond the basic safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundant information. Clearly structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description fully explains the tool's function and context. Output schema exists, so return values are not required in the description. No missing essential information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have schema descriptions, and the tool description does not add additional semantic meaning beyond what schema already provides. Coverage is 100%, so baseline is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it checks DNSSEC status, verifies tamper-proofness, and validates DNSKEY/DS records. Distinguishes from sibling tools by focusing on DNSSEC status and mentions being part of the scan_domain audit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context as part of scan_domain audit but does not explicitly contrast with alternatives like check_dnssec_chain. However, purpose is clear enough for typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_dnssec_chainARead-onlyIdempotentInspect
Walk the full DNSSEC chain of trust from the DNS root down to the target domain, tracing DS/DNSKEY records and algorithm usage at each zone level. Use when asked to trace the chain of trust from the DNS root, or to see the full DNSSEC delegation path step by step.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety and side-effect behavior. The description adds some context about what it traces (DS/DNSKEY records, algorithm usage) but does not disclose additional behaviors such as caching nuances, rate limits, or what happens if the chain breaks. With annotations present, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the action, and every sentence adds value. It states what the tool does and when to use it without any redundancy or filler. Excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only diagnostic tool with three straightforward parameters, the description is sufficiently complete. It explains the tool's scope and use case, and since an output schema exists, detailed return value explanations are unnecessary. It could be slightly more explicit about the output structure, but the description covers the essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for domain, format (including enum), and force_refresh. The tool description does not add extra meaning beyond the schema—it only mentions 'tracing DS/DNSKEY records,' which is not parameter-specific. Given high schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Walk the full DNSSEC chain of trust from the DNS root down to the target domain') and clearly distinguishes from sibling tools like check_dnssec by focusing on the complete chain tracing behavior. It explicitly mentions tracing DS/DNSKEY records and algorithm usage, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear when-to-use guidance: 'Use when asked to trace the chain of trust from the DNS root, or to see the full DNSSEC delegation path step by step.' However, it does not explicitly note when not to use it or contrast with simpler alternatives like check_dnssec, leaving some ambiguity for an agent choosing between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_fast_fluxARead-onlyIdempotentInspect
Detect fast-flux DNS behavior: performs multiple rounds of A/AAAA queries and checks whether IP addresses are rotating rapidly on each DNS query (a sign of botnet or malicious infrastructure). Compares IP answer sets and TTLs across rounds to identify rapidly rotating infrastructure used to hide malicious activity.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| rounds | No | Number of query rounds (3-5, default 3). | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds behavioral context by explaining the multi-round query process and what it compares (IP answer sets and TTLs), which goes beyond the annotations. It does not mention rate limits or caching behavior, but the force_refresh parameter hints at caching.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose and then explaining the method. It is concise and avoids fluff, though the second sentence somewhat repeats the first. No wasted words, but could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 params, output schema present), the description covers the core behavior and purpose. The output schema exists, so return values are documented elsewhere. The description could mention caching behavior or rate limits, but the annotations and schema cover most needs. It is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds context about the overall purpose but does not add new meaning to individual parameters beyond what the schema provides. The description mentions 'multiple rounds' which aligns with the 'rounds' parameter, but the schema already explains that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool detects fast-flux DNS behavior by performing multiple rounds of A/AAAA queries and checking for rapid IP rotation and TTL changes. It explicitly names the resource (domain) and the specific behavior (fast-flux), distinguishing it from sibling DNS check tools like check_mx or check_spf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the method (multiple query rounds, comparing IP sets and TTLs) and the purpose (identifying botnet/malicious infrastructure), which implies when to use it. However, it does not explicitly state when not to use it or mention alternatives, though the sibling list shows many other DNS checks that could be alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_http_securityARead-onlyIdempotentInspect
Audit a domain's browser-facing HTTP security headers over HTTPS. Inspects Content-Security-Policy (flagging unsafe-inline/unsafe-eval/wildcards), X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, and the cross-origin isolation headers (COOP/COEP/CORP), and detects CDN/WAF interception. Returns per-header findings for missing or weak protections against XSS, clickjacking, and cross-origin attacks. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint: true, destructiveHint: false) already disclose the tool's non-destructive, read-only nature. The description adds behavioral details beyond annotations by specifying that it detects CDN/WAF interception, flags missing or weak protections against XSS/clickjacking/cross-origin attacks, and returns per-header findings. This enriches the agent's understanding without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and packed with specific details (headers, weakness types, CDN/WAF). Every word earns its place; no fluff or redundancy. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key behavior: what headers are checked, what weaknesses are flagged, and what is returned. It also mentions CDN/WAF detection. The presence of an output schema reduces the need to describe return format. It does not mention prerequisites (e.g., HTTPS availability) or edge cases, but for a read-only audit tool with good annotations, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (domain, format, force_refresh) already described in the schema. The tool description does not add any additional parameter-level meaning beyond what the schema provides. It doesn't compensate with extra details, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool audits a domain's browser-facing HTTP security headers over HTTPS, lists specific headers and what it flags (unsafe-inline/unsafe-eval/wildcards, etc.), and indicates it returns per-header findings. This distinguishes it from sibling tools like check_ssl or check_mx by focusing on security headers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes 'Part of the scan_domain audit', providing context that it's a component of a broader audit. It doesn't explicitly state when to use this tool over alternatives or when not to use it, but the specific scope (HTTP security headers) implies its role. No explicit exclusions are given, but the context is clear enough for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_lookalikesARead-onlyIdempotentInspect
Detect active typosquat and lookalike/homoglyph domains that impersonate your brand and could be used in phishing. Identifies character-substitution and visual-confusion domains registered by attackers. Distinct from check_shadow_domains (TLD variants with auth gaps) and discover_brand_domains (legitimate brand portfolio).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint, openWorldHint, idempotentHint, and harmless, which cover the safety profile. The description adds that it detects 'active' domains, implying a live scan or freshness aspect, and mentions the type of registrations (by attackers). It does not detail output structure, but with annotations covering safety and the description adding scope, this is strong; minus one for not describing the return format or any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a concise two-sentence block: first sentence defines the tool's function and use case, second sentence differentiates from key siblings. No filler; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a clear, narrow scope with a detailed input schema and an output schema (not shown but noted). The description covers the purpose, use context, and differentiation from two key siblings. It could mention what the output looks like (e.g., list of domains) but the output schema likely covers that, and the description is sufficient for a straightforward scan tool with rich annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are well-described in the schema. The description adds a semantic focus on impersonation and 'active' domains, which reinforces the domain parameter's purpose, but does not add new syntax or format details beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool detects active typosquat and lookalike/homoglyph domains that impersonate a brand, with specific examples of character-substitution and visual-confusion. It explicitly distinguishes from siblings check_shadow_domains and discover_brand_domains, meeting the high bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use context: for detecting impersonation domains used in phishing. It names two specific sibling tools and how they differ, giving clear guidance on when not to use this tool (e.g., for TLD variants with auth gaps or legitimate portfolio discovery).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_mta_stsARead-onlyIdempotentInspect
Check whether a domain enforces SMTP TLS for inbound mail via MTA-STS, protecting against downgrade attacks. Queries _mta-sts. and fetches the policy file, reports mode (enforce/testing/none) and MX coverage. Use to verify whether inbound SMTP is protected against TLS downgrade or MITM — distinct from check_dane which uses TLSA pinning. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and idempotentHint=true, and description augments with concrete behavior: queries `_mta-sts.<domain>`, fetches policy file, reports mode and MX coverage. Says 'only' for current policy fetch, transparent about scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences are well-structured, opening with the purpose, then mechanics, then usage guidance and sibling distinction. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-only DNS check with schema coverage and annotations, the description fully covers what is checked, why, how to contrast with related tools, and context within scan_domain audit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already describes all three parameters at 100% coverage. Description does not add substantial parameter-level meaning beyond what schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it checks MTA-STS for inbound SMTP TLS enforcement, specific verb 'check' with resource (_mta-sts DNS record and policy file), and distinct from check_dane. It reports mode and MX coverage, so highly specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states use case: 'Use to verify whether inbound SMTP is protected against TLS downgrade or MITM' and calls out the alternative check_dane using TLSA pinning, clearly distinguishing when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_mxARead-onlyIdempotentInspect
Look up MX records for a domain. Identifies which mail servers receive inbound email for the domain and which email hosting provider is used (Google Workspace, Microsoft 365, Proofpoint, etc.). Use when asked which email provider hosts inbound mail for a domain, or to see MX record configuration. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds behavioral context by explaining the tool identifies mail servers and provider, and references its role in scan_domain audit. It does not disclose additional operational details like caching behavior or freshness semantics (though the force_refresh parameter implies caching), but given the strong annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences with no fluff. It front-loads the purpose, then provides usage guidance, then contextual placement. Every sentence earns its place, and it is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and comprehensive annotations, the description is complete for a simple DNS lookup. It explains the core function and when to use it. It could mention edge cases like missing MX records, but that is not essential given the schema and audit context. Overall, it adequately covers the necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (domain, format, force_refresh) are already well-described in the schema. The description adds minimal parameter-specific value; it only indirectly refers to domain. With full schema coverage, the baseline is 3, and the description does not surpass that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action (look up MX records) and the resource (domain), and further explains what it reveals (mail servers and email provider). It also distinguishes itself from sibling DNS check tools like check_spf and check_dmarc by specifying its unique output. The mention of being part of scan_domain audit adds context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use when asked which email provider hosts inbound mail for a domain, or to see MX record configuration.' This gives clear use cases. However, it does not mention when not to use it or list alternative tools for comparison, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_mx_reputationARead-onlyIdempotentInspect
Check whether the mail server (MX) IP addresses are listed on spam blocklists (Spamhaus, Barracuda, SORBS, and other RBLs). Also verifies reverse DNS for MX hosts. Use when you want to know if your mail server IP is blacklisted, or if your MX is on any blocklist — distinct from check_rbl which checks a specific IP directly.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds context about what is checked (RBLs and reverse DNS) and notes the distinction from check_rbl. With annotations present, this is more than sufficient, though it doesn't describe output format or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, both informative and front-loaded. The first sentence states the core purpose, the second adds usage guidance and sibling differentiation. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and the tool is read-only with idempotent hints, the description covers the essential context: purpose, usage, and differentiation. It doesn't mention potential caveats like cache behavior (though force_refresh is in the schema), but for a simple read-only check, this is adequate and slightly above minimal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, and all parameters (domain, format, force_refresh) are already well-described in the schema. The description adds no additional meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks MX IP addresses against spam blocklists (Spamhaus, Barracuda, SORBS) and verifies reverse DNS. It explicitly distinguishes from check_rbl, which checks a specific IP directly, providing clear differentiation from a closely related sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance ('Use when you want to know if your mail server IP is blacklisted, or if your MX is on any blocklist') and names an alternative tool (check_rbl) with a clear distinction. This fully satisfies the criteria for usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_nsARead-onlyIdempotentInspect
Audit a domain’s nameserver delegation and redundancy. Identifies the DNS hosting provider and, when the infrastructure probe is available, directly compares parent and child NS sets, verifies authoritative AA responses, and checks required glue addresses. Use to detect stale registrar delegations, lame nameservers, and intermittent resolution risk. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive. The description adds valuable behavioral details beyond annotations: compares parent/child NS sets, verifies AA responses, checks glue, and notes the 'infrastructure probe' availability condition. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each packed with relevant information. Front-loaded with purpose, then specifics, then context. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderately complex tool, the description covers the audit goal, the specific checks performed, the conditional probe dependency, and the typical failure modes detected. Output schema exists so return details are covered there. The mention of 'Part of the scan_domain audit' provides integration context. Slight gap: does not explain how results are returned (e.g., structured vs. textual), but output schema compensates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with meaningful descriptions (domain example, format enum, force_refresh purpose). Description adds no extra parameter semantics beyond schema, which is acceptable given the high coverage. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Audit a domain's nameserver delegation and redundancy' – specific verb and resource, and distinguishes from sibling DNS check tools (e.g., check_mx, check_spf) by focusing on NS delegation, AA responses, and glue. The additional use cases (detect stale delegations, lame nameservers) reinforce purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases: 'detect stale registrar delegations, lame nameservers, and intermittent resolution risk.' Mentions it's part of scan_domain audit, giving context. However, it doesn't explicitly state when NOT to use it (e.g., for non-NS checks) or name alternatives, so it's slightly below exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_nsec_walkabilityARead-onlyIdempotentInspect
Assess zone walkability risk by analyzing NSEC3PARAM configuration. Detects plain NSEC zones, weak NSEC3 parameters, and opt-out flags.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral detail by revealing exactly what configurations will be flagged (plain NSEC zones, weak NSEC3 params, opt-out flags), going beyond generic labels.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no wasted words. The first sentence states the primary purpose, and the second enumerates the detected conditions, making the tool's scope immediately obvious.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, annotations, and full parameter descriptions, the description is sufficiently complete for this moderately complex check. It could improve by explicitly contrasting with related DNS security checks (e.g., check_dnssec, check_dnssec_chain), but the current content is enough for an agent to evaluate usefulness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with each parameter documented (domain, format, force_refresh). The description adds no additional parameter nuance, but it does not need to because the schema already provides clear meaning for all three fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: "Assess zone walkability risk by analyzing NSEC3PARAM configuration." It then names discrete detection targets—plain NSEC zones, weak NSEC3 parameters, and opt-out flags—which differentiates it from broader DNS-related sibling tools like check_dnssec or check_dnskey_strength.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear functional context: this tool is for NSEC/NSEC3 walkability and DNSSEC configuration detail. It does not explicitly name alternatives, but the specificity of the risk target implies when the tool should be used versus general DNS checkers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ptrARead-onlyIdempotentInspect
Verify forward-confirmed reverse DNS (PTR/FCrDNS) for mail servers. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the description does not need to restate safety. The description complements these by clarifying the tool targets mail servers and is part of an audit workflow, though it could have mentioned caching behavior (force_refresh) or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, with the core purpose immediately front-loaded in the first sentence and additional audit context in the second. Every word earns its place; no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple DNS lookup tool with a clear schema and an output schema available, the description is adequately complete. It clearly identifies the tool's domain (mail servers) and place in the audit, though it could briefly mention that force_refresh invalidates cache to set expectations about response freshness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for each parameter (e.g., domain, format, force_refresh). The description adds no additional context beyond what the schema supplies, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Verify') and resource ('forward-confirmed reverse DNS (PTR/FCrDNS) for mail servers'). It distinguishes from numerous check_* siblings by naming the exact DNS record type and use case. The phrase 'Part of the scan_domain audit' adds scoping context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus the many sibling tools like check_mx or check_spf. The only contextual hint is 'Part of the scan_domain audit,' but there is no explicit 'use when' or comparison to alternatives, leaving the agent to guess when this specific check is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_rblARead-onlyIdempotentInspect
Check MX server IP reputation against 6 DNS-based Real-time Blocklists (SpamCop, UCEProtect, Mailspike, Barracuda, PSBL). Resolves MX hosts to IPs first.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it resolves MX hosts to IPs first and checks six named blocklists, which helps the agent anticipate the operation's flow and scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action and key scope ('MX server IP reputation', the six blocklists) are front-loaded, and the resolution behavior is stated succinctly in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich output schema, full parameter documentation, and safety-relevant annotations, the description covers the essentials for correct invocation. The only noticeable gap is the lack of guidance distinguishing this tool from the similarly named check_mx_reputation and check_dbl siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents domain, format, and force_refresh well. The description adds no extra parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Check MX server IP reputation') and names the exact six blocklists involved. It is clear about the tool's function, though it does not explicitly name sibling tools like check_dbl or check_mx_reputation to draw a distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but gives no guidance on when to choose it over similar siblings such as check_dbl, check_mx_reputation, or check_realtime_threat_feed. No exclusions, alternatives, or situational cues are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_realtime_threat_feedARead-onlyIdempotentInspect
Check a domain against BlackVeil real-time threat intelligence (curated intel-gateway feed). Distinct from DNSBL checks. Operator-deploy only; degrades to info when unprovisioned.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, establishing a safe read operation. The description adds valuable behavioral detail beyond annotations: the tool is operator-deploy only and degrades to info when unprovisioned, explaining a failure mode. This is meaningful additional context without contradicting anything.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the primary purpose, followed by a differentiation note and deployment context. Every word earns its place—no redundancy or filler. Ideal structure for quickly orienting an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (domain check) with rich annotations, full parameter documentation, and an output schema existing. The description covers key differentiators (realtime, curated, not DNSBL) and failure behavior (degrade to info). It could mention specific use cases or output expectations, but given the simplicity and available structured data, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and each parameter already has a clear description (domain, format with enum, force_refresh). The tool description itself doesn't add any extra parameter meaning beyond what's in the schema, so the baseline 3 for high coverage applies. No new information about parameter usage or format is provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Check a domain against BlackVeil real-time threat intelligence') with a specific resource (curated intel-gateway feed). It explicitly distinguishes from DNSBL checks, which separates it from siblings like check_dbl and check_rbl, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides context by stating it's distinct from DNSBL checks and indicates deployment constraints ('Operator-deploy only; degrades to info when unprovisioned'). While it doesn't explicitly list alternative tools for specific scenarios, the distinction from DNSBL checks gives a clear when-not-to-use signal. More explicit exclusions would elevate it to 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_resolver_consistencyARead-onlyIdempotentInspect
Check DNS consistency across 4 public resolvers.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| record_type | No | Record type. Omit for A/AAAA/MX/TXT/NS. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds that exactly 4 public resolvers are used. However, it does not explain what 'consistency' means in terms of output or behavior (e.g., whether it reports mismatches only, or includes details).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that is front-loaded and contains no wasted words. It conveys the core function quickly and clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description should hint at what the result looks like, but it does not. The tool is simple and annotations cover safety, but the lack of return-value context leaves a gap for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; each parameter already has a description. The tool description adds no additional parameter semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and clearly identifies the resource ('DNS consistency across 4 public resolvers'). It distinguishes this tool from sibling DNS-checking tools like check_dnssec or check_ns by focusing on cross-resolver consistency.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when DNS consistency across public resolvers is needed, but it does not explicitly state when to choose this tool over alternatives or when not to use it. No exclusions or alternative-recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_root_server_setARead-onlyIdempotentInspect
Check the DNS root server set against official root hints, root glue, delegation, serial, and DNSKEY cross-root evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output verbosity. Auto-detected if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds specific context about what evidence is checked (root hints, glue, delegation, serial, DNSKEY cross-root). However, it does not describe output format, failure behaviors, or any further implications. With annotations covering safety, the description adds modest value but not extensive behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that conveys the core purpose without verbose or redundant language. Every word adds value, and it is front-loaded with the action and subject.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (1 optional parameter, full schema coverage, output schema present, and read-only annotations), the description covers the main function. However, it lacks usage guidance and does not elaborate on the evidence types beyond listing them, which might leave some ambiguity about how 'cross-root evidence' is interpreted. Since the output schema exists and annotations cover side effects, this is adequate but not exceptional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for the single parameter 'format', including an enum and description 'Output verbosity. Auto-detected if omitted.' The tool description does not mention this parameter, so it adds no additional meaning beyond the schema. Baseline 3 is appropriate since the schema fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Check the DNS root server set against official root hints, root glue, delegation, serial, and DNSKEY cross-root evidence.' It uses a specific verb (Check) and resource (DNS root server set) and specifies exactly what it validates against. This distinguishes it from sibling tools like check_ns, check_dnssec, etc., which focus on different DNS aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, context, or contrast with sibling tools. For example, it doesn't say 'Use this when verifying root server consistency' or 'For other DNS checks, see check_ns.' The agent is left to infer usage entirely from the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_shadow_domainsARead-onlyIdempotentInspect
Find alternate TLD variants of a domain (e.g. example.net, example.co) that have weak or missing email authentication and could be used to spoof email. Use when asked about TLD variants with email auth gaps — distinct from check_lookalikes which detects typosquat/homoglyph impersonation domains.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the description doesn't need to repeat them. It adds that the tool flags weak/missing email auth for spoofing, which is useful context. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action and immediately followed by usage guidance. Zero wasted words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and good annotations, the description covers the core purpose and distinction from sibling tools. It doesn't explain return values (output schema handles that) or edge cases, but for a check tool this is sufficiently complete. Could mention limits like scope of TLDs, but not necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes all three parameters (domain, format, force_refresh). The description doesn't add parameter-specific meaning beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Find'), resource ('alternate TLD variants of a domain'), and purpose (weak/missing email auth for spoofing), and explicitly distinguishes from check_lookalikes, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear guidance: 'Use when asked about TLD variants with email auth gaps' and contrasts with check_lookalikes, which is a concrete alternative. This tells the agent exactly when to use and when to avoid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_spfARead-onlyIdempotentInspect
Look up and validate the SPF record for a domain. Lists all IP addresses and third-party senders authorised to send email on behalf of the domain, flags syntax errors, and shows the trust surface (which mail servers are whitelisted). Use when you need to know who is permitted to send email as a domain. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is read-only, idempotent, open-world, and not destructive, so there is no contradiction. The description adds useful non-obvious behavior beyond those annotations, such as flagging syntax errors and enumerating the 'trust surface'. It stops short of describing cache semantics in prose, but the schema already covers force_refresh.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with the first sentence giving the action and resource and the following sentences adding only high-value context: what it returns, whether it detects errors, and when to choose it. There is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema, clear annotations, and only three parameters, the description fully supports selection and invocation. It covers purpose, result semantics, syntax validation, and workflow context. The expected response format does not need to be in prose because an output schema is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents domain, format, and force_refresh, including defaults and intended use. The description adds no parameter-specific information beyond the output-level concept of validation, which matches the baseline of 3 for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific action and resource: 'Look up and validate the SPF record for a domain.' It then clarifies what the tool provides beyond the name—listing authorized IPs, flagging syntax errors, and showing the trust surface—making it easy to distinguish from siblings like check_mx, check_dmarc, and check_dkim.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage trigger: 'Use when you need to know who is permitted to send email as a domain.' It also situates the tool within the broader scan_domain audit, providing enough context for selection, though it does not explicitly call out alternatives or when-not-to-use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_srvARead-onlyIdempotentInspect
Map a domain's DNS-visible service footprint by probing 19 common SRV record prefixes (email, calendar, messaging, directory, web) in parallel. Returns discovered services and flags insecure service advertisements — e.g. plaintext IMAP/POP3/LDAP without an encrypted variant. A domain with no matches among the probed prefixes is not proof the domain has no services at all. Use when asked to map DNS-visible services or flag insecure service advertisements.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the bar for additional disclosure is lower. The description still adds meaningful behavioral context: parallel probing of 19 prefixes, flagging insecure plaintext services, and the no-match caveat. This goes beyond what the annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three dense sentences with no filler. The first front-loads the action and scope, the second explains outputs and flagging behavior, and the third provides an important caveat plus usage guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent tool with full schema coverage and an output schema, the description is complete. It covers what is probed, what is returned, how to interpret negative results, and when to use the tool. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter (domain, format, force_refresh) is documented in the schema. The description does not add parameter-specific meaning, but it doesn't need to because the schema carries the load. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Map') and a precise resource ('a domain's DNS-visible service footprint'), then names the 19 SRV prefixes and what the tool returns. This differentiates it from siblings like check_svcb_https, which targets a different record type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: 'Use when asked to map DNS-visible services or flag insecure service advertisements.' It also adds a valuable interpretation caveat about empty results not proving absence of services. It does not name sibling alternatives or explicit exclusions, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_sslARead-onlyIdempotentInspect
Check the HTTPS/TLS posture of a domain: HTTPS reachability, HSTS policy, and HTTP-to-HTTPS redirect. Also returns certificate metadata (issuer, expiry date, days remaining, SAN count) read from public Certificate Transparency logs — this describes the most recently LOGGED certificate, which may differ from the one currently served. Origin TLS protocol support and cipher suites are not assessed; legacy-TLS detection is withdrawn because the probe cannot observe the origin handshake. Use to verify HTTPS/HSTS configuration and certificate issuer/expiry. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds vital behavioral context beyond that: certificate data comes from public CT logs and 'may differ from the one currently served', and legacy-TLS detection was withdrawn because the probe cannot observe the origin handshake. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the core purpose, followed by caveats and usage. Every sentence contributes; 'Part of the scan_domain audit' is minor but useful context. Not maximally concise, but well structured and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only check with an output schema present, the description covers the behavior, limitations, data-source caveat, and intended use thoroughly. It leaves no critical ambiguity about what the tool can or cannot do.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The description itself does not elaborate on parameter meanings, but the schema already documents domain, format, and force_refresh adequately. The description adds no extra param-specific nuance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Check the HTTPS/TLS posture of a domain' and enumerates concrete checks (HTTPS reachability, HSTS policy, HTTP-to-HTTPS redirect, certificate metadata). It also differentiates from siblings by explicitly listing what it does NOT assess (origin TLS protocol support, cipher suites, legacy TLS).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use context: 'Use to verify HTTPS/HSTS configuration and certificate issuer/expiry.' It also states limitations that imply when not to use it, such as 'Origin TLS protocol support and cipher suites are not assessed.' However, it does not name specific alternative tools for those excluded checks, so guidance is not fully routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_subdomailingARead-onlyIdempotentInspect
Detect SubdoMailing risk: analyzes the SPF include chain for dangling or hijackable subdomains that could let an attacker send email as the domain. Use when you want to know if an SPF include chain can be hijacked through a dangling domain, or to detect subdomain mailing risk hidden in SPF includes. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true, destructiveHint false, and idempotentHint true, covering the safety profile. The description adds that it analyzes the SPF include chain, which is useful behavioral context beyond annotations. No additional side effects or operational traits are disclosed, but with strong annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and contains no filler. Every word adds value, efficiently conveying what, when, and the parent context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% parameter coverage, the description needs only to clarify the tool's niche and usage context, which it does. It might have mentioned cache behavior or return format, but those are covered by the schema and annotations. Overall, it's sufficiently complete for this simple read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters (domain, format, force_refresh) are already well-documented with descriptions in the schema. The tool description adds no additional parameter meaning, matching the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Detect' and clearly states the resource: 'SubdoMailing risk' through analysis of the SPF include chain. It differentiates from siblings by focusing on dangling/hijackable subdomains in SPF includes, distinct from tools like check_subdomain_takeover or resolve_spf_chain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use scenarios: 'Use when you want to know if an SPF include chain can be hijacked through a dangling domain, or to detect subdomain mailing risk hidden in SPF includes.' It also notes it's part of the scan_domain audit, giving context, though it doesn't explicitly mention alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_subdomain_takeoverARead-onlyIdempotentInspect
Sweep subdomains for dangling CNAMEs pointing to deprovisioned cloud services that could be claimed by an attacker (subdomain takeover vulnerabilities). Detects 16 provider families (AWS S3/CloudFront, Azure Front Door/CDN/Blob/App Service, GCP Cloud Storage, Heroku, GitHub Pages, Vercel, Firebase, Shopify, etc.). Use when asked if subdomains are pointing to deprovisioned cloud services. Pair with discover_subdomains to widen the candidate set — note that returns a CT sample, not a full inventory.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com). | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| subdomains | No | Optional explicit subdomain list (full FQDNs or short labels). When provided (deduped, capped at 1000), this list is swept instead of the 15-name built-in. Source from Certificate-Transparency enumeration or brand-audit discovery. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive). The description adds concrete scope detail ('16 provider families' and lists them) and warns that discover_subdomains returns only a CT sample, not a full inventory. This is additive context, though it doesn't disclose the default 15-name built-in sweep (which is documented in the schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: the first states the core purpose, the second lists coverage, the third gives usage and pairing guidance. No filler or redundant repetition; each sentence contributes meaningfully.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, output schema, and annotations, the description covers the key facts an agent needs: what the tool does, when to invoke it, and a caveat about widening the candidate set. The default 15-name sweep is documented under the subdomains parameter, so it need not be repeated. The description is complete for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters are fully described in the input schema (100% coverage). The description itself does not add parameter-level semantics beyond the schema—its extra notes about provider families and pairing are about output scope and workflow, not parameter meaning. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Sweep subdomains for dangling CNAMEs pointing to deprovisioned cloud services that could be claimed by an attacker,' clearly stating the verb, resource, and vulnerability. It lists provider families, distinguishing it from sibling DNS checks like check_mx or check_spf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use when asked if subdomains are pointing to deprovisioned cloud services' and gives a complementary action with 'Pair with discover_subdomains to widen the candidate set.' This provides clear when-to-use context and an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_svcb_httpsARead-onlyIdempotentInspect
Validate HTTPS/SVCB records (RFC 9460) for modern transport capability advertisement. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is established. The description adds context about the RFC and audit role, but it does not go beyond annotations or reveal additional behaviors such as cache behavior, though schema documents force_refresh. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, direct sentences clearly state what the tool does and where it belongs. Every word earns its place, with no unnecessary technical filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and full schema coverage for parameters, the description only needs to fill the purpose and context gap, and it does. It clearly identifies the subject, standard, and audit context, making the tool adequately complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are fully documented by the schema. The description does not add meaning beyond the schema for domain, format, or force_refresh; it only frames the overall purpose of the check rather than enriching parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Validate'), names the exact resource ('HTTPS/SVCB records (RFC 9460)'), and states its purpose ('modern transport capability advertisement'). This clearly distinguishes it from sibling checks like check_dane_https or check_ssl while staying focused.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context by noting it is 'Part of the scan_domain audit,' placing it within a defined workflow. It does not explicitly call out alternatives or when not to use it, but the RFC scoping and audit context provide enough situational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_tlsrptARead-onlyIdempotentInspect
Check whether a domain has SMTP TLS Reporting (TLS-RPT) configured. Queries _smtp._tls. for the v=TLSRPTv1 record and validates its reporting destination (rua= mailto:/https:), flagging a missing record, duplicate records, or an invalid/absent reporting URI. Complements MTA-STS by giving visibility into TLS delivery failures. Part of the scan_domain audit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive behavior. The description adds specific behavioral details: the DNS query, validation of rua= and https: destinations, flagging missing/duplicate/invalid records. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences that are information-dense with no fluff. Front-loaded with purpose, then method, then context. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers purpose, DNS query, validation logic, and its role in the audit. An output schema exists, so return values need no explanation. This is complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have schema descriptions (100% coverage). The description adds context about the domain used in the DNS query but doesn't elaborate on format or force_refresh, which are already well-documented in the schema. Meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks for SMTP TLS Reporting (TLS-RPT) configuration, queries the specific DNS record, and validates the reporting destination. It distinguishes itself from sibling DNS-check tools by focusing on a specific record type and mentions its complementary role to MTA-STS.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it complements MTA-STS and is part of the scan_domain audit, implying when to use it. It does not explicitly list when not to use it or name alternative tools, but the implication is strong enough for a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_txt_hygieneARead-onlyIdempotentInspect
Audit TXT records for stale entries and SaaS exposure.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, establishing a safe read-only profile. The description adds context about what the audit checks for (stale entries, SaaS exposure) but does not disclose additional behavioral traits such as caching behavior, rate limits, or data sources.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, 10-word sentence that is front-loaded and contains no redundant information. Every word contributes to conveying the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of this read-only audit tool, the combination of a concise description, comprehensive parameter schema, and full annotation coverage provides sufficient context. The description does not explain the exact criteria for 'stale' or 'SaaS exposure', but the output schema likely covers results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter having a descriptive explanation (domain, format, force_refresh). The description does not need to compensate for missing schema information, and the schema fully documents parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Audit') and resource ('TXT records'), and specifies the focus ('stale entries and SaaS exposure'). This differentiates it from sibling tools like check_spf or check_zone_hygiene, which target other record types or broader zone hygiene.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for auditing TXT records but does not explicitly state when to use it over alternatives or when not to use it. No exclusions or alternative tool references are provided, leaving usage context to the user's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_zone_hygieneARead-onlyIdempotentInspect
Audit DNS zone hygiene: identifies sensitive or forgotten subdomains exposed in DNS, stale SOA records, and zone propagation issues. Use to find any sensitive subdomains that should not be publicly visible, or to audit overall DNS zone cleanliness.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare the tool as read-only, open-world, idempotent, and non-destructive. The description adds no further behavioral details, such as side effects (e.g., network requests) or failure modes. It aligns with annotations but does not enhance transparency beyond what is already provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences with no redundancy. It efficiently states the action ('Audit DNS zone hygiene'), the specific checks performed, and the intended usage. The structure is clear and directly to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only audit tool, the description is adequately complete. It covers the core functionality, key findings, and usage scenarios. It does not detail output format or limitations, but these are likely straightforward for a check tool and can be inferred. The description gives enough context for an agent to decide when and how to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (domain, format, force_refresh) are fully described in the schema with clear meanings (e.g., format: 'Output verbosity'). The tool description does not elaborate on these, such as what 'full' vs 'compact' output entails or when to use force_refresh. Since schema coverage is 100%, the description adds no extra parameter clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: auditing DNS zone hygiene. It specifies the types of issues it identifies (sensitive subdomains, stale SOA records, zone propagation issues) and mentions a specific use case (finding unintended public subdomains). This distinguishes it from sibling tools that focus on narrower checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage directive: 'Use to find any sensitive subdomains that should not be publicly visible, or to audit overall DNS zone cleanliness.' This tells the agent when to invoke the tool. It does not explicitly contrast with alternatives, but the scoped purpose is sufficient for typical decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_baselineARead-onlyIdempotentInspect
Compare a domain's current security configuration against a fixed policy baseline to determine compliance. Use to check whether a domain meets a policy requirement — not for tracking improvement/regression over time (use analyze_drift) and not for comparing multiple domains (use compare_domains).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to scan and compare. | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| baseline | Yes | Policy/requirements baseline OBJECT for compliance enforcement — "does this domain meet these required controls?" (grade/score floors, require_* flags, max_*_findings). NOT a prior scan. For drift-over-time vs a previous ScanScore (or the literal "cached"), use analyze_drift instead. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful semantic context by defining 'fixed policy baseline' (compliance requirements) and excluding drift/regression analysis, which prevents misuse and clarifies the tool's scope. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action ('Compare...'), followed immediately by usage guidance with alternative tool names. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a nested baseline object and no output schema, but the description plus rich schema provide sufficient context for selection and invocation: it explains the compliance purpose, explicitly excludes drift and multi-domain comparison, and the schema fully documents parameters. A minor gap is not describing the output format, but this is partially mitigated by the 'format' parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so domain, baseline (including all nested require_* flags, max_* fields, grade/score floors), format, and force_refresh are fully documented. The description text does not add parameter-level detail, but the schema carries the burden, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource+outcome: 'Compare a domain's current security configuration against a fixed policy baseline to determine compliance.' It also distinguishes from sibling tools by explicitly naming analyze_drift and compare_domains for other use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and when-not-to-use guidance is provided: 'Use to check whether a domain meets a policy requirement — not for tracking improvement/regression over time (use analyze_drift) and not for comparing multiple domains (use compare_domains).' The schema's baseline description reinforces this by clarifying the baseline is a policy object, not a prior scan.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_domainsARead-onlyIdempotentInspect
Side-by-side security comparison of 2–5 domains. Shows relative scores, category gaps, and unique weaknesses for each domain. Use when comparing your security posture against a competitor, or doing a head-to-head comparison between multiple domains.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output verbosity. Auto-detected if omitted. | |
| domains | Yes | Domains to compare (2–5 domains) | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description need not repeat safety traits. It adds output details (relative scores, gaps, weaknesses) but does not disclose behavioral traits like caching, rate limits, or side effects. This matches the baseline for a description that adds some value without rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with purpose, then output details, then usage guidance. Every sentence earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must partially explain return values. It does mention 'relative scores, category gaps, and unique weaknesses,' which is a useful summary, though not exhaustive. Annotations cover safety, and schema covers parameters. It is adequately complete for a comparison tool, but lacks a precise output format description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add meaning beyond the schema for domains, format, or force_refresh. The only implied semantic is the 2–5 domain limit, which is already in the schema. No compensation needed, so baseline holds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('comparison') and resource ('domains'), and specifies output: 'relative scores, category gaps, and unique weaknesses.' This distinguishes it from sibling tools like compare_baseline, which likely compares against a baseline rather than other domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage context is provided: 'Use when comparing your security posture against a competitor, or doing a head-to-head comparison between multiple domains.' However, it does not mention alternatives or when not to use it, so it falls short of the highest score requiring explicit when-not/alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cymru_asnARead-onlyIdempotentInspect
Map domain IPs to Autonomous System Numbers via Team Cymru DNS. Returns ASN, prefix, country, registry, and organization for each IP. Flags high-risk hosting ASNs.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safe/read-only nature is established. The description adds useful context beyond annotations: it mentions the use of Team Cymru DNS and the high-risk ASN flagging behavior. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and each sentence adds value—first states the function, second details output and a special feature. No redundant information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a complete schema, annotations, and an output schema, the description is sufficient. It covers purpose, output details, and a unique capability, making it complete for the tool's complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for all three parameters (domain, format, force_refresh). The description does not elaborate on parameter usage, but since the schema fully documents each parameter, the baseline is 3. It does not add extra meaning, but it also does not need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the core function: 'Map domain IPs to Autonomous System Numbers via Team Cymru DNS.' It also lists specific outputs (ASN, prefix, country, registry, organization) and an added feature (flags high-risk hosting ASNs). This is distinct from all sibling tools, which focus on other DNS/security checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (for ASN lookup) but does not explicitly state when to use it instead of alternatives or mention any exclusion conditions. Given the sibling list, no other tool performs ASN mapping, so the context is somewhat clear, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_brand_audit_watchADestructiveIdempotentInspect
Permanently removes a recurring brand-audit watch by watchId. Owner-scoped — a watchId owned by another principal surfaces as notFound. Returns confirmation of deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | Watch ID returned by register_brand_audit_watch. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds permanent deletion semantics, ownership scoping, the notFound response for other principals, and confirmation of deletion. This gives the agent a full picture of side effects and error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action, and every clause adds value—permanence, owner scoping, notFound behavior, and deletion confirmation. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with strong annotations and an output schema, the description covers the essential action, the permission/ownership model, the error case, and the return value. It is self-sufficient in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description ('Watch ID returned by register_brand_audit_watch') is already helpful. The tool description additionally clarifies that the watchId must be owned by the caller, adding an ownership constraint that is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Permanently removes a recurring brand-audit watch by watchId,' which is a specific verb (removes) and resource (recurring brand-audit watch). It clearly distinguishes from sibling tools like register_brand_audit_watch and list_brand_audit_watches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when this tool applies (deleting a watch owned by the caller) and includes the owner-scoped caveat with notFound behavior. It doesn't explicitly mention alternatives or exclusions, but the purpose is so distinct that usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_brand_domainsARead-onlyIdempotentInspect
Discover all domains that belong to a brand's portfolio by aggregating certificate, DNS, redirect, and mail-policy signals. Use when asked what domains are part of a brand portfolio, or to find all domains related to a brand. Pass the EXACT seed domain verbatim — do NOT normalize or substitute a canonical domain.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Discovery depth. standard is default; deep expands candidate seeding and enrichment fanout. | |
| domain | Yes | The exact seed domain to expand, scanned verbatim (e.g., example.com). Do NOT normalize, resolve, or substitute a brand's canonical/main domain — pass the literal domain the user named (e.g. pass `clau.de`, not `anthropic.com`). Use `brand_aliases` for related brand labels. | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| signals | No | Signal modules to invoke. Defaults to all 12 discovery/enrichment signals. | |
| planner_mode | No | Planner mode for staged discovery fanout. observe emits metrics; enforce applies candidate-backed signal caps. | |
| brand_aliases | No | Optional public brand aliases to seed, such as product or legal-entity labels. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. | |
| discovery_mode | Yes | Discovery mode. "classic" (default, BSL-licensed) runs the public signal-sweep pipeline. "tiered" layers Tier 0 (tenant-declared portfolio), Tier 1 (infrastructure-graph), and Tier 2 (declared-evidence) lookups in front of the legacy sweep, falling back to Tier 3 (the existing sweep) only on cache miss / very_stale fingerprint / uncovered caller candidates. Tiered mode requires private BlackVeil service bindings — BSL self-hosts should leave this on "classic". | classic |
| dkim_selectors | No | Optional DKIM selectors to probe. Defaults to a built-in common-selector list. | |
| min_confidence | No | Drop candidates whose combined confidence falls below this threshold (0-1, default 0.5). | |
| candidate_domains | No | Optional candidate domains supplied by the caller for corroboration. | |
| ownership_verified | No | Caller attests that the seed domain is owned or authorized for scanning. Required when discovery_mode is "tiered" and the caller is not an enterprise/owner/partner principal. Prevents unauthorized mass reconnaissance via deep tier lookups. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint and idempotentHint, lowering the bar. The description adds that it aggregates multiple signal types and that the exact seed domain must be passed verbatim, which is useful behavioral context. However, it does not disclose whether the operation is synchronous or asynchronous, or other side-channel behavior beyond what annotations imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences: purpose, when to use, and a critical usage warning. It is front-loaded with the most important information and contains no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema (100% coverage, enum values, 12 params) and an output schema, the description provides enough core context. However, it omits any mention of companion start/status/findings tools or whether results may be returned asynchronously, which would be helpful for a complex discovery workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with rich descriptions for all 12 parameters, so the description need not repeat them. The seed-domain instruction in the description duplicates what the domain parameter schema already says in detail, adding no additional semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool discovers all domains in a brand's portfolio by aggregating certificate, DNS, redirect, and mail-policy signals. This specific verb ('discover') plus resource ('brand portfolio domains') and method distinguishes it from sibling checkers and subdomain discovery tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use it when asked what domains are part of a brand portfolio or to find all domains related to a brand. It gives clear context but does not mention exclusions or alternative tools, so it stops short of full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_brand_domains_findingsARead-onlyIdempotentInspect
Fetch the ranked candidate domains (the discovery CheckResult) for an async run started with discover_brand_domains_start. Returns notReady while the discovery is still in-flight; the discovery result once complete. Owner-scoped.
| Name | Required | Description | Default |
|---|---|---|---|
| operationId | Yes | Operation ID returned by discover_brand_domains_start. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and non-destructive behavior. The description adds valuable behavioral context beyond annotations: the notReady interim state, eventual result delivery, and 'Owner-scoped' access restriction. This transparently sets expectations for an async polling operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no superfluous text. Every phrase earns its place: what is fetched, the source run, the polling states, and the scoping constraint. Information is front-loaded and immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter async polling tool, the description covers the core lifecycle (in-flight vs. complete), the data returned, and the owner scope. It lacks an explicit output structure, but given no output schema exists, the reference to 'discovery CheckResult' offers enough context for a competent agent. Sibling tools further clarify its role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single parameter (operationId) that is already described as 'Operation ID returned by discover_brand_domains_start.' The description reinforces this by referencing the start tool, but adds no new semantic detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Fetch') and resource ('ranked candidate domains (the discovery CheckResult)') tied to an async run. It explicitly names the starting tool (discover_brand_domains_start), distinguishing this findings-retrieval tool from sibling tools like the start/status variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool: after starting an async run, and it describes the polling behavior ('Returns notReady while the discovery is still in-flight; the discovery result once complete'). It does not explicitly name alternatives or exclusions, but the lifecycle context and sibling names make the usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_brand_domains_startAInspect
Start an async brand-domain discovery for the EXACT seed domain provided (the async sibling of discover_brand_domains, which can run ~24s and time out interactive clients). Same args as discover_brand_domains. Returns { auditId, queuedAt, etaSeconds } immediately; poll with discover_brand_domains_status and fetch ranked candidates with discover_brand_domains_findings once complete.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Discovery depth. standard is default; deep expands candidate seeding and enrichment fanout. | |
| domain | Yes | The exact seed domain to expand, scanned verbatim (e.g., example.com). Do NOT normalize, resolve, or substitute a brand's canonical/main domain — pass the literal domain the user named (e.g. pass `clau.de`, not `anthropic.com`). Use `brand_aliases` for related brand labels. | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| signals | No | Signal modules to invoke. Defaults to all 12 discovery/enrichment signals. | |
| planner_mode | No | Planner mode for staged discovery fanout. observe emits metrics; enforce applies candidate-backed signal caps. | |
| brand_aliases | No | Optional public brand aliases to seed, such as product or legal-entity labels. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. | |
| discovery_mode | Yes | Discovery mode. "classic" (default, BSL-licensed) runs the public signal-sweep pipeline. "tiered" layers Tier 0 (tenant-declared portfolio), Tier 1 (infrastructure-graph), and Tier 2 (declared-evidence) lookups in front of the legacy sweep, falling back to Tier 3 (the existing sweep) only on cache miss / very_stale fingerprint / uncovered caller candidates. Tiered mode requires private BlackVeil service bindings — BSL self-hosts should leave this on "classic". | classic |
| dkim_selectors | No | Optional DKIM selectors to probe. Defaults to a built-in common-selector list. | |
| min_confidence | No | Drop candidates whose combined confidence falls below this threshold (0-1, default 0.5). | |
| candidate_domains | No | Optional candidate domains supplied by the caller for corroboration. | |
| ownership_verified | No | Caller attests that the seed domain is owned or authorized for scanning. Required when discovery_mode is "tiered" and the caller is not an enterprise/owner/partner principal. Prevents unauthorized mass reconnaissance via deep tier lookups. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only, non-destructive, open-world, and non-idempotent. The description adds valuable beyond-annotation detail: it returns { auditId, queuedAt, etaSeconds } immediately, indicates queued execution, and mandates polling. This gives a concrete async lifecycle picture, though it does not mention side effects like the actual background DNS scanning.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences: the first states the core action and the sibling rationale, the second gives the exact return contract and follow-up tools. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async start tool with 12 parameters and no output schema, this description provides the entire agent-facing workflow: immediate response shape, polling via status, and retrieval via findings. It is complete enough for an agent to invoke and track the operation correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters, so the baseline is 3. The description only says 'Same args as discover_brand_domains' and emphasizes EXACT seed domain, which partially echoes the schema's existing 'Do NOT normalize' note. It adds no meaningful parameter-level information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Start' and the resource 'async brand-domain discovery,' clearly distinguishing it from the synchronous discover_brand_domains. It also emphasizes the EXACT seed domain requirement, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the async sibling discover_brand_domains and explains why to use this version (sync can run ~24s and time out interactive clients). It also prescribes the post-start workflow: poll with discover_brand_domains_status and fetch with discover_brand_domains_findings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_brand_domains_statusARead-onlyIdempotentInspect
Poll the status of an async brand-domain discovery started with discover_brand_domains_start. Returns status (queued | running | completed | failed) and progress. Owner-scoped — operationIds owned by other principals surface as notFound.
| Name | Required | Description | Default |
|---|---|---|---|
| operationId | Yes | Operation ID returned by discover_brand_domains_start. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the tool is read-only, idempotent, and non-destructive. The description adds valuable behavioral context: the returned status enum, progress reporting, and the owner-scoped behavior (operationIds of other principals surface as notFound). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the primary purpose, followed by return values and a key behavioral caveat. Every sentence carries necessary information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description appropriately discloses return content (status and progress) and the notFound behavior. It lacks a bit of detail on the progress format or next-step guidance after completion, but for a simple status polling tool, it is largely complete and well-scoped.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description enhances the operationId parameter by explaining that operationIds owned by other principals surface as notFound, which is not in the schema. This adds semantic value beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Poll') and clearly identifies the resource ('status of an async brand-domain discovery'). It distinguishes itself from sibling tools by explicitly referencing discover_brand_domains_start as the initiation point, making its role as a status poller unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates that this tool is for polling status after starting an async discovery with a specific companion tool. The owner-scoping note provides useful context about access, but it does not explicitly explain when to use this tool versus other status or findings tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_subdomainsARead-onlyIdempotentInspect
Find subdomains of a domain using Certificate Transparency logs. Reveals shadow IT, forgotten services, and unauthorized certificate issuance. Returns a CT SAMPLE, not an asset inventory: the count is a lower bound, a host with no publicly-logged certificate never appears, and the result carries a per-source coverage record stating what was actually consulted. countBasis says whether totalSubdomains is the tool’s normal reach (sample) or a floor from a run whose recall was cut (then minSubdomainsObserved is present); concreteSubdomains excludes wildcard patterns.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds substantial behavior beyond those: the result is a CT sample (lower bound), unseen hosts are silently absent, a per-source `coverage` record reports what was consulted, and `countBasis` distinguishes normal reach from a recall-cut `floor`. This is exactly the kind of open-world and sampling nuance an agent needs and could not infer from annotations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded: purpose in the first sentence, use cases in the second, and the critical sampling caveat in the third. Every sentence earns its place given the tool has no output schema and needs to communicate subtle recall semantics. The final sentence packs a lot of field-level detail into one long clause, so it is not as crisp as a 5, but it is far from bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description is unusually complete: it covers what the result represents (a sample, not an inventory), how to interpret counts (lower bound, floor vs. normal), which fields to expect (coverage, countBasis, minSubdomainsObserved, concreteSubdomains), and the open-world limitation. The schema covers all parameters, and the annotations cover safety. Nothing an agent needs to call and interpret this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (domain, format, force_refresh) are already documented in the schema. The description adds value by explaining output semantics tied to tool behavior (coverage, countBasis, concreteSubdomains) but does not add parameter-level meaning beyond the schema. This matches the baseline 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+method: 'Find subdomains of a domain using Certificate Transparency logs.' It goes further by stating the investigative use cases (shadow IT, forgotten services, unauthorized certificate issuance), which distinguishes it from siblings like check_subdomain_takeover (takeover risk) and discover_brand_domains (brand-related discovery). An agent can tell this tool apart from its siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (shadow IT/reconnaissance via CT) and an explicit exclusion: 'Returns a CT SAMPLE, not an asset inventory.' This tells the agent this tool is the wrong choice when a complete asset inventory is required. However, it does not name any alternative sibling tools directly, so the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_findingBRead-onlyIdempotentInspect
Explain a finding with impact and remediation.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output verbosity. Auto-detected if omitted. | |
| status | Yes | Finding severity or status. | |
| details | No | Additional detail from check result. | |
| checkType | Yes | Check type (e.g., 'SPF', 'DMARC'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds minimal behavioral context (that output includes impact and remediation) but does not describe format, pagination, or external data access. With strong annotations, this is acceptable but not enriching.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to understanding the tool's purpose. Perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, strong annotations, and 100% schema coverage, the description adequately covers the essentials. It mentions the output content (impact and remediation) but does not detail return format or edge cases. No output schema exists, so a bit more detail on the response structure could be helpful, but it is not a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, as every parameter (checkType, status, format, details) has a description. The tool description does not add meaning beyond the schema, but the schema fully carries the parameter semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Explain a finding with impact and remediation' clearly states the verb (explain), resource (finding), and the value delivered (impact and remediation). It is concise and distinguishes from sibling check_* tools that likely run checks rather than explain them, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention typical use cases (e.g., after a check returns a finding) or exclude cases where other tools are more appropriate. Without this, an agent may struggle to choose between explain_finding and similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generateARead-onlyIdempotentInspect
Generate a DNS/email security remediation artifact. Artifact types: spf_record (build a new SPF record), dmarc_record (create a DMARC policy), dkim_config (DKIM key setup), mta_sts_policy (generate an MTA-STS policy file), fix_plan (prioritized remediation plan for all findings), or rollout_plan (phased DMARC enforcement timeline). Use when asked to generate or create a record or policy.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| policy | No | dmarc_record: policy (default "reject"). | |
| artifact | Yes | Which artifact to generate (e.g., "dmarc_record", "fix_plan"). | |
| mx_hosts | No | mta_sts_policy: MX hosts. Omit to detect from DNS. | |
| provider | No | dkim_config: provider (e.g., "google"). Omit for generic. | |
| timeline | No | rollout_plan: rollout speed (default: standard). | |
| rua_email | No | dmarc_record: report email. Default: dmarc-reports@{domain}. | |
| force_refresh | No | fix_plan: bypass cache and run a fresh scan. | |
| target_policy | No | rollout_plan: target DMARC policy (default: reject). | |
| include_providers | No | spf_record: providers to include (e.g., ["google"]). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, which signal a safe, non-mutating operation. The description adds artifact-type context but doesn't disclose additional behavioral traits (e.g., output format, side effects). It is consistent with annotations, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that introduces the tool's purpose, lists artifact types, and gives a usage note. The list adds length but is necessary for clarity; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with no output schema, the description covers the main purpose, artifact types, and usage context. The schema handles parameter details, and annotations cover safety. It doesn't explain return format, but the tool's function is straightforward enough that this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes every parameter, including enums and defaults. The description repeats the artifact enum in prose but adds no meaningful extra semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates DNS/email security remediation artifacts and enumerates all six artifact types (spf_record, dmarc_record, etc.). It distinguishes itself from sibling check/analyze tools by being the generation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use when asked to generate or create a record or policy.' This provides a clear usage trigger. It does not mention alternatives or exclusions, but given the sibling tool names (all check_*/analyze_*), the context is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_benchmarkARead-onlyIdempotentInspect
Get industry benchmark data: shows what percentile a domain's security score ranks at within its sector or country cohort, the mean score, and the most common DNS security failures across the industry. Use when asked how a score compares to the industry average, what percentile a score is in, or what the most common security failures are in an industry or sector.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output verbosity. Auto-detected if omitted. | |
| profile | No | Profile to benchmark (default "mail_enabled"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the tool shows benchmark comparisons by sector/country cohort, which is useful context, but it does not add much beyond the annotations and the basic output description. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core function, and every sentence serves a purpose: the first states what the tool does, the second lists clear use cases. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only 2 optional parameters, a fully documented schema, and no output schema, the description provides sufficient context for an AI to select and invoke the tool. It explains the output contents (percentile, mean score, failures) and the use cases. It lacks only explicit alternative guidance, but overall it is complete for the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameters, with enums and descriptions for both 'format' and 'profile'. The description does not add any additional semantic detail beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get industry benchmark data' and enumerates the specific data points returned (percentile, mean score, common failures). It is specific about the resource and scope, but it does not explicitly distinguish itself from sibling tools like get_domain_rank or get_provider_insights, which limits it to a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes an explicit 'Use when' section listing three concrete scenarios: comparing to industry average, asking about percentiles, or asking about common security failures. This provides clear context for when to use the tool, though it does not mention when not to use it or name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domain_rankARead-onlyIdempotentInspect
Rank a domain against its country or global cohort using the GSI benchmark corpus. Accepts a domain score (from scan_domain) and optional country/sector; returns a percentile: "scores better than X% of peers". Owner-gate exempt — public cohort data only.
| Name | Required | Description | Default |
|---|---|---|---|
| score | Yes | Domain score (0–100) from scan_domain. Used to compute the cohort percentile. | |
| domain | Yes | Domain to rank against its cohort (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| sector | No | Sector label (e.g., "finance"). Forwarded to the cohort endpoint; sector filtering is planned for a future release. | |
| country | No | ISO 3166-1 alpha-2 country code to use the country cohort (e.g., "NZ"). Omit for global cohort. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnlyHint, idempotentHint, and destructiveHint false. The description adds useful behavioral context beyond that: 'Owner-gate exempt — public cohort data only' clarifies permission requirements and data scope. It also explicitly mentions the return format, which helps set expectations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary verb and resource, and every clause earns its place. It avoids redundancy and fluff, making it highly scannable and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, the description takes responsibility for explaining return values ('returns a percentile: "scores better than X% of peers"'). It covers the core inputs (score, country/sector), the dependency on scan_domain, and the permission exemption. The description is fully sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baselines are 3. The description does add marginal meaning by linking the score to scan_domain and summarizing country/sector as optional cohort selectors, but it largely restates what the schema already documents. No significant additional parameter semantics provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Rank a domain against its country or global cohort using the GSI benchmark corpus.' It clearly distinguishes the tool's purpose from siblings by emphasizing cohort ranking and the benchmark corpus, and it states the exact output (a percentile). This fully clarifies what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear contextual guidance: it references scan_domain as the source of the required score, and explains how country/sector alter the cohort. However, it does not explicitly name alternatives or state when not to use this tool (e.g., vs. get_benchmark). This is a minor omission, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_provider_insightsARead-onlyIdempotentInspect
Get security benchmarks and common configuration issues for a specific email or DNS service-provider cohort (e.g. Google Workspace customers, Microsoft 365 customers). Use when asked how an email service provider compares to competitors on security posture, or to see typical misconfigurations for a named vendor's customers.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output verbosity. Auto-detected if omitted. | |
| profile | No | Profile (default "mail_enabled"). | |
| provider | Yes | Provider (e.g., "google workspace"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds useful context by explaining the cohort-based nature (aggregated over provider customers) and that it surfaces typical misconfigurations, going beyond the generic 'read-only' annotation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, with the first sentence concisely stating the core purpose and the second giving precise usage guidance. Every word earns its place, and the structure is front-loaded with the action and outcome.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, and parameter context adequately. However, with no output schema, it does not describe the return format (e.g., how benchmarks are presented or what 'full' vs 'compact' affects), which would be helpful for an agent setting expectations. Still, the description is largely complete for a read-only lookup tool with strong annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all three parameters. The description adds a little contextual meaning (e.g., provider refers to an email or DNS service vendor) but does not materially improve understanding beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns security benchmarks and common configuration issues for a specific provider cohort, with concrete examples (Google Workspace, Microsoft 365). It uses a specific verb ('Get') and resource, and effectively distinguishes from sibling check_* tools by focusing on provider-level insights rather than domain-level checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use when asked how an email service provider compares to competitors on security posture, or to see typical misconfigurations for a named vendor's customers.' It does not mention when-not-to-use or alternatives, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_brand_audit_watchesARead-onlyIdempotentInspect
Returns the caller's recurring brand-audit watches: watchId, domain, interval, webhook presence, last-run time, and active state. Owner-scoped. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds value by listing return fields and specifying owner-scoping, which is not in annotations. It does not contradict annotations and provides context beyond what structured metadata conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and includes only essential details like the return fields and scoping. Every word earns its place, no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params, output schema exists), the description provides all needed context: what it returns, the fields included, and that it's owner-scoped and read-only. It is complete for an agent to correctly invoke and interpret results without additional assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, so the schema covers 100% of parameters trivially. Description doesn't need to explain parameters, and the baseline for 0 params is 4. No additional parameter semantics are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Returns the caller's recurring brand-audit watches' with specific fields (watchId, domain, interval, etc.), making its purpose unambiguous. It distinguishes itself from sibling tools like register_brand_audit_watch and delete_brand_audit_watch by indicating it only lists existing watches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes 'Owner-scoped' and 'Read-only', implying it is for viewing one's own watches and safe to call anytime. While it doesn't explicitly name alternatives, the context of sibling tools like register/delete makes usage clear. It conveys when to use this tool versus others without explicit exclusion statements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_complianceARead-onlyIdempotentInspect
Map scan findings to compliance frameworks: NIST 800-177, PCI DSS 4.0, SOC 2, CIS Controls. Shows pass/fail/partial status per control.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds useful context about the compliance frameworks and pass/fail/partial statuses, but does not disclose deeper behaviors such as caching or external calls, which is acceptable given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose and listing the frameworks and output format. No redundant words or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey return values. It does mention pass/fail/partial status per control, but lacks clarity on prerequisites (e.g., whether findings must already exist), result grouping, or relationship to other scan tools. This is adequate but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all three parameters (domain, format, force_refresh), including a description for each. The tool description adds no parameter-specific information beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool maps scan findings to specific compliance frameworks (NIST 800-177, PCI DSS 4.0, SOC 2, CIS Controls) and shows status per control. This distinguishes it from sibling tools like map_supply_chain and assess_coverage, using a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you have scan findings and need compliance mapping, giving clear context. However, it does not explicitly mention when not to use it or name alternative tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_supply_chainARead-onlyIdempotentInspect
Map DNS-visible third-party service dependencies for a domain. Correlates SPF, NS, TXT verifications, SRV services, and CAA records to reveal which third-party vendors can send email as the domain, control DNS, or access integrated services. Use when asked to map third-party or supply-chain dependencies — not for listing who can send email (use check_spf for that).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only, idempotent, and non-destructive behavior. The description adds valuable context by detailing the correlation methodology (SPF, NS, TXT, SRV, CAA) and the insights it produces (vendor email sending, DNS control, integrated services). It goes beyond annotations without contradicting them, earning a solid score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: main purpose, methodology, and usage guidance. It is front-loaded with the core function, and every sentence contributes meaning without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mapping tool with no output schema, the description explains what it does and how, and gives usage boundaries. It does not describe return value structure, but the input schema is rich and sibling differentiation is clear. This is sufficiently complete for an AI to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for all three parameters (domain, format, force_refresh) with descriptions. The tool description does not add parameter-specific semantics, but the schema already carries the load. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Map DNS-visible third-party service dependencies for a domain.' It clearly differentiates from siblings by explicitly stating it is 'not for listing who can send email (use check_spf for that).' This makes the tool's purpose unambiguous and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: 'Use when asked to map third-party or supply-chain dependencies — not for listing who can send email (use check_spf for that).' This gives both positive and negative usage context and names an alternative tool, satisfying the highest bar for usage guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_investigate_domain_startAInspect
Start an async OSINT investigation for a domain. Operator-deploy only; degrades to info when unprovisioned. Returns an investigationId immediately — poll with osint_investigation_status and retrieve results with osint_investigation_report.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false (it starts an investigation, so mutates state), openWorldHint=true, destructiveHint=false, which align. The description adds async behavior and the 'degrades to info when unprovisioned' condition, which is useful beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose and async nature, second gives degradation condition and points to the status and report tools. Every word is functional; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a start operation, so the description covers async initiation bees. It mentions the follow-up tools for status and report. Given no output schema lowering the burden, and the simple interface (one param), the description is sufficient. Could mention auth or rate limits, but not critical for Ops tool. Slightly below perfect because 'operators-only' behavior is vague.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description implies the query is the domain, but does not elaborate on format, constraints, or examples. With only one parameter of type string, it's minimal, but the description could have clarified expected input more thoroughly. Since schema provides constraints (min/max length), the description adds little beyond the tool name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts an async OSINT investigation for a domain, using a specific verb ('start') and resource. It distinguishes from siblings like the status and report retrieval tools by mentioning polling and retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance to poll with osint_investigation_status and retrieve with osint_investigation_report, and notes it is operator-deploy only. Does not explicitly mention alternatives, but the sibling tools make the workflow clear. Missing explicit 'when not to use' but adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_investigate_email_startAInspect
Start an async OSINT investigation for an email address (breach exposure, account correlation). Owner/enterprise tier only — people-centric OSINT is restricted to prevent misuse. Returns an investigationId immediately — poll with osint_investigation_status and retrieve results with osint_investigation_report.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=false (indicating mutating/start) and idempotentHint=false, but description clarifies it starts an async process and returns an investigationId immediately, which is beyond annotations. It also discloses the restricted access (owner/enterprise tier) and the restriction on people-centric OSINT to prevent misuse. This adds valuable behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no redundancy. Front-loads the action and purpose, then adds restrictions and next steps. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Contextual complexity is moderate: async operation, restriction, and follow-up tools are mentioned. No output schema, but description explicitly tells how to get results via other tools, so return value is covered. Minor gap: doesn't specify what happens if query is invalid or requires additional auth beyond tier, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has only one parameter 'query' with min/max length but no description; coverage is 0%, so description must compensate. Description implies 'query' is the email address, but doesn't explicitly state format or validation. However, given only one param, it's fairly inferable. Baseline for 0 params would be 4, but single param with implied type is okay; still, explicit mention would improve.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states specific verb and resource: 'Start an async OSINT investigation for an email address' with explicit scope ('breach exposure, account correlation'). It distinguishes from siblings by noting the email-specific variant and the async nature, setting it apart from domain, infrastructure, supply chain, and username variants.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: mentions it is restricted to owner/enterprise tier, which is a usage condition. It also directs to poll with osint_investigation_status and retrieve with osint_investigation_report, providing next steps. However, it doesn't explicitly state when NOT to use this tool (e.g., for non-email queries) or alternatives beyond the sibling tools, though the sibling context implies alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_investigate_infrastructure_startAInspect
Start an async deep-infrastructure OSINT investigation for a query (domain, IP, or org). Operator-deploy only; degrades to info when unprovisioned. Returns an investigationId immediately — poll with osint_investigation_status.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses additional behavior beyond annotations: async nature (returns investigationId immediately), polling requirement, and degradation to 'info' when unprovisioned. This adds transparency without contradicting the provided annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and information-dense, with no unnecessary words. It conveys the core purpose, async behavior, and a key caveat in two sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers essential aspects: what it does, how to use it (poll for status), and a deployment caveat. It does not detail return structure, but since no output schema is provided and the tool is simple, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the 'query' parameter as accepting domain, IP, or org, which is not evident from the schema alone (simple string with length constraints). This significantly enriches parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts an async deep-infrastructure OSINT investigation for domain, IP, or org queries, effectively distinguishing it from sibling tools like osint_investigate_domain_start and osint_investigate_username_start.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides guidance on when to use (async, for domain/IP/org) and mentions polling with osint_investigation_status, though it does not explicitly contrast with all alternatives. The 'Operator-deploy only' note adds deployment context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_investigate_supply_chain_startAInspect
Start an async supply-chain OSINT investigation for a query. Operator-deploy only; degrades to info when unprovisioned. Returns an investigationId immediately — poll with osint_investigation_status.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description adds valuable context: async behavior (returns immediately), operator-deploy restriction, degradation to info when unprovisioned, and the polling mechanism. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, operational constraint, and return/polling behavior. No fluff, front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter async start tool with no output schema, the description covers the essential operational aspects: async nature, provisioning constraint, and how to retrieve results. It could mention what the investigation covers (supply-chain scope is implied but not detailed), but given the simplicity, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'query' implicitly but doesn't explain what a good query looks like, format constraints, or examples. The single parameter is simple (string, 1-253 chars), so the gap is moderate, but the description could add more guidance on query formulation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts an async supply-chain OSINT investigation for a query, with a specific verb ('Start') and resource ('supply-chain OSINT investigation'). It distinguishes from siblings by naming the async pattern and the companion polling tool, though it doesn't explicitly contrast with other osint_investigate_*_start tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it's operator-deploy only, degrades to info when unprovisioned, and returns an investigationId to poll with osint_investigation_status. It doesn't explicitly state when NOT to use it or name alternatives, but the async pattern and polling instruction give adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_investigate_username_startAInspect
Start an async OSINT investigation for a username (cross-platform presence, breach correlation). Owner/enterprise tier only — people-centric OSINT is restricted to prevent misuse. Returns an investigationId immediately — poll with osint_investigation_status and retrieve results with osint_investigation_report.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate openWorldHint=true and idempotentHint=false, but the description adds crucial behavioral details: the tool is asynchronous and returns an investigationId immediately while the investigation runs in the background. It also discloses access restrictions (owner/enterprise tier). This goes beyond the annotations, though it does not describe edge cases like authorization failures or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each with a clear role: purpose, restriction, and workflow. It is front-loaded with the main action, avoids filler, and every sentence contributes essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple starter tool with one parameter and no output schema, the description adequately covers the full workflow: what it does, the access restriction, and the follow-up steps (poll and retrieve). It does not detail report contents, but that is handled by the report tool. Minor missing details like rate limits or concurrent investigations, but not critical for this async starter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter (query) and 0% schema description coverage, the description must compensate. It clarifies that the query is a username for investigation, which adds meaning beyond the raw schema. However, it does not specify format details (e.g., case sensitivity, whether '@' is needed) or confirm it accepts only one username. It suffices but is not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Start' and the resource 'async OSINT investigation for a username', and it specifies the scope (cross-platform presence, breach correlation). This distinguishes it from sibling starters like osint_investigate_email_start or osint_investigate_domain_start by explicitly focusing on username investigations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides usage context by stating that this is owner/enterprise tier only and that people-centric OSINT is restricted to prevent misuse. It also explains the async workflow: returns an investigationId immediately, poll with status and retrieve with report. However, it does not explicitly compare to alternative investigation starters (e.g., email, domain), though this is implied by the username focus.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_investigation_reportARead-onlyIdempotentInspect
Retrieve the final report of a completed OSINT investigation by investigationId. Operator-deploy only; degrades to info when unprovisioned or not yet complete.
| Name | Required | Description | Default |
|---|---|---|---|
| investigationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint: false, so the description doesn't need to restate these. It adds contextual behavior: 'Operator-deploy only' (access restriction) and 'degrades to info when unprovisioned or not yet complete' (fallback behavior). This goes beyond the annotations and provides useful operational insight, earning a 4 despite the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences with no redundant wording. It front-loads the core action and adds the key edge-case behavior in the second sentence. Every word earns its place, making it highly effective for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, read-only, no output schema), the description covers key aspects: purpose, input identifier, and degradation behavior when the investigation is incomplete or unprovisioned. It doesn't describe the report structure, but that is not required in the absence of an output schema; the phrase 'final report' is self-explanatory. It could be more complete by suggesting checking status first, but it is adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single parameter. It only mentions 'by investigationId,' which merely repeats the parameter name without adding meaning (e.g., format, source, or how to obtain a valid ID). Since it doesn't clarify the parameter's value or provide context like 'retrieve from osint_investigation_status,' the description adds minimal semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to retrieve the final report of a completed OSINT investigation, identified by investigationId. It uses a specific verb (retrieve) and resource (final report), and distinguishes it from sibling tools like osint_investigation_status (which checks status) and osint_investigate_*_start (which initiates investigations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it is for completed investigations, and mentions 'degrades to info when unprovisioned or not yet complete,' hinting that the user might need to check status first. However, it does not explicitly mention alternatives like osint_investigation_status or provide clear when-to-use vs when-not-to-use guidance. The restriction 'Operator-deploy only' is a usage guideline but not elaborated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
osint_investigation_statusARead-onlyIdempotentInspect
Poll the status of an OSINT investigation by investigationId. Operator-deploy only; degrades to info when unprovisioned. Returns current status (running | completed | failed) and progress metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| investigationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds extra detail not in annotations, such as the 'degrades to info when unprovisioned' behavior and that it returns progress metadata. This goes beyond the basic annotations and provides useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no unnecessary elaboration. It efficiently communicates the core action, key input, and expected output, adhering to the principle of minimal but sufficient information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple status-polling tool with a single parameter and no output schema, the description is complete. It specifies the input, the action, the return values (status and progress metadata), and even an edge case ('degrades to info'). No critical behavior is omitted for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully specifies the only parameter (investigationId) with type and length constraints, achieving 100% schema coverage. The description merely restates 'by investigationId' without adding semantic meaning (e.g., where the ID comes from or its format). Thus, it adds little beyond the schema, warranting a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Poll the status of an OSINT investigation by investigationId.' It uses a specific verb ('poll'), names the resource ('status of an OSINT investigation'), and identifies the key identifier. It also distinguishes from sibling tools like osint_investigate_domain_start by focusing on status retrieval rather than initiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage constraints (e.g., 'Operator-deploy only') and hints at behavior ('degrades to info when unprovisioned'). However, it does not explicitly state when to use this tool relative to starting an investigation or polling other resources, though the 'investigationId' parameter implies it should be used after a start operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prioritize_portfolio_leadsARead-onlyIdempotentInspect
Rank a brand’s portfolio (or an explicit domain set) into prioritized registrar-partner sales leads by product-gap value × severity. Multi-domain, paid. Reuses map_registrar_products per domain, then ranks. Distinct from map_registrar_products (per-domain product mapping) and batch_scan (raw scores).
| Name | Required | Description | Default |
|---|---|---|---|
| brand | No | Brand seed apex; discovers the portfolio, derives ownership buckets, then ranks the top candidates. | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| domains | No | Explicit domain set to rank (max 10). Ownership bucket = "unknown". | |
| force_refresh | No | Bypass cache and run fresh scans. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the agent knows this is a safe read operation. The description adds context beyond annotations: it is paid, multi-domain, reuses another tool, computes value × severity, and ranks. It also implies caching behavior via force_refresh parameter, which is useful. It could mention output shape or failure modes, but with annotation coverage this is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The core purpose is front-loaded, the key differentiators are explicit, and the sibling references are compact. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only ranking tool with 100% schema coverage and no output schema, the description covers purpose, alternatives, and parameter semantics sufficiently. The main gap is not describing the output shape or the 'prioritized leads' format, but given the complexity and existing structured fields, the definition is largely complete. It could also clarify what 'value × severity' means in output terms.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already thoroughly documents all four parameters. The description adds light context: 'Multi-domain' aligns with domains array, and 'brand ... discovers the portfolio, derives ownership buckets, then ranks' adds meaning to the brand parameter. But it doesn't add much beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Rank'), a resource ('a brand's portfolio or an explicit domain set'), and the output ('prioritized registrar-partner sales leads by product-gap value × severity'). It also explicitly distinguishes itself from map_registrar_products and batch_scan, making it easy for an agent to select among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description openly states its context: multi-domain, paid, reuses map_registrar_products per domain, then ranks. It names two distinct alternatives and the differentiator ('Distinct from map_registrar_products... and batch_scan'). This gives an agent clear guidance on when to pick this tool over neighbors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rdap_lookupARead-onlyIdempotentInspect
Fetch domain registration data via RDAP (modern WHOIS replacement). Returns the domain registrar (the company the domain was registered with), registrant contact, creation/expiration dates, EPP status codes, and domain age. Use when asked who registered the domain, who the registrar is, or when the registration expires — distinct from check_ns which identifies the DNS nameserver provider.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior, so the description does not need to repeat that. It adds useful context about what data is returned and that RDAP is a 'modern WHOIS replacement,' which goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences with zero filler. The first sentence states the action and primary outputs; the second gives use cases and sibling differentiation. Information is front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, full schema coverage, and presence of an output schema, the description provides sufficient context: what the tool does, what it returns, when to use it, and how it differs from check_ns. No critical operational gaps remain for a read-only lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: domain, format, and force_refresh are all individually documented in the schema. The description adds no additional parameter-level detail beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Fetch domain registration data via RDAP' and enumerates concrete outputs (registrar, registrant contact, dates, EPP codes, domain age). It also distinguishes itself from check_ns, making the tool's purpose unambiguous among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it: 'when asked who registered the domain, who the registrar is, or when the registration expires.' It also names the alternative check_ns and clarifies the difference, giving the agent clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_brand_audit_watchAInspect
Creates a recurring brand-audit watch for a domain on a daily/weekly/monthly cadence. Each run enqueues a fresh brand_audit_batch_start and (when a webhook is configured) POSTs a diff webhook on classification drift. Returns the new watchId. Owner-scoped; per-principal cap of 20 active watches.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to watch. | |
| interval | Yes | Recurrence interval. | |
| webhook_url | No | Optional webhook URL — POSTed on classification drift. Re-validated for SSRF at both register and delivery time. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| partial | No | |
| category | Yes | |
| findings | Yes | |
| checkStatus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, openWorldHint true), the description adds meaningful behavioral details: each run enqueues brand_audit_batch_start, optionally POSTs a webhook on drift, and enforces a per-principal cap of 20 watches. These side effects and constraints are not captured elsewhere. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action, and every sentence adds value: creation, side effects, return value, and constraints. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (recurring scheduling, side effects, webhook, quota), the description covers the key aspects: what it does, what happens on each run, the webhook condition, ownership, and cap. An output schema exists, so return details are covered. Minor missing info like error conditions (e.g., conflict if domain already watched) but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add significant new semantics beyond the schema: it mentions the webhook behavior (already in schema) and ownership, which is more about tool behavior than parameter specific meaning. No extra value for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Creates') and resource ('recurring brand-audit watch') and clearly differentiates from siblings like list_brand_audit_watches and delete_brand_audit_watch. It also mentions the cadence options (daily/weekly/monthly) and side effects, making the tool's function unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly distinguishes this from one-off audits by emphasizing 'recurring' and 'cadence.' It also mentions owner-scoping and a cap of 20 watches, providing constraints. However, it does not explicitly point to alternatives (e.g., brand_audit_single) or state when NOT to use this tool, so a small gap exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_spf_chainARead-onlyIdempotentInspect
Trace the full SPF include chain for a domain. Recursively resolves all includes, shows lookup count, tree depth, and flags circular includes or exceeding the 10-lookup limit.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds valuable behavioral details beyond annotations: recursive resolution, output metrics (lookup count, tree depth), and detection of circular includes and the 10-lookup limit. This is more context than typical and aligns with the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and front-loads the primary action. Every sentence adds substantive information (what it does, what it shows, and what it flags), with no waste or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description explains the key output aspects (lookup count, tree depth, flags) and edge cases (circular includes, limit). It covers the core behavior adequately. It could mention output format or caching behavior (given force_refresh exists), but overall it gives enough context for an agent to understand the tool's capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (all three parameters have descriptions). The tool description provides no additional parameter-specific meaning beyond the schema. It mentions output characteristics but not parameter details, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Trace the full SPF include chain for a domain.' It specifies the exact resource (SPF include chain) and the specific actions (recursively resolves includes, shows lookup count, tree depth, flags circular includes/limit). This distinguishes it from siblings like check_spf or check_dnssec_chain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: when you need to trace SPF includes and check for circular includes or lookup limits. However, it does not explicitly mention when not to use it or contrast with alternative tools like check_spf. The context is clear but lacks explicit exclusions or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_buckets_findingsARead-onlyIdempotentInspect
Retrieve findings from a completed cloud-bucket discovery scan by scanId. Operator-deploy only; degrades to info when unprovisioned. The scanId is required so reads can be owner-scoped; target and provider filters are optional.
| Name | Required | Description | Default |
|---|---|---|---|
| scanId | Yes | ||
| target | No | ||
| providers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, idempotent), the description adds behavioral details: 'degrades to info when unprovisioned' and 'reads can be owner-scoped'. This gives extra context about failure modes and scoping, though it does not enumerate all edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using three short sentences to convey purpose, constraints, and parameter roles. No redundant or verbose language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool, it provides sufficient context: when to use, permission hints, and parameter details. Output is not described, but that is acceptable given the tool type and absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (scanId, target, providers) are explicitly described: scanId is required for owner-scoped access, and target/providers are optional filters. This provides full semantic coverage for the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving findings from a completed cloud-bucket discovery scan. It is distinct from sibling tools like scan_buckets_start and scan_buckets_status, and the name reinforces purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It indicates when to use (after a completed scan) and notes optional filters, but does not explicitly contrast with alternatives (e.g., 'use instead of scan_buckets_status'). The mention of 'Operator-deploy only' provides some deployment guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_buckets_startAInspect
Start an async cloud-bucket discovery scan for a target domain. Operator-deploy only; degrades to info when unprovisioned. Returns a scanId immediately — poll progress with scan_buckets_status and retrieve results with scan_buckets_findings.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| providers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With minimal annotations (openWorldHint:true, readOnlyHint:false), the description carries the burden of behavior disclosure. It effectively communicates the async nature, immediate return of scanId, the degradation behavior ('degrades to info when unprovisioned'), and the poll/retrieve workflow. This adds substantial non-obvious context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, constraint, and next steps. No fluff or repetition. Highly scannable and information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async start operation with two parameters and no output schema, the description covers the essential flow (start, poll, retrieve) and the degradation behavior. It misses details on parameter validation or error cases, but given the tool's moderate complexity, it is nearly complete. A small gap exists around the 'providers' parameter, but overall it is well covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that 'target' is a domain, which helps, but it says nothing about 'providers', its format, or possible values. With two parameters and no schema descriptions, this is a gap—leaving the agent underinformed about half the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Start an async cloud-bucket discovery scan for a target domain' with a specific verb ('start'), resource ('cloud-bucket discovery scan'), and target ('domain'). It is distinct from sibling tools like scan_buckets_status and scan_buckets_findings, which are explicitly referenced as follow-ups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is async, returns a scanId immediately, and instructs the user to poll with scan_buckets_status and retrieve with scan_buckets_findings. The 'Operator-deploy only' caveat gives deployment context. However, it doesn't explicitly discuss when to use this tool versus alternatives or mention any exclusion scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_buckets_statusARead-onlyIdempotentInspect
Poll the status of a cloud-bucket discovery scan by scanId. Operator-deploy only; degrades to info when unprovisioned. Returns scan status (running | completed | failed) and progress metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| scanId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is known. The description adds valuable behavioral nuance: 'degrades to info when unprovisioned' and specifies return contents (status and progress metadata), which goes beyond the annotations. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and every phrase contributes meaning. It avoids redundancy, making it highly concise and structured effectively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple polling tool with one parameter, annotations covering safety, and no output schema, the description is sufficient. It mentions the return values (status and progress metadata) and the degradation behavior, which covers all necessary information for an agent to use it correctly. No missing critical details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, scanId, and the schema provides no description (coverage 0%). The description uses 'by scanId' but does not elaborate on its format or origin beyond the name. Since it is a single obvious identifier, the description provides minimal added meaning, but given the low schema coverage, it partially compensates by implying the identifier is from a scan start operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool polls the status of a cloud-bucket discovery scan by scanId, using a specific verb and resource. It is distinct from sibling tools like scan_buckets_start (starts a scan) and scan_buckets_findings (retrieves results), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: after starting a scan, poll its status via scanId. It does not explicitly name alternatives or when-not-to-use, but the phrasing 'Poll the status' and the context of sibling tools make the intended use clear. The 'Operator-deploy only; degrades to info when unprovisioned' adds conditional context, though not explicit comparisons to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_domainARead-onlyIdempotentInspect
Run a full DNS and email security audit for a single domain. Aggregates every scan-included check in parallel (SPF, DKIM, DMARC, DNSSEC, TLS/SSL, MTA-STS, CAA, BIMI, subdomain takeover, and more) and returns an overall security score, NIST-aligned letter grade (6-band A+/A/B/C/D/F), maturity stage, and prioritized findings. Use for a comprehensive single-domain audit, to get a domain's overall security grade, or to assess email security maturity. Version stamps: 'scoringModelVersion' is the scoring POLICY semver (changes only when weights/thresholds/severities change, so it advances slowly) and is INDEPENDENT of — never comparable to — 'dnsChecksPackageVersion', the @blackveil/dns-checks npm engine-package version, which moves every release; a lower model version is expected, not a version gap. When citing a score, record 'scoringConfigHash' — it identifies the exact scoring configuration that produced the result.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| profile | No | Scoring profile. Default "auto" detects. | |
| force_refresh | No | Bypass cache and run a fresh scan. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by detailing the aggregation of checks and the output (score, grade, maturity, findings). It also discloses the critical nuance about version stamps (scoringModelVersion vs dnsChecksPackageVersion being independent and not comparable) and advises recording scoringConfigHash. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured, starting with a clear purpose sentence and then providing usage context and version stamp details. Every sentence adds value, though the version stamp explanation could be condensed. It is efficient for a complex tool with many checks.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (aggregates many checks) and lack of an output schema, the description is quite complete: it lists the main checks, explains the output (overall score, NIST grade, maturity, findings), and gives explicit usage guidance plus version stamp handling. It covers the essential context for using the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema describes all parameters (domain, format, profile, force_refresh). The description does not add significant parameter-specific semantics beyond what the schema provides—it focuses on overall tool behavior. The version stamp explanation is not about parameters. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Run a full DNS and email security audit for a single domain' with a specific verb and resource. It distinguishes itself from sibling check_* tools (e.g., check_spf) by emphasizing 'full audit' and aggregation, and from batch_scan by explicitly saying 'single domain'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit use cases: 'Use for a comprehensive single-domain audit, to get a domain's overall security grade, or to assess email security maturity.' This gives clear context on when to invoke it, though it does not explicitly state when not to use it or name alternative tools (like individual checks).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sge_quickscanARead-onlyIdempotentInspect
Answer, for ONE domain, whether it meets the New Zealand Secure Government Email (SGE) requirements agencies must satisfy by October 2026. Reports all six SGE controls — DMARC p=reject, SPF -all, DKIM, SMTP transport TLS, MTA-STS enforce, TLS-RPT — each as satisfied, not satisfied, or NOT MEASURED, with the structured evidence behind every verdict. SMTP transport TLS cannot be observed from DNS, so a DNS-only result tops out at INDETERMINATE, which is not a pass. Distinct from map_compliance, which maps findings to NIST/PCI/SOC 2/CIS.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, and the description adds real behavioral context beyond them: SMTP transport TLS cannot be observed from DNS, so a DNS-only run tops out at INDETERMINATE which is not a pass. This discloses a genuine result limitation. It does not mention caching behavior beyond force_refresh or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core verdict purpose, then the control list, then the DNS limitation and sibling differentiation. No filler; each sentence carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return burden and does so: it lists all six controls and the three verdict states (satisfied / not satisfied / NOT MEASURED) plus the INDETERMINATE ceiling. An agent knows what it will get and the limits of that result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents domain, format, and force_refresh. The description reinforces the single-domain constraint ('ONE domain') but adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Answer, for ONE domain, whether it meets the New Zealand SGE requirements.' It enumerates the six controls it evaluates and explicitly distinguishes itself from map_compliance, so an agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly scopes to ONE domain and names the sibling it is not (map_compliance), which clarifies when this aggregate verdict tool is preferred over a compliance-mapping tool. It stops short of telling the agent when to reach for the single-control siblings (check_dmarc, check_spf) instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_attack_pathsARead-onlyIdempotentInspect
Analyze current DNS posture and enumerate specific attack paths an adversary could exploit, with severity, feasibility, steps, and mitigations.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check (e.g., example.com) | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| force_refresh | No | Bypass cache and run a fresh check. Useful after DNS changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds value by explaining that the tool evaluates attack paths with severity, feasibility, steps, and mitigations, which provides insight into the nature of the analysis. However, it does not disclose additional behavioral traits such as caching, performance characteristics, or whether it relies on external data sources beyond what annotations and schema imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that is front-loaded with the primary action ('Analyze current DNS posture') and enumerates key output aspects in a compact list. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (simulating attack paths), the description provides a solid overview of purpose and expected output, and the annotations cover safety and idempotency. The schema documents all parameters. It lacks explicit mention of caching or relationship to other tools, but for the scope of this tool, the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% description coverage for all 3 parameters, so the baseline is 3. The description does not add parameter-specific information beyond what the schema already provides, but it does mention 'DNS posture' which loosely relates to the 'domain' parameter. No additional clarity is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Analyze' and 'enumerate') and a specific resource ('current DNS posture'), and it distinguishes itself from sibling check_* tools by focusing on attack path enumeration with concrete outputs (severity, feasibility, steps, mitigations). It unambiguously describes what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (use when you want to analyze attack paths from DNS posture), but it does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or alternative tools. Given the large sibling list, some explicit guidance would help, but the purpose is understandable enough to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_fixARead-onlyIdempotentInspect
Re-check a specific security control after applying a fix, to confirm the finding is now resolved. Use only when a fix has already been applied and you want to verify or confirm the remediation was successful — not for initial inspection of a record.
| Name | Required | Description | Default |
|---|---|---|---|
| check | Yes | Check name to re-run (e.g., "dmarc", "spf") | |
| domain | Yes | Domain to validate the fix for | |
| format | No | Output verbosity. Auto-detected if omitted. | |
| expected | No | Expected DNS record value to verify against |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only and non-destructive. The description adds the context that it is a follow-up verification step after remediation, which is useful behavioral context. However, it does not go deeper into output behavior or any special side effects, so a mid-range score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences front-loaded with the core purpose, followed by explicit usage conditions. No wasted words; every sentence adds meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a clear post-fix verification purpose, and the description covers when to use it and what it does. With annotations providing safety attributes and the schema covering all parameters, the description is complete for this tool's complexity. No output schema exists, so return values are not expected to be documented here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all four parameters, including enums and examples, so the description does not need to compensate. The schema coverage is 100%, and the description adds no parameter-specific details, so a baseline score of 3 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('re-check') and resource ('security control') and clearly states the purpose is to confirm remediation after applying a fix, distinguishing from initial inspection tools. It effectively communicates the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use ('only when a fix has already been applied') and when not to use ('not for initial inspection'), providing clear exclusion criteria. This guides the agent away from using it for initial scans.
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 tool update
v3.78.1- Added
sge_quickscan
4 tool updates
v3.78.0- Changed
brand_audit_batch_start2 fields changed- changed
Input schema / properties / view / descriptionPrevious value: -"Output view mode. 'csc_complement' produces a CSC-tuned payload; requires enterprise tier. Default 'standard'."New value: +"Output view mode. 'registrar_complement' produces a registrar-complement payload; requires enterprise tier. Default 'standard'." - changed
Input schema / properties / view / enumPrevious value: -[ - "standard", - "csc_complement" -]New value: +[ + "standard", + "registrar_complement" +]
- Changed
brand_audit_single2 fields changed- changed
Input schema / properties / view / descriptionPrevious value: -"Output view mode. 'csc_complement' produces a CSC-tuned payload; requires enterprise tier. Default 'standard'."New value: +"Output view mode. 'registrar_complement' produces a registrar-complement payload; requires enterprise tier. Default 'standard'." - changed
Input schema / properties / view / enumPrevious value: -[ - "standard", - "csc_complement" -]New value: +[ + "standard", + "registrar_complement" +]
- Removed
prioritize_csc_leads - Added
prioritize_portfolio_leads
3 tool updates
v3.73.3- Added
batch_scan_findings - Added
batch_scan_start - Added
batch_scan_status
4 tool updates
v3.63.0- Removed
assess_coverage - Removed
get_ca_policies - Removed
query_signins - Removed
query_ual
54 tool updates
v3.54.0- Changed
brand_audit_batch_start2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
brand_audit_get_report2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
brand_audit_single2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
brand_audit_status2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_agent_discovery2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_authoritative_dns_infra2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_bimi2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_caa2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_dane2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_dane_https2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_dbl2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_dkim2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_dmarc2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_dnskey_strength2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_dnssec2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_dnssec_chain2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_fast_flux2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_http_security2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_lookalikes2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_mta_sts2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_mx2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_mx_reputation2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_ns2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_nsec_walkability2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_ptr2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_rbl2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_realtime_threat_feed2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_root_server_set2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_shadow_domains2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_spf2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_srv2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_ssl2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_subdomailing2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_subdomain_takeover2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_svcb_https2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_tlsrpt2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_txt_hygiene2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
check_zone_hygiene2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
cymru_asn2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
delete_brand_audit_watch2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
discover_brand_domains2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
list_brand_audit_watches2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
osint_investigate_domain_start1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
- Changed
osint_investigate_email_start1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
- Changed
osint_investigate_infrastructure_start1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
- Changed
osint_investigate_supply_chain_start1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
- Changed
osint_investigate_username_start1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
- Changed
osint_investigation_report1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
- Changed
osint_investigation_status1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
- Changed
rdap_lookup2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
register_brand_audit_watch2 fields changed- added
Output schema / properties / checkStatusAdded value: +{ + "type": "string" +} - added
Output schema / properties / partialAdded value: +{ + "type": "boolean" +}
- Changed
scan_buckets_findings1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
- Changed
scan_buckets_start1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
- Changed
scan_buckets_status1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": {}, - "properties": { - "category": { - "type": "string" - }, - "findings": { - "items": { - "additionalProperties": {}, - "properties": {}, - "type": "object" - }, - "type": "array" - }, - "passed": { - "type": "boolean" - }, - "score": { - "type": "number" - } - }, - "required": [ - "category", - "score", - "passed", - "findings" - ], - "type": "object" -}New value: +null
71 tool updates
v3.37.0- Added
analyze_drift - Added
assess_coverage - Added
assess_spoofability - Added
batch_scan - Added
brand_audit_get_report - Added
brand_audit_status - Added
check_agent_discovery - Added
check_authoritative_dns_infra - Added
check_caa - Added
check_dane - Added
check_dbl - Added
check_dkim - Added
check_dmarc - Added
check_dnskey_strength - Added
check_dnssec - Added
check_dnssec_chain - Added
check_fast_flux - Added
check_http_security - Added
check_lookalikes - Added
check_mta_sts - Added
check_mx - Added
check_mx_reputation - Added
check_ns - Added
check_nsec_walkability - Added
check_ptr - Added
check_rbl - Added
check_realtime_threat_feed - Added
check_resolver_consistency - Added
check_root_server_set - Added
check_shadow_domains - Added
check_spf - Added
check_srv - Added
check_ssl - Added
check_subdomailing - Added
check_subdomain_takeover - Added
check_svcb_https - Added
check_tlsrpt - Added
check_txt_hygiene - Added
check_zone_hygiene - Added
compare_baseline - Added
compare_domains - Added
cymru_asn - Added
delete_brand_audit_watch - Added
discover_brand_domains - Added
discover_brand_domains_findings - Added
discover_brand_domains_start - Added
discover_brand_domains_status - Added
discover_subdomains - Added
explain_finding - Added
generate - Added
get_benchmark - Added
get_ca_policies - Added
get_domain_rank - Added
get_provider_insights - Added
list_brand_audit_watches - Added
map_compliance - Added
map_supply_chain - Added
osint_investigate_domain_start - Added
osint_investigate_infrastructure_start - Added
osint_investigation_report - Added
prioritize_csc_leads - Added
query_ual - Added
rdap_lookup - Added
register_brand_audit_watch - Added
resolve_spf_chain - Added
scan_buckets_findings - Added
scan_buckets_start - Added
scan_buckets_status - Added
scan_domain - Added
simulate_attack_paths - Added
validate_fix
71 tool updates
v3.31.1- Removed
analyze_drift - Removed
assess_coverage - Removed
assess_spoofability - Removed
batch_scan - Removed
brand_audit_get_report - Removed
brand_audit_status - Removed
check_agent_discovery - Removed
check_authoritative_dns_infra - Removed
check_caa - Removed
check_dane - Removed
check_dbl - Removed
check_dkim - Removed
check_dmarc - Removed
check_dnskey_strength - Removed
check_dnssec - Removed
check_dnssec_chain - Removed
check_fast_flux - Removed
check_http_security - Removed
check_lookalikes - Removed
check_mta_sts - Removed
check_mx - Removed
check_mx_reputation - Removed
check_ns - Removed
check_nsec_walkability - Removed
check_ptr - Removed
check_rbl - Removed
check_realtime_threat_feed - Removed
check_resolver_consistency - Removed
check_root_server_set - Removed
check_shadow_domains - Removed
check_spf - Removed
check_srv - Removed
check_ssl - Removed
check_subdomailing - Removed
check_subdomain_takeover - Removed
check_svcb_https - Removed
check_tlsrpt - Removed
check_txt_hygiene - Removed
check_zone_hygiene - Removed
compare_baseline - Removed
compare_domains - Removed
cymru_asn - Removed
delete_brand_audit_watch - Removed
discover_brand_domains - Removed
discover_brand_domains_findings - Removed
discover_brand_domains_start - Removed
discover_brand_domains_status - Removed
discover_subdomains - Removed
explain_finding - Removed
generate - Removed
get_benchmark - Removed
get_ca_policies - Removed
get_domain_rank - Removed
get_provider_insights - Removed
list_brand_audit_watches - Removed
map_compliance - Removed
map_supply_chain - Removed
osint_investigate_domain_start - Removed
osint_investigate_infrastructure_start - Removed
osint_investigation_report - Removed
prioritize_csc_leads - Removed
query_ual - Removed
rdap_lookup - Removed
register_brand_audit_watch - Removed
resolve_spf_chain - Removed
scan_buckets_findings - Removed
scan_buckets_start - Removed
scan_buckets_status - Removed
scan_domain - Removed
simulate_attack_paths - Removed
validate_fix
1 tool update
v3.29.8- Changed
scan_buckets_findings1 field changed- added
Input schema / requiredAdded value: +[ + "scanId" +]
80 tool updates
v3.29.7- First observed
analyze_drift - First observed
assess_coverage - First observed
assess_spoofability - First observed
batch_scan - First observed
brand_audit_batch_start - First observed
brand_audit_get_report - First observed
brand_audit_single - First observed
brand_audit_status - First observed
check_agent_discovery - First observed
check_authoritative_dns_infra - First observed
check_bimi - First observed
check_caa - First observed
check_dane - First observed
check_dane_https - First observed
check_dbl - First observed
check_dkim - First observed
check_dmarc - First observed
check_dnskey_strength - First observed
check_dnssec - First observed
check_dnssec_chain - First observed
check_fast_flux - First observed
check_http_security - First observed
check_lookalikes - First observed
check_mta_sts - First observed
check_mx - First observed
check_mx_reputation - First observed
check_ns - First observed
check_nsec_walkability - First observed
check_ptr - First observed
check_rbl - First observed
check_realtime_threat_feed - First observed
check_resolver_consistency - First observed
check_root_server_set - First observed
check_shadow_domains - First observed
check_spf - First observed
check_srv - First observed
check_ssl - First observed
check_subdomailing - First observed
check_subdomain_takeover - First observed
check_svcb_https - First observed
check_tlsrpt - First observed
check_txt_hygiene - First observed
check_zone_hygiene - First observed
compare_baseline - First observed
compare_domains - First observed
cymru_asn - First observed
delete_brand_audit_watch - First observed
discover_brand_domains - First observed
discover_brand_domains_findings - First observed
discover_brand_domains_start - First observed
discover_brand_domains_status - First observed
discover_subdomains - First observed
explain_finding - First observed
generate - First observed
get_benchmark - First observed
get_ca_policies - First observed
get_domain_rank - First observed
get_provider_insights - First observed
list_brand_audit_watches - First observed
map_compliance - First observed
map_supply_chain - First observed
osint_investigate_domain_start - First observed
osint_investigate_email_start - First observed
osint_investigate_infrastructure_start - First observed
osint_investigate_supply_chain_start - First observed
osint_investigate_username_start - First observed
osint_investigation_report - First observed
osint_investigation_status - First observed
prioritize_csc_leads - First observed
query_signins - First observed
query_ual - First observed
rdap_lookup - First observed
register_brand_audit_watch - First observed
resolve_spf_chain - First observed
scan_buckets_findings - First observed
scan_buckets_start - First observed
scan_buckets_status - First observed
scan_domain - First observed
simulate_attack_paths - First observed
validate_fix
TDQS
Scored across 80 tools
Each tool has a clearly scoped purpose with detailed descriptions, and async variants follow obvious start/status/findings patterns. However, similar-sounding pairs like check_rbl/check_mx_reputation and check_dane/check_dane_https rely on descriptions to avoid mis-selection.
Most security checks use a consistent check_* prefix, and async workflows follow a predictable _start/_status/_findings convention. Some verbs vary (get_, assess_, map_, simulate_) and a few tools like generate or resolve_spf_chain don't fit a uniform pattern, but the overall structure is coherent.
With 80 tools, this is far beyond typical MCP server scope and creates significant selection overhead. While the domain is broad and many tools are async wrappers, the sheer number risks overwhelming agents and diluting clarity.
The tool surface covers the full lifecycle: individual DNS/email checks, comprehensive scans, async batch operations, brand audits, OSINT investigations, compliance mapping, remediation generation, and drift tracking. There are no obvious dead ends or missing critical operations for the stated purpose.
Maintenance
Related MCP Connectors
Scan, fix, verify and monitor DNS: SPF, DMARC, DKIM, propagation, health, expiry. Validated fixes.
Remote MCP server: 19 domain-hygiene and email-auth tools (DNS, SPF, DMARC, DKIM, TLS).
DNS and email security: check SPF, DKIM, DMARC, DNSSEC, DANE and build the records. 45 tools.
Monitor and manage email authentication (SPF, DKIM, DMARC, MTA-STS, BIMI) for your domains.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables DNS and email security analysis through passive and active scanning capabilities. Provides comprehensive domain security checks including SPF, DMARC, DNSSEC validation, MX record analysis, and SMTP connectivity testing.MIT
- AlicenseNot gradedqualityDmaintenanceAn advanced email security analysis MCP server for real-time phishing detection, comprehensive header analysis, and threat intelligence integration. It enables users to extract indicators of compromise and validate email authentication protocols like DKIM, SPF, and DMARC.MIT
- AlicenseAqualityBmaintenanceProvides comprehensive tools for real-time DNS queries across 53 record types, global propagation checks, and SSL certificate analysis. It also enables domain security scans for SPF/DKIM/DMARC configurations and HTTP uptime monitoring.842 npm22Apache 2.0
- AlicenseAqualityBmaintenanceAn MCP server that checks SPF, DKIM, DMARC, and MX records for a domain, returning a health verdict and specific DNS fixes to improve email deliverability.1MIT