使用说明
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
安装开发
如果你想从源代码贡献或运行该工具:
-
克隆存储库:
git clone https://github.com/contextware/mcp-scan.git cd mcp-scan -
安装依赖项: 由于此项目没有运行时依赖关系,因此只需设置包环境。
npm install -
在本地运行该工具:
# Using node directly node bin/mcp-scan.js configs # Using npm start npm start -- configs -
地方发展链接: 要使用
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
贡献
欢迎投稿!拜托:
- 克隆该仓库
- 创建要素分支
- 进行更改
- 提交拉取请求
在添加对新AI工具的支持时,请将条目添加到 CONFIG_LOCATIONS 在 src/config-scanner.js.
道德使用
此工具用于:
- 安全专业人员审核自己的网络
- 开发人员检查他们的MCP服务器配置
- DevOps团队验证部署安全
仅扫描您拥有或具有明确测试权限的网络和系统。
未经授权的网络扫描可能违反法律法规。
许可证
MIT许可证-请参阅 许可证 文件。
