urlDNA

官方

使用 urlDNA.io 动态扫描和分析潜在恶意 URL

你可以用 urlDNA MCP 做什么?

  • 即时URL安全检查 — 使用 fast_check 快速验证URL是安全、恶意还是未评级。
  • 完整URL扫描 — 使用 new_scan 提交URL进行全面扫描,并通过 get_scan 按ID获取结果。
  • 基于CQL的威胁搜索 — 使用 search 配合AND/OR表达式,跨域名、IP、技术和恶意标志搜索扫描结果。
  • 已保存查询管理 — 使用 create_query、list_queries、update_query 和 delete_query 创建、列出、更新和删除可复用的CQL过滤器。
  • 品牌监控 — 使用 list_brands、get_brand 和 brand_scans 列出品牌、获取详情并检索关联扫描。
  • API文档查询 — 使用 search_docs 直接获取完整的urlDNA OpenAPI文档。

文档

urlDNA MCP 服务器

博客

Claude Prompt

urlDNA MCP Server 支持面向安全领域的 LLM 代理(如 OpenAI GPT、Google Gemini 和 Claude Desktop)原生使用工具,通过 API 提供与 urlDNA 威胁情报平台的直接交互接口。

该仓库通过两种传输方式暴露相同的工具集:

  • stdio 用于本地桌面集成,如 Claude Desktop。
  • streamable-http 用于托管部署,如 Cloud Run。

安装与设置

本项目使用 uv 进行快速的 Python 包管理。

前置条件

如果尚未安装 uv,请先安装:

# On macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# On Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

# Or with pip
pip install uv

快速开始

  1. 克隆并设置项目:
git clone <repository-url>
cd urlDNA-mcp-server
uv sync
  1. 本地运行 MCP 服务器(stdio 模式):
uv run python urldna_mcp/run.py
  1. 以流式 HTTP 模式运行 MCP 服务器:
uv run python urldna_mcp/server.py

托管服务器会读取以下环境变量:

  • PORT:绑定的 HTTP 端口。默认为 8080。
  • MCP_PATH:公共 MCP 端点路径。默认为 /。

开发

# Install development dependencies
uv sync --dev

# Run tests (when available)
uv run pytest

# Format code
uv run black .

# Type checking
uv run mypy .

# Lint code
uv run flake8 .

托管 MCP 服务器

urlDNA MCP 服务器已托管并可用,地址为:

https://mcp.urldna.io/

该服务器可通过流式 HTTP 访问,适用于 Cloud Run 和其他请求驱动的平台。

您可以直接将其与任何支持 MCP 规范的平台或 LLM 配合使用(例如 Claude Desktop、OpenAI GPT、Google Gemini)。


支持的工具

扫描

工具描述
fast_check立即检查 URL 是否已被扫描。返回 SAFE / MALICIOUS / UNRATED。
new_scan提交 URL 进行完整扫描并等待结果(约 30–60 秒)。
get_scan按 ID 检索完整的扫描结果。

搜索

工具描述
search使用 CQL(自定义查询语言)在域名、IP、技术、恶意标记等方面搜索扫描记录。支持 AND 和 OR 表达式以及分页(第 2 页起需要 PREMIUM)。

已保存查询

工具描述
list_queries列出已认证用户的全部已保存查询。
get_query按 ID 检索特定已保存查询及其筛选条件。
create_query使用一个或多个 CQL 筛选条件创建新的已保存查询。
update_query更新现有查询的名称和筛选条件(完全替换)。
delete_query按 ID 永久删除已保存查询。
query_scans检索与已保存查询匹配的所有扫描记录。

品牌监控

工具描述
list_brands列出可用品牌,支持按名称搜索和可见性筛选(ALL / FREE / PREMIUM / USER_BRANDS)。
get_brand按 ID 检索特定品牌的完整详情。
brand_scans获取与品牌关联的所有扫描记录。支持额外的 CQL 筛选。

API 参考

工具描述
search_docs获取完整的 urlDNA OpenAPI 和文档。

与 Claude Desktop 集成

要将 urlDNA MCP server 集成到 Claude Desktop,请更新您的 claude_desktop_config.json:

{
  "mcpServers": {
    "urlDNA": {
      "command": "uv",
      "args": [
        "--directory",
        "<YOUR_PATH>\\urldna_mcp",
        "run",
        "urldna_mcp\\run.py"
      ],
      "env": {
        "x-api-key": "<urlDNA_API_KEY>"
      }
    }
  }
}

将 <YOUR_PATH> 替换为包含此仓库的父目录,并将 <urlDNA_API_KEY> 替换为来自 https://urldna.io 的 API 密钥。

