Skip to main content
Glama
urlhaus-mcp-server

urlhaus-mcp-server

URLhaus MCP Server

npm version License: MIT Node.js TypeScript

A comprehensive Model Context Protocol (MCP) server that provides access to URLhaus, a project from abuse.ch that collects and shares malicious URLs used for malware distribution. This server enables AI agents to perform threat intelligence research and cybersecurity analysis through the URLhaus database.

Features

This MCP server provides the following tools for querying URLhaus data:

URL Analysis Tools

  • get_recent_urls: Get the most recent malicious URLs from URLhaus

  • lookup_url: Get detailed information about a specific URL

  • search_urls: Search for URLs by various criteria (host, URL, tag, or signature)

Host/Domain Analysis Tools

  • lookup_host: Get information about URLs hosted on a specific host/domain

Malware Analysis Tools

  • lookup_payload: Get information about a malware payload by its hash

  • get_payloads: Get recent malware payloads from URLhaus

  • get_urls_by_tag: Get URLs associated with a specific malware tag/family

  • get_urls_by_signature: Get URLs associated with a specific malware signature

Related MCP server: virustotal-mcp-server

Installation

From GitHub

  1. Clone the repository:

    git clone https://github.com/Cyreslab-AI/urlhaus-mcp-server.git
    cd urlhaus-mcp-server
  2. Install dependencies:

    npm install
  3. Build the server:

    npm run build

From npm (Coming Soon)

npm install -g urlhaus-mcp-server

Configuration

Auth-Key (required)

As of abuse.ch's "Community First" changes (effective 2025-06-30), every request to the URLhaus API must carry an Auth-Key HTTP header. Without it, the API rejects requests. Get a free key at auth.abuse.ch, then set it as the URLHAUS_AUTH_KEY environment variable. This server will not start without it.

Add the server to your MCP settings configuration:

{
  "mcpServers": {
    "urlhaus": {
      "command": "node",
      "args": ["/path/to/urlhaus-mcp-server/build/index.js"],
      "env": {
        "URLHAUS_AUTH_KEY": "your-auth-key-here"
      }
    }
  }
}

Usage Examples

Get Recent Malicious URLs

{
  "tool": "get_recent_urls",
  "arguments": {
    "limit": 50
  }
}

Look Up a Specific URL

{
  "tool": "lookup_url",
  "arguments": {
    "url": "https://suspicious-domain.com/malware.exe"
  }
}

Search for URLs by Host

{
  "tool": "search_urls",
  "arguments": {
    "search_term": "malicious-domain.com",
    "limit": 100
  }
}

Get URLs by Malware Family

{
  "tool": "get_urls_by_tag",
  "arguments": {
    "tag": "emotet",
    "limit": 50
  }
}

Look Up Malware Payload

{
  "tool": "lookup_payload",
  "arguments": {
    "hash": "d41d8cd98f00b204e9800998ecf8427e"
  }
}

API Rate Limits

URLhaus has rate limits to prevent abuse. If you encounter rate limiting, wait before making additional requests.

Data Format

All responses include:

  • query_status: Status of the API query ("ok" or error message)

  • summary: Human-readable summary of results

  • Data specific to the query type (URLs, payloads, etc.)

About URLhaus

URLhaus is operated by abuse.ch and provides:

  • Real-time feed of malicious URLs

  • Information about malware payloads

  • Integration with various threat intelligence platforms

  • Free access to security researchers and defenders

For more information, visit: https://urlhaus.abuse.ch/

Development

To run in development mode:

npm run watch

To inspect the server:

npm run inspector

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

Support

If you encounter any issues or have questions, please open an issue on GitHub.

Available Tools

7 tools
get_payloadsA
Read-only

Get recent malware payloads from URLhaus

Inputs: limit. Returns: summary, payloads, query_status, payloads_count

get_recent_urlsA
Read-only

Get the most recent malicious URLs from URLhaus (up to 1000 entries)

Inputs: limit. Returns: urls, summary, urls_count, query_status

get_urls_by_signatureA
Read-only

Get URLs associated with a specific malware signature

Inputs: signature (required), limit. Returns: urls, summary, signature, urls_count, +1 more

get_urls_by_tagA
Read-only

Get URLs associated with a specific malware tag/family

Inputs: tag (required), limit. Returns: tag, urls, summary, urls_count, +1 more

lookup_hostA
Read-only

Get information about URLs hosted on a specific host/domain

Inputs: host (required). Returns: summary, host_info, urls_count, query_status

lookup_payloadA
Read-only

Get information about a malware payload by its hash

Inputs: hash (required). Returns: summary, payload_info, query_status

lookup_urlA
Read-only

Get detailed information about a specific URL

Inputs: url (required). Returns: summary, url_info, query_status

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 7 tools

    Disambiguation4/5

    Each tool targets a distinct resource or query mode: URL, host, payload, tag, and signature are clearly separated. The only mild ambiguity is between get_urls_by_tag and get_urls_by_signature, since both return filtered URL lists, but their descriptions clarify the filter type.

    Naming Consistency4/5

    Mostly follows a pattern where 'lookup_' means retrieve by a specific identifier/key and 'get_' means retrieve list-style data. However, get_urls_by_tag and get_urls_by_signature are also keyed queries but use 'get_' rather than 'lookup_', creating a minor inconsistency.

    Tool Count5/5

    Seven tools is well-scoped for a URLhaus threat intel server. Each tool maps to a distinct endpoint or query type, and none feels redundant or out of place.

    Completeness4/5

    The set covers the core read-only URLhaus workflows: recent URLs, recent payloads, URL/host/payload lookups, and URL filtering by tag or signature. A minor gap is the lack of payloads-by-tag or payloads-by-signature queries, but most main investigation paths are covered.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      A MCP server for querying the VirusTotal API. This server provides tools for scanning URLs, analyzing file hashes, and retrieving IP address reports.
      11
      998 npm
      155
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      MCP server for security analysis using VirusTotal API, enabling AI assistants to analyze URLs, files, IP addresses, and domains with automatic relationship fetching.
      8
      1
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      MCP server that checks URLs against the URLhaus malware database to identify malicious URLs.
      -
    • A
      license
      Not graded
      quality
      C
      maintenance
      Wraps abuse.ch URLhaus malware URL database (free, no auth) – enables querying malware URLs via natural language through Pipeworx MCP gateway.
      285 npm
      MIT