Skip to main content
Glama
SlanyCukr

Bug Bounty MCP Server

by SlanyCukr

bugbounty_osint_workflow

Generate OSINT gathering workflows for bug bounty hunting by automating reconnaissance processes to collect intelligence on target domains for security assessments.

Instructions

Create OSINT gathering workflow for bug bounty hunting.

Args: domain: Target domain

Returns: OSINT gathering workflow

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
domainYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • MCP tool handler function that implements the bugbounty_osint_workflow tool by proxying the request to the REST API backend.
    def bugbounty_osint_workflow(domain: str) -> dict[str, Any]:
        """Create OSINT gathering workflow for bug bounty hunting.
    
        Args:
            domain: Target domain
    
        Returns:
            OSINT gathering workflow
        """
        data = {"domain": domain}
    
        logger.info(f"🕵️ Creating OSINT workflow for {domain}")
        result = api_client.safe_post("api/bugbounty/osint-workflow", data)
    
        if result.get("success"):
            logger.info(f"✅ OSINT workflow created for {domain}")
        else:
            logger.error(f"❌ Failed to create OSINT workflow for {domain}")
    
        return result
  • Backend REST API handler for the /api/bugbounty/osint-workflow endpoint that processes the request and delegates to the workflow manager.
    @workflow()
    def create_osint_workflow():
        """Create OSINT gathering workflow."""
        # Import here to avoid circular imports
        from src.rest_api_server.managers import BugBountyTarget, bugbounty_manager
    
        data = request.get_json()
    
        domain = data["domain"]
    
        logger.info(f"Creating OSINT workflow for {domain}")
    
        # Create bug bounty target
        target = BugBountyTarget(domain=domain)
    
        # Generate OSINT workflow
        workflow = bugbounty_manager.create_osint_workflow(target)
    
        logger.info(f"OSINT workflow created for {domain}")
    
        return workflow
  • Core helper function in BugBountyWorkflowManager that generates the detailed OSINT workflow structure with multiple phases, tools, and estimated times.
    def create_osint_workflow(self, target: BugBountyTarget) -> dict[str, Any]:
        """Create OSINT (Open Source Intelligence) gathering workflow."""
        workflow = {
            "target": target.domain,
            "osint_phases": [],
            "estimated_time": 0,
            "data_sources": 0,
        }
    
        # Phase 1: Domain Intelligence
        domain_intel_phase = {
            "name": "domain_intelligence",
            "description": "Gather domain registration and ownership information",
            "tools": [
                {"tool": "whois", "params": {"domain": target.domain}},
                {"tool": "dnsenum", "params": {"domain": target.domain}},
                {"tool": "fierce", "params": {"domain": target.domain}},
            ],
            "expected_outputs": ["whois.txt", "dns_records.txt", "subdomains.txt"],
            "estimated_time": 120,
        }
        workflow["osint_phases"].append(domain_intel_phase)
    
        # Phase 2: Social Media & Web Presence
        social_phase = {
            "name": "social_intelligence",
            "description": "Gather social media and web presence intelligence",
            "tools": [
                {
                    "tool": "theharvester",
                    "params": {"domain": target.domain, "sources": "all"},
                },
                {
                    "tool": "search_engines",
                    "params": {"query": f"site:{target.domain}"},
                },
            ],
            "expected_outputs": [
                "emails.txt",
                "social_profiles.txt",
                "web_mentions.txt",
            ],
            "estimated_time": 180,
        }
        workflow["osint_phases"].append(social_phase)
    
        # Phase 3: Technology Stack Analysis
        tech_stack_phase = {
            "name": "technology_analysis",
            "description": "Identify technologies, frameworks, and infrastructure",
            "tools": [
                {"tool": "wappalyzer", "params": {"url": f"https://{target.domain}"}},
                {"tool": "builtwith", "params": {"domain": target.domain}},
                {"tool": "httpx", "params": {"tech_detect": True}},
            ],
            "expected_outputs": [
                "technologies.json",
                "frameworks.txt",
                "infrastructure.txt",
            ],
            "estimated_time": 90,
        }
        workflow["osint_phases"].append(tech_stack_phase)
    
        # Phase 4: Historical Data Analysis
        historical_phase = {
            "name": "historical_analysis",
            "description": "Analyze historical data and archived content",
            "tools": [
                {"tool": "waybackurls", "params": {"domain": target.domain}},
                {
                    "tool": "gau",
                    "params": {
                        "domain": target.domain,
                        "blacklist": (
                            "jpg,jpeg,gif,css,tif,tiff,png,ttf,woff,woff2,ico,pdf,svg,txt"
                        ),
                    },
                },
            ],
            "expected_outputs": ["historical_urls.txt", "archived_content.txt"],
            "estimated_time": 150,
        }
        workflow["osint_phases"].append(historical_phase)
    
        # Calculate totals
        workflow["estimated_time"] = sum(
            phase["estimated_time"] for phase in workflow["osint_phases"]
        )
        workflow["data_sources"] = sum(
            len(phase["tools"]) for phase in workflow["osint_phases"]
        )
    
        return workflow
  • Dataclass defining the schema/structure for BugBountyTarget used in workflow generation, including domain and other parameters.
    @dataclass
    class BugBountyTarget:
        """Bug bounty target information."""
    
        domain: str
        scope: list[str] = field(default_factory=list)
        out_of_scope: list[str] = field(default_factory=list)
        program_type: str = "web"  # web, api, mobile, iot
        priority_vulns: list[str] = field(
            default_factory=lambda: ["rce", "sqli", "xss", "idor", "ssrf"]
        )
        bounty_range: str = "unknown"
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool creates a workflow, implying a generative or planning operation, but doesn't describe what the workflow entails, whether it's executable, if it requires specific inputs beyond the domain, or any limitations (e.g., rate limits, authentication needs). This leaves significant gaps in understanding the tool's behavior.

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

Conciseness3/5

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

The description is brief but inefficiently structured. It front-loads the purpose but includes redundant sections ('Args:' and 'Returns:') that repeat schema information without adding value. The sentences are clear, but the overall structure could be more streamlined by integrating parameter and return details contextually.

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

Completeness3/5

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

Given the tool's complexity (creating a workflow for bug bounty OSINT), no annotations, and an output schema (which should cover return values), the description is minimally adequate. It states the purpose and parameters but lacks details on behavioral traits, usage context, and deeper parameter semantics, leaving gaps that could hinder effective tool selection and invocation.

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 schema description coverage is 0%, with one parameter ('domain') documented only by its title and type in the schema. The description adds minimal semantics by listing 'domain: Target domain' under 'Args,' but this merely restates the schema's title without explaining format (e.g., should it include protocol like 'example.com'), scope, or constraints. Given the low coverage, the description doesn't adequately compensate, resulting in a baseline score.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Create OSINT gathering workflow for bug bounty hunting.' This specifies the action (create), resource (OSINT gathering workflow), and context (bug bounty hunting). However, it doesn't explicitly differentiate from sibling tools like 'bugbounty_reconnaissance_workflow' or 'bugbounty_comprehensive_assessment,' which likely have overlapping domains.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With many sibling tools (e.g., 'bugbounty_reconnaissance_workflow,' 'analyze_target'), there's no indication of specific scenarios, prerequisites, or exclusions for this OSINT workflow creation tool.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SlanyCukr/bugbounty-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server