MCP服务器扫描工具

一个用于探测MCP服务器并识别其SDK、认证方法、传输协议、安全状态和暴露工具的Ruby脚本。

  • by HenleyChiu
  • Ruby
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 HenleyChiu/companies-that-use-mcp

使用说明

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限制、速率限制、未经身份验证的工具泄漏
能力 工具、资源、提示、日志
工具 计数、名称、读写分类

运作原理

对于每个域,扫描仪:

  1. 检查一下 mcp.<domain> 在DNS中解析
  2. 发送MCP initialize 请求 /, /mcp,以及 /sse
  3. 如果init成功,则完成握手并调用 tools/list 列举工具
  4. 如果init失败(需要身份验证),尝试冷启动 tools/list 探测未经验证的工具泄漏
  5. 从响应中指纹识别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秒
  • 完整的方法在 博客文章

许可证

麻省理工学院