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
许可证
麻省理工学院