Tailscale R MCP server
{
"mcpServers": {
"dinglebear-tailscale-r": {
"command": "npx",
"args": [
"-y",
"tailscale-rmcp@latest"
],
"env": {
"TAILSCALE_RMCP_RELEASE_BASE_URL": "https://...",
"TAILSCALE_API_KEY": "<tailscale_api_key>",
"TAILSCALE_MCP_TOKEN": "<tailscale_mcp_token>",
"TAILSCALE_MCP_PUBLIC_URL": "https://...",
"TAILSCALE_MCP_GOOGLE_CLIENT_ID": "<tailscale_mcp_google_client_id>",
"TAILSCALE_MCP_GOOGLE_CLIENT_SECRET": "<tailscale_mcp_google_client_secret>"
}
}
}
}{
"mcpServers": {
"dinglebear-tailscale-r": {
"command": "npx",
"args": [
"-y",
"tailscale-rmcp@latest"
],
"env": {
"TAILSCALE_RMCP_RELEASE_BASE_URL": "https://...",
"TAILSCALE_API_KEY": "<tailscale_api_key>",
"TAILSCALE_MCP_TOKEN": "<tailscale_mcp_token>",
"TAILSCALE_MCP_PUBLIC_URL": "https://...",
"TAILSCALE_MCP_GOOGLE_CLIENT_ID": "<tailscale_mcp_google_client_id>",
"TAILSCALE_MCP_GOOGLE_CLIENT_SECRET": "<tailscale_mcp_google_client_secret>"
}
}
}
}{
"mcpServers": {
"dinglebear-tailscale-r": {
"command": "npx",
"args": [
"-y",
"tailscale-rmcp@latest"
],
"env": {
"TAILSCALE_RMCP_RELEASE_BASE_URL": "https://...",
"TAILSCALE_API_KEY": "<tailscale_api_key>",
"TAILSCALE_MCP_TOKEN": "<tailscale_mcp_token>",
"TAILSCALE_MCP_PUBLIC_URL": "https://...",
"TAILSCALE_MCP_GOOGLE_CLIENT_ID": "<tailscale_mcp_google_client_id>",
"TAILSCALE_MCP_GOOGLE_CLIENT_SECRET": "<tailscale_mcp_google_client_secret>"
}
}
}
}{
"servers": {
"dinglebear-tailscale-r": {
"command": "npx",
"args": [
"-y",
"tailscale-rmcp@latest"
],
"env": {
"TAILSCALE_RMCP_RELEASE_BASE_URL": "${input:tailscale_rmcp_release_base_url}",
"TAILSCALE_API_KEY": "${input:tailscale_api_key}",
"TAILSCALE_MCP_TOKEN": "${input:tailscale_mcp_token}",
"TAILSCALE_MCP_PUBLIC_URL": "${input:tailscale_mcp_public_url}",
"TAILSCALE_MCP_GOOGLE_CLIENT_ID": "${input:tailscale_mcp_google_client_id}",
"TAILSCALE_MCP_GOOGLE_CLIENT_SECRET": "${input:tailscale_mcp_google_client_secret}"
}
}
},
"inputs": [
{
"id": "tailscale_rmcp_release_base_url",
"type": "promptString",
"description": "Tailscale rmcp release base url",
"password": true
},
{
"id": "tailscale_api_key",
"type": "promptString",
"description": "Tailscale api key",
"password": true
},
{
"id": "tailscale_mcp_token",
"type": "promptString",
"description": "Tailscale mcp token",
"password": true
},
{
"id": "tailscale_mcp_public_url",
"type": "promptString",
"description": "Tailscale mcp public url",
"password": true
},
{
"id": "tailscale_mcp_google_client_id",
"type": "promptString",
"description": "Tailscale mcp google client id",
"password": true
},
{
"id": "tailscale_mcp_google_client_secret",
"type": "promptString",
"description": "Tailscale mcp google client secret",
"password": true
}
]
}{
"mcpServers": {
"dinglebear-tailscale-r": {
"command": "npx",
"args": [
"-y",
"tailscale-rmcp@latest"
],
"env": {
"TAILSCALE_RMCP_RELEASE_BASE_URL": "https://...",
"TAILSCALE_API_KEY": "<tailscale_api_key>",
"TAILSCALE_MCP_TOKEN": "<tailscale_mcp_token>",
"TAILSCALE_MCP_PUBLIC_URL": "https://...",
"TAILSCALE_MCP_GOOGLE_CLIENT_ID": "<tailscale_mcp_google_client_id>",
"TAILSCALE_MCP_GOOGLE_CLIENT_SECRET": "<tailscale_mcp_google_client_secret>"
}
}
}
}file .mcp.json (in your project root)file claude_desktop_config.jsonfile ~/.cursor/mcp.jsonfile .vscode/mcp.jsonfile ~/.codeium/windsurf/mcp_config.jsoninstall npx -y tailscale-rmcpversion 0.1.3
What it does
Rust MCP server for reading and managing Tailscale devices, routes, DNS settings, API keys, ACL policies, and users. Supports device authorization and deletion with safety gates. For developers and operators managing Tailscale tailnets through MCP clients or CLI.
- List and inspect all devices in your Tailscale tailnet to audit connectivity and node status.
- Authorize new devices to join a tailnet or delete devices when destructive operations are explicitly enabled.
- Read ACL policies, DNS configuration, subnet routes, and API keys to understand or verify tailnet settings.
Tools this server exposes
| Tool | Does |
|---|---|
| tailscale | Exposes tailnet operations including listing devices, reading routes and DNS settings, inspecting keys and ACL policy, authorizing devices, and deleting devices |
Before you enable it
An MCP server runs with whatever access you give it. Start with a development account rather than production, and check which tools the server exposes before you let an agent call them unattended.