Skip to main content
Glama
Groupthink-dev

tailscale-blade-mcp

tailscale-blade-mcp

An MCP server that gives AI agents structured access to Tailscale tailnets. Built for the Model Context Protocol with security visibility and token efficiency as first-class design goals.

Why this exists

Tailscale exposes a clean REST API (v2) for managing devices, ACL policies, DNS, auth keys, users, and audit logs. This MCP wraps it with the guardrails that automated agents need:

  • Security-first tool set — 19 tools focused on what network security agents actually need: device inventory, key expiry auditing, ACL review + apply, route approval, DNS hygiene. Not a thin wrapper around every endpoint.

  • Token-efficient output — compact pipe-delimited format. A 20-device tailnet in ~40 tokens per device. Devices flagged with KEY_EXPIRY_OFF, KEY_EXPIRED, UPDATE_AVAILABLE, UNAUTHORIZED, OFFLINE at a glance.

  • Write-gated mutations — device authorization, tagging, key management, route approval, and ACL apply require explicit opt-in via TAILSCALE_WRITE_ENABLED=true. Destructive operations (delete device, revoke key) additionally require per-call confirm=true; ACL apply defaults to optimistic-concurrency (If-Match) so it won't silently clobber a concurrent edit.

  • SecOps visibility — ACL policy summary shows groups, rules, SSH rules, and tag owners. Audit log shows who changed what. Key listing flags reusable keys and expiry status.

Related MCP server: mcp-tailscale

How this differs from other Tailscale MCPs

tailscale-blade-mcp

HexSleeves/tailscale-mcp

jaxxstorm/tailscale-mcp

Focus

