Skip to main content
Glama
termdesk

termdesk

by konraddzbik

TermDesk

クロスプラットフォームのSSH + SFTP + VNC + RDPデスクトップクライアント — マルチタブターミナル、ストリーミングファイル転送、リモートデスクトップ(SSH経由のVNC、およびネイティブRDP)を1つのウィンドウに。

Electron React TypeScript CI License

ステータス: 出荷中 — SSHターミナル、SFTP、SSH経由のVNC、ネイティブRDP、MCPエージェントアクセス、SSHトンネルマネージャー、フリート自動化、ターミナルプログラムを選択できるローカルターミナル(ログインシェル / tmux / Zellij / screen / 代替シェル)、Prompt Book + スケジュール済みRoutines、設定、コマンドパレット、パッケージング。


✨ 機能

  • 🖥️ 柔軟なホスト — 作成時にSSHのみ、VNCのみ、または複合ホストを作成できます。SSHとVNCはそれぞれ独立してオプションです。純粋なVNCホストは直接TCPまたはSSHトンネル接続をサポートします(SSH認証情報なしでトンネルしようとすると明確なエラーが表示されます)。UIアクション、コマンドパレット、テストボタンはホストの種類に応じて適応します。

  • 🖥️ マルチタブSSHターミナル — 検索、コピー/ペースト、リサイズ対応のxterm.js(WebGL)。同じまたは異なるホストへの多数の並列セッション。ターミナルが接続するまで初期出力はバッファリングされるため、MOTD/バナーが失われることはありません。

  • 📁 ストリーミング転送キュー付きSFTP — リモートファイルブラウザ、ドラッグ&ドロップ(再帰的フォルダアップロード)、メモリを一定に保つチャンク単位のストリーミング、キャンセル/再試行、保存時に自動アップロードされるインプレース編集。

  • 🔒 SSH経由のVNC — noVNCをアプリ内でレンダリングし、使い捨ての30秒トークンで保護されたループバックWebSocketブリッジ経由で供給。デフォルトのトランスポートはSSH forwardOut トンネルなので、ポート5900が公開されることはありません。VNCのみのホストではダイレクトモードもサポートされています。

  • 🖥️ RDP — プロセス内RDCleanPathプロキシ(VNCブリッジと同じ使い捨て30秒トークン、オリジンチェック、TLS終端の形状)を介して供給されるIronRDP WASMクライアント経由で、アプリ内からWindows/RDPホストに接続。**初回使用時信頼(TOFU)**によるサーバー証明書のピン留め付き。

  • 🔐 暗号化ボールト — ホスト、グループ、スニペット、known hostsをSQLiteに保存。パスワード/パスフレーズはメインプロセスに届いた瞬間にOSキーチェーンをバックエンドとする safeStorage で暗号化されます。

  • 🛡️ ホストキー検証 — 初回接続時のSHA256フィンガープリント承認ダイアログ、同タイプのキー変更時のハードブロック、既知のホストがこれまで信頼されたことのないキー/タイプを提示した場合の明確で目立つ「中間者攻撃の可能性」警告。

  • 🪜 ProxyJump — チェーンされた forwardOut によるマルチホップチェーン(user@jump:port,next)。

  • 🔌 SSHトンネルマネージャー — サイドバーパネルから**ローカル(-L)ポートフォワードとダイナミックSOCKS5(-D)**プロキシを定義、永続化、開始/停止でき、ライブステータスドット+スループットを表示。可能な場合は開いているターミナルの接続を再利用。破壊的操作なし、所有者スコープ、ログ記録。 docs/TUNNELS.md を参照。

  • 🪟 分割ペイン — 2つのセッションを並べてまたは上下に表示(タブまたは分割ツールバーをAltクリック)、ドラッグ可能なディバイダー付き。マルチホスト自動化と組み合わせるとライブ監視グリッドとして最適です。

  • 💻 ローカルターミナル — 自分のマシン上の node-pty シェルタブ。作業ディレクトリを保存可能 — SSHは不要。接続時にホストごとのデフォルトリモートパスが尊重されます。

  • 🧩 ターミナルプログラムを選択 — ターミナルを開いたときに実行するものを選択(設定 → 一般): デフォルトのログインシェル、マルチプレクサ(tmux、Zellij、GNU Screen — 再起動/切断後も維持)、または代替シェル(bash、zsh、fish、PowerShell、Nushell)。マシン上で検出されたプログラムのみ選択可能。この選択はローカルターミナルとSSHセッションの両方に適用されます(リモートに存在する場合はそれを実行し、それ以外の場合はプレーンシェル)。

  • 🚀 外部ターミナルで開く — 現在のディレクトリをお気に入りのGUIターミナル — Ghostty、Warp、iTerm2、kitty、Alacritty、WezTerm、GNOME Terminal、Konsole、Windows Terminal — に引き渡します。マシン上で検出され、保存済みのデフォルト(設定 → 一般)を使用。⌘Kまたは任意のローカルターミナルタブのワンクリックボタンから。

  • ⚡ フリート自動化 — SSHホストのグループ全体に対してスニペットまたはコマンドを一度に実行し、ホストごとのライブストリーミング出力を表示。

  • 🕘 アクティビティログ — 接続/切断、SFTP/VNCのオープン、自動化の実行のローカルタイムライン。メタデータのみ: 秘密情報を含むコマンドトークンは編集され、エントリは90日後に削除されます。

  • 🎨 ターミナルカラースキーム — 内蔵のDracula、Solarized Dark、Gruvbox、One Dark、Nord(デフォルトに加えて)。好みに応じて選択可能。

  • 🧱 カスタマイズ可能なサイドバー — 左サイドバーの各セクション(ホスト、ローカルターミナル、ワークスペース、トンネル、スニペット、Prompt Book、Routines)を設定 → 一般またはサイドバーのカスタマイズボタンから表示/非表示にできます。選択は永続化され、デフォルトではすべて表示されます。

  • 🧩 Prompt Book — AIエージェント向けの再利用可能なテンプレート化プロンプト。プロンプトは {{variable}} プレースホルダー(オプションで {{name:default}} / {{name|description}})を持つプレーンテキストです。実行すると値の入力を求め、ライブプレビューを表示し、レンダリングされたテキストをアクティブターミナル(SSHまたはローカル)に送信するか、選択したディレクトリでAIエージェント — Claude Code、Aider、OpenCode、Codex、Gemini — で起動します。テンプレート化は純粋な置換(evalなし)で、プロンプトは単一の引用符付き引数として渡されるため、シェルのメタ文字は無効化されます。

  • 🔁 Routines — 「このプロンプト を このエージェント で このディレクトリ で実行」する保存済みジョブ。オンデマンドまたはスケジュール(間隔 / 毎日 / cron)で実行され、それぞれに独自の実行履歴があります。RoutinesはTermDeskが開いている間に実行され、アプリが閉じている間に逃した実行は、すべての逃したスロットを一斉に実行するのではなく、次回起動時に1回だけキャッチアップします。無人での自律実行はオプトインで、デフォルトではオフです。保存された実行サマリーは秘密情報が編集されます。

  • 📋 スニペット — アクティブセッションに送信する保存済みコマンド。

  • ⌨️ コマンドパレット — ⌘/Ctrl+K ファジーホスト検索 + すべてのコマンド(ターミナル、SFTP、VNC、自動化、ログ)。? を押すとショートカットのチートシートが表示されます。

  • ⚙️ 設定 — テーマ(ダーク / ライト / システム、OSに追従)、ターミナルのフォント + カラースキーム、右クリックで貼り付けの動作、SSHキープアライブ。プレーンなJSONで、秘密情報は含まれません。

  • 🤖 AIエージェントアクセス(MCP) — Claude、Cursor、Grok、または任意のMCPクライアントにTermDeskを使用させることができます: ホストの一覧表示、コマンドの実行、フリート全体へのファンアウト。エージェントは鍵ではなく手を取得します — 認証情報はメインプロセスに留まり、すべてのアクションはホストごとのオプトイン + 承認ゲート付きで、AIアクティビティログにライブ表示されます。デフォルトではオフ。 docs/MCP-INTEGRATION.md を参照。

  • 🏠 ローカルファースト — ホスト、キー、履歴がマシンの外に出ることはありません。必須のクラウドアカウントもテレメトリもありません。

