MCP服务器扫描工具

一款零依赖的CLI工具,用于发现未受保护的MCP服务器,适用于安全团队和开发者识别漏洞端点。

  • by contextware
  • JavaScript
  • 本地部署
  • 更新于
在 GitHub 查看 contextware/mcp-scan

使用说明

mcp扫描

用于发现未受保护的零依赖CLI工具 MCP(模型上下文协议) 服务器。

为什么这个工具存在

MCP服务器允许AI助手与本地工具、文件和服务进行交互。当这些服务器在没有身份验证的情况下暴露时,网络上的任何人都可以连接到它们,并且可能:

  • 读取敏感文件
  • 执行命令
  • 访问私有API
  • 滤出数据

此工具可帮助安全团队和开发人员在攻击者之前识别易受攻击的MCP端点。

特性

  • 网络扫描 -探测运行MCP服务器的网络端点
  • 配置扫描 -检查本地AI工具配置文件中未受保护的服务器定义
  • 零依赖 -仅使用Node.js内置模块
  • 完全透明 -查看要检查的文件 show-paths
  • CI/CD就绪 -用于自动化的退出代码和JSON输出

安装

npm install -g @contextware/mcp-scan

或者直接使用npx运行:

npx @contextware/mcp-scan configs

安装开发

如果你想从源代码贡献或运行该工具:

  1. 克隆存储库:

    git clone https://github.com/contextware/mcp-scan.git
    cd mcp-scan
    
  2. 安装依赖项: 由于此项目没有运行时依赖关系,因此只需设置包环境。

    npm install
    
  3. 在本地运行该工具:

    # Using node directly
    node bin/mcp-scan.js configs
    
    # Using npm start
    npm start -- configs
    
  4. 地方发展链接: 要使用 mcp-scan 全局命令,同时指向本地源代码:

    npm link
    mcp-scan --version
    

快速开始

# Check your local AI tool configs for unprotected MCP servers
mcp-scan configs
 
# Scan localhost for running MCP servers
mcp-scan localhost
 
# Run both scans
mcp-scan all
 
# See exactly which config files will be checked
mcp-scan show-paths

命令

命令 描述
mcp-scan network [target] 扫描网络以查找正在运行的MCP服务器(默认)
mcp-scan configs 扫描本地AI工具配置文件
mcp-scan all [target] 同时运行网络和配置扫描
mcp-scan show-paths 列出将被检查的所有配置文件路径

网络扫描目标

目标 描述
localhost 仅扫描本地主机(最快)
local 扫描本地网络(/24范围)
192.168.1.100 扫描单个IP
192.168.1.0/24 扫描CIDR范围(最大/24)
example.com 扫描域+常用子域
*.example.com 扫描域的子域

选项

选项 描述
-p, --ports <list> 要扫描的端口(逗号分隔)。默认值:30003001301301180008080888890009090
-t, --timeout <ms> 请求超时(毫秒)。默认值:5000
--https 使用HTTPS而不是HTTP
--include-local 在配置扫描中包括本地(stdio)服务器
-j, --json 以JSON格式输出结果
-q, --quiet 抑制横幅和进度输出
-h, --help 显示帮助消息
-v, --version 显示版本号

已检查配置文件

配置扫描检查这些AI工具:

工具 配置位置
克劳德桌面 ~/.config/claude/, ~/Library/Application Support/Claude/
克莱恩 ~/.cline/, ~/.config/cline/
Roo代码 ~/.roo-cline/, ~/.roo/
Continue.dev ~/.continue/, ~/.config/continue/
光标 ~/.cursor/, ~/Library/Application Support/Cursor/
风帆冲浪 ~/.windsurf/, ~/.codeium/
Zed ~/.config/zed/
通用MCP ~/.mcp/, ~/.config/mcp/, mcp.json

跑 mcp-scan show-paths 查看系统的确切路径。

输出示例

配置扫描

═══════════════════════════════════════════════════════════════
CONFIG FILE SCAN
═══════════════════════════════════════════════════════════════
 
Checking local AI tool configuration files...
 
Config files found:
  ✓ Claude Desktop: /home/user/.config/claude/claude_desktop_config.json
      2 remote MCP server(s) configured
 
Remote MCP servers configured: 2
 
 ⚠️  1 SERVER(S) WITHOUT AUTH CONFIGURED
 
These MCP server configurations do not appear to have authentication.
If these servers are network-accessible, they may be vulnerable.
 
[1] my-remote-server
    URL: http://192.168.1.50:3000/sse
    Type: SSE
    Auth: ⚠️  NO AUTH
    Tool: Claude Desktop
    Config: /home/user/.config/claude/claude_desktop_config.json
 
 ✓ 1 SERVER(S) WITH AUTH
 