Monitoring + security (19 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

Marketplace

Stallari certified

Standalone

Standalone

Quick start

Published on PyPI — run it without a checkout via uvx:

# Configure
export TAILSCALE_API_KEY="tskey-api-..."

# Run the latest published release (no install step)
uvx tailscale-blade-mcp

Or install it as a tool / into an environment:

uv tool install tailscale-blade-mcp     # or: pip install tailscale-blade-mcp
tailscale-blade-mcp

From a local checkout (development):

uv pip install -e .
tailscale-blade-mcp

19 tools, 5 categories

Info (1 tool)

Tool

Purpose

Token cost

ts_info

Health check — device counts, online/offline, key expiry warnings, settings, write gate

~100

Devices (3 tools)

Tool

Purpose

Token cost

ts_devices

All devices — hostname, OS, IP, online/offline, key expiry, tags, updates

~40/device

ts_device

Full detail — addresses, client version, key status, tags, user

~120

ts_device_routes

Routes — advertised subnets, approved/unapproved status

~30/route

Network (4 tools)

Tool

Purpose

Token cost

ts_dns

DNS — nameservers, MagicDNS, search paths, split DNS

~50

ts_acl

ACL policy — groups, rules, SSH rules, tag owners

~30/rule

ts_acl_validate

Validate a policy without applying it (write-gated)

~20

ts_acl_set

Apply a full ACL policy — validates first, optimistic-concurrency If-Match guard (write-gated; needs policy-file write scope)

~30

Users & Keys (3 tools)

Tool

Purpose

Token cost

ts_keys

Auth keys — ID, reusable/ephemeral/preauth flags, tags, expiry

~25/key

ts_users

Users — name, role, status, device count, online/last seen

~25/user

ts_webhooks

Webhooks — endpoint URL, event subscriptions

~25/webhook

Audit (1 tool)

Tool

Purpose

Token cost

ts_audit_log

Configuration changes — who, what, when

~25/entry

Write Operations (7 tools, gated)

ACL apply (ts_acl_set) is also write-gated; it's listed under Network with the other ACL tools.

Tool

Gate

Purpose

ts_authorize_device

write

Authorize or deauthorize a device

ts_set_tags

write

Set ACL tags on a device

ts_expire_device

write

Force key expiry — device must re-authenticate

ts_approve_routes

write

Approve advertised subnet routes

ts_create_key

write

Create an auth key (reusable/ephemeral/preauth)

ts_delete_key

write + confirm

Revoke an auth key permanently

ts_delete_device

write + confirm

Remove a device from the tailnet

Output format

macbook | os=mac | ip=100.100.1.1 | online | expires=2026-07-11 | id=n1234567890
nas | os=linux | ip=100.100.1.2 | online | KEY_EXPIRY_OFF | UPDATE_AVAILABLE | tags=server,infra | id=n9876543210
phone | os=iOS | ip=100.100.1.3 | OFFLINE | last=2d ago | expires=2026-05-01 | id=n5555555555

Authentication

Tailscale supports two auth methods:

Method

Token prefix

Best for

API access token

tskey-api-

Personal use, quick setup

OAuth client

Bearer token from client_credentials flow

Automation, scoped permissions

Both are passed via TAILSCALE_API_KEY. For OAuth, obtain a Bearer token first and pass that.

ACL write scope. Read tools work with any valid token. Applying an ACL (ts_acl_set) additionally requires the token to carry policy-file write scope — an OAuth client with the acl scope, or an API access token from an account that can edit the tailnet policy file. A read-only token will validate fine but return a 403 on apply, with a message pointing at the scope requirement.

Security model

Layer

Mechanism

Write gate

TAILSCALE_WRITE_ENABLED=true required for any mutation

Destructive confirm

ts_delete_key and ts_delete_device require confirm=true

ACL validate-before-apply

ts_acl_set always validates the policy and refuses to apply on failure

ACL optimistic concurrency

ts_acl_set sends If-Match (the current ETag) by default; a concurrent edit fails with a re-fetch message rather than clobbering. Bypass only via allow_overwrite_concurrent=true

Credential scrubbing

API keys, Bearer tokens, Authorization headers stripped from errors

Bearer auth

Optional TAILSCALE_MCP_API_TOKEN for HTTP transport

Tailnet auto-detect

Uses - shorthand by default — no tailnet name in config

Stallari integration

From the published package (recommended — pin a version with tailscale-blade-mcp@0.7.0):

{
  "mcpServers": {
    "tailscale": {
      "type": "stdio",
      "command": "uvx",
      "args": ["tailscale-blade-mcp"],
      "env": {
        "TAILSCALE_API_KEY": "tskey-api-...",
        "TAILSCALE_WRITE_ENABLED": "false"
      }
    }
  }
}

From a local checkout (development):

{
  "mcpServers": {
    "tailscale": {
      "type": "stdio",
      "command": "uv",
      "args": ["--directory", "~/src/tailscale-blade-mcp", "run", "tailscale-blade-mcp"],
      "env": {
        "TAILSCALE_API_KEY": "tskey-api-...",
        "TAILSCALE_WRITE_ENABLED": "false"
      }
    }
  }
}

Webhook trigger patterns

  • Key expiry approachingts_devices flags KEY_EXPIRY_OFF and expired keys for proactive rotation

  • Unauthorized devicests_devices flags UNAUTHORIZED for approval workflows

  • Route approvalts_device_routes shows unapproved subnets for security review

  • ACL changests_audit_log tracks policy updates for compliance auditing

  • Stale devicests_devices shows OFFLINE with last-seen time for cleanup workflows

Development

make install-dev    # Install with dev + test dependencies
make test           # Unit tests (mocked, no API access needed)
make check          # Lint + format + type-check
make run            # Start MCP server (stdio)

Architecture

src/tailscale_blade_mcp/
├── server.py       — FastMCP server, 19 @mcp.tool decorators
├── client.py       — TailscaleClient wrapping httpx async, credential scrubbing
├── formatters.py   — Token-efficient output (pipe-delimited, null omission, human units)
├── models.py       — TailscaleConfig, write gate, constants
└── auth.py         — Bearer token middleware for HTTP transport

Built with FastMCP and httpx.

License

MIT

Available Tools

19 tools
ts_aclA

ACL policy summary: groups, rules, SSH rules, tag owners. Shows who can talk to whom.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It indicates the tool is read-only ('shows'), but it does not disclose other behavioral traits such as authentication needs, rate limits, or behavior when no ACL exists. It provides basic transparency but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It front-loads the key information and is easily parseable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool requires no parameters and has an output schema (not shown but indicated), the description is complete enough. It covers the purpose and scope without needing elaboration.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters with 100% coverage, so the description does not need to explain any parameters. It correctly implies no additional input is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose as summarizing ACL policy including groups, rules, SSH rules, and tag owners. It uses a specific verb ('shows') and resource ('ACL policy summary'), and it distinguishes itself from sibling tools like ts_acl_set and ts_acl_validate by indicating it is read-only for viewing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for viewing ACL policy summaries, and the context of sibling tools (e.g., ts_acl_set for modifying) provides implicit guidance. However, it lacks explicit when-to-use or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_acl_setA

Apply (POST) a full ACL policy to the tailnet. Requires TAILSCALE_WRITE_ENABLED=true.

Always validates the policy first and refuses to apply on validation failure. By default uses optimistic concurrency: the current ETag is sent as If-Match so a concurrent admin edit fails with a clear re-fetch message instead of silently clobbering. Pass allow_overwrite_concurrent=true to bypass the guard. Requires a token with ACL policy-file WRITE scope (a read-only key 403s). Emits a DD-338 _meta envelope (audit_surface: structured).

ParametersJSON Schema
NameRequiredDescriptionDefault
policy_jsonYesFull ACL policy as a JSON string. Replaces the ENTIRE policy file (not a patch).
if_matchNoETag from a prior read for optimistic concurrency. If omitted, the current ETag is fetched automatically and used as the guard. Ignored when allow_overwrite_concurrent=true.
allow_overwrite_concurrentNoSkip the If-Match optimistic-concurrency guard and overwrite even if the ACL changed since it was read. Dangerous — defaults to false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description fully covers behavioral traits: write operation requiring WritesEnabled=true, validation before apply, ETag-based concurrency, bypass option, auth scope, and audit envelope emission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose and prerequisites, no wasted words, efficient structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema present, description doesn't need to detail returns. Covers all critical aspects: prerequisites, concurrency, validation, auth, and audit. Complete for a complex mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds value: clarifies policy_json replaces entire policy, explains if_match auto-fetch, and labels allow_overwrite_concurrent as dangerous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Apply (POST) a full ACL policy to the tailnet' with specific verb and resource, and distinguishes from siblings like ts_acl and ts_acl_validate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit requirements (TAILSCALE_WRITE_ENABLED=true, token scope), optimistic concurrency behavior, and allow_overwrite_concurrent guard are detailed. Does not explicitly advise when to use ts_acl_validate first, but implies validation occurs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_acl_validateA

Validate an ACL policy without applying it. Returns errors or 'passed'.

ParametersJSON Schema
NameRequiredDescriptionDefault
policy_jsonYesACL policy as JSON string to validate

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool validates without applying and returns errors or 'passed', but lacks details on auth needs, rate limits, or what constitutes a valid policy. Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: 'Validate an ACL policy without applying it. Returns errors or 'passed'.' It is perfectly concise, front-loaded, and contains no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one parameter with full schema coverage and an output schema (existence known), the description is sufficient: it states purpose, behavior, and return value. No additional context needed for a simple validation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of parameters with a description: 'ACL policy as JSON string to validate'. The description does not add further meaning beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Validate', the resource 'an ACL policy', and the behavior 'without applying it' and 'Returns errors or 'passed''. It distinguishes itself from siblings like ts_acl and ts_acl_set by emphasizing validation vs. application.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without applying it' implies a dry-run or validation step before using ts_acl or ts_acl_set, but it does not explicitly state when to use this tool vs. alternatives or provide conditions for use. This is clear but lacks explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_approve_routesA

Approve subnet routes on a device. Requires TAILSCALE_WRITE_ENABLED=true.

Default (replace=false): additive — reads the device's currently enabled routes first and approves the union, so previously approved routes are preserved.

replace=true: raw Tailscale set-routes REPLACE semantics — the enabled set becomes exactly routes; any currently enabled route not listed is de-approved, which can sever subnet connectivity. Use only when you intend to remove approvals.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesDevice nodeId (from ts_devices)
routesYesSubnet routes to approve (e.g. ['192.168.1.0/24'])
replaceNoReplace the device's entire enabled-route set with exactly `routes` instead of additively approving. WARNING: replace=true de-approves every currently-enabled route not listed — this can disconnect subnets.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description fully discloses additive vs replace semantics, the destructive nature of replace=true, and the required env var. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured: summary line, env requirement, then two modes. Slightly verbose but all content is relevant and earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a mutation tool with two modes. Output schema exists to cover return format. Covers prerequisite, behavior, and warning. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage with good descriptions. Description adds value by explaining default behavior of 'replace' parameter and warning about its impact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Approve' and resource 'subnet routes on a device'. Distinguishes from sibling tool 'ts_device_routes' which is for listing. Also notes environment requirement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly contrasts default additive behavior with replace=true, warns of severity. Mentions prerequisite env var. Could be improved by stating when to use alternatives like ts_device_routes for viewing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_audit_logA

Configuration audit log: who changed what, when. Recent entries first.

Optional scope arg filters audit entries to those whose target is a device with a tag in the scope set. Requires a secondary fetch of the device-tag map (uncached at v1). Entries with non-device targets are excluded when scope is provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoMax entries returned, most-recent-first (default 50)
daysNoLookback window in days (default 7); wider windows risk the 30s API timeout
scopeNoDD-278 scope filter: 'infrastructure' | 'personal' | 'home'. Filtered client-side — audit-log entries don't carry tags, so the filter resolves each entry's target.id against a secondary device-tag map fetch (one extra round-trip per call).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses ordering (recent first), scope filtering behavior (client-side with secondary fetch), exclusion of non-device targets, and timeout risk for wide lookbacks. No annotations provided, so description carries burden effectively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs, no wasted words. First sentence captures tool purpose, second paragraph explains scope in detail. Efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers behavior, constraints, filter details, and risks. Output schema exists so return values not needed. Complete for a read-only audit log tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage, but description adds context: explains scope's client-side filtering and secondary fetch, days timeout risk, and count default/max. Adds value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it's a configuration audit log showing who changed what and when, with recent entries first. Distinguishes from sibling tools that deal with devices, users, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context on when to use optional scope filter and warns about secondary fetch and timeout risks. Lacks explicit comparison to alternatives, but siblings are distinct enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_authorize_deviceA

Authorize or deauthorize a device. Requires TAILSCALE_WRITE_ENABLED=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesDevice nodeId (from ts_devices)
authorizedNoTrue to authorize, false to deauthorize

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It discloses the mutation nature but lacks details on idempotency, error states, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words, directly conveying the purpose and a key requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only two parameters and an output schema exists, the description is adequate but could benefit from more context on success/failure behavior and idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds no extra meaning beyond what the schema already provides. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (authorize or deauthorize) and the resource (device), distinguishing it from sibling tools like ts_delete_device or ts_expire_device.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It mentions a prerequisite (TAILSCALE_WRITE_ENABLED=true) but does not provide guidance on when to use this tool versus alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_create_keyA

Create a new auth key. Requires TAILSCALE_WRITE_ENABLED=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionNoDescription for the auth key
reusableNoAllow key to be used multiple times
ephemeralNoDevices using this key are ephemeral (auto-removed)
preauthorizedNoDevices are pre-approved (no manual auth needed)
tagsNoACL tags for devices using this key
expiry_secondsNoKey lifetime in seconds (default 86400 = 24h)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only mentions the environment requirement but fails to disclose side effects, success/failure behavior, or output format beyond what the output schema provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no unnecessary words, front-loading the verb and resource immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple creation tool with a complete schema and output schema, the description is minimally adequate but lacks details on error conditions or usage nuances.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all 6 parameters. The description adds no additional meaning beyond what the schema provides, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new auth key.' This is a specific verb and resource, distinguishing it from sibling tools like ts_delete_key (delete) and ts_keys (list).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a prerequisite (TAILSCALE_WRITE_ENABLED=true) but provides no guidance on when to use this tool versus alternatives like ts_keys or ts_delete_key.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_delete_deviceA

Delete a device from the tailnet. Requires TAILSCALE_WRITE_ENABLED=true and confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesDevice nodeId (from ts_devices)
confirmNoMust be true to confirm — removes device from tailnet

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the env var requirement and confirm Boolean, but lacks details on irreversibility, side effects, or error scenarios. Adds basic transparency but could be richer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One efficient sentence that front-loads the action and includes key requirements. No unnecessary words, but could be expanded slightly without sacrificing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and 2 parameters, the description covers core aspects (action, prerequisites) but lacks mention of permanence of deletion, error handling, or recovery options. Adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds value by specifying the TAILSCALE_WRITE_ENABLED requirement, which is not in the schema. It reinforces the confirm parameter's necessity, though device_id meaning is adequately covered by schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action: 'Delete a device from the tailnet.' Verb and resource are specific, and it differentiates from sibling tools like ts_authorize_device and ts_expire_device.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states prerequisites: 'Requires TAILSCALE_WRITE_ENABLED=true and confirm=true.' This guides the agent on when and how to invoke the tool. However, it does not mention alternatives or exclusions, like the permanent nature compared to expiration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_delete_keyA

Revoke an auth key. Requires TAILSCALE_WRITE_ENABLED=true and confirm=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
key_idYesAuth key ID to revoke (from ts_keys)
confirmNoMust be true to confirm — revokes the key permanently

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description discloses that this is a destructive write operation requiring confirmation and a write-enabled flag. The confirm parameter's schema description adds clarity about permanent revocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with no wasted words. The key action and all requirements are front-loaded and clearly stated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with an output schema, the description covers purpose, prerequisites, and parameter semantics adequately. No missing elements needed for correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the main description adds context by requiring confirm=true, which is not enforced by the schema (only a default of false). This extra guidance helps the agent understand the parameter's role.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Revoke an auth key' with a specific verb and resource. It distinguishes from sibling tools like ts_create_key and ts_keys which perform opposite or related actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states prerequisites (TAILSCALE_WRITE_ENABLED=true and confirm=true) but does not specify when not to use or list alternatives. Context is clear enough for a simple destructive operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_deviceA

Full detail for a single device: addresses, OS, client version, key status, tags, user.

Single-record fetch — server-side filter is device_id-shaped, not tag-shaped. The _meta envelope is emitted for audit-surface uniformity; scope= is intentionally NOT accepted here because a scope filter on a single-device-detail call is semantically incoherent.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesDevice nodeId (from ts_devices)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the return of a _meta envelope for audit uniformity and clarifies that scope filtering is not supported. It doesn't mention auth or error conditions, but for a simple fetch this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two efficient sentences plus a clarifying note. It starts with the core purpose ('Full detail for a single device') and then provides behavioral constraints. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, high schema coverage, and existence of an output schema, the description is complete. It explains the return details, filter behavior, and scope exclusion, leaving no major gaps for a single-record fetch tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the description adds value by clarifying that the device_id parameter is 'device nodeId (from ts_devices)' and that it's 'server-side filter ... not tag-shaped'. It also warns about scope not being accepted, enhancing schema meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns 'Full detail for a single device' listing specific fields (addresses, OS, client version, etc.). It distinguishes from sibling tools by emphasizing it's a single-record fetch using device_id, contrasting with tag-based or list operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Single-record fetch' and notes that 'scope= is intentionally NOT accepted' due to semantic incoherence, providing clear when-not guidelines. However, it does not explicitly name alternative sibling tools like ts_devices for listing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_device_routesA

Routes for a device: advertised subnets, approved/unapproved status.

Emits a DD-338 _meta envelope (audit_surface: structured) disclosing the device_id= server-side discrimination + the routes-row cardinality (advertised + enabled, union).

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesDevice nodeId (from ts_devices)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior. It mentions emitting a _meta envelope with device_id and cardinality, which provides transparency about output metadata. However, it does not mention any prerequisites, side effects, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loading the core purpose and then adding a technical detail about the output envelope. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description doesn't need to explain return values. It covers the purpose and metadata format. Missing details like pagination or error handling, but for a simple lookup tool this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter (device_id) has a description in the schema: 'Device nodeId (from ts_devices).' The description in the text does not add further details, but the schema coverage is 100%, so the baseline of 3 is appropriate, with slight extra context from 'from ts_devices'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Routes for a device: advertised subnets, approved/unapproved status.' This distinguishes it from sibling tools like ts_approve_routes (which modifies routes) and ts_device (which retrieves device details).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool returns but does not provide explicit guidance on when to use it versus alternatives like ts_approve_routes or ts_device. Some context is implied but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_devicesA

List all devices: hostname, OS, IP, online/offline, key expiry, tags, update status.

Optional scope arg filters devices by DD-278 scope-tag mapping (configurable via TAILSCALE_SCOPE_{INFRASTRUCTURE,PERSONAL,HOME}_TAGS). Output includes a Track 3 _meta envelope as a JSON tail line.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoDD-278 scope filter: 'infrastructure' | 'personal' | 'home'. Filtered client-side after fetch (Tailscale REST API v2 has no server-side tag filter primitive). 'public' is unsupported.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses a critical behavioral trait: the scope filter is applied client-side because the API lacks server-side filtering. It also notes the output includes a _meta envelope. With no annotations provided, this covers the main behavioral expectations, though pagination or rate limits are not mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: first gives a clear, bullet-like list of output fields; second explains the optional parameter and output format. Every word adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one optional parameter and an output schema (existence known but not shown), the description covers purpose, parameter behavior, and output format well. It does not mention pagination or limits, but for a list tool with a single optional param, this is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema describes scope as a DD-278 filter with enumerated values, but the description adds extra context: it explains the mapping is configurable via environment variables and that filtering is client-side, with 'public' unsupported. This significantly enriches parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all devices and enumerates the fields included (hostname, OS, IP, etc.). The name 'ts_devices' contrasts with singular sibling 'ts_device', and no ambiguity exists about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description and sibling context imply this is the primary list-all tool, distinct from ts_device (single device) and mutation tools. However, no explicit guidance on when not to use it or alternatives is given. Still, the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_dnsB

DNS configuration: nameservers, MagicDNS status, search paths, split DNS rules.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description does not clarify if the tool is read-only, modifies state, or requires specific permissions. The term 'configuration' is ambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence conveys the purpose, but could be more structured. Lacks front-loading of key behavioral details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having an output schema, the description doesn't mention return values or behavior. With no annotations, it leaves too many questions for a tool with no parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. The description adds no parameter-specific meaning, but none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it covers DNS configuration, listing key areas (nameservers, MagicDNS, search paths, split DNS rules). It is distinct from sibling tools dealing with ACLs, devices, keys, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives, such as whether it reads or writes configuration. No exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_expire_deviceA

Force key expiry on a device — it must re-authenticate. Requires TAILSCALE_WRITE_ENABLED=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesDevice nodeId (from ts_devices)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry full burden. It states 'Force key expiry' implying a destructive mutation, but does not disclose side effects, required permissions beyond the env var, or whether the action is reversible. Minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The first sentence states the purpose, the second adds a critical requirement. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required param, output schema exists), the description covers purpose, prerequisite, and parameter. It is sufficiently complete for an agent to understand and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (device_id is described as 'Device nodeId (from ts_devices)'), so baseline is 3. The tool description does not add extra meaning beyond the schema for the parameter; it only restates the prerequisite.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Force key expiry' and the resource 'device', and the clarification 'it must re-authenticate' adds specificity. This differentiates it from sibling tools like ts_delete_device (deletion) or ts_authorize_device (authorization).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions a prerequisite (TAILSCALE_WRITE_ENABLED=true) but does not provide explicit guidance on when to use this tool versus alternatives like ts_delete_device or ts_authorize_device. No exclusions or alternative recommendations are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_infoA

