termdesk
TermDesk
クロスプラットフォームのSSH + SFTP + VNC + RDPデスクトップクライアント — マルチタブターミナル、ストリーミングファイル転送、リモートデスクトップ(SSH経由のVNC、およびネイティブRDP)を1つのウィンドウに。
ステータス: 出荷中 — 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: SentryFrogg MCP Server
🏗 アーキテクチャ
すべての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-sqlite3ABIの手順を含む完全な開発セットアップについては、CONTRIBUTING.mdを参照してください。
Script | What it does |
| electron-vite dev server + Electron window |
| preflight: Node, toolchain, better-sqlite3 ABI, Linux keyring |
| typecheck (TS strict) + production build to |
| biome check (format + lint) |
| vitest (unit + integration) |
| vitest with v8 coverage |
| 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 -dService | Endpoint | Credentials |
SSH |
|
|
VNC |
|
|
E2Eスモークハーネス
5つの自己完結型エンドツーエンドスイートが実際のElectronアプリ内で実行されます(最初の4つはdockerコンテナに対して、MCPスイートは外部サービスを必要としません)。各スイートは成功時に *_OK マーカーを出力します:
Command | Proves | Verified result |
| シークレットは永続化前に |
|
| パスワード、鍵、鍵+暗号化パスフレーズによる実際のログイン |
|
| RSS監視による1GBのアップロード+ダウンロード(ピーク259MB — 300MBの予算内)と500ファイルのフォルダアップロード |
|
| 直接およびSSHトンネル経由の両方でのRFBハンドシェイク、偽造トークン接続の拒否、トークンの使い捨て |
|
| トークンで保護されたMCPサーバーがループバック上で起動し、偽造ベアラートークンは拒否されます |
|
✅ テスト
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を実行してください):
高(行数):
shared97.1% — すべてのプロセスが依存するZod IPCコントラクト —renderer/lib97.5%、main/store81.4%(db、hosts-repo、settings、snippets-repoは100%またはそれに近い)、ssh-util100%、~/.ssh/configパーサーとそのIncludeリゾルバーは90%台後半。低く、代わりにスモークテストでカバー:
main/ipcハンドラーのグルーコード 9.8%、session-managerとsftp-manager/transfer-manager0%、vnc-managerとUIシェル(SftpTab、TerminalView、VncTab、レイアウト、サイドバーパネル)は低いかゼロ。これらはプロセスグルーコードとElectron/DOMシェルであり、TERMDESK_SMOKEハーネスが実サーバーに対してエンドツーエンドで実行します。エントリポイントと*-smoke.tsファイルは設定によりカバレッジから除外されています。
ビルド+型チェック+リントはクリーンで、ヘッド付き開発起動ではエラー行がゼロです。
⌨️ キーボードショートカット
Shortcut | Action |
| コマンドパレット(ファジーホスト検索+コマンド) |
| 新規セッション(パレットを開く) |
| アクティブなタブを閉じる |
| ターミナル内を検索 |
| ターミナルでコピー/ペースト |
⚙️ 設定
テーマ(ダーク、ライト、またはシステム — 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の下でここに公開されています。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.
Scoped, audited SSH exec, sessions, and SFTP on your saved servers without exposing credentials
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Authenticated MCP server for ClearPolicy policy and compliance workflows.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables SSH interactive session management through MCP, supporting commands, menus, and session lifecycle operations.1
- AlicenseAqualityDmaintenanceProvides a governed command plane for MCP agents to manage PostgreSQL databases, SSH sessions, and HTTP APIs with encrypted credential storage and prescriptive workflows.3MIT
- AlicenseNot gradedqualityBmaintenanceMCP 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
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to securely execute remote commands and transfer files over SSH through standardized MCP tools, with multi-host management, flexible authentication, and an admin console.ISC
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/konraddzbik/termdesk'
If you have feedback or need assistance with the MCP directory API, please join our Discord server