ProcmonMCP
ProcmonMCP是一种 模型上下文协议(MCP) 允许LLM自主分析的服务器 进程监视器(Procmon)XML日志文件。它向任何兼容MCP的客户端提供了一套全面的分析工具,包括Claude Code、Claude Desktop、Cline等。
概述
Process Monitor捕获详细的系统活动——文件访问、注册表操作、网络连接、进程创建等。ProcmonMCP将这些XML日志解析为优化的内存表示,并将其作为MCP工具公开,使LLM能够调查系统行为,而无需手动处理数据。
关键能力:
- 在运行时加载文件 --无需重新启动服务器来分析不同的捕获
- 字符串实习 减少大型日志上的内存占用
- 索引查找 按进程名、操作、PID和文件路径进行快速筛选
- 多种传输协议 --stdio(推荐)、流式HTTP和SSE(不推荐)
- 进度反馈 在通过MCP通知加载文件期间
该项目的灵感来自 GhidraMCP.
安全警告 Process Monitor日志可能包含极其敏感的系统信息(击键、命令行中的密码、文件内容、网络流量详细信息等)。 - 此工具加载 任何文件路径 运行脚本的用户具有读取权限。有 不 目录沙盒。 - 仅在受信任的环境中运行此服务器。 - 除非您完全理解并接受风险,否则切勿在运行此服务器时使用从包含敏感生产或个人数据的系统中捕获的Procmon日志。 - 在使用此工具之前,请查看您打算加载的日志中的敏感信息。
安装
先决条件
- Python 3.7或更高版本(使用3.10+开发和测试)
pip(Python包安装程序)
从源代码安装
git clone https://github.com/JameZUK/ProcmonMCP
cd ProcmonMCP
pip install -r requirements.txt依赖项
| 包装 | 必需 | 用途 |
|---|---|---|
mcp[cli]>=1.8.0 | 是 | 带CLI工具和Streamable HTTP支持的MCP SDK |
lxml>=4.9.0 | 推荐 | 更快的XML解析(回退到stdlib ElementTree 如果缺席) |
psutil>=5.9.0 | 可选 | 文件加载后的内存使用情况报告 |
一次性安装:
pip install "mcp[cli]>=1.8.0" lxml psutilClaude Code快速入门
推荐使用ProcmonMCP的方法是通过 标准 克劳德代码运输。服务器启动时没有加载任何文件——然后您(或LLM)可以使用 load_file 打开Procmon捕获的工具。
选项1:通过Claude Code CLI添加
# Add ProcmonMCP as a stdio server (user-wide)
claude mcp add procmon --scope user -- python -m procmon_mcp
# Or with a file pre-loaded at startup
claude mcp add procmon --scope user -- python -m procmon_mcp --input-file /path/to/capture.xml.gz
# Or scoped to the current project only
claude mcp add procmon --scope project -- python -m procmon_mcp选项2:通过JSON添加
claude mcp add-json procmon '{
"type": "stdio",
"command": "python",
"args": ["-m", "procmon_mcp"]
}'选项3:直接编辑配置文件
Claude Code从以下位置读取MCP服务器配置:
| 范围 | 文件 | 描述 |
|---|---|---|
| 项目(共享,版本控制) | .mcp.json 在项目根目录中 | 与团队共享 |
| 项目(个人) | .claude/settings.local.json | 您的本地覆盖 |
| 用户(全局) | ~/.claude.json | 适用于所有项目 |
示例 .mcp.json 对于共享项目:
{
"mcpServers": {
"procmon": {
"type": "stdio",
"command": "python",
"args": ["-m", "procmon_mcp"]
}
}
}带有预加载文件和选项的示例:
{
"mcpServers": {
"procmon": {
"type": "stdio",
"command": "python",
"args": [
"-m", "procmon_mcp",
"--input-file", "/path/to/capture.xml.gz",
"--no-stack-traces"
]
}
}
}选项4:流式HTTP传输
对于网络访问或多客户端场景,请使用Streamable HTTP:
# Add as an HTTP server (start the server separately first)
claude mcp add --transport http procmon http://127.0.0.1:8081/mcp然后启动服务器:
python -m procmon_mcp --transport streamable-http --mcp-port 8081验证连接
配置后,验证Claude Code是否可以看到ProcmonMCP:
claude mcp list在Claude Code会话中,您还可以键入 /mcp 检查已连接服务器的状态。
用法
典型工作流程
- 启动服务器 (Claude Code会自动为stdio服务器执行此操作)
- 检查状态:LLM电话
get_status查看文件是否已加载 - 加载文件:LLM电话
load_file带有Procmon XML捕获的路径 - 分析:LLM使用分析工具调查日志数据
命令行参数
| 参数 | 默认值 | 描述 |
|---|---|---|
| `--input-file | ||
| ` | *(无)* | 启动时预加载Procmon XML文件。如果省略,请使用 load_file 来自MCP客户端。 |
--transport | stdio | 传输协议: stdio, streamable-http,或 sse (已弃用)。 |
--mcp-host | 127.0.0.1 | 主机地址(仅限HTTP传输)。 |
| `--mcp-port | ||
| ` | 8081 | 端口号(仅限HTTP传输)。 |
--no-stack-traces | off | 跳过加载堆栈跟踪以节省内存。 |
--no-extra-data | off | 跳过加载未知/额外事件字段以节省内存。 |
--debug | off | 启用详细调试日志记录。 |
| `--log-file | ||
| ` | *(控制台)* | 将日志写入文件而不是控制台。 |
--profile | off | 启用cProfile分析(用于开发)。 |
例子
从stdio开始(没有预加载文件——使用 load_file 来自客户):
python -m procmon_mcp预加载压缩的XML文件:
python -m procmon_mcp --input-file /path/to/capture.xml.gz从自定义端口上的Streamable HTTP开始:
python -m procmon_mcp --transport streamable-http --mcp-port 9000跳过非常大的文件的堆栈跟踪:
python -m procmon_mcp --input-file /path/to/huge_capture.xml --no-stack-traces --no-extra-data传输协议
| 运输 | 用例 | 状态 |
|---|---|---|
| 标准 | 本地使用Claude Code、Claude Desktop等。 | 推荐 |
| 可流式传输http | 网络访问、多客户端、远程部署 | 支持 |
| SSE | 尚未支持流式HTTP的传统MCP客户端 | 已弃用 (MCP规范2025-03-26) |
stdio(推荐)
最简单、最可靠的运输方式。Claude Code将服务器作为子进程生成,并通过stdin/stdout进行通信。无需网络配置。
流式HTTP
使用单个HTTP端点(/mcp)为了所有的沟通。支持会话管理,为长时间运行的操作提供可选的SSE流,并专为可扩展性而设计。
python -m procmon_mcp --transport streamable-http --mcp-host 0.0.0.0 --mcp-port 8081服务器将在以下时间可用 http://: /mcp.
SSE(已弃用)
自MCP规范2025-03-26以来已弃用。 SSE保留了向后兼容性,但将在未来的版本中删除。请迁移到streamable-http或stdio.
python -m procmon_mcp --transport sse --mcp-port 8081用户配置
ProcmonMCP将用户首选项存储在 ~/.procmonmcp/config.json。此文件是自动创建的,并会记住:
- 最后加载的文件路径(在中显示为提示
get_status当没有加载文件时) - 加载首选项(
no_stack_traces,no_extra_data)
不需要API密钥或身份验证令牌-ProcmonMCP是一个纯粹的本地分析工具。
可用的MCP工具
生命周期工具
| 工具 | 说明 |
|---|---|
get_status() | 返回当前服务器状态——文件是否已加载、加载进度、内存使用情况和可用操作。 先叫这个。 |
load_file(file_path, no_stack_traces?, no_extra_data?) | 加载Procmon XML文件(.XML、.gz、.bz2、.xz)进行分析。提供进度反馈。替换之前加载的所有数据。 |
数据检索工具
| 工具 | 说明 |
|---|---|
get_loaded_file_summary() | 返回加载文件的详细摘要——文件名、计数、压缩、索引统计、互联网统计和选择性加载标志。 |
get_metadata() | 返回基本元数据(文件名、类型、事件/进程计数)。 |
list_processes() | 从进程列表部分列出唯一的进程(PID、名称、映像路径、父PID)。 |
get_process_details(pid) | 按PID返回特定进程的详细属性。 |
query_events(...) | 使用灵活的过滤器查询事件——按进程、操作、结果、路径(包含/regex)、细节(正则表达式)、时间戳范围和堆栈模块路径。返回带索引的事件摘要。 |
get_event_details(event_index) | 按索引返回特定事件的所有属性。 |
get_event_stack_trace(event_index) | 返回特定事件(模块路径、位置、地址)的调用堆栈。 |
分析工具
| 工具 | 说明 |
|---|---|
count_events_by_process() | 统计每个进程名称的事件数。 |
summarize_operations_by_process(process_name_filter) | 统计特定流程的操作。 |
get_timing_statistics(group_by) | 计算按流程或操作分组的持续时间统计信息。 |
get_process_lifetime(pid) | 查找给定PID的进程创建和进程退出时间戳。 |
find_file_access(path_contains, limit?) | 查找与路径子字符串匹配的文件系统事件(不区分大小写)。 |
find_network_connections(process_name) | 查找进程访问的唯一远程网络终结点。 |
导出工具
| 工具 | 说明 |
|---|---|
export_query_results(...) | 将筛选后的事件导出到CSV或JSON文件。使用与相同的过滤器 query_events. |
MCP客户端
ProcmonMCP可与任何兼容MCP的客户端配合使用。以下是常见客户端的设置说明。
克劳德代码(推荐)
看 Claude Code快速入门 上面的部分。
克劳德桌面版
将以下内容添加到您的Claude Desktop配置文件中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"procmon": {
"command": "python",
"args": ["-m", "procmon_mcp"]
}
}
}克莱恩
对于具有流式HTTP传输的Cline,首先启动服务器:
python -m procmon_mcp --transport streamable-http --mcp-port 8081然后在Cline中,选择MCP服务器并添加:
- 服务器名称: ProcmonMCP
- 服务器URL:
http://127.0.0.1:8081/mcp
LLM提示恶意软件分析示例
*(假设加载了Procmon XML文件)*
初步分类
- “获取加载文件的摘要。”
- “列出日志中发现的唯一进程。”
- “统计每个进程的事件。” *(识别高活动过程)*
- “计算按进程分组的计时统计信息。” *(识别长期事件)*
调查可疑流程
- “获取进程PID 4568的详细信息。” *(检查命令行、父PID、图像路径)*
- “总结流程操作
suspicious.exe." - “查询filter_process所在的事件
suspicious.exe过滤器操作为RegSetValue,限制10。” - “查找进程的网络连接
suspicious.exe." - “查找包含以下内容的文件访问权限
temp\\suspicious_data,限50。”
寻找毅力
- “查询filter_operation所在的事件
RegSetValuefilter_path_contains为CurrentVersion\\Run限制20。” - “查询filter_operation所在的事件
CreateFilefilter_path_contains为StartUp,限制10。”
故障排除错误
- “查询filter_result所在的事件
ACCESS DENIED,限制10。” - “查询filter_result所在的事件
NAME NOT FOUND,限制10。” - “获取事件987的详细信息。”
- “获取事件987的堆栈跟踪。”
导出数据
- “将查询结果导出到
suspicious_reg_writes.csv其中filter_process是suspicious.exefilter_operation包含RegSet." - “将查询结果导出到
network_activity.jsonjson格式。"
性能和索引
ProcmonMCP在文件加载过程中构建四个索引,用于快速过滤查找:
| 索引 | 使用者 | 复杂性 |
|---|---|---|
| 进程名称(互联网ID) | query_events, count_events_by_process | O(1)查找 |
| 操作(互联网ID) | query_events, summarize_operations_by_process | O(1)查找 |
| PID | get_process_lifetime | O(1)集合交集查找 |
| 文件路径(互联网ID) | find_file_access | O(unique_paths)子字符串扫描 |
对于没有索引支持的过滤器(例如正则表达式、路径包含、堆栈模块路径),ProcmonMCP会回退到对所有事件的线性扫描。首先使用索引过滤器来缩小结果范围,然后应用更昂贵的过滤器。
局限性
- 内存使用:虽然通过字符串内部优化,但加载超大的XML文件(数百万个带有堆栈跟踪的事件)可能会消耗大量RAM。使用
--no-stack-traces和--no-extra-data对于非常大的文件。 - 加载时间解析和优化大型XML文件需要时间,尤其是压缩文件。加载过程中会报告进度。
- XML结构:依赖于标准的Procmon XML导出结构。格式错误或非标准的XML可能会导致解析错误。
- 堆栈复写:堆栈跟踪质量取决于Procmon解析并包含在XML导出中的内容。需要使用正确配置的符号运行Procmon。
- 一次一个文件:在任何给定时间只能加载一个文件。加载新文件会替换以前的数据。
贡献
欢迎投稿!请随时提交pull请求或未决问题 .

