mcpField
P
Phosphor

Phosphor

ローカル
github.comクラウド・インフラ03 週間前に更新

Phosphor について

Phosphorは、ホストごとに1つのSSH接続を使ってシェル、Docker、メトリクス、ファイル、鍵を管理するmacOSターミナルアプリです。MCPサーバー機能も備え、ホストごとのポリシーに沿ったエージェントの操作と監査に対応します。

主な機能

  1. 01ホストごとにSSH接続を多重化
  2. 02Dockerコンテナとログの管理
  3. 03システムおよびコンテナのメトリクス
  4. 04再開可能なSFTP転送
  5. 05authorized_keysの表示と編集
  6. 06ホスト単位のMCPアクセス制御

活用シーン

  1. 011つのアプリで複数のSSHホストを管理
  2. 02コンテナの確認とライブログの追跡
  3. 03ファイル転送とシステム指標の確認
  4. 04ポリシー内でエージェントにサーバー操作を許可

MCP 対応

stdioのシムを介して、実行中のアプリにクライアント要求を転送するMCPサーバーを内蔵しています。ホスト、メトリクス、コンテナ、ログ、コマンド、鍵のツールを提供し、ホストは初期状態で無効、書き込みには人の判断が必要で、操作は監査ログに記録されます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbphosphor-mcp-0.3.0.mcpb0.3.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Phosphor

サーバーも実行できる macOS ターミナルです。

シェル、Docker、メトリクス、鍵、ファイルを、ホストごとに 1 つの SSH 接続で。 指紋認証でロックを解除します。黒地に緑の表示がふさわしいからです。

SSH クライアント · Docker マネージャー · サーバーモニター · SFTP · authorized_keys エディター · Claude Code と Claude Desktop 用 MCP サーバー · macOS 26 · Swift 6 · MIT

ターミナル


課題

1 つの作業をするのに、ウィンドウを 4 つ開いたままにしていませんか。シェル用のターミナル。docker logs -f 用の 2 つ目のターミナル。htop 用の 3 つ目のターミナル。サーバーにインストールされたダッシュボードを開くブラウザーのタブ。それぞれが別々にログインし、そのたびに鍵のパスフレーズを再度求められ、ほかのウィンドウが何を表示しているかも把握していません。

Phosphor はホストごとに1 つの SSH 接続を開き、その接続を通じてすべてを多重化します。インタラクティブシェル、コンテナーログ、docker コマンド、/proc のスナップショット、SFTP 転送、ポートフォワーディングをまとめて扱えます。ログインは 1 回。プロキシを通るトンネルは 1 つ。状態を一元管理できます。

さらに、その状態がすでにアプリ内にあるため、MCP サーバーも公開します。Claude Code と Claude Desktop は、あなたの接続、鍵、アクセス方針を使ってサーバーを利用でき、呼び出しはすべて監査ログに記録されます。


できること

ターミナルから離れずに Docker を操作

Docker

コンテナー一覧は別アプリではなく、サイドバーに表示されます。すでに確立済みの SSH 接続を通じて、コンテナーの情報、統計、マウント、環境変数、--tail とフィルターを使ったライブログを確認できます。名前にシークレットらしい文字列(PASS、KEY、TOKEN、SECRET)を含む環境変数は UI でマスクされ、監査ログにもコピーされません。

公開する Docker Engine API は不要で、トンネルを張るソケットもありません。JSON 出力を使って docker コマンドを実行するため、Docker がすでに稼働しているサーバーならどこでも動作します。

チャネル 1 つで取得できるメトリクス

メトリクス

コアごとの負荷、キャッシュの内訳を含むメモリー、ディスク、ネットワーク、コンテナーごとの CPU とメモリーを、1 つの長時間接続チャネルを通じて取得した /proc のスナップショットから表示します。サーバーにインストールするエージェントは不要で、exec チャネルが大量に増えることもありません。ウィンドウが非表示になるとポーリングは停止し、すべてのバッファーには上限があります。

ホスト、グループ、タグ

ホスト

ホストごとにグループを 1 つ、タグはいくつでも設定できます。グループには接続方法、使用する鍵、テーマ、MCP で許可する操作などの設定が含まれ、タグは項目の検索に使います。~/.ssh/config をインポートすれば、すぐに使い始められます。

