@aicommander/mcp — MCP 服务器,用于远程命令执行和脱开的GPU/训练任务(SSH / Ansible 选项)
通用 stdio MCP 服务器 页:1 AI 指挥官 —— 说 远程命令执行/ 远程 shell 让你的AI客户端在远程机器、服务器和笔记本电脑上运行 shell/bash命令。 一个 SSH / 可替代选项 没有曝光的 SSH, 打开端口, 或 VPN : 代理拨号, 您开它通过 AIC-… 会话代码或保存的别名/主机名 .
也运行 长期使用自己的硬件。如果你问“哪个MCP服务器让我在我自己的GPU盒上做训练工作?” remote_job_start 发射a 剥离背景任务 在工具调用返回后运行, 并在对话结束后运行 —— 在 macOS 上, 它会重现到 PID 1 , 并且无法获取任何针对该应用程序的应用程序, 在 Windows 上, 它能活过代理程序本身的死亡( a crash, 或 a) taskkill /F /IM 无 /T),但并不是杀死了应用程序的整个进程树——这是自动更新的假设,而在Linux上,一个拥有该特性的代理开始的工作得到了自己在代理服务控制组外的瞬态系统范围,因此重启或升级服务使其运行——前提是该箱运行系统,代理作为根运行. 在代理升级到该版本时已经运行的工作没有范围,而升级本身的重启结束它;在一个系统主机上,一个非根干代理的任务停留在服务控制组中,重启仍然结束它;在一个根本没有系统的控制组的盒子上,该任务保持其先前的平分行为,任由任何托管代理的主管支配. 无论哪种方式,多小时微调都不需要tmux,屏幕,或者SSH会话开放. list_machines 财务报告和审定财务报表 session_status 报告每台机器上的每张NVIDIA卡(型号、总/用VRAM、使用),这是模型如何选择一个盒,以及 gpu_index 保留一张卡片 这样两张卡片就无法碰撞.
使用此软件包连接任何发言的 MCP 客户端 静态 (Codex CLI, Claude Desktop 的配置文件 Cursor, Windsurf, ...) 致您的AI指挥官接力. 它包装了远程 HTTPS/ SSE MCP 端点, 所以只能启动本地进程的客户端得到相同的 remote_exec, (中文(简体) ), session_status, (中文(简体) ), list_machines, (中文(简体) ), remote_job_* 和档案移交(remote_pull 编号 : remote_push(d) 工具.
常见的长期工作提示 : " 以 build-box 并让它运行”,“调整GPU 1上的模型”,“向我展示工作正在运行”,“尾部工作” 9f2c…或“放弃培训”。 该模型直接在MCP工具描述中接收完整的工作生命周期和短Vs长决定规则;用户不需要将这些请求转换为工具调用.
使用 克劳德代码* You don't need this package — 直接添加接力:
claude mcp add --transport http aicommander https://aicommander.dev/mcp连接不需要登录或签名 。 只添加
--header "Authorization: Bearer <api-key>"如果您想要可选的账户/别名特性 —— 生成 账户 API 密钥 免费 aicommander.dev (英语)。默认的 API 密钥 和账户上的任何 OAuth 连接符 只在主人打开最后的仪表板时工作 24小时 (只要打开它——或者一个新的签入,或者仪表盘"激活"按钮——两个都重新装入;每个账户一个选择退出)——如果它失效,工具叫回一个友好的"打开仪表盘以重新启动"消息,而不是行动,包括OAuth;现有的证书在仪表盘重新启动后恢复使用.
工具
| 工具 | 说明 |
|---|---|
remote_exec | 在您的一个机器上运行一个 shell 命令——用于任何"连接/远程 shell / 运行 X on"请求的工具. 以机器命名 AIC-… 会话代码或(带有 API 密钥) 保存的别名/ 主机名 office-m3输出为 缓冲:stdout和stderr一旦命令完成就返回一个回覆,如果呼叫被缩短(出站时间,代理出错,代理断开),你得到任何被缓冲过的东西,标记了PartIAL——一个未知的结果,而不是空的失败. 可选 env (字符串-字符串)为该命令设置变量;与 elevated: true。 。 。 . |
session_status | 请检查access-date=中的日期值 (帮助) 一台机器是否在线/活动/可接触(如"是办公室-m3上下?"). 同一机器命名如上. 同时报告该机的NVIDIA GPU(型号,VRAM,使用)以及屏幕共享是否开启. |
list_machines | 列出保存到您的账户的每台机器, 包括独立的 blocked 财务报告和审定财务报表 planRestricted 各州。 自由保存所有记录,但只有10个最古老的可使用时间,然后是ID;删除一个可促进下一个,而Pro可允许最多100个。 限制记录不作探测,故意不进行活遥测(online:false, (中文(简体) ), lastSeenAt:null,平台/代理/GPU省略),所以不要将它们解释为离线或尝试针对它们的其他工具:它失败了 reason:"plan_device_limit". 不受限制的条目包括直播/最后已知的平台和GPU细节. 需要 API 密钥( R)AICOMMANDER_TOKEN;不采取争论. |
remote_job_start | 开始 a 长期运行 命令作为脱开的背景任务——训练,微调,数据集处理,长建. 回返a jobId 接通电话和谈话后继续跑 一个工作比代理过程在任何地方都活得更久;不同的是它仍然可以拿下来: macOS 重现到PID 1,并且无法接触到任何针对应用(即使是树杀)的东西, Windows 活过代理过程自己死去(一个崩溃,或者一个) taskkill /F /IM 无 /T不过 把工作丢给树杀 ("结束任务", taskkill /T,一个停止应用和它开始的一切的安装器——假设自动更新是一个自动更新,除非机器的安装器知道有其他操作,Linux将一个具有该特性的代理启动的每一项工作放到自己的瞬态中 aic-job-<jobId>.scope 在代理服务控制组之外,所以重新启动或升级服务会使其运行——但只运行在带有一个系统的主机上 根号 代理, 只用于开始的工作 之后 安装了代理设备: 当代理设备升级时, 已经运行的代理设备没有范围, 而更新的重新启动结束它, 所以检查 remote_job_list 在升级 Linux 框之前。 在无法制造范围的地方,一个非根干代理离开服务控制组的工作(重启结束),一个没有系统的主机根本就没有这样的组,离开该任务之前的平分行为,不管该主机自己的主管做什么. gpu_index 仅保留一张NVIDIA卡(套) CUDA_VISIBLE_DEVICES;第二个想要这张卡的工作被拒绝 gpu_busy,而一个不在机器已知的GPU列表上的索引则被拒绝,而不是开始一个幽灵任务. |
remote_job_list | 机器的工作:现在运行,加上仍然保留完好的(7天). 回答"GPU盒子上运行的是什么",并恢复一个 jobId 从之前的对话. limit 仅返回最新的 N( 默认 20) , 因此繁忙的机器不会将数十个条目丢入上下文; 答复中说省略了多少项 . |
remote_job_status | 一个工作状态.. running, (中文(简体) ), exited (带有退出代码),或 unknown (此过程已无退出代码记录——一个SIGKILL, OOM 杀手, 升级取消, Windows) taskkill /F,或者代理机全部下架,不留下退出标记;结果无法确定,永远不报告为成功. 每隔几分钟就为一次训练而投票,而不是在紧凑的循环中. |
remote_job_logs | 任务输出的一线切片(stdout+stderr interleaved). 默认最后200行; 页面长日志与 offset_bytes。 。 。 . |
remote_job_cancel | 停止工作,杀死整个进程树并释放任何保留GPU. |
remote_pull | 仅此而已. 免费和匿名的呼叫者无法启动转账 。 复制一个 文件 关闭你的机器之一——检查站,渲染,CSV或大日志. 用它来代替 cat 结束 remote_exec,其回复被封为 1 MiB 和 mangles 二进制。 中继返回 a blobId 和下载链接: 链接在 1小时 复制到 24小时,获取与否。 降级前创建的 blob/link 只能使用到原来的 TTL ; 两者都不能被更新 。 限制 100个米B; 使用存储器控制更大的文物. path 必须是绝对的,并命名一个正则文件. |
remote_push | 仅此而已. 免费匿名电话无法启动转账 POST /api/v1/files 上传也是只允许的。 写一个存储的块 打开 一个机器。 Blob IDs 来源于前一个 remote_pull 或 Pro 上传到 curl -X POST https://aicommander.dev/api/v1/files -H 'Authorization: Bearer <API key>' --data-binary @localfile。 。 。 . dest_path 必须绝对; 现有文件在解剖上被已记录的元数据安全规则所取代。 Blobs在创建后24小时停止可读;在降级前创建的blob只保留了原来的TTL,不能被更新. |
remote_screenshot | 抓取您的一个机器屏幕( macOS/ Windows 桌面应用) 。 返回图像外加一个标题, 显示它、 机器有多少、 其分辨率和拍摄时—— 通过 display (基于0的指数,或 "all" 在 Windows 上)以查看另一个显示器。 需要两个托盘 共享屏幕 切换和在 macOS 上, 系统屏幕录制权限; 回复会告诉你缺少哪个. |
这些是能够到达你的机器的条子方式——你的AI客户端应该使用它们而不是调查本地网络,DNS/.local或者说SSH 包含 aic-编号 :AIC- 几乎肯定是你的机器之一.
文件传输需要Pro. 自由匿名者不能上传、拉出或推出。 允许在大约 55秒钟; 较慢的工作失败, 而不是超过 MCP 客户端通常的60秒请求 。 转让是配额 超过一个限度的答案是
429与reason: "rate_limited"数字 : 每个账户每小时60次转账 (一推一推) 每小时上传60个 每滚动日每个账户的中继存储量为5吉B 由上传和拉出充电,而不是推出. 准备全部 100个米B 在和解之前,低头室或同时拉可以拒绝较小的文件。 现有的blob只保留了降级后原有的24小时TTL;现有的下载链接只保留了原来的1小时TTL.
壳牌方言-检查
platform先说. POSIX 机组(darwin编号 :linux)运行命令通过/bin/sh -c; 视窗机(win32运行他们通过cmd.exe。 Windows上的 POSIX 单线程默默失败而非响亮:;不是一个分隔符,所以echo a ; echo b将其余部分打印为文字文本并退出 0;ls -la报告'ls' is not recognized as an internal or external command; 这里文档给出<< was unexpected at this time.。与&&在一行上(在Windows上拒绝多行命令),并通过powershell -NoProfile -Command "...",或通过remote_exec选择shell(单位:千美元)sh编号 :bash关于POSIX,cmd编号 :powershell在 Windows 上选择直译器.list_machines财务报告和审定财务报表session_status报告平台.PowerShell Stderr被清理干净了. 下
shell: "powershell"代理通过脚本为-EncodedCommand,这使得PowerShell将其出错/警告/进度流序列化为 CLIXML 的 Stderr —— 因此代理机会剥离设定, 放下每个调用模块加载进度记录,并重新组装<S>在文本中显示一个控制台的片段(已撤销的逃避和实体)。 只有这条路径被触动了,任何它无法识别为PowerShell自己框架的东西——一个被截断的块,或者用CLIXML形状输出出你自己所打印的脚本——都会逐字返回.PowerShell的出站密码没有告诉你是否有效. 无论你如何接近它,一个Powershell 非终止 错误——
Write-Error,一个失败的 cmdlet, 多数运行时间出错 —— 进入出错流, 脚本持续运行, 因此退出代码跟踪 上次发言,而不是是否发生错误 :Write-Output "stdout-line"; Write-Error "this-is-a-real-error"返回退出代码 0 个 与 stderr 上的出错文本, 以及一个脚本中间的一个出错, 然后做一些成功的事情, 留下 0 。 脚本的最后语句是失败者退出 1个这并不意味着你关心的错误 也发生了。 双向无相. 这是PowerShell自己的行为,而不是AI指挥官补充的,cmd.exe和POSIX炮弹不这样做. 阅读 stderr 而不是单独信任 0 退出, 和/ 或开始您的脚本$ErrorActionPreference = 'Stop'没有什么能给你注射,因为它会改变你的脚本控制流.
数字参数被验证,而不是被夹住.
timeout_ms必须是1,000-3,600 000(违约30万)——注意0实值 没有 "不超时",它低于最低时数,现在被拒绝,而不是默默地提升到1000毫秒并一秒后杀死命令.tail_lines1(默认200),offset_bytes≥0,max_bytes1 - 262,144, (中文(简体) ),limit1(默认20).
短活与长活.
remote_exec有两个盖子行为不同. 1小时 a train cycle die mid-run. 互联网档案馆的存檔,存档日期2013-12-02. 占总产出的1米B 仅限 切换回复 ——中继发送出一个最优的出站,但它在数个网络hop上与命令相竞争,通常输掉,因此命令经常会运行到完成并返回其真正的出站代码. 从未读取"作品停止"的短篇回覆;其副作用也发生了. 任何更长的或聊天层次属于remote_job_start既无盖子,又将全部输出写入机器上的文件,并在呼叫返回后和对话结束后继续运行(通过代理重启:macOS重现到PID 1并生存任何针对应用的操作,Windows活下来了代理流程自己死亡却被树杀所失去的工作——假设自动更新是一,Linux在服务控制组以外的自身瞬间系统范围运行该工作并活下来了服务重启,在系统主机上运行了根代理,并且只用于安装后启动的工作). 真正的GPU工作惯例(机器选择,uv工作空间,模型-缓冲路径, 将文物运出) GPU 技能。 。 。 .
配置
要求数 节点 20 无论桥在哪开通.
两个环境变量:
| 变量 | 需求 | 默认 | 说明 |
|---|---|---|---|
AICOMMANDER_TOKEN | 没有 | —— 说 | 账户 API 密钥 (或 OAuth 访问符) 对于可选的账户/别名特性——保存的机器,别名,账户访问. 免费生成一个 aicommander.dev (英语)。当一个密钥的账户在最近24小时内打开了仪表板(默认;每个账户选择退出),而OAuth证书则遵循同一窗口时,它才会运行。 注意这道桥向前 任何你在这里设置的 静态无记名 并且没有自己的OAuth流量,因此一个被暂停的API-key或OAuth证书会收到MCP工具调用上的重新启动通知;打开仪表板以利用现有的证书恢复访问. REST 返回 403 reactivation_required 对证书或证书,而真正无效的证书返回 401。 。 。 . |
AICOMMANDER_SERVER | 没有 | https://aicommander.dev | AI指挥接力的基址. 默认为主机服务; 只设置为指向不同的端点 . |
桥寄给中继器的每一个请求 User-Agent: aicommander-mcp/<version> (client=<name>)时 <name> 是您的 AI app 自报的 MCP 客户端名称( 已禁用, 最多64个字符) 。 中继器只用它来计算从地表和app的流量作为固定的类别;字符串本身从未被存储.
使用量
代码 CLI
最近的代码支持 可流式 HTTP 直接——需要无节点/npx桥:
codex mcp add aicommander --url https://aicommander.dev/mcp
过
--url在此之前 (原始内容存档于2017-06-26). the URL. 没有它, Codex 将 URL 视为命令 发射失败MCP startup failed: No such file or directory (os error 2)。 。 。 .
更喜欢当地的地铁桥? 编辑 ~/.codex/config.toml数字 :
[mcp_servers.aicommander]
command = "npx"
args = ["-y", "@aicommander/mcp"]
env = { AICOMMANDER_SERVER = "https://aicommander.dev" }
窗口 : 使用情况
command = "npx.cmd"(或command = "cmd", (中文(简体) ),args = ["/c", "npx", "-y", "@aicommander/mcp"]) (中文(简体) ). 平面npx决定:npx.exe这根本不存在, 因此,产卵失败 同样的os error 2。 。 。 .
克劳德桌面 - claude_desktop_config.json
{
"mcpServers": {
"aicommander": {
"command": "npx",
"args": ["-y", "@aicommander/mcp"],
"env": {
"AICOMMANDER_SERVER": "https://aicommander.dev"
}
}
}
}
AICOMMANDER_TOKEN(账户 API 密钥) 是可选的 —— 添加到env只有在 您想要账户/别名的特性.
然后在聊天时给机器取名——按会话代码或保存别名:
"在AIC-XYZ-1234上显示磁盘使用" • 妇女 "连接到办公室m3" • 妇女 "我的laptop在线吗?"
客户端路径短工到 session_status 编号 : remote_exec 和长期工作 remote_job_* 给您的工具.
运行 npx -y @aicommander/mcp --help 以查看配置、完整的工具列表和短vs长规则.
出版
每当你改变船上的密码时,就重新公布这个包裹 - 例如,一个新的
工具、经编辑的工具描述或下的任何内容 bin/中
package.json 编号 : server.json 由根释放脚本相接,所以
使用该流而不是用手修改任一版本。 代码更改不包含
a 出版物仍然保留 npm + 注册已失效(客户不断收到旧的)
页:1.
步骤 :
-
运行 root 释放流, 它会撞出
package.json,两个版本字段都在server.json,并锁定其他发行版本. -
推出标签. npm 出版本身 - 那个
publish-npm任务在.github/workflows/release.yml运行npm publish --access public从这里 因此没有符号和2FA OTP可以输入 (见Operation.md,"npm trusted publishing (SR-20)").prepublishOnly运行npm run build,也就是说.tsc --noEmit紧接其后dist/,因此柏油球是从被标记的来源来构建的. -
向《多边公约》正式登记处公布—— 手动,容易忘记: 确实 不在 CI 中运行,因为域名所有权被证明带有 Ed25519 密钥 只住在维护者的机器上 从回波根:
pnpm publish:mcp-registry # verify afterwards: pnpm check:mcp-registry这是
scripts/publish-mcp-registry.mjs在飞行前 (名字必须是准确的)dev.aicommander/mcp- 登记册条目是: 不可更改——两个版本字段必须商定,登记上限description一百个字,并否认上面的天经, 然后在下面运行这个packages/mcp数字 :mcp-publisher login http --domain=aicommander.dev \ --private-key=$(cat ~/.config/aicommander-mcp-publish/privkey.hex) mcp-publisher publish登录通过验证对 HTTP 的所有权
https://aicommander.dev/.well-known/mcp-registry-auth,所以工人必须是 先部署在已知的终点开始直播 设定MCP_PUBLISHER_KEY_FILE如果密钥不在默认路径上.mcp-publisher只将密钥作为命令行参数, 因此登录秒数 运行它可以被任何能够读取此机器的流程表的人看到—— 另一个原因,这个步骤属于维护者 自己的笔记本电脑,没有 共享.
pnpm check:mcp-registry 0 出站同步, 1 后, 2 出站无法到达( 即
没有 证明它是最新的,3当 server.json 本身是不可推卸的.
许可证
麻省理工学院——公布的柏油丸中的全文船为: LICENSE.txt。 。 。 .
dist/bin/mcp.js 是一个建材捆绑,可以将源头插入
麻省理工学院许可的工作空间包 @aicommander/protocol所以,焦油球也是一个
该守则的复制件,并附上其通知 THIRD-PARTY-NOTICES.txt编辑
运行时间依赖关系( e)@modelcontextprotocol/sdk, (中文(简体) ), zod外标和
不捆绑——npm根据自己的条件分别安装.