PuTTY MCP服务器

将完整的PuTTY工具链作为MCP服务器暴露,提供对SSH、SCP、SFTP、串行端口和密钥管理的全面访问。

  • by wgthomas
  • Python
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 wgthomas/putty-mcp

使用说明

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

许可证

麻省理工学院