指紋認証でロックを解除

Touch ID

Phosphor にアカウントや独自のパスワードはありません。この Mac にプロフィールがあり、指紋でロックを解除します。パスワード、パスフレーズ、TOTP シードは生体認証で保護されたキーチェーンに保存され、鍵は Secure Enclave に保存できます。Secure Enclave に保存された鍵は、マシンの外へコピーできません。リスクの高い操作では、再度認証を求められます。

レシピで新しいサーバーをセットアップ

プロビジョニング

新しいサーバーに接続すると、Phosphor が調査します。インストール済みのもの、リッスン中のサービス、過去に誰かが接続したことがあるかどうかを確認します。何も設定されていない場合は、レシピを提案します。パッケージと自動アップグレード、ログサイズに上限を設けた Docker、nginx、certbot、22/80/443 のみを開放するファイアウォール、最後にパスワードログインの無効化を行います。すべての手順は何度実行しても安全で、正確なコマンドが表示されます。また、ロックアウト防止の仕組みにより、2 つ目の鍵認証接続で動作を確認した後にのみ、パスワードログインを無効化します。

実際に確認できる鍵

鍵

テキストファイルの代わりに、表形式で表示される authorized_keys。フィンガープリントはローカルで計算され、弱い RSA 鍵にはフラグが付き、オプションが表示され、無効なエントリーもコメントとして残ります。現在接続に使用している鍵を削除するには明示的な確認が必要で、書き込みはアトミックに行われ、バックアップはサーバー上に保存されます。

両側にファイルを表示

SFTP

2つのペイン間、またはFinderからドラッグできます。同じSSH接続、同じ プロキシを使います。転送をドロップしても、中断したところから再開します。

自分好みにカスタマイズ

Theme

テーマはthemes/にあるプレーンなJSONです。gitで管理したり、人と共有したり、 .itermcolors、alacritty、base16からインポートしたりできます。パレット、フォント、 合字、行の高さ、背景画像、スキャンライン、グロー、ビネット、ウィンドウの不透明度に対応しています。 テーマをグループに割り当てれば、本番環境をひと目で赤色だとわかるようにできます。

そして、隅には猫がいます。あるいはフクロモモンガかもしれません。アプリが ロックされている間は眠り、出力を覆うことはありません。スイッチひとつで 永久にオフにできます。


キーを渡さずに、サーバーをエージェントに使わせる

PhosphorはModel Context Protocolサーバーでもあります。コマンドを1つ登録すれば、 Claude Code、Claude Desktop、Cursor、その他のMCPクライアントから、ホストの一覧表示、 メトリクスの読み取り、コンテナの調査、ログの追跡ができます。また、許可した場合は、 コマンドの実行、コンテナの再起動、authorized_keysの管理、自分のリストへのホストの追加、 変更、削除もできます。リストを編集する操作は、どのモードでも必ず事前に確認を求めます。

モデルにシェルを渡す場合との違いは、接続を保持するのはアプリであり、 エージェントには何も渡さないことです。

生のsshを使うシェルツールMCP設定に保存された認証情報Phosphor
キーの保存場所ディスク上。エージェントから読み取り可能ディスク上。エージェントから読み取り可能キーチェーン/Secure Enclave内。Touch IDで保護
接続可能な対象すべてすべて有効にしたホストのみ。設定したモードに従う
rm -rf /実行される実行されるどのモードよりも優先される拒否リストによって拒否される
人間の介在なしなし書き込みごとの確認。許可は15分で期限切れ
事後の記録シェル履歴。残る場合ありなし書き込みツールを持たない監査ログ
出力内のシークレット画面上に表示されたものすべて画面上に表示されたものすべてモデルに渡す前にマスク
暴走ループ無制限無制限書き込みをレート制限
claude mcp add phosphor /Applications/Phosphor.app/Contents/MacOS/phosphor-mcp

MCPレジストリではio.github.Kirusshenkin/phosphorとして公開しています。各リリースには、 その方法でインストールするクライアント向けに、公開済みのSHA-256を記載した.mcpbバンドルも 含まれています。

