Skip to main content
Glama

dynu-mcp

Dynu 用の MCP サーバー — ダイナミック DNS、ドメイン登録、メールホスティング、クラウドコンピュート (VPS) プロバイダーです。Dynu の公開 REST API v2 全体を MCP ツールとして公開します。

概要

  • ステートレスな HTTP サービス。認証情報は一切永続化されません。各リクエストは独自の API キーをヘッダーで提供し、その単一リクエストの期間のみ使用されます。

  • 同時リクエストをサポート。リクエストごとの認証情報の分離は、グローバル/共有クライアントインスタンスではなく、Python の contextvars によって行われます。

  • エントリポイント: POST /mcp (MCP プロトコル) と GET /health (ヘルスチェック)。

  • デフォルトポート: 8080 (MCP_HTTP_PORT で設定可能)。

Related MCP server: dynadot-mcp

スコープ

30 ツール。Dynu の完全な OpenAPI 3.0 仕様をカバーする当初の 117 ツール構成から削減されました。この MCP が背後で動作するプラットフォームは、有効なすべてのベンダー MCP のツールを単一の Gemini/Vertex モデル呼び出しに集約し、合計 512 の関数宣言に制限されます。50 以上のベンダー MCP が登録されているため、それぞれをスリムに保つ必要があります。同じ 6 カテゴリにわたって保持: dns (8 — MSPbots の実際の GET /dns エンドポイントとコアなレコード/サービス CRUD)、email (7 — サービス一覧/詳細、アカウント作成/読み取り/更新/削除)、compute (4 — インスタンス一覧/詳細/起動/停止)、domain (2 — 一覧/詳細)、monitor (7、カテゴリ全体)、ping (2、カテゴリ全体)。完全に削除: ドメイン登録管理 (グルーレコード、ネームサーバー、自動更新、ロック/ロック解除)、メールのブラックリスト/ホワイトリスト/エイリアス/配布リスト/DKIM 管理、およびコンピュートのバックアップ/スナップショット/VNC/再インストール操作 — 既知のギャップ を参照。MSPbots 自体は 1 つのエンドポイント (GET /dns) のみを呼び出し、これは保持されます。

認証

Dynu は単一の静的 API キー (Dynu コントロールパネルの API 資格情報エリアにあります) で認証します。MSPbots の統合規約では、このキーを API-Key ヘッダーの生の値として送信し、このサーバーはそのまま転送します。

ヘッダー認証パラメータの説明

ヘッダー

必須

デフォルト値

列挙値

フィールド説明

X-Dynu-Api-Key

string

必須

なし

なし

Dynu 静的 API キー。上流の API-Key リクエストヘッダーとしてそのまま転送されます。

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

ヘッダーがない場合は 401 を返します:

{
  "error": "Missing credentials",
  "message": "This server requires the X-Dynu-Api-Key header",
  "required_headers": ["X-Dynu-Api-Key"],
  "optional_headers": []
}

環境変数

変数

必須

デフォルト値

説明

MCP_HTTP_PORT

int

任意

8080

HTTP リッスンポート

MCP_HTTP_HOST

string

任意

0.0.0.0

HTTP リッスンアドレス

DYNU_BASE_URL

string

任意

https://api.dynu.com/v2

Dynu API ベース URL

MCP エンドポイント

  • POST /mcp — MCP プロトコル (ストリーミング可能な HTTP トランスポート)

  • GET /health — ヘルスチェック。{"status": "ok"} を返します (純粋なローカル liveness プローブであり、Dynu API には依存しません)

ツール一覧

ツール名は、ベンダーの OpenAPI 仕様における各操作のサマリーから派生しています (例: "Get a list of domains for DNS service" → dynu_get_list_domains_dns_service)。1 つの名前の衝突 (GET /pingPOST /ping の両方が同一のサマリーを共有) は、_get/_post サフィックスで区別されます。POST 操作の body パラメータは汎用の dict として受け入れられます。各リソースの正確なフィールド名/型については、ベンダーの OpenAPI 仕様の Models セクション (下記リンク) を参照してください。

カテゴリ

ツール

機能

メソッド+パス

パラメータ

dns

dynu_add_new_dns_record_dns_service

DNS サービスの新しい DNS レコードを追加します。

POST /dns/{id}/record

id(必須), body(必須,dict)

dns

dynu_add_new_dns_service

新しい DNS サービスを追加します。

POST /dns

body(必須,dict)

dns

dynu_get_details_dns_record_dns_service

DNS サービスの DNS レコードの詳細を取得します。

GET /dns/{id}/record/{dnsRecordId}

id(必須), dns_record_id(必須)

dns

dynu_get_details_domain_dns_service

DNS サービスのドメインの詳細を取得します。

GET /dns/{id}

id(必須)

dns

dynu_get_list_dns_records_dns_service

DNS サービスの DNS レコードの一覧を取得します。

GET /dns/{id}/record

id(必須)

dns

dynu_get_list_domains_dns_service

DNS サービスのドメインの一覧を取得します。

GET /dns

dns

dynu_remove_dns_record_dns_service

DNS サービスから DNS レコードを削除します。

DELETE /dns/{id}/record/{dnsRecordId}

id(必須), dns_record_id(必須)

dns

dynu_update_existing_dns_record_dns_service

DNS サービスの既存の DNS レコードを更新します。

POST /dns/{id}/record/{dnsRecordId}

id(必須), dns_record_id(必須), body(必須,dict)

domain

dynu_get_details_domain_registration_domain

ドメイン登録ドメインの詳細を取得します。

GET /domain/{id}

id(必須)

domain

dynu_get_list_domains_domain_registration_service

ドメイン登録サービスのドメインの一覧を取得します。

GET /domain

email

dynu_add_new_email_account_email_service

