pms-mcpb
这 .mcpb format是一种标准化的归档格式,它将MCP服务器及其相关工具捆绑在一个AI应用程序可以正确识别和利用的结构中。它作为一种官方打包和部署方法,是 Claude Code的官方部署格式. 有关 .mcpb 归档结构和可用的参考工具,请参阅:
______________________________________________________________________
安装
有两种方法可以安装 .mcpb 包裹:
1.拖放到克劳德代码中
只需拖动下载的 .mcpb 将文件导入Claude Code应用程序窗口。\ 它将自动导入并注册为可用工具。
2.通过抽气手动安装
A. .mcpb 该文件是一个具有不同文件扩展名的标准ZIP存档。\ 要手动提取它,请执行以下操作:
- 重命名文件扩展名
.mcpb到.zip. - 解压缩 将文件保存到您选择的目录中。
- 添加提取的
bin/文件夹到系统的PATH环境变量。
这允许您在Claude Code之外直接使用附带的命令行工具。
⚠ 备注\ 包含的可执行文件当前已构建 仅适用于Windows.\ 它们不会在Linux上运行。\ 未来可能会增加对其他平台的支持。 如果在运行工具时看到DLL错误,可能需要安装\ Microsoft Visual C++可再发行版 发件人:\ https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist
通过GitHub Actions自动生成二进制文件(试用版)
pms-mcpb 使用GitHub Actions自动构建以下对象的可执行二进制文件 pty-mcp-server 适用于各种操作系统和CPU架构。\ 这些构建确保了 .mcpb 包可用于多个平台,使跨环境部署无缝。
此设置仍处于试验阶段,可能会发生变化或受到限制。\ 有关更多详细信息,请参阅 .
______________________________________________________________________
pty mcp服务器
______________________________________________________________________
⚠️ 小心
不要授予AI无限制的控制权。\ 未经监督的使用或误用可能会导致意想不到的后果。\ 所有人工智能系统都必须严格处于人类的监督和控制之下。\ 负责任地使用,充分意识到并自行承担风险。
______________________________________________________________________
📢 通知
始终确保 pty-mcp-server.yaml 升级服务器时更新到最新版本。使用过时的配置文件可能会导致兼容性问题或执行错误。
______________________________________________________________________
📘 概述
pty-mcp-server 是一个Haskell实现 MCP(模型上下文协议)服务器 使AI代理能够动态获取和控制 PTY(伪终端)会话,允许通过基于终端的接口与真实系统环境进行交互。
服务器仅通过以下方式进行通信 标准输入/输出,确保与MCP客户端的简单安全集成。通过这个界面,人工智能代理可以执行命令、检索系统状态和应用配置,就像人类操作员通过终端一样。
______________________________________________________________________
🎯 目的
- 为AI代理提供 基于TTY的控制能力
- 启用 自动化配置、检查和操作 使用CLI工具
- 促进 AI驱动的系统开发、诊断和远程交互工作流程
- 允许AI代理访问和操作 静态脚本或API无法触及的系统
- 支持 基础设施即代码(IaC) 需要的场景 交互式或有状态终端工作流
- 协助 系统集成 跨异构环境和遗留系统
- 赋能 支持DevOps、IaC和集成管道的AI代理 通过操作需要类人终端交互的工具
______________________________________________________________________
🔧 示例用例
- CLI工具的动态执行 需要PTY环境\
(例如,通过串行或基于SSH的终端的嵌入式系统)
- REPL自动化:驱动GHCi或其他基于CLI的交互式解释器
- 交互式调试 Haskell应用程序或基于shell的工作流
- 系统诊断 通过脚本或交互式bash会话
- 远程服务器管理 使用SSH
- 动手系统操作 无法通过非交互式脚本模拟CLI行为
- 网络设备交互:通过控制台配置路由器、交换机或设备
- 人工智能辅助的IaC工作流程:执行涉及提示、状态协调或实时输入的Terraform、Ansible或基于shell的部署脚本
- AI驱动的系统集成测试 跨多个环境和CLI工具
- 遗留系统自动化 其中GUI/neneneba API不可用,仅支持终端交互
______________________________________________________________________
用户指南(使用和设置)
特性
pty-mcp-server 提供以下内置工具,实现强大而灵活的自动化:
可用工具
agent-proc-run\
使用指定的命令和选项生成外部进程。进程的stdin/stdout已连接,用于后续的代理进程读取和代理进程写入操作。一次只能有一个进程处于活动状态。
agent-proc-read\
从运行进程的stdout中读取指定数量的字节。立即返回可用数据(非阻塞)。如果没有可用数据,则返回空字符串。
agent-proc-write\
将指定的字符串写入正在运行的进程的stdin。
agent-proc-terminate\
强制终止当前正在运行的进程。重置内部状态,以便可以再次调用代理程序运行。
pms-list-dir\
列出指定路径下目录的内容。
pms-make-dir\
在指定路径创建一个目录。缺少的父目录也将被创建。
pms-read-file\
读取指定路径下的文件内容。(可选)指定startLine/endLine(从1开始,包括1)以仅读取部分行。
pms-write-file\
将内容写入指定路径的文件。
pms-file-info\
返回文件的基本元数据:总行数和字节大小。在pms读取文件之前使用此选项,以了解文件的规模,并在pms读文件部分读取时使用行数,以避免加载过多。
pms-grep-file\
在文件中搜索与POSIX扩展正则表达式匹配的行。返回一个命中对象的JSON数组,每个对象都有:“line”(从1开始的行号)、“text”(匹配行的完整内容)和“cols”(由1开始的列偏移量组成的数组,其中模式在该行内匹配)。当没有行匹配时,返回一个空数组。使用pms读取文件部分读取的返回行号来有效地检索周围的上下文。
pms-replace-file\
替换文件中的文字。每次替换都是按顺序应用的,在该步骤中发现的每次出现的oldText都会被newText替换。这不是正则表达式替换。
pms-patch-file\
将统一的差异补丁应用于指定路径下的文件。补丁必须采用统一的diff格式(例如,@@-1,3+1,3@@)。成功后,返回修补文件的路径。失败时,返回错误消息,如HunkMismatch。注意:当使用多个大块时,每个大块的行号(边和边)必须考虑所有前一大块的累积行数增量(添加减去删除)。
socket-open\
此工具启动与指定主机和端口的套接字连接。
socket-close\
此工具关闭之前使用“套接字打开”工具建立的活动套接字连接。
socket-read\
从套接字读取指定数量的字节。“size”参数表示要读取的字节数。
socket-write\
将字节序列写入套接字。
socket-message\
此工具通过活动套接字连接发送消息。
socket-telnet\
一个基于原始TCP套接字的简单Telnet类通信工具。此工具连接到指定的主机和端口,发送和接收数据,并从通信流中删除任何Telnet IAC(解释为命令)序列。注意:这是一个简化的Telnet实现,不支持完整的Telnet协议功能。
serial-open\
以给定的波特率打开与指定设备的串行端口连接。通常用于通过控制台访问本地硬件或网络设备。
serial-close\
此工具关闭之前使用“串行打开”工具建立的活动串行连接。
serial-read\
从序列中读取指定数量的字节。“size”参数表示要读取的字节数。
serial-write\
将字节序列写入串行。
serial-message\
此工具将指定的字符串发送到活动套接字连接,然后等待来自远程端的可识别提示。在检测到提示后,它会捕获并返回之前收到的所有输出。
pty-bash\
ptybash是一个在伪终端(pty)中启动bashshell的工具。它允许LLM(MCP客户端)在交互式终端(PTY)中与真实的Linux shell进行交互。这使得人工智能能够运行系统命令、收集信息,并处理提示或基于TUI的工具,就像由人类操作一样,使其能够有效地进行基于Linux的动态自动化和诊断。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
pty-ssh\
使用指定的参数在伪终端中建立SSH会话,允许与远程系统进行交互。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
pty-telnet\
在伪终端(PTY)会话中启动telnet命令。这允许与远程Telnet服务器进行交互式通信,使AI能够像人类用户一样响应“登录:”或“密码:”等提示。PTY环境确保终端的行为类似于真正的TTY设备,这是许多Telnet服务器所必需的。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
pty-cabal\
使用指定的项目目录、主源文件和参数在伪终端中启动cabal repl会话。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
pty-stack\
使用指定的项目目录、主源文件和参数在伪终端中启动堆栈repl会话。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
pty-ghci\
使用指定的项目目录、主源文件和参数在伪终端中启动GHCi会话。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
pty-connect\
通过伪终端(pty)运行命令,与外部工具或服务进行交互,并带有可选参数。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
pty-message\
pms消息是一种向正在运行的PTY会话发送结构化指令或命令的工具。它抽象了直接的终端输入,允许LLM(MCP客户端)以受控和可编程的方式与PTY过程交互。(注意:代理proc-write复制了此工具,它通过更友好的代理界面提供了等效的功能。)
pty-terminate\
强制终止活动伪终端(PTY)连接。(注意:代理proc-terminate复制了此工具,它通过更友好的代理界面提供了等效的功能。)
proc-cmd\
这 proc-cmd 工具启动Windows命令提示符(cmd.exe)作为一个子流程。它允许人工智能与标准的Windows shell环境交互,在熟悉的终端界面中执行批处理命令、文件操作和系统配置任务。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
proc-ps\
proc-ps 启动Windows PowerShell(powershell.exe)作为一个子流程。它提供了一个交互式命令行环境,AI可以在其中执行PowerShell命令、脚本和系统管理任务。shell以默认选项启动,以保持其打开状态并准备进一步输入。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
proc-ssh\
proc-ssh 启动SSH客户端(ssh)作为一个子流程,使用 runProcess它使AI能够通过Secure Shell协议发起与其他系统的远程连接。该工具可用于执行远程命令、访问远程shell或通过SSH提供隧道服务。所需 arguments 字段允许指定目标用户、主机和任何SSH选项(例如。, -p, -i, -L).(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
proc-telnet\
一种通过内部使用PuTTY的plink可执行文件运行Telnet会话的工具。这使Windows上的交互式Telnet连接成为可能,而不需要像winpty这样的外部伪终端模拟器。用户提供Telnet命令参数,这些参数直接传递给plink以建立会话。(注意:plink.exe必须在系统PATH中可用。)(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
proc-plink\
一个Windows工具,通过plink、命令行SSH和Telnet客户端启动交互式控制台应用程序。适用于直接执行SSH或Telnet会话,无需外部PTY仿真器。(注意:plink.exe必须在系统PATH中可用。)(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
proc-spawn\
使用指定的参数生成外部进程,并通过标准输入和输出实现交互式通信。与基于PTY的执行不同,这使用runProcess函数直接与进程通信,而无需分配伪终端。适用于非TUI、基于stdin/stdout的交互式程序。(注意:代理proc run复制了此工具,它通过更友好的代理界面提供了等效的功能。)
proc-message\
向以runProcess启动的子进程发送结构化的基于文本的指令或命令。它提供了一个可编程接口,用于通过标准输入与流程进行交互。(注意:代理proc-write复制了此工具,它通过更友好的代理界面提供了等效的功能。)
proc-read\
读取活动PTY会话的可用输出,而不会阻塞。如果没有可用数据,则返回一个空字符串。(注意:此工具由代理proc-read复制,它通过更友好的代理界面提供了等效的功能。)
proc-write\
将输入数据写入活动PTY会话,并立即返回,无需等待完成。(注意:代理proc-write复制了此工具,它通过更友好的代理界面提供了等效的功能。)
proc-terminate\
强制终止通过runProcess创建的正在运行的进程。(注意:代理proc-terminate复制了此工具,它通过更友好的代理界面提供了等效的功能。)
Scriptable CLI Integration\
这 pty-mcp-server 支持执行与中定义的注册工具关联的shell脚本 tools-list.json。每个工具都必须按名称和相应的shell脚本注册(.sh)应存在于配置中 tools/ 目录。
该设计通过可预测的脚本机制公开工具界面,支持人工智能驱动的工作流程。AI可以按名称发出工具调用,服务器透明地管理执行和交互。\ 要添加新工具,请执行以下操作:
1. 创建一个名为的shell脚本 your-tool.sh 在 tools/ 目录。 1. 在中添加条目 tools-list.json 与名称 "your-tool" 以及适当的元数据。 1. 无需重新编译或修改服务器——工具按名称动态解析。
这种工具定义的分离(tools-list.json)以及实施(tools/your-tool.sh)确保了干净的解耦并简化了可扩展性。
注:\ 以开头的命令 pty- 在Windows上不受支持。这些工具依赖于POSIX风格的伪终端(PTY),这在Windows环境中是不可用的。使用Podman或Docker运行
您可以构建和运行 pty-mcp-server 使用任一 波德曼 或 码头工人.
注: 在Docker容器中运行pty-mcp服务器时,在建立pty连接后,您将在容器环境中操作。在与服务器交互时应该考虑到这一点。
1.塑造形象
克隆存储库并导航到 docker 目录:
$ git clone https://github.com/phoityne/pty-mcp-server.git
$ cd pty-mcp-server/docker
$ podman build . -t pty-mcp-server-image
$裁判: build.sh
2.运行容器
在容器内运行服务器:
$ podman run --rm -i \
--name pty-mcp-server-container \
-v /path/to/dir:/path/to/dir \
--hostname pms-docker-container \
pty-mcp-server-image \
-y /path/to/dir/config.yaml
$裁判: run.sh
下面是一个如何配置的示例 mcp.json 要在VSCode中运行MCP服务器:
{
"servers": {
"pty-mcp-server": {
"type": "stdio",
"command": "/path/to/run.sh",
"args": []
/*
"command": "podman",
"args": [
"run", "--rm", "-i",
"--name", "pty-mcp-server-container",
"-v", "/path/to/dir:/path/to/dir",
"--hostname", "pms-docker-container",
"pty-mcp-server-image",
"-y", "/path/to/dir/config.yaml"
]
*/
}
}
}二进制安装
如果您更喜欢自己构建,请确保满足以下要求:
- GHC>=9.6
您可以安装 pty-mcp-server 使用 cabal:
$ cabal install pty-mcp-server通过以下方式安装 .dxt 包裹
您还可以使用预打包的工具设置该工具 .dxt 文件。\ 此方法适用于快速安装到Claude Code中,或通过提取进行手动设置。
🛠️ 这 .dxt 包分发当前正在进行 准备中,\ 但您可以在以下网址查看最新状态和下载链接:\ 二进制执行
这 pty-mcp-server 应用程序从命令行执行。
用法
$ pty-mcp-server -y config.yaml虽然服务器可以直接从命令行启动,但它通常由集成MCP客户端的开发工具(如Visual Studio Code)启动和管理。这些工具利用服务器通过PTY会话实现交互式和自动化的命令执行。
VSCode集成: .vscode/mcp.json
为了简化Visual Studio代码中的开发和服务器调用,该项目支持 .vscode/mcp.json 配置文件。
此文件定义了如何 pty-mcp-server 应该在开发环境中启动。配置示例:
{
"servers": {
"pty-mcp-server": {
"type": "stdio",
"command": "pty-mcp-server",
"args": ["-y", "/path/to/your/config.yaml"]
}
}
}config.yaml配置(参考)
logDir:\
保存日志文件的目录路径。这包括标准输出/错误日志和脚本执行日志。
logLevel:\
设置日志记录级别。例如 "Debug", "Info",以及 "Error".
toolsDir:\
包含脚本文件的目录(以工具名称命名的shell脚本。, ping.sh).如果此处存在与工具名称匹配的脚本,则将在调用工具时执行该脚本。\ 此目录还必须包含 tools-list.json 该文件定义了可用的公共工具及其元数据。
prompts:\
用于检测交互式命令提示的提示字符串列表。这允许AI识别命令何时等待输入。例如 "ghci>", "]$", "password:"等等。
allowedAgentCmds:\
允许使用的命令白名单 agent-proc-run。如果此列表为空(默认值),则拒绝所有命令。仅允许执行此处明确列出的命令。
______________________________________________________________________
演示
AI通过pty-mcp服务器处理二进制协议对话
\ 裁判: 套接字telnet提示符
此视频演示了由中定义的MCP提示驱动的Telnet登录序列 插座-电话提示.md.使用以下工具 socket-open, socket-read, socket-write,以及 socket-message,AI执行Telnet协商、处理提示并提交凭据。二进制响应被解析并以人类可读的形式显示。
通过串行连接进行网络设备版本检查——由pty mcp服务器供电。
\ 裁判: 串行nw设置提示
此视频演示了如何 pty-mcp-server 通过与网络设备的串行连接实现AI辅助自动化。
- 设备设置
用户指定通信端口和波特率。\ 例子: COM3,在Windows上为9600波特。
- 登录交互
AI提示输入用户名和密码,\ 并使用它们登录到网络设备。
- 设备版本检索
登录后,AI发送命令\ 以检索已安装的操作系统或固件版本。
- 在线版本检查
AI访问官方网站查看最新可用版本,\ 并将其与安装的版本进行比较。
- 会话终止
检查完成后,AI会注销并干净地关闭串行连接。
演示:观看AI从头开始创建和启动Web应用程序
\ 裁判: Web服务构建代理提示
- \[场景1:概述和MCP配置\]\
在这个演示中,我们将展示AI代理如何使用 pty-mcp-server.\ 首先,我们配置 mcp.json 使用shell脚本启动MCP服务器。\ 此脚本启动Docker容器,我们将在其中进行基于PTY的交互。
- \[场景二:Docker启动配置\]\
这 run.sh 脚本包括卷装载、主机名设置和打开 端口8080.\ 这允许容器向主机系统公开web服务。
- \[场景3:启动MCP服务器\]\
现在,容器已经启动 pty-mcp-server 正在里面运行,\ 准备通过伪终端处理AI驱动的请求。
- \[场景4:连接AI代理\]\
我们打开聊天界面,并发送一个为web服务构建器代理设计的提示。\ AI通过PTY连接到容器的Bash会话并开始准备。
- \[场景5:初始设置命令\]\
根据提示,AI开始:
- 创建项目文件夹 - 移动到工作目录
- \[场景6:AI准备接收指令\]\
一旦环境准备就绪,我们指示AI构建一个“Hello,world”web服务。\ 从这里开始,人工智能开始了它的自主构建过程。
- \[场景7:AI执行Web设置命令\]\
AI提出了一系列终端命令。\ 作为用户,我们会逐一审核和批准它们。\ 步骤包括:
- 检查Python - 安装Flask - 编写源代码(app.py)为“你好,世界”服务 - 运行Flask服务器 - 测试通过 curl http://localhost:8080 集装箱内
- \[场景8:从集装箱外验证\]\
为了确认外部可访问性,我们通过以下方式从主机访问服务 端口8080正如预期的那样,答复是: “你好,世界”
- \[场景9:回顾执行历史\]\
最后,我们逐步回顾AI的行动:
- 初始化Bash会话并创建工作目录 - 设置Python环境 - 基于Flask生成 app.py - 启动web服务器并验证其运行
- \[场景10:结论\]\
这展示了AI如何与 PTY MCP服务器 和 码头工人,\ 可以自动化实际的开发任务-- 交互式地, 智能地,以及 可再生产地.
演示:Docker执行和主机SSH访问
- 带Docke的MCP配置\
这是mcp.json文件。它定义了MCP服务器启动配置。在这种情况下,pty-mcp服务器将使用shell脚本run.sh启动。此脚本使用Podman启动容器。
- 启动MCP服务器\
这是run.sh脚本。它使用podman run启动Docker容器,并使用正确的卷挂载、主机名和映像标记。一旦执行,MCP服务器就会在容器内启动。
- 刀具清单\
接下来,在tools-list.json中定义了暴露给客户端的工具列表。 它包括三个工具:pty-message、pty-ssh、一个名为hostname.sh的shell脚本
- 工具脚本目录\
在config.yaml中,定义了脚本目录的路径。 这是应该放置hostname.sh等工具脚本的地方
- 主机名脚本\
hostname.sh脚本只是运行hostname命令。 它作为容器内的工具执行。
- 从聊天中执行主机名\
现在,让我们在聊天中运行主机名工具。 这显示了当前主机的名称,即容器。\ 正如预期的那样,输出是:pms-docker容器 这证实了该命令是在Docker容器内执行的。
- 使用pty ssh访问主机\
接下来,我们使用pty-ssh与主机操作系统建立pty会话。 尝试使用host.docker.internal进行SSH连接,该连接解析为docker主机。\ 确认主机身份并输入密码后,登录成功。
- 确认主机环境\
现在我们已经连接到主机,我们运行:cat/etc/redhat-release\ 这证实了我们现在在主机操作系统中,即CentOS 9。\ 相比之下,Docker容器运行的是AlmaLinux 9。
演示:通过PTY进行交互式Bash
- 在mcp.json中配置bash-mcp服务器\
在此文件中,将bash-mcp服务器注册为mcp服务器。\ 将命令指定为pty-mcp-server,并将配置文件config.yaml作为参数传递。
- config.yaml中的设置\
config.yaml文件定义了日志目录、工具目录和提示检测模式。\ 这些设置为AI通过PTY与bash交互建立了环境。
- 将tools-list.json放入toolsDir中\
您需要将tools-list.json放置在toolsDir指定的目录中。\ 此文件声明了AI可用的工具,包括pty-bash和pty-message。
- AI连接到Bash并自动选择命令\
AI通过伪终端连接到bash 根据上下文决定执行哪些命令。
- 确认命令执行结果\
getenforce命令的输出显示SELinux是否处于强制模式。\ 此结果显示在终端或日志中,允许用户验证系统状态。
演示:Shell脚本执行
- mcp.json配置\
在stdio模式下启动pty-mcp服务器,将config.yaml作为参数传递。
- config.yaml概述\
指定日志目录、工具目录和提示字符串。\ toolsDir中的tools-list.json定义了要公开的工具。
- tools-list.json的作用\
列出可用的脚本工具,仅在此处注册了script_add工具。
- 工具文件夹的角色和命名约定\
存储通过mcp服务器调用的可执行shell脚本。\ tools-list.json中的工具名称与此文件夹中的shell脚本文件名匹配。
- 从VSCode GitHub Copilot执行\
使用命令运行script_add.sh #script_add 2 3,执行添加。
- 确认结果\
返回“5”,表示操作成功。
演示:Haskell调试 cabal repl
\ 裁判: haskell cabal调试提示
- 目标代码概述\
MyLib.hs中的一个函数被选中,使用cabal repl和AI驱动的调试接口检查其运行时状态。
- MCP服务器初始化\
启动MCP服务器以允许AI和调试命令之间的结构化交互。
- 调试器提示和环境设置\
AI收到提示,启动cabal repl,并加载模块以准备运行时检查。
- 调试执行开始\
目标函数在预定义的点执行并暂停,以进行运行时观察。
- 状态检查和输出\
显示运行时值和控制流,以帮助验证逻辑和观察内部行为。
- 摘要\
与pty-msp服务器的集成实现了Haskell应用程序的自动运行时检查。
______________________________________________________________________