Related MCP server: mcp-ssh-fleet

🏗 アーキテクチャ

すべてのSSH/SFTP/VNCロジックはメインプロセスにあります。レンダラーは完全にサンドボックス化され(contextIsolation: true、nodeIntegration: false、sandbox: true)、型付けされたZod検証済みのIPCコントラクト(src/shared/ipc.ts)を通じてのみ通信します。

flowchart LR
    subgraph R["Renderer (sandboxed, no Node)"]
        UI["React 19 UI<br/>zustand stores"]
        XT["xterm.js<br/>terminal"]
        NV["noVNC<br/>RFB client"]
    end

    subgraph M["Main process"]
        IPC["Typed IPC<br/>Zod-validated contracts"]
        SM["SessionManager<br/>(ssh2: shell, agent,<br/>keys, ProxyJump)"]
        SF["SftpManager +<br/>TransferManager<br/>(streaming queue)"]
        WB["ws-bridge<br/>127.0.0.1, random port,<br/>single-use 30s tokens"]
        VA[("Vault<br/>better-sqlite3 + Drizzle<br/>secrets via safeStorage")]
    end

    RH[("Remote host<br/>sshd · sftp · vncserver")]

    UI <-->|"invoke/handle"| IPC
    XT <-->|"ssh:data:#lt;sessionId#gt; stream"| IPC
    IPC <--> SM
    IPC <--> SF
    SM --- VA
    SF --- SM
    NV -->|"ws://127.0.0.1:#lt;port#gt;/#lt;token#gt;"| WB
    WB -->|"variant B (default):<br/>ssh2 forwardOut → :5900"| SM
    WB -.->|"variant A (opt-in):<br/>direct TCP → :5900"| RH
    SM <-->|"SSH"| RH