[1] secure-server
    URL: https://api.example.com/mcp
    Type: HTTP
    Auth: 🔒 Auth configured
    Auth indicators: env.API_KEY, auth headers configured
    Tool: Claude Desktop
    Config: /home/user/.config/claude/claude_desktop_config.json

网络扫描

═══════════════════════════════════════════════════════════════
NETWORK SCAN
═══════════════════════════════════════════════════════════════
 
Target: localhost
Ports: 3000, 3001, 3010, 3011, 8000, 8080, 8888, 9000, 9090
Timeout: 5000ms
Protocol: HTTP
 
Hosts scanned: 2
Scan duration: 1.23s
MCP servers found: 1
 
 ⚠️  1 UNPROTECTED SERVER(S) FOUND
 
[1] http://localhost:3000/sse
    Type: SSE
    Auth: ⚠️  UNPROTECTED

退出代码

代码 含义
0 未找到未受保护的服务器
1 找到未受保护的服务器
2 扫描时出错

用于CI/CD管道:

mcp-scan all || echo "Security issue found!"

透明度承诺

该工具旨在让安全专业人员完全可审计:

这个工具做什么

  • ✅ 发送HTTP请求以检测MCP服务器端点
  • ✅ 读取本地配置文件以查找MCP服务器定义
  • ✅ 报告服务器/配置是否缺少身份验证
  • ✅ 准确显示要检查的文件(show-paths)

这个工具不做什么

  • ❌ 不修改任何文件 -只读操作
  • ❌ 不执行命令 -从不运行配置中的命令
  • ❌ 不向外部发送数据 -没有遥测,没有回家的电话
  • ❌ 不利用漏洞 -仅检测
  • ❌ 不读秘密 -仅检查是否存在auth-config
  • ❌ 不绕过身份验证 -报告身份验证状态,不会绕过它

可审计性

  • 零运行时依赖关系 -仅使用Node.js内置模块
  • 约500行代码 -足够小,可以完全审查
  • MIT许可证 -完全开源

跑 mcp-scan show-paths --json 以获取将被检查的所有文件路径的机器可读列表。

身份检测的工作原理

配置扫描程序会查找 存在 与身份验证相关的设置,而不是它们的值:

检测为“具有身份验证”:

  • 具有与身份验证相关名称的环境变量(API_KEY, TOKEN, SECRET等等)
  • auth 或 authentication 配置块
  • 具有与身份验证相关名称的标头(Authorization, X-API-Key等等)
  • token, apiKey, bearer 领域

未检测到:

  • 身份验证值是否实际有效
  • 服务器是否实际执行身份验证

此工具为您提供了安全审查的起点,而不是保证。

保护您的MCP服务器

如果此工具发现未受保护的服务器:

1.向配置添加身份验证

{
  "mcpServers": {
    "my-server": {
      "url": "http://example.com:3000/sse",
      "headers": {
        "Authorization": "Bearer ${MCP_AUTH_TOKEN}"
      }
    }
  }
}

2.使用环境变量

{
  "mcpServers": {
    "my-server": {
      "command": "node",
      "args": ["server.js"],
      "env": {
        "API_KEY": "${MY_SECRET_KEY}"
      }
    }
  }
}

3.对于网络服务器

# Bind to localhost only
server.listen({ host: '127.0.0.1', port: 3000 });
 
# Or use a reverse proxy with auth
# nginx, Traefik, Caddy, etc.

4.防火墙规则

# Only allow localhost
iptables -A INPUT -p tcp --dport 3000 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 3000 -j DROP

项目结构

mcp-scan/
├── .github/
│   └── workflows/
│       ├── ci.yml
│       └── npm-publish.yml
├── bin/
│   └── mcp-scan.js
├── src/
│   ├── config-scanner.js
│   └── scanner.js
├── test/
│   └── scanner.test.js
├── .gitignore
├── LICENSE
├── README.md
└── package.json

贡献

欢迎投稿!拜托:

  1. 克隆该仓库
  2. 创建要素分支
  3. 进行更改
  4. 提交拉取请求

在添加对新AI工具的支持时,请将条目添加到 CONFIG_LOCATIONS 在 src/config-scanner.js.

道德使用

此工具用于:

  • 安全专业人员审核自己的网络
  • 开发人员检查他们的MCP服务器配置
  • DevOps团队验证部署安全

仅扫描您拥有或具有明确测试权限的网络和系统。

未经授权的网络扫描可能违反法律法规。

许可证

MIT许可证-请参阅 许可证 文件。

相关