系统内部mcp(支架)
最小的FastMCP兼容支架,演示了动态注册和安全的子流程包装,用于公开Sysinternals和NirSoft二进制文件。
快速演示:
python server.py --demo procexp64启动MCP stdio服务器:
python server_mcp.py编辑 config.ini 调整服务器设置(日志级别、超时、allowdestructive)。 服务器不再需要显式的二进制路径——它扫描 binaries/ 递归目录。
安全提示:此脚手架可消除争论并使用 asyncio.create_subprocess_exec 没有外壳。在生产中使用之前,使用明确的安全过滤器进行扩展。
安全过滤器:破坏性工具(例如 sdelete, psexec, pskill)默认情况下被阻止。要运行它们,您必须:
- 添加
--confirm工具参数,或 - 集
allow_destructive = true在[server]部分config.ini.
服务器还会扫描 binaries 递归目录(如果存在);放置您的工具文件夹(例如。, systeminternals, nirsoft)under binaries.
设置
先决条件:
- Python 3.11+(推荐)和
venv.
快速设置:
python -m venv .venv
.\.venv\Scripts\activate
pip install --upgrade pip
pip install -r requirements.txt跑步
- 运行单个工具演示(CLI):
python server.py --demo pslist64- 启动长时间运行的MCP stdio服务器(用于代理集成):
python server_mcp.py这 --demo 模式对于简单的CLI使用和可以执行shell命令和解析JSON输出的编码代理非常有用。 server_mcp.py 为实现MCP协议的客户端公开完整的MCP stdio端点。
从CLI或编码代理使用
- 简单的CLI/脚本方法(建议用于可以运行子流程的自动化和代理):
--demo命令将JSON打印到stdout,很容易从任何语言解析。
Python代码片段示例(代理或脚本):
import subprocess, json
proc = subprocess.run([
'python', 'server.py', '--demo', 'pslist64', '--',
# additional tool args go here as separate items
], capture_output=True, text=True)
if proc.returncode == 0 and proc.stdout:
result = json.loads(proc.stdout)
print(result)
else:
print('error', proc.stderr)注意:将任何工具参数放在后面 --demo ;demo命令将加入该工具的剩余argv片段。
- 长时间运行的MCP服务器(用于高级代理):
- 使用启动服务器
python server_mcp.py(它将从以下位置注册工具binaries.json或binaries/目录)。 - 使用支持MCP的客户端通过stdio进行连接(将服务器作为子进程生成并实现MCP帧)。许多代理框架支持提供代理可以调用的长期进程;在这种情况下,MCP stdio服务器提供了一个稳定的RPC表面。
如果您的代理框架没有原生实现MCP,请使用上面的简单子流程方法来执行 server.py --demo 根据请求。
安全和最佳做法
- 绝不允许不受信任的代理或用户运行破坏性工具。默认情况下,破坏性工具被阻止;需要确认(交互式提示,
--confirm或allow_destructive=true在config.ini). - 在生成每个工具的模式或探测帮助文本时,请在隔离环境(VM或一次性容器)中运行探测,以避免意外执行不安全的二进制文件。
- 对于生产使用,请在MCP stdio进程周围添加身份验证,并在受限权限下运行。
持续集成
GitHub Actions工作流包含在 .github/workflows/ci.yml 它对推送和拉取请求运行测试套件。
mcpServers (IDE/代理集成)
如果您的编辑/代理支持 mcpServers config(例如Gemini客户端设置),添加启动stdio MCP服务器或指向正在运行的HTTP MCP端点的条目。
示例——从该仓库启动长期运行的stdio MCP服务器(对于完全MCP集成,首选):
"systeminternals-mcp": {
"command": "python",
"args": [
"C:\\path\\to\\the\\server_mcp.py"
]
}示例--运行的演示/单次输入 --demo 并打印JSON(对于调用子流程的简单代理很有用):
"systeminternals-mcp-demo": {
"command": "python",
"args": [
"C:\\path\\to\\the\\server.py",
"--demo"
]
}示例--指向现有的HTTP MCP端点:
"systeminternals-mcp-http": {
"url": "http://127.0.0.1:12345/mcp"
}笔记:
- 使用绝对Windows路径(JSON中的转义反斜杠)或纯文本
python如果环境自动激活virtualenv,则使用命令。 - 如果你的客户支持
cwd和env,设置它们,使服务器在repo根目录中运行并使用.venvpython - 首选stdio MCP服务器(
server_mcp.py)对于综合代理商;使用--demo用于返回JSON的简单的按请求子流程调用。