「秘密情報はメインに留まる」に対する2つの意図的な例外: 保存されたVNCパスワード(RFB認証情報ハンドシェイク用)と保存されたRDPパスワード(IronRDPクライアント用)はメインで復号化され、レンダラーに返されます。どちらも現在、開いているタブにバインドされておらず、レート制限もありません — 既知の制限 を参照。

🚀 クイックスタート

TermDeskは現在ソースから実行します。konraddzibk/termdesk にはタグもGitHub Releasesもありません。そのため、Releasesページからダウンロードできるものはまだありません — INSTALL.md を参照。

Node.js >=22.12.0 と npm 10+、さらにネイティブモジュールをコンパイルするためのC/C++ツールチェーン(Xcode Command Line Tools / build-essential / Visual Studio C++ build tools)が必要です。Linuxではロック解除されたOSキーリング(gnome-libsecretまたはkwallet)も必要です — TermDeskはElectronの安全でない basic_text フォールバックを使用せず、フェイルクローズするため、キーリングがないとホストのパスワードを保存できません(SECURITY.md)。

npm install        # also applies the better-sqlite3 patch + rebuilds native deps
npm run dev        # electron-vite dev server + Electron window, HMR

初回実行: npm install && npm run dev で使用可能なアプリが開きます — ライセンスチェックもシートもアカウントもありません。npm test を実行する前に必要な better-sqlite3 ABIの手順を含む完全な開発セットアップについては、CONTRIBUTING.md を参照してください。

Script

What it does

npm run dev

electron-vite dev server + Electron window

npm run doctor

preflight: Node, toolchain, better-sqlite3 ABI, Linux keyring

npm run build

typecheck (TS strict) + production build to out/

npm run lint / lint:fix

biome check (format + lint)

npm test

vitest (unit + integration)

npm run test:coverage

vitest with v8 coverage

npm run dist

build + electron-builder (dmg / NSIS / AppImage)

npm run dist はホストOS用の署名なしインストーラーを生成します(Apple Silicon macOSでは dist/TermDesk-<version>-arm64.dmg、さらにクロスビルドされたx64 .dmg)。何も公開しません。ソースからのセットアップ、ローカルアーティファクト名、将来のGitHub Releaseの切り方については INSTALL.md を参照。

🧪 開発テスト環境

単一のDockerコンテナがローカルテスト用にSSH + TigerVNCを提供します — 実際のサーバーは不要です:

npm run test:keys                                  # throwaway SSH keys (untracked)
docker compose -f docker-compose.test.yml up -d

Service

Endpoint

Credentials

SSH

127.0.0.1:2222

testuser / testpass123, or the generated keys in .test/ (test_key, test_key_enc)

VNC

127.0.0.1:5901 (direct or via the SSH tunnel — same container)

testvncpass

E2Eスモークハーネス

5つの自己完結型エンドツーエンドスイートが実際のElectronアプリ内で実行されます(最初の4つはdockerコンテナに対して、MCPスイートは外部サービスを必要としません)。各スイートは成功時に *_OK マーカーを出力します:

Command

Proves

Verified result

TERMDESK_SMOKE=vault npx electron .

