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 ` 在DNS中解析
1. 发送MCP `initialize` 请求 `/`, `/mcp`,以及 `/sse`
1. 如果init成功,则完成握手并调用 `tools/list` 列举工具
1. 如果init失败(需要身份验证),尝试冷启动 `tools/list` 探测未经验证的工具泄漏
1. 从响应中指纹识别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](https://bloomberry.com/data/mcp/)**,另存为 `domains.txt` (每行一个域),然后运行:
ruby mcp_scanner.rb < domains.txt
______________________________________________________________________
## 方法说明
- 发现基于 `mcp.*` 子域——一个强烈的信号,表明公司正在对MCP(相对于内部或临时服务器)做出深思熟虑的承诺
- SSL证书错误被忽略(`VERIFY_NONE`)因为许多MCP服务器使用自签名证书
- 执行伪子域检查以防止通配符DNS响应
- 每个域超时为15秒
- 完整的方法在 [博客文章](https://bloomberry.com/blog/we-analyzed-1400-mcp-servers-heres-what-we-learned/)
______________________________________________________________________
## 许可证
麻省理工学院