Tailscale RMCP

ai.dinglebear由 dinglebear.ai 發布官方發布者v0.1.4更新於 Oct 24, 2026

Tailscale device, route, DNS, key, user, and ACL management over MCP and CLI.

已驗證Streamable HTTP可網頁執行雲端與基礎設施安全與監控

概覽

AI 產生的概覽

把 Tailscale 網路接進助理:列出裝置、檢視路由、DNS、ACL、金鑰與使用者,並可授權或刪除裝置。

可以做什麼
  • 列出並檢視裝置,包括單一裝置的子網路路由
  • 讀取 API 金鑰、ACL 政策 JSON、DNS/MagicDNS 設定與網路使用者
  • 為網路授權一台裝置
  • 刪除裝置,僅在伺服器端開啟開關且呼叫端明確確認時可用
  • 透過 CLI 執行相同操作,並提供 setup 與 doctor 自我檢查指令
適用情境
適合讓助理回答關於 Tailscale 網路的問題,或在不開啟管理主控台的情況下完成日常裝置管理,例如核准新節點。也適合希望同時透過 MCP 與 CLI 執行相同操作的腳本化或家用實驗室流程。
執行需求
需要 TAILSCALE_API_KEY 中的 Tailscale API 金鑰,以及 TAILSCALE_TAILNET(預設為個人網路)。可作為遠端端點執行,也可透過 npx(會從 GitHub Releases 下載二進位檔)、Docker 或 Rust 1.86+ 原始碼建置執行。非回送位址上的 HTTP 模式需要 TAILSCALE_MCP_TOKEN 的 bearer 驗證、Google OAuth 設定或可信任閘道。需能存取 Tailscale API。
安裝前請注意
此 API 金鑰具備網路管理權限,應放在環境變數或設定檔中,切勿寫入工具參數。授權裝置會改變網路狀態;設定 TAILSCALE_ALLOW_DESTRUCTIVE=true 並傳入 confirm=true 後,delete_device 會永久移除裝置。HTTP 服務預設綁定 0.0.0.0;TAILSCALE_MCP_NOAUTH 與 TAILSCALE_NOAUTH 會關閉驗證,只應在回送位址或由閘道強制驗證時使用。npm 安裝會從 GitHub Releases 下載二進位檔。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Tailscale RMCP,將其新增到工作區。
  2. 連接 Authorization token 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/ai.dinglebear%2Frtailscale/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "tailscale-rmcp": {
      "type": "http",
      "url": "https://ts.dinglebear.ai/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

tailscale-rmcp

Tailscale device, route, DNS, key, user, and ACL management over MCP and CLI.

It exposes one MCP tool, tailscale, plus the rtailscale CLI. Agents can list devices, inspect routes, read API keys, ACL policy, DNS settings, and users, authorize devices, and delete devices when the destructive gate is explicitly enabled.

30-second path: set TAILSCALE_API_KEY, then run npx -y @dinglebear/rtailscale devices --json -> start loopback HTTP with TAILSCALE_MCP_HOST=127.0.0.1 npx -y @dinglebear/rtailscale serve -> call tools/call with {"action":"devices"}.

Status: operational RMCP upstream-client server. Write-capable for device authorization; destructive device deletion requires both server opt-in and caller confirmation. HTTP MCP supports loopback dev mode, static bearer tokens, and Google OAuth through lab-auth.

Not for: replacing the Tailscale admin console, bypassing Tailscale account permissions, operating multiple unrelated tailnets from one trust boundary, storing API keys for callers, arbitrary WireGuard control, or passing Tailscale API keys through MCP tool arguments.

Contents

Naming

SurfaceThis repo
Repositorytailscale-rmcp
Rust cratetailscale-rmcp
Binary / CLIrtailscale
npm package@dinglebear/rtailscale
npm binary aliasestailscale-rmcp, rtailscale
MCP tooltailscale
Config home~/.tailscale-mcp on hosts, /data in containers
Env prefixesTAILSCALE_*, TAILSCALE_MCP_*, TAILSCALE_RMCP_* for npm launcher controls

The repo, crate, and npm package use the RMCP family name. The shipped binary is rtailscale to avoid shadowing the official tailscale CLI.

Capabilities And Boundaries

  • List devices and inspect a single device by node ID or legacy numeric device ID.
  • Read subnet routes, API keys, ACL policy, DNS/MagicDNS settings, and tailnet users.
  • Authorize a device for the tailnet.
  • Delete a device only when TAILSCALE_ALLOW_DESTRUCTIVE=true and the caller also passes explicit confirmation.
  • Provide setup and doctor commands for local plugin/runtime checks.
This repo ownsTailscale ownsExplicitly out of scope
MCP/CLI projection, request validation, HTTP MCP auth policy, response shaping, setup checks, and destructive gates.Tailnet state, device identities, ACL semantics, DNS behavior, API key issuance, user membership, and upstream authorization.Replacing the admin console, storing caller credentials, multi-tailnet tenancy, arbitrary WireGuard control, policy editing beyond exposed actions, and local Tailscale daemon management.

Install

PathCommandBest forNotes
npm / npxnpx -y @dinglebear/rtailscale --helpLocal MCP clients and quick trials.Downloads the matching rtailscale binary from GitHub Releases.
Release installercurl -fsSL https://raw.githubusercontent.com/dinglebear-ai/rtailscale/main/scripts/install.sh | bashHost installs without Node.Installs rtailscale for the current Linux host.
Docker / Composedocker compose up -dShared HTTP MCP deployments.Reads .env and exposes container port 40040.
Build from sourcecargo build --releaseDevelopment and audits.Produces target/release/rtailscale.
Pluginclaude plugin install plugins/tailscaleClaude Code local plugin setup from this checkout.Ships the skill, .mcp.json, and a bundled binary. No hooks — run rtailscale setup check yourself if you want the environment verified.

npm / npx

Run the stdio MCP server or CLI without a manual binary install:

bash
npx -y @dinglebear/rtailscale --helpnpx -y @dinglebear/rtailscale mcpnpx -y @dinglebear/rtailscale devices --json

The npm package downloads rtailscale during postinstall. Override download behavior only when testing packaging:

VariablePurpose
TAILSCALE_RMCP_SKIP_DOWNLOAD=1Skip postinstall binary download.
TAILSCALE_RMCP_VERSION or TAILSCALE_RMCP_BINARY_VERSIONSelect the GitHub Release tag.
TAILSCALE_RMCP_REPOSelect the GitHub repo used for release downloads.
TAILSCALE_RMCP_RELEASE_BASE_URLSelect a custom release base URL.

Build From Source

bash
git clone https://github.com/dinglebear-ai/rtailscalecd rtailscalecargo build --release./target/release/rtailscale --help

Minimum supported Rust version: 1.86.

Quickstart

1. Get A Tailscale API Key

Create an API key at https://login.tailscale.com/admin/settings/keys. Use the minimum capability needed for the actions you plan to expose.

2. Configure The Tailnet

bash
export TAILSCALE_API_KEY="tskey-api-..."export TAILSCALE_TAILNET="-"          # personal, or "example.com" for orgs

Every Tailscale account belongs to a tailnet. TAILSCALE_TAILNET=- targets the default personal tailnet; organization tailnets usually use the org domain.

3. Run A Safe CLI Call

bash
npx -y @dinglebear/rtailscale devices --json

4. Start Loopback HTTP MCP

bash
TAILSCALE_MCP_HOST=127.0.0.1 npx -y @dinglebear/rtailscale serve

In another shell:

bash
curl -sf http://127.0.0.1:40040/health

5. Make A First MCP Call

bash
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"}}}'

Client Configuration

Claude Code Stdio

json
{  "mcpServers": {    "tailscale": {      "command": "npx",      "args": ["-y", "tailscale-rmcp", "mcp"],      "env": {        "TAILSCALE_API_KEY": "tskey-api-...",        "TAILSCALE_TAILNET": "-"      }    }  }}

Claude Code HTTP

json
{  "mcpServers": {    "tailscale": {      "type": "http",      "url": "http://127.0.0.1:40040/mcp",      "headers": {        "Authorization": "Bearer ${TAILSCALE_MCP_TOKEN}"      }    }  }}

Codex / Labby Gateway

Register Tailscale through Labby as an HTTP upstream when sharing one long-running server, or run it directly as stdio for local-only use.

toml
[mcp_servers.tailscale]command = "npx"args = ["-y", "tailscale-rmcp", "mcp"]

Generic MCP JSON

json
{  "command": "rtailscale",  "args": ["mcp"],  "env": {    "TAILSCALE_API_KEY": "tskey-api-...",    "TAILSCALE_TAILNET": "-"  }}

Do not put TAILSCALE_API_KEY, OAuth secrets, passwords, SSH keys, or upstream bearer tokens in MCP tool arguments. Use env, config files, or the MCP client's secret storage. MCP callers never provide credentials, tokens, keys, or secrets as action arguments.

Runtime Surfaces

SurfaceStatusEntry pointPurpose
MCP stdioSupportedrtailscale mcp, npx -y @dinglebear/rtailscale mcpLocal child-process MCP clients.
MCP HTTPSupportedrtailscale serve, POST /mcpStreamable HTTP MCP for local or shared server deployments.
CLISupportedrtailscale <command>Scriptable parity and debugging.
REST APINot shippedN/ATailscale already owns the REST API.
Web UINot shippedN/ATailscale already owns the admin console.

MCP Tool Reference

One MCP tool is exposed: tailscale. Pass the required action argument to select the operation.

Read Actions

ActionDescriptionRequired paramsOptional params
devicesList all devices in the tailnet.nonenone
deviceReturn one device.idnone
device_routesReturn subnet routes for one device.idnone
keysList API keys in the tailnet.nonenone
aclReturn ACL policy JSON.nonenone
dnsReturn DNS nameservers, search paths, and MagicDNS preferences.nonenone
usersList tailnet users.nonenone
helpReturn built-in action documentation.nonenone

Write Actions

ActionDescriptionRequired paramsOptional params
authorize_deviceApprove a device for the tailnet.idnone

Destructive Actions

ActionDescriptionRequired paramsOptional params
delete_devicePermanently remove a device.id, confirm=truenone

Device IDs may be stable node IDs such as n1234abc or legacy numeric device IDs. Use action=devices first to discover IDs.

CLI Reference

The binary calls the same service layer as the MCP tool:

bash
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

All commands currently print JSON. --json is accepted for parity with the rest of the RMCP family.

Configuration

Host installs read ~/.tailscale-mcp/.env before loading config. Containers read /data/.env. Process environment overrides both.

VariableDefaultPurpose
TAILSCALE_API_KEYunsetTailscale API key.
TAILSCALE_TAILNET-Tailnet: org domain or - for personal.
TAILSCALE_ALLOW_DESTRUCTIVEfalseEnable delete_device server-side.
TAILSCALE_MCP_HOST0.0.0.0HTTP bind host.
TAILSCALE_MCP_PORT40040HTTP bind port.
TAILSCALE_MCP_SERVER_NAMEtailscale-rmcpAdvertised MCP server name.
TAILSCALE_MCP_NO_AUTHfalseDisable auth only for loopback development.
TAILSCALE_MCP_TOKENunsetStatic bearer token for HTTP MCP.
TAILSCALE_NOAUTHfalseTrust an upstream gateway to enforce auth.
TAILSCALE_MCP_AUTH_MODEbearerbearer or oauth.
TAILSCALE_MCP_PUBLIC_URLunsetPublic URL for OAuth discovery.
TAILSCALE_MCP_GOOGLE_CLIENT_IDunsetGoogle OAuth client ID.
TAILSCALE_MCP_GOOGLE_CLIENT_SECRETunsetGoogle OAuth client secret.
TAILSCALE_MCP_AUTH_ADMIN_EMAILunsetAdmin email for OAuth bootstrap.
TAILSCALE_MCP_ALLOWED_HOSTSunsetExtra accepted Host header values.
TAILSCALE_MCP_ALLOWED_ORIGINSunsetExtra accepted CORS origins.
TAILSCALE_MCP_HOMEplatform appdataOverride the config/log home used by setup and file logging.

The Tailscale API base URL is not configurable; it is fixed at https://api.tailscale.com/api/v2 in src/tailscale.rs.

Authentication

Stdio MCP runs as a local trusted child process and does not use HTTP auth.

HTTP MCP auth policy:

StateConditionBehavior
Loopback devTAILSCALE_MCP_HOST starts with 127. or auth is explicitly disabled on loopbackLocal unauthenticated development is allowed.
Mounted bearerNon-loopback with TAILSCALE_MCP_TOKENRequires Authorization: Bearer <token> and action scopes.
Mounted OAuthTAILSCALE_MCP_AUTH_MODE=oauthUses Google OAuth/JWT through lab-auth.
Trusted gatewayTAILSCALE_NOAUTH=trueAssumes a reverse proxy or gateway already enforced auth.

Non-loopback HTTP startup is rejected unless bearer auth, OAuth, or TAILSCALE_NOAUTH=true is configured.

Safety And Trust Model

  • Tailscale API keys are loaded from config/env only.
  • MCP callers select actions and IDs, not upstream credentials.
  • delete_device has a two-key interlock: TAILSCALE_ALLOW_DESTRUCTIVE=true on the server and caller-provided confirm=true.
  • Missing IDs and unknown actions fail before upstream calls.
  • Non-loopback HTTP deployments must use bearer auth, OAuth, or a trusted authenticated gateway.
  • This bridge does not sandbox Tailscale itself. Tailscale remains responsible for API permissions and tailnet state changes.

Architecture

text
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 -> ValueCLI shim         (src/cli.rs)        argv -> service -> stdout

Distribution Contract

  • Cargo.toml, Cargo.lock, packages/tailscale-rmcp/package.json, .release-please-manifest.json, and server.json must agree on the released version.
  • GitHub Releases publish the rtailscale binary consumed by the npm launcher.
  • The npm package name is @dinglebear/rtailscale; binary aliases are tailscale-rmcp and rtailscale.
  • Docker/OCI metadata uses ghcr.io/dinglebear-ai/rtailscale:<version> (see docker-compose.prod.yml). The image path still uses the pre-transfer owner namespace even though the repo now lives at dinglebear-ai/rtailscale.
  • plugins/tailscale/.mcp.json must launch npx -y @dinglebear/rtailscale mcp so stdio clients start the MCP transport rather than the HTTP server.
  • plugins/tailscale/ ships no Claude Code hooks; scripts/validate-plugin-layout.sh fails if a hooks/ directory reappears.
  • The root README is curated. Source of truth for action behavior and config defaults is src/, plus the package, plugin, and registry manifests.

Development

bash
cargo fmt --checkcargo testcargo clippy -- -D warningscargo build --releasenpm --prefix packages/tailscale-rmcp run check

Verification

bash
just validate-pluginnpm --prefix packages/tailscale-rmcp run checkcargo checkcargo testgit diff --check

Runtime smoke:

bash
TAILSCALE_API_KEY=tskey-api-... \TAILSCALE_TAILNET=- \rtailscale devices --json

HTTP smoke:

bash
TAILSCALE_MCP_HOST=127.0.0.1 rtailscale servecurl -sf http://127.0.0.1:40040/health

Deployment

Use loopback for local development:

bash
TAILSCALE_MCP_HOST=127.0.0.1 rtailscale serve

Use Docker Compose for shared HTTP deployment:

bash
cp .env.example .envdocker compose up -d

When binding to a non-loopback address, configure TAILSCALE_MCP_TOKEN, TAILSCALE_MCP_AUTH_MODE=oauth, or TAILSCALE_NOAUTH=true behind an authenticated gateway.

Troubleshooting

SymptomCheck
TAILSCALE_API_KEY is missingSet it in env or ~/.tailscale-mcp/.env.
Device calls return unauthorizedRefresh the API key in Tailscale admin settings.
HTTP /mcp returns unauthorizedSet TAILSCALE_MCP_TOKEN and send Authorization: Bearer <token>.
Stdio client hangs or logs JSON errorsEnsure client config runs tailscale-rmcp mcp, not the default HTTP server mode.
delete_device is rejectedSet TAILSCALE_ALLOW_DESTRUCTIVE=true server-side and pass confirm=true after verifying the target.
Port conflictSet TAILSCALE_MCP_PORT or stop the process already using 40040.

Related Servers

  • soma - RMCP runtime and scaffold for provider-backed MCP servers.
  • unifi-rmcp - UniFi controller REST API bridge.
  • unraid - Unraid monorepo; unraid-rs/ is the GraphQL bridge for NAS and server management.
  • apprise-rmcp - Apprise notification fan-out bridge for many delivery backends.
  • gotify-rmcp - Gotify push notification bridge for sends, messages, apps, and clients.
  • arcane-rmcp - Arcane Docker management bridge for containers and related resources.
  • yarr - Media-stack bridge for Sonarr, Radarr, Prowlarr, Plex, and related services.
  • ytdl-rmcp - Media download and metadata workflow server.
  • synapse-rmcp - Local Synapse workflow server for scout and flux actions.
  • cortex - Syslog and homelab log aggregation MCP server.
  • axon - RAG, crawl, scrape, extract, and semantic search project.
  • labby - Homelab control plane and MCP gateway project.
  • lumen - Local semantic code search MCP server.

Documentation

  • CLAUDE.md is the curated local operating guide for contributors and agents.
  • docs/SETUP.md is curated plugin/setup guidance.
  • docs/OAUTH.md is curated OAuth setup guidance.
  • plugins/tailscale/skills/tailscale/SKILL.md is the agent usage guide.
  • src/ is the source of truth for current actions, config defaults, auth behavior, and CLI parsing.
  • Package, plugin, Docker, and registry manifests are curated distribution contracts and should be checked with the verification commands above.

License

Original Dinglebear-authored portions of this project are licensed under AGPL-3.0-only. Separate commercial licensing is available for organizations that need terms outside the AGPL. Third-party material remains under its original license. See LICENSING.md.

來源:README.md,提交 d10e4d5

工具

0
SourceWeft 尚未讀取此伺服器的工具。

版本歷史

1
  1. v0.1.4最新Sep 16, 2026

評分

已滿足適用檢查項的 85%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Dinglebear 整合