Dechonet MCP
DechoNet MCP provides 30 read-only domain-security reconnaissance tools for AI agents — DNS, TLS, HTTP, email, exposure, phishing, and change/history checks — with no API key needed for non-commercial use.
Phishing & impersonation: check suspicious links/smishing messages (
phishing_link_check), screen a page before logging in or paying (check_before_action), measure brand-impersonation exposure (impersonation_exposure), find registered typosquats (lookalike_domains), and report bad pages or malicious MCP servers (report_page).DNS & infrastructure: look up DNS records with DNSSEC/SPF/DMARC validation (
dns_lookup), compare answers across global resolvers (dns_propagation), resolve PTR/FCrDNS (reverse_dns), identify ASN/BGP ownership (asn_lookup), compute IPv4 subnets offline (subnet_calc), and see your egress IP (ip_info).TLS, HTTP & web posture: audit certificates, chain, ciphers and HSTS with an A+–F grade (
ssl_check), audit security headers and redirects (http_security), run an OWASP-mapped external checkup (owasp_check), and assess post-quantum TLS readiness (pqc_readiness).Email: assess SPF/DKIM/DMARC/BIMI/MTA-STS/DANE deliverability (
email_auth) and trace a delivered message's hops and auth results (email_header_analysis).Attack surface & exposure: enumerate CT-log subdomains (
subdomain_discovery), map exposed admin/staging/dev/VPN hosts (exposure_map), and probe open TCP ports with authorization (port_scan).Ownership & lifecycle: pull RDAP/WHOIS registration data (
whois_lookup), check go-live readiness (golive_check), and run a 0–100 graded full audit (security_scan).Monitoring & change tracking: start a daily watch (
watch_domain), see what changed since last check (domain_changes), review infrastructure history (domain_history), pivot on shared infrastructure with a free API key (infrastructure_pivot), and define/verify outside expectations with signed receipts (set_expectations,verify_expectations).Agent-specific: vet a remote MCP server's auth, acting tools, and tool-poisoning text before connecting (
mcp_server_check); connect via remote Streamable HTTP (https://dechonet.com/mcp) or stdio, and also use the same checks from a CLI/CI step.
Assesses a domain's external security posture against OWASP standards: the OWASP Secure Headers Project checks plus the externally observable OWASP Top 10 subset (cryptographic failures, security misconfiguration, vulnerable/outdated components), returning an A+ to F grade with per-category findings and an explicit list of out-of-scope categories that require authenticated or active testing.
DechoNet MCP Server
dechonet.com · Remote MCP (no install) · Phishing link check · Free web tools · HTTP API · Detection benchmark · Status
Domain security reconnaissance for AI agents via the Model Context Protocol.
30 tools. No API key needed for non-commercial use. Phishing/smishing link checks, exposed admin page checks (admin screens, test servers, dev tools left open), DNS, SSL/TLS, post-quantum TLS readiness, HTTP security headers, email authentication, port scan, DNS propagation, reverse DNS, ASN/BGP, RDAP/WHOIS, subdomain discovery (CT logs), lookalike/typosquat detection, OWASP-mapped observable checks, brand-impersonation exposure, go-live readiness, MCP server checks before you connect one, domain change history — what changed since the last check — infrastructure history and pivots (past nameservers/IPs/issuers, and other domains seen on the same rare infrastructure), and a daily watch you can set from the agent.
Every result comes back interpreted, not just as raw JSON: a status, the key numbers, each issue with severity and confidence, and the concrete action to take. That is what an agent needs to tell a human what to do next.
Part of DechoNet. Every tool here is also a free web tool at dechonet.com — no sign-up — backed by error-fix guides. This package brings the same checks to AI agents.
Zero-install: remote endpoint
No npx, no install. Point any MCP client that speaks Streamable HTTP at:
https://dechonet.com/mcpClient | How to connect |
Claude Code |
|
Claude app / Desktop | Listed in the Claude connectors directory: Customize → Connectors, search DechoNet → Connect. Or + Add → Add custom connector with the URL (Free plan: one custom connector) |
ChatGPT | chatgpt.com/plugins → + → Add custom MCP server → URL under Connection, no authentication → Create as a plugin (work/school accounts need an admin to allow custom MCP servers) |
Cursor |
|
VS Code (Copilot agent mode) |
|
Gemini CLI |
|
Codex |
|
Windsurf |
|
Any stdio-only client | npm package — see Quick Start below |
Step-by-step for each client: dechonet.com/mcp. The remote endpoint also serves 3 curated prompts (audit_domain, monitor_setup, investigate_changes) and 2 reference resources.
Related MCP server: domain-security-mcp-server
Quick Start (stdio, Claude Desktop)
Add to your claude_desktop_config.json:
{
"mcpServers": {
"dechonet": {
"command": "npx",
"args": ["-y", "dechonet-mcp"]
}
}
}Config file location:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Restart Claude Desktop; DechoNet shows up in the chat input's tools menu. (Claude Desktop can also skip the install and add https://dechonet.com/mcp as a custom connector — see the table above.)
Install
# Via npx (no install needed)
npx dechonet-mcp
# Or install globally
npm install -g dechonet-mcpCommand line
The same checks work from a terminal or a CI step — no MCP client needed:
npx dechonet-mcp ssl example.com
npx dechonet-mcp email example.com --json
npx dechonet-mcp scan example.com --fail-on bad # exit 2 when the overall grade is D or FChecks: dns, ssl, http, email, port, propagation, rdns, asn, whois, subdomains, lookalike, scan, owasp, golive, pqc, mcp, phishing, exposure, changes, history, impersonation, ip, subnet (or any tool name below). --json prints the structured result, --raw keeps the raw data, --port sets the TLS port. Exit codes: 0 done, 1 the lookup failed, 2 the result reached --fail-on (bad or warn). With no arguments the package runs as the MCP server.
Available Tools
Tool | Description |
| Is this link a scam? — paste a text message or URL; follows shorteners, checks domain age, Korean brand impersonation, APK downloads, phishing feeds |
| Admin pages open to the internet? — subdomains from CT, each opened once: admin screens, staging, dev tools, VPN logins, default pages, directory listings (counts; per-host detail for the verified owner on the web report) |
| Comprehensive scan — 9 checks in parallel, 0-100 Health Score, A-F grade |
| DNS records + DNSSEC + SPF/DMARC validation |
| SSL/TLS certificate, chain, expiry, HSTS, CT history, A-F grade |
| HTTP redirect trace + 10 security headers audit, A-F grade |
| SPF, DMARC, DKIM, BIMI, MTA-STS, DANE + blacklist check |
| Open TCP ports with service identification |
| DNS propagation across 6 public resolvers |
| PTR record + FCrDNS verification |
| ASN/BGP network identification + abuse contact |
| RDAP/WHOIS domain registration data |
| Passive subdomain enumeration from CT logs, operational-name flags (dev/staging/admin), wildcard detection |
| Typosquat variants that are actually registered — homoglyph, affix (brand-login), TLD swap, keyboard slips — with the domain's own defensive registrations separated out |
| OWASP-mapped checks that can be observed passively (headers, TLS, exposed files), honest about what is out of scope |
| Brand impersonation exposure grade: third-party lookalikes + exposed operational subdomains + wildcard certs |
| Go-live readiness — DNS, propagation, SSL, HTTP, registration in one READY / CAUTION / NOT READY verdict |
| Past nameservers, A/AAAA, MX, certificate issuer, registrar (and an IP's ASN/PTR) with first and last seen — from DechoNet's own observations, not passive DNS |
| Other domains DechoNet saw with the same nameserver, IP, MX, issuer or registrar. Needs a free API key ( |
| What changed since the last check — status, grade, issuer, DNS, issues. Works from lookup history even without a watch |
| Post-quantum TLS readiness: hybrid X25519MLKEM768 key exchange, whether the origin server or a CDN edge provides it, certificate signature algorithms. External indicator, not a full PQC audit |
| Before you connect a remote MCP server: authentication and OAuth metadata, tools that act (commands, files, messages, payments, secrets), agent-steering text in tool descriptions, CORS/Origin, HTTPS. Initialize and tools/list only — no tool is called |
| Register a domain for daily re-checks (SSL, DNS, HTTP, RDAP) so |
| State what a domain should show from outside (a header present, DMARC enforcing, an issue gone, a grade, certificate days, DNS records, HTTPS answering), check it now with fresh reads and every day after. Each result comes with a signed observation receipt; with an API key, a set that stops holding is reported in your account's daily mail |
| Before logging in, paying, downloading or submitting: whether the page impersonates a brand, how new the domain is, whether it was flagged before, and — when the caller reports the page structure as host names — whether the card fields sit with a known payment provider. Answers danger / suspicious / unreachable / official / no_signals, with what was not checked; never 'safe' |
| Report a page (phishing, fake payment window, hidden instructions for AI agents, malicious download, or a verdict that looks wrong), an MCP server whose tool descriptions steer agents, or a network anomaly (the certificate or addresses you saw differ). Only the host and kind are kept; a report changes no verdict by itself — DechoNet checks the page itself, independent reports first |
| Check a stored set (by id) or a one-off list from outside now — after a change, to see whether it is visible yet |
| Public IP, ISP, ASN, proxy detection |
| Email delivery route tracing + auth results |
| CIDR subnet calculator (offline) |
Every tool response ends with a link to the full interactive report on dechonet.com for the human behind the agent.
Example Prompts
Once connected, try asking Claude:
"Audit the security posture of example.com"
"Is the SSL certificate for mysite.com about to expire?"
"Which subdomains of example.com are exposed in CT logs?"
"Are there registered lookalike domains of mybrand.com?"
"How exposed is mybrand.com to impersonation?"
"Is example.com ready to go live?"
"What changed on example.com since the last check?"
"Analyze these email headers: [paste headers]"
"What's the ASN for 8.8.8.8?"
Local SSE Transport
For a self-hosted HTTP/SSE bridge (the hosted remote endpoint above is usually simpler):
npm run start:sse
# Server runs on http://localhost:3100
# SSE endpoint: http://localhost:3100/sseDevelopment
npm install
npm run build # TypeScript → build/
npm run dev # Run with tsx (stdio)
npm run start:sse # Run SSE serverHow It Works
The MCP server calls DechoNet's public API (https://dechonet.com/api/util/*) — the same backend as the dechonet.com web tools — and returns structured results with:
Status (ok/warn/bad)
KPIs (key numbers per tool)
Issues with severity (critical/warning/info) and confidence levels
Actionable remediation steps
Raw data (full JSON)
All data comes from public sources (DNS, HTTP headers, SSL certificates, CT logs, RDAP). Passive by design: no active exploitation, and a registered lookalike is reported as a fact to verify, never as an accusation.
Environment Variables
Variable | Default | Description |
|
| API base URL |
|
| Response language ( |
| — | Optional free API key from your DechoNet account: your own rate-limit bucket, and required for |
| — | Your own DechoNet login cookie, only for the signed-in tools. Keep it secret |
|
| SSE server port |
Terms of use
Free use (with or without a key) is for non-commercial purposes from November 8, 2026 — personal learning and research, checking your own domains, non-profit work. Using DechoNet inside a paid product, for clients, or regularly for company work needs MCP·API Pro (dechonet.com/pro); until payments open, ask at support@dechonet.com. Full terms: dechonet.com/terms §4.
About DechoNet
DechoNet is a domain security reconnaissance platform — distributed observation, cross-verification. The same diagnostics ship three ways: free web tools, error-fix guides, and this MCP server.
🌐 Web tools (free, no sign-up): https://dechonet.com
📘 Guides (fix common DNS/SSL/HTTP/email errors): https://dechonet.com/guides
🎣 Phishing / smishing link check (opens the link like a Korean phone): https://dechonet.com/util/phishing
🩺 Full domain check (DNS, SSL, headers, email auth, ports, PQC in one score): https://dechonet.com/util/all
🔔 Monitoring (daily re-checks, change history): https://dechonet.com/pro
🛠 HTTP API (same tools, OpenAPI): https://dechonet.com/developers · https://dechonet.com/openapi.json
📏 How results are judged / monthly detection benchmark: https://dechonet.com/methodology · https://dechonet.com/benchmark
🟢 Service status: https://dechonet.com/status
MIT licensed. Issues and PRs welcome.
Signed-in tools
These tools appear only when the server has your DechoNet login: set DECHONET_SESSION_COOKIE to your own current cookie as it is sent, e.g. dn_acct=… (or dn_acct=…; dn_ws=… when you work in an agency workspace). Treat it like a password. It is sent only to the exact private endpoints below, never to the public diagnostics, and a public API key does not stand in for it. Without it the server lists the 30 public tools.
Business plan — active checks on domains you own (plans)
Tool | Description |
| Start a limited active check (Nuclei) on a verified asset from your attack-surface report. Needs current DNS TXT ownership, the exact root URL from that report and |
| Progress, coverage and sanitized findings. Partial or failed is not a clean result; technology detection is not proof of a vulnerability. Never starts requests |
| Stop new requests and end the job. Requests already sent cannot be recalled |
Investigator case spaces — case_kit_search and case_kit_observe work only with a case owner session or an existing case access cookie. Search reads stored, case-scoped page fingerprints; observe re-opens a case target under the same render rules and daily cap. Similar screens and kit candidates never confirm a person or a phishing verdict.
Available Tools
30 toolsasn_lookupASN / BGP LookupARead-onlyIdempotentInspect
Look up Autonomous System (ASN) / BGP information for an IP address or AS number: the network operator, announced prefixes, abuse contact, and a classification (cloud, CDN, ISP, hosting, or enterprise). Use this to identify who runs a network or whether an IP is cloud/CDN-hosted. Use reverse_dns instead for the host-level PTR name of a single IP. Read-only; requires no API key; rate-limited. Returns operator, prefixes, classification, and abuse contact.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | An IP address (e.g., '1.1.1.1') or an AS number in 'AS####' form (e.g., 'AS13335'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds value beyond them by disclosing 'requires no API key' and 'rate-limited' — operational facts not present in the structured fields. It does not quantify the rate limit, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences with zero filler: purpose, use case, sibling routing, and operational caveat, with the primary purpose front-loaded. 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?
Output schema exists, so return values need not be explained, yet the description still summarises them. With one fully-documented parameter, full annotations, and a clear sibling routing rule, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single param whose format ('1.1.1.1' or 'AS13335') is fully documented in the schema. The description restates the accepted input types without adding syntax or edge-case detail, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (look up) and resource (ASN/BGP info for an IP or AS number) and enumerates what is returned: operator, prefixes, abuse contact, classification. It also explicitly names the sibling it is not (reverse_dns), so an agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use cases (identify who runs a network; check whether an IP is cloud/CDN-hosted) and an explicit alternative with the condition that selects it: 'Use reverse_dns instead for the host-level PTR name of a single IP.' No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_before_actionCheck a Page Before Logging In or PayingARead-onlyIdempotentInspect
Check the page an agent is about to log in, pay, download from or submit to: whether the address impersonates a brand, how new the domain is, whether DechoNet or a licensed feed has already flagged it, and — opened from Seoul (and Tokyo for Japan-targeted pages) as a phone — what the page turns into, including text it hides from people but an AI agent would read (instructions to ignore its rules, hand over secrets or keep the user out of it raise the answer to suspicious). For a payment, the caller can report the page structure as host names only (where forms submit, which origins frames come from, whether the card fields sit on the page itself or in a frame and that frame's origin): card fields outside a known payment provider (Stripe, PayPal, Braintree, Adyen, Square, Checkout.com, Toss Payments, KG Inicis, NHN KCP, NICE Payments, Naver Pay, Korean card issuers and banks) are reported as suspicious — a fake card window inside a real shop shows up only this way. Paths, queries, field values and page text are not accepted, and the structure is not stored. Verdicts: danger, suspicious, unreachable, official, no_signals. no_signals means none of the checks found a warning sign and is not a statement that the page is safe; 'unchecked' lists what was not looked at. Rate-limited. Returns signals with their source and a signed observation record (host and verdict only).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Address of the page (https://…) | |
| page | No | Optional page structure, host names only | |
| action | Yes | What is about to happen on the page | |
| expectedBrand | No | Brand the page is believed to belong to (e.g. 'PayPal', 'Shinhan Card'); a domain without that name is noted |
Output Schema
| Name | Required | Description |
|---|---|---|
| host | Yes | Host the address ended on (after redirects) |
| ageDays | No | Days since the domain was registered, when known |
| signals | Yes | |
| verdict | Yes | danger: evidence the page impersonates or attacks; suspicious: warning signs; unreachable: could not be read; official: the brand's own domain; no_signals: none of the checks found a warning sign — not a statement that the page is safe (see unchecked) |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| unchecked | Yes | What was not looked at: 'page_structure' (no structure sent for a login or payment), 'rendering' (the page was not opened in a browser), 'hidden_instructions' (so hidden text aimed at AI agents was not read) |
| paymentProvider | No | Payment provider recognised for the page or its card frame |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint/idempotent/destructive hints already covering safety, the description still adds a great deal: it is rate-limited, it enumerates the exact verdicts (danger, suspicious, unreachable, official, no_signals), it warns that no_signals is not a safety claim, it discloses that 'unchecked' lists what was not examined, and that output includes signals with sources plus a signed observation record. That is unusually rich disclosure and is consistent 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 opening clause is well front-loaded, but the body is a single sprawling paragraph dense with parentheticals and em-dashes (the full payment-provider list, the render caveats) that is hard to scan. Most content earns its place, but the structure does not aid rapid reading.
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 high-complexity tool with nested objects, an enum action, and an output schema, the description covers the important caveats (rate limiting, verdict semantics, unchecked scope). Since an output schema exists it need not restate return shapes, and the main remaining gap is the absent routing against sibling phishing/impersonation tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it explains why the page structure matters (card fields outside a known payment provider list are reported suspicious, and this is the only way a fake card window inside a real shop surfaces), constrains the structure to host names only, and notes that expectedBrand causes a domain mismatch to be reported. This goes beyond the schema's field-level text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (check) and a precise resource/trigger (the page an agent is about to log in, pay, download from or submit to), then enumerates exactly what is examined: brand impersonation, domain age, feed flags, headless-render behavior, and card-field placement. It is far more specific than a generic 'check page.' It does not, however, differentiate itself from potential siblings like phishing_link_check or impersonation_exposure, so it stops short of 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 usage trigger is explicit and front-loaded: call it before logging in, paying, downloading, or submitting. It also states input exclusions (paths, queries, field values and page text are not accepted, structure not stored), which is a useful 'when-not' for arguments. It never names an alternative sibling or explains when a different check would be preferable, so no 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dns_lookupDNS LookupARead-onlyIdempotentInspect
Query DNS records (A, AAAA, MX, TXT, NS, SOA, CAA) for a domain and validate email-related records, including DNSSEC presence and SPF/DMARC syntax, returning severity-rated diagnostics. Use this for a single authoritative answer about one domain. Use dns_propagation instead when you need to compare answers across multiple global resolvers (e.g., right after a change), or email_auth for a full SPF/DKIM/DMARC deliverability assessment. Read-only; requires no API key or authentication; subject to rate limiting. Returns a text report: status, KPI summary, detected issues, and recommended actions.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Registrable domain or hostname to query, without scheme or path (e.g., 'example.com' or 'mail.example.com'). Do not include 'http://' or a trailing slash. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, openWorld, and non-destructive, so the safety profile is handled elsewhere. The description adds real value beyond them: no API key or authentication required, rate limiting applies, and results are severity-rated diagnostics rather than raw records. It stops short of describing pagination or error/failure behavior, keeping it at a 4.
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 routing information (what it does, when to use it, which siblings to prefer) is front-loaded in the first three sentences, with operational notes trailing. Slightly long, and the closing sentence describing the returned text report partially duplicates the output schema, but every sentence is informative.
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 explaining return values in detail is unnecessary, yet the description still summarizes the report shape. Combined with the auth/rate-limit disclosure and explicit sibling routing, an agent has everything needed to invoke this 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?
Only one parameter and schema coverage is 100%, so the schema already fully documents the domain format including the no-scheme/no-trailing-slash guidance. The description adds no parameter-level detail beyond that, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Query) and resource (DNS records), enumerates supported record types (A, AAAA, MX, TXT, NS, SOA, CAA), and adds the validation scope (DNSSEC presence, SPF/DMARC syntax). It explicitly distinguishes itself from dns_propagation and email_auth, so an agent can select it correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('a single authoritative answer about one domain') and two named alternatives with the exact conditions that select them: dns_propagation for cross-resolver comparison after a change, email_auth for full deliverability assessment. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dns_propagationDNS Propagation CheckARead-onlyIdempotentInspect
Query one DNS record across 8+ global public resolvers (Google, Cloudflare, Quad9, OpenDNS, and more) simultaneously and report which resolvers return stale versus updated values. Use this after changing a record to confirm worldwide propagation. Use dns_lookup instead for a single authoritative answer with SPF/DMARC validation. Read-only; requires no API key; rate-limited. Returns per-resolver values and a consistency verdict.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | DNS record type to compare across resolvers. Defaults to A (IPv4 address), the most common propagation check. | A |
| domain | Yes | Domain whose record to compare across resolvers (e.g., 'example.com'), without scheme or path. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the bar is lower. The description still adds real operational context: named resolver set, no API key required, and rate-limited. It stops short of quantifying the rate limit or describing concurrency/retry 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?
Four tight sentences, purpose front-loaded before the routing guidance and behavioral notes. The final sentence on return values ('per-resolver values and a consistency verdict') partially duplicates the existing output schema, which slightly dilutes the 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?
An output schema exists so return values need not be spelled out, and annotations carry the safety profile. The description supplies the routing and resolver-coverage context an agent needs; only minor gaps remain around rate-limit specifics and failure behavior when a resolver is unreachable.
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 both parameters (domain, type with enum and default) are already fully documented in the schema. The description adds only the framing that one record type is compared across resolvers, not new syntax or format guidance, so 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 gives a specific verb (query/compare) and resource (one DNS record across 8+ named public resolvers) and explicitly frames the outcome (stale vs updated per resolver). It is immediately distinguishable from dns_lookup, which it names as the single-answer alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the exact trigger ('use this after changing a record to confirm worldwide propagation') and routes to the sibling with an explicit condition ('use dns_lookup instead for a single authoritative answer with SPF/DMARC validation'). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_changesDomain Change HistoryARead-onlyIdempotentInspect
Report what has changed for a domain over time — the security regressions and drift that DechoNet's daily monitoring has recorded across every watch on the domain (SSL grade, headers, DNS, OWASP posture, impersonation exposure, etc.). Use this to answer "what changed on my domain since yesterday/last week?" — a question that requires persistent snapshots and therefore cannot be reconstructed from a single live lookup. It is the first check to run when a domain looked at before comes up again. Two sources: (a) the daily watch timeline if the domain is under DechoNet monitoring, and (b) even without a watch, the difference between the last two stored lookups of each tool — so a second lookup already yields a comparison. The point-in-time tools (security_scan, owasp_check, ssl_check) give the current state instead. Read-only; requires no API key; rate-limited. Returns the monitored tools, a newest-first change timeline, lookup-to-lookup changes, and a link to manage monitoring.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain whose recorded change history to fetch (e.g., 'example.com'). Scheme and path are stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| changes | No | Recorded changes, newest first |
| watched | Yes | Whether the domain is under an active daily watch |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Where a human can start or manage monitoring |
| changeCount | No | Number of changes recorded |
| historyChanges | No | Lookup-to-lookup changes, newest first |
| historyChangeCount | No | Changes found between the last two stored lookups per tool (no watch needed) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive safety profile, but the description adds real context: it requires no API key, is rate-limited, and operates from two sources (daily watch timeline, or the diff of the last two stored lookups). The rate-limit disclosure is vague (no numbers), which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then usage, sources, and return/behavioral notes. It is fairly dense with several sentences, but each adds decision-relevant information rather than filler. Slightly long relative to the single-parameter surface.
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 not be spelled out, yet the description still summarizes the return shape (monitored tools, newest-first timeline, lookup-to-lookup changes, management link). Combined with the two-source explanation and point-in-time contrast, an agent has everything needed to call 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?
Only one parameter and the schema already documents it at 100% coverage (including the scheme/path stripping behavior), so the schema carries the semantics. The description adds no further parameter detail, 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+resource: reporting what changed for a domain over time, enumerating the monitored dimensions (SSL grade, headers, DNS, OWASP posture, impersonation exposure). It clearly separates itself from the point-in-time tools (security_scan, owasp_check, ssl_check). It does not, however, distinguish itself from the close sibling 'domain_history' or 'watch_domain', leaving some ambiguity among similarly named 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?
Explicit when-to-use ('answer what changed since yesterday/last week', 'first check when a domain comes up again') and explicit alternatives ('the point-in-time tools give the current state instead'). It even states the condition that makes it meaningful (requires persistent snapshots, cannot be reconstructed from a live lookup).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
domain_historyInfrastructure HistoryARead-onlyIdempotentInspect
Show how a domain's (or IPv4 address's) infrastructure has changed over time from DechoNet's stored observations: nameservers, A/AAAA, MX, CNAME, certificate issuer, registrar, RDAP nameservers and status, and for an IP its ASN and PTR — each value with when it was first and last seen. Use this when the question is about the past ("when did the nameservers change?", "which IPs has it used?"); use dns_lookup or rdap_lookup for the current state. Coverage: only what DechoNet itself observed (lookups, watches, own discovery, and a daily re-resolution of the Korean-brand and phishing names it tracks) — not full passive DNS. Read-only; requires no API key; rate-limited. Returns per-kind value timelines and a coverage note.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Domain (e.g., 'example.com') or IPv4 address. Scheme, path and a leading www. are stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| kinds | Yes | |
| target | Yes | |
| observed | Yes | |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, yet the description adds material context beyond them: no API key required, rate-limited, the precise observation sources and the daily re-resolution caveat, plus the shape of the return (per-kind value timelines and a coverage note). This is unusually rich disclosure for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then usage routing, then coverage limits — well ordered and free of filler. It is dense with many clauses in one long sentence, but each clause carries distinct, useful information, so sizing is justified though not maximally tight.
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 not be detailed, and the description still sketches them (per-kind timelines + coverage note). Combined with explicit coverage limitations, safety/rate-limit notes, and alternative-tool routing, an agent has everything needed to call 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 coverage is 100% and the single 'target' parameter already documents domain/IPv4 format and stripping behavior. The description only echoes that it accepts a domain or IPv4 address, adding no syntax or format detail beyond the schema, 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?
States a specific verb+resource: it shows how a domain's or IPv4's infrastructure has changed over time, and enumerates the exact observation kinds (nameservers, A/AAAA, MX, CNAME, cert issuer, registrar, RDAP, ASN/PTR). It also distinguishes itself from dns_lookup and rdap_lookup, so an agent can route between them 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?
Explicitly scopes usage to past-tense questions with concrete examples ('when did the nameservers change?', 'which IPs has it used?') and names the alternatives (dns_lookup, rdap_lookup) for current state. It also states the coverage boundary — only DechoNet's own observations, not full passive DNS — which is exactly the when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_authEmail Authentication CheckARead-onlyIdempotentInspect
Assess a domain's email authentication and deliverability posture: MX records, SPF, DMARC, DKIM (probes 15 common selectors), BIMI, MTA-STS, TLS-RPT, and DANE, plus a blacklist check across all MX hosts, returning a 0-100 deliverability score. Use this for a full sending/receiving readiness review of a domain. Use dns_lookup instead if you only need raw TXT/MX records, or email_header_analysis to diagnose a specific message that was already sent. Read-only; requires no API key; rate-limited. Returns a text report: score, per-mechanism KPIs, issues, and actions.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Email domain to assess — the part after '@' (e.g., 'example.com'). An IP address is also accepted for reverse/PTR-based checks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, but the description adds context annotations do not carry: no API key required, rate-limited, and the depth of probing (15 DKIM selectors, blacklist across all MX hosts). It also discloses the return shape (text report with score, per-mechanism KPIs, issues, actions), which is real behavioral value beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb, resource, and scope before any routing or behavioral notes; the mechanism list is dense but each item is load-bearing for what the check covers. Three short sentences, no filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only assessment tool with an output schema, the description covers purpose, coverage, alternatives, auth/rate-limit traits, and return shape. An agent has everything needed to select and invoke it correctly without inspecting 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?
There is a single parameter with 100% schema description coverage, and the schema already explains that the value is the part after '@' and that an IP is accepted for PTR checks. The description adds no syntax, format, or constraint information 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?
States a specific verb (Assess) and resource (a domain's email authentication and deliverability posture), then enumerates the exact mechanisms probed (MX, SPF, DMARC, DKIM with 15 selectors, BIMI, MTA-STS, TLS-RPT, DANE, blacklist) and the 0-100 score output. It explicitly distinguishes itself from dns_lookup and email_header_analysis, so an agent can route without opening sibling 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?
Gives a positive use case (full sending/receiving readiness review) and two explicit alternatives with the conditions that select them: dns_lookup for raw TXT/MX records, email_header_analysis for a specific already-sent message. When-to-use, when-not-to-use, and routing are all covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
email_header_analysisEmail Header AnalysisARead-onlyIdempotentInspect
Parse raw email headers to reconstruct the delivery path (each Received hop in order), extract SPF/DKIM/DMARC authentication results, measure per-hop delays, and flag unencrypted (non-TLS) hops. Use this to diagnose a specific message that was already delivered — spoofing, delays, or where mail was lost. Use email_auth instead to assess a domain's sending configuration before sending. Read-only; requires no API key; rate-limited. INPUT is the full raw header block. OUTPUT is a text report containing: the ordered hop route, per-mechanism auth results (pass/fail), detected inter-hop delays, and the encryption status of each hop.
| Name | Required | Description | Default |
|---|---|---|---|
| headers | Yes | The complete raw email header block, copied verbatim — every line from the first 'Received:'/'From:' down to the blank line before the body. Paste as-is, including folded continuation lines; do not include the message body. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so the safety bar is lower. The description still adds non-obvious operational context the annotations cannot convey: no API key required and the tool is rate-limited, plus a summary of what the report contains. It stops short of quantifying the rate limit or noting failure modes on malformed input.
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?
Capability is front-loaded in the first sentence, followed by usage, alternative, and operational notes in a tight sequence with no filler. The trailing INPUT/OUTPUT sentences are somewhat redundant given a full output schema exists, which is the only real slack.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only diagnostic tool with both annotations and an output schema, the description covers purpose, selection criteria against the closest sibling, input expectations, and behavioral constraints. Nothing an agent needs in order to call 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 the single parameter's schema text is already detailed (verbatim block, folded lines, no body). The description's 'INPUT is the full raw header block' merely restates that, adding no syntax or format detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb chain (parse, reconstruct, extract, measure, flag) against a specific resource (raw email headers) and enumerates the exact analytical outputs. It explicitly distinguishes itself from the sibling email_auth, so an agent can route between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use ('diagnose a specific message that was already delivered — spoofing, delays, or where mail was lost') and an explicit alternative with its own condition ('Use email_auth instead to assess a domain's sending configuration before sending'). Both the trigger and the exclusion are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exposure_mapExposed Admin Page CheckARead-onlyIdempotentInspect
Map what an organisation exposes to the internet beyond its home page: subdomains from Certificate Transparency logs (plus hosts DechoNet has already observed), each opened once from outside and sorted into developer/ops tools, directory listings, admin screens, VPN/remote-access logins, staging servers, default install pages, login pages and so on — the forgotten assets AI-driven attack tools look for first. Use this when a user wants to know their attack surface or after a breach in their sector. Returns counts per category, a verdict (bad/warn/ok) and what to do. Public view only: the per-host list and a sensitive-file check are shown to the verified domain owner on the web report (DNS TXT), never through this tool. Read-only and passive beyond a single first-page request per host; no logins or path guessing; requires no API key; rate-limited (heavier than other tools — up to ~1 minute).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The organisation's domain (e.g., 'example.co.kr'). Scheme, path and a leading www. are stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | |
| counts | Yes | hosts per category (devtool, api_docs, listing, admin, remote, staging, default_page, login, api, mail, web, …) |
| issues | Yes | |
| probed | Yes | |
| status | Yes | bad | warn | ok | info |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/openWorld/idempotent/non-destructive, and the description adds substantial non-obvious context: public view only, the per-host list and sensitive-file check gated behind DNS TXT ownership verification, passive behavior beyond one first-page request per host, no logins or path guessing, no API key, and a heavy rate limit (~1 minute). That is exactly the behavioral layer structured fields cannot express.
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?
It is front-loaded with the core action and scope, and dense with useful traits rather than filler. The single long sentence-plus-clause structure is heavy to parse, and a couple of framing phrases ('the forgotten assets AI-driven attack tools look for first') are color rather than load-bearing, but nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no elaboration, yet the description still orients the agent ('counts per category, a verdict, and what to do'). Combined with the verification gating, rate limit, and no-API-key notes, an agent has everything required to call this 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?
There is a single parameter with 100% schema description coverage, and the schema already explains the domain format including the stripping of scheme/path/leading www. The description adds no syntax, format, or constraint information beyond that, 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 gives a specific verb (map), a specific resource (externally exposed assets beyond the home page), and an enumerated scope (subdomains from CT logs, categorized into dev/ops tools, admin screens, VPN logins, staging, etc.). It is clearly distinguishable from siblings like subdomain_discovery or impersonation_exposure by its categorization-and-verdict framing.
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 states explicit trigger conditions: 'when a user wants to know their attack surface or after a breach in their sector.' That is clear when-to-use guidance, but it never names a sibling (e.g., subdomain_discovery, impersonation_exposure) as the alternative for narrower cases, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
golive_checkGo-Live Readiness ChecklistARead-onlyIdempotentInspect
Check whether a domain is ready to launch or migrate — a go/no-go verdict over five essentials: DNS resolves to an IP, has propagated consistently across global resolvers, SSL/TLS is ready, the site is reachable over HTTPS, and the domain registration is not about to expire. Use this right before flipping DNS to a new server, or to confirm a migration has landed. It answers "can I switch over yet?"; use security_scan for a security posture grade or the individual tools for depth. Any failing essential yields not_ready; only cautions yields caution; all clear yields ready. Read-only (a passive multi-probe, though it does resolve and fetch the domain); requires no API key; rate-limited. Returns the verdict, per-check statuses, and a shareable report link.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to check for launch/migration readiness (e.g., 'example.com'). Scheme and path are stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| checks | No | |
| verdict | Yes | 'ready' | 'caution' | 'not_ready' |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| failCount | No | |
| passCount | No | |
| reportUrl | Yes | Human-facing interactive report on dechonet.com |
| warnCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile, yet the description adds substantial context: the verdict logic (failing essential -> not_ready, cautions -> caution, all clear -> ready), the passive-probe caveat that it nonetheless resolves and fetches, no API key required, and rate-limiting. It honestly reconciles 'read-only' with active network behavior, which is exactly the kind of nuance an agent needs.
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, each double-loaded: verb+scope first, then when-to-use, then disambiguation, then verdict semantics and constraints. The most decision-relevant content (what it checks and when to call it) is front-loaded 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?
With an output schema present, the description need not explain returns, yet it still sketches them (verdict, per-check statuses, report link). Combined with usage guidance, verdict rules, and the read-only/rate-limit caveats, nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, so the schema already documents 'domain' including scheme/path stripping. The description adds no syntax or format detail beyond that, 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?
States a specific verb ('Check whether a domain is ready') plus resource and enumerates all five essentials it evaluates (DNS resolution, propagation, SSL/TLS, HTTPS reachability, expiry). It also distinguishes itself from siblings by naming security_scan and 'the individual tools' explicitly, so an agent can route without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit timing ('right before flipping DNS to a new server, or to confirm a migration has landed') and frames the decision it answers ('can I switch over yet?'). It names alternative tools (security_scan, individual tools) and the condition that selects them (depth vs. posture grade), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_securityHTTP Security Headers AuditARead-onlyIdempotentInspect
Follow a URL's HTTP redirect chain and audit response security headers (CSP, HSTS, X-Frame-Options, COOP, CORP, COEP, Permissions-Policy), grading A+ to F on the six core headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy; COOP/CORP/COEP are reported but not graded) and flagging information leaks such as server-version disclosure. Use this for HTTP-layer/header posture. Use ssl_check instead for certificate or TLS-handshake issues, or security_scan for a full domain report. Read-only (an HTTP GET-style probe that sends no payload); requires no API key; rate-limited. Returns a text report: grade, header findings, redirect trace, issues, and actions.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL including scheme (e.g., 'https://example.com/path'). If the scheme is omitted, https:// is assumed. Redirects are followed starting from this URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive), the description adds that the probe is HTTP GET-style with no payload, requires no API key, is rate-limited, follows redirects, and discloses what the report contains (grade, findings, redirect trace, issues, actions). These are behavioral facts the annotations cannot 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?
Front-loaded with the core action before the graded-header detail, exclusions, and behavioral notes; each sentence carries substantive information. It is dense but not padded, though the parenthetical header lists are lengthy enough to border on over-specification.
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 one-parameter audit tool with an output schema, the description covers purpose, sibling routing, safety profile, prerequisites, and output shape. An agent has everything needed 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% for the single 'url' parameter, and the description adds little beyond it — the redirect-following behavior it mentions is already documented in the schema's url description. Baseline 3 is appropriate when the schema carries 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?
States a specific verb+resource: follows a URL's HTTP redirect chain and audits response security headers, enumerating exactly which headers are graded (six core) versus reported (COOP/CORP/COEP) and the A+–F grading scale. It explicitly names the closest siblings (ssl_check, security_scan) and the layer it owns, so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit selection rule: 'Use this for HTTP-layer/header posture', then routes certificate/TLS-handshake concerns to ssl_check and full-domain reporting to security_scan. Both the when-to-use and when-not-to-use conditions are stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
impersonation_exposureBrand Impersonation ExposureARead-onlyIdempotentInspect
Assess how exposed a domain is to brand impersonation and phishing, PASSIVELY: live typosquat/lookalike domains (homoglyph, omission, transposition, TLD swap) that actually resolve, operational subdomains (dev/staging/admin) exposed in CT logs, and whether a wildcard certificate exists — returning an A+ (low exposure) to F (high exposure) grade. Framing: a registered lookalike domain is not proof of impersonation — it may be a legitimate third party or the owner's own — so report it as exposure to verify, not as an accusation against that domain. Fully passive: public DNS delegation checks plus public CT-log queries, sending nothing to the target or the lookalike domains, so it is safe and lawful to run. Use lookalike_domains or subdomain_discovery for the raw per-tool detail. Read-only; requires no API key; rate-limited. Returns a text report: grade, counts, per-category findings, and a shareable report link.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Registrable domain to assess for impersonation exposure (e.g., 'example.com'). Scheme and path are stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| grade | Yes | Exposure grade A+ (low exposure) to F (high exposure) |
| score | Yes | 0-100, higher = less exposed |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| wildcard | No | Whether a wildcard certificate exists |
| reportUrl | Yes | Human-facing interactive report on dechonet.com |
| typosquatCount | Yes | Live third-party lookalike/typosquat domains (variants on the domain's own nameservers/IP are excluded) |
| riskySubdomainCount | Yes | Exposed operational subdomains found |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, but the description adds substantial context beyond that: the operation is fully passive, sends nothing to the target or lookalikes, uses public DNS delegation and CT-log queries, is rate-limited, and returns a shareable report link. It also flags an important interpretive caveat (a registered lookalike is exposure to verify, not proof of impersonation), which is genuine behavioral guidance.
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 paragraph is long but well front-loaded with purpose, then method, grade, caveat, passivity, alternatives, and constraints. Nearly every sentence earns its place, though the passive/no-data-sent point is restated and could be tightened slightly.
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 an output schema exists, the description need not explain returns, yet it usefully summarizes the report contents (grade, counts, per-category findings, report link). Together with the method, constraints, and caveat, an agent has everything needed to call and interpret this 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% for the single 'domain' parameter, and the schema already documents that scheme/path are stripped and gives an example. The description adds no parameter-level syntax beyond what the schema provides, 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?
States a specific verb and resource ('Assess how exposed a domain is to brand impersonation and phishing') and enumerates the exact checks performed (typosquat/lookalike domains, CT-log subdomains, wildcard cert). It explicitly distinguishes itself from lookalike_domains and subdomain_discovery, so an agent can separate it from siblings without opening another 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 tools and the condition that selects them ('Use lookalike_domains or subdomain_discovery for the raw per-tool detail'), routing the agent to this tool for the aggregated grade. It also states prerequisites (read-only, no API key, rate-limited) and the passive operating constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infrastructure_pivotInfrastructure PivotARead-onlyIdempotentInspect
Find other domains DechoNet has seen with the same infrastructure value — a nameserver, IP address, MX host, certificate issuer or registrar — with first and last seen, to map related infrastructure (e.g. other phishing domains on the same rare nameserver). Use it after domain_history or dns_lookup gives you a distinctive value. Shared infrastructure (CDN edges, public CAs, large registrars and DNS hosts) returns a count only, since sharing it says nothing about ownership. Read-only; REQUIRES a free DechoNet API key (account page; remote: send Authorization: Bearer dn_…, npm: set DECHONET_API_KEY); up to 20 rows per call (higher for some keys); rate-limited. Coverage: only DechoNet's own observations.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which kind of value to pivot on. | |
| value | Yes | The value itself, e.g. 'ns1.example-dns.net' or '203.0.113.9'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| note | No | |
| total | Yes | |
| value | Yes | |
| targets | Yes | |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | |
| sharedInfra | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description goes well beyond them: API-key requirement with exact header and env-var forms, the 20-row-per-call limit, rate limiting, and the key operational caveat that shared infrastructure degrades to a count. Coverage limitation (only DechoNet's own observations) is also disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and purpose, then layered with the degradation rule, auth requirements and limits. Dense but every clause carries operational information; the auth parenthetical is slightly compressed but not wasteful.
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?
Output schema exists so return values need no explanation, and the description supplies everything else an agent needs: prerequisites, sequencing relative to sibling tools, auth, quota and coverage limits. Nothing material to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with an enum for kind and an example for value, so the baseline is 3. The description adds real meaning by naming which infrastructure categories the enum members correspond to (nameserver, IP address, MX host, certificate issuer, registrar), tying abstract enum strings to concepts, though it does not explain individual enum members one by one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find) and resource (other domains sharing an infrastructure value) plus the scope of the pivot values (nameserver, IP, MX, certificate issuer, registrar). Gives a concrete motivating example (other phishing domains on the same rare nameserver), so an agent can distinguish it from dns_lookup or reverse_dns 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?
Explicit about when to use it — 'after domain_history or dns_lookup gives you a distinctive value' — and when it is useless, since shared infrastructure (CDNs, public CAs, large registrars) returns only a count. Both the trigger condition and the negative case are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ip_infoMy IP InfoARead-onlyIdempotentInspect
Report information about the caller's own public IP as seen by the server: IPv4/IPv6 address, ISP, ASN, approximate geolocation, and proxy/VPN heuristics. Takes no input — it reflects the egress IP of THIS MCP server's network, which is usually NOT the end user's IP. Use this to discover the server's outbound IP or test connectivity. To inspect a specific, known IP instead, use asn_lookup or reverse_dns. Read-only; requires no API key; rate-limited.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior, while the description adds operational context beyond them: no input, no API key, rate limiting, and the important caveat that this reflects the MCP server's network egress IP. This extra context helps an agent interpret the result 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?
Front-loads the purpose and field list, then adds the no-input clarification, usage guidance, alternatives, and operational traits. The sentences are short and earn their place, with only minor redundancy in restating read-only.
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 no-parameter read tool with rich annotations and an output schema, the description is complete: it explains result type, the server-egress nuance, alternatives, and operational constraints. Return-value details are appropriately left to the 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?
The tool has zero parameters, and the description confirms this by saying it takes no input. With no parameter semantics to clarify, the baseline for a zero-parameter tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reports the caller's own public IP as seen by the server, enumerating fields such as IPv4/IPv6, ISP, ASN, geolocation, and proxy/VPN heuristics. It explicitly distinguishes itself from asn_lookup and reverse_dns, which inspect a specific known IP instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear when-to-use: discover the server's outbound IP or test connectivity. It also gives the alternative when a specific known IP must be inspected, naming asn_lookup and reverse_dns, and warns that the result is the server's egress IP rather than the end user's IP.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookalike_domainsLookalike Domain CheckARead-onlyIdempotentInspect
Generate the typosquat/lookalike variants of a domain that phishers actually register — homoglyph swaps (l→1, o→0, rn→m), TLD swaps (.com→.co), character omissions, transpositions, repetitions, hyphenations — and check which of them are currently registered (live NS delegation via DoH). Use this to assess brand-impersonation and phishing exposure for a domain the user is responsible for. A registered variant is NOT proof of abuse (it may be an unrelated legitimate site) — follow up with whois_lookup on each hit for its owner and registration date. Read-only; requires no API key; rate-limited. Returns generated/checked counts and the registered variants with the technique that produced each.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to protect (e.g., 'example.com'), without scheme or path. Variants of its label and TLD are generated and checked. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
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 what they cannot: no API key required, rate-limited, detection method (live NS delegation via DoH), and an important interpretation caveat that a registered variant is not proof of abuse. That result-semantics disclosure materially changes how an agent should act on output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph, front-loaded with the verb and the technique list, with no filler sentences. It is longer than strictly necessary and the technique enumeration stacks heavily, but every sentence carries operational information (caveat, follow-up, constraints, return shape).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema already existing, the description summarizes return values (generated/checked counts plus registered variants tagged with the producing technique), and it covers constraints, interpretation limits, and next steps. Nothing an agent needs to select or 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?
With a single parameter at 100% schema coverage, the schema already documents format and exclusions (no scheme/path). The description adds marginal value by stating that both the label and the TLD are used to generate and check variants, which clarifies scope beyond the parameter's own text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource pair — generating typosquat/lookalike variants and checking which are registered via DoH — and enumerates the exact technique families (homoglyph, TLD swap, omission, transposition, repetition, hyphenation), so an agent can distinguish it from siblings like dns_lookup or whois_lookup 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?
Explicitly frames the use case (brand-impersonation/phishing exposure for a domain the user is responsible for) and routes the follow-up step to whois_lookup on each hit, which is concrete guidance. It stops short of naming when NOT to use it versus siblings such as impersonation_exposure, so it is clear context without full alternative coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mcp_server_checkMCP Server CheckARead-onlyIdempotentInspect
Check a remote MCP server from outside before connecting it to an agent: whether it requires authentication (and publishes OAuth protected-resource metadata, RFC 9728), which of its tools act on the world (run commands, write or delete files, send messages, make payments, read secrets), whether its server instructions or tool and parameter descriptions contain text that steers an agent (tool poisoning), whether a web page on any site could call it (CORS and Origin), HTTPS, and tool annotations. Sends initialize and tools/list only — no tool is ever called; query strings are removed before anything is sent or stored. Public addresses only. Findings cover what the server shows from outside: what a tool does when called, the server code and tools behind a login are not checked and are listed as not checked. Read-only; requires no API key; rate-limited. Returns status, KPIs, issues, actions, what was not checked, and a shareable report link.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The remote MCP endpoint (e.g., 'https://example.com/mcp'). Query strings are removed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/open-world, but the description adds substantial behavior beyond them: it only sends initialize and tools/list, never calls a tool, strips query strings before sending or storing, restricts to public addresses, requires no API key, and is rate-limited. It also discloses what is deliberately not checked and what the 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?
Front-loaded with the core action, and given the breadth of what is checked the length is largely justified. It is one dense run-on paragraph with heavy parentheticals (RFC 9728, tool poisoning, CORS and Origin) that would read better as a short list, costing it a 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?
An output schema exists, so return values need not be detailed, yet the description still summarizes the return (status, KPIs, issues, actions, unchecked items, shareable report link). Combined with scope limits, transport behavior, and access constraints, an agent has everything needed to call 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?
With a single parameter at 100% schema coverage the baseline is 3, but the description adds a real constraint not in the schema: only public addresses are accepted, and it reinforces the query-string stripping with the rationale that nothing is sent or stored with the query.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check a remote MCP server from outside') and enumerates exactly what is inspected: auth/OAuth metadata, world-acting tools, tool-poisoning text, CORS/Origin, HTTPS, annotations. This is clearly distinguishable from siblings like ssl_check or security_scan, which cover narrower surface areas.
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 intended moment is explicit: 'before connecting it to an agent.' It also implicitly defines when-not by stating what is out of scope (behind-login code, actual tool behavior) and flagging those as 'not checked.' It does not, however, name a sibling tool as an alternative for related checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
owasp_checkOWASP Security CheckupARead-onlyIdempotentInspect
Assess a domain's OWASP posture from EXTERNAL OBSERVATION only: the OWASP Secure Headers Project plus the externally observable OWASP Top 10:2025 subset — A04 Cryptographic Failures (TLS/cert), A02 Security Misconfiguration (header/info leaks), and A03 Software Supply Chain Failures (outdated components via version disclosure) — returning an A+ to F grade. Scope: A01 (Access Control, incl. SSRF), A05 (Injection), A06 (Insecure Design), A07 (Authentication), A08, A09 and A10 (Exceptional Conditions) are not checked — they need authenticated access or active/injection testing, so the result lists them as out-of-scope rather than "pass". The result is an external-posture check, not a full OWASP Top 10 assessment. This is PASSIVE (a normal HTTPS request, the TLS certificate and a public CT-log lookup; no port scan, no path probing), so it is suitable for domains you do not own. The sensitive-file check (.env, .git, server-status) runs only for the verified domain owner on the web report (DNS TXT), never through this tool. Use http_security or ssl_check for depth on one layer. Read-only; requires no API key; rate-limited. Returns a text report: grade, per-category findings, the out-of-scope list, and a shareable report link.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Hostname to assess, without scheme (e.g., 'example.com'). The host portion of a pasted URL is also accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| grade | Yes | OWASP posture grade A+ to F, over the observable categories only |
| score | Yes | 0-100 across the categories that could be evaluated |
| checks | Yes | Per observable category: Secure Headers, A02, A05, A06 |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report on dechonet.com |
| notObservable | No | Top 10 categories NOT checked (need authenticated/active testing) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered; the description still adds substantive context beyond them — the check is PASSIVE (normal HTTPS request, TLS cert, CT-log lookup, no port scan/path probing), the sensitive-file check never runs through this tool, and it is rate-limited with no API key. Strong disclosure, though the rate-limit specifics are qualitative rather than quantified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with scope and safety before details, and most sentences carry distinct information. Slight redundancy: 'The result is an external-posture check, not a full OWASP Top 10 assessment' restates the scope already established by the category enumeration.
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, yet the description still usefully characterizes the return (grade, per-category findings, out-of-scope list, shareable link). Combined with the scope, passivity, and alternative guidance, an agent has everything needed to select and call 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?
Only one parameter with 100% schema coverage, and the schema already documents the no-scheme format and the pasted-URL acceptance. The description adds no parameter syntax beyond that, but with a single fully documented parameter the baseline is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Assess a domain's OWASP posture') and immediately bounds it ('from EXTERNAL OBSERVATION only'). It names the exact categories checked (A02, A03, A04) and explicitly names the sibling tools (http_security, ssl_check) it is not, so an agent can route 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?
Explicit when-to-use (external posture, domains you do not own), when-not (A01/A05/A06/A07/A08/A09/A10 are out of scope), and named alternatives for depth on a single layer. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
phishing_link_checkPhishing / Smishing Link CheckARead-onlyIdempotentInspect
Check the links in a suspicious text message (smishing) or e-mail before anyone taps them. Paste the whole message or a single URL: every link is extracted, followed through URL shorteners to its real destination, and judged on observable signals — domain age from RDAP, impersonation of Korean banks/couriers/telecoms/portals and global brands incl. AI services such as ChatGPT/Claude/Gemini (brand keyword, lookalike spelling, or the brand domain worn as a subdomain), ClickFix pages (a fake "verify you are human" check that has the visitor paste a command into Win+R/PowerShell), Android APK downloads, punycode, public phishing/malware feeds, and DechoNet's own impersonation tracking. Use this when a user asks whether a link or message is a scam. Verdicts: danger, suspicious, unreachable, official (lands on the brand's own domain), no_signals (no warning signs found; this is not a finding that the link is safe). Reads landing-page HTML; inconclusive links may also run page scripts in isolated Chromium under the shared daily cap. DechoNet does not click, enter values or submit forms. The message text is not stored; requires no API key; rate-limited. Returns per-link verdicts with reasons and a shareable report link.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The link(s) to check — a URL, or the message text with verification codes, passwords and personal details removed (any language). Only the links are used (up to 5); the text is not stored. |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | |
| verdict | Yes | danger | suspicious | unreachable | official | no_signals | no_links |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: how links are resolved through shorteners, the exact signal set consulted (RDAP age, brand impersonation, ClickFix, APK, punycode, feeds), the verdict taxonomy including the important caveat that no_signals is not a safety assertion, the isolated-Chromium fallback under a shared daily cap, and the explicit statement that it does not click, enter values, or submit forms. It also discloses privacy (message not stored), no API key, and rate limiting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and the trigger condition, then the signal list and caveats. It is dense and long for a one-parameter tool, and the signal enumeration could be trimmed, but nearly every clause carries operational information an agent would otherwise lack.
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 not be explained, and the description still summarizes the verdict shape and shareable report link. Combined with the privacy, rate-limit, and no-side-effect disclosures, nothing needed to call 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% and the single parameter is already documented, including the up-to-5-link limit and the no-storage note. The description reinforces the paste-whole-message-vs-single-URL semantics but adds little the schema does not already state, so 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?
Names a specific action and resource: extract, resolve, and judge links in a suspicious message/URL. It is clearly distinguishable from sibling lookups (dns_lookup, ssl_check, whois_lookup, lookalike_domains) because it deliberately composes those signals into a phishing verdict rather than exposing a single raw record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Use this when a user asks whether a link or message is a scam.' It does not name a competing sibling or state when not to use it (e.g. when only a bare domain's DNS/TLS data is wanted instead), so routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
port_scanOpen Port ScanARead-onlyIdempotentInspect
Probe a host for a fixed set of common TCP ports (HTTP, HTTPS, SSH, FTP, SMTP, DNS, and common databases) and report which are open, the service name, and the response time. BEHAVIOR: this makes an ACTIVE TCP connection to the target. It is non-intrusive — a connect probe only; it does not authenticate, send exploits, or transfer data — and changes nothing on the target (read-only), but the connection is visible in the target's logs, so only scan hosts you own or are explicitly authorized to test. Use this to confirm which services are exposed. Use ssl_check or http_security instead to assess a specific service's configuration. Requires no API key; rate-limited. Returns a per-port open/closed list with service names.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Hostname or IP to probe (e.g., 'example.com' or '203.0.113.10'). A 'host:port' form is accepted to hint a specific port. Only supply targets you own or are authorized to test. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false and idempotentHint, but the description goes well beyond them: it discloses that this makes an ACTIVE TCP connection, that the probe does not authenticate or send exploits, that it changes nothing on the target yet is visible in target logs, that no API key is needed, and that it is rate-limited. This is exactly the context an agent needs before invoking a scanning tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded, with a labelled BEHAVIOR section and no filler sentences; every clause carries operational value. It is a single long paragraph where light structuring would aid scanning, keeping it just short of 5.
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 one required parameter, full schema coverage, rich annotations, and an output schema, the description covers everything an agent needs: scope, side effects, authorization, rate limits, and routing to alternatives. Return-value detail is rightfully deferred to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the host parameter description already covers hostname/IP form and the host:port hint, so the baseline is 3. The description adds the fixed-port-set scope but no additional parameter syntax or format detail 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?
States a specific verb (probe) and resource (host TCP ports) with the exact scope: a fixed common-port set covering HTTP/HTTPS/SSH/FTP/SMTP/DNS and databases. It also names the sibling tools it is not (ssl_check, http_security), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('confirm which services are exposed') and when-not ('use ssl_check or http_security instead to assess a specific service's configuration'), plus a hard authorization precondition. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pqc_readinessPost-Quantum TLS ReadinessARead-onlyIdempotentInspect
Check whether a website's public TLS endpoint is ready for post-quantum cryptography: does it complete a TLS 1.3 handshake that offers only the hybrid X25519MLKEM768 key exchange (ML-KEM), and does the organisation's own server provide it or a CDN edge in front of it. Also reports what the certificate chain is signed with (tracked, not scored: public CAs do not issue post-quantum certificates yet). Verdicts: ready (the origin server supports it), partial (a CDN edge provides it; the CDN-to-origin leg is invisible), not_ready (the hybrid-only handshake was refused), unknown (inconclusive — not the same as "no"). Scope: only the public endpoint on port 443. Internal systems, VPNs, code, and Korean PQC algorithms (no standard TLS codepoints yet) are not observable, so the result is an external indicator of migration progress, not a full PQC audit. Read-only; requires no API key; rate-limited. Returns the verdict, a 0-100 readiness score and grade, per-check statuses, and a shareable report link.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain whose HTTPS endpoint to check (e.g., 'example.com'). Scheme and path are stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| grade | No | |
| score | No | 0-100 post-quantum readiness; null when inconclusive |
| checks | No | |
| verdict | Yes | 'ready' | 'partial' | 'not_ready' | 'unknown' |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report on dechonet.com |
| tlsVersion | No | |
| keyExchange | No | Hybrid group accepted (e.g. X25519MLKEM768), null if none |
| terminatedBy | No | 'origin' or the CDN name whose edge answered |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive/open-world, but the description adds substantial context beyond them: no API key required, rate-limited, the CDN-to-origin leg is invisible, certificate chain is tracked but not scored, and the 'unknown vs no' distinction. This is exactly the extra context an agent needs to interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then scope, verdicts, and return shape in a logical order. It is dense and long, but nearly every clause carries decision-relevant information (verdict semantics, limitations). Minor trimming possible in the verdict enumeration.
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, single-parameter tool with an output schema, the description covers everything needed: what is checked, what is not observable, verdict meanings, scoring, and limitations. Return-value redundancy with the output schema is minor and does not detract.
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 the single 'domain' parameter is fully documented in the schema (including scheme/path stripping). The description adds no syntax or format detail beyond that, so the baseline 3 is appropriate for a schema-does-the-work case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Check) and a tightly scoped resource: whether a website's public TLS endpoint completes a TLS 1.3 handshake offering only the hybrid X25519MLKEM768 key exchange. The post-quantum framing and port-443-only scope clearly distinguish it from the generic ssl_check sibling, 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?
The description defines scope boundaries (public endpoint on port 443; internal systems, VPNs and code not observable) and explains each verdict, which implies when the tool is appropriate. However, it never explicitly names ssl_check or any sibling as the alternative, nor states a when-not-to-use condition. Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_pageReport a PageAInspect
Report a page to DechoNet: phishing or brand impersonation, a fake payment window (card fields where a payment provider should be), hidden instructions aimed at AI agents, a malicious download, a DechoNet verdict that looks wrong (false_positive) or a danger it missed (missed), an MCP server whose tool descriptions steer agents (malicious_mcp — url is the MCP endpoint), or a network anomaly (network_anomaly — the certificate serial/issuer or addresses you saw for the host, in observed). Kept for 90 days: the host and the kind, with an anonymous reporter hash used to count independent reports; for malicious_mcp the endpoint path, for network_anomaly the observed values and the country of the connection. No query, page text or free text. A report changes no verdict by itself: DechoNet opens the page itself and only what it observes counts; pages reported by several independent sources are looked at first. Not read-only (it records the report); rate-limited.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Address of the page (only its host is kept) | |
| kind | Yes | What is wrong with the page | |
| observed | No | network_anomaly only: the certificate serial (hex) and issuer, and the addresses, you saw for the host |
Output Schema
| Name | Required | Description |
|---|---|---|
| host | Yes | |
| kind | Yes | |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| received | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: states the 90-day retention, exactly what data is kept (host+kind, anonymous reporter hash; endpoint path for malicious_mcp; observed values and country for network_anomaly), explicitly that no query/page text/free text is stored, that a report changes no verdict by itself, and that DechoNet re-opens the page. Also discloses rate limiting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verb and kind list well, but the first sentence is a very long run-on enumerating eight kinds with parenthetical definitions, and the retention/privacy sentences pack many clauses. Dense and information-rich but harder to scan than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema, it covers privacy/retention, rate limits, what a report does and does not do, and the kind-specific data requirements. An agent has everything needed to call it correctly without reading the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3, but the description adds meaning the schema lacks: which kinds require observed data (network_anomaly), that url for malicious_mcp is the MCP endpoint, and that observed holds certificate serial/issuer or addresses. Useful layered detail beyond the enum descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (report) and resource (page) plus enumerates all eight report kinds with definitions, e.g. fake_payment means 'card fields where a payment provider should be'. This distinguishes it from every sibling, which are lookups/checks rather than reporting endpoints.
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?
Implies when to use by enumerating the situations (phishing, fake payment window, hidden instructions, wrong verdict, missed danger, steering MCP server, network anomaly) and explains the false_positive/missed cases for reporting a bad DechoNet verdict. No explicit exclusions or named alternative tools, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reverse_dnsReverse DNS (PTR) LookupARead-onlyIdempotentInspect
Resolve the PTR (reverse DNS) record for an IPv4 or IPv6 address and verify forward-confirmed reverse DNS (FCrDNS) by checking that the PTR hostname resolves back to the same IP. Infers the hosting provider from PTR naming patterns. Use this to validate mail-server rDNS or identify a single IP's host. Use asn_lookup instead for network/BGP ownership of the IP. Read-only; requires no API key; rate-limited. Returns the PTR hostname, FCrDNS pass/fail, and a provider guess.
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IP address to reverse-resolve, IPv4 or IPv6 (e.g., '8.8.8.8' or '2001:4860:4860::8888'). Must be an IP, not a hostname. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and open-world traits, but the description adds genuinely new context: no API key required, rate-limited operation, and the non-obvious FCrDNS verification pass/fail behavior. It does not quantify the rate limit or describe failure modes on an invalid/missing PTR, so it falls short of the richest behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then use cases, then the alternative, then behavioral caveats, then return summary — no filler sentences. The return-value sentence is mildly redundant with the output schema but is short and reinforces expectations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with rich annotations and an output schema, the description covers purpose, routing to the alternative, auth/rate-limit context, and the verification semantics. An agent has everything needed to select and call it correctly without consulting other tools.
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 the single 'ip' parameter is fully documented in the schema (IPv4/IPv6, must be an IP not a hostname). The description restates 'IPv4 or IPv6' but adds no format, syntax, or edge-case meaning beyond the schema, so it sits at the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (resolve the PTR record) and expands it with the FCrDNS verification step and provider inference, so the full behavior is clear. It explicitly names the sibling asn_lookup as the wrong tool for network/BGP ownership, letting an agent distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use cases ('validate mail-server rDNS', 'identify a single IP's host') and an explicit alternative with its selecting condition ('Use asn_lookup instead for network/BGP ownership'). No usage decision is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
security_scanFull Domain Security ScanARead-onlyIdempotentInspect
One-shot comprehensive audit of a domain, scored 0-100 with an A+ to F grade and a prioritized action list. Five scored areas: the web connection (TLS certificate and HTTP security headers, measured on www when only www has an address), mail spoofing defence (SPF/DKIM/DMARC; a domain that uses no mail is judged only on SPF -all and an enforced DMARC policy), domain registration and DNS, exposure (admin screens, developer tools and the like on hosts named in public certificate logs — counts only), and reputation (DechoNet verdict store and licensed phishing feeds). DNS propagation, reverse DNS and ASN are returned as reference information and not scored. A warning costs a quarter of its area and a critical half; data that could not be read in full is flagged, not charged, and an exposure or reputation lookup that fails is reported as not checked. Call the individual tools (e.g., ssl_check, email_auth, exposure_map) for depth on one area. BEHAVIOR: passive — public lookups and ordinary HTTPS requests only; open ports are NOT scanned (port_scan is the separate, active check). Takes up to about a minute (the exposure lookup). Read-only; requires no API key; rate-limited (it makes multiple backend calls). Returns the score, per-area breakdown, reference areas, top actions, and per-area summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to audit (e.g., 'example.com'). Scheme and path are stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| areas | Yes | Per-area verdicts of the scored areas (ssl, http, email, rdap, dns, exposure, reputation) |
| grade | Yes | Letter grade A+ to F |
| score | Yes | Health Score 0-100 |
| actions | No | Top recommended actions |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reference | No | Reference areas, not scored (propagation, reverseDns, asn): the tool status |
| reportUrl | Yes | Human-facing interactive report on dechonet.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the bar is lower; the description still adds substantial unrepeatable context: passive-only (no port scans), the scoring weighting (quarter/half penalties), unreadable data flagged not charged, failed lookups reported as not checked, ~1 minute runtime, no API key, and rate limiting. It stops short of documenting partial-failure retry semantics but covers the operation profile well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the summary and organized into scoring, behavior and return sections; nearly every sentence carries decision-relevant content. It is dense and on the long side, but the detail on scoring and passivity justifies most of its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, multi-area audit tool the description fully covers scoring, exclusions, failure handling and runtime, and even summarizes returns despite an output schema existing. An agent has everything needed to call it correctly and set expectations.
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?
Single parameter at 100% schema coverage, so the schema already documents 'domain' and stripping of scheme/path. The description adds behavioral nuance (www-host measurement) but no parameter-specific syntax or format beyond what the schema provides, matching the baseline-3 rule.
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 ('One-shot comprehensive audit of a domain') and immediately enumerates the five scored areas. It also names the sibling tools (ssl_check, email_auth, exposure_map) and distinguishes itself from port_scan, so an agent can place it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines when to use it (one-shot comprehensive audit) versus when to go deep on one area ('Call the individual tools... for depth'), and routes the active check to port_scan. Both inclusion and exclusion conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_expectationsSet Outside Expectations (daily re-check)AInspect
Record what a domain should show from outside and check it now — HSTS or another header present, DMARC enforcing, an issue key no longer reported, an HTTP or TLS grade at or above a level, a certificate with enough days left, a DNS record present, absent or containing a value, HTTPS answering. DechoNet reads the domain fresh (not from cache) with its public dns / ssl / http / email tools, from its own servers and the Seoul observation point, and then re-checks the set every day. Each result is pass, fail or unknown; unknown (a tool or part of it did not answer) is never a pass. Without an API key the set is anonymous: no alerts, kept 30 days after its last check, reachable by id and status page. With an API key (Authorization: Bearer dn_…) the set belongs to that key's account, and a set that held and stops holding is reported in the account's daily mail. Not read-only (it stores the set); public checks only, so any domain is accepted. Typical use: after changing DNS, TLS, headers or mail settings, to state the intended result and be told if it is ever reverted. Returns the set id, status page, per-check results with where to fix what does not hold (for the platform the site runs on), and signed observation receipts.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Optional short name for the set (shown on its page and in the mail) | |
| domain | Yes | Domain the checks are about (e.g. 'example.com'); scheme and path are stripped | |
| expect | Yes | Checks, 1-20 |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Expectation set id (stored sets) |
| url | No | Status page of the set: last results and recent checks |
| owner | No | 'account' (alerts by the API key account's daily mail) or 'anonymous' (no alerts) |
| state | Yes | 'pass' (every check holds) | 'fail' (at least one does not) | 'unknown' (some could not be read — not a pass) |
| domain | Yes | |
| stored | Yes | Whether DechoNet keeps re-checking this set daily |
| results | Yes | |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| checkedAt | No | |
| expiresAt | No | Anonymous sets: removed after this unless checked again |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give the safety profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false). The description adds real behavioral depth beyond that: fresh non-cached reads from its own servers plus a Seoul observation point, daily re-check cadence, pass/fail/unknown semantics where unknown is never a pass, anonymous-vs-API-key behavior including 30-day retention and daily mail, and the explicit 'stores the set' mutation disclosure that reinforces destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, and each subsequent sentence carries distinct information (execution model, result semantics, auth tiers, use case). It is a single dense paragraph of long clauses rather than a bulleted, scannable structure, which costs a point but not efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with nested check definitions and an output schema, the description covers what's needed: what is stored, how results are produced, auth/retention differences, and the daily re-check behavior. Return details (set id, status page, receipts) can be read from the output schema, so the description is complete without repeating it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents domain, label, and the full expect item structure including its per-check kinds. The description restates check examples in prose (HSTS/DMARC/grade/cert days/DNS) rather than adding syntax the schema lacks. It adds a small amount — 'any domain is accepted' and the meaning of unknown — but largely echoes the structured fields, 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?
States a specific verb+resource ('Record what a domain should show from outside and check it now') and then enumerates the concrete check kinds (HSTS header, DMARC enforcing, issue key absent, TLS grade, cert days, DNS records). An agent can distinguish this from verify_expectations and watch_domain from the description alone: this tool creates the set, the others re-check or watch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit triggering scenario — 'after changing DNS, TLS, headers or mail settings, to state the intended result and be told if it is ever reverted.' That is clear context. It stops short of naming exclusions or the sibling it replaces (verify_expectations vs watch_domain), so it misses the 5 bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ssl_checkSSL Certificate CheckARead-onlyIdempotentInspect
Inspect a host's served TLS/SSL certificate and connection: expiry date, issuer, SAN list, chain integrity, revocation (OCSP, then CRL; unknown when neither answers — not graded unless revoked), TLS version, and HSTS, returning an A+ to F grade weighted by certificate validity (40%), TLS version (25%), chain trust (15%), and HSTS (20%). From Seoul it also lists the protocol versions and cipher suites the server accepts — including SSL 3.0, RC4, 3DES, export, NULL and anonymous suites and the Korean SEED/ARIA ciphers — with TLS compression, secure renegotiation, TLS_FALLBACK_SCSV, DH group size and TLS 1.3 key exchange groups; weak findings cap the grade as SSL Labs does (F, C or B). Use this to diagnose certificate or HTTPS-handshake problems for one host. Use http_security instead to audit response security headers, or security_scan for an all-in-one domain report. Read-only: one full TLS handshake plus opening ClientHello messages whose first answer is read; no application data and no vulnerability probes; requires no API key; rate-limited. Returns a text report: grade, expiry/issuer KPIs, issues, and actions.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Hostname to inspect, without scheme (e.g., 'example.com'). The host portion of a pasted URL is also accepted. | |
| port | No | TCP port for the TLS handshake. Defaults to 443 (standard HTTPS); set this only for a non-standard HTTPS port such as 8443. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false, idempotentHint, openWorldHint), and the description adds real behavioral context beyond them: one full TLS handshake plus ClientHello messages with only the first answer read, no application data, no vulnerability probes, no API key required, and rate-limited. It also discloses grading weights and how weak findings cap the grade.
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 purpose and routing guidance are front-loaded in the first and middle sentences, and every clause carries information an agent could act on (grading weights, handshake behavior, sibling alternatives). It is dense and long—the cipher-suite and TLS-3.0/SEED/ARIA detail is more than most selection decisions need—but not padding.
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 two-parameter read-only diagnostic with annotations and an output schema present, the description covers everything selection-relevant: scope, safety, limitations, alternatives, and grading logic. Return values are summarized without needing to duplicate the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (host, port) are already fully documented with defaults and format guidance. The description adds no syntax, format, or edge-case meaning 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 names a specific verb and resource (inspect a host's served TLS/SSL certificate and connection) and enumerates exactly what is examined: expiry, issuer, SAN list, chain integrity, revocation, TLS version, HSTS, plus a letter grade. It also names the sibling tools it is not (http_security, security_scan), so an agent can disambiguate 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?
Explicit when-to-use ("diagnose certificate or HTTPS-handshake problems for one host") paired with explicit alternatives for adjacent tasks ("Use http_security instead to audit response security headers, or security_scan for an all-in-one domain report"). Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subdomain_discoverySubdomain DiscoveryARead-onlyIdempotentInspect
Enumerate the subdomains of a domain from Certificate Transparency logs — fully passive (no packets are sent to the target; CT logs are public records of every TLS certificate ever issued). Flags operational-looking names (dev, staging, admin, vpn, legacy) and wildcard certificates, because forgotten subdomains are a common takeover path. Use this as the first recon step to map a domain's attack surface. Use dns_lookup to check whether a discovered name still resolves, or lookalike_domains for typosquat variants of the domain name itself. Read-only; requires no API key; rate-limited. Returns the subdomain count, risky-name count, wildcard flag, and the hostname list.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Registrable domain to enumerate (e.g., 'example.com'), without scheme or path. Subdomains found in CT logs for this domain are returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive, openWorld), and the description adds materially beyond that: full passivity with the justification (no packets sent, CT logs are public), no API key required, rate-limiting, and which name patterns it flags. These are operational traits an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and purpose, and most sentences earn their place (passivity rationale, alternative routing). The final sentence enumerating return values is somewhat redundant given an output schema exists, which keeps this just below a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only reconnaissance tool, the description covers purpose, safety, prerequisites, sibling routing, and expected output shape. An agent has everything needed 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 the single 'domain' parameter is well documented (registrable domain, no scheme/path). The description adds no syntax or format detail beyond the schema, so the baseline 3 applies when the schema already does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (enumerate), resource (subdomains), and source mechanism (Certificate Transparency logs), which is far more than a restatement of the name. It explicitly contrasts itself against siblings by naming dns_lookup and lookalike_domains, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this as the first recon step to map a domain's attack surface" gives explicit positioning, and it names two alternatives with the condition that selects each (dns_lookup for resolution checks, lookalike_domains for typosquats). Nothing about when-to-use is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subnet_calcIPv4 Subnet CalculatorARead-onlyIdempotentInspect
Compute IPv4 subnet details from CIDR notation entirely locally — no network call: network and broadcast addresses, usable host range, total usable hosts, subnet mask, and wildcard mask. /31 and /32 are handled per RFC 3021 (point-to-point / single host). Use this for IPv4 address planning. It does not query DNS or contact any host, so it is purely computational. Requires no API key and is NOT rate-limited (computed in-process). Returns the calculated fields as text.
| Name | Required | Description | Default |
|---|---|---|---|
| cidr | Yes | IPv4 address with a CIDR prefix length 0-32 (e.g., '192.168.1.0/24'). IPv4 only; host bits may be any address inside the block. |
Output Schema
| Name | Required | Description |
|---|---|---|
| prefix | Yes | CIDR prefix length |
| network | Yes | Network address |
| lastHost | Yes | Last usable host |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| broadcast | Yes | Broadcast address |
| firstHost | Yes | First usable host |
| reportUrl | Yes | Human-facing interactive report on dechonet.com |
| subnetMask | Yes | Dotted-decimal subnet mask |
| totalHosts | Yes | Usable host count |
| wildcardMask | Yes | Wildcard (inverse) mask |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld=false), so the bar is lower. The description adds genuine value with RFC 3021 handling for /31 and /32, the absence of API-key/rate-limit concerns, and the text return format. The 'no network call' point partially restates openWorldHint=false, but the edge-case semantics are additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose but spends three separate sentences restating the same idea — 'entirely locally', 'does not query DNS or contact any host', and 'no API key / NOT rate-limited (computed in-process)'. That redundancy dilutes an otherwise tight definition.
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 annotations covering the safety profile, the description need not explain return values; it still notes the text format. Parameter semantics are covered by the 100%-covered schema, so nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'cidr' parameter is fully documented in the schema (IPv4 with prefix 0-32, host bits permitted). The description repeats 'CIDR notation' without adding syntax or format detail 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?
States a specific verb and resource ('Compute IPv4 subnet details from CIDR notation') and enumerates exactly which outputs are produced (network/broadcast addresses, host range, host count, masks). The 'entirely locally — no network call' framing cleanly separates it from the network-querying siblings like dns_lookup and ip_info.
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 a usage context ('Use this for IPv4 address planning') and implicitly rules out lookup tools by stating it contacts no host. However, no alternative sibling is named and no explicit when-not condition is given, so routing is only implied rather than resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_expectationsVerify Outside Expectations NowAIdempotentInspect
Check expectations from outside now, with fresh reads: either a stored set by id (from set_expectations — its state is updated and an anonymous set is kept another 30 days), or a domain plus a list of checks once, storing nothing. Same checks and outcomes as set_expectations (pass / fail / unknown, unknown is never a pass), each tool read once with a signed observation receipt. Typical use: right after a change, to see whether it is visible from outside yet — DNS and CDN changes can take minutes to hours to show. Rate-limited (a few checks per minute).
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Stored set id ('ex_…') to re-check | |
| domain | No | Domain to check once (with expect), when there is no stored set | |
| expect | No | Checks for a one-off verify, 1-20 |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | Expectation set id (stored sets) |
| url | No | Status page of the set: last results and recent checks |
| owner | No | 'account' (alerts by the API key account's daily mail) or 'anonymous' (no alerts) |
| state | Yes | 'pass' (every check holds) | 'fail' (at least one does not) | 'unknown' (some could not be read — not a pass) |
| domain | Yes | |
| stored | Yes | Whether DechoNet keeps re-checking this set daily |
| results | Yes | |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| checkedAt | No | |
| expiresAt | No | Anonymous sets: removed after this unless checked again |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: rate limiting (a few checks per minute), the 'unknown is never a pass' outcome rule, that each tool is read once and a signed observation receipt is produced, and the 30-day retention of the anonymous set. This is well beyond what readOnlyHint/idempotentHint 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?
A single dense paragraph that front-loads the two modes and then layers outcomes, receipts, and rate limits. Every clause carries information, though the density makes it slightly taxing 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?
For a tool with an output schema and full schema coverage, the description supplies modes, outcome semantics, retention, and rate limits. Return-format details are correctly delegated to the output schema, so nothing critical 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. The description adds real value by clarifying the mutually exclusive usage modes (id from set_expectations vs. domain+expect once, storing nothing) that the flat schema does not express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('check expectations from outside now') and spells out the two operating modes — stored set by id vs. one-off domain+checks. It explicitly relates itself to the sibling set_expectations, so an agent can distinguish them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete context ('typical use: right after a change, to see whether it is visible from outside yet') and notes external DNS/CDN propagation lag. It references set_expectations as the stateful counterpart, but never states an explicit 'use set_expectations instead when…' exclusion, so the when-not is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_domainWatch a Domain (daily re-check)AIdempotentInspect
Start (or reuse) a daily DechoNet watch on a domain so that changes are recorded over time — SSL grade/issuer/expiry, DNS records, HTTP security headers, domain registration, and optionally OWASP posture and impersonation exposure. Use this once when the user cares about a domain beyond a one-off check (their own domain, a client, a vendor, a target under investigation). After this, domain_changes answers "what changed since last time?" from real daily snapshots. Not read-only (it creates a watch record) but idempotent: watching an already-watched domain returns the existing watch. No account, no email, no PII — a watch is keyed by domain+tool and its history page is a public unguessable URL you can share with the user. Rate-limited (a few watches per minute).
| Name | Required | Description | Default |
|---|---|---|---|
| tools | No | Which checks to re-run daily. Default ['ssl','dns','http','rdap'] (certificate, DNS, security headers, registration). Add 'owasp' and/or 'impersonation' for posture and brand-exposure tracking, 'pqc' to record the day post-quantum key exchange is turned on, 'exposure' to catch a newly exposed admin screen, dev tool or staging server. | |
| domain | Yes | Registered domain to watch (e.g., 'example.com'). Scheme and path are stripped. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| failed | No | Tools that could not be watched (rate limit or error) |
| watches | Yes | One entry per tool now under a daily watch |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses idempotent reuse of an existing watch, that it is a write despite being non-destructive, that no account/email/PII is required, that the history page is a public but unguessable shareable URL, and that it is rate-limited to a few watches per minute. Annotations (readOnlyHint=false, idempotentHint=true) are consistent and the description enriches rather than repeats 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?
A single dense paragraph, front-loaded with the action, then usage trigger, then follow-on tool, then behavioral caveats. Every sentence carries distinct information — no restatement of the name or title, 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?
An output schema exists, so return values need not be explained, and the description still covers the operational facts an agent needs before calling: idempotency, rate limit, no-auth requirement, and shareability of the resulting page. Nothing required 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%, so parameter documentation is already complete (baseline 3). The description adds meaning by spelling out what the recorded artifacts actually are (SSL grade/issuer/expiry, DNS records, HTTP security headers, domain registration) and by noting that scheme/path are stripped from the domain, which helps the agent reason about what the 'tools' selections buy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Start (or reuse) a daily DechoNet watch on a domain') and enumerates exactly what it records (SSL, DNS, HTTP headers, registration, optional OWASP/impersonation). It distinguishes itself from the one-off siblings ('beyond a one-off check') and from domain_changes/domain_history, so an agent can route correctly 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?
Explicit when-to-use trigger ('Use this once when the user cares about a domain beyond a one-off check — their own domain, a client, a vendor, a target under investigation') plus the follow-on relationship ('After this, domain_changes answers "what changed since last time?"'). This is routing-grade guidance, naming both the alternative and the condition that selects this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whois_lookupWHOIS / RDAP Domain LookupARead-onlyIdempotentInspect
Retrieve domain registration data via RDAP (with WHOIS fallback): registrar, creation/expiry/update dates, nameservers, and EPP status flags, highlighting risk states such as clientHold and pendingDelete. Use this for ownership, lifecycle, and expiry questions about a registered domain. Use dns_lookup instead for live DNS records, or reverse_dns/asn_lookup for IP-level ownership. Read-only; requires no API key; rate-limited. Returns registrar, key dates, nameservers, and status flags.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Registered domain name to look up (e.g., 'example.com'). A subdomain is normalized to its registrable domain. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kpis | No | Key metrics as label/value pairs |
| grade | No | Letter grade (A+ to F) when the tool grades the target |
| score | No | 0-100 score when the tool scores the target |
| issues | No | Detected problems, severity-rated |
| status | Yes | Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown' |
| actions | No | Recommended next actions, most important first |
| summary | No | One-paragraph interpretation of the result |
| receipts | No | Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature. |
| reportUrl | Yes | Human-facing interactive report for this exact lookup on dechonet.com |
| observation | No | How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive/open-world, and the description adds context those annotations cannot express: no API key required, rate-limited, RDAP with WHOIS fallback behavior, and risk-state surfacing (clientHold, pendingDelete). This is meaningful operational disclosure beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences with the core action front-loaded, then routing guidance, then caveats. The closing return-value summary mildly overlaps the opening sentence, but it is brief and does not bloat the definition.
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 not be explained, yet the description restates them; that is the only redundancy. For a one-parameter read tool, routing, auth, and rate-limit context are all present, leaving nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already documents the domain argument and even its subdomain-normalization behavior. The description adds no format, syntax, or edge-case detail beyond that, 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 gives a specific verb and resource ('Retrieve domain registration data via RDAP') plus the exact fields returned (registrar, dates, nameservers, EPP status flags). It explicitly distinguishes itself from dns_lookup, reverse_dns, and asn_lookup, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the use case ('ownership, lifecycle, and expiry questions about a registered domain') and names three alternatives with the condition each covers (live DNS records, IP-level ownership). Both when-to-use and when-not-to-use are present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.6.1- Added
mcp_server_check - Changed
security_scan2 fields changed- changed
Output schema / properties / areas / descriptionPrevious value: -"Per-area verdicts"New value: +"Per-area verdicts of the scored areas (ssl, http, email, rdap, dns, exposure, reputation)" - added
Output schema / properties / referenceAdded value: +{ + "description": "Reference areas, not scored (propagation, reverseDns, asn): the tool status", + "items": { + "additionalProperties": false, + "properties": { + "area": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "area", + "status" + ], + "type": "object" + }, + "type": "array" +}
29 tool updates
v1.5.14- Changed
asn_lookup2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Added
check_before_action - Changed
dns_lookup2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
dns_propagation2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
domain_changes1 field changed- added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Added
domain_history - Changed
email_auth2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
email_header_analysis2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
exposure_map2 fields changed- changed
Output schema / properties / counts / descriptionPrevious value: -"hosts per category (devtool, listing, admin, remote, staging, default_page, login, api, mail, web, …)"New value: +"hosts per category (devtool, api_docs, listing, admin, remote, staging, default_page, login, api, mail, web, …)" - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
golive_check1 field changed- added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
http_security2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
impersonation_exposure1 field changed- added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Added
infrastructure_pivot - Changed
ip_info2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
lookalike_domains2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
owasp_check1 field changed- added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
phishing_link_check2 fields changed- changed
Input schema / properties / text / descriptionPrevious value: -"The suspicious message exactly as received (any language), or just the URL. Up to 5 links are checked."New value: +"The link(s) to check — a URL, or the message text with verification codes, passwords and personal details removed (any language). Only the links are used (up to 5); the text is not stored." - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
port_scan2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
pqc_readiness1 field changed- added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Added
report_page - Changed
reverse_dns2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
security_scan2 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Domain to audit end-to-end (e.g., 'example.com'). Scheme and path are stripped. NOTE: the host is also port-scanned, so use only targets you are authorized to test."New value: +"Domain to audit (e.g., 'example.com'). Scheme and path are stripped." - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Added
set_expectations - Changed
ssl_check2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
subdomain_discovery2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
subnet_calc1 field changed- added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Added
verify_expectations - Changed
watch_domain1 field changed- added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
- Changed
whois_lookup2 fields changed- added
Output schema / properties / observationAdded value: +{ + "additionalProperties": false, + "description": "How much was actually observed and when. A partial observation means some checks did not answer: missing parts are not verified, never clean.", + "properties": { + "ageMinutes": { + "type": [ + "number", + "null" + ] + }, + "cached": { + "type": "boolean" + }, + "observedAt": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "complete", + "partial", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "state", + "observedAt", + "cached", + "ageMinutes" + ], + "type": "object" +} - added
Output schema / properties / receiptsAdded value: +{ + "description": "Signed observation receipts behind this result, one per lookup: when, from where and under which rules version DechoNet observed it. Each url shows the record and checks its Ed25519 signature.", + "items": { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + }, + "tool": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "tool", + "id", + "url" + ], + "type": "object" + }, + "type": "array" +}
4 tool updates
v1.3.1- Added
exposure_map - Added
phishing_link_check - Added
pqc_readiness - Changed
watch_domain2 fields changed- changed
Input schema / properties / tools / descriptionPrevious value: -"Which checks to re-run daily. Default ['ssl','dns','http','rdap'] (certificate, DNS, security headers, registration). Add 'owasp' and/or 'impersonation' for posture and brand-exposure tracking."New value: +"Which checks to re-run daily. Default ['ssl','dns','http','rdap'] (certificate, DNS, security headers, registration). Add 'owasp' and/or 'impersonation' for posture and brand-exposure tracking, 'pqc' to record the day post-quantum key exchange is turned on, 'exposure' to catch a newly exposed admin screen, dev tool or staging server." - changed
Input schema / properties / tools / items / enumPrevious value: -[ - "ssl", - "dns", - "http", - "rdap", - "owasp", - "impersonation" -]New value: +[ + "ssl", + "dns", + "http", + "rdap", + "owasp", + "impersonation", + "pqc", + "exposure" +]
5 tool updates
v1.2.2- Added
domain_changes - Added
golive_check - Added
impersonation_exposure - Added
owasp_check - Added
watch_domain
15 tool updates
v1.1.0- Changed
asn_lookup1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Changed
dns_lookup1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Changed
dns_propagation1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Changed
email_auth1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Changed
email_header_analysis1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Changed
http_security1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Changed
ip_info1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Added
lookalike_domains - Changed
port_scan1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Changed
reverse_dns1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Changed
security_scan1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Top recommended actions", + "items": { + "type": "string" + }, + "type": "array" + }, + "areas": { + "description": "Per-area verdicts", + "items": { + "additionalProperties": false, + "properties": { + "area": { + "type": "string" + }, + "verdict": { + "type": "string" + } + }, + "required": [ + "area", + "verdict" + ], + "type": "object" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade A+ to F", + "type": "string" + }, + "reportUrl": { + "description": "Human-facing interactive report on dechonet.com", + "type": "string" + }, + "score": { + "description": "Health Score 0-100", + "type": "number" + } + }, + "required": [ + "score", + "grade", + "areas", + "reportUrl" + ], + "type": "object" +}
- Changed
ssl_check1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
- Added
subdomain_discovery - Changed
subnet_calc1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "broadcast": { + "description": "Broadcast address", + "type": "string" + }, + "firstHost": { + "description": "First usable host", + "type": "string" + }, + "lastHost": { + "description": "Last usable host", + "type": "string" + }, + "network": { + "description": "Network address", + "type": "string" + }, + "prefix": { + "description": "CIDR prefix length", + "type": "number" + }, + "reportUrl": { + "description": "Human-facing interactive report on dechonet.com", + "type": "string" + }, + "subnetMask": { + "description": "Dotted-decimal subnet mask", + "type": "string" + }, + "totalHosts": { + "description": "Usable host count", + "type": "number" + }, + "wildcardMask": { + "description": "Wildcard (inverse) mask", + "type": "string" + } + }, + "required": [ + "network", + "broadcast", + "firstHost", + "lastHost", + "subnetMask", + "wildcardMask", + "totalHosts", + "prefix", + "reportUrl" + ], + "type": "object" +}
- Changed
whois_lookup1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "actions": { + "description": "Recommended next actions, most important first", + "items": { + "type": "string" + }, + "type": "array" + }, + "grade": { + "description": "Letter grade (A+ to F) when the tool grades the target", + "type": "string" + }, + "issues": { + "description": "Detected problems, severity-rated", + "items": { + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "severity": { + "type": "string" + } + }, + "required": [ + "severity", + "key" + ], + "type": "object" + }, + "type": "array" + }, + "kpis": { + "description": "Key metrics as label/value pairs", + "items": { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "label", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "reportUrl": { + "description": "Human-facing interactive report for this exact lookup on dechonet.com", + "type": "string" + }, + "score": { + "description": "0-100 score when the tool scores the target", + "type": "number" + }, + "status": { + "description": "Overall verdict, e.g. 'good' | 'warning' | 'bad' | 'info' | 'unknown'", + "type": "string" + }, + "summary": { + "description": "One-paragraph interpretation of the result", + "type": "string" + } + }, + "required": [ + "status", + "reportUrl" + ], + "type": "object" +}
12 tool updates
v1.0.3- Changed
asn_lookup1 field changed- changed
Input schema / properties / query / descriptionPrevious value: -"ASN (e.g., AS13335) or IP address"New value: +"An IP address (e.g., '1.1.1.1') or an AS number in 'AS####' form (e.g., 'AS13335')."
- Changed
dns_lookup1 field changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Domain name to query (e.g., example.com)"New value: +"Registrable domain or hostname to query, without scheme or path (e.g., 'example.com' or 'mail.example.com'). Do not include 'http://' or a trailing slash."
- Changed
dns_propagation2 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Domain to check"New value: +"Domain whose record to compare across resolvers (e.g., 'example.com'), without scheme or path." - changed
Input schema / properties / type / descriptionPrevious value: -"Record type"New value: +"DNS record type to compare across resolvers. Defaults to A (IPv4 address), the most common propagation check."
- Changed
email_auth1 field changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Domain or IP to check (e.g., example.com or 1.2.3.4)"New value: +"Email domain to assess — the part after '@' (e.g., 'example.com'). An IP address is also accepted for reverse/PTR-based checks."
- Changed
email_header_analysis1 field changed- changed
Input schema / properties / headers / descriptionPrevious value: -"Raw email headers to analyze (paste the full header text)"New value: +"The complete raw email header block, copied verbatim — every line from the first 'Received:'/'From:' down to the blank line before the body. Paste as-is, including folded continuation lines; do not include the message body."
- Changed
http_security1 field changed- changed
Input schema / properties / url / descriptionPrevious value: -"URL to check (e.g., https://example.com)"New value: +"Full URL including scheme (e.g., 'https://example.com/path'). If the scheme is omitted, https:// is assumed. Redirects are followed starting from this URL."
- Changed
port_scan1 field changed- changed
Input schema / properties / host / descriptionPrevious value: -"Hostname or IP to scan (e.g., example.com or example.com:443)"New value: +"Hostname or IP to probe (e.g., 'example.com' or '203.0.113.10'). A 'host:port' form is accepted to hint a specific port. Only supply targets you own or are authorized to test."
- Changed
reverse_dns1 field changed- changed
Input schema / properties / ip / descriptionPrevious value: -"IP address to look up (IPv4 or IPv6)"New value: +"IP address to reverse-resolve, IPv4 or IPv6 (e.g., '8.8.8.8' or '2001:4860:4860::8888'). Must be an IP, not a hostname."
- Changed
security_scan1 field changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Domain to scan comprehensively (e.g., example.com)"New value: +"Domain to audit end-to-end (e.g., 'example.com'). Scheme and path are stripped. NOTE: the host is also port-scanned, so use only targets you are authorized to test."
- Changed
ssl_check2 fields changed- changed
Input schema / properties / host / descriptionPrevious value: -"Hostname to check (e.g., example.com)"New value: +"Hostname to inspect, without scheme (e.g., 'example.com'). The host portion of a pasted URL is also accepted." - changed
Input schema / properties / port / descriptionPrevious value: -"Port number (default: 443)"New value: +"TCP port for the TLS handshake. Defaults to 443 (standard HTTPS); set this only for a non-standard HTTPS port such as 8443."
- Changed
subnet_calc1 field changed- changed
Input schema / properties / cidr / descriptionPrevious value: -"IP with CIDR prefix (e.g., 192.168.1.0/24)"New value: +"IPv4 address with a CIDR prefix length 0-32 (e.g., '192.168.1.0/24'). IPv4 only; host bits may be any address inside the block."
- Changed
whois_lookup1 field changed- changed
Input schema / properties / domain / descriptionPrevious value: -"Domain name to look up"New value: +"Registered domain name to look up (e.g., 'example.com'). A subdomain is normalized to its registrable domain."
13 tool updates
v0.1.0- First observed
asn_lookup - First observed
dns_lookup - First observed
dns_propagation - First observed
email_auth - First observed
email_header_analysis - First observed
http_security - First observed
ip_info - First observed
port_scan - First observed
reverse_dns - First observed
security_scan - First observed
ssl_check - First observed
subnet_calc - First observed
whois_lookup
TDQS
Scored across 30 tools
Several tools genuinely overlap: ssl_check/http_security/security_scan/owasp_check all grade a domain's posture, lookalike_domains vs impersonation_exposure, subdomain_discovery vs exposure_map, check_before_action vs phishing_link_check, and set_expectations vs verify_expectations all cover close ground. To the server's credit, descriptions explicitly cross-reference each other ('use X instead for Y'), which rescues the agent from most misselection, but the boundaries remain fuzzy enough that wrong picks are plausible.
Names are uniformly snake_case and almost all follow a subject_action or action_noun pattern (asn_lookup, dns_propagation, port_scan, check_before_action). Minor deviations exist (reverse_dns and subnet_calc place the noun differently, infra pivot/subnet_calc use different verbs), but the scheme is predictable and readable throughout.
At 30 tools this is on the heavy side and sits above the 25-tool threshold that signals bloat. The scope is genuinely broad (DNS, TLS, email, reputation, impersonation, MCP vetting, monitoring, reporting), so many tools earn their place, but the overlap noted above suggests a few could be consolidated.
For an external security/recon domain the surface is remarkably complete: point-in-time checks, historical timelines, daily monitoring watches, declarative expectation sets, one-shot composite scans, safe-browsing verdicts, a reporting path, and even niche areas like PQC readiness and MCP-server vetting. No obvious dead ends for the stated purpose; the only limits are declared scope boundaries (authenticated/active testing) rather than missing operations.
Maintenance
Related MCP Connectors
Free, no-API-key network lookups for AI agents — IP geolocation, DNS, WHOIS, HTTP and SSL/TLS certificate checks, and full domain health reports.
29 pay-per-call DNS, SEO, SSL, security, WHOIS, mail, and AI tools for AI agents. x402, no API key.
Domain intel for AI agents: RDAP registration, DNS, email deliverability, tech stack.
Domain intel for AI agents: RDAP registration, DNS, email deliverability, tech stack.
Related MCP Servers
- AlicenseAqualityAmaintenanceSecurity intelligence API for AI models. CVE lookup with EPSS/KEV, domain recon (DNS, WHOIS, SSL, subdomains, WAF), and code security checks (secrets, injection, headers). 16 tools, no API key required.5533MIT
- AlicenseAqualityAmaintenanceEnables AI agents to audit email and domain security (SPF, DKIM, DMARC, etc.) for any domain without requiring API keys.19264 npm1MIT
- AlicenseAqualityCmaintenanceComprehensive DNS security toolkit for AI agents: 103 tools across 13 categories including DNSSEC validation, subdomain takeover detection, email security audit, and more, all running locally with no external API calls required.100147 npm9MIT
- AlicenseNot gradedqualityCmaintenanceProvides AI agents with zero-cost, zero-dependency trust evaluation for domains, URLs, wallets, APIs, and IPs, returning a 0-100 score with SSL, DNS, WHOIS, security header, and content sub-scores, plus batch comparison to rank multiple targets.MIT