👩💻 TDAgentTools & TDAgent 👨💻
Empowering Cybersecurity with Agentic AI
from pathlib import Path from typing import NamedTuple import gradio as gr import gradio.themes as gr_themes import markdown from tdagent.tools.get_domain_information import ( dns_enumeration_tool, extractor_of_ioc_from_threatfox_tool, geo_location_tool, scrap_subdomains_tool, ) from tdagent.tools.get_url_content import gr_make_http_request from tdagent.tools.internal_company_user_search import gr_internal_company from tdagent.tools.lookup_company_cloud_account_information import ( gr_lookup_company_cloud_account_information, ) from tdagent.tools.query_abuse_ip_db import gr_query_abuseipdb from tdagent.tools.rdap import gr_query_rdap from tdagent.tools.retrieve_from_mitre_attack import gr_get_stix_of_attack_id from tdagent.tools.send_email import gr_send_email from tdagent.tools.virus_total import gr_virus_total_url_info # from tdagent.tools.whois import gr_query_whois ## Tools to load into the application interface ## def _read_markdown_body_as_html(path: str = "README.md") -> str: with Path(path).open(encoding="utf-8") as f: # Default mode is "r" lines = f.readlines() # Skip YAML front matter if present if lines and lines[0].strip() == "---": for i in range(1, len(lines)): if lines[i].strip() == "---": lines = lines[i + 1:] # skip metadata block break markdown_body = "".join(lines).strip() return markdown.markdown(markdown_body) class ToolInfo(NamedTuple): """Gradio MCP tool info.""" name: str interface: gr.Interface TOOLS = ( ToolInfo("Make an HTTP request to a URL with specified method and parameters", gr_make_http_request), ToolInfo("Query AbuseIPDB", gr_query_abuseipdb), # Whois does not work from Spaces (port 43 blocked) # ToolInfo("Query WHOIS", gr_query_whois), ToolInfo("Query RDAP", gr_query_rdap), ToolInfo("Virus Total URL info", gr_virus_total_url_info), ToolInfo("Get IP's Location", geo_location_tool), ToolInfo("DNS Enumerator", dns_enumeration_tool), ToolInfo("Subdomain Retriever", scrap_subdomains_tool), ToolInfo("Extractor of IoCs", extractor_of_ioc_from_threatfox_tool), ToolInfo("ATT&CK STIX information", gr_get_stix_of_attack_id), ## Fake tools ToolInfo("Fake company directory", gr_internal_company), ToolInfo( "Fake company cloud accounts", gr_lookup_company_cloud_account_information, ), ToolInfo("Send email", gr_send_email), ) ## Application Interface ## custom_css = """ .main-header { background: linear-gradient(135deg, #00a388 0%, #ffae00 100%); padding: 30px; border-radius: 5px; margin-bottom: 20px; text-align: center; } """ with ( gr.Blocks( theme=gr_themes.Origin( primary_hue="teal", spacing_size="sm", font="sans-serif", ), title="TDAgent", fill_height=True, fill_width=True, css=custom_css, ) as gr_app, ): gr.HTML( """
Empowering Cybersecurity with Agentic AI