PuTTY MCP服务器
完整的PuTTY工具链作为 模型上下文协议 (MCP)服务器。让像克劳德这样的人工智能助手完全访问SSH、SCP、SFTP、串行、密钥管理等,所有这些都是通过PuTTY经过实战考验的Windows工具完成的。
30工具 横跨8个类别。Windows本机。涵盖所有PuTTY可执行文件。
是什么让这与众不同
大多数SSH MCP服务器为您提供基本的 ssh 和 scp 包装纸。这个包裹着 整个PuTTY套房 具有其他地方找不到的功能:
- 持续的互动会议 --打开一个shell,发送命令,多次读取输出。后台读取器线程保持输出流畅。
- 本机PPK v3密钥转换 --在纯Python中将OpenSSH密钥转换为PuTTY的PPK格式。不需要GUI插件。
- Windows注册表集成 --PuTTY保存的会话的完整CRUD。以编程方式创建、读取、更新、删除会话。
- 多跳SSH --使用自动构造的代理命令链接跳转主机。
- 串口支持 --在COM端口上打开PuTTY,具有可配置的波特、奇偶校验和停止位。
- Pageant集成 --将密钥加载到PuTTY的SSH代理中。
涵盖的可执行文件
| 可执行文件 | 目的 |
|---|
putty.exe | GUI终端会话(SSH、Telnet、串行、原始) |
plink | 命令行SSH/Telnet/串行执行 |
pscp | SCP/SFTP文件传输 |
psftp | 交互式SFTP会话 |
pageant | SSH密钥代理 |
puttygen | 密钥生成(通过 ssh-keygen +原生PPK转换器) |
快速开始
先决条件
- Python 3.10+
- 油灰 已安装(所有工具)
- Windows(PuTTY是Windows原生的;注册表工具需要Windows)
安装
git clone https://github.com/wgthomas/putty-mcp.git
cd putty-mcp
pip install -r requirements.txt
配置克劳德代码/克劳德桌面
添加到MCP配置(~/.claude.json 或克劳德桌面设置):
{
"mcpServers": {
"putty": {
"command": "python",
"args": ["/path/to/putty-mcp/putty_mcp.py"],
"env": {}
}
}
}
PuTTY可执行文件从以下位置自动检测 C:\Program Files\PuTTY、路径,或 PUTTY_PATH 有人是。
工具(30)
GUI启动(3)
| 工具 | 说明 |
|---|
putty_open | 使用完整的连接参数启动PuTTY |
putty_open_session | 从已保存的会话名称启动PuTTY |
putty_serial | 在串行端口上启动PuTTY |
命令执行(3)
| 工具 | 说明 |
|---|
plink_exec | 通过plink在远程主机上运行单个命令 |
plink_script | 通过plink从本地脚本文件运行命令 |
plink_tunnel | 创建SSH隧道(端口转发)或 -nc 连接 |
持续会话(5)
| 工具 | 说明 |
|---|
session_open | 打开持久交互会话(SSH/Telnet/串行/raw) |
session_send | 向会话发送命令并返回新输出 |
session_read | 从会话中读取输出缓冲区 |
session_list | 列出所有活动会话 |
session_close | 结束会话并清理 |
文件传输(5)
| 工具 | 说明 |
|---|
pscp_upload | 通过pscp将文件上传到远程主机 |
pscp_download | 通过pscp从远程主机下载文件 |
pscp_list | 通过pscp列出远程目录 |
psftp_batch | 通过psftp批量执行SFTP命令 |
psftp_interactive | 为多步骤工作流打开持久PSFTP会话 |
密钥管理(6)
| 工具 | 说明 |
|---|
keygen_create | 生成SSH密钥对(OpenSSH+PPK格式) |
keygen_fingerprint | 获取现有密钥的指纹 |
keygen_convert | 将密钥转换为不同的格式(RFC4716、PKCS8、PEM、PPK) |
keygen_public_key | 以authorized_keys格式提取公钥 |
pageant_add | 将密钥加载到Pageant中 |
pageant_list | 列出Pageant中加载的键 |
已保存会话--注册表(4)
| 工具 | 说明 |
|---|
saved_sessions_list | 列出所有PuTTY保存的会话 |
saved_session_get | 获取已保存会话的完整配置 |
saved_session_create | 创建或更新已保存的会话 |
saved_session_delete | 删除已保存的会话 |
公用事业(2)
| 工具 | 说明 |
|---|
test_connection | 测试SSH/Telnet连接,返回主机密钥 |
get_host_key | 从服务器获取SSH主机密钥指纹 |
多跳(2)
| 工具 | 说明 |
|---|
proxy_session | 通过代理命令打开交互式会话 |
chain_exec | 通过一个或多个跳转主机在目标上执行命令 |
配置
复制 config.template.toml 到 config.toml 并根据需要进行调整:
| 设置 | 默认值 | 说明 |
|---|
putty.executable_path | 自动检测到 | PuTTY安装目录的路径 |
putty.enable_registry | true | 启用Windows注册表会话工具 |
defaults.protocol | ssh | 默认连接协议 |
defaults.port | 22 | 默认端口 |
sessions.max_concurrent | 10 | 最大并发交互会话数 |
sessions.timeout_seconds | 3600 | 会话空闲超时 |
sessions.buffer_lines | 1000 | 每个会话的输出缓冲区大小 |
serial.* | 标准 | 默认串行参数(9600/8/N/1) |
建筑
putty_mcp.py # FastMCP server, all 30 tool definitions
putty_lib/
config.py # Path resolution, TOML config loading
executor.py # Subprocess wrapper (run, spawn, launch_gui)
session_manager.py # Persistent sessions with background readers
registry.py # Windows Registry CRUD for saved sessions
utils.py # Arg building, host parsing, proxy chains
ppk.py # Native Python PPK v3 writer
关键设计决策
- 不
shell=True --所有子流程调用都使用参数列表 ssh-keygen 超过 puttygen --Windows puttygen.exe仅是GUI,没有批处理CLI。所有密钥生成都使用Windows OpenSSH ssh-keygen,然后自动转换为PPK。- 原生PPK转换 —
putty_lib/ppk.py 在Python中从头开始编写PPK v3格式。支持Ed25519、RSA、ECDSA。不依赖GUI。 - 线程安全会话 --具有有界双端队列缓冲区和自动清理超时会话的后台读取器线程。
已知限制
- Pageant关键字列表:Pageant没有可靠的CLI标志将加载的密钥列为文本。工具尝试
ssh-add -L 第一个(要求Pageant以开头 --openssh-config),返回到打开GUI键列表窗口。 - PPK转换器:仅处理未加密的密钥。受密码保护的密钥需要手动进行puttygen-GUI转换。
- 持续会话:从远程shell返回原始ANSI转义码。功能齐全,但噪音很大。
- 仅限Windows:PuTTY是Windows原生的。注册表工具需要Windows。只要plink可用,核心SSH功能就可以工作。
安全
- 无外壳=真 --所有命令都使用
subprocess 带参数列表 - 无凭据存储 --每次调用都会传递密钥和密码,服务器永远不会持久保存
- 注册表范围 --仅在以下位置读取/写入PuTTY自己的注册表项
HKCU\Software\SimonTatham\PuTTY
许可证
麻省理工学院