Health check: device counts, online/offline, key expiry warnings, updates, tailnet settings, write gate.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It transparently lists the types of information returned (device counts, online/offline, etc.), indicating it's a read-only health check. It does not mention side effects, auth needs, or error cases, but for a zero-parameter tool this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at one line, but the use of a comma-separated list could be more readable. It is front-loaded with 'Health check' which immediately conveys purpose. Minor improvements in structure would earn a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and an output schema (not shown), the description covers the main expected outputs. However, it does not mention that it provides a high-level summary vs. detailed data, and error conditions are omitted. Still, it is largely complete for a health check tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the description adds value by explaining what the tool does and what information it returns. Since the input schema provides no detail, the description is essential and sufficiently informative.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it's a 'Health check' and lists specific returned information (device counts, online/offline, key expiry warnings, updates, tailnet settings, write gate). This distinguishes it from sibling tools that focus on specific aspects like ts_devices or ts_acl, but a more explicit statement of its scope would improve clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for general health monitoring, but lacks explicit guidance on when to use this tool vs siblings. No when-not-to-use or alternative recommendations are provided, which is a gap given the number of sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_keysA

List auth keys: ID, description, reusable/ephemeral/preauth flags, tags, expiry.

Optional scope arg filters keys by DD-278 scope-tag mapping. Output includes a Track 3 _meta envelope as a JSON tail line.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoDD-278 scope filter: 'infrastructure' | 'personal' | 'home'. Filtered client-side after fetch — matches the key's capabilities.devices.create.tags against the scope tag set.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description notes that scope filtering is client-side after fetch and that output includes a Track 3 _meta envelope, providing useful behavioral details beyond a simple 'list' action. No annotations exist, so the description carries the full burden, and it does well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the main action and output fields, and contains no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description appropriately summarizes the output fields and mentions the _meta envelope. It covers all essential aspects for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds minimal value for the 'scope' parameter beyond what the schema already states. The description includes the parameter but does not provide new semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists auth keys with specific fields (ID, description, flags, tags, expiry), distinguishing it from related siblings like ts_create_key and ts_delete_key.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the optional scope parameter and its function, but lacks explicit guidance on when to use this tool versus alternatives like ts_acl or ts_devices. However, the purpose is clear enough for basic usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_set_tagsA