对于托管的 MCP 客户端,请将其指向 https://mcp.urldna.io/ 或您自己部署的 MCP_PATH。

配置完成后,您可以用自然语言向 Claude 发出指令,例如:

"在 urlDNA 中搜索标题类似 paypal 的恶意扫描记录"

"创建一个已保存查询,用于查找来自意大利且被标记为恶意的移动扫描记录"

"显示与 Google 品牌关联的所有扫描记录"

Claude 将自动调用正确的工具并返回来自 urlDNA 平台的结果。


将 MCP 服务器与 OpenAI GPT 配合使用

from openai import OpenAI

# Initialize OpenAI client (assumes OPENAI_API_KEY is set via environment variable)
client = OpenAI()

response = client.responses.create(
    model="gpt-3.5-turbo",  # Note: MCP tool use requires a Responses API-compatible model
    input=[
        {
            "role": "system",
            "content": [{"type": "input_text", "text": "You are a cybersecurity analyst using urlDNA."}]
        },
        {
            "role": "user",
          "content": [{"type": "input_text", "text": "Search in urlDNA for malicious scans with title like paypal or login"}]
        }
    ],
    text={"format": {"type": "text"}},
    reasoning={},
    tools=[
        {
            "type": "mcp",
            "server_label": "urlDNA",
            "server_url": "https://mcp.urldna.io/",
            "headers": {
                "x-api-key": "<URLDNA_API_KEY>"  # Replace with your urlDNA API key
            },
            "allowed_tools": [
                # --- Scanning ---
                "new_scan",       # Submit a URL for a full scan and wait for the result
                "get_scan",       # Retrieve a scan result by ID
                "fast_check",     # Lightweight instant safety check (SAFE / MALICIOUS / UNRATED)

                # --- Search ---
                "search",         # Search scans using CQL (Custom Query Language, AND/OR supported)

                # --- Saved Queries (PREMIUM) ---
                "list_queries",
                "get_query",
                "create_query",
                "update_query",
                "delete_query",
                "query_scans",

                # --- Brand Monitoring (PREMIUM) ---
                "list_brands",
                "get_brand",
                "brand_scans",

                # --- API Reference ---
                "search_docs",
            ],
            "require_approval": "never"
        }
    ],
    temperature=0.7,
    top_p=1,
    max_output_tokens=2048,
    store=True
)

print(response.output)

将 MCP 服务器与 Google Gemini 配合使用

Gemini 通过 fastmcp 连接到 urlDNA MCP 服务器,工具会自动发现,而非作为 allowed_tools 列表传递。

import os
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport
from google import genai

async def main():
    # 1. Connect FastMCP client directly to streamable-http
    transport = StreamableHttpTransport(
        "https://mcp.urldna.io/",
        headers={"x-api-key": os.getenv("URLDNA_API_KEY", "YOUR_KEY")},
    )
    client_mcp = Client(transport)

    async with client_mcp:
        ai = genai.Client(vertexai=True, project=os.getenv("GOOGLE_CLOUD_PROJECT", "YOUR_PROJECT_ID"))
        response = await ai.aio.models.generate_content(
            model="gemini-2.5-flash",
            contents="Search in urlDNA for malicious scans with title like paypal",
            # Pass the live MCP session (not just tool declarations) so Gemini
            # can automatically call tools and receive their results.
            config=genai.types.GenerateContentConfig(tools=[client_mcp.session]),
        )

        print(response.text)


if __name__ == "__main__":
    asyncio.run(main())

容器部署

使用 Docker 构建并运行:

# Build the container
docker build -t urldna-mcp-server .

# Run the server
docker run -p 8080:8080 -e x-api-key=<URLDNA_API_KEY> urldna-mcp-server

# Optional: override the public MCP path if you do not want /
docker run -p 8080:8080 -e MCP_PATH=/custom-path -e x-api-key=<URLDNA_API_KEY> urldna-mcp-server

# Cloud Run example
gcloud run deploy urldna-mcp-server \
  --source . \
  --allow-unauthenticated \
  --set-env-vars MCP_PATH=/

搜索语法

search 和 brand_scans 工具会将提供的 CQL 直接转发到 urlDNA API。您可以使用 AND 或 OR 组合条件。

示例:

malicious = true AND technology LIKE wordpress
domain = google.com OR domain = youtube.com
(domain = paypal.com OR title LIKE paypal) AND country_code = IT

贡献指南

  1. Fork 本仓库
  2. 创建功能分支:git checkout -b feature-name
  3. 安装开发依赖:uv sync --dev
  4. 进行修改并确保测试通过
  5. 格式化代码:uv run black .
  6. 提交拉取请求

联系与支持

如需支持或 API 访问,请访问 https://urldna.io 或发送邮件至 urldna@urldna.io。