Drive a Tailscale node and its tailnet through the CLI and the control-plane API
Connect Runs on your machine
claude mcp add tailscale-mcp -e TAILSCALE_API_KEY=<TAILSCALE_API_KEY> -e TAILSCALE_OAUTH_CLIENT_ID=<TAILSCALE_OAUTH_CLIENT_ID> -e TAILSCALE_OAUTH_CLIENT_SECRET=<TAILSCALE_OAUTH_CLIENT_SECRET> -e TAILSCALE_TAILNET=<TAILSCALE_TAILNET> -e TAILSCALE_MCP_PRESET=<TAILSCALE_MCP_PRESET> -e TAILSCALE_MCP_ALLOW_WRITE=<TAILSCALE_MCP_ALLOW_WRITE> -e TAILSCALE_MCP_ALLOW_DESTRUCTIVE=<TAILSCALE_MCP_ALLOW_DESTRUCTIVE> -- npx -y @tailscale-mcp/[email protected]
{
"mcpServers": {
"tailscale-mcp": {
"command": "npx",
"args": [
"-y",
"@tailscale-mcp/[email protected]"
],
"env": {
"TAILSCALE_API_KEY": "<TAILSCALE_API_KEY>",
"TAILSCALE_OAUTH_CLIENT_ID": "<TAILSCALE_OAUTH_CLIENT_ID>",
"TAILSCALE_OAUTH_CLIENT_SECRET": "<TAILSCALE_OAUTH_CLIENT_SECRET>",
"TAILSCALE_TAILNET": "<TAILSCALE_TAILNET>",
"TAILSCALE_MCP_PRESET": "<TAILSCALE_MCP_PRESET>",
"TAILSCALE_MCP_ALLOW_WRITE": "<TAILSCALE_MCP_ALLOW_WRITE>",
"TAILSCALE_MCP_ALLOW_DESTRUCTIVE": "<TAILSCALE_MCP_ALLOW_DESTRUCTIVE>"
}
}
}
}
{
"mcpServers": {
"tailscale-mcp": {
"command": "npx",
"args": [
"-y",
"@tailscale-mcp/[email protected]"
],
"env": {
"TAILSCALE_API_KEY": "<TAILSCALE_API_KEY>",
"TAILSCALE_OAUTH_CLIENT_ID": "<TAILSCALE_OAUTH_CLIENT_ID>",
"TAILSCALE_OAUTH_CLIENT_SECRET": "<TAILSCALE_OAUTH_CLIENT_SECRET>",
"TAILSCALE_TAILNET": "<TAILSCALE_TAILNET>",
"TAILSCALE_MCP_PRESET": "<TAILSCALE_MCP_PRESET>",
"TAILSCALE_MCP_ALLOW_WRITE": "<TAILSCALE_MCP_ALLOW_WRITE>",
"TAILSCALE_MCP_ALLOW_DESTRUCTIVE": "<TAILSCALE_MCP_ALLOW_DESTRUCTIVE>"
}
}
}
}
{
"servers": {
"tailscale-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@tailscale-mcp/[email protected]"
],
"env": {
"TAILSCALE_API_KEY": "<TAILSCALE_API_KEY>",
"TAILSCALE_OAUTH_CLIENT_ID": "<TAILSCALE_OAUTH_CLIENT_ID>",
"TAILSCALE_OAUTH_CLIENT_SECRET": "<TAILSCALE_OAUTH_CLIENT_SECRET>",
"TAILSCALE_TAILNET": "<TAILSCALE_TAILNET>",
"TAILSCALE_MCP_PRESET": "<TAILSCALE_MCP_PRESET>",
"TAILSCALE_MCP_ALLOW_WRITE": "<TAILSCALE_MCP_ALLOW_WRITE>",
"TAILSCALE_MCP_ALLOW_DESTRUCTIVE": "<TAILSCALE_MCP_ALLOW_DESTRUCTIVE>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
TAILSCALE_API_KEYOptional, secret | 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_IDOptional | An OAuth client id, used with TAILSCALE_OAUTH_CLIENT_SECRET when there is no API access token. |
TAILSCALE_OAUTH_CLIENT_SECRETOptional, secret | The OAuth client secret that goes with TAILSCALE_OAUTH_CLIENT_ID. |
TAILSCALE_TAILNETOptional | The tailnet the control-plane tools act on. Without it they act on the one the credential belongs to. |
TAILSCALE_MCP_PRESETOptional | Which tools are offered: minimal, core or full. |
TAILSCALE_MCP_ALLOW_WRITEOptional | Offer the tools that change something. Read-only without it. |
TAILSCALE_MCP_ALLOW_DESTRUCTIVEOptional | Offer the tools that remove or sever something. Implies the write tier. |
Details
| Package | @tailscale-mcp/[email protected] (NPM, stdio) |
| Package | ghcr.io/tailscale-mcp/tailscale-mcp:2.1.0 (OCI, stdio) |
| First published | 13 Nov 2026 |
| Last updated | 13 Nov 2026 |
| Registry name | io.github.tailscale-mcp/tailscale-mcp |
More other servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