シークレットは永続化前にsafeStorageで暗号化され、SQLiteに平文は存在せず、レンダラーに返されることもありません

VAULT_SMOKE_OK

TERMDESK_SMOKE=ssh npx electron .

パスワード、鍵、鍵+暗号化パスフレーズによる実際のログイン

SSH_SMOKE_OK

TERMDESK_SMOKE=sftp npx electron .

RSS監視による1GBのアップロード+ダウンロード(ピーク259MB — 300MBの予算内)と500ファイルのフォルダアップロード

SFTP_SMOKE_OK

TERMDESK_SMOKE=vnc npx electron .

直接およびSSHトンネル経由の両方でのRFBハンドシェイク、偽造トークン接続の拒否、トークンの使い捨て

VNC_SMOKE_OK

TERMDESK_SMOKE=mcp npx electron .

トークンで保護されたMCPサーバーがループバック上で起動し、偽造ベアラートークンは拒否されます

MCP_SMOKE_OK

✅ テスト

npm test                # unit + integration suite (vitest) — all green on main
npm run test:coverage   # v8 line coverage report into coverage/

Vitestはレンダラーテストをjsdom(Testing Library)で実行し、その他はすべてnodeで実行します。カバレッジは重要な箇所に集中しています。純粋なロジックは高く、プロセスグルーコードとUIシェルはユニットテストではなく5つのe2eスモークテストでカバーされています(以下のパーセンテージは目安であり、固定値ではありません。最新の数値はnpm run test:coverageを実行してください):

  • 高(行数): shared 97.1% — すべてのプロセスが依存するZod IPCコントラクト — renderer/lib 97.5%、main/store 81.4%(db、hosts-repo、settings、snippets-repoは100%またはそれに近い)、ssh-util 100%、~/.ssh/configパーサーとそのIncludeリゾルバーは90%台後半。

  • 低く、代わりにスモークテストでカバー: main/ipcハンドラーのグルーコード 9.8%、session-managerとsftp-manager/transfer-manager 0%、vnc-managerとUIシェル(SftpTab、TerminalView、VncTab、レイアウト、サイドバーパネル)は低いかゼロ。これらはプロセスグルーコードとElectron/DOMシェルであり、TERMDESK_SMOKEハーネスが実サーバーに対してエンドツーエンドで実行します。エントリポイントと*-smoke.tsファイルは設定によりカバレッジから除外されています。

ビルド+型チェック+リントはクリーンで、ヘッド付き開発起動ではエラー行がゼロです。

⌨️ キーボードショートカット

Shortcut

Action

⌘/Ctrl+K

コマンドパレット(ファジーホスト検索+コマンド)

⌘/Ctrl+T

新規セッション(パレットを開く)

⌘/Ctrl+W

アクティブなタブを閉じる

⌘/Ctrl+F

ターミナル内を検索

⌘/Ctrl+Shift+C/V

ターミナルでコピー/ペースト

⚙️ 設定

テーマ(ダーク、ライト、またはシステム — OSのprefers-color-schemeに従う)、ターミナルのフォントサイズ/ファミリー、SSHキープアライブ間隔 — userData/settings.jsonにプレーンなJSONとして保存されます(シークレットは含まれません)。

📡 機能詳細

SSHターミナル

  • すべてのssh2ロジックはメインプロセス(src/main/ssh/session-manager.ts)にあり、レンダラーは型付きストリームAPIのみを参照します。出力はssh:data:<sessionId>でストリーミングされ、初期出力はターミナルが接続するまでバッファリングされます。

  • 認証:ボールトパスワード(キーボードインタラクティブ方式のフォールバック付き)、秘密鍵(+暗号化パスフレーズ)、またはSSHエージェント(SSH_AUTH_SOCK、Windows OpenSSHパイプ)。シークレットは接続時にのみ復号化されます。

  • ホストキー:初回接続時にSHA256フィンガープリント承認ダイアログを表示し、known_hostsテーブルに永続化します。不一致の場合は接続をハードブロックします。

  • チェーンされたforwardOutによるProxyJumpチェーン(user@jump:port,next)、キープアライブ15秒。

SFTP

  • SFTPセッションは、同じホストへの開いているターミナルのライブSSH接続を再利用し(2回目のログインなし)、専用のシェルなし接続にフォールバックします。

  • 転送はチャンク単位でストリーミングされ(メモリは一定 — 300MB RSS未満で1GBを検証済み)、キャンセル/再試行が可能です。フォルダのドロップは構造を保持したまま再帰的にアップロードされます。

  • インプレース編集は一時ファイルにダウンロードし、OSのエディタを開いて、保存時に自動アップロードします。

