Tailscale for VS Code
io.github.tailscale-mcp/tailscale-mcp
Drive a Tailscale node and its tailnet through the CLI and the control-plane API
client:VS Code
transport:stdio
runtime:npm
Install Tailscale in VS Code
.vscode/mcp.json
{
"inputs": [
{
"type": "promptString",
"id": "tailscale-api-key",
"description": "TAILSCALE_API_KEY",
"password": true
},
{
"type": "promptString",
"id": "tailscale-oauth-client-id",
"description": "TAILSCALE_OAUTH_CLIENT_ID",
"password": true
},
{
"type": "promptString",
"id": "tailscale-oauth-client-secret",
"description": "TAILSCALE_OAUTH_CLIENT_SECRET",
"password": true
},
{
"type": "promptString",
"id": "tailscale-tailnet",
"description": "TAILSCALE_TAILNET",
"password": true
},
{
"type": "promptString",
"id": "tailscale-mcp-preset",
"description": "TAILSCALE_MCP_PRESET",
"password": true
},
{
"type": "promptString",
"id": "tailscale-mcp-allow-write",
"description": "TAILSCALE_MCP_ALLOW_WRITE",
"password": true
},
{
"type": "promptString",
"id": "tailscale-mcp-allow-destructive",
"description": "TAILSCALE_MCP_ALLOW_DESTRUCTIVE",
"password": true
}
],
"servers": {
"tailscale-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@tailscale-mcp/tailscale-mcp"
],
"env": {
"TAILSCALE_API_KEY": "${input:tailscale-api-key}",
"TAILSCALE_OAUTH_CLIENT_ID": "${input:tailscale-oauth-client-id}",
"TAILSCALE_OAUTH_CLIENT_SECRET": "${input:tailscale-oauth-client-secret}",
"TAILSCALE_TAILNET": "${input:tailscale-tailnet}",
"TAILSCALE_MCP_PRESET": "${input:tailscale-mcp-preset}",
"TAILSCALE_MCP_ALLOW_WRITE": "${input:tailscale-mcp-allow-write}",
"TAILSCALE_MCP_ALLOW_DESTRUCTIVE": "${input:tailscale-mcp-allow-destructive}"
}
}
}
}
VS Code prompts for each input the first time the server starts, so no secret is written to the file. VS Code docs