mcpField
T
Tailscale RMCP

Tailscale RMCP

ローカル
github.comクラウド・インフラ54 週間前に更新

Tailscale RMCP について

Tailscale RMCP は、Tailscale のテイルネットを扱うエージェントや運用担当者向けの MCP サーバーと CLI です。デバイス、ルート、キー、ACL、DNS、ユーザー情報を参照でき、デバイス削除には二重の確認が必要です。

主な機能

  1. 01デバイスとサブネットルートの確認
  2. 02キー、ACL、DNS、ユーザーの参照
  3. 03テイルネットへのデバイス認証
  4. 04二段階確認付きのデバイス削除
  5. 05MCP と CLI の提供

活用シーン

  1. 01テイルネットのデバイスとルートの確認
  2. 02ACL、DNS、ユーザー設定の確認
  3. 03エージェント経由でのデバイス認証
  4. 04二重確認によるデバイス削除の管理

MCP 対応

単一の `tailscale` ツールで Tailscale の操作機能を MCP クライアントに提供し、stdio と HTTP に対応します。デバイス削除には、サーバー側での有効化と呼び出し側の明示的な確認が必要です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"ai-dinglebear-tailscale-rmcp": {
"command": "npx",
"args": [
"-y",
"tailscale-rmcp"
],
"env": {
"TAILSCALE_API_KEY": "<TAILSCALE_API_KEY>",
"TAILSCALE_RMCP_VERSION": "<TAILSCALE_RMCP_VERSION>",
"TAILSCALE_RMCP_REPO": "<TAILSCALE_RMCP_REPO>",
"TAILSCALE_RMCP_RELEASE_BASE_URL": "<TAILSCALE_RMCP_RELEASE_BASE_URL>",
"RUST_LOG": "<RUST_LOG>"
}
}
}
}
起動コマンドnpx -y tailscale-rmcp
設定が必要な環境変数
TAILSCALE_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmtailscale-rmcp0.1.3

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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 キーの受け渡し。

目次

名前

項目このリポジトリ
リポジトリtailscale-rmcp
Rust クレートtailscale-rmcp
バイナリ/CLIrtailscale
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 / npxnpx -y @dinglebear/rtailscale --helpローカルの MCP クライアントや手軽な試用。GitHub Releases から対応する rtailscale バイナリをダウンロードします。
リリースインストーラーcurl -fsSL https://raw.githubusercontent.com/dinglebear-ai/rtailscale/main/scripts/install.sh | bashNode を使わないホストへのインストール。現在の Linux ホストに rtailscale をインストールします。
Docker / Composedocker 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=1postinstall によるバイナリのダウンロードをスキップします。
TAILSCALE_RMCP_VERSION または TAILSCALE_RMCP_BINARY_VERSIONGitHub 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/ATailscale がすでに REST API を提供しています。
Web UI提供なしN/ATailscale がすでに管理コンソールを提供しています。

MCP ツールリファレンス

公開される MCP ツールは tailscale の 1 つです。必要な action 引数を渡して、操作を選択します。

読み取りアクション
アクション説明必須パラメーターオプションのパラメーター
devicestailnet 内のすべてのデバイスを一覧表示します。なしなし
device1 台のデバイスを返します。idなし
device_routes1 台のデバイスのサブネットルートを返します。idなし
keystailnet 内の API キーを一覧表示します。なしなし
aclACL ポリシーの JSON を返します。なしなし
dnsDNS ネームサーバー、検索パス、MagicDNS の設定を返します。なしなし
userstailnet のユーザーを一覧表示します。なしなし
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_DESTRUCTIVEfalseサーバー側で delete_device を有効にします。
TAILSCALE_MCP_HOST0.0.0.0HTTP のバインド先ホスト。
TAILSCALE_MCP_PORT40040HTTP のバインド先ポート。
TAILSCALE_MCP_SERVER_NAMEtailscale-rmcp公開する MCP サーバー名。
TAILSCALE_MCP_NO_AUTHfalseループバック開発時に限り、認証を無効にします。
TAILSCALE_MCP_TOKEN未設定HTTP MCP 用の静的ベアラートークン。
TAILSCALE_NOAUTHfalse上流ゲートウェイが認証を強制すると信頼します。
TAILSCALE_MCP_AUTH_MODEbearerbearer または 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=oauthlab-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 を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。