Tailscale MCP Server

Integra con la CLI y API de Tailscale para la gestión y monitoreo automatizados de la red.

Documentación

Tailscale MCP Server

npm version MIT License CI status Docker image

Tailscale MCP server on Glama

Un servidor de Model Context Protocol (MCP) para operar Tailscale desde cualquier cliente MCP. Admite stdio local para clientes de escritorio y un transporte HTTP autenticado para despliegues de tailnet privados. Por defecto, acceso de solo lectura, enlace a localhost y credenciales OAuth de corta duración cuando estén disponibles.


Tabla de Contenidos


Características

  • Gestión de dispositivos — listar, autorizar, desautorizar, eliminar, expirar claves, gestionar rutas.
  • Operaciones de red — conectar/desconectar host, hacer ping a pares, obtener estado y versión de la CLI.
  • Administración — información del tailnet, uso compartido de archivos, nodos de salida, webhooks, etiquetas de dispositivos, versión del servidor.
  • ACL y políticas — leer/validar/actualizar ACL, configuración de DNS, claves de autenticación, archivo de políticas, bloqueo de red.
  • Recursos de solo lectura — resumen del tailnet, lista de dispositivos, detalle por dispositivo, ACL actual.
  • Prompts — diagnóstico guiado de conectividad y revisión de cambios de ACL.
  • Herramientas con control de riesgo — niveles read, write y admin mediante TAILSCALE_ALLOWED_TOOL_RISK.
  • OAuth + clave API — credenciales de cliente OAuth (preferido) o clave API heredada.
  • Modo HTTP privado — autenticación bearer, validación de Host, límites de tamaño de solicitud, endpoint de verificación de salud.
  • Soporte Docker — imágenes preconstruidas en Docker Hub y GHCR; despliegue sidecar con Tailscale Serve.

Requisitos

Uno de:

  • Node.js 20+ — ejecutar mediante npx o instalar globalmente (sin necesidad de runtime adicional).
  • Bun 1.3+ — utilizado para desarrollo; también funciona como runtime de producción.
  • Docker — usar la imagen preconstruida (sin runtime local necesario).

Además, un método de autenticación:

  • Credenciales de cliente OAuth: TAILSCALE_OAUTH_CLIENT_ID + TAILSCALE_OAUTH_CLIENT_SECRET (preferido).
  • Clave API heredada: TAILSCALE_API_KEY.

La CLI de Tailscale local es opcional. Solo se requiere para herramientas basadas en CLI: get_network_status, connect_network, disconnect_network, ping_peer, get_version y manage_exit_nodes (operaciones de establecer/limpiar).


Inicio Rápido

Claude Desktop

Editar ~/.claude/claude_desktop_config.json (crear si no existe).

Credenciales OAuth (recomendado)

{
  "mcpServers": {
    "tailscale": {
      "command": "npx",
      "args": ["-y", "@hexsleeves/tailscale-mcp-server"],
      "env": {
        "TAILSCALE_OAUTH_CLIENT_ID": "your-client-id",
        "TAILSCALE_OAUTH_CLIENT_SECRET": "your-client-secret",
        "TAILSCALE_TAILNET": "-"
      }
    }
  }
}

Clave API

{
  "mcpServers": {
    "tailscale": {
      "command": "npx",
      "args": ["-y", "@hexsleeves/tailscale-mcp-server"],
      "env": {
        "TAILSCALE_API_KEY": "tskey-api-...",
        "TAILSCALE_TAILNET": "-"
      }
    }
  }
}

Habilitar herramientas de escritura/administración

Agregar TAILSCALE_ALLOWED_TOOL_RISK al bloque env:

"TAILSCALE_ALLOWED_TOOL_RISK": "write"

Establecer en "admin" para desbloquear operaciones destructivas (eliminar, desautorizar, conectar/desconectar, mutación de claves).

Docker Hub

{
  "mcpServers": {
    "tailscale": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "TAILSCALE_API_KEY=tskey-api-...",
        "-e", "TAILSCALE_TAILNET=your-tailnet",
        "hexsleeves/tailscale-mcp-server:latest"
      ]
    }
  }
}

Claude Code (CLI)

