Skip to main content
Glama

IP Lookup

ip_lookup
Read-onlyIdempotent

Query comprehensive IP intelligence: reverse DNS, ASN + holder name + country inline (RIPE Stat, Phase 1), open ports, hostnames, vulnerabilities (Shodan InternetDB enriched with severity + cvss_v3 from local cve.db — Phase 2 v1.16.0 BREAKING; vulns is now list[VulnInfo] {cve_id, severity, cvss_v3} dicts, pre-1.16 it was list[str] of CVE IDs; unknown CVEs emit severity='UNKNOWN' / cvss_v3=null — do NOT infer benign), cloud provider, Tor exit status, and reputation. cloud_provider uses two-tier detection: published cloud CIDR ranges (AWS/GCP/Cloudflare) first, then an ASN-to-provider fallback map for anycast/public-service IPs outside published ranges (e.g. 8.8.8.8 → AS15169 → 'Google'). Reputation: FireHOL level1 blocklist on Free tier; +AbuseIPDB + Shodan on Pro (Phase 4). Use for IP investigation; for orchestrated IP+reputation use threat_report. Response is null-explicit: every field is always present (cloud_provider=null when neither tier matches; tor_exit=false when not listed or upstream fetch failed — check verdict.sources_unavailable to disambiguate fetch failure from genuine absence). Response carries next_calls (conditional) — asn_lookup when ASN is populated, ioc_lookup when reputation is FireHOL-listed or AbuseIPDB confidence>50, threat_report on Pro tier for orchestrated profile. Free: 30/hr, Pro: 500/hr. Returns {ip, ptr, geo, asn, asn_name, country, ports, hostnames, vulns, cloud_provider, tor_exit, reputation, risk_score, verdict, next_calls}.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
ipYesIPv4 or IPv6 address to investigate (e.g. '8.8.8.8', '2606:4700::1111')

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed8 schema fields changed
    • changedOutput schema / properties / result / properties / asn / type
      Previous value: -"integer"New value: +[
      +  "integer",
      +  "null"
      +]
    • changedOutput schema / properties / result / properties / asn_name / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / result / properties / cloud_provider / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / result / properties / country / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / result / properties / next_calls / type
      Previous value: -"array"New value: +[
      +  "array",
      +  "null"
      +]
    • changedOutput schema / properties / result / properties / ptr / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / result / properties / reputation / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
    • changedOutput schema / properties / result / properties / verdict / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
  2. Changed6 schema fields changed
    • changedOutput schema / properties / result / properties / asn / type
      Previous value: -"object"New value: +"integer"
    • changedOutput schema / properties / result / properties / asn_name / type
      Previous value: -"object"New value: +"string"
    • changedOutput schema / properties / result / properties / cloud_provider / type
      Previous value: -"object"New value: +"string"
    • changedOutput schema / properties / result / properties / country / type
      Previous value: -"object"New value: +"string"
    • changedOutput schema / properties / result / properties / next_calls / type
      Previous value: -"object"New value: +"array"
    • changedOutput schema / properties / result / properties / ptr / type
      Previous value: -"object"New value: +"string"
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "result": {
      +      "properties": {
      +        "asn": {
      +          "type": "object"
      +        },
      +        "asn_name": {
      +          "type": "object"
      +        },
      +        "cloud_provider": {
      +          "type": "object"
      +        },
      +        "country": {
      +          "type": "object"
      +        },
      +        "cpes": {
      +          "type": "array"
      +        },
      +        "hostnames": {
      +          "type": "array"
      +        },
      +        "ip": {
      +          "type": "string"
      +        },
      +        "is_datacenter": {
      +          "type": "boolean"
      +        },
      +        "next_calls": {
      +          "type": "object"
      +        },
      +        "ports": {
      +          "type": "array"
      +        },
      +        "ptr": {
      +          "type": "object"
      +        },
      +        "reputation": {
      +          "type": "object"
      +        },
      +        "risk_score": {
      +          "type": "integer"
      +        },
      +        "severity_label": {
      +          "type": "string"
      +        },
      +        "summary": {
      +          "type": "string"
      +        },
      +        "tags": {
      +          "type": "array"
      +        },
      +        "tor_exit": {
      +          "type": "boolean"
      +        },
      +        "verdict": {
      +          "type": "object"
      +        },
      +        "vulns": {
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "ip"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "result"
      +  ],
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "$defs": {
      -    "AbuseIpdbInfo": {
      -      "properties": {
      -        "abuse_score": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "country": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "is_tor": {
      -          "anyOf": [
      -            {
      -              "type": "boolean"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "isp": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "reason": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "status": {
      -          "enum": [
      -            "ok",
      -            "skipped",
      -            "rate_limited",
      -            "error",
      -            "pro_only"
      -          ],
      -          "type": "string"
      -        },
      -        "total_reports": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "upgrade_url": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "usage_type": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "required": [
      -        "status"
      -      ],
      -      "type": "object"
      -    },
      -    "ErrorDetail": {
      -      "properties": {
      -        "code": {
      -          "enum": [
      -            "invalid_argument",
      -            "not_found",
      -            "rate_limit_exceeded",
      -            "auth_required",
      -            "tier_limit",
      -            "upstream_timeout",
      -            "upstream_error",
      -            "internal_error"
      -          ],
      -          "type": "string"
      -        },
      -        "docs_url": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "message": {
      -          "maxLength": 500,
      -          "type": "string"
      -        },
      -        "retry_after_seconds": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "upgrade_url": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "required": [
      -        "code",
      -        "message"
      -      ],
      -      "type": "object"
      -    },
      -    "ErrorResponse": {
      -      "properties": {
      -        "error": {
      -          "$ref": "#/$defs/ErrorDetail"
      -        }
      -      },
      -      "required": [
      -        "error"
      -      ],
      -      "type": "object"
      -    },
      -    "FireholInfo": {
      -      "properties": {
      -        "listed": {
      -          "type": "boolean"
      -        },
      -        "lists_matched": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "status": {
      -          "enum": [
      -            "ok",
      -            "skipped",
      -            "unavailable"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "status"
      -      ],
      -      "type": "object"
      -    },
      -    "IpLookupResponse": {
      -      "properties": {
      -        "asn": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "asn_name": {
      -          "anyOf": [
      -            {
      -              "maxLength": 256,
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "cloud_provider": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "country": {
      -          "anyOf": [
      -            {
      -              "maxLength": 8,
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "cpes": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "hostnames": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "ip": {
      -          "type": "string"
      -        },
      -        "is_datacenter": {
      -          "type": "boolean"
      -        },
      -        "next_calls": {
      -          "anyOf": [
      -            {
      -              "items": {
      -                "$ref": "#/$defs/PivotHint"
      -              },
      -              "type": "array"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "ports": {
      -          "items": {
      -            "type": "integer"
      -          },
      -          "type": "array"
      -        },
      -        "ptr": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "reputation": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/ReputationInfo"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "risk_score": {
      -          "type": "integer"
      -        },
      -        "severity_label": {
      -          "enum": [
      -            "low",
      -            "medium",
      -            "high",
      -            "critical"
      -          ],
      -          "type": "string"
      -        },
      -        "summary": {
      -          "type": "string"
      -        },
      -        "tags": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "tor_exit": {
      -          "type": "boolean"
      -        },
      -        "verdict": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/Verdict"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "vulns": {
      -          "items": {
      -            "$ref": "#/$defs/VulnInfo"
      -          },
      -          "type": "array"
      -        }
      -      },
      -      "required": [
      -        "ip"
      -      ],
      -      "type": "object"
      -    },
      -    "PivotHint": {
      -      "additionalProperties": true,
      -      "properties": {
      -        "input": {
      -          "type": "string"
      -        },
      -        "params": {
      -          "anyOf": [
      -            {
      -              "additionalProperties": {
      -                "type": "string"
      -              },
      -              "type": "object"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "reason": {
      -          "type": "string"
      -        },
      -        "tool": {
      -          "enum": [
      -            "cve_lookup",
      -            "cve_search",
      -            "cve_leading",
      -            "bulk_cve_lookup",
      -            "calculate_risk_score",
      -            "get_cvss_details",
      -            "exploit_lookup",
      -            "kev_detail",
      -            "cwe_lookup",
      -            "subdomain_enum",
      -            "ssl_check",
      -            "tech_fingerprint",
      -            "asn_lookup",
      -            "ip_lookup",
      -            "ioc_lookup",
      -            "bulk_ioc_lookup",
      -            "hash_lookup",
      -            "threat_intel",
      -            "threat_report",
      -            "audit_domain",
      -            "domain_report",
      -            "dns_lookup",
      -            "whois_lookup",
      -            "wayback_lookup",
      -            "scan_headers",
      -            "check_headers",
      -            "check_secrets",
      -            "check_injection",
      -            "check_dependencies",
      -            "email_mx",
      -            "email_security_posture",
      -            "email_disposable",
      -            "email_verify",
      -            "robots_txt",
      -            "redirect_chain",
      -            "brand_assets",
      -            "seo_audit",
      -            "phone_lookup",
      -            "username_lookup",
      -            "password_check",
      -            "phishing_check",
      -            "atlas_technique_lookup",
      -            "atlas_technique_search",
      -            "bulk_atlas_technique_lookup",
      -            "atlas_case_study_lookup",
      -            "atlas_case_study_search",
      -            "d3fend_defense_lookup",
      -            "d3fend_defense_search",
      -            "d3fend_defense_for_attack",
      -            "d3fend_attack_coverage",
      -            "sigma_rule_lookup",
      -            "bulk_sigma_rule_lookup",
      -            "tech_stack_cve_audit"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "tool",
      -        "input",
      -        "reason"
      -      ],
      -      "type": "object"
      -    },
      -    "ReputationInfo": {
      -      "properties": {
      -        "abuseipdb": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/AbuseIpdbInfo"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "firehol": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/FireholInfo"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "shodan": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/ShodanRepInfo"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "upgrade": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/ReputationUpgradeHint"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "ReputationUpgradeHint": {
      -      "properties": {
      -        "pro_only_sources": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "reason": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "upgrade_url": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "type": "object"
      -    },
      -    "ShodanRepInfo": {
      -      "properties": {
      -        "asn": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "city": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "country_name": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "hostnames": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "isp": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "last_update": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "org": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "os": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "ports": {
      -          "items": {
      -            "type": "integer"
      -          },
      -          "type": "array"
      -        },
      -        "reason": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "status": {
      -          "enum": [
      -            "ok",
      -            "skipped",
      -            "restricted",
      -            "rate_limited",
      -            "error",
      -            "pro_only"
      -          ],
      -          "type": "string"
      -        },
      -        "upgrade_url": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "vulns": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        }
      -      },
      -      "required": [
      -        "status"
      -      ],
      -      "type": "object"
      -    },
      -    "Verdict": {
      -      "properties": {
      -        "completeness": {
      -          "enum": [
      -            "complete",
      -            "partial",
      -            "minimal"
      -          ],
      -          "type": "string"
      -        },
      -        "data_age_seconds": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "deterministic": {
      -          "type": "boolean"
      -        },
      -        "falsifiable_fields": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "sources_queried": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "sources_unavailable": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        }
      -      },
      -      "required": [
      -        "deterministic"
      -      ],
      -      "type": "object"
      -    },
      -    "VulnInfo": {
      -      "properties": {
      -        "cve_id": {
      -          "type": "string"
      -        },
      -        "cvss_v3": {
      -          "anyOf": [
      -            {
      -              "maximum": 10,
      -              "minimum": 0,
      -              "type": "number"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "severity": {
      -          "enum": [
      -            "CRITICAL",
      -            "HIGH",
      -            "MEDIUM",
      -            "LOW",
      -            "UNKNOWN"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "cve_id",
      -        "severity"
      -      ],
      -      "type": "object"
      -    }
      -  },
      -  "properties": {
      -    "result": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/IpLookupResponse"
      -        },
      -        {
      -          "$ref": "#/$defs/ErrorResponse"
      -        }
      -      ]
      -    }
      -  },
      -  "required": [
      -    "result"
      -  ],
      -  "type": "object"
      -}New value: +null
  5. Changed195 schema fields changed
    • removedOutput schema / $defs / AbuseIpdbInfo / description
      Removed value: -"AbuseIPDB reputation check (Pro tier only)."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / abuse_score / default
      Removed value: -null
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / abuse_score / description
      Removed value: -"AbuseIPDB confidence-of-abuse score (0-100). Only present when status='ok'."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / abuse_score / title
      Removed value: -"Abuse Score"
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / country / default
      Removed value: -null
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / country / description
      Removed value: -"ISO 3166-1 alpha-2 country code from AbuseIPDB geolocation (may differ from RIPE)."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / country / title
      Removed value: -"Country"
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / is_tor / default
      Removed value: -null
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / is_tor / description
      Removed value: -"AbuseIPDB's Tor exit flag (cross-reference with top-level tor_exit field)."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / is_tor / title
      Removed value: -"Is Tor"
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / isp / default
      Removed value: -null
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / isp / description
      Removed value: -"ISP name as reported by AbuseIPDB."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / isp / title
      Removed value: -"Isp"
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / reason / default
      Removed value: -null
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / reason / description
      Removed value: -"Human-readable reason string. Present when status is skipped/rate_limited/error/pro_only."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / reason / title
      Removed value: -"Reason"
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / status / description
      Removed value: -"'ok' = data fetched; 'skipped' = API key not configured; 'rate_limited' = AbuseIPDB quota exceeded; 'error' = transient HTTP/network failure; 'pro_only' = returned on Free tier as upsell hint (see upgrade_url)."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / status / title
      Removed value: -"Status"
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / total_reports / default
      Removed value: -null
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / total_reports / description
      Removed value: -"Number of reports submitted against this IP in the last 90 days."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / total_reports / title
      Removed value: -"Total Reports"
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / upgrade_url / default
      Removed value: -null
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / upgrade_url / description
      Removed value: -"Upgrade link returned when status='pro_only'."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / upgrade_url / title
      Removed value: -"Upgrade Url"
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / usage_type / default
      Removed value: -null
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / usage_type / description
      Removed value: -"AbuseIPDB usage classification: 'Data Center/Web Hosting/Transit', 'ISP', 'Mobile ISP', etc."
    • removedOutput schema / $defs / AbuseIpdbInfo / properties / usage_type / title
      Removed value: -"Usage Type"
    • removedOutput schema / $defs / AbuseIpdbInfo / title
      Removed value: -"AbuseIpdbInfo"
    • removedOutput schema / $defs / ErrorDetail / description
      Removed value: -"Structured failure body. Codes mirror app/exceptions.AppException\nsubclasses; agent retry / upgrade decisions key off `code`, not `message`."
    • removedOutput schema / $defs / ErrorDetail / properties / code / description
      Removed value: -"Stable machine-readable failure category. Agents key retry/upgrade decisions off this."
    • removedOutput schema / $defs / ErrorDetail / properties / code / title
      Removed value: -"Code"
    • removedOutput schema / $defs / ErrorDetail / properties / docs_url / default
      Removed value: -null
    • removedOutput schema / $defs / ErrorDetail / properties / docs_url / description
      Removed value: -"Documentation pointer (e.g. tool input contract) when code='invalid_argument'."
    • removedOutput schema / $defs / ErrorDetail / properties / docs_url / title
      Removed value: -"Docs Url"
    • removedOutput schema / $defs / ErrorDetail / properties / message / description
      Removed value: -"Human-readable detail. Free text — never parse. Capped at 500 chars to prevent oversized upstream errors from bloating responses."
    • removedOutput schema / $defs / ErrorDetail / properties / message / title
      Removed value: -"Message"
    • removedOutput schema / $defs / ErrorDetail / properties / retry_after_seconds / default
      Removed value: -null
    • removedOutput schema / $defs / ErrorDetail / properties / retry_after_seconds / description
      Removed value: -"When code='rate_limit_exceeded', the minimum seconds to wait before retrying."
    • removedOutput schema / $defs / ErrorDetail / properties / retry_after_seconds / title
      Removed value: -"Retry After Seconds"
    • removedOutput schema / $defs / ErrorDetail / properties / upgrade_url / default
      Removed value: -null
    • removedOutput schema / $defs / ErrorDetail / properties / upgrade_url / description
      Removed value: -"Pricing/upgrade URL when code='tier_limit' or 'rate_limit_exceeded' on the Free tier."
    • removedOutput schema / $defs / ErrorDetail / properties / upgrade_url / title
      Removed value: -"Upgrade Url"
    • removedOutput schema / $defs / ErrorDetail / title
      Removed value: -"ErrorDetail"
    • removedOutput schema / $defs / ErrorResponse / description
      Removed value: -"MCP error envelope. Tool return type is always\n`SpecificResponse | ErrorResponse` — Union flag tells the agent which arm\narrived without parsing the inner body."
    • removedOutput schema / $defs / ErrorResponse / title
      Removed value: -"ErrorResponse"
    • removedOutput schema / $defs / FireholInfo / description
      Removed value: -"FireHOL level1 blocklist check (Free tier and Pro)."
    • removedOutput schema / $defs / FireholInfo / properties / listed / default
      Removed value: -false
    • removedOutput schema / $defs / FireholInfo / properties / listed / description
      Removed value: -"True if the IP matches any range in firehol_level1 (known-bad aggregated blocklist)."
    • removedOutput schema / $defs / FireholInfo / properties / listed / title
      Removed value: -"Listed"
    • removedOutput schema / $defs / FireholInfo / properties / lists_matched / description
      Removed value: -"List identifiers matched. Currently ['firehol_level1'] when listed, else empty."
    • removedOutput schema / $defs / FireholInfo / properties / lists_matched / title
      Removed value: -"Lists Matched"
    • removedOutput schema / $defs / FireholInfo / properties / status / description
      Removed value: -"'ok' = trie lookup succeeded; 'skipped' = private/reserved/loopback/link-local IP, not meaningful to check; 'unavailable' = FireHOL feed could not be fetched (be honest with agent)."
    • removedOutput schema / $defs / FireholInfo / properties / status / title
      Removed value: -"Status"
    • removedOutput schema / $defs / FireholInfo / title
      Removed value: -"FireholInfo"
    • removedOutput schema / $defs / IpLookupResponse / properties / asn / default
      Removed value: -null
    • removedOutput schema / $defs / IpLookupResponse / properties / asn / description
      Removed value: -"Autonomous System Number from RIPE Stat network-info (e.g. 13335 for Cloudflare)."
    • removedOutput schema / $defs / IpLookupResponse / properties / asn / title
      Removed value: -"Asn"
    • removedOutput schema / $defs / IpLookupResponse / properties / asn_name / default
      Removed value: -null
    • removedOutput schema / $defs / IpLookupResponse / properties / asn_name / description
      Removed value: -"Human-readable AS name from RIPE Stat as-overview (e.g. 'CLOUDFLARENET')."
    • removedOutput schema / $defs / IpLookupResponse / properties / asn_name / title
      Removed value: -"Asn Name"
    • removedOutput schema / $defs / IpLookupResponse / properties / cloud_provider / default
      Removed value: -null
    • removedOutput schema / $defs / IpLookupResponse / properties / cloud_provider / description
      Removed value: -"Cloud provider name resolved via two-tier detection: (1) published cloud CIDR ranges (AWS/GCP/Cloudflare), (2) ASN-to-provider map fallback for anycast/public-service IPs outside published ranges (e.g. 8.8.8.8 → AS15169 → 'Google'). Null when neither matches. Always present in response (route emits null-explicit so agents can disambiguate 'not detected' from 'field absent')."
    • removedOutput schema / $defs / IpLookupResponse / properties / cloud_provider / title
      Removed value: -"Cloud Provider"
    • removedOutput schema / $defs / IpLookupResponse / properties / country / default
      Removed value: -null
    • removedOutput schema / $defs / IpLookupResponse / properties / country / description
      Removed value: -"ISO 3166-1 alpha-2 country code from RIPE Stat rir-stats-country (RIR-allocated)."
    • removedOutput schema / $defs / IpLookupResponse / properties / country / title
      Removed value: -"Country"
    • removedOutput schema / $defs / IpLookupResponse / properties / cpes / description
      Removed value: -"CPE 2.3 strings for services detected on this IP per Shodan InternetDB."
    • removedOutput schema / $defs / IpLookupResponse / properties / cpes / title
      Removed value: -"Cpes"
    • removedOutput schema / $defs / IpLookupResponse / properties / hostnames / description
      Removed value: -"Hostnames observed pointing to this IP per Shodan InternetDB."
    • removedOutput schema / $defs / IpLookupResponse / properties / hostnames / title
      Removed value: -"Hostnames"
    • removedOutput schema / $defs / IpLookupResponse / properties / ip / description
      Removed value: -"Queried IP address (IPv4 or IPv6, echoed back verbatim)."
    • removedOutput schema / $defs / IpLookupResponse / properties / ip / title
      Removed value: -"Ip"
    • removedOutput schema / $defs / IpLookupResponse / properties / is_datacenter / default
      Removed value: -false
    • removedOutput schema / $defs / IpLookupResponse / properties / is_datacenter / description
      Removed value: -"True if IP is hosted on a known datacenter / cloud provider. Detection: (1) cloud_provider populated (CIDR or ASN map hit covering AWS/GCP/Cloudflare/DigitalOcean/Hetzner/OVH/Linode/Vultr/Microsoft Azure), (2) ASN in tier-1 datacenter set (adds Oracle/Alibaba/Tencent on top of the cloud_provider map). Use for Nuclei matchers + bug-bounty triage where datacenter targets warrant different scan policy than residential IPs. Always present — never null."
    • removedOutput schema / $defs / IpLookupResponse / properties / is_datacenter / title
      Removed value: -"Is Datacenter"
    • removedOutput schema / $defs / IpLookupResponse / properties / next_calls / default
      Removed value: -null
    • removedOutput schema / $defs / IpLookupResponse / properties / next_calls / description
      Removed value: -"Suggested follow-up MCP tool calls. Ordered by relevance; agents should chain these without re-prompting the user."
    • removedOutput schema / $defs / IpLookupResponse / properties / next_calls / title
      Removed value: -"Next Calls"
    • removedOutput schema / $defs / IpLookupResponse / properties / ports / description
      Removed value: -"Open ports observed by Shodan InternetDB (free, no API key; superseded by reputation.shodan.ports on Pro)."
    • removedOutput schema / $defs / IpLookupResponse / properties / ports / title
      Removed value: -"Ports"
    • removedOutput schema / $defs / IpLookupResponse / properties / ptr / default
      Removed value: -null
    • removedOutput schema / $defs / IpLookupResponse / properties / ptr / description
      Removed value: -"Reverse-DNS PTR record. Null when no PTR is published."
    • removedOutput schema / $defs / IpLookupResponse / properties / ptr / title
      Removed value: -"Ptr"
    • removedOutput schema / $defs / IpLookupResponse / properties / reputation / default
      Removed value: -null
    • removedOutput schema / $defs / IpLookupResponse / properties / reputation / description
      Removed value: -"Multi-source reputation. Free tier: firehol populated, abuseipdb/shodan return status='pro_only' upsell stubs. Pro tier: all three live."
    • removedOutput schema / $defs / IpLookupResponse / properties / risk_score / default
      Removed value: -0
    • removedOutput schema / $defs / IpLookupResponse / properties / risk_score / description
      Removed value: -"Composite 0-100 risk score (v1.17.0 formula). Additive components: ports (10 * min(count, 5) = 0-50), tor_exit (+30), firehol.listed (+20), AbuseIPDB confidence (round(15 * score / 100) = 0-15), is_datacenter (+10), known vulns (5 * min(count, 4) = 0-20). Datacenter membership now adds risk (was a -10 trust bonus pre-1.17). Use severity_label for thresholding."
    • removedOutput schema / $defs / IpLookupResponse / properties / risk_score / title
      Removed value: -"Risk Score"
    • removedOutput schema / $defs / IpLookupResponse / properties / severity_label / default
      Removed value: -"low"
    • removedOutput schema / $defs / IpLookupResponse / properties / severity_label / description
      Removed value: -"Coarse risk band derived from risk_score (>=75 critical, >=50 high, >=25 medium, else low). Use this for Nuclei matchers and MCP agent triage when you don't want to re-implement the threshold logic; risk_score is the canonical numeric source."
    • removedOutput schema / $defs / IpLookupResponse / properties / severity_label / title
      Removed value: -"Severity Label"
    • removedOutput schema / $defs / IpLookupResponse / properties / summary / default
      Removed value: -""
    • removedOutput schema / $defs / IpLookupResponse / properties / summary / description
      Removed value: -"One-line human-readable summary built from IP, PTR, ASN, country, ports, vulns."
    • removedOutput schema / $defs / IpLookupResponse / properties / summary / title
      Removed value: -"Summary"
    • removedOutput schema / $defs / IpLookupResponse / properties / tags / description
      Removed value: -"Shodan InternetDB classification tags (e.g. 'cdn', 'cloud', 'vpn', 'tor', 'self-signed')."
    • removedOutput schema / $defs / IpLookupResponse / properties / tags / title
      Removed value: -"Tags"
    • removedOutput schema / $defs / IpLookupResponse / properties / tor_exit / default
      Removed value: -false
    • removedOutput schema / $defs / IpLookupResponse / properties / tor_exit / description
      Removed value: -"True if IP appears in the Tor Project's exit node list. False when not listed or when the upstream list fetch failed (check verdict.sources_unavailable for 'tor' to distinguish). Always present in response — never null."
    • removedOutput schema / $defs / IpLookupResponse / properties / tor_exit / title
      Removed value: -"Tor Exit"
    • removedOutput schema / $defs / IpLookupResponse / properties / verdict / default
      Removed value: -null
    • removedOutput schema / $defs / IpLookupResponse / properties / verdict / description
      Removed value: -"Falsifiability metadata: sources_queried, sources_unavailable, completeness, deterministic flag. Lets agents distinguish 'no data' from 'source failed' without re-running the call."
    • removedOutput schema / $defs / IpLookupResponse / properties / vulns / description
      Removed value: -"CVEs Shodan InternetDB has associated with banners on this IP, enriched with severity + cvss_v3 from local cve.db (Phase 2 IP enrichment, v1.16.0 BREAKING). Pre-1.16 this was a flat list[str] of CVE IDs. Order is preserved from Shodan (meaningful — Shodan ranks confidence). Unknown CVEs emit severity='UNKNOWN'; do NOT infer 'benign' from UNKNOWN."
    • removedOutput schema / $defs / IpLookupResponse / properties / vulns / title
      Removed value: -"Vulns"
    • removedOutput schema / $defs / IpLookupResponse / title
      Removed value: -"IpLookupResponse"
    • removedOutput schema / $defs / PivotHint / description
      Removed value: -"A suggested follow-up MCP tool call. Surfaced inside response.next_calls so\nLLM agents can chain related lookups without manual prompting. Each hint names\nthe tool, the input value to pass, and a short reason explaining why this\npivot adds value in the current context."
    • removedOutput schema / $defs / PivotHint / properties / input / description
      Removed value: -"Suggested input value to pass to the tool — typically a CVE ID, CWE ID, domain, or IP. Pre-populated from the current response so the agent can call the next tool without re-deriving the argument."
    • removedOutput schema / $defs / PivotHint / properties / input / title
      Removed value: -"Input"
    • removedOutput schema / $defs / PivotHint / properties / params / default
      Removed value: -null
    • removedOutput schema / $defs / PivotHint / properties / params / description
      Removed value: -"Optional extra kwargs to pass alongside `input`. Used by pivot generators when the next call benefits from a secondary parameter, e.g. {'exclude_id': 'AML.T0051'} to skip the originating technique from a sibling-tactic search. Omitted when no extra args are needed."
    • removedOutput schema / $defs / PivotHint / properties / params / title
      Removed value: -"Params"
    • removedOutput schema / $defs / PivotHint / properties / reason / description
      Removed value: -"Short rationale (one sentence) for why this follow-up call adds value, e.g. 'Federal patch deadline + ransomware association', 'Public exploits / PoC availability'."
    • removedOutput schema / $defs / PivotHint / properties / reason / title
      Removed value: -"Reason"
    • removedOutput schema / $defs / PivotHint / properties / tool / description
      Removed value: -"Canonical MCP tool name to call next. Constrained to known operation_ids in tools/list — adding a new tool here requires expanding the Literal."
    • removedOutput schema / $defs / PivotHint / properties / tool / title
      Removed value: -"Tool"
    • removedOutput schema / $defs / PivotHint / title
      Removed value: -"PivotHint"
    • removedOutput schema / $defs / ReputationInfo / description
      Removed value: -"Multi-source IP reputation. Sources present depend on tier (Free: firehol only; Pro: all three)."
    • removedOutput schema / $defs / ReputationInfo / properties / abuseipdb / default
      Removed value: -null
    • removedOutput schema / $defs / ReputationInfo / properties / abuseipdb / description
      Removed value: -"AbuseIPDB abuse confidence. Pro tier only — omitted from the response on Free."
    • removedOutput schema / $defs / ReputationInfo / properties / firehol / default
      Removed value: -null
    • removedOutput schema / $defs / ReputationInfo / properties / firehol / description
      Removed value: -"FireHOL level1 blocklist membership. Available on Free tier."
    • removedOutput schema / $defs / ReputationInfo / properties / shodan / default
      Removed value: -null
    • removedOutput schema / $defs / ReputationInfo / properties / shodan / description
      Removed value: -"Shodan full API enrichment. Pro tier only — omitted from the response on Free."
    • removedOutput schema / $defs / ReputationInfo / properties / upgrade / default
      Removed value: -null
    • removedOutput schema / $defs / ReputationInfo / properties / upgrade / description
      Removed value: -"Free-tier-only pointer to the Pro-only sources that were skipped."
    • removedOutput schema / $defs / ReputationInfo / title
      Removed value: -"ReputationInfo"
    • removedOutput schema / $defs / ReputationUpgradeHint / description
      Removed value: -"Compact pointer that replaces the verbose pro_only sub-stubs for Free tier.\n\nBug I4: previously the abuseipdb/shodan slots carried full Pydantic models\nwith every field null + a status='pro_only' marker — ~150 tokens of pure\nnegative space per Free-tier ip_lookup response. The verdict block already\nlists those sources in sources_unavailable on Free; this hint just points\ncallers at the upgrade page in one line."
    • removedOutput schema / $defs / ReputationUpgradeHint / properties / pro_only_sources / title
      Removed value: -"Pro Only Sources"
    • removedOutput schema / $defs / ReputationUpgradeHint / properties / reason / default
      Removed value: -null
    • removedOutput schema / $defs / ReputationUpgradeHint / properties / reason / title
      Removed value: -"Reason"
    • removedOutput schema / $defs / ReputationUpgradeHint / properties / upgrade_url / default
      Removed value: -null
    • removedOutput schema / $defs / ReputationUpgradeHint / properties / upgrade_url / title
      Removed value: -"Upgrade Url"
    • removedOutput schema / $defs / ReputationUpgradeHint / title
      Removed value: -"ReputationUpgradeHint"
    • removedOutput schema / $defs / ShodanRepInfo / description
      Removed value: -"Shodan full API enrichment (Pro tier only). Richer than InternetDB fields at top level."
    • removedOutput schema / $defs / ShodanRepInfo / properties / asn / default
      Removed value: -null
    • removedOutput schema / $defs / ShodanRepInfo / properties / asn / description
      Removed value: -"ASN string per Shodan (e.g. 'AS13335'); may differ from top-level asn int."
    • removedOutput schema / $defs / ShodanRepInfo / properties / asn / title
      Removed value: -"Asn"
    • removedOutput schema / $defs / ShodanRepInfo / properties / city / default
      Removed value: -null
    • removedOutput schema / $defs / ShodanRepInfo / properties / city / description
      Removed value: -"City name per Shodan geolocation."
    • removedOutput schema / $defs / ShodanRepInfo / properties / city / title
      Removed value: -"City"
    • removedOutput schema / $defs / ShodanRepInfo / properties / country_name / default
      Removed value: -null
    • removedOutput schema / $defs / ShodanRepInfo / properties / country_name / description
      Removed value: -"Country name per Shodan geolocation."
    • removedOutput schema / $defs / ShodanRepInfo / properties / country_name / title
      Removed value: -"Country Name"
    • removedOutput schema / $defs / ShodanRepInfo / properties / hostnames / description
      Removed value: -"Hostnames observed pointing to this IP per Shodan."
    • removedOutput schema / $defs / ShodanRepInfo / properties / hostnames / title
      Removed value: -"Hostnames"
    • removedOutput schema / $defs / ShodanRepInfo / properties / isp / default
      Removed value: -null
    • removedOutput schema / $defs / ShodanRepInfo / properties / isp / description
      Removed value: -"ISP per Shodan (may differ from AbuseIPDB/RIPE)."
    • removedOutput schema / $defs / ShodanRepInfo / properties / isp / title
      Removed value: -"Isp"
    • removedOutput schema / $defs / ShodanRepInfo / properties / last_update / default
      Removed value: -null
    • removedOutput schema / $defs / ShodanRepInfo / properties / last_update / description
      Removed value: -"ISO 8601 timestamp of Shodan's most recent data point for this IP."
    • removedOutput schema / $defs / ShodanRepInfo / properties / last_update / title
      Removed value: -"Last Update"
    • removedOutput schema / $defs / ShodanRepInfo / properties / org / default
      Removed value: -null
    • removedOutput schema / $defs / ShodanRepInfo / properties / org / description
      Removed value: -"Organization name owning the IP per Shodan."
    • removedOutput schema / $defs / ShodanRepInfo / properties / org / title
      Removed value: -"Org"
    • removedOutput schema / $defs / ShodanRepInfo / properties / os / default
      Removed value: -null
    • removedOutput schema / $defs / ShodanRepInfo / properties / os / description
      Removed value: -"Shodan-detected operating system (fingerprint-based, best-effort)."
    • removedOutput schema / $defs / ShodanRepInfo / properties / os / title
      Removed value: -"Os"
    • removedOutput schema / $defs / ShodanRepInfo / properties / ports / description
      Removed value: -"Open ports observed by Shodan full scan (superset of top-level InternetDB ports)."
    • removedOutput schema / $defs / ShodanRepInfo / properties / ports / title
      Removed value: -"Ports"
    • removedOutput schema / $defs / ShodanRepInfo / properties / reason / default
      Removed value: -null
    • removedOutput schema / $defs / ShodanRepInfo / properties / reason / description
      Removed value: -"Human-readable reason. Present when status is skipped/restricted/rate_limited/error/pro_only."
    • removedOutput schema / $defs / ShodanRepInfo / properties / reason / title
      Removed value: -"Reason"
    • removedOutput schema / $defs / ShodanRepInfo / properties / status / description
      Removed value: -"'ok' = data fetched; 'skipped' = API key not configured; 'restricted' = 403 (IP not available on free Shodan tier); 'rate_limited' = 429 quota exceeded; 'error' = transient HTTP/network failure; 'pro_only' = returned on Free tier as upsell hint."
    • removedOutput schema / $defs / ShodanRepInfo / properties / status / title
      Removed value: -"Status"
    • removedOutput schema / $defs / ShodanRepInfo / properties / upgrade_url / default
      Removed value: -null
    • removedOutput schema / $defs / ShodanRepInfo / properties / upgrade_url / description
      Removed value: -"Upgrade link returned when status='pro_only'."
    • removedOutput schema / $defs / ShodanRepInfo / properties / upgrade_url / title
      Removed value: -"Upgrade Url"
    • removedOutput schema / $defs / ShodanRepInfo / properties / vulns / description
      Removed value: -"CVE IDs Shodan has associated with banners on this IP."
    • removedOutput schema / $defs / ShodanRepInfo / properties / vulns / title
      Removed value: -"Vulns"
    • removedOutput schema / $defs / ShodanRepInfo / title
      Removed value: -"ShodanRepInfo"
    • removedOutput schema / $defs / Verdict / properties / completeness / default
      Removed value: -"complete"
    • removedOutput schema / $defs / Verdict / properties / completeness / description
      Removed value: -"'complete' = every planned source returned data; 'partial' = at least one source in sources_unavailable failed or was skipped; 'minimal' = only the primary/required source returned, optional enrichment missing."
    • removedOutput schema / $defs / Verdict / properties / completeness / title
      Removed value: -"Completeness"
    • removedOutput schema / $defs / Verdict / properties / data_age_seconds / default
      Removed value: -null
    • removedOutput schema / $defs / Verdict / properties / data_age_seconds / description
      Removed value: -"Seconds elapsed since the oldest cached source was fetched, or null when every source was queried live for this request. Use to judge freshness."
    • removedOutput schema / $defs / Verdict / properties / data_age_seconds / title
      Removed value: -"Data Age Seconds"
    • removedOutput schema / $defs / Verdict / properties / deterministic / description
      Removed value: -"True when the response is fully reproducible from the listed sources for the same input at the same moment (no randomness, no model inference). False for endpoints that include probabilistic scoring or LLM output."
    • removedOutput schema / $defs / Verdict / properties / deterministic / title
      Removed value: -"Deterministic"
    • removedOutput schema / $defs / Verdict / properties / falsifiable_fields / description
      Removed value: -"Top-level response fields whose values a caller can independently re-derive from the named upstream sources (e.g. 'dns', 'ssl', 'whois'). Fields not in this list are derived/computed and cannot be directly re-verified."
    • removedOutput schema / $defs / Verdict / properties / falsifiable_fields / title
      Removed value: -"Falsifiable Fields"
    • removedOutput schema / $defs / Verdict / properties / sources_queried / description
      Removed value: -"Canonical source identifiers successfully consulted for this response (e.g. 'ripe_stat', 'shodan_internetdb', 'firehol'). Agent-readable list, order not significant."
    • removedOutput schema / $defs / Verdict / properties / sources_queried / title
      Removed value: -"Sources Queried"
    • removedOutput schema / $defs / Verdict / properties / sources_unavailable / description
      Removed value: -"Sources that were expected but not returned — either intentionally skipped (lite mode, tier gating) or failed (quota, timeout, upstream down). Empty list means every planned source produced data."
    • removedOutput schema / $defs / Verdict / properties / sources_unavailable / title
      Removed value: -"Sources Unavailable"
    • removedOutput schema / $defs / Verdict / title
      Removed value: -"Verdict"
    • removedOutput schema / $defs / VulnInfo / description
      Removed value: -"Severity-enriched CVE entry attached to /v1/ip and /v1/threat_report.\n\nPhase 2 IP enrichment (v1.16.0 BREAKING): Shodan InternetDB returns a flat\nlist of CVE IDs with no severity context, forcing agents to fan out\ncve_lookup calls for triage. We resolve severity + cvss_v3 against the\nlocal cve.db in a single SQL batch so the agent can prioritise without\nextra round-trips. Unknown CVEs are emitted with severity='UNKNOWN' /\ncvss_v3=null so the ID is preserved (the agent must not infer 'benign'\nfrom the absence of a row)."
    • removedOutput schema / $defs / VulnInfo / properties / cve_id / description
      Removed value: -"CVE identifier (e.g. 'CVE-2021-44228')."
    • removedOutput schema / $defs / VulnInfo / properties / cve_id / title
      Removed value: -"Cve Id"
    • removedOutput schema / $defs / VulnInfo / properties / cvss_v3 / default
      Removed value: -null
    • removedOutput schema / $defs / VulnInfo / properties / cvss_v3 / description
      Removed value: -"CVSS v3 base score (0.0-10.0). Null when severity='UNKNOWN' or NVD has no v3 score."
    • removedOutput schema / $defs / VulnInfo / properties / cvss_v3 / title
      Removed value: -"Cvss V3"
    • removedOutput schema / $defs / VulnInfo / properties / severity / description
      Removed value: -"NVD CVSS v3 severity bucket from local cve.db. 'UNKNOWN' when the CVE is not in our database (NVD may not have classified it yet, or the ID is reserved). Treat UNKNOWN as 'do not assume benign — call cve_lookup for fresh upstream data.'"
    • removedOutput schema / $defs / VulnInfo / properties / severity / title
      Removed value: -"Severity"
    • removedOutput schema / $defs / VulnInfo / title
      Removed value: -"VulnInfo"
    • removedOutput schema / properties / result / title
      Removed value: -"Result"
    • removedOutput schema / title
      Removed value: -"ip_lookupOutput"
  6. Changed1 schema field changed
    • changedOutput schema / $defs / PivotHint / properties / tool / enum
      Previous value: -[
      -  "cve_lookup",
      -  "cve_search",
      -  "cve_leading",
      -  "bulk_cve_lookup",
      -  "calculate_risk_score",
      -  "get_cvss_details",
      -  "exploit_lookup",
      -  "kev_detail",
      -  "cwe_lookup",
      -  "subdomain_enum",
      -  "ssl_check",
      -  "tech_fingerprint",
      -  "asn_lookup",
      -  "ip_lookup",
      -  "ioc_lookup",
      -  "bulk_ioc_lookup",
      -  "hash_lookup",
      -  "threat_intel",
      -  "threat_report",
      -  "audit_domain",
      -  "domain_report",
      -  "dns_lookup",
      -  "whois_lookup",
      -  "wayback_lookup",
      -  "scan_headers",
      -  "check_headers",
      -  "check_secrets",
      -  "check_injection",
      -  "check_dependencies",
      -  "email_mx",
      -  "email_security_posture",
      -  "email_disposable",
      -  "email_verify",
      -  "robots_txt",
      -  "redirect_chain",
      -  "brand_assets",
      -  "seo_audit",
      -  "phone_lookup",
      -  "username_lookup",
      -  "password_check",
      -  "phishing_check",
      -  "atlas_technique_lookup",
      -  "atlas_technique_search",
      -  "bulk_atlas_technique_lookup",
      -  "atlas_case_study_lookup",
      -  "atlas_case_study_search",
      -  "d3fend_defense_lookup",
      -  "d3fend_defense_search",
      -  "d3fend_defense_for_attack",
      -  "d3fend_attack_coverage",
      -  "sigma_rule_lookup",
      -  "bulk_sigma_rule_lookup"
      -]New value: +[
      +  "cve_lookup",
      +  "cve_search",
      +  "cve_leading",
      +  "bulk_cve_lookup",
      +  "calculate_risk_score",
      +  "get_cvss_details",
      +  "exploit_lookup",
      +  "kev_detail",
      +  "cwe_lookup",
      +  "subdomain_enum",
      +  "ssl_check",
      +  "tech_fingerprint",
      +  "asn_lookup",
      +  "ip_lookup",
      +  "ioc_lookup",
      +  "bulk_ioc_lookup",
      +  "hash_lookup",
      +  "threat_intel",
      +  "threat_report",
      +  "audit_domain",
      +  "domain_report",
      +  "dns_lookup",
      +  "whois_lookup",
      +  "wayback_lookup",
      +  "scan_headers",
      +  "check_headers",
      +  "check_secrets",
      +  "check_injection",
      +  "check_dependencies",
      +  "email_mx",
      +  "email_security_posture",
      +  "email_disposable",
      +  "email_verify",
      +  "robots_txt",
      +  "redirect_chain",
      +  "brand_assets",
      +  "seo_audit",
      +  "phone_lookup",
      +  "username_lookup",
      +  "password_check",
      +  "phishing_check",
      +  "atlas_technique_lookup",
      +  "atlas_technique_search",
      +  "bulk_atlas_technique_lookup",
      +  "atlas_case_study_lookup",
      +  "atlas_case_study_search",
      +  "d3fend_defense_lookup",
      +  "d3fend_defense_search",
      +  "d3fend_defense_for_attack",
      +  "d3fend_attack_coverage",
      +  "sigma_rule_lookup",
      +  "bulk_sigma_rule_lookup",
      +  "tech_stack_cve_audit"
      +]
  7. Changed1 schema field changed
    • changedOutput schema / $defs / PivotHint / properties / tool / enum
      Previous value: -[
      -  "cve_lookup",
      -  "cve_search",
      -  "cve_leading",
      -  "bulk_cve_lookup",
      -  "calculate_risk_score",
      -  "get_cvss_details",
      -  "exploit_lookup",
      -  "kev_detail",
      -  "cwe_lookup",
      -  "subdomain_enum",
      -  "ssl_check",
      -  "tech_fingerprint",
      -  "asn_lookup",
      -  "ip_lookup",
      -  "ioc_lookup",
      -  "bulk_ioc_lookup",
      -  "hash_lookup",
      -  "threat_intel",
      -  "threat_report",
      -  "audit_domain",
      -  "domain_report",
      -  "dns_lookup",
      -  "whois_lookup",
      -  "wayback_lookup",
      -  "scan_headers",
      -  "check_headers",
      -  "check_secrets",
      -  "check_injection",
      -  "check_dependencies",
      -  "email_mx",
      -  "email_security_posture",
      -  "email_disposable",
      -  "email_verify",
      -  "robots_txt",
      -  "redirect_chain",
      -  "brand_assets",
      -  "seo_audit",
      -  "phone_lookup",
      -  "username_lookup",
      -  "password_check",
      -  "phishing_check",
      -  "atlas_technique_lookup",
      -  "atlas_technique_search",
      -  "bulk_atlas_technique_lookup",
      -  "atlas_case_study_lookup",
      -  "atlas_case_study_search",
      -  "d3fend_defense_lookup",
      -  "d3fend_defense_search",
      -  "d3fend_defense_for_attack",
      -  "d3fend_attack_coverage"
      -]New value: +[
      +  "cve_lookup",
      +  "cve_search",
      +  "cve_leading",
      +  "bulk_cve_lookup",
      +  "calculate_risk_score",
      +  "get_cvss_details",
      +  "exploit_lookup",
      +  "kev_detail",
      +  "cwe_lookup",
      +  "subdomain_enum",
      +  "ssl_check",
      +  "tech_fingerprint",
      +  "asn_lookup",
      +  "ip_lookup",
      +  "ioc_lookup",
      +  "bulk_ioc_lookup",
      +  "hash_lookup",
      +  "threat_intel",
      +  "threat_report",
      +  "audit_domain",
      +  "domain_report",
      +  "dns_lookup",
      +  "whois_lookup",
      +  "wayback_lookup",
      +  "scan_headers",
      +  "check_headers",
      +  "check_secrets",
      +  "check_injection",
      +  "check_dependencies",
      +  "email_mx",
      +  "email_security_posture",
      +  "email_disposable",
      +  "email_verify",
      +  "robots_txt",
      +  "redirect_chain",
      +  "brand_assets",
      +  "seo_audit",
      +  "phone_lookup",
      +  "username_lookup",
      +  "password_check",
      +  "phishing_check",
      +  "atlas_technique_lookup",
      +  "atlas_technique_search",
      +  "bulk_atlas_technique_lookup",
      +  "atlas_case_study_lookup",
      +  "atlas_case_study_search",
      +  "d3fend_defense_lookup",
      +  "d3fend_defense_search",
      +  "d3fend_defense_for_attack",
      +  "d3fend_attack_coverage",
      +  "sigma_rule_lookup",
      +  "bulk_sigma_rule_lookup"
      +]
  8. Changed1 schema field changed
    • changedOutput schema / $defs / PivotHint / properties / tool / enum
      Previous value: -[
      -  "cve_lookup",
      -  "cve_search",
      -  "cve_leading",
      -  "bulk_cve_lookup",
      -  "calculate_risk_score",
      -  "get_cvss_details",
      -  "exploit_lookup",
      -  "kev_detail",
      -  "cwe_lookup",
      -  "subdomain_enum",
      -  "ssl_check",
      -  "tech_fingerprint",
      -  "asn_lookup",
      -  "ip_lookup",
      -  "ioc_lookup",
      -  "bulk_ioc_lookup",
      -  "hash_lookup",
      -  "threat_intel",
      -  "threat_report",
      -  "audit_domain",
      -  "domain_report",
      -  "dns_lookup",
      -  "whois_lookup",
      -  "wayback_lookup",
      -  "scan_headers",
      -  "check_headers",
      -  "check_secrets",
      -  "check_injection",
      -  "check_dependencies",
      -  "email_mx",
      -  "email_disposable",
      -  "email_verify",
      -  "robots_txt",
      -  "redirect_chain",
      -  "brand_assets",
      -  "seo_audit",
      -  "phone_lookup",
      -  "username_lookup",
      -  "password_check",
      -  "phishing_check",
      -  "atlas_technique_lookup",
      -  "atlas_technique_search",
      -  "bulk_atlas_technique_lookup",
      -  "atlas_case_study_lookup",
      -  "atlas_case_study_search",
      -  "d3fend_defense_lookup",
      -  "d3fend_defense_search",
      -  "d3fend_defense_for_attack",
      -  "d3fend_attack_coverage"
      -]New value: +[
      +  "cve_lookup",
      +  "cve_search",
      +  "cve_leading",
      +  "bulk_cve_lookup",
      +  "calculate_risk_score",
      +  "get_cvss_details",
      +  "exploit_lookup",
      +  "kev_detail",
      +  "cwe_lookup",
      +  "subdomain_enum",
      +  "ssl_check",
      +  "tech_fingerprint",
      +  "asn_lookup",
      +  "ip_lookup",
      +  "ioc_lookup",
      +  "bulk_ioc_lookup",
      +  "hash_lookup",
      +  "threat_intel",
      +  "threat_report",
      +  "audit_domain",
      +  "domain_report",
      +  "dns_lookup",
      +  "whois_lookup",
      +  "wayback_lookup",
      +  "scan_headers",
      +  "check_headers",
      +  "check_secrets",
      +  "check_injection",
      +  "check_dependencies",
      +  "email_mx",
      +  "email_security_posture",
      +  "email_disposable",
      +  "email_verify",
      +  "robots_txt",
      +  "redirect_chain",
      +  "brand_assets",
      +  "seo_audit",
      +  "phone_lookup",
      +  "username_lookup",
      +  "password_check",
      +  "phishing_check",
      +  "atlas_technique_lookup",
      +  "atlas_technique_search",
      +  "bulk_atlas_technique_lookup",
      +  "atlas_case_study_lookup",
      +  "atlas_case_study_search",
      +  "d3fend_defense_lookup",
      +  "d3fend_defense_search",
      +  "d3fend_defense_for_attack",
      +  "d3fend_attack_coverage"
      +]
  9. Changed1 schema field changed
    • changedOutput schema / $defs / PivotHint / properties / tool / enum
      Previous value: -[
      -  "cve_lookup",
      -  "cve_search",
      -  "cve_leading",
      -  "bulk_cve_lookup",
      -  "exploit_lookup",
      -  "kev_detail",
      -  "cwe_lookup",
      -  "subdomain_enum",
      -  "ssl_check",
      -  "tech_fingerprint",
      -  "asn_lookup",
      -  "ip_lookup",
      -  "ioc_lookup",
      -  "bulk_ioc_lookup",
      -  "hash_lookup",
      -  "threat_intel",
      -  "threat_report",
      -  "audit_domain",
      -  "domain_report",
      -  "dns_lookup",
      -  "whois_lookup",
      -  "wayback_lookup",
      -  "scan_headers",
      -  "check_headers",
      -  "check_secrets",
      -  "check_injection",
      -  "check_dependencies",
      -  "email_mx",
      -  "email_disposable",
      -  "email_verify",
      -  "robots_txt",
      -  "redirect_chain",
      -  "brand_assets",
      -  "seo_audit",
      -  "phone_lookup",
      -  "username_lookup",
      -  "password_check",
      -  "phishing_check",
      -  "atlas_technique_lookup",
      -  "atlas_technique_search",
      -  "bulk_atlas_technique_lookup",
      -  "atlas_case_study_lookup",
      -  "atlas_case_study_search",
      -  "d3fend_defense_lookup",
      -  "d3fend_defense_search",
      -  "d3fend_defense_for_attack",
      -  "d3fend_attack_coverage"
      -]New value: +[
      +  "cve_lookup",
      +  "cve_search",
      +  "cve_leading",
      +  "bulk_cve_lookup",
      +  "calculate_risk_score",
      +  "get_cvss_details",
      +  "exploit_lookup",
      +  "kev_detail",
      +  "cwe_lookup",
      +  "subdomain_enum",
      +  "ssl_check",
      +  "tech_fingerprint",
      +  "asn_lookup",
      +  "ip_lookup",
      +  "ioc_lookup",
      +  "bulk_ioc_lookup",
      +  "hash_lookup",
      +  "threat_intel",
      +  "threat_report",
      +  "audit_domain",
      +  "domain_report",
      +  "dns_lookup",
      +  "whois_lookup",
      +  "wayback_lookup",
      +  "scan_headers",
      +  "check_headers",
      +  "check_secrets",
      +  "check_injection",
      +  "check_dependencies",
      +  "email_mx",
      +  "email_disposable",
      +  "email_verify",
      +  "robots_txt",
      +  "redirect_chain",
      +  "brand_assets",
      +  "seo_audit",
      +  "phone_lookup",
      +  "username_lookup",
      +  "password_check",
      +  "phishing_check",
      +  "atlas_technique_lookup",
      +  "atlas_technique_search",
      +  "bulk_atlas_technique_lookup",
      +  "atlas_case_study_lookup",
      +  "atlas_case_study_search",
      +  "d3fend_defense_lookup",
      +  "d3fend_defense_search",
      +  "d3fend_defense_for_attack",
      +  "d3fend_attack_coverage"
      +]
  10. Changed1 schema field changed
    • changedOutput schema / $defs / PivotHint / properties / tool / enum
      Previous value: -[
      -  "cve_lookup",
      -  "cve_search",
      -  "cve_leading",
      -  "bulk_cve_lookup",
      -  "exploit_lookup",
      -  "kev_detail",
      -  "cwe_lookup",
      -  "subdomain_enum",
      -  "ssl_check",
      -  "tech_fingerprint",
      -  "asn_lookup",
      -  "ip_lookup",
      -  "ioc_lookup",
      -  "bulk_ioc_lookup",
      -  "hash_lookup",
      -  "threat_intel",
      -  "threat_report",
      -  "audit_domain",
      -  "domain_report",
      -  "dns_lookup",
      -  "whois_lookup",
      -  "wayback_lookup",
      -  "scan_headers",
      -  "check_headers",
      -  "check_secrets",
      -  "check_injection",
      -  "check_dependencies",
      -  "email_mx",
      -  "email_disposable",
      -  "phone_lookup",
      -  "username_lookup",
      -  "password_check",
      -  "phishing_check",
      -  "atlas_technique_lookup",
      -  "atlas_technique_search",
      -  "bulk_atlas_technique_lookup",
      -  "atlas_case_study_lookup",
      -  "atlas_case_study_search",
      -  "d3fend_defense_lookup",
      -  "d3fend_defense_search",
      -  "d3fend_defense_for_attack",
      -  "d3fend_attack_coverage"
      -]New value: +[
      +  "cve_lookup",
      +  "cve_search",
      +  "cve_leading",
      +  "bulk_cve_lookup",
      +  "exploit_lookup",
      +  "kev_detail",
      +  "cwe_lookup",
      +  "subdomain_enum",
      +  "ssl_check",
      +  "tech_fingerprint",
      +  "asn_lookup",
      +  "ip_lookup",
      +  "ioc_lookup",
      +  "bulk_ioc_lookup",
      +  "hash_lookup",
      +  "threat_intel",
      +  "threat_report",
      +  "audit_domain",
      +  "domain_report",
      +  "dns_lookup",
      +  "whois_lookup",
      +  "wayback_lookup",
      +  "scan_headers",
      +  "check_headers",
      +  "check_secrets",
      +  "check_injection",
      +  "check_dependencies",
      +  "email_mx",
      +  "email_disposable",
      +  "email_verify",
      +  "robots_txt",
      +  "redirect_chain",
      +  "brand_assets",
      +  "seo_audit",
      +  "phone_lookup",
      +  "username_lookup",
      +  "password_check",
      +  "phishing_check",
      +  "atlas_technique_lookup",
      +  "atlas_technique_search",
      +  "bulk_atlas_technique_lookup",
      +  "atlas_case_study_lookup",
      +  "atlas_case_study_search",
      +  "d3fend_defense_lookup",
      +  "d3fend_defense_search",
      +  "d3fend_defense_for_attack",
      +  "d3fend_attack_coverage"
      +]
  11. Changed3 schema fields changed
    • addedOutput schema / $defs
      Added value: +{
      +  "AbuseIpdbInfo": {
      +    "description": "AbuseIPDB reputation check (Pro tier only).",
      +    "properties": {
      +      "abuse_score": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "AbuseIPDB confidence-of-abuse score (0-100). Only present when status='ok'.",
      +        "title": "Abuse Score"
      +      },
      +      "country": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ISO 3166-1 alpha-2 country code from AbuseIPDB geolocation (may differ from RIPE).",
      +        "title": "Country"
      +      },
      +      "is_tor": {
      +        "anyOf": [
      +          {
      +            "type": "boolean"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "AbuseIPDB's Tor exit flag (cross-reference with top-level tor_exit field).",
      +        "title": "Is Tor"
      +      },
      +      "isp": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ISP name as reported by AbuseIPDB.",
      +        "title": "Isp"
      +      },
      +      "reason": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Human-readable reason string. Present when status is skipped/rate_limited/error/pro_only.",
      +        "title": "Reason"
      +      },
      +      "status": {
      +        "description": "'ok' = data fetched; 'skipped' = API key not configured; 'rate_limited' = AbuseIPDB quota exceeded; 'error' = transient HTTP/network failure; 'pro_only' = returned on Free tier as upsell hint (see upgrade_url).",
      +        "enum": [
      +          "ok",
      +          "skipped",
      +          "rate_limited",
      +          "error",
      +          "pro_only"
      +        ],
      +        "title": "Status",
      +        "type": "string"
      +      },
      +      "total_reports": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Number of reports submitted against this IP in the last 90 days.",
      +        "title": "Total Reports"
      +      },
      +      "upgrade_url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Upgrade link returned when status='pro_only'.",
      +        "title": "Upgrade Url"
      +      },
      +      "usage_type": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "AbuseIPDB usage classification: 'Data Center/Web Hosting/Transit', 'ISP', 'Mobile ISP', etc.",
      +        "title": "Usage Type"
      +      }
      +    },
      +    "required": [
      +      "status"
      +    ],
      +    "title": "AbuseIpdbInfo",
      +    "type": "object"
      +  },
      +  "ErrorDetail": {
      +    "description": "Structured failure body. Codes mirror app/exceptions.AppException\nsubclasses; agent retry / upgrade decisions key off `code`, not `message`.",
      +    "properties": {
      +      "code": {
      +        "description": "Stable machine-readable failure category. Agents key retry/upgrade decisions off this.",
      +        "enum": [
      +          "invalid_argument",
      +          "not_found",
      +          "rate_limit_exceeded",
      +          "auth_required",
      +          "tier_limit",
      +          "upstream_timeout",
      +          "upstream_error",
      +          "internal_error"
      +        ],
      +        "title": "Code",
      +        "type": "string"
      +      },
      +      "docs_url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Documentation pointer (e.g. tool input contract) when code='invalid_argument'.",
      +        "title": "Docs Url"
      +      },
      +      "message": {
      +        "description": "Human-readable detail. Free text — never parse. Capped at 500 chars to prevent oversized upstream errors from bloating responses.",
      +        "maxLength": 500,
      +        "title": "Message",
      +        "type": "string"
      +      },
      +      "retry_after_seconds": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "When code='rate_limit_exceeded', the minimum seconds to wait before retrying.",
      +        "title": "Retry After Seconds"
      +      },
      +      "upgrade_url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Pricing/upgrade URL when code='tier_limit' or 'rate_limit_exceeded' on the Free tier.",
      +        "title": "Upgrade Url"
      +      }
      +    },
      +    "required": [
      +      "code",
      +      "message"
      +    ],
      +    "title": "ErrorDetail",
      +    "type": "object"
      +  },
      +  "ErrorResponse": {
      +    "description": "MCP error envelope. Tool return type is always\n`SpecificResponse | ErrorResponse` — Union flag tells the agent which arm\narrived without parsing the inner body.",
      +    "properties": {
      +      "error": {
      +        "$ref": "#/$defs/ErrorDetail"
      +      }
      +    },
      +    "required": [
      +      "error"
      +    ],
      +    "title": "ErrorResponse",
      +    "type": "object"
      +  },
      +  "FireholInfo": {
      +    "description": "FireHOL level1 blocklist check (Free tier and Pro).",
      +    "properties": {
      +      "listed": {
      +        "default": false,
      +        "description": "True if the IP matches any range in firehol_level1 (known-bad aggregated blocklist).",
      +        "title": "Listed",
      +        "type": "boolean"
      +      },
      +      "lists_matched": {
      +        "description": "List identifiers matched. Currently ['firehol_level1'] when listed, else empty.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Lists Matched",
      +        "type": "array"
      +      },
      +      "status": {
      +        "description": "'ok' = trie lookup succeeded; 'skipped' = private/reserved/loopback/link-local IP, not meaningful to check; 'unavailable' = FireHOL feed could not be fetched (be honest with agent).",
      +        "enum": [
      +          "ok",
      +          "skipped",
      +          "unavailable"
      +        ],
      +        "title": "Status",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "status"
      +    ],
      +    "title": "FireholInfo",
      +    "type": "object"
      +  },
      +  "IpLookupResponse": {
      +    "properties": {
      +      "asn": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Autonomous System Number from RIPE Stat network-info (e.g. 13335 for Cloudflare).",
      +        "title": "Asn"
      +      },
      +      "asn_name": {
      +        "anyOf": [
      +          {
      +            "maxLength": 256,
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Human-readable AS name from RIPE Stat as-overview (e.g. 'CLOUDFLARENET').",
      +        "title": "Asn Name"
      +      },
      +      "cloud_provider": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Cloud provider name resolved via two-tier detection: (1) published cloud CIDR ranges (AWS/GCP/Cloudflare), (2) ASN-to-provider map fallback for anycast/public-service IPs outside published ranges (e.g. 8.8.8.8 → AS15169 → 'Google'). Null when neither matches. Always present in response (route emits null-explicit so agents can disambiguate 'not detected' from 'field absent').",
      +        "title": "Cloud Provider"
      +      },
      +      "country": {
      +        "anyOf": [
      +          {
      +            "maxLength": 8,
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ISO 3166-1 alpha-2 country code from RIPE Stat rir-stats-country (RIR-allocated).",
      +        "title": "Country"
      +      },
      +      "cpes": {
      +        "description": "CPE 2.3 strings for services detected on this IP per Shodan InternetDB.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Cpes",
      +        "type": "array"
      +      },
      +      "hostnames": {
      +        "description": "Hostnames observed pointing to this IP per Shodan InternetDB.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Hostnames",
      +        "type": "array"
      +      },
      +      "ip": {
      +        "description": "Queried IP address (IPv4 or IPv6, echoed back verbatim).",
      +        "title": "Ip",
      +        "type": "string"
      +      },
      +      "is_datacenter": {
      +        "default": false,
      +        "description": "True if IP is hosted on a known datacenter / cloud provider. Detection: (1) cloud_provider populated (CIDR or ASN map hit covering AWS/GCP/Cloudflare/DigitalOcean/Hetzner/OVH/Linode/Vultr/Microsoft Azure), (2) ASN in tier-1 datacenter set (adds Oracle/Alibaba/Tencent on top of the cloud_provider map). Use for Nuclei matchers + bug-bounty triage where datacenter targets warrant different scan policy than residential IPs. Always present — never null.",
      +        "title": "Is Datacenter",
      +        "type": "boolean"
      +      },
      +      "next_calls": {
      +        "anyOf": [
      +          {
      +            "items": {
      +              "$ref": "#/$defs/PivotHint"
      +            },
      +            "type": "array"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Suggested follow-up MCP tool calls. Ordered by relevance; agents should chain these without re-prompting the user.",
      +        "title": "Next Calls"
      +      },
      +      "ports": {
      +        "description": "Open ports observed by Shodan InternetDB (free, no API key; superseded by reputation.shodan.ports on Pro).",
      +        "items": {
      +          "type": "integer"
      +        },
      +        "title": "Ports",
      +        "type": "array"
      +      },
      +      "ptr": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Reverse-DNS PTR record. Null when no PTR is published.",
      +        "title": "Ptr"
      +      },
      +      "reputation": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/ReputationInfo"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Multi-source reputation. Free tier: firehol populated, abuseipdb/shodan return status='pro_only' upsell stubs. Pro tier: all three live."
      +      },
      +      "risk_score": {
      +        "default": 0,
      +        "description": "Composite 0-100 risk score (v1.17.0 formula). Additive components: ports (10 * min(count, 5) = 0-50), tor_exit (+30), firehol.listed (+20), AbuseIPDB confidence (round(15 * score / 100) = 0-15), is_datacenter (+10), known vulns (5 * min(count, 4) = 0-20). Datacenter membership now adds risk (was a -10 trust bonus pre-1.17). Use severity_label for thresholding.",
      +        "title": "Risk Score",
      +        "type": "integer"
      +      },
      +      "severity_label": {
      +        "default": "low",
      +        "description": "Coarse risk band derived from risk_score (>=75 critical, >=50 high, >=25 medium, else low). Use this for Nuclei matchers and MCP agent triage when you don't want to re-implement the threshold logic; risk_score is the canonical numeric source.",
      +        "enum": [
      +          "low",
      +          "medium",
      +          "high",
      +          "critical"
      +        ],
      +        "title": "Severity Label",
      +        "type": "string"
      +      },
      +      "summary": {
      +        "default": "",
      +        "description": "One-line human-readable summary built from IP, PTR, ASN, country, ports, vulns.",
      +        "title": "Summary",
      +        "type": "string"
      +      },
      +      "tags": {
      +        "description": "Shodan InternetDB classification tags (e.g. 'cdn', 'cloud', 'vpn', 'tor', 'self-signed').",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Tags",
      +        "type": "array"
      +      },
      +      "tor_exit": {
      +        "default": false,
      +        "description": "True if IP appears in the Tor Project's exit node list. False when not listed or when the upstream list fetch failed (check verdict.sources_unavailable for 'tor' to distinguish). Always present in response — never null.",
      +        "title": "Tor Exit",
      +        "type": "boolean"
      +      },
      +      "verdict": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/Verdict"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Falsifiability metadata: sources_queried, sources_unavailable, completeness, deterministic flag. Lets agents distinguish 'no data' from 'source failed' without re-running the call."
      +      },
      +      "vulns": {
      +        "description": "CVEs Shodan InternetDB has associated with banners on this IP, enriched with severity + cvss_v3 from local cve.db (Phase 2 IP enrichment, v1.16.0 BREAKING). Pre-1.16 this was a flat list[str] of CVE IDs. Order is preserved from Shodan (meaningful — Shodan ranks confidence). Unknown CVEs emit severity='UNKNOWN'; do NOT infer 'benign' from UNKNOWN.",
      +        "items": {
      +          "$ref": "#/$defs/VulnInfo"
      +        },
      +        "title": "Vulns",
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "ip"
      +    ],
      +    "title": "IpLookupResponse",
      +    "type": "object"
      +  },
      +  "PivotHint": {
      +    "additionalProperties": true,
      +    "description": "A suggested follow-up MCP tool call. Surfaced inside response.next_calls so\nLLM agents can chain related lookups without manual prompting. Each hint names\nthe tool, the input value to pass, and a short reason explaining why this\npivot adds value in the current context.",
      +    "properties": {
      +      "input": {
      +        "description": "Suggested input value to pass to the tool — typically a CVE ID, CWE ID, domain, or IP. Pre-populated from the current response so the agent can call the next tool without re-deriving the argument.",
      +        "title": "Input",
      +        "type": "string"
      +      },
      +      "params": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Optional extra kwargs to pass alongside `input`. Used by pivot generators when the next call benefits from a secondary parameter, e.g. {'exclude_id': 'AML.T0051'} to skip the originating technique from a sibling-tactic search. Omitted when no extra args are needed.",
      +        "title": "Params"
      +      },
      +      "reason": {
      +        "description": "Short rationale (one sentence) for why this follow-up call adds value, e.g. 'Federal patch deadline + ransomware association', 'Public exploits / PoC availability'.",
      +        "title": "Reason",
      +        "type": "string"
      +      },
      +      "tool": {
      +        "description": "Canonical MCP tool name to call next. Constrained to known operation_ids in tools/list — adding a new tool here requires expanding the Literal.",
      +        "enum": [
      +          "cve_lookup",
      +          "cve_search",
      +          "cve_leading",
      +          "bulk_cve_lookup",
      +          "exploit_lookup",
      +          "kev_detail",
      +          "cwe_lookup",
      +          "subdomain_enum",
      +          "ssl_check",
      +          "tech_fingerprint",
      +          "asn_lookup",
      +          "ip_lookup",
      +          "ioc_lookup",
      +          "bulk_ioc_lookup",
      +          "hash_lookup",
      +          "threat_intel",
      +          "threat_report",
      +          "audit_domain",
      +          "domain_report",
      +          "dns_lookup",
      +          "whois_lookup",
      +          "wayback_lookup",
      +          "scan_headers",
      +          "check_headers",
      +          "check_secrets",
      +          "check_injection",
      +          "check_dependencies",
      +          "email_mx",
      +          "email_disposable",
      +          "phone_lookup",
      +          "username_lookup",
      +          "password_check",
      +          "phishing_check",
      +          "atlas_technique_lookup",
      +          "atlas_technique_search",
      +          "bulk_atlas_technique_lookup",
      +          "atlas_case_study_lookup",
      +          "atlas_case_study_search",
      +          "d3fend_defense_lookup",
      +          "d3fend_defense_search",
      +          "d3fend_defense_for_attack",
      +          "d3fend_attack_coverage"
      +        ],
      +        "title": "Tool",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "tool",
      +      "input",
      +      "reason"
      +    ],
      +    "title": "PivotHint",
      +    "type": "object"
      +  },
      +  "ReputationInfo": {
      +    "description": "Multi-source IP reputation. Sources present depend on tier (Free: firehol only; Pro: all three).",
      +    "properties": {
      +      "abuseipdb": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/AbuseIpdbInfo"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "AbuseIPDB abuse confidence. Pro tier only — omitted from the response on Free."
      +      },
      +      "firehol": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/FireholInfo"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "FireHOL level1 blocklist membership. Available on Free tier."
      +      },
      +      "shodan": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/ShodanRepInfo"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Shodan full API enrichment. Pro tier only — omitted from the response on Free."
      +      },
      +      "upgrade": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/ReputationUpgradeHint"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Free-tier-only pointer to the Pro-only sources that were skipped."
      +      }
      +    },
      +    "title": "ReputationInfo",
      +    "type": "object"
      +  },
      +  "ReputationUpgradeHint": {
      +    "description": "Compact pointer that replaces the verbose pro_only sub-stubs for Free tier.\n\nBug I4: previously the abuseipdb/shodan slots carried full Pydantic models\nwith every field null + a status='pro_only' marker — ~150 tokens of pure\nnegative space per Free-tier ip_lookup response. The verdict block already\nlists those sources in sources_unavailable on Free; this hint just points\ncallers at the upgrade page in one line.",
      +    "properties": {
      +      "pro_only_sources": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Pro Only Sources",
      +        "type": "array"
      +      },
      +      "reason": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Reason"
      +      },
      +      "upgrade_url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Upgrade Url"
      +      }
      +    },
      +    "title": "ReputationUpgradeHint",
      +    "type": "object"
      +  },
      +  "ShodanRepInfo": {
      +    "description": "Shodan full API enrichment (Pro tier only). Richer than InternetDB fields at top level.",
      +    "properties": {
      +      "asn": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ASN string per Shodan (e.g. 'AS13335'); may differ from top-level asn int.",
      +        "title": "Asn"
      +      },
      +      "city": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "City name per Shodan geolocation.",
      +        "title": "City"
      +      },
      +      "country_name": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Country name per Shodan geolocation.",
      +        "title": "Country Name"
      +      },
      +      "hostnames": {
      +        "description": "Hostnames observed pointing to this IP per Shodan.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Hostnames",
      +        "type": "array"
      +      },
      +      "isp": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ISP per Shodan (may differ from AbuseIPDB/RIPE).",
      +        "title": "Isp"
      +      },
      +      "last_update": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ISO 8601 timestamp of Shodan's most recent data point for this IP.",
      +        "title": "Last Update"
      +      },
      +      "org": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Organization name owning the IP per Shodan.",
      +        "title": "Org"
      +      },
      +      "os": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Shodan-detected operating system (fingerprint-based, best-effort).",
      +        "title": "Os"
      +      },
      +      "ports": {
      +        "description": "Open ports observed by Shodan full scan (superset of top-level InternetDB ports).",
      +        "items": {
      +          "type": "integer"
      +        },
      +        "title": "Ports",
      +        "type": "array"
      +      },
      +      "reason": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Human-readable reason. Present when status is skipped/restricted/rate_limited/error/pro_only.",
      +        "title": "Reason"
      +      },
      +      "status": {
      +        "description": "'ok' = data fetched; 'skipped' = API key not configured; 'restricted' = 403 (IP not available on free Shodan tier); 'rate_limited' = 429 quota exceeded; 'error' = transient HTTP/network failure; 'pro_only' = returned on Free tier as upsell hint.",
      +        "enum": [
      +          "ok",
      +          "skipped",
      +          "restricted",
      +          "rate_limited",
      +          "error",
      +          "pro_only"
      +        ],
      +        "title": "Status",
      +        "type": "string"
      +      },
      +      "upgrade_url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Upgrade link returned when status='pro_only'.",
      +        "title": "Upgrade Url"
      +      },
      +      "vulns": {
      +        "description": "CVE IDs Shodan has associated with banners on this IP.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Vulns",
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "status"
      +    ],
      +    "title": "ShodanRepInfo",
      +    "type": "object"
      +  },
      +  "Verdict": {
      +    "properties": {
      +      "completeness": {
      +        "default": "complete",
      +        "description": "'complete' = every planned source returned data; 'partial' = at least one source in sources_unavailable failed or was skipped; 'minimal' = only the primary/required source returned, optional enrichment missing.",
      +        "enum": [
      +          "complete",
      +          "partial",
      +          "minimal"
      +        ],
      +        "title": "Completeness",
      +        "type": "string"
      +      },
      +      "data_age_seconds": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Seconds elapsed since the oldest cached source was fetched, or null when every source was queried live for this request. Use to judge freshness.",
      +        "title": "Data Age Seconds"
      +      },
      +      "deterministic": {
      +        "description": "True when the response is fully reproducible from the listed sources for the same input at the same moment (no randomness, no model inference). False for endpoints that include probabilistic scoring or LLM output.",
      +        "title": "Deterministic",
      +        "type": "boolean"
      +      },
      +      "falsifiable_fields": {
      +        "description": "Top-level response fields whose values a caller can independently re-derive from the named upstream sources (e.g. 'dns', 'ssl', 'whois'). Fields not in this list are derived/computed and cannot be directly re-verified.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Falsifiable Fields",
      +        "type": "array"
      +      },
      +      "sources_queried": {
      +        "description": "Canonical source identifiers successfully consulted for this response (e.g. 'ripe_stat', 'shodan_internetdb', 'firehol'). Agent-readable list, order not significant.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Sources Queried",
      +        "type": "array"
      +      },
      +      "sources_unavailable": {
      +        "description": "Sources that were expected but not returned — either intentionally skipped (lite mode, tier gating) or failed (quota, timeout, upstream down). Empty list means every planned source produced data.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Sources Unavailable",
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "deterministic"
      +    ],
      +    "title": "Verdict",
      +    "type": "object"
      +  },
      +  "VulnInfo": {
      +    "description": "Severity-enriched CVE entry attached to /v1/ip and /v1/threat_report.\n\nPhase 2 IP enrichment (v1.16.0 BREAKING): Shodan InternetDB returns a flat\nlist of CVE IDs with no severity context, forcing agents to fan out\ncve_lookup calls for triage. We resolve severity + cvss_v3 against the\nlocal cve.db in a single SQL batch so the agent can prioritise without\nextra round-trips. Unknown CVEs are emitted with severity='UNKNOWN' /\ncvss_v3=null so the ID is preserved (the agent must not infer 'benign'\nfrom the absence of a row).",
      +    "properties": {
      +      "cve_id": {
      +        "description": "CVE identifier (e.g. 'CVE-2021-44228').",
      +        "title": "Cve Id",
      +        "type": "string"
      +      },
      +      "cvss_v3": {
      +        "anyOf": [
      +          {
      +            "maximum": 10,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "CVSS v3 base score (0.0-10.0). Null when severity='UNKNOWN' or NVD has no v3 score.",
      +        "title": "Cvss V3"
      +      },
      +      "severity": {
      +        "description": "NVD CVSS v3 severity bucket from local cve.db. 'UNKNOWN' when the CVE is not in our database (NVD may not have classified it yet, or the ID is reserved). Treat UNKNOWN as 'do not assume benign — call cve_lookup for fresh upstream data.'",
      +        "enum": [
      +          "CRITICAL",
      +          "HIGH",
      +          "MEDIUM",
      +          "LOW",
      +          "UNKNOWN"
      +        ],
      +        "title": "Severity",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "cve_id",
      +      "severity"
      +    ],
      +    "title": "VulnInfo",
      +    "type": "object"
      +  }
      +}
    • addedOutput schema / properties / result / anyOf
      Added value: +[
      +  {
      +    "$ref": "#/$defs/IpLookupResponse"
      +  },
      +  {
      +    "$ref": "#/$defs/ErrorResponse"
      +  }
      +]
    • removedOutput schema / properties / result / type
      Removed value: -"string"
  12. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Despite annotations already marking readOnlyHint=true and destructiveHint=false, the description adds substantial behavioral context: the v1.16.0 breaking change in vulns format, the two-tier cloud_provider detection logic, null-explicit field behavior, the meaning of tor_exit=false in relation to sources_unavailable, and conditional next_calls. This goes far beyond what annotations convey.

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

Conciseness4/5

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

The description is dense but well-organized, front-loading the core purpose and then layering important details like version changes, detection logic, and rate limits. It is a single large paragraph and could benefit from bullet points, but every sentence carries meaningful information without redundancy.

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

Completeness5/5

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

For a tool with one parameter and a rich output schema, the description thoroughly explains the return fields, null-explicit behavior, edge cases (e.g., unknown CVEs, fetch failures), and conditional next_calls. It even clarifies tier-dependent reputation sources. No significant gaps remain.

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?

The single parameter 'ip' is fully described in the schema (100% coverage) with type and examples. The description adds no extra parameter-specific syntax or constraints, but since the schema already covers it, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description opens with a specific verb+resource: 'Query comprehensive IP intelligence' and enumerates the exact data types (reverse DNS, ASN, ports, vulnerabilities, etc.), making its scope unmistakable. It also differentiates from the sibling tool threat_report by explicitly stating 'for orchestrated IP+reputation use threat_report,' and references next_calls to related lookups.

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

Usage Guidelines5/5

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

It gives an explicit usage directive: 'Use for IP investigation; for orchestrated IP+reputation use threat_report,' naming the alternative tool. It further clarifies tier-based behavior (Free vs Pro) and rate limits, helping the agent decide when and how to invoke it.

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.

TDQS

A4.5/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, with differences between lookup/search/scan/audit for each domain. However, some overlap exists (e.g., email_mx vs email_security_posture, scan_headers vs contrast_scan) which could cause occasional confusion. Overall, boundaries are well-defined.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern (e.g., cve_lookup, check_headers, bulk_cve_lookup) with all lowercase underscores. Variations like kev_detail or ssl_check are minor and still predictable. No chaotic mixing of conventions.

Tool Count4/5

54 tools is high but justified by the broad cybersecurity scope (CVE, ATLAS, D3FEND, Sigma, domain, email, IOC, scanning). Some redundancy exists (e.g., three email-related tools), but the count is not excessive given the API's comprehensive feature set.

Completeness5/5

The tool set thoroughly covers the threat intelligence and domain investigation lifecycle: CVE/KEV/exploit/CWE, ATLAS/D3FEND/Sigma, DNS/WHOIS/SSL/subdomains, email security, IOC enrichment, and active scanning. No significant gaps are apparent for the stated cybersecurity purpose.