Tailscale
Monitor and secure your tailnet — devices, ACLs, keys, DNS, and audit trail
Tailscale network monitoring and security — device inventory, ACL policy review, DNS configuration, auth key auditing, users, and audit logs
Service Contract
Highlights
About
What it does
Gives your AI agent structured access to Tailscale tailnets via the official REST API v2. Monitor device health, audit ACL policies, inspect DNS configuration, review auth key hygiene, list users, and trace configuration changes — all through 17 focused MCP tools with token-efficient output.
Built on raw httpx async — no third-party Tailscale library needed. The API is clean REST with Bearer auth, no pagination, and JSON responses.
How it differs from other Tailscale MCPs
| This plugin | HexSleeves/tailscale-mcp | jaxxstorm/tailscale-mcp | |
|---|---|---|---|
| Focus | Monitoring + security (17 tools) | Management (~15 tools) | Read-only (~5 tools) |
| Design for | LLM agents (token-efficient) | Claude Code | General MCP |
| Output | Pipe-delimited, compact | Full JSON | Full JSON |
| Write safety | Dual-gated (env + confirm) | Direct writes | Read-only |
| Audit log | Yes | No | No |
| ACL summary | Parsed groups/rules/SSH/tags | Raw JSON | Raw JSON |
| Key hygiene | Flags reusable, expiry status | Basic listing | No |
SecOps-first device output
Every device line flags security-relevant state at a glance:
macbook | os=mac | ip=100.100.1.1 | online | expires=2026-07-11 | id=n123
nas | os=linux | ip=100.100.1.2 | online | KEY_EXPIRY_OFF | UPDATE_AVAILABLE | tags=server,infra | id=n456
phone | os=iOS | ip=100.100.1.3 | OFFLINE | last=2d ago | id=n789
rogue | os=win | ip=100.100.1.4 | UNAUTHORIZED | id=n000
KEY_EXPIRY_OFF— device has key expiry disabled (standing risk)KEY_EXPIRED— device key has expired (needs re-auth)UNAUTHORIZED— device is pending authorizationOFFLINEwithlast=— last-seen relative time for stale device detectionUPDATE_AVAILABLE— client update available
Token efficiency
The Tailscale API returns verbose JSON. This plugin reformats everything into compact output:
- Device listing: ~40 tokens per device (vs ~400 raw)
- ACL policy: parsed into groups, rules, SSH rules, tag owners (~30/rule)
- Auth keys: ~25 tokens per key with flag summary
- Audit log: ~25 tokens per entry
Safety model
Read tools work immediately — devices, ACLs, DNS, keys, users, webhooks, audit log.
Write operations require TAILSCALE_WRITE_ENABLED=true. Destructive operations additionally require confirm=true:
| Operation | Gate |
|---|---|
| Authorize/deauthorize device | write |
| Set device tags | write |
| Expire device key | write |
| Approve subnet routes | write |
| Create auth key | write |
| Delete auth key | write + confirm |
| Delete device | write + confirm |
Authentication
Two auth methods supported:
- API access token (
tskey-api-*) — personal, inherits user permissions, 1-90 day expiry - OAuth bearer token — scoped, not tied to a user, 1-hour expiry. Create OAuth client in admin console, request token via
client_credentialsflow.
Both are passed as TAILSCALE_API_KEY. The API auto-detects the tailnet from the token (use - as tailnet, which is the default).
Tool reference
| Tool | Type | What it does |
|---|---|---|
| ts_info | read | Health check — device counts, online/offline, key warnings, settings |
| ts_devices | read | All devices — hostname, OS, IP, key expiry, tags, updates |
| ts_device | read | Full detail — addresses, client version, key status, user |
| ts_device_routes | read | Routes — advertised subnets, approved/unapproved |
| ts_dns | read | DNS — nameservers, MagicDNS, search paths, split DNS |
| ts_acl | read | ACL policy — groups, rules, SSH rules, tag owners |
| ts_acl_validate | gated | Validate a policy without applying |
| ts_keys | read | Auth keys — flags, tags, expiry |
| ts_users | read | Users — name, role, status, device count |
| ts_webhooks | read | Webhooks — endpoint URL, event subscriptions |
| ts_audit_log | read | Config changes — who, what, when |
| ts_authorize_device | gated | Authorize or deauthorize a device |
| ts_set_tags | gated | Set ACL tags on a device |
| ts_expire_device | gated | Force key expiry on a device |
| ts_approve_routes | gated | Approve advertised subnet routes |
| ts_create_key | gated | Create an auth key |
| ts_delete_key | gated | Revoke an auth key (confirm required) |
| ts_delete_device | gated | Remove a device (confirm required) |
Conformance
Setup
Generate an API access token in the Tailscale admin console (Settings > Keys). The tailnet is auto-detected from your token — no additional configuration needed.
TAILSCALE_API_KEY API Key required secret TAILSCALE_WRITE_ENABLED Enable write operations Prerequisites
- Tailscale account
- API access token (Settings > Keys in admin console)
Scenarios
Run ts_info for tailnet health. Check ts_devices for devices with KEY_EXPIRY_OFF, KEY_EXPIRED, or UNAUTHORIZED flags. Review ts_acl for overly permissive rules. List ts_keys to find reusable keys without tags. Check ts_audit_log for recent policy changes.
List ts_devices and identify OFFLINE devices with last-seen times. For devices offline more than 30 days, review ts_device for full detail. If confirmed stale, use ts_expire_device to force re-authentication or ts_delete_device to remove.
Check ts_dns for nameserver configuration and split DNS rules. For each subnet router (devices with tags like tag:server), run ts_device_routes to verify only expected subnets are advertised and approved. Review ts_acl to confirm route access matches intended policy.
Both use overlay-network. Comprehensive Tailscale management — ~15 tools covering devices, ACLs, DNS, keys, and network configuration.
Use the Forge to design an automation pack powered by tailscale-blade-mcp for overlay-network operations.
Install
sidereal install tailscale-blade-mcp