Skip to main content
Glama

IOC Lookup

ioc_lookup
Read-onlyIdempotent

Enrich Indicator of Compromise (IP/domain/URL/hash) by auto-detecting type and querying abuse.ch feeds. Per-type source coverage: hash → ThreatFox only (Feodo and URLhaus do not index hashes); IP → ThreatFox + Feodo Tracker + URLhaus; domain / URL → ThreatFox + URLhaus. verdict.sources_queried lists what actually ran; verdict.sources_unavailable lists what failed (timeout / upstream error). Use as primary IOC triage tool when type unknown; use threat_intel for domain-only, hash_lookup for richer MalwareBazaar hash data. Free: 30/hr, Pro: 500/hr. Returns {indicator, type, threat_level, sources, summary, verdict}.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
indicatorYesIndicator of Compromise: IP address, domain, full URL, or file hash in MD5/SHA1/SHA256 format (e.g. '8.8.8.8', 'evil.com', 'https://evil.com/malware.exe', 'd41d8cd98f00b204e9800998ecf8427e')

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / result / properties / next_calls / type
      Previous value: -"array"New value: +[
      +  "array",
      +  "null"
      +]
    • changedOutput schema / properties / result / properties / verdict / type
      Previous value: -"object"New value: +[
      +  "object",
      +  "null"
      +]
  2. Changed1 schema field changed
    • changedOutput schema / properties / result / properties / next_calls / type
      Previous value: -"object"New value: +"array"
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "result": {
      +      "properties": {
      +        "indicator": {
      +          "type": "string"
      +        },
      +        "next_calls": {
      +          "type": "object"
      +        },
      +        "sources": {
      +          "type": "object"
      +        },
      +        "summary": {
      +          "type": "string"
      +        },
      +        "threat_level": {
      +          "type": "string"
      +        },
      +        "type": {
      +          "type": "string"
      +        },
      +        "verdict": {
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "indicator",
      +        "type"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "result"
      +  ],
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "$defs": {
      -    "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"
      -    },
      -    "FeodoSource": {
      -      "properties": {
      -        "first_seen": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "found": {
      -          "type": "boolean"
      -        },
      -        "last_online": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "malware": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "status": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "required": [
      -        "found"
      -      ],
      -      "type": "object"
      -    },
      -    "IocResponse": {
      -      "properties": {
      -        "indicator": {
      -          "type": "string"
      -        },
      -        "next_calls": {
      -          "anyOf": [
      -            {
      -              "items": {
      -                "$ref": "#/$defs/PivotHint"
      -              },
      -              "type": "array"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "sources": {
      -          "$ref": "#/$defs/IocSourcesInfo"
      -        },
      -        "summary": {
      -          "type": "string"
      -        },
      -        "threat_level": {
      -          "enum": [
      -            "none",
      -            "low",
      -            "medium",
      -            "high"
      -          ],
      -          "type": "string"
      -        },
      -        "type": {
      -          "enum": [
      -            "ip",
      -            "domain",
      -            "url",
      -            "hash",
      -            "unknown"
      -          ],
      -          "type": "string"
      -        },
      -        "verdict": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/Verdict"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "required": [
      -        "indicator",
      -        "type"
      -      ],
      -      "type": "object"
      -    },
      -    "IocSourcesInfo": {
      -      "properties": {
      -        "feodo": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/FeodoSource"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "threatfox": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/ThreatFoxSource"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "tor": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/TorSource"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "urlhaus": {
      -          "anyOf": [
      -            {
      -              "$ref": "#/$defs/UrlhausSource"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "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"
      -    },
      -    "ThreatFoxSource": {
      -      "properties": {
      -        "confidence": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "error": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "first_seen": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "found": {
      -          "type": "boolean"
      -        },
      -        "ioc_count": {
      -          "anyOf": [
      -            {
      -              "type": "integer"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "malware": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        },
      -        "tags": {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "threat_type": {
      -          "anyOf": [
      -            {
      -              "type": "string"
      -            },
      -            {
      -              "type": "null"
      -            }
      -          ]
      -        }
      -      },
      -      "required": [
      -        "found"
      -      ],
      -      "type": "object"
      -    },
      -    "TorSource": {
      -      "properties": {
      -        "fetch_status": {
      -          "enum": [
      -            "initial",
      -            "ok",
      -            "failed",
      -            "capped"
      -          ],
      -          "type": "string"
      -        },
      -        "listed": {
      -          "type": "boolean"
      -        }
      -      },
      -      "required": [
      -        "listed",
      -        "fetch_status"
      -      ],
      -      "type": "object"
      -    },
      -    "UrlhausSource": {
      -      "properties": {
      -        "found": {
      -          "type": "boolean"
      -        },
      -        "urls_online": {
      -          "type": "integer"
      -        }
      -      },
      -      "required": [
      -        "found"
      -      ],
      -      "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"
      -    }
      -  },
      -  "properties": {
      -    "result": {
      -      "anyOf": [
      -        {
      -          "$ref": "#/$defs/IocResponse"
      -        },
      -        {
      -          "$ref": "#/$defs/ErrorResponse"
      -        }
      -      ]
      -    }
      -  },
      -  "required": [
      -    "result"
      -  ],
      -  "type": "object"
      -}New value: +null
  5. Changed125 schema fields changed
    • 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 / FeodoSource / description
      Removed value: -"Feodo Tracker C2 blocklist entry inside IocResponse.sources.feodo (IP only)."
    • removedOutput schema / $defs / FeodoSource / properties / first_seen / default
      Removed value: -null
    • removedOutput schema / $defs / FeodoSource / properties / first_seen / description
      Removed value: -"ISO timestamp of first Feodo observation. Null when found=False."
    • removedOutput schema / $defs / FeodoSource / properties / first_seen / title
      Removed value: -"First Seen"
    • removedOutput schema / $defs / FeodoSource / properties / found / description
      Removed value: -"True when the IP appears on the Feodo Tracker C2 blocklist."
    • removedOutput schema / $defs / FeodoSource / properties / found / title
      Removed value: -"Found"
    • removedOutput schema / $defs / FeodoSource / properties / last_online / default
      Removed value: -null
    • removedOutput schema / $defs / FeodoSource / properties / last_online / description
      Removed value: -"ISO timestamp the C2 was last seen online. Null when found=False."
    • removedOutput schema / $defs / FeodoSource / properties / last_online / title
      Removed value: -"Last Online"
    • removedOutput schema / $defs / FeodoSource / properties / malware / default
      Removed value: -null
    • removedOutput schema / $defs / FeodoSource / properties / malware / description
      Removed value: -"Malware family attributed by Feodo (e.g. 'Emotet'). Null when found=False."
    • removedOutput schema / $defs / FeodoSource / properties / malware / title
      Removed value: -"Malware"
    • removedOutput schema / $defs / FeodoSource / properties / status / default
      Removed value: -null
    • removedOutput schema / $defs / FeodoSource / properties / status / description
      Removed value: -"C2 lifecycle status per Feodo (e.g. 'online', 'offline'). Null when found=False."
    • removedOutput schema / $defs / FeodoSource / properties / status / title
      Removed value: -"Status"
    • removedOutput schema / $defs / FeodoSource / title
      Removed value: -"FeodoSource"
    • removedOutput schema / $defs / IocResponse / properties / indicator / description
      Removed value: -"Echoed input indicator (sanitized; control chars stripped)."
    • removedOutput schema / $defs / IocResponse / properties / indicator / title
      Removed value: -"Indicator"
    • removedOutput schema / $defs / IocResponse / properties / next_calls / default
      Removed value: -null
    • removedOutput schema / $defs / IocResponse / 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 / IocResponse / properties / next_calls / title
      Removed value: -"Next Calls"
    • removedOutput schema / $defs / IocResponse / properties / sources / description
      Removed value: -"Per-source lookup results. See IocSourcesInfo for which sources apply per indicator type."
    • removedOutput schema / $defs / IocResponse / properties / summary / default
      Removed value: -""
    • removedOutput schema / $defs / IocResponse / properties / summary / description
      Removed value: -"One-line human summary aggregating threat indicators across sources."
    • removedOutput schema / $defs / IocResponse / properties / summary / title
      Removed value: -"Summary"
    • removedOutput schema / $defs / IocResponse / properties / threat_level / default
      Removed value: -"none"
    • removedOutput schema / $defs / IocResponse / properties / threat_level / description
      Removed value: -"Heuristic threat tier from cross-source agreement. 'high' = >=2 sources flagged; 'medium' = 1 source flagged; 'none' = no source flagged. 'low' is a soft cap applied when the only flag came from a ThreatFox test/demo honeypot tag."
    • removedOutput schema / $defs / IocResponse / properties / threat_level / title
      Removed value: -"Threat Level"
    • removedOutput schema / $defs / IocResponse / properties / type / description
      Removed value: -"Auto-detected indicator type. 'unknown' is rejected at route level (400)."
    • removedOutput schema / $defs / IocResponse / properties / type / title
      Removed value: -"Type"
    • removedOutput schema / $defs / IocResponse / properties / verdict / default
      Removed value: -null
    • removedOutput schema / $defs / IocResponse / 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 / IocResponse / title
      Removed value: -"IocResponse"
    • removedOutput schema / $defs / IocSourcesInfo / description
      Removed value: -"Per-source lookup results inside IocResponse. Keys present depend on indicator type.\n\n- hash → only `threatfox` (Feodo and URLhaus do not index hashes).\n- ip → `threatfox` + `feodo` + `urlhaus` + `tor`.\n- domain / url → `threatfox` + `urlhaus`."
    • removedOutput schema / $defs / IocSourcesInfo / properties / feodo / default
      Removed value: -null
    • removedOutput schema / $defs / IocSourcesInfo / properties / feodo / description
      Removed value: -"Feodo Tracker C2 blocklist lookup. IP indicators only."
    • removedOutput schema / $defs / IocSourcesInfo / properties / threatfox / default
      Removed value: -null
    • removedOutput schema / $defs / IocSourcesInfo / properties / threatfox / description
      Removed value: -"ThreatFox lookup result. Always queried."
    • removedOutput schema / $defs / IocSourcesInfo / properties / tor / default
      Removed value: -null
    • removedOutput schema / $defs / IocSourcesInfo / properties / tor / description
      Removed value: -"Tor exit list membership. IP indicators only."
    • removedOutput schema / $defs / IocSourcesInfo / properties / urlhaus / default
      Removed value: -null
    • removedOutput schema / $defs / IocSourcesInfo / properties / urlhaus / description
      Removed value: -"URLhaus URL/host match. IP/domain/URL indicators."
    • removedOutput schema / $defs / IocSourcesInfo / title
      Removed value: -"IocSourcesInfo"
    • 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 / ThreatFoxSource / description
      Removed value: -"ThreatFox abuse.ch source entry inside IocResponse.sources.threatfox."
    • removedOutput schema / $defs / ThreatFoxSource / properties / confidence / default
      Removed value: -null
    • removedOutput schema / $defs / ThreatFoxSource / properties / confidence / description
      Removed value: -"ThreatFox confidence score (0-100). Null when found=False or not provided upstream."
    • removedOutput schema / $defs / ThreatFoxSource / properties / confidence / title
      Removed value: -"Confidence"
    • removedOutput schema / $defs / ThreatFoxSource / properties / error / default
      Removed value: -null
    • removedOutput schema / $defs / ThreatFoxSource / properties / error / description
      Removed value: -"'upstream timeout' or 'upstream error' when ThreatFox query failed; absent on success."
    • removedOutput schema / $defs / ThreatFoxSource / properties / error / title
      Removed value: -"Error"
    • removedOutput schema / $defs / ThreatFoxSource / properties / first_seen / default
      Removed value: -null
    • removedOutput schema / $defs / ThreatFoxSource / properties / first_seen / description
      Removed value: -"ISO timestamp of first ThreatFox observation. Null when found=False."
    • removedOutput schema / $defs / ThreatFoxSource / properties / first_seen / title
      Removed value: -"First Seen"
    • removedOutput schema / $defs / ThreatFoxSource / properties / found / description
      Removed value: -"True when ThreatFox returned at least one IOC entry for the indicator."
    • removedOutput schema / $defs / ThreatFoxSource / properties / found / title
      Removed value: -"Found"
    • removedOutput schema / $defs / ThreatFoxSource / properties / ioc_count / default
      Removed value: -null
    • removedOutput schema / $defs / ThreatFoxSource / properties / ioc_count / description
      Removed value: -"Total ThreatFox IOC entries matching this indicator. Null when found=False."
    • removedOutput schema / $defs / ThreatFoxSource / properties / ioc_count / title
      Removed value: -"Ioc Count"
    • removedOutput schema / $defs / ThreatFoxSource / properties / malware / default
      Removed value: -null
    • removedOutput schema / $defs / ThreatFoxSource / properties / malware / description
      Removed value: -"Malware family name (e.g. 'Cobalt Strike'). Null when found=False."
    • removedOutput schema / $defs / ThreatFoxSource / properties / malware / title
      Removed value: -"Malware"
    • removedOutput schema / $defs / ThreatFoxSource / properties / tags / description
      Removed value: -"ThreatFox tags. May include 'test'/'demo' for honeypot entries."
    • removedOutput schema / $defs / ThreatFoxSource / properties / tags / title
      Removed value: -"Tags"
    • removedOutput schema / $defs / ThreatFoxSource / properties / threat_type / default
      Removed value: -null
    • removedOutput schema / $defs / ThreatFoxSource / properties / threat_type / description
      Removed value: -"Threat classification (e.g. 'botnet_cc', 'payload_delivery'). Null when found=False."
    • removedOutput schema / $defs / ThreatFoxSource / properties / threat_type / title
      Removed value: -"Threat Type"
    • removedOutput schema / $defs / ThreatFoxSource / title
      Removed value: -"ThreatFoxSource"
    • removedOutput schema / $defs / TorSource / description
      Removed value: -"Tor exit list entry inside IocResponse.sources.tor (IP only)."
    • removedOutput schema / $defs / TorSource / properties / fetch_status / description
      Removed value: -"Cache state of the Tor exit list snapshot used for the lookup. 'initial' = no refresh has run yet; 'ok' = fresh fetch; 'failed' = upstream fetch failed (treat listed=False as 'unknown', not 'safe'); 'capped' = upstream response exceeded the size cap and was rejected."
    • removedOutput schema / $defs / TorSource / properties / fetch_status / title
      Removed value: -"Fetch Status"
    • removedOutput schema / $defs / TorSource / properties / listed / description
      Removed value: -"True when the IP appears in the Tor Project's bulk exit list."
    • removedOutput schema / $defs / TorSource / properties / listed / title
      Removed value: -"Listed"
    • removedOutput schema / $defs / TorSource / title
      Removed value: -"TorSource"
    • removedOutput schema / $defs / UrlhausSource / description
      Removed value: -"URLhaus abuse.ch source entry inside IocResponse.sources.urlhaus."
    • removedOutput schema / $defs / UrlhausSource / properties / found / description
      Removed value: -"True when URLhaus has at least one URL for the indicator."
    • removedOutput schema / $defs / UrlhausSource / properties / found / title
      Removed value: -"Found"
    • removedOutput schema / $defs / UrlhausSource / properties / urls_online / default
      Removed value: -0
    • removedOutput schema / $defs / UrlhausSource / properties / urls_online / description
      Removed value: -"Subset of URLhaus URLs currently marked online."
    • removedOutput schema / $defs / UrlhausSource / properties / urls_online / title
      Removed value: -"Urls Online"
    • removedOutput schema / $defs / UrlhausSource / title
      Removed value: -"UrlhausSource"
    • 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 / properties / result / title
      Removed value: -"Result"
    • removedOutput schema / title
      Removed value: -"ioc_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: +{
      +  "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"
      +  },
      +  "FeodoSource": {
      +    "description": "Feodo Tracker C2 blocklist entry inside IocResponse.sources.feodo (IP only).",
      +    "properties": {
      +      "first_seen": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ISO timestamp of first Feodo observation. Null when found=False.",
      +        "title": "First Seen"
      +      },
      +      "found": {
      +        "description": "True when the IP appears on the Feodo Tracker C2 blocklist.",
      +        "title": "Found",
      +        "type": "boolean"
      +      },
      +      "last_online": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ISO timestamp the C2 was last seen online. Null when found=False.",
      +        "title": "Last Online"
      +      },
      +      "malware": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Malware family attributed by Feodo (e.g. 'Emotet'). Null when found=False.",
      +        "title": "Malware"
      +      },
      +      "status": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "C2 lifecycle status per Feodo (e.g. 'online', 'offline'). Null when found=False.",
      +        "title": "Status"
      +      }
      +    },
      +    "required": [
      +      "found"
      +    ],
      +    "title": "FeodoSource",
      +    "type": "object"
      +  },
      +  "IocResponse": {
      +    "properties": {
      +      "indicator": {
      +        "description": "Echoed input indicator (sanitized; control chars stripped).",
      +        "title": "Indicator",
      +        "type": "string"
      +      },
      +      "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"
      +      },
      +      "sources": {
      +        "$ref": "#/$defs/IocSourcesInfo",
      +        "description": "Per-source lookup results. See IocSourcesInfo for which sources apply per indicator type."
      +      },
      +      "summary": {
      +        "default": "",
      +        "description": "One-line human summary aggregating threat indicators across sources.",
      +        "title": "Summary",
      +        "type": "string"
      +      },
      +      "threat_level": {
      +        "default": "none",
      +        "description": "Heuristic threat tier from cross-source agreement. 'high' = >=2 sources flagged; 'medium' = 1 source flagged; 'none' = no source flagged. 'low' is a soft cap applied when the only flag came from a ThreatFox test/demo honeypot tag.",
      +        "enum": [
      +          "none",
      +          "low",
      +          "medium",
      +          "high"
      +        ],
      +        "title": "Threat Level",
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Auto-detected indicator type. 'unknown' is rejected at route level (400).",
      +        "enum": [
      +          "ip",
      +          "domain",
      +          "url",
      +          "hash",
      +          "unknown"
      +        ],
      +        "title": "Type",
      +        "type": "string"
      +      },
      +      "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."
      +      }
      +    },
      +    "required": [
      +      "indicator",
      +      "type"
      +    ],
      +    "title": "IocResponse",
      +    "type": "object"
      +  },
      +  "IocSourcesInfo": {
      +    "description": "Per-source lookup results inside IocResponse. Keys present depend on indicator type.\n\n- hash → only `threatfox` (Feodo and URLhaus do not index hashes).\n- ip → `threatfox` + `feodo` + `urlhaus` + `tor`.\n- domain / url → `threatfox` + `urlhaus`.",
      +    "properties": {
      +      "feodo": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/FeodoSource"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Feodo Tracker C2 blocklist lookup. IP indicators only."
      +      },
      +      "threatfox": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/ThreatFoxSource"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ThreatFox lookup result. Always queried."
      +      },
      +      "tor": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/TorSource"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Tor exit list membership. IP indicators only."
      +      },
      +      "urlhaus": {
      +        "anyOf": [
      +          {
      +            "$ref": "#/$defs/UrlhausSource"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "URLhaus URL/host match. IP/domain/URL indicators."
      +      }
      +    },
      +    "title": "IocSourcesInfo",
      +    "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"
      +  },
      +  "ThreatFoxSource": {
      +    "description": "ThreatFox abuse.ch source entry inside IocResponse.sources.threatfox.",
      +    "properties": {
      +      "confidence": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ThreatFox confidence score (0-100). Null when found=False or not provided upstream.",
      +        "title": "Confidence"
      +      },
      +      "error": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "'upstream timeout' or 'upstream error' when ThreatFox query failed; absent on success.",
      +        "title": "Error"
      +      },
      +      "first_seen": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "ISO timestamp of first ThreatFox observation. Null when found=False.",
      +        "title": "First Seen"
      +      },
      +      "found": {
      +        "description": "True when ThreatFox returned at least one IOC entry for the indicator.",
      +        "title": "Found",
      +        "type": "boolean"
      +      },
      +      "ioc_count": {
      +        "anyOf": [
      +          {
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Total ThreatFox IOC entries matching this indicator. Null when found=False.",
      +        "title": "Ioc Count"
      +      },
      +      "malware": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Malware family name (e.g. 'Cobalt Strike'). Null when found=False.",
      +        "title": "Malware"
      +      },
      +      "tags": {
      +        "description": "ThreatFox tags. May include 'test'/'demo' for honeypot entries.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "title": "Tags",
      +        "type": "array"
      +      },
      +      "threat_type": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Threat classification (e.g. 'botnet_cc', 'payload_delivery'). Null when found=False.",
      +        "title": "Threat Type"
      +      }
      +    },
      +    "required": [
      +      "found"
      +    ],
      +    "title": "ThreatFoxSource",
      +    "type": "object"
      +  },
      +  "TorSource": {
      +    "description": "Tor exit list entry inside IocResponse.sources.tor (IP only).",
      +    "properties": {
      +      "fetch_status": {
      +        "description": "Cache state of the Tor exit list snapshot used for the lookup. 'initial' = no refresh has run yet; 'ok' = fresh fetch; 'failed' = upstream fetch failed (treat listed=False as 'unknown', not 'safe'); 'capped' = upstream response exceeded the size cap and was rejected.",
      +        "enum": [
      +          "initial",
      +          "ok",
      +          "failed",
      +          "capped"
      +        ],
      +        "title": "Fetch Status",
      +        "type": "string"
      +      },
      +      "listed": {
      +        "description": "True when the IP appears in the Tor Project's bulk exit list.",
      +        "title": "Listed",
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "listed",
      +      "fetch_status"
      +    ],
      +    "title": "TorSource",
      +    "type": "object"
      +  },
      +  "UrlhausSource": {
      +    "description": "URLhaus abuse.ch source entry inside IocResponse.sources.urlhaus.",
      +    "properties": {
      +      "found": {
      +        "description": "True when URLhaus has at least one URL for the indicator.",
      +        "title": "Found",
      +        "type": "boolean"
      +      },
      +      "urls_online": {
      +        "default": 0,
      +        "description": "Subset of URLhaus URLs currently marked online.",
      +        "title": "Urls Online",
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "found"
      +    ],
      +    "title": "UrlhausSource",
      +    "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"
      +  }
      +}
    • addedOutput schema / properties / result / anyOf
      Added value: +[
      +  {
      +    "$ref": "#/$defs/IocResponse"
      +  },
      +  {
      +    "$ref": "#/$defs/ErrorResponse"
      +  }
      +]
    • removedOutput schema / properties / result / type
      Removed value: -"string"
  12. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description goes beyond by explaining auto-detection of IOC type, per-type source coverage (e.g., hash → ThreatFox only), and the presence of sources_queried and sources_unavailable fields to signal what actually ran. No contradictions detected.

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

Conciseness4/5

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

The description is longer than average but every sentence contributes new information: source coverage, alternative tools, rate limits, and return shape. It is front-loaded with the core purpose, then expands into details, making it efficiently scannable despite density.

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

Completeness5/5

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

This is a multi-source enrichment tool with no output schema to fall back on, but the description covers types, sources, failure handling (sources_unavailable), rate limits, and alternatives. It also mentions the return fields (indicator, type, threat_level, sources, summary, verdict), making it fully self-contained for an agent to select and invoke correctly.

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

Parameters5/5

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

The schema already documents the single 'indicator' parameter with examples, so the baseline is 3. The description adds significant semantic context: auto-detection, per-type source coverage, and the meaning of verdict fields, which clarifies not just the parameter format but how the tool interprets it.

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 ('Enrich Indicator of Compromise') and enumerates accepted types (IP/domain/URL/hash). It also explicitly differentiates from sibling tools by naming threat_intel and hash_lookup as alternatives, making its role clear.

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

Usage Guidelines5/5

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

The description states when to use this tool ('primary IOC triage tool when type unknown') and when not to, recommending threat_intel for domain-only and hash_lookup for richer MalwareBazaar data. It also provides rate limits (30/hr free, 500/hr Pro), giving concrete context for invocation.

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.