Skip to main content
Glama

BlackVeil DNS & Email Security Scanner

check_subdomain_takeover

Read-onlyIdempotent

Sweep subdomains for dangling CNAMEs pointing at deprovisioned cloud services an attacker could claim (subdomain takeover); detects 16 provider families such as AWS S3/CloudFront, Azure, GCP Storage, Heroku, GitHub Pages, Vercel and Firebase. Use when asked if subdomains point to deprovisioned services. Pair with discover_subdomains to widen candidates (it returns a CT sample).

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "domain": "<domain>"
    },
    "name": "check_subdomain_takeover"
  }
}

Input Schema

NameRequiredDescriptionDefault
domainYesDomain, e.g. example.com
formatNoOutput verbosity.
subdomainsNoExplicit subdomains to sweep (FQDNs or short labels; max 1000). Default: a 15-name built-in list.
force_refreshNoBypass the cache.

Output Schema

NameRequiredDescriptionDefault
scoreYes
passedYes
partialNo
categoryYes
findingsYes
checkStatusNo
verdictWithheldNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / domain / description
      Previous value: -"Domain to check (e.g., example.com)."New value: +"Domain, e.g. example.com"
    • changedInput schema / properties / force_refresh / description
      Previous value: -"Bypass cache and run a fresh check. Useful after DNS changes."New value: +"Bypass the cache."
    • changedInput schema / properties / format / description
      Previous value: -"Output verbosity. Auto-detected if omitted."New value: +"Output verbosity."
    • changedInput schema / properties / subdomains / description
      Previous value: -"Optional explicit subdomain list (full FQDNs or short labels). When provided (deduped, capped at 1000), this list is swept instead of the 15-name built-in. Source from Certificate-Transparency enumeration or brand-audit discovery."New value: +"Explicit subdomains to sweep (FQDNs or short labels; max 1000). Default: a 15-name built-in list."
  2. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  3. Changed1 schema field changed
    • addedOutput schema / properties / verdictWithheld
      Added value: +{
      +  "type": "boolean"
      +}
  4. Changed2 schema fields changed
    • addedOutput schema / properties / checkStatus
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / partial
      Added value: +{
      +  "type": "boolean"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / force_refresh
      Added value: +{
      +  "description": "Bypass cache and run a fresh check. Useful after DNS changes.",
      +  "type": "boolean"
      +}
  6. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "category": {
      +      "type": "string"
      +    },
      +    "findings": {
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "passed": {
      +      "type": "boolean"
      +    },
      +    "score": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "category",
      +    "score",
      +    "passed",
      +    "findings"
      +  ],
      +  "type": "object"
      +}
  7. Changed2 schema fields changed
    • changedInput schema / properties / domain / description
      Previous value: -"Domain to check (e.g., example.com)"New value: +"Domain to check (e.g., example.com)."
    • addedInput schema / properties / subdomains
      Added value: +{
      +  "description": "Optional explicit subdomain list (full FQDNs or short labels). When provided (deduped, capped at 1000), this list is swept instead of the 15-name built-in. Source from Certificate-Transparency enumeration or brand-audit discovery.",
      +  "items": {
      +    "maxLength": 253,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 1000,
      +  "type": "array"
      +}
  8. Changed2 schema fields changed
    • changedInput schema / properties / domain / description
      Previous value: -"Domain to check (e.g., example.com)."New value: +"Domain to check (e.g., example.com)"
    • removedInput schema / properties / subdomains
      Removed value: -{
      -  "description": "Optional explicit subdomain list (full FQDNs or short labels). When provided (deduped, capped at 1000), this list is swept instead of the 15-name built-in. Source from Certificate-Transparency enumeration or brand-audit discovery.",
      -  "items": {
      -    "maxLength": 253,
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "maxItems": 1000,
      -  "type": "array"
      -}
  9. Added

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds real value beyond that: the detection technique (dangling CNAMEs to deprovisioned services) and the breadth of coverage (16 provider families, named examples), which tells the agent what the result actually means. It stops short of discussing scan cost, rate limits, or cache behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action, then usage, then pairing advice. The provider enumeration is long but earns its place by signalling detection breadth. Slightly dense but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and rich annotations, the description need not explain return values, and it covers purpose, trigger, and a complementary workflow. The only minor gap is scan scale/caching behavior, though `force_refresh` is documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the default 15-name list for `subdomains` and the enum for `format`, so the schema does the heavy lifting. The description adds only an indirect hint about candidate widening via discover_subdomains; it offers no syntax or semantic detail beyond what the schema already states. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Sweep subdomains for dangling CNAMEs pointing at deprovisioned cloud services') and names the exact vulnerability class (subdomain takeover) plus the provider families covered. This clearly distinguishes it from siblings like check_shadow_domains or discover_subdomains without the agent needing to open the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use when asked if subdomains point to deprovisioned services' and names the complementary tool ('Pair with discover_subdomains to widen candidates') with the reason (it returns a CT sample). It lacks explicit when-not-to-use conditions, but the trigger context is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.