MCP协议监控工具

一个.NET控制台应用程序,用于实时监控和分析Cursor AI编辑器中Model Context Protocol (MCP)的客户端-服务器交互,帮助开发者调试和优化MCP通信。

  • by willibrandon
  • C#
  • 本地部署
  • 12 星标
  • 更新于
在 GitHub 查看 willibrandon/cursormcpmonitor

使用说明

光标MCP监视器

A.NET控制台应用程序,用于监视Cursor AI编辑器中的模型上下文协议(MCP)交互。该工具通过实时监控日志文件,帮助开发人员调试和分析MCP服务器客户端通信。

什么是MCP?

模型上下文协议(MCP)是一种开放协议,它规范了应用程序如何向LLM提供上下文。它遵循客户端-服务器架构,其中:

  • MCP主机 (如Cursor)连接到多个服务器
  • MCP客户端 与服务器保持1:1连接
  • MCP服务器 通过标准化协议公开特定功能
  • 本地数据源 和 远程服务 通过MCP服务器安全访问

特性

  • 在Cursor中实时监控MCP客户端-服务器交互:
    • 客户端创建和连接事件
    • 服务器提供列表和功能
    • 协议错误和警告
    • 客户端生命周期转换
  • 监控游标日志目录中的新MCP日志文件
  • 对不同的消息类型进行解析和颜色编码:
    • 绿色:客户创建和成功连接
    • 黄色:服务器产品列表
    • 红色:协议错误和客户端关闭
    • 灰色:一般信息消息
  • 支持日志轮换和文件截断
  • 跨平台支持(Windows、macOS、Linux)
  • 具有指数退避和重试逻辑的智能错误处理
  • 可配置的轮询间隔和日志文件模式
  • 命令行界面便于定制
  • 结构化日志记录 使用Serilog可提高可观察性:
    • 带有格式化输出的控制台日志记录
    • 每日轮换的文件记录
    • 上下文属性(机器名、线程ID等)
    • 日志级过滤和输出定制

交互式仪表板

该应用程序包括一个基于网络的监控和分析仪表板,可在以下网址访问 http://localhost:5050 当应用程序运行时。仪表板具有通过WebSocket连接进行实时事件流式传输的功能,具有自动重新连接处理和事件率监控功能。

终端显示器显示毫秒精度的时间戳和颜色编码的消息类型,便于识别不同的事件类型。高级搜索功能包括基于文本的搜索,支持突出显示和键盘快捷键。

命令面板(Ctrl/Cmd+P)提供了对常见操作的快速访问:

  • 清除日志(Ctrl/Cmd+K)
  • 复制可见条目(Ctrl/Cmd+C)
  • 切换自动滚动(Ctrl/Cmd+S)
  • 焦点搜索(/)

仪表板包括WebSocket连接状态、活动客户端计数和每秒事件的状态指示器。它支持深色和浅色主题,并具有系统主题检测功能。

安装

您可以使用全局安装该工具。NET-CLI:

# Install from NuGet.org
dotnet tool install --global CursorMCPMonitor

# Or install from GitHub Packages
dotnet nuget add source --name github "https://nuget.pkg.github.com/willibrandon/index.json"
dotnet tool install --global CursorMCPMonitor --add-source github

安装后,您可以使用以下命令从任何地方运行该工具:

cursor-mcp --help

要更新到最新版本:

dotnet tool update --global CursorMCPMonitor

要卸载,请执行以下操作:

dotnet tool uninstall --global CursorMCPMonitor

配置

应用程序可以通过以下方式配置 appsettings.json:

{
  "LogsRoot": null,
  "PollIntervalMs": 1000,
  "LogPattern": "Cursor MCP.log",
  "Verbosity": "Debug",
  "Filter": null,
  "Serilog": {
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
    "Properties": {
      "Application": "CursorMCPMonitor"
    }
  },
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "Microsoft": "Warning"
    }
  }
}
  • LogsRoot:用于监视游标MCP日志的根目录。如果为null,则默认为:
    • 窗户: %AppData%/Cursor/logs
    • macOS: ~/Library/Application Support/Cursor/logs
    • Linux: ~/.config/Cursor/logs
  • PollIntervalMs:检查新日志行的频率(以毫秒为单位)
  • LogPattern:要监视的日志文件模式(支持“Cursor MCP*.log”等glob模式)
  • Verbosity:详细程度(调试、信息、警告、错误)。默认设置为“调试”以显示所有消息。
  • Filter:筛选日志内容的可选文本模式(仅显示包含此文本的行)
  • Serilog:结构化日志记录的配置(请参见 Serilog配置)

