关于 Phosphor
Phosphor 是一款 macOS 终端应用,通过每台主机的一条 SSH 连接管理终端、Docker、监控、文件和密钥,面向需要集中管理服务器的用户。它也可作为 MCP 服务,让 Agent 按主机策略访问这些能力,并记录调用审计。
主要功能
- 01每台主机复用一条 SSH 连接
- 02Docker 容器与日志管理
- 03系统及容器指标监控
- 04SFTP 文件传输与断点续传
- 05authorized_keys 查看和编辑
- 06按主机策略控制 MCP 操作
适用场景
- 01通过一个界面管理多台 SSH 主机
- 02检查容器状态并跟踪实时日志
- 03传输文件并查看系统资源指标
- 04允许 Agent 按策略操作服务器
MCP 相关
Phosphor 内置 MCP 服务,通过 stdio shim 将客户端请求转发给正在运行的应用,提供主机、指标、容器、日志、命令和密钥管理工具。主机默认禁用,可配置只读、确认或完全访问模式;写入需人工决策,操作记录在审计日志中。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Phosphor
一款也能运行服务器的 macOS 终端。
Shell、Docker、指标、密钥和文件——每台主机只需一个 SSH 连接。 用指纹解锁。黑底绿字,这才是它应有的样子。
SSH 客户端 · Docker 管理器 · 服务器监控 · SFTP · authorized_keys 编辑器 ·
适用于 Claude Code 和 Claude Desktop 的 MCP 服务 · macOS 26 · Swift 6 · MIT

问题所在
你要开着四个窗口才能完成一项工作。一个终端用来运行 Shell。另一个
终端用来运行 docker logs -f。第三个用来运行 htop。还有一个浏览器标签页,
打开有人在服务器上安装的某个仪表盘。它们各自单独登录,每次都要再次输入
密钥口令,而且彼此都不知道对方正在查看什么。
Phosphor 每台主机只打开一个 SSH 连接,并通过它复用所有功能——交互式 Shell、容器日志、docker
命令、/proc 快照、SFTP 传输和端口转发。一次登录。通过代理的一条隧道。
状态集中于一处。
而且,由于这些状态已经保存在应用中,它还提供了一个 MCP 服务: Claude Code 和 Claude Desktop 可以通过你的连接、密钥和访问策略使用你的服务器, 每次调用都会写入审计日志。
功能
无需离开终端即可管理 Docker

容器列表位于侧边栏中,无需打开单独的应用。通过已有的 SSH
连接查看详情、统计数据、挂载项、环境变量和实时日志,并支持 --tail 和筛选条件。
名称看起来像机密的环境变量(PASS、KEY、TOKEN、SECRET)会在界面中屏蔽,
且绝不会复制到审计日志中。
无需开放 Docker Engine API,也无需创建套接字隧道:Phosphor 会调用 docker
并使用 JSON 输出,适用于所有已运行 Docker 的服务器。
只占用一个通道的指标

各核心负载、单独列出缓存的内存数据、磁盘、网络,以及每个容器的 CPU 和内存——
均来自通过单个长连接通道获取的 /proc 快照。无需在服务器上安装 Agent,
也无需大量 exec 通道。窗口隐藏时会停止轮询,并且每个缓冲区都有容量上限。
主机、分组和标签

每台主机一个分组,标签数量不限。分组包含设置——如何连接、使用哪个密钥、
采用哪种主题、MCP 可以执行哪些操作;标签则仅用于查找。导入 ~/.ssh/config 后即可继续使用。
使用指纹解锁

Phosphor 没有自己的账户或密码。这台 Mac 上有一个配置档,用你的指纹即可打开。 密码、口令和 TOTP 种子都保存在生物识别保护的 Keychain 中;密钥可以保存在 Secure Enclave 中,完全无法从这台机器复制出去。执行有风险的操作时需要再次确认。
按照方案配置新服务器

连接到一台新服务器后,Phosphor 会检查它:安装了哪些软件、有哪些服务正在监听、 之前是否有人使用过。如果服务器是空的,它会提供一个方案——安装软件包并启用无人值守升级、 安装 Docker 并设置日志大小上限、配置 nginx、certbot,以及只开放 22/80/443 的防火墙, 最后禁用密码登录。每一步都可重复执行,每一步都会显示确切命令;防止锁定的保护机制会确保 只有在通过密钥建立第二个连接并确认一切正常后,才关闭密码登录。
一目了然的密钥

将 authorized_keys 显示为表格,而不是文本文件:本地计算指纹、标记较弱的 RSA 密钥、
显示选项,并将已禁用的条目保留为注释。当前连接所用的密钥无法在未明确确认的情况下删除,
写入采用原子操作,并会在服务器上保留备份。
双侧文件