メールサービスの新しいメールアカウントを追加します。

POST /email/{id}/account

id(必須), body(必須,dict)

email

dynu_get_details_email_account

メールアカウントの詳細を取得します。

GET /email/{id}/account/{accountId}

id(必須), account_id(必須)

email

dynu_get_details_email_service

メールサービスの詳細を取得します。

GET /email/{id}

id(必須)

email

dynu_get_list_email_accounts_email_service

メールサービスのメールアカウントの一覧を取得します。

GET /email/{id}/account

id(必須)

email

dynu_get_list_email_services

メールサービスの一覧を取得します。

GET /email

email

dynu_remove_email_account_email_service

メールサービスからメールアカウントを削除します。

DELETE /email/{id}/account/{accountId}

id(必須), account_id(必須)

email

dynu_update_existing_email_account_email_service

メールサービスの既存のメールアカウントを更新します。

POST /email/{id}/account/{accountId}

id(必須), account_id(必須), body(必須,dict)

compute

dynu_get_instance

インスタンスを取得します。

GET /compute/instance/{id}

id(必須)

compute

dynu_get_list_instances

インスタンスの一覧を取得します。

GET /compute/instance

compute

dynu_start_instance

インスタンスを起動します。

GET /compute/instance/{id}/start

id(必須)

compute

dynu_stop_suspend_instance

インスタンスを停止 (一時停止) します。

GET /compute/instance/{id}/stop

id(必須)

monitor

dynu_add_new_monitor

新しいモニターを追加します。

POST /monitor

body(必須,dict)

monitor

dynu_delete_monitor

モニターを削除します。

DELETE /monitor/{id}

id(必須)

monitor

dynu_get_details_monitor

モニターの詳細を取得します。

GET /monitor/{id}

id(必須)

monitor

dynu_get_list_monitors

モニターの一覧を取得します。

GET /monitor

monitor

dynu_limits_associated_monitoring

モニタリングに関連する制限。

GET /monitor/limit

monitor

dynu_pause_monitor

モニターを一時停止します。

GET /monitor/{id}/pause

id(必須)

monitor

dynu_unpause_monitor

モニターの一時停止を解除します。

GET /monitor/{id}/unpause

id(必須)

ping

dynu_ping_api_server_obtain_pong_response_get

API サーバーに ping を送信して pong 応答を取得します。

GET /ping

message(必須)

ping

dynu_ping_api_server_obtain_pong_response_post

API サーバーに ping を送信して pong 応答を取得します。

POST /ping

body(必須,dict)

テスト例

# Health check
curl -s http://localhost:8080/health

# Call a tool via the MCP protocol (streamable HTTP) — requires an
# initialize handshake first per the MCP spec; abbreviated example below
# shows the tool-call request body only:
curl -s -X POST http://localhost:8080/mcp   -H "X-Dynu-Api-Key: <your-dynu-api-key>"   -H "Content-Type: application/json"   -H "Accept: application/json, text/event-stream"   -H "mcp-session-id: <session-id-from-initialize>"   -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "dynu_get_list_domains_dns_service",
      "arguments": {}
    }
  }'

ライブ検証済み (2026-07-29): dynu_get_list_domains_dns_service (MSPbots 自体が呼び出す同じエンドポイント、パラメータなし) が、実際の API キーを使用してこの実行中のサーバーを通じてエンドツーエンドで呼び出され、アカウントの実際の DNS ドメインレコードが返されました。

API リファレンス

既知のギャップ

  • ツールを117個から30個に削減(ユーザーの明示的な決定による): このMCPが動作するプラットフォームは、有効化されたすべてのベンダーMCPのツールを単一のGemini/Vertexモデル呼び出しに集約するが、これは合計512個の関数宣言に制限される。50以上のベンダーMCPが登録されているため、各MCPはスリムに保つ必要がある。維持したもの: MSPbotsの実際のGET /dnsエンドポイント、コアDNSレコード/サービスCRUD(8)、コアメールサービス/アカウントCRUD(7)、基本的なコンピュートインスタンスの一覧/詳細/起動/停止(4)、ドメインの一覧/詳細(2)、およびMonitor/Pingの全機能(9)。完全に削除したもの: ドメインレジストラ管理(グルーレコード、ネームサーバー、自動更新、ロック/アンロック/キャンセル)、メールのブラックリスト/ホワイトリスト/エイリアス/配布リスト/DKIM管理、およびコンピュートのバックアップ/スナップショット/VNC/再インストール/パスワード変更操作。実際のユースケースで必要になれば、これらはリクエストに応じて再追加できる。

  • コンピュートおよびドメインの書き込み操作は、削減後もリスクが高いままdynu_start_instance/dynu_stop_suspend_instanceは実際のVPSインスタンスに対して動作する。これらは破壊的/不可逆的として扱い、呼び出す前に人間による確認を行うこと。

  • bodyパラメータは型指定なし(dict)であり、完全にモデル化されていない — OpenAPI仕様のModelsセクションがリソースごとの正確なスキーマを定義している(例: DNS.dnsRecordA)が、それらすべてを型指定されたPythonパラメータとして再現することは範囲外だった。呼び出し側は、リンクされた仕様に従ってbody dictを整形する必要がある。

  • 実アカウントデータでライブ検証されたのはdynu_get_list_domains_dns_service(MSPbots独自のエンドポイント)のみ。残りの29ツールは構造的に正しい(スキーマ検証済み、MCPプロトコルのtools/list確認済み、削減後のツール数も再確認済み)が、個別のスモークテストは実施されていない。そのうちのいくつかは書き込み/破壊的操作であり、実際のDNSレコード、メールアカウント、またはVPSインスタンスを作成・変更・削除するため、ライブのテストアカウントに対して実行されなかった。

Related MCP Connectors

Related MCP Servers