Tailscale RMCP について
Tailscale RMCP は、Tailscale のテイルネットを扱うエージェントや運用担当者向けの MCP サーバーと CLI です。デバイス、ルート、キー、ACL、DNS、ユーザー情報を参照でき、デバイス削除には二重の確認が必要です。
主な機能
- 01デバイスとサブネットルートの確認
- 02キー、ACL、DNS、ユーザーの参照
- 03テイルネットへのデバイス認証
- 04二段階確認付きのデバイス削除
- 05MCP と CLI の提供
活用シーン
- 01テイルネットのデバイスとルートの確認
- 02ACL、DNS、ユーザー設定の確認
- 03エージェント経由でのデバイス認証
- 04二重確認によるデバイス削除の管理
MCP 対応
単一の `tailscale` ツールで Tailscale の操作機能を MCP クライアントに提供し、stdio と HTTP に対応します。デバイス削除には、サーバー側での有効化と呼び出し側の明示的な確認が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y tailscale-rmcpTAILSCALE_API_KEYシークレットTailscale API key.TAILSCALE_RMCP_VERSIONOptional GitHub release tag override for the downloaded Tailscale RMCP binary.TAILSCALE_RMCP_REPOOptional GitHub owner/repo override for release asset downloads.TAILSCALE_RMCP_RELEASE_BASE_URLOptional release download base URL override.RUST_LOGTracing filter for Tailscale RMCP logs.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
tailscale-rmcp
MCP と CLI による Tailscale デバイス、ルート、DNS、キー、ユーザー、ACL の管理。
MCP ツール tailscale と、rtailscale CLI を公開します。エージェントはデバイスの一覧表示、ルートの確認、API キー、ACL ポリシー、DNS 設定、ユーザーの参照、デバイスの認証を行えます。また、破壊的操作のゲートを明示的に有効にした場合は、デバイスを削除できます。
30 秒で試す手順: TAILSCALE_API_KEY を設定し、npx -y @dinglebear/rtailscale devices --json を実行します。次に、TAILSCALE_MCP_HOST=127.0.0.1 npx -y @dinglebear/rtailscale serve でループバック HTTP を起動し、{"action":"devices"} を指定して tools/call を呼び出します。
ステータス: RMCP の上流クライアントサーバーとして動作します。デバイスの認証を書き込み可能です。デバイスの破壊的な削除には、サーバー側のオプトインと呼び出し元の確認の両方が必要です。HTTP MCP は、ループバック開発モード、静的ベアラートークン、lab-auth を介した Google OAuth に対応しています。
対象外: Tailscale 管理コンソールの置き換え、Tailscale アカウントの権限の回避、1 つの信頼境界から相互に無関係な複数の tailnet を操作すること、呼び出し元の API キーの保存、任意の WireGuard 制御、MCP ツールの引数を介した Tailscale API キーの受け渡し。
目次
- 名前
- 機能と境界
- インストール
- クイックスタート
- クライアント設定
- 実行環境
- MCP ツールのリファレンス
- CLI のリファレンス
- 設定
- 認証
- 安全性と信頼モデル
- アーキテクチャ
- 配布契約
- 開発
- 検証
- デプロイ
- トラブルシューティング
- 関連サーバー
- ドキュメント
- ライセンス
名前
| 項目 | このリポジトリ |
|---|---|
| リポジトリ | tailscale-rmcp |
| Rust クレート | tailscale-rmcp |
| バイナリ/CLI | rtailscale |
| npm パッケージ | @dinglebear/rtailscale |
| npm バイナリエイリアス | tailscale-rmcp、rtailscale |
| MCP ツール | tailscale |
| 設定ホーム | ホストでは ~/.tailscale-mcp、コンテナでは /data |
| 環境変数のプレフィックス | npm ランチャー制御用の TAILSCALE_*、TAILSCALE_MCP_*、TAILSCALE_RMCP_* |
リポジトリ、クレート、npm パッケージでは、RMCP ファミリー名を使用します。公式の tailscale CLI と名前が衝突しないよう、配布バイナリには rtailscale を使用します。
機能と境界
- デバイスを一覧表示し、ノード ID または従来の数値デバイス ID を指定して個別のデバイスを確認します。
- サブネットルート、API キー、ACL ポリシー、DNS/MagicDNS 設定、tailnet のユーザーを参照します。
- tailnet に対してデバイスを認証します。
TAILSCALE_ALLOW_DESTRUCTIVE=trueが設定され、呼び出し元も明示的な確認を渡した場合に限り、デバイスを削除します。- ローカルのプラグイン/実行環境を確認するためのセットアップコマンドと doctor コマンドを提供します。
| このリポジトリの担当範囲 | Tailscale の担当範囲 | 明示的な対象外 |
|---|---|---|
| MCP/CLI の投影、リクエストの検証、HTTP MCP の認証ポリシー、レスポンスの整形、セットアップ確認、破壊的操作のゲート。 | tailnet の状態、デバイス ID、ACL のセマンティクス、DNS の動作、API キーの発行、ユーザーの所属、上流での認可。 | 管理コンソールの置き換え、呼び出し元の認証情報の保存、複数 tailnet のテナント管理、任意の WireGuard 制御、公開されているアクションを超えるポリシー編集、ローカルの Tailscale デーモン管理。 |
インストール
| 方法 | コマンド | 最適な用途 | 備考 |
|---|---|---|---|
| npm / npx | npx -y @dinglebear/rtailscale --help | ローカルの MCP クライアントや手軽な試用。 | GitHub Releases から対応する rtailscale バイナリをダウンロードします。 |
| リリースインストーラー | curl -fsSL https://raw.githubusercontent.com/dinglebear-ai/rtailscale/main/scripts/install.sh | bash | Node を使わないホストへのインストール。 | 現在の Linux ホストに rtailscale をインストールします。 |
| Docker / Compose | docker compose up -d | 共有 HTTP MCP 環境へのデプロイ。 | .env を読み込み、コンテナのポート 40040 を公開します。 |
| ソースからビルド | cargo build --release | 開発や監査。 | target/release/rtailscale を生成します。 |
| プラグイン | claude plugin install plugins/tailscale | このチェックアウトから Claude Code のローカルプラグインをセットアップする場合。 | スキル、.mcp.json、バンドルされたバイナリが含まれます。フックはありません。環境を検証したい場合は、自分で rtailscale setup check を実行してください。 |
npm / npx
バイナリを手動でインストールせずに、stdio MCP サーバーまたは CLI を実行します。
npx -y @dinglebear/rtailscale --help
npx -y @dinglebear/rtailscale mcp
npx -y @dinglebear/rtailscale devices --json
npm パッケージは postinstall 中に rtailscale をダウンロードします。パッケージングをテストする場合に限り、ダウンロードの動作を上書きしてください。
| 変数 | 用途 |
|---|---|
TAILSCALE_RMCP_SKIP_DOWNLOAD=1 | postinstall によるバイナリのダウンロードをスキップします。 |
TAILSCALE_RMCP_VERSION または TAILSCALE_RMCP_BINARY_VERSION | GitHub Release のタグを選択します。 |
TAILSCALE_RMCP_REPO | リリースのダウンロードに使用する GitHub リポジトリを選択します。 |
TAILSCALE_RMCP_RELEASE_BASE_URL | カスタムのリリースベース URL を選択します。 |
ソースからビルド
git clone https://github.com/dinglebear-ai/rtailscale
cd rtailscale
cargo build --release
./target/release/rtailscale --help
サポートされる最低 Rust バージョン:1.86。
クイックスタート
1. Tailscale API キーを取得する
https://login.tailscale.com/admin/settings/keys で API キーを作成します。公開する予定の操作に必要な最小限の権限を使用してください。
2. Tailnet を設定する
export TAILSCALE_API_KEY="tskey-api-..."
export TAILSCALE_TAILNET="-" # personal, or "example.com" for orgs
すべての Tailscale アカウントは tailnet に属しています。TAILSCALE_TAILNET=- はデフォルトの個人用 tailnet を対象とします。組織の tailnet では通常、組織のドメインを使用します。
3. 安全な CLI 呼び出しを実行する
npx -y @dinglebear/rtailscale devices --json
4. ループバック HTTP MCP を起動する
TAILSCALE_MCP_HOST=127.0.0.1 npx -y @dinglebear/rtailscale serve
別のシェルで次を実行します。
curl -sf http://127.0.0.1:40040/health
5. 最初の MCP 呼び出しを行う
curl -s -X POST http://127.0.0.1:40040/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"tailscale","arguments":{"action":"devices"}}}'
クライアントの設定
Claude Code Stdio
{
"mcpServers": {
"tailscale": {
"command": "npx",
"args": ["-y", "tailscale-rmcp", "mcp"],
"env": {
"TAILSCALE_API_KEY": "tskey-api-...",
"TAILSCALE_TAILNET": "-"
}
}
}
}
Claude Code HTTP
{
"mcpServers": {
"tailscale": {
"type": "http",
"url": "http://127.0.0.1:40040/mcp",
"headers": {
"Authorization": "Bearer ${TAILSCALE_MCP_TOKEN}"
}
}
}
}
Codex / Labby Gateway
1 つの長時間稼働サーバーを共有する場合は、Labby を通じて Tailscale を HTTP 上流として登録します。ローカルのみで使用する場合は、stdio として直接実行します。
[mcp_servers.tailscale]
command = "npx"
args = ["-y", "tailscale-rmcp", "mcp"]
汎用 MCP JSON
{
"command": "rtailscale",
"args": ["mcp"],
"env": {
"TAILSCALE_API_KEY": "tskey-api-...",
"TAILSCALE_TAILNET": "-"
}
}
TAILSCALE_API_KEY、OAuth シークレット、パスワード、SSH キー、上流のベアラートークンを MCP ツールの引数に含めないでください。環境変数、設定ファイル、または MCP クライアントのシークレットストレージを使用してください。MCP の呼び出し元が、アクション引数として認証情報、トークン、キー、シークレットを渡すことはありません。
実行時インターフェース
| インターフェース | ステータス | エントリーポイント | 用途 |
|---|---|---|---|
| MCP stdio | 対応 | rtailscale mcp、npx -y @dinglebear/rtailscale mcp | ローカルの子プロセス型 MCP クライアント。 |
| MCP HTTP | 対応 | rtailscale serve、POST /mcp | ローカルまたは共有サーバーへのデプロイ向けの Streamable HTTP MCP。 |
| CLI | 対応 | rtailscale <command> | スクリプトからの操作やデバッグ。 |
| REST API | 提供なし | N/A | Tailscale がすでに REST API を提供しています。 |
| Web UI | 提供なし | N/A | Tailscale がすでに管理コンソールを提供しています。 |
MCP ツールリファレンス
公開される MCP ツールは tailscale の 1 つです。必要な action 引数を渡して、操作を選択します。
読み取りアクション
| アクション | 説明 | 必須パラメーター | オプションのパラメーター |
|---|---|---|---|
devices | tailnet 内のすべてのデバイスを一覧表示します。 | なし | なし |
device | 1 台のデバイスを返します。 | id | なし |
device_routes | 1 台のデバイスのサブネットルートを返します。 | id | なし |
keys | tailnet 内の API キーを一覧表示します。 | なし | なし |
acl | ACL ポリシーの JSON を返します。 | なし | なし |
dns | DNS ネームサーバー、検索パス、MagicDNS の設定を返します。 | なし | なし |
users | tailnet のユーザーを一覧表示します。 | なし | なし |
help | 組み込みのアクションドキュメントを返します。 | なし | なし |
書き込みアクション
| アクション | 説明 | 必須パラメーター | 任意パラメーター |
|---|---|---|---|
authorize_device | デバイスをテールネットに承認します。 | id | なし |
破壊的アクション
| アクション | 説明 | 必須パラメーター | 任意パラメーター |
|---|---|---|---|
delete_device | デバイスを完全に削除します。 | id, confirm=true | なし |
デバイス ID には、n1234abc などの安定したノード ID、または従来の数値デバイス ID を使用できます。ID を確認するには、まず action=devices を使用してください。
CLI リファレンス
バイナリは MCP ツールと同じサービスレイヤーを呼び出します。
rtailscale devices [--json]
rtailscale device <id> [--json]
rtailscale routes <device-id> [--json]
rtailscale keys [--json]
rtailscale acl [--json]
rtailscale dns [--json]
rtailscale users [--json]
rtailscale authorize <device-id> [--json]
rtailscale delete-device <device-id> --confirm [--json]
rtailscale doctor [--json]
rtailscale setup check [--json]
rtailscale setup repair [--json]
rtailscale setup plugin-hook [--no-repair] [--json]
rtailscale serve # HTTP MCP (also the no-argument default)
rtailscale mcp # stdio MCP
現在、すべてのコマンドは JSON を出力します。RMCP ファミリーの他のコマンドと互換性を保つため、--json も受け付けます。
設定
ホストへのインストールでは、設定の読み込み前に ~/.tailscale-mcp/.env を読み込みます。コンテナーでは /data/.env を読み込みます。プロセス環境変数は、これらの両方より優先されます。
| 変数 | デフォルト | 用途 |
|---|---|---|
TAILSCALE_API_KEY | 未設定 | Tailscale API キー。 |
TAILSCALE_TAILNET | - | テールネット。組織のドメイン、または個人用の場合は - を指定します。 |
TAILSCALE_ALLOW_DESTRUCTIVE | false | サーバー側で delete_device を有効にします。 |
TAILSCALE_MCP_HOST | 0.0.0.0 | HTTP のバインド先ホスト。 |
TAILSCALE_MCP_PORT | 40040 | HTTP のバインド先ポート。 |
TAILSCALE_MCP_SERVER_NAME | tailscale-rmcp | 公開する MCP サーバー名。 |
TAILSCALE_MCP_NO_AUTH | false | ループバック開発時に限り、認証を無効にします。 |
TAILSCALE_MCP_TOKEN | 未設定 | HTTP MCP 用の静的ベアラートークン。 |
TAILSCALE_NOAUTH | false | 上流ゲートウェイが認証を強制すると信頼します。 |
TAILSCALE_MCP_AUTH_MODE | bearer | bearer または oauth。 |
TAILSCALE_MCP_PUBLIC_URL | 未設定 | OAuth 検出用の公開 URL。 |
TAILSCALE_MCP_GOOGLE_CLIENT_ID | 未設定 | Google OAuth クライアント ID。 |
TAILSCALE_MCP_GOOGLE_CLIENT_SECRET | 未設定 | Google OAuth クライアントシークレット。 |
TAILSCALE_MCP_AUTH_ADMIN_EMAIL | 未設定 | OAuth の初期設定に使用する管理者メールアドレス。 |
TAILSCALE_MCP_ALLOWED_HOSTS | 未設定 | 追加で許可する Host ヘッダーの値。 |
TAILSCALE_MCP_ALLOWED_ORIGINS | 未設定 | 追加で許可する CORS オリジン。 |
TAILSCALE_MCP_HOME | プラットフォームのアプリデータ | setup とファイルログで使用する設定・ログ用ホームディレクトリを上書きします。 |
Tailscale API のベース URL は設定できません。src/tailscale.rs で https://api.tailscale.com/api/v2 に固定されています。
認証
Stdio MCP はローカルの信頼された子プロセスとして実行され、HTTP 認証を使用しません。
HTTP MCP の認証ポリシー:
| 状態 | 条件 | 動作 |
|---|---|---|
| ループバック開発 | TAILSCALE_MCP_HOST が 127. で始まる、またはループバックで認証が明示的に無効化されている | 認証なしでのローカル開発が許可されます。 |
| ベアラー認証での公開 | ループバック以外で TAILSCALE_MCP_TOKEN が設定されている | Authorization: Bearer <token> とアクションスコープが必要です。 |
| OAuth での公開 | TAILSCALE_MCP_AUTH_MODE=oauth | lab-auth を介して Google OAuth/JWT を使用します。 |
| 信頼されたゲートウェイ | TAILSCALE_NOAUTH=true | リバースプロキシまたはゲートウェイによって、認証がすでに強制されているものとみなします。 |
ループバック以外での HTTP 起動は、ベアラー認証、OAuth、または TAILSCALE_NOAUTH=true が設定されていない場合、拒否されます。
安全性と信頼モデル
- Tailscale API キーは設定または環境変数からのみ読み込まれます。
- MCP の呼び出し元が選択できるのはアクションと ID であり、上流の認証情報ではありません。
delete_deviceには 2 つのキーによるインターロックがあります。サーバーでTAILSCALE_ALLOW_DESTRUCTIVE=trueを設定し、呼び出し元がconfirm=trueを指定する必要があります。- ID の欠落や不明なアクションは、上流への呼び出し前にエラーになります。
- ループバック以外で HTTP をデプロイする場合は、ベアラー認証、OAuth、または認証済みの信頼されたゲートウェイを使用する必要があります。
- このブリッジは Tailscale 自体をサンドボックス化しません。API の権限とテールネットの状態変更は引き続き Tailscale が管理します。
アーキテクチャ
TailscaleClient (src/tailscale.rs) REST transport and API error handling
|
TailscaleService (src/app.rs) action behavior and destructive gates
|
MCP shim (src/mcp.rs) JSON args -> service -> Value
CLI shim (src/cli.rs) argv -> service -> stdout
配布の契約
Cargo.toml、Cargo.lock、packages/tailscale-rmcp/package.json、.release-please-manifest.json、およびserver.jsonのリリースバージョンは一致している必要があります。- GitHub Releases では、npm ランチャーが使用する
rtailscaleバイナリを公開します。 - npm パッケージ名は
@dinglebear/rtailscaleです。バイナリエイリアスはtailscale-rmcpとrtailscaleです。 - Docker/OCI メタデータには
ghcr.io/dinglebear-ai/rtailscale:<version>を使用します(docker-compose.prod.ymlを参照)。リポジトリは現在dinglebear-ai/rtailscaleにありますが、イメージパスには移管前のオーナー名前空間が引き続き使われています。 plugins/tailscale/.mcp.jsonはnpx -y @dinglebear/rtailscale mcpを起動する必要があります。これにより、 stdio クライアントは HTTP サーバーではなく MCP トランスポートを起動します。plugins/tailscale/には Claude Code フックは含まれません。hooks/ディレクトリが再作成されると、scripts/validate-plugin-layout.shは失敗します。- ルート README は厳選されています。アクションの動作と設定のデフォルト値の信頼できる情報源は、
src/、 およびパッケージ、プラグイン、レジストリのマニフェストです。
開発
cargo fmt --check
cargo test
cargo clippy -- -D warnings
cargo build --release
npm --prefix packages/tailscale-rmcp run check
検証
just validate-plugin
npm --prefix packages/tailscale-rmcp run check
cargo check
cargo test
git diff --check
ランタイムのスモークテスト:
TAILSCALE_API_KEY=tskey-api-... \
TAILSCALE_TAILNET=- \
rtailscale devices --json
HTTP のスモークテスト:
TAILSCALE_MCP_HOST=127.0.0.1 rtailscale serve
curl -sf http://127.0.0.1:40040/health
デプロイ
ローカル開発ではループバックを使用します:
TAILSCALE_MCP_HOST=127.0.0.1 rtailscale serve
共有 HTTP デプロイには Docker Compose を使用します:
cp .env.example .env
docker compose up -d
ループバック以外のアドレスにバインドする場合は、認証済みゲートウェイの背後で
TAILSCALE_MCP_TOKEN、TAILSCALE_MCP_AUTH_MODE=oauth、または TAILSCALE_NOAUTH=true を設定してください。
トラブルシューティング
| 症状 | 確認事項 |
|---|---|
TAILSCALE_API_KEY がありません | 環境変数または ~/.tailscale-mcp/.env に設定してください。 |
| デバイスへの呼び出しで未認証エラーが返される | Tailscale 管理者設定で API キーを更新してください。 |
HTTP /mcp で未認証エラーが返される | TAILSCALE_MCP_TOKEN を設定し、Authorization: Bearer <token> を送信してください。 |
| stdio クライアントがハングする、または JSON エラーをログに出力する | クライアント設定で、デフォルトの HTTP サーバーモードではなく tailscale-rmcp mcp を実行するようにしてください。 |
delete_device が拒否される | サーバー側で TAILSCALE_ALLOW_DESTRUCTIVE=true を設定し、対象を確認したうえで confirm=true を渡してください。 |
| ポートが競合している | TAILSCALE_MCP_PORT を設定するか、40040 をすでに使用しているプロセスを停止してください。 |
関連サーバー
- soma - プロバイダー連携型 MCP サーバー向けの RMCP ランタイムおよびスキャフォールドです。
- unifi-rmcp - UniFi コントローラー REST API ブリッジです。
- unraid - Unraid モノレポです。
unraid-rs/は NAS とサーバー管理向けの GraphQL ブリッジです。 - apprise-rmcp - 多数の配信バックエンドに通知を振り分ける Apprise ブリッジです。
- gotify-rmcp - 送信、メッセージ、アプリ、クライアント向けの Gotify プッシュ通知ブリッジです。
- arcane-rmcp - コンテナーと関連リソースを管理する Arcane Docker 管理ブリッジです。
- yarr - Sonarr、Radarr、Prowlarr、Plex、および関連サービス向けのメディアスタックブリッジです。
- ytdl-rmcp - メディアのダウンロードとメタデータ処理のワークフローサーバーです。
- synapse-rmcp - scout および flux アクション向けのローカル Synapse ワークフローサーバーです。
- cortex - Syslog とホームラボのログを集約する MCP サーバーです。
- axon - RAG、クロール、スクレイピング、抽出、セマンティック検索のプロジェクトです。
- labby - ホームラボのコントロールプレーンおよび MCP ゲートウェイのプロジェクトです。
- lumen - ローカルのセマンティックコード検索 MCP サーバーです。
ドキュメント
CLAUDE.mdは、コントリビューターとエージェント向けに整理されたローカル運用ガイドです。docs/SETUP.mdは、プラグインとセットアップに関する整理されたガイドです。docs/OAUTH.mdは、OAuth のセットアップに関する整理されたガイドです。plugins/tailscale/skills/tailscale/SKILL.mdは、エージェント向けの使用ガイドです。src/は、現在のアクション、設定のデフォルト値、認証の動作、CLI の解析に関する信頼できる情報源です。- パッケージ、プラグイン、Docker、レジストリのマニフェストは、整理された配布契約です。上記の検証コマンドで確認してください。
ライセンス
このプロジェクトのうち、Dinglebear が作成したオリジナルの部分は AGPL-3.0-only の下でライセンスされています。AGPL 以外の条件が必要な組織向けに、別途商用ライセンスも用意しています。サードパーティの素材は、引き続き元のライセンスの下にあります。LICENSING.md を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。