🔍 MCP服务器监控器
一个功能强大的控制台应用程序,用于扫描和监控 模型上下文协议(MCP) 本地计算机和网络上的服务器。MCP服务器监视器提供实时发现、状态监控以及您环境中所有可用MCP服务器的详细信息。
🎯 什么是MCP?
这个 模型上下文协议(MCP) 是一个用于AI模型交互和上下文管理的标准化协议。MCP服务器为AI模型提供以下访问权限:
- 外部数据源和API(应用程序编程接口)
- 任务执行的工具和功能
- 提供上下文信息以获得更佳回复
- 与各种服务和平台的集成
这款监控工具可帮助您发现并追踪开发环境中的所有MCP服务器。
✨ 特点
- 🖥️ 本地进程扫描检测作为本地进程运行的MCP服务器
- 🔍(放大镜,表示查看、搜索或调查) 智能发现查找所有MCP命名的进程以及所有在端口上监听的Node.js服务器
- 🌐(这个符号本身没有直接对应的中文翻译,它通常代表“网络”或“互联网”的意象,但在这里若作为独立符号翻译,可理解为“网络/互联网”的象征) 网络发现扫描您的本地网络以查找远程MCP服务器
- 📊 表格 美观的控制台输出带有彩色状态指示器的格式化表格
- ⚡(闪电符号,无直接对应中文含义,可理解为“闪电”或在特定语境下表示速度、能量等) 快速且高效可配置超时时间的并行扫描
- 🔄 旋转(循环、重复) 持续监控每30秒自动刷新,终端输出清晰
- 📋(清单/列表) 配置文件支持从通用配置位置读取MCP服务器配置
- 🔌(电源插头) 协议检测识别基于HTTP、HTTPS、WebSocket和TCP的MCP服务器
- 📈(上升趋势的折线图) 实时状态显示在线/离线状态以及最后在线时间戳
- 🎯(目标) 能力检测显示服务器功能和版本
- 🔔(铃铛图标,常用于表示提醒、注意或开始等) 更改通知当服务器上线或离线时发出警报
🚀 快速入门
先决条件
- Node.js(v14或更高版本)
- TypeScript
- npm 或 yarn
安装
- 克隆或导航到项目目录:
cd /Users/michaelweinheimer/projects/mcpServerMonitor/mcpServerMonitor- 安装依赖项:
npm install- 构建项目(可选):
npm run build使用
运行MCP服务器监视器:
npm start对于支持自动重载的开发:
npm run dev📋 它的工作原理
MCP服务器监视器使用一种 双策略扫描方法 确保服务器完全发现:
1. 本地进程扫描
策略A:MCP命名流程发现
- 搜索命令行中包含“mcp”或“model-context-protocol”的正在运行的进程
- 用途
ps列出所有与MCP相关的关键词对应的过程和过滤器 - 提取端口信息使用
lsof带有针对PID的特定过滤功能 - 通过名称监控活跃的MCP服务器实例
策略B:所有Node.js服务器发现
- 发现所有监听TCP端口的Node.js进程
- 用途
lsof -iTCP:LISTEN寻找听力过程 - 捕获那些名称中可能不包含“mcp”的通用 Node.js 服务器
- 确保不遗漏任何服务器,无论其命名规范如何
端口检测:
- 用途
lsof -nP -iTCP -sTCP:LISTEN用于准确的端口检测 - 通过特定进程ID(PID)过滤结果以避免误报
- 提取实际的监听端口,而非继承的文件描述符
- 通过连接测试验证服务器可用性
2. 配置文件发现
扫描常见的配置位置:
~/.mcp/- 用户特定的MCP配置目录~/.config/mcp/- XDG标准配置位置/etc/mcp/- 全系统范围的MCP配置./mcp-servers.json- 项目特定配置
3. 网络扫描
- 扫描指定的IP范围(默认:
192.168.1.0/24) - 测试常见的MCP端口(3000、3001、8000、8080、8888、9000)
- 尝试通过HTTP端点识别MCP服务器:
- /mcp - MCP特异性终点 - /health - 健康检查端点 - /status - 状态端点 - / - 带有MCP指标的根端点
4. 持续监测
- 每30秒自动扫描一次
- 每次扫描前清除终端,以确保输出干净
- 追踪服务器状态变化(在线/离线)
- 当服务器出现或消失时提供通知
- 显示每次迭代的扫描次数和时间戳
🎛️ 配置
基本配置
你可以通过修改选项来自定义扫描器的行为 src/main.ts:
const scanner = new MCPScanner({
includeLocalProcesses: true, // Scan local processes
includeNetworkScan: true, // Scan network
networkRange: '192.168.1.0/24', // IP range to scan
portRange: { start: 3000, end: 8080 }, // Port range
timeout: 3000 // Connection timeout (ms)
});扫描间隔
要更改扫描频率,请修改 SCAN_INTERVAL 在……中保持不变 src/main.ts:
const SCAN_INTERVAL = 30; // Seconds between scans常见配置场景
快速本地开发:
const scanner = new MCPScanner({
includeLocalProcesses: true,
includeNetworkScan: false, // Disable network scan for speed
timeout: 1000
});
const SCAN_INTERVAL = 10; // Quick 10-second scans全面网络发现:
const scanner = new MCPScanner({
includeLocalProcesses: true,
includeNetworkScan: true,
networkRange: '192.168.1.0/24',
portRange: { start: 3000, end: 9000 },
timeout: 5000
});
const SCAN_INTERVAL = 60; // Thorough 60-second scans生产监控:
const scanner = new MCPScanner({
includeLocalProcesses: true,
includeNetworkScan: true,
networkRange: '10.0.0.0/16', // Enterprise network
portRange: { start: 8000, end: 8100 },
timeout: 2000
});
const SCAN_INTERVAL = 30; // Balanced 30-second scans📁 项目结构
mcpServerMonitor/
├── src/
│ ├── main.ts # Application entry point
│ ├── mcpScanner.ts # Core scanning logic
│ ├── serverLister.ts # Console output formatting
│ └── types/
│ └── index.ts # TypeScript type definitions
├── package.json # npm configuration
├── tsconfig.json # TypeScript configuration
└── README.md # This file📊 输出示例
🚀 MCP Server Monitor v1.0.0
🔍 Starting MCP Server scan...
🔍 Scanning local processes...
🌐 Scanning network for MCP servers...
✅ Scan completed. Found 3 MCP servers.
🔍 MCP Server Monitor Results
✅ Found 3 MCP server(s):
Online: 2
Offline: 1
┌─────────────────────────┬──────────────────┬────────┬────────────┬──────────┬────────────┬────────────────────┐
│ Name │ Address │ Port │ Protocol │ Status │ Last Seen │ Capabilities │
├─────────────────────────┼──────────────────┼────────┼────────────┼──────────┼────────────┼────────────────────┤
│ Local MCP Process (1234)│ localhost │ 3000 │ HTTP │ ONLINE │ Just now │ local │
├─────────────────────────┼──────────────────┼────────┼────────────┼──────────┼────────────┼────────────────────┤
│ MCP Server (192.168.1.5)│ 192.168.1.5 │ 8080 │ HTTP │ ONLINE │ Just now │ remote, api │
├─────────────────────────┼──────────────────┼────────┼────────────┼──────────┼────────────┼────────────────────┤
│ Production MCP │ 192.168.1.10 │ 9000 │ HTTPS │ OFFLINE │ 5m ago │ production │
└─────────────────────────┴──────────────────┴────────┴────────────┴──────────┴────────────┴────────────────────┘
✅ Monitoring 2 active MCP server(s)
Protocols detected: http, https🛠️ 开发
TypeScript 编译
将TypeScript编译为JavaScript:
npm run build编译后的文件将位于 dist/ 目录。
观看模式
对于需要自动重新编译的开发:
npm run dev最佳实践
为了最佳性能
- 仅从本地扫描开始 在开发过程中以获取即时结果
- 启用网络扫描 只有在你需要发现远程服务器时
- 调整扫描间隔 根据您的需求:
- 开发:10-15秒快速反馈 - 生产:30-60秒以减轻系统负载
- 使用适当的端口范围 以避免扫描不必要的端口
- 监控输出 以便快速获取变更通知,及时发现并解决问题
安全考量
- 网络扫描可能会在企业网络中触发安全警报
- 在扫描不属于你的网络之前,务必获得许可
- 扫描仪执行只读操作,不会修改任何服务器
- 考虑使用防火墙规则来限制可以被扫描的系统
性能优化技巧
- 仅本地模式 比网络扫描快得多
- 较小的网络范围(
/28或者/29) 扫描速度比……快/24 - 端口范围缩小可按比例减少扫描时间
- 较低的超时值(1000-2000毫秒)可以加快扫描速度,但可能会遗漏响应较慢的服务器
🔧 故障排除
未找到服务器?
- 检查MCP服务器是否正在运行:
# Check for Node.js processes
ps aux | grep node
# Check for listening ports
lsof -iTCP -sTCP:LISTEN | grep node- 验证服务器的可访问性:
# Test if server responds
curl http://localhost:3000
# Check network connectivity
ping 192.168.1.5- 防火墙设置确保您的防火墙允许扫描器访问相关端口
# macOS: Check firewall status
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate- 网络范围验证
networkRange设置与您的网络配置相匹配
# Check your IP address
ifconfig | grep "inet "- 端口范围调整
portRange如果你的MCP服务器使用不同的端口
- 超时提高/增加
timeout如果服务器响应缓慢时的值
权限问题?
在 macOS/Linux 系统上,进行网络扫描可能需要提升的权限:
sudo npm start若需无需sudo权限的持续使用,请考虑使用 authbind 在Linux上:
sudo apt-get install authbind
authbind npm start同一端口上的多个服务器?
这是一个已经修复的漏洞!现在扫描仪能正确使用 lsof 使用PID过滤以确保每个进程显示其实际监听的端口。如果您仍然看到此问题:
- 检查您是否正在运行旧版本
- 验证以确认
lsof已安装:which lsof - 跑
lsof -nP -iTCP -sTCP:LISTEN手动查看实际端口分配
服务器没有更新吗?
- 检查扫描间隔不要太长
- 验证服务器是否确实在响应(使用
curl) - 在连续扫描输出中查找错误信息
- 重启显示器以清除任何缓存状态
📝 服务器配置格式
如果您想手动配置MCP服务器,请在以下位置之一创建一个JSON文件:
~/.mcp/servers.json~/.config/mcp/servers.json/etc/mcp/servers.json./mcp-servers.json
示例格式:
{
"servers": [
{
"name": "My MCP Server",
"address": "localhost",
"port": 3000,
"url": "http://localhost:3000",
"capabilities": ["tools", "prompts", "resources"]
}
]
}🤝 贡献(或:参与贡献)
欢迎贡献!请随时提交拉取请求。对于重大更改,请先打开一个问题进行讨论,说明您希望做出的更改。
- 为仓库创建分支(或:克隆仓库)
- 创建你的特性分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'Add some AmazingFeature') - 推送到分支(
git push origin feature/AmazingFeature) - 提交一个拉取请求(或:发起一个合并请求)
📄 许可证
此项目采用ISC许可证授权。
🙏 致谢
- 用TypeScript构建
- 用粉笔风格装饰
- 由 cli-table3 驱动的表格
- 使用Node.js原生模块进行网络操作
📧 支持
如需报告问题、提出疑问或贡献代码,请在项目仓库中提交一个议题。
______________________________________________________________________
为MCP社区用心打造