您还可以使用环境变量覆盖设置:

# Windows
set LogsRoot=C:\CustomPath\Cursor\logs
set PollIntervalMs=500
# Linux/macOS
export LogsRoot=/custom/path/cursor/logs
export PollIntervalMs=500

Serilog配置

该应用程序使用Serilog进行结构化日志记录,可以在 appsettings.json 文件:

  • Serilog:MinimumLevel:Default:默认的最低日志级别
  • Serilog:MinimumLevel:Override:覆盖特定命名空间的最低日志级别
  • Serilog:Enrich:丰富器可将上下文信息添加到日志中
  • Serilog:Properties:要包含在所有日志事件中的自定义属性

默认情况下,日志会写入:

  • 控制台:为人类可读性而格式化
  • 文件:存储在 logs 每日轮换的目录 cursormonitor-YYYYMMDD.log

命令行选项

您可以使用命令行选项覆盖配置设置:

# Specify a custom logs directory
dotnet run -- --logs-root "C:\Users\username\AppData\Roaming\Cursor\logs"

# Set a custom polling interval (500ms)
dotnet run -- --poll-interval 500

# Use a different log pattern (glob pattern support)
dotnet run -- --log-pattern "Cursor MCP*.log"

# Set verbosity level
dotnet run -- --verbosity debug

# Filter logs to only show lines containing specific text
dotnet run -- --filter "CreateClient"

# Combine multiple options
dotnet run -- --logs-root "/path/to/logs" --poll-interval 500 --verbosity error --filter "Error in MCP"

建立和运行

先决条件

  • .NET 9.0 SDK或更高版本

构建

dotnet build

跑

dotnet run

Docker支持

该应用程序包括Docker支持。要使用Docker构建和运行:

# Make sure you're in the repository root directory
cd /path/to/CursorMCPMonitor

# Build the image (note the -f flag to specify Dockerfile location)
docker build -t cursor-mcp-monitor -f src/CursorMCPMonitor/Dockerfile .

# Run the container with volume mapping for logs
# For Windows PowerShell:
docker run -it --rm -v "$env:APPDATA\Cursor\logs:/app/logs" -e LogsRoot=/app/logs cursor-mcp-monitor

# For Windows CMD:
docker run -it --rm -v "%APPDATA%\Cursor\logs:/app/logs" -e LogsRoot=/app/logs cursor-mcp-monitor

# For macOS/Linux:
docker run -it --rm -v "$HOME/Library/Application Support/Cursor/logs:/app/logs" -e LogsRoot=/app/logs cursor-mcp-monitor

重要:

  • 始终从存储库根目录运行Docker build命令,而不是从项目目录运行。这确保了所有必要的文件都包含在构建上下文中。
  • 运行Docker容器时,您需要将本地Cursor日志目录映射到容器中,并设置 LogsRoot 环境变量指向映射的目录。

测井和可观测性

该应用程序使用Serilog实现了结构化日志记录,这提供了几个好处:

  • 上下文信息:每个日志条目都包括上下文属性,如机器名、线程ID和源上下文
  • 多种输出格式:日志以格式化输出的形式写入控制台和文件
  • 日志级别:不同的日志级别(调试、信息、警告、错误、致命)有助于筛选最相关的信息
  • 结构化数据:日志事件包括可以查询和分析的结构化数据
  • 日志文件:日志文件存储在应用程序的 logs 每日轮换的目录

日志格式示例(控制台):

[2025-03-03 12:34:56.789] [INF] [CursorMCPMonitor.Services.LogProcessorService] CreateClient detected: Cursor MCP.log 2025-03-03 12:34:56.123 [info] a602: Handling CreateClient action

日志格式示例(文件):

2025-03-03 12:34:56.789 +00:00 [INF] [CursorMCPMonitor.Services.LogProcessorService] CreateClient detected: Cursor MCP.log 2025-03-03 12:34:56.123 [info] a602: Handling CreateClient action

错误处理

该应用程序包括高级错误处理:

  • 文件访问错误的指数回退和抖动
  • 从瞬态问题中自动恢复
  • 带有颜色编码控制台输出的详细错误报告
  • 文件旋转和截断检测
  • 带有上下文信息的结构化错误日志记录

用例

  • 通过监视客户端-服务器交互来调试MCP服务器实现
  • 分析协议消息和错误模式
  • 跟踪客户端生命周期和连接状态
  • 监控服务器功能和产品
  • 验证协议的正确实施
  • 通过结构化日志跟踪应用程序性能和错误率

许可证

此项目根据MIT许可证获得许可-请参阅 LICENSE.txt 文件以获取详细信息。