Dokku Mcp Server について
Dokku Mcp Serverは、LLM経由でDokkuインスタンスを管理したい開発者向けのGo製MCPサーバーです。プラグイン単位のツールを提供し、stdioとSSEに対応します。プロジェクトは初期開発段階です。
主な機能
- 01MCP経由でDokkuを管理
- 02プラグイン別のツール
- 03stdioとSSEのトランスポート
- 04設定可能なSSH接続
- 05ツールへのセキュリティ注釈
活用シーン
- 01MCPクライアントからDokkuインスタンスを管理
- 02MCP Inspectorでツールやリソースを確認
- 03ローカルDokku環境で統合テストを実行
MCP 対応
利用可能なリソース、プロンプト、ツールとともにDokkuの管理機能をMCPクライアントに公開します。stdioとHTTPベースのSSEに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Dokku MCP サーバー
Dokku 用の Model Context Protocol(MCP) サーバーです。Go で書かれています。
バージョン:リリースを参照してください(dokku-mcp --version)
このサーバーは、標準化された Model Context Protocol(MCP)を通じて Dokku の管理機能を公開し、大規模言語モデル(LLM)が Dokku インスタンスと対話し、管理できるようにします。
⚠️ 初期開発段階:このプロジェクトは開発の初期段階にあります。破壊的変更が予想されるため、本番環境での使用は推奨されません。
今すぐ試す — Dokku インスタンスを AI で管理できる PaaS にする
インストール方法に従うか、ビルド済みバイナリを入手すれば、cursor、claude-code、goose、および MCP に対応するすべてのエージェント型ツールですぐに使い始められます。
すでにローカルに Go がインストールされている場合は、make startを実行してください。
MCP Inspector プレイグラウンド
MCP クライアント全体を設定せずにサーバーを手早く試すには、専用の make ターゲットを使用します。
make inspect
必要に応じてバイナリをビルドし、MCP Inspector CLI を起動して、stdio モードでサーバーに接続します。Inspector はローカル URL を表示します。その URL をブラウザーで開くと、リソース、プロンプト、ツールを確認したり、任意の呼び出しを実行したりできます。Dokku MCP を Cursor、Claude、その他の IDE や社内ツールに接続する前に設定を検証するのに最適です。
MCP クライアントの接続
このサーバーは、MCP 互換の任意のクライアントで使用できます。
以下の内容を zed、.cursor/mcp.json、windsurf、claude_desktop_config.json、または .mcp.json に追加します。
{
"mcpServers": {
"dokku": {
"command": "/home/user/dokku-mcp/build/dokku-mcp",
"args": [],
"env": {
"DOKKU_MCP_SECURITY_BLACKLIST": "destroy,uninstall,remove",
"DOKKU_MCP_SSH_HOST": "127.0.0.1",
"DOKKU_MCP_SSH_KEY_PATH": "/home/user/.ssh/id_rsa",
"DOKKU_MCP_SSH_PORT": "22",
"DOKKU_MCP_SSH_USER": "dokku"
}
}
}
}
command のパスは、バイナリへの絶対パスに置き換えてください。
ツール
ツールはプラグインごとに分類されています。Dokku プラグイン(例:Let's Encrypt)に関連するプラグインは、そのプラグインがインストールされている場合にのみ表示されます。各ツールには MCP アノテーション(タイトル、読み取り専用、破壊的、冪等)が付与されており、新しいツールは出力スキーマを備えた構造化コンテンツを返します。
| 分野 | ツール |
|---|---|
| アプリケーション | create_app、deploy_app、rollback_app、scale_app、configure_app、get_app_status、restart_app、stop_app、start_app |
| デプロイ | get_deployment_status、list_deployments |
| ログ | get_runtime_logs、follow_runtime_logs(ライブ。進行状況通知としてストリーミング)、「get_failed_deploy_logs」 |
| データストア | list_services、create_service、get_service_info、link_service、unlink_service、get_service_logs、destroy_service(postgres、mysql、mariadb、redis、mongo、rabbitmq、memcached、clickhouse、elasticsearch) |
| ドメイン | get_app_domains、add_app_domain、remove_app_domain、list_global_domains、add_global_domain |
| HTTPS | get_letsencrypt_status、enable_letsencrypt、disable_letsencrypt、set_letsencrypt_email |
| アクセス | list_ssh_keys、add_ssh_key、remove_ssh_key、get_registry_report、registry_login、registry_logout |
| サーバー | get_server_logs(expose_server_logs を有効にした場合のみ) |
リソースには、dokku://onboarding/quickstart(まずはこちら)、dokku://onboarding/capabilities、dokku://onboarding/intent-map、dokku://core/server/info、dokku://app/{name}/logs が含まれます。app_doctor プロンプトは、アプリケーションの診断を順を追って案内します。
デプロイは非同期です。コードの同期が完了すると deploy_app は deployment_id を返し、get_deployment_status はビルド結果とビルドログの末尾を報告します。
セキュリティ
サーバーは設定された鍵を使って SSH 経由で Dokku コマンドを実行するため、その鍵と同じように扱ってください。
- 引数の安全性。 Dokku の SSH コマンドは引数を単語ごとに分割するため、すべての引数がシェルで安全な文字セットに照らしてチェックされます。自由形式の値(環境変数、レジストリーのパスワード、SSH 公開鍵)は、コマンドラインに埋め込まず、Base64 エンコードするか、標準入力経由で送信します。
- 許可リスト/拒否リスト。
security.allowlistを設定すると、一致するコマンド("apps:"、"config:*"、"logs"など)のみにサーバーの使用を制限できます。security.blacklistを設定すると、パターン(destroy、uninstallなど)を含むコマンドがブロックされます。どちらも、カンマ区切りのリストとしてDOKKU_MCP_SECURITY_ALLOWLIST/DOKKU_MCP_SECURITY_BLACKLISTで設定できます。 - 出力内のシークレット。 データストアの接続 URL とパスワードは、ツールの結果内でマスキングされます。
- 安全策。
destroy_serviceではサービス名を再度指定する必要があります。add_ssh_keyは、allow_adminが設定されていない限り、名前にadminを含むものを拒否します(Dokku では、この名前を使うと追加の鍵を登録できるためです)。 - リモートトランスポート。 SSE トランスポートには、まだ認証がありません。信頼できるネットワーク上、または認証機能を持つプロキシの背後でのみ公開してください。
ロードマップ
優先順位の変更を提案する場合は、イシューを送信してください
NEXT
- ストリーマブル HTTP トランスポートと認証:SSE を置き換え、ベアラートークン/OAuth のサポートとトークンごとのスコープを追加します。
- 破壊的なツールの確認:破棄/停止/削除操作に MCP エリシテーションを使用します。
- 配布:Docker イメージ、Homebrew tap、およびホスト上でサーバーを実行する Dokku プラグイン。
IDEAS
- リリース履歴:ロールバック時に過去のリリースを選べるよう、永続的なデプロイログを保持します。
- Dokku プラグインの追加:ポート、チェック、cron、ストレージマウント。
Dokku 連携
- 実装済み:
apps:list、apps:info、apps:create、apps:exists、apps:report、config:show、config:set --encoded、ps:scale、ps:report、ps:rebuild、ps:restart、ps:stop、ps:start、git:sync、logs(-tによる追跡を含む)、logs:failed、domains:report、domains:add、domains:remove、domains:add-global、letsencrypt:*、<datastore>:create/info/list/link/unlink/links/logs/destroy、ssh-keys:list/add/remove、registry:login/logout/report、plugin:list、version、proxy:report、scheduler:report、git:report。 - 未実装/一部実装:
ports:*、checks:*、storage:*、cron:*、データストアのバックアップ。
貢献 — イシューの報告または機能の提案
🪿 イシュー内で Goose AI にヘルプを求める
dokku-mcp プロジェクトでサポートが必要ですか?Goose AI が支援します!GitHub のイシューまたはプルリクエストに :goose ラベルを付けるだけで、Goose AI に通知され、開発、デバッグ、機能の実装、その他プロジェクト関連の作業を支援します。
目次
インストール
ビルド済みバイナリ
お使いのプラットフォーム向けの最新リリースをダウンロードしてください:
# Linux (amd64; also available: arm64, arm)
curl -L -o dokku-mcp https://github.com/dokku-mcp/dokku-mcp/releases/latest/download/dokku-mcp-linux-amd64
chmod +x dokku-mcp
sudo mv dokku-mcp /usr/local/bin/
# macOS (amd64; also available: arm64)
curl -L -o dokku-mcp https://github.com/dokku-mcp/dokku-mcp/releases/latest/download/dokku-mcp-darwin-amd64
chmod +x dokku-mcp
sudo mv dokku-mcp /usr/local/bin/
圧縮アーカイブ(dokku-mcp-<os>-<arch>.tar.gz)も各リリースとともに公開されます。
MCP Bundle
安定版リリースごとに、macOS および Linux 向けの MCP Bundle である dokku-mcp.mcpb も配布されます。Claude Desktop などの MCP クライアントは、Dokku のホスト、SSH ユーザー、ポート、キーを尋ねるだけで、ワンステップでインストールできます。同じバンドルは、公式 MCP Registry に io.github.dokku-MCP/dokku-mcp として公開されています。
インストールの確認
dokku-mcp --version
ソースからビルドする
ソースからビルドする場合は、次の手順に従ってください。
-
前提条件:
- Go(バージョン 1.26 以降)
-
クローンしてビルドする:
git clone https://github.com/dokku-mcp/dokku-mcp.git cd dokku-mcp make build
設定
サーバーは、config.yaml ファイルまたは環境変数を使って設定できます。
設定ファイル
次のいずれかの場所に設定ファイルを作成します。
- システム全体:
/etc/dokku-mcp/config.yaml - ユーザー固有:
~/.dokku-mcp/config.yaml - ローカル: バイナリと同じディレクトリにある
config.yaml。
最小限の config.yaml の例を示します。
ssh:
host: "your-dokku-host.com"
user: "dokku"
# key_path: "/path/to/your/ssh/private/key" # Optional, uses ssh-agent if empty
log_level: "info"
利用可能なオプションの全一覧については、config.yaml.example ファイルを参照してください。
環境変数
すべての設定は、DOKKU_MCP_ をプレフィックスとする環境変数で上書きできます。ネストされたキーにはアンダースコアを使用し(ssh.host → DOKKU_MCP_SSH_HOST)、リストはカンマ区切りで指定します。例:
export DOKKU_MCP_SSH_HOST="your-dokku-host.com"
export DOKKU_MCP_SSH_USER="dokku"
export DOKKU_MCP_LOG_LEVEL="debug"
export DOKKU_MCP_SECURITY_ALLOWLIST="apps:,config:,ps:,git:sync,logs,version"
サーバーの実行
設定が完了したら、サーバーを実行できます。
dokku-mcp
サーバーが起動し、MCP クライアントからの接続を受け付ける準備が整います。
ローカルでの Dokku 開発
リモートの Dokku インスタンスを使わずに開発やテストを行うには、Docker を使ってローカルの Dokku サーバーを実行できます。
前提条件:
-
ローカルの Dokku コンテナをセットアップする:
このコマンドは、必要な Docker イメージをダウンロードし、ローカルの Dokku インスタンスを設定します。一度だけ実行すれば十分です。
make setup-dokku make dokku-start -
ローカルの Dokku コンテナを停止する:
make dokku-stop
ローカルの Dokku コンテナが実行中であれば、MCP サーバー(デフォルト設定)は接続できるはずです。このローカルインスタンスに対して統合テストを実行できます。
トランスポートモード
サーバーは、クライアント向けに次の 2 つのトランスポートモードをサポートしています。
stdio(デフォルト): プロセス間の直接通信に使用する標準入力/標準出力。sse(Server-Sent Events): Web クライアント向けの HTTP ベースのトランスポート。DOKKU_MCP_TRANSPORT_TYPE=sse dokku-mcp
CORS の設定
SSE トランスポートでは、CORS はデフォルトで Access-Control-Allow-Origin: * によって処理されます。リモート環境にデプロイする場合は、カスタム CORS ミドルウェアを有効にできます。
transport:
type: sse
cors:
enabled: true
allowed_origins:
- "https://app.example.com"
- "*.example.com"
詳しい設定オプションとセキュリティのベストプラクティスについては、docs/CORS.md を参照してください。
開発
このセクションでは、プロジェクトへの貢献やソースコードの変更を行いたい開発者向けの情報を説明します。
開発環境のセットアップ
-
前提条件:
-
リポジトリをクローンする:
git clone https://github.com/dokku-mcp/dokku-mcp.git cd dokku-mcp -
開発ツールをインストールする:
このコマンドは、開発、リンティング、テストに必要なすべての Go ツールをインストールします。
make install-tools -
開発環境をセットアップする:
このコマンドは、コミット前にコード品質を確保するための Git フックを設定します。
make setup-dev -
ソースからビルドして実行する:
# This command builds the binary and starts the server. make start
Makefile のコマンド
このプロジェクトでは、一般的なタスクを自動化するために Makefile を使用しています。
make help:利用可能なすべてのコマンドを表示します。make check:すべてのコード品質チェック(リンティング、フォーマット、複雑度)を実行します。make build:サーバーバイナリをビルドします。make clean:ビルド成果物をクリーンアップします。
テスト
-
すべてのテストを実行:
make testすべてのユニットテストと統合テストを実行し、
coverage.htmlに HTML カバレッジレポートを生成します。 -
ローカルの Dokku に対して統合テストを実行: ローカルの Dokku コンテナーが実行中であることを確認してください(
make dokku-start)。make test-integration-local
アーキテクチャ
このサーバーは**ドメイン駆動設計(DDD)**の原則に従い、次のように明確に分離されています。
- ドメイン層(
internal/domain): 中核となるビジネスロジック、エンティティ、リポジトリーインターフェース。 - アプリケーション層(
internal/application): ユースケースのオーケストレーションと調整。 - インフラストラクチャ層(
internal/infrastructure): Dokku クライアント、データベース、外部サービスなどのインターフェース実装。
internal/server-plugins に配置されたプラグインベースのアーキテクチャを採用しており、各プラグインは Dokku の特定の機能セット(例:app、core、deployment)をカプセル化します。
詳細については、docs/ ディレクトリーのドキュメントを参照してください。
プロジェクト構成
dokku-mcp/
├── cmd/ # Entry points for the application
│ └── server/ # Server main command
├── internal/ # Private application code
│ ├── server/ # MCP server and adapter
│ ├── server-plugin/ # Plugin system infrastructure
│ ├── server-plugins/ # Actual plugin implementations (app, core, etc.)
│ ├── dokku-api/ # Dokku CLI client and API
│ └── shared/ # Shared domain types and services
├── pkg/ # Reusable packages (config, logger, etc.)
├── docs/ # Project documentation
└── scripts/ # Helper scripts
コントリビューション
コントリビューションを歓迎します!コントリビューション方法の詳細については、コントリビューションをご覧ください。
ライセンス
このプロジェクトは Apache License 2.0 の下で提供されています。詳細については、LICENSE ファイルをご覧ください。
著作権 [Alex Galey]
Apache License, Version 2.0(「ライセンス」)に基づきライセンスされています。 ライセンスに従わない限り、このファイルを使用することはできません。 ライセンスのコピーは次の場所から入手できます。
http://www.apache.org/licenses/LICENSE-2.0
適用される法律で要求される場合、または書面で合意された場合を除き、 ライセンスの下で配布されるソフトウェアは「現状のまま」で提供され、 明示的か黙示的かを問わず、いかなる種類の保証または条件もありません。 ライセンスに基づく許可および制限については、ライセンスをご確認ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。