Set ACL tags on a device. Replaces existing tags. Requires TAILSCALE_WRITE_ENABLED=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_idYesDevice nodeId (from ts_devices)
tagsYesACL tags to set (e.g. ['tag:server', 'tag:prod'])

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description discloses the destructive behavior (replacing existing tags) and a critical prerequisite. This adds value beyond a basic read/write classification, but does not cover other aspects like rate limits or error modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences, front-loading the purpose and adding a key requirement. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has two parameters, an output schema (not shown), and the description covers the main behavior and prerequisite. It is adequate for a simple tool, though it could mention error scenarios or idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description does not add parameter-level details beyond the schema. It provides context about replacement and requirements, but the schema already handles parameter semantics adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Set' and resource 'ACL tags on a device', and mentions replacement of existing tags. It is specific and informative but does not differentiate from siblings like ts_acl_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the prerequisite 'Requires TAILSCALE_WRITE_ENABLED=true', but lacks guidance on when to use this tool versus alternatives such as ts_acl_set. Usage context is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_usersA

List users: name, login, role, status, device count, online/last seen. Sorted by case-folded loginName ascending (numeric id tie-break).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description clearly indicates this is a read-only listing tool with sorting details. It does not mention any side effects, which is acceptable for a simple retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two succinct sentences with maximum information: first states purpose and output fields, second adds sorting behavior. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with an output schema, the description covers essential output fields and sorting. Sibling tools are diverse, so confusion is unlikely. Fully adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so baseline is 4. The description does not need to add parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'List users' and enumerates the output fields (name, login, role, status, device count, online/last seen), clearly distinguishing it from sibling tools like ts_devices or ts_acl.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing all users, but lacks explicit guidance on when to use this tool versus alternatives or any prerequisites, leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ts_webhooksA

