使用说明
mcp_scanner.rb
一个Ruby脚本,用于探测MCP服务器的域,并对其SDK、身份验证方法、传输协议、安全态势和暴露的工具进行指纹识别。
旨在为背后的研究提供动力 我们分析了1400台MCP服务器,以下是我们学到的.
已知MCP服务器域的实时列表(定期更新)可在以下网址获得 bloomberry.com/data/mcp.
需求
- Ruby 2.3+
- 无宝石--仅限stdlib(
net/http,openssl,uri,json,resolv,timeout)
用法
命令行
# Pass domains as arguments
ruby mcp_scanner.rb stripe.com cloudflare.com hubspot.com
# Read from a file
ruby mcp_scanner.rb < domains.txt
# Pipe in a list
cat domains.txt | ruby mcp_scanner.rb
作为一个图书馆
require_relative 'mcp_scanner'
# Scan a list of domains
analyzeMcp(["stripe.com", "cloudflare.com", "hubspot.com"])
# Scan a random sample of 50 from a larger list
analyzeMcp(domains, 50)
# Probe a single domain and inspect the raw result hash
result = getMcpStatus("stripe.com")
pp result['mcp']
它检测到什么
| 类别 | 详细信息 |
|---|---|
| 软件开发工具包 | FastMCP(Python)、官方TypeScript SDK、TS FastMCP、Cloudflare Workers OAuth、Stagehand/Browserbase |
| 认证 | 无身份验证、OAuth、API密钥 |
| 运输 | 流式HTTP(当前标准),SSE(已弃用) |
| 状态 | 有状态(会话ID),无状态 |
| 安全 | 开放式CORS、IP限制、速率限制、未经身份验证的工具泄漏 |
| 能力 | 工具、资源、提示、日志 |
| 工具 | 计数、名称、读写分类 |
运作原理
对于每个域,扫描仪:
- 检查一下
mcp.<domain>在DNS中解析 - 发送MCP
initialize请求/,/mcp,以及/sse - 如果init成功,则完成握手并调用
tools/list列举工具 - 如果init失败(需要身份验证),尝试冷启动
tools/list探测未经验证的工具泄漏 - 从响应中指纹识别SDK、身份验证方法、传输和安全态势
输出
扫描完所有域后,将打印摘要报告:
==================================================
MCP SCAN RESULTS
--------------------------------------------------
Domains scanned : 100
MCP detected : 42 (42.0%)
Init succeeded : 28 (66.7%)
...
--- Authentication ---
No auth : 16 (38.1%)
OAuth : 14 (33.3%)
API key : 12 (28.6%)
...
--- Top 20 Tool Names ---
1. search: 18
2. fetch: 13
3. ping: 12
...
获取域列表
最简单的入门方法是从以下网址下载已知MCP服务器域的精选列表 bloomberry.com/data/mcp,另存为 domains.txt (每行一个域),然后运行:
ruby mcp_scanner.rb < domains.txt
方法说明
- 发现基于
mcp.*子域——一个强烈的信号,表明公司正在对MCP(相对于内部或临时服务器)做出深思熟虑的承诺 - SSL证书错误被忽略(
VERIFY_NONE)因为许多MCP服务器使用自签名证书 - 执行伪子域检查以防止通配符DNS响应
- 每个域超时为15秒
- 完整的方法在 博客文章
许可证
麻省理工学院