查找MyMCP
用于安全研究的快速并发MCP服务器发现和分析工具
  
概述
FindMyMCP是一个复杂的安全研究工具,可以使用Shodan API发现和分析公开的模型上下文协议(MCP)服务器。它采用现代Python实践构建,具有并发扫描、基于检查点的工作流和全面的服务器验证功能。
特性
- ⚡ 快速并发发现:并行运行Shodan搜索(比顺序搜索快5倍)
- 💾 检查点系统:立即保存发现的服务器,稍后验证
- 🔀 两步工作流程:单独的发现和验证阶段
- 🔍 全面发现:在10个类别中使用100多个Shodan搜索过滤器
- 🌐 多运输支持:测试HTTP和服务器发送事件(SSE)协议
- ✅ 协议验证:验证实际MCP协议合规性
- 🛠️ 工具枚举:确定可用的工具和功能
- 📊 详细报告:生成JSON、CSV和文本摘要报告
- ⚙️ 并发验证:可配置的具有速率限制的并发验证
- 🎨 丰富的终端用户界面:漂亮的进度跟踪和输出
安装
使用紫外线(推荐)
# Clone the repository
git clone https://github.com/yourusername/findmy-mcp.git
cd findmy-mcp
# Install dependencies
uv sync
# Install with dev dependencies
uv sync --extra dev使用pip
pip install -e .快速开始
1.设置您的Shodan API密钥
export MCP_SCANNER_SHODAN_API_KEY="your-api-key-here"或者创建一个 .env 文件:
MCP_SCANNER_SHODAN_API_KEY=your-api-key-here2.运行基本扫描
# Full scan with all filters
mcp-scan scan
# Scan specific category
mcp-scan scan --category core_protocol
# Scan with custom filters
mcp-scan scan --filter '"Model Context Protocol"' --filter 'mcp server'两步工作流程(推荐)
对于大型扫描,使用两步工作流程来最大限度地提高效率:
第一步:发现(快速)
# Discover servers with concurrent API calls
mcp-scan scan --discover-only
# Output: scan_results/scan_xxx_timestamp/discovered_servers.json60多个过滤器的运行时间约为20-30秒,而不是2分钟以上!
步骤2:验证(可以多次运行)
# Verify from checkpoint
mcp-scan verify scan_results/scan_xxx_timestamp/discovered_servers.json
# With custom settings (max speed)
mcp-scan verify discovered_servers.json --concurrency 100 --timeout 2.0为什么使用此工作流?
- ✅ 发现速度提高5倍 -并发Shodan API调用
- ✅ 即时检查站 -发现后立即查看结果
- ✅ 可恢复的 -中断并重新启动验证,无需重新扫描
- ✅ 先复习 -验证前检查发现的服务器
- ✅ 可重复使用的 -使用不同设置多次运行验证
命令
scan -发现和/或验证服务器
# Full scan
mcp-scan scan
# Discovery only
mcp-scan scan --discover-only
# Specific category
mcp-scan scan --category transport_sse
# Custom concurrency and timeout
mcp-scan scan --concurrency 100 --timeout 2.0verify -从检查点验证
# Basic verification
mcp-scan verify scan_results/scan_xxx/discovered_servers.json
# With custom settings (even faster)
mcp-scan verify discovered.json --concurrency 100 --timeout 2.0list-filters -显示可用的筛选器类别
mcp-scan list-filters配置
所有设置都可以通过环境变量进行配置 MCP_SCANNER_ 前缀:
MCP_SCANNER_SHODAN_API_KEY=your-key
MCP_SCANNER_MAX_RESULTS_PER_FILTER=100
MCP_SCANNER_MAX_CONCURRENT_VERIFICATIONS=10
MCP_SCANNER_VERIFICATION_TIMEOUT=10.0
MCP_SCANNER_OUTPUT_DIR=scan_results看 .env.example 所有可用选项。
配置选项
| 选项 | 默认值 | 描述 |
|---|---|---|
shodan_api_key | 必需 | Shodan API密钥 |
max_results_per_filter | 100 | 每个过滤器的最大Shodan结果 |
max_concurrent_verifications | 50 | 最大并发服务器验证次数 |
verification_timeout | 3.0 | 验证超时(秒) |
output_dir | scan_results | 结果输出目录 |
verify_ssl | true | 验证SSL证书 |
输出文件
每次扫描都会创建一个带有时间戳的目录,其中包含:
discovered_servers.json-通过Shodan(检查点)找到的所有服务器verified_servers.json-已验证的MCP服务器,包含完整详细信息verified_servers.csv-CSV格式,便于分析results.json-完整的扫描元数据summary.txt-人类可读摘要
Shodan过滤器类别
FindMyMCP在10个类别中使用100多个Shodan搜索过滤器:
| 类别 | 筛选器 | 描述 |
|---|---|---|
| 核心协议 | 8 | 直接MCP协议标记 |
| transport_sse | 5 | 服务器发送事件指示器 |
| jsonrpc_方法 | 6 | JSON-RPC方法调用 |
| 端点 | 9 | 通用MCP端点路径 |
| 框架 | 7 | 已知的MCP框架 |
| 端口_组合 | 8 | 特定端口搜索 |
| 云平台 | 6 | 云提供商部署 |
| 能力 | 5 | MCP能力标记 |
| http_headers | 4 | MCP特定的HTTP标头 |
| 安全标记 | 5 | 身份验证/授权标记 |
程序化使用
import asyncio
from pathlib import Path
from findmy_mcp import MCPScanner, ScannerConfig
async def main():
# Create configuration
config = ScannerConfig(
shodan_api_key="your-api-key",
max_results_per_filter=50,
max_concurrent_verifications=20,
)
# Create scanner
scanner = MCPScanner(config)
# Validate API key
scanner.validate_api_key()
# Load filters
scanner.load_filters()
# Discover only
result = await scanner.scan(category="core_protocol", discover_only=True)
print(f"Discovered {len(result.discovered_servers)} servers")
# Later, verify from file
discovery_file = Path("scan_results/scan_xxx/discovered_servers.json")
result = await scanner.verify_from_file(discovery_file)
print(f"Verified {len(result.verified_servers)} MCP servers")
if __name__ == "__main__":
asyncio.run(main())发展
设置
# Install with dev dependencies
uv sync --extra dev测试
# Run tests
uv run pytest
# With coverage
uv run pytest --cov=findmy_mcp --cov-report=html
# Run specific test
uv run pytest tests/test_models.py -v代码质量
# Format code
uv run ruff format .
# Lint
uv run ruff check .
# Type check
uv run mypy src建筑
基于现代Python实践构建:
- 类型安全:具有mypy严格模式的全面类型提示
- 异步优先:始终采用正确的异步/等待模式
- Pydantic模型:为所有实体验证数据模型
- 并行设计:并行Shodan搜索和URL验证
- 模块化结构:明确区分关注点
项目结构
findmy-mcp/
├── src/findmy_mcp/
│ ├── __init__.py # Package exports
│ ├── cli.py # Typer-based CLI
│ ├── config.py # Pydantic Settings
│ ├── models.py # Data models
│ ├── scanner.py # Main scanning logic
│ ├── verifier.py # MCP verification
│ └── filters.json # Shodan filters
├── tests/ # Test suite
├── examples/ # Example scripts
└── pyproject.toml # Project config法律和道德使用
⚠️ 重要:此工具用于:
- ✅ 合法的安全研究
- ✅ 授权渗透测试
- ✅ 教育目的
- ✅ 识别您拥有的配置错误的基础设施
不是为了:
- ❌ 未经授权访问系统
- ❌ 恶意活动
- ❌ 违反服务条款
- ❌ 任何非法活动
在扫描您不拥有的系统之前,请务必获得适当的授权。
贡献
欢迎投稿!请看 贡献.md 作为指导方针。
许可证
MIT许可证-请参阅 许可证 详细信息文件
支持
- 📝 报告问题:
- 💬 讨论:
- 📖 文档:此README和内联代码文档
______________________________________________________________________
内置于:Python 3.12+•uv•Typer•Rich•Pydantic•httpx•Shodan