13個のツールがあり、そのうち7個は読み取り専用です。すべてのホストは最初disabledです。 ホストごとにread-only、confirm、fullを選ぶまで、何にもアクセスできません。 本番サーバーはread-onlyのままにしておくことを想定しています。侵害されたサーバーが、 モデルの読むログ行に好きな内容を書き込んでも、自分でモードを許可したり、拒否リストを 回避したり、試みた記録を消去したりすることはできません。

詳細はこちら:docs/MCP.md — ツール一覧、ポリシー、監査、 アプリが終了中、ロック中、または要求を拒否しているときにエージェントが受け取る正確なエラー。

基本方針

外部サービスとの連携はありません。 アプリが行うネットワーク通信は、自分の サーバーへのSSH接続とアップデートフィードのみです。テレメトリー、アカウント、 サードパーティサービス、自宅への通信は一切ありません。

シークレットは秘密のままです。 ログ行、クラッシュレポート、MCP監査エントリー、 エラーメッセージには決して記録しません。端末のスクロールバックは、デフォルトでは ディスクに書き込まれません。

エラーには対処方法が示されます。 「接続できませんでした」だけでは不具合です。 「127.0.0.1:10808のプロキシが応答していません。V2Boxは起動していますか?」が エラーメッセージです。アプリはプロキシの停止、サーバーへの到達不能、認証情報の拒否を 区別します。そうでなければ原因の特定は推測に頼ることになるからです。

一日中開いていても高速なままです。 ネットワークからのバイト列はエミュレーターに 渡す前に約16 ms単位でまとめられ、描画経路ではメモリーを確保せず、すべてのバッファーには 上限があります。ウィンドウが表示されていないときはポーリングを停止し、アニメーションは transformとopacityだけに作用します。

すべてのターゲットでSwift 6の厳密な並行処理を採用し、抜け道はありません。 ネットワーク、解析、ディスク処理はアクターで行い、メインアクター上で動くのは ビューモデルだけです。

対応言語は2つです。 英語とロシア語に対応し、どちらもString Catalogを使っています。 ハードコードされたインターフェース文字列は1つもありません。リンターがチェックします。


状況

ビルド済みで動作し、179 件のテストがすべて成功しています。ロック、ホスト、永続セッション対応のターミナル、ファイル、Docker、モニター、キー、プロビジョニング、AI アクティビティ、設定の 11 画面を備えています。インターフェースはロシア語と英語に対応しています。

実サーバーで動作する機能:ホストごとに 1 つの多重化接続を使った SSH、コンテナ一覧と操作、ストリーミングログ、/proc メトリクス、authorized_keys の読み取りと編集、プロビジョニングレシピ、両方のファイルペイン、同じソケットを使う対話型シェルです。

MCP はエンドツーエンドで動作します。phosphor-mcp シムがバンドルに含まれており、stdio 経由で JSON-RPC を話し、アプリが所有するローカルソケットにプロキシします。すべてのホストは無効の状態で開始し、書き込みには人による判断が必要です。拒否リストはすべてのモードに優先し、監査ログには書き込みツールがありません。モデルは操作できますが、その痕跡を消すことはできません。

ホストは ~/.ssh/config、known_hosts、Termius の保管庫からインポートできます。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 をダウンロードし、アプリを Applications にドラッグしてください。

macOS は初回起動時に警告を表示します。 アプリはアドホック署名されており、Apple Developer 証明書が使われていないため、インターネットからダウンロードしたものはすべて隔離されます。これは破損ではありません。

  1. アプリをダブルクリックし、警告を閉じます。
  2. システム設定 → プライバシーとセキュリティ → 下にスクロール → このまま開く。
  3. 確認します。次回からは尋ねられません。

上記の xattr コマンドを使えば、同じ操作を 1 ステップで実行できます。

各リリースには SHA256SUMS.txt が含まれています。shasum -a 256 -c SHA256SUMS.txt で検証してください。

アプリ内アップデーターはまだありません。リリースページを確認してください。実行中のバージョンは「情報」パネルに表示されます。

はじめに

初回起動時のガイド付きウォークスルー: docs/GUIDE.ru.md (ロシア語)、docs/GUIDE.en.md(英語)。

AI エージェント向け

各リリースには 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 にあります。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。