List configured webhooks: endpoint URL, event subscriptions, created date. Sorted by endpointId ascending.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It correctly implies a read-only list operation and mentions sorting by endpointId ascending, but lacks details on authentication, pagination, or any side effects, which are minimal for a list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no redundant information. Every word adds value, specifying the action, returned fields, and sorting order.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema, the description does not need to cover return values. It adequately specifies what is listed and how it is sorted, which is complete for a simple list tool with zero parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so schema description coverage is 100%. The description adds nothing beyond what the schema provides, which is appropriate given no parameters exist. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List configured webhooks' with specific fields (endpoint URL, event subscriptions, created date), which is a specific verb+resource. It distinguishes from sibling tools like ts_devices or ts_acl, which are unrelated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing webhooks but provides no explicit when-to-use or alternatives. It does not mention when not to use it or if there are other tools for webhook management.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 19 tool updatesv0.9.0
    • First observedts_acl
    • First observedts_acl_set
    • First observedts_acl_validate
    • First observedts_approve_routes
    • First observedts_audit_log
    • First observedts_authorize_device
    • First observedts_create_key
    • First observedts_delete_device
    • First observedts_delete_key
    • First observedts_device
    • First observedts_device_routes
    • First observedts_devices
    • First observedts_dns
    • First observedts_expire_device
    • First observedts_info
    • First observedts_keys
    • First observedts_set_tags
    • First observedts_users
    • First observedts_webhooks

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct aspect of Tailscale management: ACL policies, devices, auth keys, DNS, users, webhooks, audit, and health. Even similar-sounding tools like ts_device and ts_devices serve different purposes (single vs. list). No ambiguity.

