原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Tailscale

作者:tailscale-mcp版本 2.0.5i★ –i在你的电脑上运行
注册名称io.github.tailscale-mcp/tailscale-mcp

安装

概览

作者提供的说明(英文原文)

Drive a Tailscale node and its tailnet through the CLI and the control-plane API

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 其他
  • 你需要填写:TAILSCALE_API_KEY, TAILSCALE_OAUTH_CLIENT_SECRET

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: TAILSCALE_API_KEY, TAILSCALE_OAUTH_CLIENT_ID, TAILSCALE_OAUTH_CLIENT_SECRET, TAILSCALE_TAILNET, TAILSCALE_MCP_PRESET, TAILSCALE_MCP_ALLOW_WRITE, TAILSCALE_MCP_ALLOW_DESTRUCTIVE

标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。

你需要

  • npm已安装 Node.js(用于 npx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "tailscale": {
      "command": "npx",
      "args": [
        "-y",
        "@tailscale-mcp/tailscale-mcp"
      ],
      "env": {
        "TAILSCALE_API_KEY": "your-value",
        "TAILSCALE_OAUTH_CLIENT_ID": "your-value",
        "TAILSCALE_OAUTH_CLIENT_SECRET": "your-value",
        "TAILSCALE_TAILNET": "your-value",
        "TAILSCALE_MCP_PRESET": "your-value",
        "TAILSCALE_MCP_ALLOW_WRITE": "your-value",
        "TAILSCALE_MCP_ALLOW_DESTRUCTIVE": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add tailscale --env TAILSCALE_API_KEY=your-value --env TAILSCALE_OAUTH_CLIENT_ID=your-value --env TAILSCALE_OAUTH_CLIENT_SECRET=your-value --env TAILSCALE_TAILNET=your-value --env TAILSCALE_MCP_PRESET=your-value --env TAILSCALE_MCP_ALLOW_WRITE=your-value --env TAILSCALE_MCP_ALLOW_DESTRUCTIVE=your-value -- npx -y @tailscale-mcp/tailscale-mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "tailscale": {
      "command": "npx",
      "args": [
        "-y",
        "@tailscale-mcp/tailscale-mcp"
      ],
      "env": {
        "TAILSCALE_API_KEY": "your-value",
        "TAILSCALE_OAUTH_CLIENT_ID": "your-value",
        "TAILSCALE_OAUTH_CLIENT_SECRET": "your-value",
        "TAILSCALE_TAILNET": "your-value",
        "TAILSCALE_MCP_PRESET": "your-value",
        "TAILSCALE_MCP_ALLOW_WRITE": "your-value",
        "TAILSCALE_MCP_ALLOW_DESTRUCTIVE": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "tailscale": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@tailscale-mcp/tailscale-mcp"
      ],
      "env": {
        "TAILSCALE_API_KEY": "your-value",
        "TAILSCALE_OAUTH_CLIENT_ID": "your-value",
        "TAILSCALE_OAUTH_CLIENT_SECRET": "your-value",
        "TAILSCALE_TAILNET": "your-value",
        "TAILSCALE_MCP_PRESET": "your-value",
        "TAILSCALE_MCP_ALLOW_WRITE": "your-value",
        "TAILSCALE_MCP_ALLOW_DESTRUCTIVE": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • TAILSCALE_API_KEY 机密 env
    A control-plane API access token. One of this, the OAuth client pair, or the OAuth JWT file is needed for the tailnet tools; without any of them only the local tools are offered.
  • TAILSCALE_OAUTH_CLIENT_ID env
    An OAuth client id, used with TAILSCALE_OAUTH_CLIENT_SECRET when there is no API access token.
  • TAILSCALE_OAUTH_CLIENT_SECRET 机密 env
    The OAuth client secret that goes with TAILSCALE_OAUTH_CLIENT_ID.
  • TAILSCALE_TAILNET env
    The tailnet the control-plane tools act on. Without it they act on the one the credential belongs to.
  • TAILSCALE_MCP_PRESET env
    Which tools are offered: minimal, core or full.
  • TAILSCALE_MCP_ALLOW_WRITE env
    Offer the tools that change something. Read-only without it.
  • TAILSCALE_MCP_ALLOW_DESTRUCTIVE env
    Offer the tools that remove or sever something. Implies the write tier.

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 tailscale-mcp 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“其他”中的其他服务器比较i

  • 星标数多于此分类中其他 32435 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 32435 个服务器的 75% 更新
  • 基础检查结果等于或优于此分类中其他 32435 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Tailscale 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

你需要填写:TAILSCALE_API_KEY, TAILSCALE_OAUTH_CLIENT_SECRET

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(2.0.5)于11天前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js, Docker。

有什么可以替代它?

同一分类中有:Spec Driven Development, Remote Desktop Commander, Apify MCP Server

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Spec Driven Development

作者:formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

在你的电脑上运行★ 440MIT14个月前更新
安装

Remote Desktop Commander

作者:desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

在云端运行★ 211昨天更新
安装

Apify MCP Server

作者:apify

Extract data from any website with thousands of scrapers, crawlers, and automations on Apify Store ⚡

在云端运行今天更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

tailscale-mcp

An MCP server for Tailscale. The node it runs on is driven through the tailscale command-line interface; the tailnet behind it is driven through the control-plane REST API.

186 tools, one per verb, with real parameters and honest annotations. Tailscale's own JSON comes back unmodified, so anything you learned from Tailscale's documentation still applies. When something fails you get a fixed error code and a hint, not a wall of standard error.

Both surfaces are optional and neither is fatal. No tailscale binary means the tools that drive this node are not offered; no control-plane credential means the tools that drive the tailnet are not. tailscale-mcp diagnose says which of the two this machine has.

On macOS that binary is the tailscale shim the Tailscale application installs into /usr/local/bin. The executable inside the application bundle is not a substitute and is not accepted as one: run outside a login shell it starts the GUI rather than answering, so the local tools would be offered and then fail on every call.

Install

ChannelHow
npmnpx -y @tailscale-mcp/tailscale-mcp — downloads the release binary for your machine and refuses to run it unless the release's own SHA256SUMS vouches for it
Containerdocker run -i --rm -e TAILSCALE_API_KEY ghcr.io/tailscale-mcp/tailscale-mcp
Homebrewbrew trust tailscale-mcp/tap && brew install tailscale-mcp/tap/tailscale-mcp — Homebrew 6 will not load a third-party tap until it is trusted, and reports that as an Invalid formula error once per platform it knows
BundleDownload the .mcpb for your platform from the releases and open it — for MCP clients that install bundles, such as Claude Desktop
From sourcecargo install tailscale-mcp

Release archives are on the releases page with a SHA256SUMS beside them: macOS and Linux on x86_64 and arm64, and Windows on x86_64.

Point a client at it

tailscale-mcp setup claude-code

prints the snippet for your client — claude-code, claude-desktop, vscode, cursor or zed — and says where it goes. It writes nothing: the snippet is yours to paste, and it leaves the credential out, for the reason in the next section.

Installed through npm there is nothing to install first, and the client can carry the settings:

{

"mcpServers": { "tailscale": { "command": "npx", "args": ["-y", "@tailscale-mcp/tailscale-mcp"], "env": { "TAILSCALE_MCP_ALLOW_WRITE": "true" } } } }

That much is enough to start it. Without a credential it offers the tools that drive this node and hides the ones that act on the tailnet, and tailscale-mcp diagnose says which of the two you have.

Authenticate

setup prints no credential of its own, because the file it prints into is one people paste into issues and chats without rereading. Adding one is a separate, deliberate step. Two shapes go in the env block above — an API access token:

"env": {

"TAILSCALE_API_KEY": "tskey-api-…", "TAILSCALE_MCP_ALLOW_WRITE": "true" }

or an OAuth client:

"env": {

"TAILSCALE_OAUTH_CLIENT_ID": "k123456CNTRL", "TAILSCALE_OAUTH_CLIENT_SECRET": "tskey-client-…", "TAILSCALE_MCP_ALLOW_WRITE": "true" }

The credentials table has the other shapes, including the JWT file for federated identity. Every tool is offered with either of these: the choice is not about what you can do with the server, which is why it is worth making on other grounds.

Prefer the OAuth client for anything you keep. The reason is what a client configuration *is*: a file somebody writes once and then forgets, holding a secret for as long as the tool is installed.

An API access token suits that badly on three counts. It belongs to a person and carries everything that person can do, so what leaks with the file is their whole account rather than the tools you turned on. It expires — which in a file nobody has looked at since they wrote it does not present as an expired credential, but as a server that has stopped working for no reason. And it is itself the bearer token, so the thing at rest is the thing that opens the door.

An OAuth client inverts each of those. It belongs to the tailnet, so it outlives whoever set it up and is revoked without touching that person's access. Its scopes narrow it to what the toolsets you enabled actually call. It does not expire on its own, and what sits in the file is not a key but the means of minting one — the token it hands this server lasts an hour, so a copy taken from a backup or a screen share is worth very little by the time it is used.

The API access token is what the control plane offers you first, and is the quicker thing to try this out with. It is worth replacing once the file is one you are going to keep.

Tiers and presets

Two independent dials decide what a session offers.

The tier is how dangerous a tool is allowed to be. Read tools change nothing and are always offered. Write tools change configuration that can be changed back. Destructive tools remove something or expose something in a way that is not simply undone — deleting a device, revoking a key, publishing a service to the internet. Read is always on; write and destructive are off until they are turned on, and a tool above the permitted tier is *not listed*, not refused when called.

The preset is how much surface area is offered at all. minimal is what an agent needs to answer questions and fix the common things; core adds the rest of everyday administration; full adds the tailnet-wide and irreversible corners. Two toolsets are in no preset and must be asked for by name: local-debug, which is Tailscale's own diagnostic surface, and local-passthrough, which is one tool that runs an arbitrary tailscale subcommand.

PresetReadWith --allow-writeWith --allow-destructiveToolsets
minimal3751554
core (default)5710612613
full6812615518

Adding --toolsets +local-debug,+local-passthrough to full reaches all 186.

Some destructive tools ask for one more thing: a confirm: true argument. Those are the ones that affect the whole tailnet, or that can cut this server off from the node or tailnet it is driving — logging the node out, deleting its own device, deploying a policy that locks the caller out. The server does not decide they are wrong; it makes the caller say it meant them.

  • [docs/tools.md](docs/tools.md) — every tool, its tier and what it does. Generated from the code.
  • [docs/configuration.md](docs/configuration.md) — every environment variable and flag, with defaults.
  • [docs/errors.md](docs/errors.md) — every error code and what to do about it.

Resources, prompts and completions

Nine resources — eight fixed and one template addressed by device identifier — give a client the local node's status, preferences, netcheck report and tailnet lock state, and the tailnet's policy file, devices, DNS configuration and settings. They are read-only, they appear only when their surface is on, and there are no subscriptions.

Three prompts steer a sequence of tool calls: diagnose_connectivity, review_policy_change and audit_tailnet_access. They follow the same rule as the resources: each appears only when the surface it needs is on, and diagnose_connectivity, which reads from both, stops at the steps the session can actually take.

Of the four argument slots those two surfaces expose, three are completed, so a client can offer the values rather than leave them to be guessed: the device template's identifier, diagnose_connectivity's peer, and audit_tailnet_access's subject — which offers users, tags and devices, in that order, so that a tailnet of thousands of devices still shows its handful of users within the hundred values the protocol sends. The fourth, review_policy_change's goal, is a sentence about intent, and completing it would be inventing one. Every value offered is one the server will accept back — a device is offered by its MagicDNS name, never by a hostname two machines might share — and a source that cannot answer completes to nothing rather than to an error. The method is rate limited, as the specification asks, because each keystroke is a request.

Note that the protocol completes a prompt argument and a resource template variable, and nothing else: tool arguments cannot be completed, so this helps the four slots above and none of the 186 tools. Client support is uneven — Claude Code completes resource templates, VS Code completes both, and several clients do neither — so this is an improvement where it is read and inert everywhere else.

Transports

Stdio by default. --http serves Streamable HTTP instead, on 127.0.0.1:8449, behind a bearer token in TAILSCALE_MCP_HTTP_TOKEN, with host and origin allow-lists, a body limit, a per-address rate limit and an open health endpoint. Binding anywhere but loopback needs either that token or --http-no-auth said out loud.

Security

What the tiers do. A tool above the permitted tier is not in the tool list, so a caller cannot invoke it by guessing its name, and a model cannot be talked into one that was never offered. The default is read-only. confirm on top of the destructive tier is a second signal for the operations that are worth one. Secrets never reach an argument list, a log line or an error message; a minted key or invite URL is returned once, verbatim, and nothing here keeps a copy. Every tool result and every error goes through the same redaction on the way out.

What the tiers do not do. They are not an authorization system, and they are not a sandbox.

  • A tier is a property of the *server*, not of the caller. Everyone talking to one server gets the same tools. If two callers should have different powers, run two servers.
  • Permitting a tier permits every tool in it. There is no per-tool switch; --toolsets is the coarser dial for narrowing what a session can reach.
  • The credential is the real boundary. A read-only OAuth client makes the tailnet write tools fail at the control plane whatever this server offers, and that is the boundary to lean on. Scope the credential, and use the tiers to stop honest mistakes.
  • The local tools run as whoever runs this server. Tailscale's own operator check applies — commands refused to a non-operator are refused here, with needs_operator — but a server run as the operator can do what the operator can do.
  • Read is not harmless. The read tier returns real network topology: node names, addresses, users, policy. Anything that can read the tool output can read that.

The server never escalates privileges. It does not use sudo, does not ask for elevation, and does not alter its own permissions or install anything. It runs the tailscale binary as the user it was started as and sends the control-plane credential it was given. Where Tailscale refuses because of who is asking, that refusal is passed through rather than worked around. Four tools do write files: three of them — a certificate, a Taildrop delivery, a metrics file — to the path the call names, and tailscale_configure_kubeconfig to the kubeconfig the client itself would edit. All four write as the user running the server, and so does tailscale_run, which is in no preset and, once asked for by name, can reach those same writes and anything else the tailscale binary does.

Over HTTP the defaults are the cautious ones — loopback, a token required, no browser origin allowed — and each of those is widened by a flag, deliberately.

Compared with the other Tailscale MCP servers

This server is a

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx