Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Tailscale device, route, DNS, key, user, and ACL management over MCP and CLI.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
TAILSCALE_API_KEY, TAILSCALE_RMCP_VERSION, TAILSCALE_RMCP_REPO, TAILSCALE_RMCP_RELEASE_BASE_URL, RUST_LOG, AuthorizationLos valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Esta dirección necesita una clave en un header de la solicitud, y el menú para agregar conectores no puede ponerla. Usa Claude Code, Cursor o VS Code.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"rtailscale": {
"command": "npx",
"args": [
"-y",
"@dinglebear/rtailscale",
"mcp"
],
"env": {
"TAILSCALE_API_KEY": "your-value",
"TAILSCALE_RMCP_VERSION": "your-value",
"TAILSCALE_RMCP_REPO": "your-value",
"TAILSCALE_RMCP_RELEASE_BASE_URL": "your-value",
"RUST_LOG": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add --transport http rtailscale https://ts.dinglebear.ai/mcp --header 'Authorization: your-value'claude mcp add rtailscale --env TAILSCALE_API_KEY=your-value --env TAILSCALE_RMCP_VERSION=your-value --env TAILSCALE_RMCP_REPO=your-value --env TAILSCALE_RMCP_RELEASE_BASE_URL=your-value --env RUST_LOG=your-value -- npx -y @dinglebear/rtailscale mcpCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"rtailscale": {
"url": "https://ts.dinglebear.ai/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"rtailscale": {
"command": "npx",
"args": [
"-y",
"@dinglebear/rtailscale",
"mcp"
],
"env": {
"TAILSCALE_API_KEY": "your-value",
"TAILSCALE_RMCP_VERSION": "your-value",
"TAILSCALE_RMCP_REPO": "your-value",
"TAILSCALE_RMCP_RELEASE_BASE_URL": "your-value",
"RUST_LOG": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"rtailscale": {
"type": "http",
"url": "https://ts.dinglebear.ai/mcp",
"headers": {
"Authorization": "your-value"
}
}
}
}Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"rtailscale": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@dinglebear/rtailscale",
"mcp"
],
"env": {
"TAILSCALE_API_KEY": "your-value",
"TAILSCALE_RMCP_VERSION": "your-value",
"TAILSCALE_RMCP_REPO": "your-value",
"TAILSCALE_RMCP_RELEASE_BASE_URL": "your-value",
"RUST_LOG": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Esta dirección necesita una clave en un header de la solicitud, y el menú para agregar conectores no puede ponerla. Usa Claude Code, Cursor o VS Code.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
TAILSCALE_RMCP_VERSION envTAILSCALE_RMCP_REPO envTAILSCALE_RMCP_RELEASE_BASE_URL envRUST_LOG envAuthorization secreto obligatorio HTTP headerEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Todavía no hemos leído la lista de herramientas de este servidor; revisamos los endpoints por turnos.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 6 nov 2026
El nombre en el registro se verificó con el dominio dinglebear.ai (el registro comprueba quién es dueño del dominio)
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Aún sin revisar; revisamos los endpoints por turnos
Aún sin revisar; revisamos los endpoints por turnos
Aún sin revisar; leemos la lista de herramientas cuando revisamos el endpoint
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: TAILSCALE_API_KEY, Authorization
Funciona de las dos formas: instálalo en tu computadora o conéctate a la versión en la nube.
El repo de GitHub cambió por última vez –, y la última versión (0.1.4) llegó al registro hace 3 meses.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. Se conecta por URL, así que también funcionan las apps que aceptan servidores MCP remotos, como ChatGPT en modo desarrollador.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, Zoo MCP
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
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.
An MCP server that provides access to the Zoo API for various CAD operations and tools.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Tailscale device, route, DNS, key, user, and ACL management over MCP and CLI.
It exposes one MCP tool, tailscale, plus the rtailscale CLI. Agents can list devices, inspect routes, read API keys, ACL policy, DNS settings, and users, authorize devices, and delete devices when the destructive gate is explicitly enabled.
30-second path: set TAILSCALE_API_KEY, then run npx -y @dinglebear/rtailscale devices --json -> start loopback HTTP with TAILSCALE_MCP_HOST=127.0.0.1 npx -y @dinglebear/rtailscale serve -> call tools/call with {"action":"devices"}.
Status: operational RMCP upstream-client server. Write-capable for device authorization; destructive device deletion requires both server opt-in and caller confirmation. HTTP MCP supports loopback dev mode, static bearer tokens, and Google OAuth through lab-auth.
Not for: replacing the Tailscale admin console, bypassing Tailscale account permissions, operating multiple unrelated tailnets from one trust boundary, storing API keys for callers, arbitrary WireGuard control, or passing Tailscale API keys through MCP tool arguments.
| Surface | This repo |
|---|---|
| Repository | tailscale-rmcp |
| Rust crate | tailscale-rmcp |
| Binary / CLI | rtailscale |
| npm package | @dinglebear/rtailscale |
| npm binary aliases | tailscale-rmcp, rtailscale |
| MCP tool | tailscale |
| Config home | ~/.tailscale-mcp on hosts, /data in containers |
| Env prefixes | TAILSCALE_*, TAILSCALE_MCP_*, TAILSCALE_RMCP_* for npm launcher controls |
The repo, crate, and npm package use the RMCP family name. The shipped binary is rtailscale to avoid shadowing the official tailscale CLI.
TAILSCALE_ALLOW_DESTRUCTIVE=true and the caller also passes explicit confirmation.| This repo owns | Tailscale owns | Explicitly out of scope |
|---|---|---|
| MCP/CLI projection, request validation, HTTP MCP auth policy, response shaping, setup checks, and destructive gates. | Tailnet state, device identities, ACL semantics, DNS behavior, API key issuance, user membership, and upstream authorization. | Replacing the admin console, storing caller credentials, multi-tailnet tenancy, arbitrary WireGuard control, policy editing beyond exposed actions, and local Tailscale daemon management. |
| Path | Command | Best for | Notes | |
|---|---|---|---|---|
| npm / npx | npx -y @dinglebear/rtailscale --help | Local MCP clients and quick trials. | Downloads the matching rtailscale binary from GitHub Releases. | |
| Release installer | `curl -fsSL https://raw.githubusercontent.com/dinglebear-ai/rtailscale/main/scripts/install.sh \ | bash` | Host installs without Node. | Installs rtailscale for the current Linux host. |
| Docker / Compose | docker compose up -d | Shared HTTP MCP deployments. | Reads .env and exposes container port 40040. | |
| Build from source | cargo build --release | Development and audits. | Produces target/release/rtailscale. | |
| Plugin | claude plugin install plugins/tailscale | Claude Code local plugin setup from this checkout. | Ships the skill, .mcp.json, and a bundled binary. No hooks — run rtailscale setup check yourself if you want the environment verified. |
Run the stdio MCP server or CLI without a manual binary install:
npx -y @dinglebear/rtailscale --help
npx -y @dinglebear/rtailscale mcp npx -y @dinglebear/rtailscale devices --json
The npm package downloads rtailscale during postinstall. Override download behavior only when testing packaging:
| Variable | Purpose |
|---|---|
TAILSCALE_RMCP_SKIP_DOWNLOAD=1 | Skip postinstall binary download. |
TAILSCALE_RMCP_VERSION or TAILSCALE_RMCP_BINARY_VERSION | Select the GitHub Release tag. |
TAILSCALE_RMCP_REPO | Select the GitHub repo used for release downloads. |
TAILSCALE_RMCP_RELEASE_BASE_URL | Select a custom release base URL. |
git clone https://github.com/dinglebear-ai/rtailscale
cd rtailscale cargo build --release ./target/release/rtailscale --help
Minimum supported Rust version: 1.86.
Create an API key at https://login.tailscale.com/admin/settings/keys. Use the minimum capability needed for the actions you plan to expose.
export TAILSCALE_API_KEY="tskey-api-..."
export TAILSCALE_TAILNET="-" # personal, or "example.com" for orgs
Every Tailscale account belongs to a tailnet. TAILSCALE_TAILNET=- targets the default personal tailnet; organization tailnets usually use the org domain.
npx -y @dinglebear/rtailscale devices --json
TAILSCALE_MCP_HOST=127.0.0.1 npx -y @dinglebear/rtailscale serve
In another shell:
curl -sf http://127.0.0.1:40040/health
curl -s -X POST http://127.0.0.1:40040/mcp \
-H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"tailscale","arguments":{"action":"devices"}}}'
{
"mcpServers": { "tailscale": { "command": "npx", "args": ["-y", "tailscale-rmcp", "mcp"], "env": { "TAILSCALE_API_KEY": "tskey-api-...", "TAILSCALE_TAILNET": "-" } } } }
{
"mcpServers": { "tailscale": { "type": "http", "url": "http://127.0.0.1:40040/mcp", "headers": { "Authorization": "Bearer ${TAILSCALE_MCP_TOKEN}" } } } }
Register Tailscale through Labby as an HTTP upstream when sharing one long-running server, or run it directly as stdio for local-only use.
[mcp_servers.tailscale]
command = "npx" args = ["-y", "tailscale-rmcp", "mcp"]
{
"command": "rtailscale", "args": ["mcp"], "env": { "TAILSCALE_API_KEY": "tskey-api-...", "TAILSCALE_TAILNET": "-" } }
Do not put TAILSCALE_API_KEY, OAuth secrets, passwords, SSH keys, or upstream bearer tokens in MCP tool arguments. Use env, config files, or the MCP client's secret storage. MCP callers never provide credentials, tokens, keys, or secrets as action arguments.
| Surface | Status | Entry point | Purpose |
|---|---|---|---|
| MCP stdio | Supported | rtailscale mcp, npx -y @dinglebear/rtailscale mcp | Local child-process MCP clients. |
| MCP HTTP | Supported | rtailscale serve, POST /mcp | Streamable HTTP MCP for local or shared server deployments. |
| CLI | Supported | rtailscale | Scriptable parity and debugging. |
| REST API | Not shipped | N/A | Tailscale already owns the REST API. |
| Web UI | Not shipped | N/A | Tailscale already owns the admin console. |
One MCP tool is exposed: tailscale. Pass the required action argument to select the operation.
| Action | Description | Required params | Optional params |
|---|---|---|---|
devices | List all devices in the tailnet. | none | none |
device | Return one device. | id | none |
device_routes | Return subnet routes for one device. | id | none |
keys | List API keys in the tailnet. | none | none |
acl | Return ACL policy JSON. | none | none |
dns | Return DNS nameservers, search paths, and MagicDNS preferences. | none | none |
users | List tailnet users. | none | none |
help | Return built-in action documentation. | none | none |
| Action | Description | Required params | Optional params |
|---|---|---|---|
authorize_device | Approve a device for the tailnet. | id | none |
| Action | Description | Required params | Optional params |
|---|---|---|---|
delete_device | Permanently remove a device. | id, confirm=true | none |
Device IDs may be stable node IDs such as n1234abc or legacy numeric device IDs. Use action=devices first to discover IDs.
The binary calls the same service layer as the MCP tool:
rtailscale devices [--json]
rtailscale device [--json] rtailscale routes [--json] rtailscale keys [--json] rtailscale acl [--json] rtailscale dns [--json] rtailscale users [--json] rtailscale authorize [--json] rtailscale delete-device --confirm [--json] rtailscale doctor [--json] rtailscale setup check [--json] rtailscale setup repair [--json] rtailscale setup plugin-hook [--no-repair] [--json] rtailscale serve # HTTP MCP (also the no-argument default) rtailscale mcp # stdio MCP
All commands currently print JSON. --json is accepted for parity with the rest of the RMCP family.
Host installs read ~/.tailscale-mcp/.env before loading config. Containers read /data/.env. Process environment overrides both.
| Variable | Default | Purpose |
|---|---|---|
TAILSCALE_API_KEY | unset | Tailscale API key. |
TAILSCALE_TAILNET | - | Tailnet: org domain or - for personal. |
TAILSCALE_ALLOW_DESTRUCTIVE | false | Enable delete_device server-side. |
TAILSCALE_MCP_HOST | 0.0.0.0 | HTTP bind host. |
TAILSCALE_MCP_PORT | 40040 | HTTP bind port. |
TAILSCALE_MCP_SERVER_NAME | tailscale-rmcp | Advertised MCP server name. |
TAILSCALE_MCP_NO_AUTH | false | Disable auth only for loopback development. |
TAILSCALE_MCP_TOKEN | unset | Static bearer token for HTTP MCP. |
TAILSCALE_NOAUTH | false | Trust an upstream gateway to enforce auth. |
TAILSCALE_MCP_AUTH_MODE | bearer | bearer or oauth. |
TAILSCALE_MCP_PUBLIC_URL | unset | Public URL for OAuth discovery. |
TAILSCALE_MCP_GOOGLE_CLIENT_ID | unset | Google OAuth client ID. |
TAILSCALE_MCP_GOOGLE_CLIENT_SECRET | unset | Google OAuth client secret. |
TAILSCALE_MCP_AUTH_ADMIN_EMAIL | unset | Admin email for OAuth bootstrap. |
TAILSCALE_MCP_ALLOWED_HOSTS | unset | Extra accepted Host header values. |
TAILSCALE_MCP_ALLOWED_ORIGINS | unset | Extra accepted CORS origins. |
TAILSCALE_MCP_HOME | platform appdata | Override the config/log home used by setup and file logging. |
The Tailscale API base URL is not configurable; it is fixed at https://api.tailscale.com/api/v2 in src/tailscale.rs.
Stdio MCP runs as a local trusted child process and does not use HTTP auth.
HTTP MCP auth policy:
| State | Condition | Behavior |
|---|---|---|
| Loopback dev | TAILSCALE_MCP_HOST starts with 127. or auth is explicitly disabled on loopback | Local unauthenticated development is allowed. |
| Mounted bearer | Non-loopback with TAILSCALE_MCP_TOKEN | Requires Authorization: Bearer and action
Solo se muestra el principio; lee el resto en el repo