VNC

  • noVNCはレンダラーで描画され、ランダムポートの127.0.0.1にバインドされたメインプロセスブリッジとWebSocketで通信します。すべての接続には使い捨ての30秒トークンが必要です — 他のローカルプロセスはブリッジを利用できません(そのためCSP内のws://127.0.0.1:*)。

  • デフォルトのトランスポートはSSH forwardOutチャネル(バリアントB — ポート5900は公開されません)で、ホストへのライブターミナル接続が存在する場合はそれを再利用します。プレーンTCP(バリアントA)はホストごとにオプトインです。

  • 保存されたVNCおよびRDPパスワードはメインプロセスで復号化され、それぞれのクライアントのためにレンダラーに返されます — 「シークレットはメインプロセスに留まる」という原則に対する文書化された2つの例外です。

  • ツールバー:ローカルスケーリング/リモートリサイズの切り替え、クリップボードペースト、Ctrl+Alt+Del、全画面表示、再接続(再接続のたびに新しいトークン+トンネルをプロビジョニング)。

ボールト

  • ホスト、グループ、スニペット、known_hostsは、アプリのuserDataディレクトリ配下のSQLite(better-sqlite3 + Drizzle)に保存されます。

  • パスワード/パスフレーズは、到着した瞬間にメインプロセスでsafeStorage(OSキーチェーンキー)を使用して暗号化されます。暗号文ブロブのみがデータベースに触れ、シークレットがレンダラーに送り返されることはありません。

  • ~/.ssh/configのインポートはHost/HostName/Port/User/IdentityFile/ProxyJumpを解析し、Includeディレクティブを解決し(チルダ/相対/絶対パスとグロブ、サイクル/深さ/サイズのガード付き)、Host */ワイルドカードのデフォルトをOpenSSHの先勝ち順序を使用して具体的なホストにマージします。

🔐 セキュリティチェックリスト

  • contextIsolation: true、nodeIntegration: false、sandbox: true — レンダラーとプリロードはNodeに一切触れません。

  • メタタグによる厳格なCSP:script-src 'self'、unsafe-evalなし、リモートモジュールなし。connect-srcは'self'とループバックWebSocket(トークンで保護されたVNCブリッジ)のみを許可します。開発専用の緩和は、逸脱時に明示的に失敗するViteプラグインを通じて行われます。

  • webSecurity: true、ナビゲーションはオリジンチェック済み、window.open拒否(外部https: → システムブラウザ)、<webview>ブロック、権限リクエストはデフォルトで拒否。

  • すべてのIPCペイロードはZodで検証されます(src/shared/ipc.tsが単一のコントラクト)。invoke結果はIpcInvokeMapを介してエンドツーエンドで型付けされます。

  • シークレット(SSH/VNCパスワード、鍵パスフレーズ)は、到着した瞬間にメインプロセスでsafeStorageを使用して暗号化されます。暗号文のみが永続化され、復号化は接続時に行われ、参照は即座に破棄されます。TERMDESK_SMOKE=vaultで検証済み。文書化された2つの例外:VNCおよびRDPパスワードは、それぞれのプロトコルクライアントのためにレンダラーに渡されます(既知の制限を参照)。

  • IPCを越えるエラーはサニタイズされます(最初の行のみ、スタック/パスなし)。シークレットがログに記録されることはありません。

  • セッション、SFTPハンドル、転送、ホストキープロンプトは、それらを作成したWebContentsに所有者スコープされ、その破棄時にティアダウンされます。

  • ホストキー:初回接続時のSHA256フィンガープリント承認、不一致時のハードブロック — 最終ターゲットおよびすべてのProxyJumpホップに対して。

  • アクティビティログはメタデータのみ:OSユーザー名、シークレットを含むコマンドトークンは編集され、90日でパージされます。

  • オプションのマスターパスワード(Argon2id派生の第2暗号化レイヤー)— 延期され、将来の機能強化として追跡されています。

完全なセキュリティモデル、既知の制限、脆弱性開示ポリシーについてはSECURITY.mdを参照してください。

📂 プロジェクト構造

src/
  main/                  # Electron main process — all SSH/SFTP/VNC logic lives here
    ipc/                 # IPC handlers per domain (ssh, sftp, vnc, hosts, …)
    ssh/                 # session-manager, ssh-config-parser, ssh-util (+ smoke)
    sftp/                # sftp-manager, transfer-manager, edit-watch (+ smoke)
    vnc/                 # ws-bridge, vnc-manager (+ smoke)
    store/               # Drizzle + better-sqlite3, secrets (safeStorage), settings
  preload/               # contextBridge — typed, minimal API surface (window.api)
  renderer/              # React UI (no Node access)
    components/{layout,hosts,terminal,sftp,vnc,snippets,ui}/
    hooks/  stores/  lib/
  shared/                # IPC channel contracts + Zod schemas shared by all processes

🗺 既知の制限 / ロードマップ

  • マスターパスワード — ボールトに対するオプションのArgon2id派生第2暗号化レイヤー。延期。

  • Playwrightスモークテスト(アプリ起動→ホスト追加→モック接続)— 延期。現在は5つのTERMDESK_SMOKEハーネスがe2eをカバーしています。

  • ~/.ssh/configのインポート — Matchブロックとトークン展開(%h/%p)はまだスキップされます。クラウドプロバイダーのインベントリインポート(AWS/GCP)は未実装です。

ハードニングのロードマップについてはSECURITY.mdを参照してください。

🔧 ネイティブモジュールに関する注意

  • better-sqlite3はElectronのV8に対してコンパイルするためにソースパッチが必要です(上流のプリビルドはまだありません)— npm install時にpatch-packageによって自動的に適用されます(patches/better-sqlite3+12.10.0.patch)。

  • cpu-features(オプションのssh2ネイティブ依存)は、不要なネイティブビルドを避けるためにpackage.jsonでnoop2にオーバーライドされています。ssh2は純粋なJSパスにフォールバックします。

🤝 コントリビューション

Issueとプルリクエストを歓迎します。外部からのインストール、パッケージ、コントリビューターセットアップの提供計画はdocs/OSS-DELIVERY-PLAN.mdにあります。CONTRIBUTING.mdには開発セットアップ — そうでなければ午後を費やすことになる2つのネイティブモジュールの落とし穴を含む — 新しいコードが守るべき不変条件、およびPR前のチェックリストがあります。コントリビューションはインバウンド=アウトバウンドMITです:CLAなし、著作権譲渡なし。

参加は行動規範に従います。セキュリティ問題はSECURITY.mdのプライベートチャネルを通じて報告されます。公開のIssueで報告されることはありません。

📄 ライセンス

このリポジトリのソースはMITライセンスの下で公開されています — LICENSEを参照してください。著作権表示とライセンス文が同梱される限り、商用を含め、使用、変更、再配布が可能です。

Releasesページにプリビルドインストーラが存在する場合、それらは追加でEULA.txtの対象となり、そのバイナリを規定します。現在GitHub Releasesはないため、このソースから自分でビルドしたものはLICENSEのみに従います。

このクライアントにはライセンスチェック、シートアクティベーション、アカウントはありません。商用ライセンスサブシステムはソース公開時に削除されたため、このリポジトリからビルドしたものは完全なアプリケーションです。

その境界はここに記述されているだけでなく、コードでも強制されています。初回実行時のEULAプロンプトはプロジェクト自身のリリースビルドにのみコンパイルされるため、フォークのnpm run dist、ディストリビューションパッケージ、または独自のインストーラでは表示されません。

サードパーティの依存関係はそれぞれのライセンスを保持し、THIRD-PARTY-NOTICES.mdに一覧表示されています。1つは言及に値する義務を負っています:@novnc/novncはMPL-2.0であり、このリポジトリはそれをパッチしています(patches/@novnc+novnc+1.7.0.patch)。そのため、その変更は他のソースとともにMPL-2.0の下でここに公開されています。

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables SSH interactive session management through MCP, supporting commands, menus, and session lifecycle operations.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server that provides SSH tools (read-only probes and arbitrary exec) to a fleet of hosts outside Kubernetes, with an inventory-based allowlist and key-based authentication.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP clients to run shell commands on the host and retrieve exit code, stdout, and stderr, with hardened authentication and an encrypted audit log.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to manage an entire fleet of servers over SSH through MCP, fanning a single intent out across many hosts with target expressions while enforcing a policy engine, approval gates, and tamper-evident audit logs. Supports rolling execution with circuit breakers, cross-host diffing, bulk file transfer, tmux sessions, and YAML workflows.
    20 npm
    18
    AGPL 3.0