Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Drive a Tailscale node and its tailnet through the CLI and the control-plane API
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
TAILSCALE_API_KEY, TAILSCALE_OAUTH_CLIENT_ID, TAILSCALE_OAUTH_CLIENT_SECRET, TAILSCALE_TAILNET, TAILSCALE_MCP_PRESET, TAILSCALE_MCP_ALLOW_WRITE, TAILSCALE_MCP_ALLOW_DESTRUCTIVE「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
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/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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .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_OAUTH_CLIENT_ID envTAILSCALE_TAILNET envTAILSCALE_MCP_PRESET envTAILSCALE_MCP_ALLOW_WRITE envTAILSCALE_MCP_ALLOW_DESTRUCTIVE envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント tailscale-mcp で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:TAILSCALE_API_KEY, TAILSCALE_OAUTH_CLIENT_SECRET
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(2.0.5)がレジストリに届いたのは11 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.js, Dockerも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, debuff
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Let coding agents play, test and tune your 2D web game: live state, explained errors, replays, fuzz.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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.
| Channel | How |
|---|---|
| npm | npx -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 |
| Container | docker run -i --rm -e TAILSCALE_API_KEY ghcr.io/tailscale-mcp/tailscale-mcp |
| Homebrew | brew 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 |
| Bundle | Download the .mcpb for your platform from the releases and open it — for MCP clients that install bundles, such as Claude Desktop |
| From source | cargo 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.
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.
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.
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.
| Preset | Read | With --allow-write | With --allow-destructive | Toolsets |
|---|---|---|---|---|
minimal | 37 | 51 | 55 | 4 |
core (default) | 57 | 106 | 126 | 13 |
full | 68 | 126 | 155 | 18 |
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.
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.
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.
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.
--toolsets is the coarser dial for narrowing what a session can reach.needs_operator — but a server run as the operator can do what the operator can do.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.
This server is a
冒頭だけを表示しています。続きはリポジトリで読めます