Naming Consistency5/5

All tools use the 'ts_' prefix with consistent verb_noun pattern in snake_case (e.g., ts_acl_set, ts_approve_routes, ts_delete_device). There are no deviations or mixed conventions.

Tool Count5/5

19 tools cover the full lifecycle of Tailscale resources a reasonable granularity. The scope is not overburdened; each tool provides a specific function without redundancy.

Completeness5/5

The tool set covers ACL (read, validate, apply), device lifecycle (list, detail, routes, authorize, delete, expire, tags), auth keys (list, create, revoke), DNS config, users, webhooks, audit log, and health check. No obvious gaps for typical tailnet management.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Production-ready MCP server for Tailscale management with 48 tools across 9 domains: Devices, DNS/Split DNS, ACL policies, Auth Keys, Users, Webhooks, Posture Integrations, Tailnet Settings, and Diagnostics. Supports stdio and SSE transport with Bearer token authentication. Built with TypeScript strict mode, Zod validation, and zero shell execution. AGPL-3.0 + Commercial dual-licensed.
    49
    93
    1
    AGPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Local zero-trust permission gateway for AI agents. Enforces policy-based tool authorization, human approvals, scoped permissions, and cryptographically verifiable audit logs.
    4
    5
    Apache 2.0

Appeared in Searches

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Groupthink-dev/tailscale-blade-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server