claude mcp add tailscale \
  -e TAILSCALE_API_KEY=tskey-api-... \
  -e TAILSCALE_TAILNET=- \
  -- npx -y @hexsleeves/tailscale-mcp-server

Con acceso de escritura:

claude mcp add tailscale \
  -e TAILSCALE_API_KEY=tskey-api-... \
  -e TAILSCALE_TAILNET=- \
  -e TAILSCALE_ALLOWED_TOOL_RISK=write \
  -- npx -y @hexsleeves/tailscale-mcp-server

Cursor

Agregar a .cursor/mcp.json (proyecto) o ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "tailscale": {
      "command": "npx",
      "args": ["-y", "@hexsleeves/tailscale-mcp-server"],
      "env": {
        "TAILSCALE_API_KEY": "tskey-api-...",
        "TAILSCALE_TAILNET": "-"
      }
    }
  }
}

Referencia de Herramientas

Dispositivos

HerramientaDescripciónRiesgo mínimo
list_devicesListar todos los dispositivos en el tailnet configuradoread
device_actionAutorizar o expirar una clave de dispositivo (write); desautorizar o eliminar (admin)write / admin
manage_routesHabilitar o deshabilitar rutas anunciadas para un dispositivowrite

Red

HerramientaDescripciónRiesgo mínimo
get_network_statusObtener el estado actual de la red Tailscale mediante la CLI localread
connect_networkConectar este host a Tailscale con banderas CLI opcionalesadmin
disconnect_networkDesconectar este host de Tailscaleadmin
ping_peerHacer ping a un par de Tailscale mediante la CLI localread
get_versionObtener información de versión de la CLI local de Tailscaleread

Administración

HerramientaDescripciónRiesgo mínimo
get_tailnet_infoObtener información detallada sobre el tailnet configuradoread
manage_file_sharingLeer (read) o actualizar (write) la configuración de uso compartido de archivos del tailnetread / write
manage_exit_nodesListar nodos de salida (read); establecer, limpiar, anunciar o dejar de anunciar (admin)read / admin
manage_webhooksListar webhooks (read); crear, eliminar o probar webhooks (write)read / write
manage_device_tagsLeer (read) o actualizar (write) etiquetas de un dispositivoread / write
get_version_infoDevolver el identificador de versión del servidorread

ACL y Políticas

HerramientaDescripciónRiesgo mínimo
manage_aclLeer (read), validar o actualizar (write) la política ACL del tailnetread / write
manage_dnsLeer (read) o actualizar (write) la configuración de DNS de Tailscaleread / write
manage_keysListar claves de autenticación (read); crear o eliminar (admin)read / admin
manage_policy_fileLeer (read) o actualizar (write) el archivo de políticas del tailnetread / write
manage_network_lockEstado del bloqueo de red (read) y operaciones de mutación (admin)read / admin

Recursos y Prompts

Recursos (solo lectura)

URIDescripción
tailscale://tailnet/summaryResumen general del tailnet
tailscale://devicesTodos los dispositivos en el tailnet
tailscale://devices/{deviceId}Detalle de un solo dispositivo
tailscale://acl/currentPolítica ACL actual

Prompts

NombreDescripción
diagnose_tailnet_connectivityDiagnóstico guiado para problemas de conectividad
review_acl_changeFlujo de trabajo estructurado de revisión para cambios de política ACL

Configuración

VariablePredeterminadoDescripción
TAILSCALE_OAUTH_CLIENT_ID—ID de cliente OAuth (método de autenticación preferido)
TAILSCALE_OAUTH_CLIENT_SECRET—Secreto de cliente OAuth (requerido con CLIENT_ID)
TAILSCALE_API_KEY—Clave API heredada de respaldo
TAILSCALE_TAILNET-Nombre del tailnet o abreviatura - para el tailnet predeterminado
TAILSCALE_API_BASE_URLhttps://api.tailscale.comURL base de la API de Tailscale (https requerido excepto para localhost)
TAILSCALE_ALLOWED_TOOL_RISKreadRiesgo máximo permitido de herramientas: read, write o admin
TAILSCALE_CLI_PATHtailscaleRuta al binario local de la CLI de Tailscale
MCP_TRANSPORTstdioModo de transporte: stdio o http
MCP_HTTP_BIND_HOST127.0.0.1Host al que vincular en modo HTTP
MCP_HTTP_PORT3000Puerto al que vincular en modo HTTP
MCP_HTTP_BEARER_TOKEN—Requerido para modo HTTP (mínimo 32 caracteres)
MCP_ALLOWED_HOSTS—Valores adicionales permitidos del encabezado HTTP Host, separados por comas
LOG_LEVELinfoVerbosidad de registro: debug, info, warn o error
MCP_SERVER_LOG_FILE—Ruta de archivo opcional para salida de registros