两个窗格,可在窗格间拖动文件,也可以从 Finder 拖入。共用同一个 SSH 连接和代理。传输中断后,重新开始会从停止的位置继续。
打造专属体验

主题采用 themes/ 中的纯 JSON 文件——可纳入 git 管理、与他人分享,也可导入 .itermcolors、alacritty 和 base16。可设置调色板、字体、连字、行高、背景图片、扫描线、辉光、暗角和窗口不透明度。将主题绑定到分组,让生产环境一眼就能认出是红色。
角落里还有一只猫,或者一只蜜袋鼯。应用锁定时它会睡觉,绝不会遮挡你的输出,还可以用一个开关永久关闭它。
让 Agent 访问你的服务器,而不交出密钥
Phosphor 也是一个 Model Context Protocol 服务。只需注册一条命令,Claude Code、Claude Desktop、Cursor 或任何其他 MCP 客户端就能列出你的主机、读取指标、检查容器、跟踪日志;并且在你允许时,运行命令、重启容器、管理 authorized_keys,以及在你自己的列表中添加、更改或移除主机。在任何模式下,凡是会编辑列表的操作都会先征求你的同意。
与把 shell 交给模型不同:连接由应用持有,Agent 什么也拿不到。
使用原始 ssh 的 Shell 工具 | MCP 配置中的凭据 | Phosphor | |
|---|---|---|---|
| 密钥存放位置 | 磁盘上,Agent 可读取 | 磁盘上,Agent 可读取 | 钥匙串 / 安全隔区,由 Touch ID 保护 |
| 可访问范围 | 所有内容 | 所有内容 | 仅限你启用的主机,以及你设定的模式 |
rm -rf / | 会执行 | 会执行 | 会被拒绝列表拦截,该列表优先于所有模式 |
| 人工介入 | 无 | 无 | 每次写入都需确认,授权 15 min 后过期 |
| 事后记录 | Shell 历史记录,可能有 | 无 | 只有审计日志,没有写入工具 |
| 输出中的机密 | 屏幕上显示的任何内容 | 屏幕上显示的任何内容 | 在模型看到之前先行屏蔽 |
| 失控循环 | 不受限制 | 不受限制 | 写入操作受速率限制 |
claude mcp add phosphor /Applications/Phosphor.app/Contents/MacOS/phosphor-mcp
在 MCP 注册表中的标识为 io.github.Kirusshenkin/phosphor;每个版本也会附带一个 .mcpb 捆绑包,并发布 SHA-256 校验和,供通过这种方式安装的客户端使用。
共 13 个工具,其中 7 个为只读。每台主机初始均为 disabled——只有为其选择 read-only、confirm 或 full 后,才能访问;生产服务器应保持 read-only。遭到入侵的服务器可以在模型读取的日志行中写入任意内容,但仍无法自行授予模式、绕过拒绝列表,也无法抹去尝试操作的记录。
完整详情:docs/MCP.md ——工具目录、策略、审计,以及应用关闭、锁定或拒绝请求时 Agent 收到的确切错误。
原则
不做集成。 应用唯一的网络流量是连接到你自己服务器的 SSH 流量和更新源。没有遥测、没有账户、没有第三方服务,也不会偷偷回传数据。
机密始终保密。 绝不会出现在日志行、崩溃报告、MCP 审计条目或错误消息中。默认不会将终端滚动缓冲区写入磁盘。
错误会告诉你该怎么做。 “无法连接”是个缺陷。“127.0.0.1:10808 上的代理未响应——V2Box 是否正在运行?”才是错误消息。应用会区分代理失效、服务器不可达和凭据遭拒,否则诊断就只能靠猜。
全天运行依然迅速。 网络字节会先按约 16 ms 的时间窗口批量处理,再送入模拟器;绘制路径不会分配内存,所有缓冲区都有上限;窗口不可见时会停止轮询;动画只会操作 transform 和 opacity。
严格遵循 Swift 6 并发模型,适用于每个目标,没有任何绕行手段。网络、解析和磁盘操作都在 actor 中执行;只有视图模型位于主 actor 上。
支持两种语言。 英语和俄语,均通过 String Catalog 实现。没有任何硬编码的界面字符串——并由检查器进行检查。
状态
可构建、可运行,179 项测试全部通过。共 11 个界面:锁定、主机、带持久会话的终端、文件、Docker、监控、密钥、配置、AI 活动和设置。界面支持俄语和英语。
在真实服务上可用的功能:每台主机通过一个复用连接进行 SSH 通信、列出容器并执行操作及流式传输日志、读取 /proc 指标、读取和编辑 authorized_keys、配置配方、双面板文件浏览,以及通过同一套接字连接的交互式 Shell。
MCP 端到端可用:软件包内置 phosphor-mcp 适配程序,通过 stdio 使用 JSON-RPC,并代理到应用管理的本地套接字。每台主机默认禁用;写入操作需要由用户决定;拒绝列表优先于所有模式;审计日志没有写入工具——模型可以执行操作,但无法抹去痕迹。
主机可从 ~/.ssh/config、known_hosts 和 Termius 密钥库导入。导入完成后,密钥库的明文导出文件会被删除。
尚未实现的功能:原生 Citadel 传输方式(基于进程的方式已经过测试且可正常运行)、角落里的小宠物,以及通过 Sparkle 进行应用内更新。
空闲时 CPU 使用率为零——没有计时器;窗口位于后台时会暂停轮询。
安装
curl -fsSL https://github.com/Kirusshenkin/terminalOs/releases/latest/download/Phosphor.zip -o Phosphor.zip
unzip -q Phosphor.zip -d /Applications
xattr -dr com.apple.quarantine /Applications/Phosphor.app
或者从发布页面下载 Phosphor.zip,并将应用拖到“应用程序”文件夹中。
**macOS 首次启动时会发出警告。**该应用使用临时签名——没有 Apple Developer 证书——因此从互联网下载的内容都会被隔离。这不是损坏:
- 双击应用,关闭警告。
- 打开“系统设置”→“隐私与安全性”→向下滚动→仍要打开。
- 确认。之后不会再提示。
上面的 xattr 命令可以一步完成同样的操作。
每个版本都会附带 SHA256SUMS.txt;使用
shasum -a 256 -c SHA256SUMS.txt 验证。
目前还没有应用内更新程序——请查看发布页面。当前运行的版本可在“关于”面板中查看。
开始使用
首次运行指南:docs/GUIDE.ru.md
(俄语)、docs/GUIDE.en.md(英语)。
面向 AI Agent
每个版本都附带 latest.json,无需抓取网页:
curl -fsSL https://github.com/Kirusshenkin/terminalOs/releases/latest/download/latest.json
{
"version": "0.1.0",
"url": "https://github.com/.../Phosphor-0.1.0.zip",
"sha256": "…",
"mcp": { "command": "/Applications/Phosphor.app/Contents/MacOS/phosphor-mcp",
"transport": "stdio" }
}
软件包内含一个 MCP stdio 适配程序。注册后,Phosphor 即可提供其工具:
{
"mcpServers": {
"phosphor": {
"command": "/Applications/Phosphor.app/Contents/MacOS/phosphor-mcp"
}
}
}
适配程序通过用户主目录中的 Unix 套接字与运行中的应用通信;它本身不携带任何凭据。如果应用已关闭或已锁定,适配程序会说明情况,且所有工具调用都会默认拒绝——MCP 访问默认关闭,必须在应用中按会话授权,并通过指纹确认。
发布
打标签并推送:
git tag v0.1.0 && git push origin v0.1.0
.github/workflows/release.yml 会运行测试,然后执行 .github/scripts/package.sh——本地也使用同一脚本,因此始终可以在自己的机器上复现发布结果:
MARKETING_VERSION=0.1.0 BUILD_NUMBER=1 ./.github/scripts/package.sh
脚本会生成 dist/Phosphor-<version>.zip、一个名为 Phosphor.zip 的副本(/releases/latest/download/ 路径只支持完全匹配的文件名)、SHA256SUMS.txt 和 latest.json。发布前,工作流会再次解压归档文件并对其运行 codesign --verify:如果签名在解压后无法保留,该软件包就无法在任何人的机器上打开。
构建
需要 macOS 26+ 和 Swift 6.3 工具链。
git clone https://github.com/Kirusshenkin/terminalOs.git
cd terminalOs
swift build
swift test
./.github/scripts/check.sh # format, lint, build, tests — before every commit
git config core.hooksPath .github/hooks # once: blocks commits with real addresses or keys
目录结构
Sources/ PhosphorCore, VaultKit, HostsKit, SSHKit, DockerKit,
MetricsKit, KeysKit, ThemeKit, ProvisionKit, PhosphorUI
design/ UI artboards (.dc.html), one per screen
docs/PLAN.md The full architecture plan, in Russian
docs/images/ Screenshots rendered from the artboards
参与贡献
先制定计划——所有需求都必须先写入 docs/PLAN.md,再开始编写代码。提交拉取请求前,请了解以下约定:代码、名称和提交消息使用英语;用户可见的字符串必须通过 Strings 同时提供英语和俄语版本,绝不硬编码;每个目标都必须遵循严格的 Swift 6 并发规则;不得吞掉错误,每条消息都必须说明发生了什么以及该怎么做;日志、错误和审计记录中不得包含机密;缓冲区必须有上限,绘制路径中不得分配内存。
安全
请私下报告漏洞——参见 SECURITY.md。
威胁模型见 docs/PLAN.md §15。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。