mcp-tailscale
mcp-tailscale is an MCP server that gives AI agents secure, authenticated access to manage Tailscale network infrastructure via 48 tools across 9 domains (Tailscale API v2).
Device Management (11 tools): List, get, authorize, delete, rename, and expire devices; manage subnet routes, ACL tags, and custom posture attributes.
DNS Configuration (8 tools): Get/set global nameservers, DNS search paths, split DNS settings, and MagicDNS preferences.
ACL Policy Management (5 tools): Retrieve, replace, preview, validate, and run tests against ACL policies.
Auth Key Management (4 tools): List, get, create (with tags, reusability, ephemerality, expiry options), and revoke auth keys.
Tailnet Settings (5 tools): Get/update tailnet settings (device approval, auto-updates, key expiry, posture identity collection), manage contact emails, and check Tailnet Lock status.
User Management (2 tools): List all users (filterable by type/role) and get details for a specific user.
Webhook Management (4 tools): List, create, get details for, and delete webhook endpoints with event subscriptions.
Posture Integrations (4 tools): List, get, create, and delete third-party posture provider integrations (e.g., CrowdStrike, Intune, Jamf).
Diagnostics (5 tools): Get tailnet status summaries, verify API connectivity, get/set log streaming configuration, and retrieve the DERP relay map.
Provides tools for managing devices, DNS/Split DNS, ACL policies, auth keys, users, webhooks, and tailnet settings via the Tailscale API v2.
mcp-tailscale
Secure MCP access for private infrastructure over Tailscale
The Problem
AI agents need access to internal tools, services, and infrastructure — but exposing private systems to the internet creates unacceptable security risks. VPNs are complex, SSH tunnels are fragile, and API gateways add latency and maintenance overhead.
mcp-tailscale bridges this gap: a lightweight MCP server that gives AI agents secure, authenticated access to your Tailscale-connected infrastructure — without exposing anything to the public internet.
Related MCP server: mcp-tailscale
What It Does
mcp-tailscale is an MCP Gateway Runtime that connects AI agents (Claude, GPT, custom) to your private infrastructure through Tailscale's zero-trust network. It provides 48 tools across 9 domains for managing devices, DNS, ACL policies, auth keys, users, webhooks, posture integrations, and tailnet settings — all through the Tailscale API v2.
No SSH. No shell execution. API-only. 4 runtime dependencies.
Use Cases
DevOps Automation — Let AI agents manage device authorization, subnet routes, and ACL policies across your tailnet
DNS Management — Configure split DNS, global nameservers, and MagicDNS through natural language
Security Auditing — Automated ACL policy validation, posture compliance checks, and key rotation
Fleet Management — Monitor device status, manage tags, and onboard new devices at scale
Infrastructure as Conversation — Query and modify your private network configuration through AI-driven workflows
Quick Start
Install from npm
npm install -g tailscale-mcpOr clone and build from source
git clone https://github.com/itunified-io/mcp-tailscale.git
cd mcp-tailscale
npm install
cp .env.example .env # Edit with your Tailscale API key and tailnet name
npm run build
node dist/index.js # stdio transport for MCPHashiCorp Vault Integration (Optional)
mcp-tailscale supports opportunistic secret loading from HashiCorp Vault via AppRole authentication. This lets you store your Tailscale credentials centrally in Vault and avoid passing sensitive values through MCP config files or shell environment variables.
How It Works
At startup, the server checks whether NAS_VAULT_ADDR is set. If it is, it authenticates to Vault using AppRole credentials, reads the KV v2 secret at <mount>/data/tailscale/api, and injects the values into the process environment before the Tailscale client is initialized.
Opportunistic loading — if
NAS_VAULT_ADDRis unset, the Vault loader is a silent no-op. The server behaves exactly as without Vault.Silent fallback — if Vault is unreachable, authentication fails, or the secret path is missing, a single-line warning is written to stderr and the server falls back to whatever environment variables are already set.
No new runtime dependencies — the loader uses the global
fetchavailable in Node.js 20+ (no extra packages).Secret values are never logged — only the KV path name and a populated-count appear in stderr diagnostics.
Precedence
Explicit env vars > Vault > error (missing credentials)If TAILSCALE_API_KEY is already set in the environment, Vault is still contacted (if configured) but the explicit value wins. This lets you override Vault values per-session without touching the Vault secret.
Vault Environment Variables
Variable | Required | Description |
| Yes* | Vault server address (e.g., |
| Yes* | AppRole role ID for this server |
| Yes* | AppRole secret ID for this server |
| No | KV v2 mount path (default: |
* Only required if using Vault. When NAS_VAULT_ADDR is unset, none of these are read.
KV v2 Secret Structure
The loader reads the secret at path <mount>/data/tailscale/api (default: kv/data/tailscale/api) and maps keys as follows:
# Path: kv/tailscale/api
{
"api_key": "tskey-api-your-key",
"tailnet": "your-tailnet.ts.net"
}Vault Key | Maps To |
|
|
|
|
OAuth note: the Vault loader only handles the API-key path. If you use OAuth (
TAILSCALE_OAUTH_CLIENT_ID/TAILSCALE_OAUTH_CLIENT_SECRET), set those through the normal environment — they are not currently read from Vault.
Vault Setup Steps
1. Write the Tailscale credentials to KV v2:
vault kv put kv/tailscale/api \
api_key="tskey-api-your-key" \
tailnet="your-tailnet.ts.net"2. Create a Vault policy:
# tailscale-mcp-policy.hcl
path "kv/data/tailscale/api" {
capabilities = ["read"]
}vault policy write tailscale-mcp tailscale-mcp-policy.hcl3. Enable AppRole auth and create a role:
vault auth enable approle
vault write auth/approle/role/tailscale-mcp \
token_policies="tailscale-mcp" \
token_ttl="1h" \
token_max_ttl="4h"4. Retrieve the role ID and generate a secret ID:
vault read auth/approle/role/tailscale-mcp/role-id
vault write -f auth/approle/role/tailscale-mcp/secret-idMCP Config Example (with Vault)
{
"mcpServers": {
"tailscale": {
"command": "npx",
"args": ["@itunified.io/mcp-tailscale"],
"env": {
"NAS_VAULT_ADDR": "https://vault.example.com:8200",
"NAS_VAULT_ROLE_ID": "your-role-id",
"NAS_VAULT_SECRET_ID": "your-secret-id"
}
}
}
}With this configuration, no Tailscale credentials appear in the MCP config — they are fetched from Vault at startup.
Claude Code Integration
Add to .mcp.json in your project root:
{
"mcpServers": {
"tailscale": {
"command": "node",
"args": ["/path/to/mcp-tailscale/dist/index.js"],
"env": {
"TAILSCALE_API_KEY": "your-api-key-here",
"TAILSCALE_TAILNET": "your-tailnet-name"
},
"comment": "Or use OAuth: TAILSCALE_OAUTH_CLIENT_ID + TAILSCALE_OAUTH_CLIENT_SECRET instead of TAILSCALE_API_KEY"
}
}
}Features
48 tools across 9 domains:
Devices — List, get, delete, authorize, expire, rename devices; manage routes, tags, and posture attributes
DNS — Global nameservers, search paths, split DNS configuration, MagicDNS preferences
ACL — Get, set, preview, validate, and test ACL policies
Keys — List, get, create, and revoke auth keys
Tailnet — Settings (read/write), contacts, Tailnet Lock status
Users — List and get tailnet users with role/type filtering
Webhooks — Create, list, get, and delete webhook endpoints
Posture Integrations — List, get, create, and delete third-party posture provider integrations
Diagnostics — Tailnet status summary, API connectivity check, log streaming, DERP map
Authentication: API key or OAuth client credentials (auto-refresh)
Skills
Claude Code skills compose MCP tools into higher-level workflows. See .claude/skills/README.md for detailed documentation.
Skill | Slash Command | Description |
tailscale-health |
| Tailnet health dashboard — devices, DNS, ACL, keys, connectivity |
tailscale-live-test |
| Live integration test — read + safe writes with cleanup |
tailscale-acl-management | — | ACL policy management — view, edit, validate, test, drift detection |
tailscale-device-management | — | Device management — list, authorize, routes, tags, posture |
tailscale-dns-management | — | DNS management — split DNS, nameservers, search paths, MagicDNS |
tailscale-key-management | — | Auth key management — create, list, rotate, revoke |
tailscale-onboarding | — | New device onboarding — auth key, authorize, tags, routes, verify |
SSE Transport
By default, mcp-tailscale uses stdio transport. To enable HTTP/SSE:
export TAILSCALE_MCP_TRANSPORT=sse
export TAILSCALE_MCP_AUTH_TOKEN=your-secret-token
export TAILSCALE_MCP_PORT=3000 # optional, default: 3000
export TAILSCALE_MCP_HOST=localhost # optional, default: localhost
node dist/index.jsAll requests require Authorization: Bearer <token>. The server will not start without TAILSCALE_MCP_AUTH_TOKEN.
Configuration
Variable | Required | Default | Description |
| Yes* | — | Tailscale API key (from admin console > Settings > Keys) |
| Yes* | — | OAuth client ID (from admin console > Settings > OAuth) |
| Yes* | — | OAuth client secret |
| Yes | — | Tailnet name (e.g., |
| No |
| API base URL (override for testing) |
| No |
| Request timeout in milliseconds |
| No | — | HashiCorp Vault URL, enables Vault AppRole loading (see below) |
| No | — | Vault AppRole role_id |
| No | — | Vault AppRole secret_id |
| No |
| Vault KV v2 mount path |
*Either TAILSCALE_API_KEY or both TAILSCALE_OAUTH_CLIENT_ID + TAILSCALE_OAUTH_CLIENT_SECRET must be set. OAuth takes priority when both are configured.
Loading Secrets from HashiCorp Vault (AppRole)
If you run a central Vault instance, mcp-tailscale can fetch its credentials
at startup via AppRole instead of passing them through the MCP config:
export NAS_VAULT_ADDR=https://vault.example.com
export NAS_VAULT_ROLE_ID=<role-id>
export NAS_VAULT_SECRET_ID=<secret-id>
# optional — defaults to "kv"
export NAS_VAULT_KV_MOUNT=kvThe loader reads KV v2 at <mount>/data/tailscale/api and expects two keys:
api_key and tailnet. Example Vault write:
vault kv put kv/tailscale/api \
api_key=tskey-api-test \
tailnet=your-tailnet-namePrecedence: process.env (explicit) > Vault. If NAS_VAULT_ADDR is unset
the loader is a silent no-op — the server behaves exactly as before. On any
Vault error (network, auth, missing path), a single-line warning is written
to stderr and the server falls back to whatever env vars are already set.
OAuth note: the Vault loader only handles the API-key path. If you use
OAuth (TAILSCALE_OAUTH_CLIENT_ID / TAILSCALE_OAUTH_CLIENT_SECRET), set
those through the normal environment — they are not currently read from
Vault.
Security: secret values are never logged. Only the KV path name and a
populated-count appear in stderr diagnostics. Uses the global fetch
(Node 20+) — no new runtime dependencies.
Authentication
API Key: Create at login.tailscale.com/admin/settings/keys. The key needs read/write access to the resources you want to manage.
OAuth Client Credentials: Create at login.tailscale.com/admin/settings/oauth. OAuth tokens auto-refresh before expiry. Recommended for automated/service integrations.
Tools
Devices (11 tools)
Tool | Description |
| List all devices in the tailnet |
| Get device details by ID |
| Delete a device (requires |
| Authorize a pending device |
| Get advertised and enabled routes |
| Set enabled subnet routes |
| Set ACL tags on a device |
| Get custom posture attributes |
| Set a custom posture attribute |
| Expire a device key (requires |
| Set a custom display name for a device |
DNS (8 tools)
Tool | Description |
| Get global DNS nameservers |
| Set global DNS nameservers |
| Get DNS search paths |
| Set DNS search paths |
| Get split DNS configuration |
| Update split DNS configuration (PATCH) |
| Get DNS preferences (MagicDNS) |
| Set DNS preferences |
ACL (5 tools)
Tool | Description |
| Get the current ACL policy |
| Replace the ACL policy (requires |
| Preview ACL policy for a user or IP |
| Validate an ACL policy without applying |
| Run ACL tests defined in the policy |
Keys (4 tools)
Tool | Description |
| List all auth keys |
| Get auth key details |
| Create a new auth key |
| Delete an auth key (requires |
Tailnet (5 tools)
Tool | Description |
| Get tailnet settings |
| Update tailnet settings (requires |
| Get tailnet contact emails |
| Update tailnet contacts (requires |
| Get Tailnet Lock status |
Users (2 tools)
Tool | Description |
| List all users (filter by type/role) |
| Get user details by ID |
Webhooks (4 tools)
Tool | Description |
| List all webhook endpoints |
| Create a webhook endpoint |
| Get webhook details by ID |
| Delete a webhook (requires |
Posture Integrations (4 tools)
Tool | Description |
| List all posture provider integrations |
| Get posture integration details by ID |
| Create a posture provider integration |
| Delete a posture integration (requires |
Diagnostics (5 tools)
Tool | Description |
| Tailnet status summary (device counts, online/offline) |
| Verify API connectivity and authentication |
| Get log streaming configuration |
| Set log streaming configuration (requires |
| Get DERP relay map |
Architecture
See ARCHITECTURE.md for detailed architecture diagrams and component descriptions.
Roadmap
See ROADMAP.md for the product development roadmap.
Development
npm run build # Compile TypeScript
npm test # Run unit tests (vitest)
npm run typecheck # Type check only (no emit)See CONTRIBUTING.md for contribution guidelines. See docs/api-reference.md for the Tailscale API v2 endpoint mapping.
Open Source
mcp-tailscale is the community edition — a fully functional MCP Gateway Runtime under AGPL-3.0. Self-host it, contribute to it, build on it.
What you get with the open-source edition:
Complete Tailscale API v2 coverage (48 tools, 9 domains)
stdio and SSE transport
API key and OAuth authentication
Zod-validated inputs, structured error handling
Claude Code skills for common workflows
Full test suite (vitest)
Commercial
For organizations that need governance, compliance, and multi-tenant capabilities on top of the open-source runtime, we offer commercial editions with enterprise features.
Planned enterprise capabilities:
Role-based access control (RBAC)
OIDC/SAML single sign-on
Audit event logging
Policy engine for tool access control
Multi-tenant isolation
Commercial license (no AGPL obligations)
Priority support and SLA
See PRODUCT_PACKAGING.md for tier details.
Contact us: GitHub Sponsors
License
This project is dual-licensed:
Open Source: GNU Affero General Public License v3.0 (AGPL-3.0) — free for open-source and non-commercial use
Commercial: Available for proprietary integrations — see COMMERCIAL_LICENSE.md
If you use mcp-tailscale in a proprietary product or SaaS offering, a commercial license is required. Support development by sponsoring us on GitHub.
Available Tools
49 toolstailscale_acl_getA
Get the current ACL policy for the tailnet as JSON. Returns the full policy including rules, groups, hosts, and tag owners.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes return format (JSON) and content (full policy including rules, groups, hosts, tag owners). No annotations provided, so description carries full burden; it adequately discloses the read-only nature but lacks details on authentication or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence states action, second clarifies return content. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a no-parameter read operation. Specifies what is returned (full policy). Slightly lacking in confirming authentication needs, but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. Baseline score of 4 is appropriate; description does not need to add param information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets the current ACL policy for the tailnet as JSON, specifying the verb and resource. Distinguishes from sibling tools like tailscale_acl_set or tailscale_acl_preview by focusing on retrieving the current policy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage when the current ACL policy is needed. Lacks explicit guidance on when not to use or comparison with siblings, but the context is clear enough for this simple retrieval operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_acl_previewA
Preview what the ACL policy would allow for a specific user or IP. Useful for testing before applying changes.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | IP version for the preview | |
| policy | Yes | The ACL policy to preview | |
| previewFor | No | User email or IP address to preview access for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. The word 'preview' implies a non-destructive read-only operation, but the description does not explicitly state it has no side effects or specify any behavioral traits beyond the implied read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant words. The core action and use case are front-loaded, making it easy for an agent to quickly understand the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal given the tool has a nested schema (policy object) and no output schema. It does not describe the return format or what the preview result looks like. With no output schema, the agent lacks information about what to expect from the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptions in the input schema (100% coverage). The description reinforces the role of 'previewFor' by mentioning 'specific user or IP', but adds no additional meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool previews ACL policy for a specific user or IP, distinguishing it from siblings like tailscale_acl_test which likely tests current policy. The verb 'preview' and resource 'ACL policy' are specific and the scope ('for a specific user or IP') is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Useful for testing before applying changes,' which implies when to use it. However, it does not explicitly state when not to use it or contrast with alternatives like tailscale_acl_test or tailscale_acl_validate, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_acl_setA
Set (replace) the ACL policy for the tailnet. Requires confirm: true. The entire policy is replaced — provide the complete policy.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | The complete ACL policy JSON to set | |
| confirm | Yes | Must be true to confirm the ACL policy replacement |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It correctly notes that the entire policy is replaced and requires confirmation, but lacks detail on destructive effects, permissions needed, or error behavior. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The action and critical requirement are front-loaded. Every sentence adds necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With two parameters (one nested) and no output schema, the description covers the core behavior: replacement and confirmation. It omits return details but that's acceptable. Good completeness for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description adds value by emphasizing that the policy must be the complete replacement, but doesn't provide additional syntax or constraints beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly identifies the action as setting/replacing the ACL policy for the tailnet. Verb 'Set (replace)' and resource 'ACL policy for the tailnet' are specific and distinguishable from sibling tools like tailscale_acl_get or tailscale_acl_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the need for confirm: true, which is a critical usage requirement. While it doesn't explicitly mention when not to use it compared to alternatives, the context of being a write operation is clear among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_acl_testB
Run ACL tests defined in the policy's 'tests' field by validating the policy. Returns validation results including test pass/fail outcomes.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | The ACL policy containing tests to run |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It states the tool runs tests and returns results, but does not disclose whether it modifies the policy, requires authentication, or has side effects. Minimal behavioral context beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with clear front-loading of the action. No redundant words or unnecessary information. Each sentence serves a purpose, making it highly concise and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description explains the action and what the output contains (pass/fail results). It could mention that the tool is non-modifying, but overall provides sufficient context for an agent to understand the tool's purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for the 'policy' parameter. The description adds meaning by specifying that the tests are in the 'tests' field and that validation occurs, but it does not provide additional parameter-level details beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool runs ACL tests from the policy's 'tests' field and returns validation results including pass/fail outcomes. It specifies the action (run tests) and resource (policy tests), but does not differentiate from sibling tools like tailscale_acl_validate or tailscale_acl_preview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for testing ACL policies, but provides no explicit guidance on when to use it versus alternatives (e.g., tailscale_acl_validate for validation without tests). No when-not-to-use or prerequisite information is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_acl_validateA
Validate an ACL policy without applying it. Returns any errors or warnings found in the policy.
| Name | Required | Description | Default |
|---|---|---|---|
| policy | Yes | The ACL policy to validate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It clearly indicates the tool is non-destructive ('Validate without applying') and specifies the output ('returns any errors or warnings'). This is sufficient for a validation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence with no wasted words. It front-loads the core action and outcome.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema, the description covers the essential purpose and behavior completely. No missing information is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'policy' is described in the schema as 'The ACL policy to validate' with 100% coverage. The description does not add additional meaning or constraints beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (validate), the resource (ACL policy), and the outcome (returns errors or warnings). It distinguishes from siblings like 'tailscale_acl_set' (which applies) and 'tailscale_acl_test' (which tests connectivity).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes 'without applying it', hinting at a pre-apply validation use case, but does not explicitly state when to use this tool versus alternatives like preview or test. Some guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_api_verifyA
Verify API connectivity and authentication by making a lightweight request to the Tailscale API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It describes a 'lightweight request,' indicating minimal impact, but does not disclose the response format, error behavior, or authentication failure details. With no annotations, the description carries full burden and is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence conveys the complete purpose and behavior without extraneous words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter verification tool, the description covers the essential purpose and nature (lightweight). Lacks detail on output or failure modes, but overall complete for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so the description correctly adds no parameter information. Baseline 4 applies as schema coverage is trivially 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool verifies API connectivity and authentication, which is a specific action distinct from sibling tools that perform CRUD or configuration operations on Tailscale resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use before other operations to check connectivity, but does not explicitly state when to use or provide alternatives. No direct guidance on 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.
tailscale_derp_mapA
Get the custom DERP relay map from the tailnet's ACL policy. Returns the derpMap field from the ACL, or a 'not configured' message if no custom DERP map exists.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return values: the derpMap field or a 'not configured' message, which is sufficient for a read-only getter. It does not explicitly state that it is read-only or requires authentication, but the verb 'Get' strongly implies no side effects. Without annotations, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, zero waste, front-loaded with the purpose, and efficiently conveys the tool's behavior and return values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description explains the return values (derpMap or 'not configured' message) completely. It is sufficient for an agent to understand and invoke this simple tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so baseline is 4. Schema coverage is 100% (vacuously). 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the custom DERP relay map from the tailnet's ACL policy, using a specific verb ('Get') and resource. It distinguishes from siblings like tailscale_derp_map_set (which sets the map) and tailscale_acl_get (which gets the full ACL).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need the custom DERP map specifically, not the full ACL. However, it does not explicitly state when to use versus alternatives or provide exclusion criteria. The context 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.
tailscale_derp_map_setA
Set or update the custom DERP relay map in the tailnet's ACL policy. Requires confirm: true. Custom DERP regions use IDs 900-999. Set omitDefaultRegions: true to replace Tailscale's default relays entirely.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to confirm the DERP map update | |
| regions | Yes | Map of region ID (string) to region config. Custom regions should use IDs 900-999. | |
| omitDefaultRegions | No | If true, omit Tailscale's default DERP regions and use only custom ones |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose all behavioral traits. It reveals the confirmation requirement and the ID range constraint, but lacks details on authorization needs, rate limits, error states, or what happens if confirm is false. It does not contradict any annotations since none are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three sentences, each serving a clear purpose: stating the action, noting the confirmation requirement, and specifying key constraints. It is front-loaded with the main verb and resource, with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the complexity of nested parameters, the description covers the most important aspects: confirmation, ID range, and default region behavior. It does not explain merge vs replace behavior or return values, but combined with the detailed schema, it is largely sufficient for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 emphasizing that confirm must be true, recommending custom region IDs 900-999, and explaining the effect of omitDefaultRegions. This provides clarity beyond the schema's own descriptions, though the schema already covers the basics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Set or update' and the resource 'custom DERP relay map in the tailnet's ACL policy', distinguishing it from sibling tools like tailscale_acl_set (which sets ACL rules) and tailscale_derp_map (which likely retrieves the map). The constraints on IDs and omitDefaultRegions further clarify its specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the requirement for confirm:true and notes that custom region IDs should be 900-999, and omitDefaultRegions replaces defaults. However, it does not explicitly state when to use this tool versus alternatives like tailscale_acl_set or when not to use it, leaving some ambiguity for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_authorizeA
Authorize a device that is pending approval. Sets the device's authorized status to true.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | Tailscale device ID to authorize |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full weight. It only states that the authorized status is set to true, but omits side effects (e.g., reversibility, permissions required, idempotency, or behavior if already authorized). This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the key action, and contains no unnecessary words. It is highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description is partially complete. It explains the core function but lacks behavioral and usage context that would be expected given the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the parameter description is clear. The description adds no additional meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool authorizes a pending device by setting its authorized status to true. It specifies the action (authorize) and resource (device), and is distinguishable from sibling tools like device_delete or device_expire.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when a device is pending approval, but does not explicitly state when to use this tool over alternatives or provide exclusions. It lacks guidance on prerequisites 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.
tailscale_device_deleteA
Delete a device from the tailnet. This removes the device and revokes its access. Requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to confirm device deletion | |
| deviceId | Yes | Tailscale device ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that 'confirm: true' is required, which is a key behavioral constraint. However, it does not mention irreversibility, side effects on connected resources, or whether the deletion is immediate or asynchronous. Additional details would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the main action, and contains no redundant information. Every word contributes to understanding the tool's purpose and a critical requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive operation with two required parameters and no output schema, the description covers the basic purpose and a key requirement. However, it omits information about the success/failure response, error handling, or any recovery options, leaving the agent potentially underinformed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds the phrase 'Requires confirm: true' which reinforces the schema but provides little extra meaning beyond the parameter descriptions already present. The description does not expand on deviceId usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a device from the tailnet') and the consequence ('removes the device and revokes its access'), distinguishing it from sibling tools like tailscale_device_get or tailscale_device_rename, which perform different operations on devices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., tailscale_device_expire or tailscale_device_authorize). It does not specify prerequisites, such as requiring the device to be online or warnings about irreversible deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_expireA
Expire a device's key, forcing it to re-authenticate. The device remains in the tailnet but loses connectivity until re-authenticated. This is one-directional — once expired, the device must re-auth. Requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to confirm key expiry | |
| deviceId | Yes | Tailscale device ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description fully conveys the irreversible consequence (lose connectivity, must re-auth), the fact the device stays in tailnet, and the confirm requirement. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with action, then consequence, then constraint. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation with 2 params and no output schema, description covers purpose, effect, and confirmation. Missing error handling or return info, but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the description reinforces 'confirm: true' but adds no new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Expire a device's key' with specific verb and resource. Describes effect (force re-auth, lose connectivity) and distinguishes from siblings like delete or authorize.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly indicates when to use (force re-authentication) but does not explicitly contrast with alternatives like tailscale_device_authorize or tailscale_device_delete. Provides context for the one-directional nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_getA
Get details of a specific device by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | Tailscale device ID (numeric string) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the operation is a read ('Get details'), which is accurate. However, it does not mention any prerequisites, error conditions, or response characteristics. It meets the basic requirement but does not go beyond.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb 'Get', and contains no unnecessary words. Every word serves a purpose, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read operation, the description adequately covers the input and purpose. While no output schema exists, the 'details' hint suggests what is returned. It could benefit from specifying that it returns all device fields, but it remains sufficient for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, and the schema already describes deviceId as 'Tailscale device ID (numeric string)'. The description's 'by its ID' adds no additional meaning beyond the schema, so the description does not enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'details of a specific device', and identifies the key parameter 'by its ID'. This makes the tool's purpose distinct from sibling tools like tailscale_device_list (list all) or tailscale_device_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as tailscale_device_list for multiple devices or tailscale_device_get for a single device. The usage is implied but not explicitly stated, which provides minimal guidance for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_listA
List all devices in the tailnet. Returns all registered devices with their IP addresses, hostname, OS, and connection status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It implies a read-only list operation with no side effects, but does not explicitly state that it is safe, idempotent, or any potential limits. Adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and zero parameters, the description sufficiently describes the tool's function and return data. Complete for a simple list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. The description adds value by listing return fields, but no parameter details needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 in the tailnet and specifies return fields (IP, hostname, OS, connection status). It distinguishes from sibling tools like tailscale_device_get (single device) and others that modify or retrieve different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 tailscale_device_get or tailscale_device_list? (there is no alternative list tool). No exclusions or context provided for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_posture_getA
Get custom posture attributes for a device. Returns all key-value posture attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | Tailscale device ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states the tool is read-only ('Get') and returns all key-value attributes, but does not disclose authentication needs, rate limits, or behavior on missing devices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no superfluous words. It front-loads the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, no output schema), the description adequately explains what it returns. It is slightly lacking in behavioral transparency but otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter (deviceId) has full schema description coverage (100%), so the description adds no extra meaning beyond the schema. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'custom posture attributes for a device', and distinguishes from sibling tools like tailscale_device_posture_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool vs alternatives, such as when to use tailscale_device_posture_set or tailscale_device_get. Usage context is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_posture_setA
Set a custom posture attribute on a device. Creates or updates a single attribute key-value pair.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Attribute value (string, boolean, or number) | |
| deviceId | Yes | Tailscale device ID | |
| attributeKey | Yes | Posture attribute key (e.g., 'custom:compliance-status') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden. It states the operation (creates/updates) but omits behavioral details such as whether it overwrites existing values, required permissions, or potential side effects. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, concise and efficient. No unnecessary words, clearly communicates the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 params, no output schema), the description is adequate but misses behavioral context like idempotency or permission requirements. It is minimally complete for a mutation tool without annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover 100% of parameters. The description adds minimal extra meaning beyond the schema, such as the operation context. Baseline of 3 is appropriate as the description does not significantly enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Set), the resource (custom posture attribute), and the scope (on a device). It also explains it creates or updates a single key-value pair, distinguishing it from the sibling tool tailscale_device_posture_get which retrieves attributes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidelines on when to use this tool versus alternatives like tailscale_device_tags_set. However, the purpose is clear, implying use for setting custom posture attributes, but lacks when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_renameA
Set a custom display name for a device. This changes the device's 'given name' in Tailscale, not the machine hostname.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New display name for the device | |
| deviceId | Yes | Tailscale device ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that it changes the 'given name' not the hostname, but lacks details on reversibility, side effects, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence states the action concisely, the second provides a key clarification. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with 2 parameters and no output schema, the description is adequate but minimal. It lacks any mention of prerequisites, error conditions, or side effects beyond the hostname clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the schema; it restates the tool's purpose but does not elaborate on parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('Set a custom display name') and the resource ('device'), and distinguishes it from hostname changes, which differentiates it from sibling tools that modify device properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for setting display names but does not provide explicit when-to-use, when-not-to-use, or alternatives. The clarification about hostname is subtly helpful but not a full guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_routes_getB
Get the advertised and enabled subnet routes for a device.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | Tailscale device ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description does not disclose behavioral traits beyond the basic 'get' operation. There is no mention of authentication requirements, rate limits, or the fact that this is a read-only operation. The description carries the full burden but adds 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the core functionality without superfluous words. It is appropriately front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get operation with one parameter and no output schema, the description is adequate but not fully complete. It does not describe the structure of the returned routes (e.g., whether it's a list, what fields are included), which would be helpful since no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the single parameter 'deviceId' is described as 'Tailscale device ID'). The description adds no additional meaning beyond what the schema already provides. According to guidelines, when schema coverage is high, the baseline is 3, and the description does not improve upon it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('Get') and the resource ('advertised and enabled subnet routes for a device'). It distinguishes the tool from its sibling tools, particularly 'tailscale_device_routes_set' (which sets routes) and 'tailscale_device_get' (which gets general device info), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as 'tailscale_device_routes_set' or other device-related tools. There is no mention of prerequisites, typical use cases, or when it should be avoided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_routes_setA
Set the enabled subnet routes for a device. Replaces the current set of enabled routes.
| Name | Required | Description | Default |
|---|---|---|---|
| routes | Yes | List of CIDR routes to enable (e.g., ['10.0.0.0/8', '192.168.1.0/24']) | |
| deviceId | Yes | Tailscale device ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it replaces routes (destructive), but no mention of permissions, reversibility, or side effects. Without annotations, more detail needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no extraneous information, front-loaded with action verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param tool with no output schema, description covers core behavior (replacement) adequately. Could mention return value but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description adds minimal value beyond schema examples. Baseline score due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it sets enabled subnet routes for a device and replaces current routes, distinguishing it from get routes tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use versus alternatives like tailscale_device_routes_get; lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_tags_setA
Set ACL tags on a device. Replaces all existing tags. Use an empty array to remove all tags.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | List of ACL tags to set (e.g., ['tag:server', 'tag:prod']). Use empty array to clear tags. | |
| deviceId | Yes | Tailscale device ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description discloses key behavioral traits: that it replaces all existing tags and that an empty array removes all tags. This goes beyond the basic action and provides important usage information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences, with no wasted words. It front-loads the primary action and immediately follows with key behavioral details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with two required parameters and no output schema, the description adequately covers the action, replacement behavior, and removal method. However, it could mention error conditions or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers both parameters with descriptions, but the description adds value by explicitly stating that an empty array removes all tags, which is a critical semantic detail beyond the schema's generic description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: setting ACL tags on a device. It explicitly mentions that it replaces all existing tags and how to remove tags by using an empty array. This distinguishes it from sibling tools like tailscale_device_get or tailscale_acl_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention context, prerequisites, 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.
tailscale_dns_nameservers_getA
Get the global DNS nameservers configured for the tailnet. Also returns whether MagicDNS is enabled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, but description indicates read-only operation and return fields. No side effects or auth mentioned, adequate for a simple getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no wasted words—front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description fully covers what the tool returns for a parameter-less getter. No missing context given simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, baseline 4. Description adds no parameter info, but schema already covers fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets global DNS nameservers and MagicDNS status. Distinguishes from set and other DNS sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage for retrieving current nameservers, but no explicit when-not or alternatives. Simplicity mitigates the gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_dns_nameservers_setA
Set the global DNS nameservers for the tailnet. Replaces all existing nameservers.
| Name | Required | Description | Default |
|---|---|---|---|
| dns | Yes | List of DNS nameserver IP addresses (e.g., ['1.1.1.1', '8.8.8.8']) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool replaces all existing nameservers, which is a key behavioral trait. However, it does not mention permissions, rate limits, or consequences of an empty array. With no annotations, the description carries the full burden and is moderately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the core action and immediate effect. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic action and effect, but lacks usage guidelines (when to use vs. alternatives) and does not explain return behavior or error cases. It is adequate for a simple tool but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with a description for 'dns'. The tool description adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set') and the resource ('global DNS nameservers for the tailnet'), and explicitly notes that it replaces all existing nameservers, distinguishing it from other DNS operations like add or update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., tailscale_dns_preferences_set, tailscale_dns_splitdns_set). The description does not provide context for selection among sibling DNS tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_dns_preferences_getA
Get DNS preferences for the tailnet, including MagicDNS status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits such as read-only status, but it only states the function. It does not mention that it is a safe, non-destructive operation or any required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no extraneous words. It efficiently conveys the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple (no parameters, no output schema), the description only hints at the return content ('MagicDNS status'). It could be more complete by stating the overall structure or indicating the response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and the description adds no parameter-specific details, which is acceptable given the baseline of 4 for no parameters. The description does not need to add param semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('DNS preferences for the tailnet'), and specifies that it includes MagicDNS status, effectively distinguishing it from sibling tools like tailscale_dns_nameservers_get or tailscale_dns_preferences_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., tailscale_dns_nameservers_get, tailscale_dns_searchpaths_get). The description does not specify context or constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_dns_preferences_setA
Set DNS preferences for the tailnet. Toggle MagicDNS on or off.
| Name | Required | Description | Default |
|---|---|---|---|
| magicDNS | Yes | Enable or disable MagicDNS for the tailnet |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses it is a write operation, but with no annotations, it lacks details on side effects, permissions, or constraints beyond what the schema implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise at two sentences, no unnecessary words, directly states purpose and action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-boolean tool, it adequately explains the core function, but could mention that it only affects MagicDNS and not other DNS settings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of the parameter with description; the tool description adds no extra meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Set', resource 'DNS preferences', and specific action 'Toggle MagicDNS on or off', distinguishing it from sibling tools like get or nameserver-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., get preference or set nameservers). No context on prerequisites or effects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_dns_searchpaths_getB
Get the DNS search paths configured for the tailnet.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully convey behavior. It only states it retrieves data, implying read-only, but lacks detail on side effects, response format, or any constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 8 words, front-loaded with key action and resource. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description could hint at what the response contains (e.g., list of search paths). It is adequate but minimal for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so schema coverage is 100%. The description does not add parameter details, but none are needed. Baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and clearly identifies the resource 'DNS search paths configured for the tailnet'. It effectively distinguishes from sibling tools like tailscale_dns_searchpaths_set and other DNS getters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. While the purpose is clear, there is no mention of usage context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_dns_searchpaths_setA
Set the DNS search paths for the tailnet. Replaces all existing search paths.
| Name | Required | Description | Default |
|---|---|---|---|
| searchPaths | Yes | List of DNS search domains (e.g., ['example.com', 'internal.example.com']) |
TDQS
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 discloses that the operation replaces all existing search paths, which is a key behavioral trait. However, it does not mention authentication requirements or potential side effects beyond replacement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action. Every word is necessary; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (single parameter, no output schema), the description is complete. It explains the replacement behavior, which is essential for understanding the tool's impact. Sibling tools are clearly different.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description in the schema is clear. The description does not add significant meaning beyond the schema, but it implicitly reinforces the purpose. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Set' and the resource 'DNS search paths for the tailnet'. It distinguishes from siblings like tailscale_dns_searchpaths_get and other set tools by specifying 'Replaces all existing search paths', making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for setting DNS search paths but does not explicitly state when to use this tool versus alternatives like tailscale_dns_searchpaths_get or tailscale_dns_nameservers_set. No guidance on prerequisites 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.
tailscale_dns_splitdns_getA
Get the split DNS configuration for the tailnet. Returns a map of domain names to their resolver IP addresses.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description only states the return structure. No mention of authentication, rate limits, side effects, or scope. With no annotations, the description carries full burden but provides 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, no wasted words. Front-loaded with action and outcome.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return value (map of domain to IPs). Complements sibling tailscale_dns_splitdns_set. Could optionally mention that it retrieves current configuration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is 100% by default. The description correctly omits parameter details. Baseline score of 4 for zero-parameter tools is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get the split DNS configuration' and specifies the return type as a map of domain names to resolver IP addresses. Distinguishes from sibling tools like tailscale_dns_splitdns_set (set operation) and tailscale_dns_nameservers_get (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool, when not to, or alternatives. Lacks context for decision-making among sibling DNS tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_dns_splitdns_setB
Update split DNS configuration for the tailnet using a PATCH operation. Provide a map of domain names to resolver IP addresses. Use null values to remove a domain.
| Name | Required | Description | Default |
|---|---|---|---|
| splitDns | Yes | Map of domain to resolver IPs (e.g., {"internal.example.com": ["10.0.0.53"]}). Set a domain to null to remove it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, and description only states it's an update operation. No disclosure of side effects, idempotency, rate limits, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Single-parameter tool with clear schema; description adequately covers functionality. Missing output schema explanation but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description repeats the schema's explanation without adding new meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it updates split DNS configuration using a PATCH operation, with clear verb and resource. It distinguishes from sibling 'tailscale_dns_splitdns_get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., other DNS tools). No mention of prerequisites or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_key_createA
Create a new auth key for the tailnet. Returns the key value — store it securely as it cannot be retrieved again.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ACL tags to apply to devices that use this key (e.g., ['tag:server']) | |
| reusable | No | Whether the key can be used multiple times (default: false) | |
| ephemeral | No | Whether devices using this key are removed when they disconnect (default: false) | |
| description | No | Human-readable description for the key | |
| expirySeconds | No | Key expiry in seconds from now (optional, omit for default expiry) | |
| preauthorized | No | Whether devices using this key are automatically authorized (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It adds value by warning that the key value cannot be retrieved again, which is critical. However, it omits other behaviors like authentication requirements, default key properties, or side effects (e.g., whether it revokes existing keys). This is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that front-load the purpose and add a critical security note. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with no output schema, the description explains the return value (key value) and the security concern. However, it lacks details on what happens on failure, default values for parameters, or any contextual information about key usage in the tailnet. It is minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not elaborate on any parameters beyond the schema's own descriptions. Therefore, it adds no extra semantic value for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create', the resource 'auth key', and the scope 'for the tailnet'. It also distinguishes from sibling tools like tailscale_key_list and tailscale_key_delete by specifying creation. The security warning about storing the key adds further clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., when to create a key vs. list or delete keys). There is no mention of prerequisites or context where this tool is appropriate, leaving the agent to infer usage solely from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_key_deleteA
Delete (revoke) an auth key. Devices already authenticated with this key will not be affected. Requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| keyId | Yes | Auth key ID to delete | |
| confirm | Yes | Must be true to confirm auth key deletion |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that devices already authenticated with the key will not be affected, a key behavioral trait beyond the basic delete semantics, though additional details like permissions or error states are absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose, and contains no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, the description covers the essential behavioral context (effect on devices, confirmation requirement) and is sufficient for the agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the description's addition that confirm must be true adds minimal new meaning beyond the schema's description; the keyId parameter is not elaborated further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete (revoke) an auth key', specifying the verb and resource, and distinguishes from sibling tools like tailscale_key_create and tailscale_key_list by focusing on the delete action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly mentions 'Requires confirm: true', guiding the agent on a necessary precondition, but does not discuss when not to use or provide explicit alternatives to other key operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_key_getB
Get details of a specific auth key by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| keyId | Yes | Auth key ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must fully disclose behavior. It only states 'get details' without specifying what details are returned, side effects, or whether the key must exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no unnecessary words, fitting for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should explain return values. It does not. Lacks mention of read-only nature. Adequate for a simple tool but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'keyId' has schema description 'Auth key ID' (100% coverage). The tool description adds no extra meaning, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('details of a specific auth key by its ID'), clearly distinguishing from sibling tools like tailscale_key_list or tailscale_key_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., tailscale_key_list to find key IDs first) or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_key_listA
List all auth keys for the tailnet. Returns key metadata (but not the secret key values).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, description carries full burden. It discloses that secret values are not returned (important security behavior), but lacks details on pagination, rate limits, or idempotency. Adds some value but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Front-loaded with purpose, then key behavioral note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool, the description fully covers what the tool does and what it returns (metadata, not secrets). No missing elements given the simplicity and absence of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. Description adds no parameter-level detail, but baseline for 0 parameters is 4, and no additional info is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states it lists all auth keys for the tailnet, distinguishing from siblings like tailscale_key_get (single key) and tailscale_key_create. The addition 'returns metadata not secret values' clarifies scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: use when you need a list of all auth keys. No explicit 'when not to use' or alternative guidance, but the name and siblings imply appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_log_stream_getA
Get the current log streaming configuration for the tailnet. Log types: 'configuration' or 'network'.
| Name | Required | Description | Default |
|---|---|---|---|
| logType | Yes | Type of logs to retrieve the streaming config for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation ('Get'), but with no annotations, it could explicitly state that this is non-destructive. It lacks details on permissions or rate limits, though the operation is simple and likely safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no unnecessary words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the purpose and parameter values, but since there is no output schema, it omits any description of the return data format or structure, leaving some ambiguity for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for the only parameter. The description repeats the enum values, adding marginal value beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Get', the resource 'current log streaming configuration', and specifies the log types. This distinguishes it from the sibling 'tailscale_log_stream_set' which is for setting the configuration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving log streaming configurations, but does not explicitly state when to use this over alternatives like tailscale_log_stream_set. No guidance on preconditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_log_stream_setB
Configure log streaming for the tailnet. Requires confirm: true. Streams logs to a specified URL endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL endpoint to stream logs to | |
| confirm | Yes | Must be true to confirm log stream configuration change | |
| logType | Yes | Type of logs to stream | |
| destinationType | Yes | Destination type for log streaming (e.g., 'panther') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It correctly indicates this is a mutation action ('Configure', 'Streams logs') and notes the confirm requirement. However, it omits important details such as potential impact on existing streaming setups, whether the change is reversible, or any authorization or rate-limit context. The description is insufficiently transparent for a configuration mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, with two sentences that deliver the core message without any filler. It front-loads the purpose and includes a critical usage note. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 required parameters, no output schema, no annotations), the description is too brief. It lacks information about the return value, side effects (e.g., replacement of any existing streaming configuration), and error conditions. An agent would need to infer or experiment to understand the full behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 4 parameters, so the baseline is 3. The description adds no new semantic information beyond what is already in the schema; it merely repeats the confirm requirement. While it does not degrade understanding, it does not enhance it either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Configure log streaming for the tailnet.' It uses a specific verb ('Configure') and resource ('log streaming'), and the mention of 'Requires confirm: true' adds a crucial constraint. While it doesn't explicitly distinguish from its sibling 'tailscale_log_stream_get', the naming implies the distinction, and the description makes the action unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when configuring log streaming and highlights a prerequisite ('Requires confirm: true'), but it provides no guidance on when to use this tool over alternatives (e.g., the get variant) or when not to use it. The context for use is clear but lacks exclusions or comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_posture_integration_createA
Create a new third-party posture provider integration. Supported providers: crowdstrike, falcon, intune, jamfPro, kandji, kolide, sentinelone. Required fields depend on the provider.
| Name | Required | Description | Default |
|---|---|---|---|
| cloudId | No | Cloud ID (provider-specific) | |
| clientId | No | Client ID for the posture provider | |
| provider | Yes | Posture provider type | |
| tenantId | No | Tenant ID (for Intune/Azure-based providers) | |
| clientSecret | No | Client secret for the posture provider |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that required fields vary by provider, which is useful but does not detail side effects, idempotency, or error conditions. The schema already marks provider as required, but the description adds context on conditional requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three terse sentences: one for the action, one listing providers, and one about required fields. Every sentence adds useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and 5 parameters (1 required), the description covers the essential action and the dynamic requirement nature. It could be improved by mentioning the expected response (e.g., created integration object), but it is adequate for an AI agent to understand the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described. The description adds value by indicating that required fields depend on the provider, which is not explicit in the schema. This helps the agent understand conditional parameter usage beyond static definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Create') and the resource ('third-party posture provider integration'), and lists all supported providers. It clearly distinguishes from sibling tools like tailscale_posture_integration_delete and tailscale_posture_integration_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes that 'Required fields depend on the provider,' which guides usage. However, it does not explicitly compare to alternatives or state when not to use this tool. The sibling tools are sufficiently differentiated by their names and purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_posture_integration_deleteA
Delete a posture provider integration. Requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to confirm deletion | |
| integrationId | Yes | The posture integration ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It only states the delete action and confirmation requirement but lacks disclosure of side effects (e.g., permanence, cascading deletion, permissions needed). This is insufficient for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with one sentence, front-loading the action and requirement. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with a boolean guard and no output schema, the description covers the essential purpose and key requirement. However, it omits behavioral implications like irreversibility, which would be useful for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description reinforces that confirm must be true, adding marginal value. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the resource ('posture provider integration'), distinguishing it from siblings like create, get, and list. It is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the requirement 'confirm: true', guiding the agent on how to invoke the tool. However, it does not provide when-not-to-use or alternatives, though the sibling list makes the purpose clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_posture_integration_getA
Get details for a specific posture provider integration by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| integrationId | Yes | The posture integration ID |
TDQS
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 a read-only operation ('get details') but does not specify what happens if the ID is invalid or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that is front-loaded with the action and resource. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter and no output schema, the description is largely complete. However, it could briefly mention that it returns integration configuration details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the parameter 'integrationId' described as 'The posture integration ID'. The description adds no extra meaning beyond the schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Get details), the resource (posture provider integration), and the scope (by ID). It distinguishes itself from siblings like create, delete, list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives are mentioned. However, the description implicitly indicates it is for retrieving a single integration by ID, which is clear enough given the tool name and sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_posture_integration_listA
List all configured third-party posture provider integrations for the tailnet (e.g., CrowdStrike, Intune, Jamf).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full burden. It states a simple read operation ('List all configured...'), but does not disclose any behavioral traits such as pagination, authentication needs, or whether the list includes disabled integrations. The description is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the core action, and contains no extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description is brief. It covers the basic purpose but does not indicate the structure of returned data, such as provider type or ID fields. For an agent to use the output effectively, additional context on return format would be valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters with 100% coverage. The description adds no parameter-level detail, which is acceptable since there are no parameters to document. Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('configured third-party posture provider integrations') and provides concrete examples (CrowdStrike, Intune, Jamf), clearly distinguishing from sibling tools like _create, _delete, and _get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. While siblings exist (e.g., _get for specific integrations), the description does not state when to choose this list operation over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_statusA
Get a summary of the tailnet status including total device count, online/offline counts, and last-seen timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It correctly indicates a read-only operation ('Get a summary') and lists output fields, but does not disclose prerequisites (e.g., auth level), rate limits, or any potential limitations. The behavioral aspects are partially covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys all essential information without any extraneous words. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately outlines the key return fields (counts, timestamps). However, it omits details like response format or additional metadata (e.g., tailnet name). For a zero-param tool with many siblings, this is mostly sufficient but not fully exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the description does not need to add meaning for parameters. Schema coverage is 100% (no params). Per the guidelines, baseline is 4 for 0 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get a summary of the tailnet status' with specific elements (total device count, online/offline counts, last-seen timestamps). It uniquely distinguishes itself from siblings like tailscale_device_list or tailscale_tailnet_settings_get, which focus on resource-level details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives. While the unique purpose (summary vs. specific actions) implies usage for an overview, it lacks explicit context such as 'Use for high-level status, for per-device details use tailscale_device_list'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_tailnet_contacts_getA
Get the contact email addresses configured for the tailnet (account, support, and security contacts).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It clearly describes a read operation that returns contact emails, implying no side effects. Could be improved by explicitly stating it is a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words, front-loaded with the action and resource. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description fully covers what the tool does: it retrieves contact email addresses. No additional context is needed for a simple getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is effectively 100%. The description need not add parameter information; baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the specific resource 'contact email addresses' for the tailnet, enumerating the types (account, support, security), which effectively distinguishes it from sibling tools like tailscale_tailnet_contacts_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied as a simple getter for contact emails, and the existence of a setter sibling suggests when to use this tool, but no explicit when-to-use or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_tailnet_contacts_setA
Update contact email addresses for the tailnet. Requires confirm: true. Provide any combination of account, support, or security contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Account contact (billing, account management) | |
| confirm | Yes | Must be true to confirm updating tailnet contacts | |
| support | No | Support contact | |
| security | No | Security contact for vulnerability reports |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the confirm requirement as a behavioral trait, but does not mention authorization, side effects (e.g., whether updates are additive or replace existing), or any rate limits. The description adds some value but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, 16 words, with the purpose front-loaded. No fluff, every word earns its place. Excellent efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description could explain what the tool returns or confirm behavior. It mentions the confirm flag but not what happens if falsified. It also doesn't clarify if updating one contact clears the others. Somewhat lacking for a mutation tool with nested objects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds little beyond the schema: it reiterates that any combination of contacts can be provided, but does not explain nuances like whether emails must be valid, or any format constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Update') and the resource ('contact email addresses for the tailnet'). It distinguishes itself from the sibling tool 'tailscale_tailnet_contacts_get' which retrieves contacts, so the agent knows this is the mutation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the requirement 'confirm: true' and indicates that any subset of contact types can be provided. However, it does not explicitly contrast with the get tool or state when not to use it, but 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.
tailscale_tailnet_lock_statusA
Get the Tailnet Lock status. Tailnet Lock allows requiring cryptographic signatures on all node key registrations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 adequately describes the tool as a read operation returning status, but lacks depth on potential behaviors like authentication or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences: one stating the action and the other providing context. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and a simple status query, the description fully explains the tool's purpose and the concept of Tailnet Lock.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and the schema coverage is 100%. The description adds no parameter-specific information, but with zero parameters, it meets the baseline for completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves Tailnet Lock status and explains what Tailnet Lock is. It is specific about the action and resource, though it does not explicitly differentiate from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating what it does but provides no guidance on when to use this tool versus alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_tailnet_settings_getA
Get the tailnet settings including device approval, auto-updates, key expiry, and posture identity collection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It implies a read operation but fails to disclose auth requirements, idempotency, or potential side effects. Listing the settings included is helpful but not sufficient for 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that efficiently conveys the action and scope. Front-loaded with verb and resource, then enumerates examples. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose and key attributes reasonably well given it has no parameters and no output schema. Listing the included settings provides context, though more detail on return structure would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. The description adds meaning by listing specific setting categories (device approval, auto-updates, etc.), which helps an agent understand what the tool returns without needing to invoke it blindly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'tailnet settings', and lists specific settings included (device approval, auto-updates, etc.). It distinguishes from sibling tools like tailscale_tailnet_settings_update by its read-only nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., tailscale_tailnet_settings_update for modifications). The description only states what it does, not when to prefer it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_tailnet_settings_updateA
Update tailnet settings. Requires confirm: true. All settings fields are optional — only provided fields will be updated.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to confirm updating tailnet settings | |
| usersApprovalOn | No | Whether users require admin approval to join the tailnet | |
| devicesApprovalOn | No | Whether devices require admin approval before they can join the tailnet | |
| regionalRoutingOn | No | Whether regional routing is enabled | |
| devicesAutoUpdatesOn | No | Whether devices are automatically updated | |
| networkFlowLoggingOn | No | Whether network flow logging is enabled | |
| devicesKeyDurationDays | No | Number of days before device keys expire | |
| postureIdentityCollectionOn | No | Whether posture identity collection is enabled | |
| usersRoleAllowedToJoinExternalTailnets | No | Role allowed to join external tailnets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the schema: 'Requires confirm: true' and 'only provided fields will be updated'. With no annotations, this is helpful, though it could mention side effects or authorization.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences. First states purpose and requirement, second explains parameter behavior. No wasted words, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 9 parameters and no output schema or annotations, the description is succinct but covers the essential behavioral points (confirm requirement, partial update). Could mention immediate effect or admin permission, but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters described). The description adds the key insight that 'All settings fields are optional — only provided fields will be updated', which clarifies partial update semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Update tailnet settings' (specific verb+resource). The name includes 'update', and the resource is distinct from sibling tools like tailscale_tailnet_settings_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the 'confirm: true' requirement, which is a usage prerequisite. However, it does not explicitly state when to use vs alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_user_getA
Get details for a specific user by their user ID. Returns display name, login, role, status, device count, and last seen.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | The user ID to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses that the operation is a read (get details) and specifies the output fields. However, it does not mention potential errors (e.g., user not found) or permissions required, which would be helpful for a complete behavioral picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are concise and front-loaded with the action. No unnecessary words; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description lists key return fields, making the tool's output predictable. It lacks mention of error handling or edge cases, but for a straightforward lookup tool, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage for the single parameter 'userId' with a clear description. The tool description does not add additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets details for a specific user by ID and lists the returned fields (display name, login, role, status, device count, last seen). It distinguishes itself from sibling tools like tailscale_user_list which lists all users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a single user, but does not explicitly say when to use this vs alternatives (e.g., tailscale_user_list). No guidance on when not to use or prerequisites is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_user_listA
List all users in the tailnet. Optionally filter by type (member/shared) or role (owner/admin/member/auditor/it-admin/network-admin/billing-admin).
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Filter by user role | |
| type | No | Filter by user type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral traits. It states a list operation, but does not mention pagination, rate limits, authentication, or response format. Adequate for a simple read operation, but could be more detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with core purpose. No wasted words. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (listing with optional filters, no output schema), the description covers the essentials. Could mention pagination or scope of 'all users', but overall sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description reiterates the enum values and optionality, adding marginal value beyond the schema descriptions. No additional syntax or format details provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action 'List all users in the tailnet', specifies the resource, and mentions optional filters. It distinguishes from sibling tools like tailscale_user_get by implying a list vs. single user retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description clearly explains the tool's purpose and optional filters, but lacks explicit guidance on when to use alternatives (e.g., tailscale_user_get for single users). Context is clear enough for an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_webhook_createA
Create a new webhook endpoint. Returns the webhook including the signing secret (only shown once). Event types: nodeCreated, nodeApproved, nodeNeedsApproval, nodeKeyExpiringInOneDay, nodeKeyExpired, nodeDeleted, policyUpdate, userCreated, userDeleted, userApproved, userSuspended, userRestored, userRoleUpdated, subnetIPForwardingNotEnabled, exitNodeIPForwardingNotEnabled.
| Name | Required | Description | Default |
|---|---|---|---|
| endpointUrl | Yes | The URL to receive webhook events | |
| providerType | No | The webhook provider type (optional, omit for default Tailscale format) | |
| subscriptions | Yes | Event types to subscribe to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It reveals that the signing secret is only returned once, which is important. However, it lacks details about authentication requirements, rate limits, or any restrictions on webhook creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two main sentences and a list of event types. No superfluous content, though the list could be considered lengthy. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers creation and the one-time secret return, but lacks details about return format (no output schema), potential restrictions, or error scenarios. For a creation tool with no output schema, more context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all three parameters. The description repeats the event types list but adds no new parameter-specific information 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action (create a new webhook endpoint) and specifies the return value including the signing secret being shown once. The sibling tools include delete, get, and list, making this distinct as the creation operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating a webhook endpoint, and siblings clearly separate different operations (delete, get, list). However, it does not explicitly state when not to use it or provide alternatives beyond the implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_webhook_deleteA
Delete a webhook endpoint. Requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be true to confirm deletion | |
| webhookId | Yes | The webhook endpoint ID to delete |
TDQS
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 need for confirmation but lacks details about side effects, response format, or error handling for this destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no redundant information. Every word contributes to the tool's purpose and requirement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with two well-described parameters and no output schema, the description is mostly complete. It could include what happens on success or error, but existing coverage is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description reiterates the confirm requirement, adding marginal value. No additional constraints or format details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a webhook endpoint', which is a specific verb and resource. It distinguishes the tool from siblings like tailscale_webhook_create, tailscale_webhook_get, and tailscale_webhook_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Requires confirm: true', which provides a usage precondition but does not explicitly state when to use this tool versus alternatives or when not to use it. Usage context is implied but not detailed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_webhook_getA
Get details for a specific webhook endpoint by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| webhookId | Yes | The webhook endpoint ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does not state that this is a read-only operation (non-destructive) or mention any side effects, authentication needs, or error conditions. For a tool with no annotations, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence (8 words) that starts with the verb and resource. Every word contributes to meaning; no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has low complexity (1 parameter, no output schema), but the description lacks behavioral context. While the purpose is clear, the agent may not know it's read-only or what the return value looks like. Adequate but could be more informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the only parameter 'webhookId' described as 'The webhook endpoint ID'. The tool description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get details for a specific webhook endpoint by ID', which specifies the verb (get details) and resource (webhook endpoint). It distinguishes from sibling tools like tailscale_webhook_list (list all) and tailscale_webhook_create/delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you have a specific webhook ID, but does not explicitly state when to use this tool versus alternatives like list or delete. No guidance on prerequisites 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.
tailscale_webhook_listA
List all webhook endpoints configured for the tailnet.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description implies a read-only list operation but does not explicitly state safety or permissions. With no annotations provided, the description conveys basic behavior but lacks details on edge cases or return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 7 words, directly states purpose with no extraneous information. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list-all tool with no parameters and no output schema, the description is sufficient to convey its function. However, it could clarify what a webhook endpoint is or mention the result format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is 100% (trivial). The description adds no parameter info, which is acceptable since there are none. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'List' and clearly states the resource 'all webhook endpoints configured for the tailnet', differentiating it from sibling tools like tailscale_webhook_get which retrieves a single endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. Does not mention when not to use it or compare to other list tools in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a specific resource and action (e.g., device_get, device_list), and there is no overlap. Even similar tools like acl_validate and acl_test have clearly distinct purposes: validate checks syntax, test runs policy tests.
All tools follow the consistent pattern 'tailscale_{resource}_{action}' using lowercase and underscores. Actions are standard (get, set, create, delete, list) with a few exceptions like 'preview' and 'expire' that fit naturally.
With 49 tools, the count is far above the well-scoped range of 3-15. While the server covers a complex domain, the sheer number makes it harder for agents to navigate, and many tools could be consolidated.
The tool surface covers all major Tailscale resources: ACL, devices, DNS, keys, log streaming, posture integrations, tailnet settings, users, and webhooks. For each resource, typical CRUD and lifecycle operations are present, with no obvious gaps.
Maintenance
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
Tailscale device, route, DNS, key, user, and ACL management over MCP and CLI.
Read devices, users, keys, ACLs and DNS for a tailnet; manage devices, routes and auth keys.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
A TypeScript MCP server for Home Assistant, enabling programmatic management of entities, automati…
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceAn MCP (Model Context Protocol) server for managing Tailscale resources using the official Tailscale Go client library v2. This server provides complete coverage of the Tailscale API with enhanced, self-descriptive tools powered by OpenAPI documentation.2MIT
- AlicenseAqualityCmaintenanceAn MCP server for managing and monitoring Tailscale networks through natural language. It enables users to list devices, check connection status, monitor for client updates, and retrieve detailed tailnet summaries.6157MIT
- AlicenseBqualityDmaintenanceProduction-ready TypeScript MCP server exposing utility, GitHub, and Microsoft Teams tools over stdio.141MIT
- AlicenseNot gradedqualityCmaintenanceWraps the Tailscale CLI to enable MCP-capable AI agents to manage devices, serve configurations, and diagnose connectivity.3MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/itunified-io/mcp-tailscale'
If you have feedback or need assistance with the MCP directory API, please join our Discord server