Niveles de riesgo

  • read — listar dispositivos, inspeccionar estado, leer recursos, ejecutar diagnósticos.
  • write — actualizar ACL, DNS, rutas, archivos de políticas, webhooks, etiquetas y otras configuraciones de mutación.
  • admin — operaciones destructivas o que afectan al host: eliminar, desautorizar, conectar, desconectar, mutación de claves de autenticación, cambios en uso compartido de archivos, control de nodos de salida.

Transporte HTTP

El modo HTTP está diseñado para acceso privado al tailnet. Requiere MCP_HTTP_BEARER_TOKEN y se vincula a 127.0.0.1 de forma predeterminada.

export MCP_TRANSPORT=http
export MCP_HTTP_BEARER_TOKEN="$(openssl rand -base64 32)"
export TAILSCALE_OAUTH_CLIENT_ID="your-client-id"
export TAILSCALE_OAUTH_CLIENT_SECRET="your-client-secret"
export TAILSCALE_TAILNET="-"

npx -y @hexsleeves/tailscale-mcp-server --http --host 127.0.0.1 --port 3000

Exponer de forma privada con Tailscale Serve (recomendado para despliegues en tailnet):

tailscale serve --bg 443 localhost:3000

No usar Tailscale Funnel para operación normal de MCP. Funnel hace que el endpoint sea accesible públicamente en internet.

Un endpoint GET /health devuelve 200 OK cuando el servidor está en ejecución.

Para instrucciones completas de despliegue sidecar con Docker, consulta docs/docker.md.


Docker

Ejecutar con imagen de Docker Hub

docker run --rm \
  -e TAILSCALE_API_KEY="tskey-api-..." \
  -e TAILSCALE_TAILNET="-" \
  -p 127.0.0.1:3000:3000 \
  hexsleeves/tailscale-mcp-server:latest

Ejecutar con imagen de GHCR

docker run --rm \
  -e TAILSCALE_API_KEY="tskey-api-..." \
  -e TAILSCALE_TAILNET="-" \
  -p 127.0.0.1:3000:3000 \
  ghcr.io/hexsleeves/tailscale-mcp-server:latest

Compilar localmente

docker build -t tailscale-mcp-server .

Para despliegue sidecar con Tailscale Serve, consulta docs/docker.md.


Ejemplos de Prompts

Una vez que el servidor esté conectado a tu cliente MCP, prueba estos:

  • "Lista mis dispositivos Tailscale y muestra cuáles están sin conexión."
  • "¿Cuál es el estado actual de la red Tailscale en esta máquina?"
  • "Diagnostica la conectividad con mi NAS en 100.64.0.5."
  • "Muéstrame la política ACL actual de mi tailnet."
  • "Revisa este cambio de ACL antes de aplicarlo." (adjunta la nueva política)
  • "¿Qué servidores DNS de nombres está usando mi tailnet?"
  • "Lista todos los webhooks activos en mi tailnet."

Desarrollo

# Install dependencies (Bun required for development)
bun install

# Type check
bun run typecheck

# Run tests
bun test

# Lint and format
bun run check

# Build
bun run build

# Full verification (typecheck + lint + test + build)
bun run qa:full

# Security audit
bun audit

Consulta CONTRIBUTING.md para el flujo de trabajo completo de desarrollo, convenciones de commits y proceso de publicación.


Contribuciones

Las contribuciones son bienvenidas. Por favor, lee CONTRIBUTING.md antes de abrir una solicitud de extracción.