Tailscale MCP Server
The Tailscale MCP Server provides a standardized interface for automating Tailscale network management through CLI and REST API integration. With this server, you can:
Device Management: List, authorize, deauthorize, and delete devices; manage routes and tags
Network Operations: Connect/disconnect networks, check status, and ping peers
Security Controls: Manage ACLs, policy files, device tags, and network lock settings
DNS Management: Configure nameservers, search paths, and MagicDNS preferences
Key Management: Create, list, and delete authentication keys with specific capabilities
Additional Features: Configure exit nodes, manage file sharing, set up webhooks, and retrieve version information
Built on Node.js runtime (requires v18+) with ES module support for executing Tailscale CLI commands and interacting with the Tailscale REST API.
Provides tools for managing Tailscale networks, including device management (listing, authorizing/deauthorizing devices), subnet route control, network connectivity operations (connect/disconnect), and peer monitoring via ping functionality.
Leverages TypeScript for type safety throughout the implementation, with Zod validation for schema validation and type checking of inputs and outputs.
Uses Zod for runtime validation of data schemas, ensuring type safety and providing descriptive error messages for invalid parameters.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Tailscale MCP Serverlist all authorized devices in my network"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Tailscale MCP Server
A Model Context Protocol (MCP) server for operating Tailscale from any MCP client. Supports local stdio for desktop clients and an authenticated HTTP transport for private tailnet deployments. Defaults to read-only access, localhost binding, and short-lived OAuth credentials where available.
Table of Contents
Related MCP server: Consul MCP Server
Features
Device management — list, authorize, deauthorize, delete, expire keys, manage routes.
Network operations — connect/disconnect host, ping peers, get CLI status and version.
Administration — tailnet info, file sharing, exit nodes, webhooks, device tags, server version.
ACL and policy — read/validate/update ACL, DNS settings, auth keys, policy file, network lock.
Read-only resources — tailnet summary, device list, per-device detail, current ACL.
Prompts — guided connectivity diagnosis and ACL change review.
Risk-gated tools —
read,write, andadminlevels viaTAILSCALE_ALLOWED_TOOL_RISK.OAuth + API key — OAuth client credentials (preferred) or legacy API key.
Private HTTP mode — bearer auth, Host validation, request size limits, health check endpoint.
Docker support — pre-built images on Docker Hub and GHCR; sidecar deployment with Tailscale Serve.
Requirements
One of:
Node.js 20+ — run via
npxor install globally (no extra runtime needed).Bun 1.3+ — used for development; also works as a production runtime.
Docker — use the pre-built image (no local runtime required).
Plus one auth method:
OAuth client credentials:
TAILSCALE_OAUTH_CLIENT_ID+TAILSCALE_OAUTH_CLIENT_SECRET(preferred).Legacy API key:
TAILSCALE_API_KEY.
The local Tailscale CLI is optional. It is only required for CLI-backed tools: get_network_status, connect_network, disconnect_network, ping_peer, get_version, and manage_exit_nodes (set/clear operations).
Quick Start
Claude Desktop
Edit ~/.claude/claude_desktop_config.json (create if absent).
OAuth credentials (recommended)
{
"mcpServers": {
"tailscale": {
"command": "npx",
"args": ["-y", "@hexsleeves/tailscale-mcp-server"],
"env": {
"TAILSCALE_OAUTH_CLIENT_ID": "your-client-id",
"TAILSCALE_OAUTH_CLIENT_SECRET": "your-client-secret",
"TAILSCALE_TAILNET": "-"
}
}
}
}API key
{
"mcpServers": {
"tailscale": {
"command": "npx",
"args": ["-y", "@hexsleeves/tailscale-mcp-server"],
"env": {
"TAILSCALE_API_KEY": "tskey-api-...",
"TAILSCALE_TAILNET": "-"
}
}
}
}Enable write/admin tools
Add TAILSCALE_ALLOWED_TOOL_RISK to the env block:
"TAILSCALE_ALLOWED_TOOL_RISK": "write"Set to "admin" to unlock destructive operations (delete, deauthorize, connect/disconnect, key mutation).
Docker Hub
{
"mcpServers": {
"tailscale": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TAILSCALE_API_KEY=tskey-api-...",
"-e", "TAILSCALE_TAILNET=your-tailnet",
"hexsleeves/tailscale-mcp-server:latest"
]
}
}
}Claude Code (CLI)
claude mcp add tailscale \
-e TAILSCALE_API_KEY=tskey-api-... \
-e TAILSCALE_TAILNET=- \
-- npx -y @hexsleeves/tailscale-mcp-serverWith write access:
claude mcp add tailscale \
-e TAILSCALE_API_KEY=tskey-api-... \
-e TAILSCALE_TAILNET=- \
-e TAILSCALE_ALLOWED_TOOL_RISK=write \
-- npx -y @hexsleeves/tailscale-mcp-serverCursor
Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"tailscale": {
"command": "npx",
"args": ["-y", "@hexsleeves/tailscale-mcp-server"],
"env": {
"TAILSCALE_API_KEY": "tskey-api-...",
"TAILSCALE_TAILNET": "-"
}
}
}
}Tool Reference
Devices
Tool | Description | Min risk |
| List all devices in the configured tailnet |
|
| Authorize or expire a device key ( |
|
| Enable or disable advertised routes for a device |
|
Network
Tool | Description | Min risk |
| Get current Tailscale network status via local CLI |
|
| Connect this host to Tailscale with optional CLI flags |
|
| Disconnect this host from Tailscale |
|
| Ping a Tailscale peer through the local CLI |
|
| Get local Tailscale CLI version information |
|
Administration
Tool | Description | Min risk |
| Get detailed information about the configured tailnet |
|
| Read ( |
|
| List exit nodes ( |
|
| List webhooks ( |
|
| Read ( |
|
| Return server version identifier |
|
ACL and Policy
Tool | Description | Min risk |
| Read ( |
|
| Read ( |
|
| List auth keys ( |
|
| Read ( |
|
| Network lock status ( |
|
Resources and Prompts
Resources (read-only)
URI | Description |
| High-level tailnet summary |
| All devices in the tailnet |
| Detail for a single device |
| Current ACL policy |
Prompts
Name | Description |
| Guided diagnostic for connectivity issues |
| Structured review workflow for ACL policy changes |
Configuration
Variable | Default | Description |
| — | OAuth client ID (preferred auth method) |
| — | OAuth client secret (required with |
| — | Legacy API key fallback |
|
| Tailnet name or |
|
| Tailscale API base URL (https required except for localhost) |
|
| Maximum allowed tool risk: |
|
| Path to the local Tailscale CLI binary |
|
| Transport mode: |
|
| Host to bind in HTTP mode |
|
| Port to bind in HTTP mode |
| — | Required for HTTP mode (minimum 32 characters) |
| — | Comma-separated additional allowed HTTP Host header values |
|
| Log verbosity: |
| — | Optional file path for log output |
Risk levels
read— list devices, inspect status, read resources, run diagnostics.write— update ACLs, DNS, routes, policy files, webhooks, tags, and other mutating settings.admin— destructive or host-affecting operations: delete, deauthorize, connect, disconnect, auth key mutation, file sharing changes, exit node control.
HTTP Transport
HTTP mode is intended for private tailnet access. It requires MCP_HTTP_BEARER_TOKEN and binds to 127.0.0.1 by default.
export MCP_TRANSPORT=http
export MCP_HTTP_BEARER_TOKEN="$(openssl rand -base64 32)"
export TAILSCALE_OAUTH_CLIENT_ID="your-client-id"
export TAILSCALE_OAUTH_CLIENT_SECRET="your-client-secret"
export TAILSCALE_TAILNET="-"
npx -y @hexsleeves/tailscale-mcp-server --http --host 127.0.0.1 --port 3000Expose privately with Tailscale Serve (recommended for tailnet deployments):
tailscale serve --bg 443 localhost:3000Do not use Tailscale Funnel for normal MCP operation. Funnel makes the endpoint publicly reachable on the internet.
A GET /health endpoint returns 200 OK when the server is running.
For full Docker sidecar deployment instructions, see docs/docker.md.
Docker
Run with Docker Hub image
docker run --rm \
-e TAILSCALE_API_KEY="tskey-api-..." \
-e TAILSCALE_TAILNET="-" \
-p 127.0.0.1:3000:3000 \
hexsleeves/tailscale-mcp-server:latestRun with GHCR image
docker run --rm \
-e TAILSCALE_API_KEY="tskey-api-..." \
-e TAILSCALE_TAILNET="-" \
-p 127.0.0.1:3000:3000 \
ghcr.io/hexsleeves/tailscale-mcp-server:latestBuild locally
docker build -t tailscale-mcp-server .For sidecar deployment with Tailscale Serve, see docs/docker.md.
Example Prompts
Once the server is connected to your MCP client, try these:
"List my Tailscale devices and show which ones are offline."
"What is the current Tailscale network status on this machine?"
"Diagnose connectivity to my NAS at 100.64.0.5."
"Show me the current ACL policy for my tailnet."
"Review this ACL change before I apply it." (attach the new policy)
"What DNS nameservers is my tailnet using?"
"List all active webhooks in my tailnet."
Development
# Install dependencies (Bun required for development)
bun install
# Type check
bun run typecheck
# Run tests
bun test
# Lint and format
bun run check
# Build
bun run build
# Full verification (typecheck + lint + test + build)
bun run qa:full
# Security audit
bun auditSee CONTRIBUTING.md for the full development workflow, commit conventions, and release process.
Contributing
Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.
CONTRIBUTING.md — development setup, commit conventions, PR process.
SECURITY.md — responsible disclosure policy.
LICENSE — MIT.
Available Tools
18 toolsconnect_networkC
Connect to the Tailscale network
| Name | Required | Description | Default |
|---|---|---|---|
| acceptDNS | Yes | Accept DNS configuration from the network | |
| acceptRoutes | Yes | Accept subnet routes from other devices | |
| advertiseRoutes | No | CIDR routes to advertise to other devices | |
| authKey | No | Authentication key for unattended setup | |
| hostname | No | Set a custom hostname for this device | |
| loginServer | No | Custom coordination server URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Connect to the Tailscale network' implies a state-changing operation but doesn't specify whether this requires admin privileges, what happens if already connected, whether it's idempotent, what side effects occur, or what the expected outcome looks like. For a network connection tool with zero annotation coverage, 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, efficient sentence with zero wasted words. It's appropriately sized for a tool with this level of complexity and gets straight to the point without unnecessary elaboration.
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 network connection tool with 6 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what 'connect' means operationally, what happens after connection, what permissions are required, or what the tool returns. The agent must rely entirely on the input schema for parameter details and guess at behavioral aspects.
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 all 6 parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the 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 action ('Connect') and the target resource ('Tailscale network'), providing a specific verb+resource combination. However, it doesn't differentiate this tool from its sibling 'disconnect_network' beyond the obvious opposite action, nor does it specify what 'connect' entails operationally beyond the high-level concept.
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. There's no mention of prerequisites (e.g., needing authentication), when this operation is appropriate versus using other network management tools, or what state the network should be in before invocation. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
device_actionC
Perform actions on a specific device
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | The action to perform on the device | |
| deviceId | Yes | The ID of the device to act on |
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 states 'Perform actions' which implies mutation operations, but doesn't disclose any behavioral traits like whether actions are destructive, require specific permissions, have side effects, or what happens after execution. For a tool with potentially destructive actions (like 'delete'), this is a significant gap in 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 extremely concise with just 5 words: 'Perform actions on a specific device'. It's front-loaded with the core purpose and has zero wasted words. Every word earns its place in conveying the essential 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 this is a mutation tool with potentially destructive actions (delete, deauthorize) and no annotations or output schema, the description is incomplete. It doesn't explain what the actions do, their consequences, or what to expect as results. For a tool that could permanently affect devices, more context is needed about behavior and outcomes.
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 (deviceId and action with enum values). The description adds no additional meaning beyond what the schema provides - it doesn't explain what each action does, consequences of choices, or parameter relationships. Baseline 3 is appropriate when schema does the heavy lifting.
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 states the purpose as 'Perform actions on a specific device', which is clear but vague. It specifies the verb 'perform actions' and resource 'device', but doesn't distinguish what types of actions or differentiate from sibling tools like 'list_devices' or 'manage_device_tags'. The purpose is understandable but lacks specificity.
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. With many sibling tools available (like manage_device_tags, manage_keys, etc.), there's no indication of when device_action is appropriate versus other device-related tools. No context, exclusions, or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_networkB
Disconnect from the Tailscale network
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Disconnect from' implies a state-changing operation, it doesn't specify whether this requires authentication, affects other devices, is reversible, or has any side effects. This is inadequate for a tool that likely changes network connectivity.
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, clear sentence with zero wasted words. It's appropriately sized for a simple tool with no parameters and gets straight to the point without unnecessary elaboration.
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 this is a network disconnection tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after disconnection, whether there are confirmation steps, what the expected outcome is, or how this differs from other network management operations among the many sibling tools.
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 0 parameters with 100% schema description coverage, so the schema already fully documents the lack of parameters. The description appropriately doesn't discuss parameters, maintaining focus on the tool's purpose. Baseline for 0 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 clearly states the action ('Disconnect from') and resource ('the Tailscale network'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'connect_network' beyond the obvious opposite action, which prevents a perfect score.
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. It doesn't mention prerequisites, consequences, or when it might be appropriate versus other network management tools like 'manage_network_lock' or 'device_action'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_statusC
Get current network status from Tailscale CLI
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | Output format (json or summary) | json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. While 'Get' implies a read operation, the description doesn't disclose important behavioral traits like whether this requires authentication, has rate limits, what the output looks like, or if it's a real-time status check versus cached data. The mention of 'Tailscale CLI' hints at the underlying implementation but doesn't clarify operational 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?
The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It's appropriately sized for a simple tool and front-loads the essential information immediately.
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 network status tool with no annotations and no output schema, the description is insufficient. It doesn't explain what 'network status' includes (connectivity, peers, routes, etc.), the format or structure of returned data, or any prerequisites or limitations. Given the complexity of network diagnostics and the lack of structured metadata, more context 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?
Schema description coverage is 100%, so the schema already fully documents the single 'format' parameter with its enum values and description. The description adds no additional parameter information beyond what's in the schema, which meets the baseline expectation when schema coverage is complete.
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 ('current network status from Tailscale CLI'), making the purpose immediately understandable. It doesn't explicitly distinguish from siblings like 'get_tailnet_info' or 'list_devices', but the specificity of 'network status' provides reasonable differentiation.
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. With siblings like 'get_tailnet_info', 'list_devices', and 'ping_peer' available, there's no indication of what distinguishes network status from other network-related queries or when this specific tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tailnet_infoC
Get detailed Tailscale network information
| Name | Required | Description | Default |
|---|---|---|---|
| includeDetails | Yes | Include advanced configuration details |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves information (implying read-only), but doesn't address critical aspects like authentication requirements, rate limits, error conditions, or what 'detailed information' entails beyond the parameter. This leaves significant gaps for safe and effective use.
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, efficient sentence that directly states the tool's purpose without any redundant or verbose language. It's appropriately front-loaded and wastes no words, making it easy for an agent to parse quickly.
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 complexity of network information tools and the lack of annotations or output schema, the description is insufficient. It doesn't explain what 'detailed information' includes, how it differs from sibling tools, or what the return format looks like, leaving the agent with inadequate context for reliable tool selection.
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%, with the parameter 'includeDetails' clearly documented in the schema. The description adds no additional parameter information beyond implying that the tool provides 'detailed' information, which loosely relates to the parameter but doesn't enhance understanding of its semantics or 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 verb ('Get') and resource ('detailed Tailscale network information'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'get_network_status' or 'list_devices', which prevents a perfect score, but the specificity of 'detailed... information' provides some implicit distinction.
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 like 'get_network_status' or 'list_devices'. It lacks any mention of prerequisites, context, or exclusions, leaving the agent to infer usage based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_versionB
Get Tailscale version information
| 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 carries the full burden of behavioral disclosure. It states what the tool does but doesn't reveal any behavioral traits such as whether it's read-only, requires authentication, has rate limits, or what the output format might be. For a tool with zero annotation coverage, this is inadequate.
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, efficient sentence with zero waste. It's front-loaded with the core purpose and uses clear language. Every word earns its place, making it easy to parse and understand quickly.
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 (0 parameters, no output schema, no annotations), the description is minimally adequate. It states the purpose but lacks context about when to use it, behavioral traits, or output details. For a basic read operation, it's passable but could be more helpful with additional guidance.
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 0 parameters, and schema description coverage is 100%, so there's no need for parameter documentation in the description. The description correctly doesn't mention any parameters, which is appropriate. A baseline of 4 is given since no parameters exist, and the description doesn't introduce confusion.
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 with a specific verb ('Get') and resource ('Tailscale version information'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'get_network_status' or 'get_tailnet_info', which might also retrieve system information. The description is accurate but lacks sibling distinction.
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. It doesn't mention context, prerequisites, or exclusions, leaving the agent to infer usage based on the tool name alone. This is a significant gap for a server with multiple 'get' tools that could overlap in functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesC
List all devices in the Tailscale network
| Name | Required | Description | Default |
|---|---|---|---|
| includeRoutes | Yes | Include route information for each device |
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 of behavioral disclosure. It states the action 'List all devices' but doesn't mention any behavioral traits such as pagination, rate limits, authentication requirements, or what the output format looks like (e.g., JSON array, list of objects). This is a significant gap for a tool with no annotation coverage.
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, efficient sentence that directly states the tool's purpose without any fluff or redundancy. It's appropriately sized and front-loaded, making it easy for an agent to parse quickly.
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 complexity of listing network devices and the lack of annotations and output schema, the description is incomplete. It doesn't address key contextual aspects like output format, error handling, or how the tool interacts with other device-related operations (e.g., filtering or sorting), leaving gaps for the agent to navigate.
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, with the parameter 'includeRoutes' clearly documented as a boolean to include route information. The description doesn't add any meaning beyond the schema, as it doesn't mention parameters at all. With high schema coverage, 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 verb 'List' and the resource 'all devices in the Tailscale network', providing a specific purpose. However, it doesn't distinguish this tool from potential siblings like 'device_action' or 'manage_device_tags', which might also involve devices but serve different functions.
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. With siblings like 'get_network_status' or 'manage_device_tags', there's no indication of when listing devices is appropriate versus checking status or managing tags, leaving the agent to infer usage from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_aclC
Manage Tailscale Access Control Lists (ACLs)
| Name | Required | Description | Default |
|---|---|---|---|
| aclConfig | No | ACL configuration (required for update/validate operations) | |
| operation | Yes | ACL operation to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but offers minimal insight. 'Manage' implies mutation capabilities, but it doesn't specify whether this requires admin permissions, what side effects occur (e.g., network disruption), or how operations like 'validate' behave. For a tool with complex ACL operations, this is inadequate 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 a single, efficient sentence with zero wasted words. It's appropriately sized for a tool name that already includes 'manage_acl', though this conciseness comes at the cost of detail. Every word earns its place by identifying the resource being managed.
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 2 parameters (one being a complex nested object), no annotations, and no output schema, the description is insufficiently complete. It doesn't address what the tool returns, error conditions, or the impact of different operations. The agent lacks context about how this tool fits into the broader Tailscale management ecosystem.
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 thoroughly. The description adds no additional meaning about parameters beyond what's in the schema. It doesn't explain the relationship between 'operation' and 'aclConfig' or provide usage examples. Baseline 3 is appropriate when schema does the heavy lifting.
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 states the tool manages Tailscale Access Control Lists (ACLs), which provides a basic purpose but lacks specificity about what 'manage' entails. It doesn't distinguish this from sibling tools like manage_policy_file or manage_network_lock that also handle network policies. The verb 'manage' is vague without clarifying which operations are supported.
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 about when to use this tool versus alternatives. The description doesn't mention prerequisites, appropriate contexts, or exclusions. Given sibling tools like manage_policy_file that might overlap with ACL functionality, the absence of differentiation leaves the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_device_tagsC
Manage device tags for organization and ACL targeting
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | Device ID for tagging operations | |
| operation | Yes | Device tagging operation to perform | |
| tags | No | Array of tags to manage (e.g., ["tag:server", "tag:production"]) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'manage' which implies mutation capabilities, but doesn't specify permissions required, whether operations are reversible, rate limits, or what happens with conflicting tags. The 'for organization and ACL targeting' hint provides some context about use cases, but lacks operational details needed for a mutation tool with zero annotation coverage.
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, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized for a tool with three parameters and clear schema documentation. Every word earns its place, and the structure is front-loaded with the essential 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 mutation tool with three parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what the tool returns, error conditions, or important behavioral aspects like whether 'set_tags' replaces all existing tags or merges with them. The 'for organization and ACL targeting' provides some context, but doesn't compensate for the missing operational details needed for proper tool invocation.
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 all three parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema. It mentions 'device tags' generally but doesn't explain the relationship between the operation parameter and tags parameter, or provide examples beyond what the schema already shows. Baseline 3 is appropriate when schema does the heavy lifting.
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 'manage' and resource 'device tags', with the purpose 'for organization and ACL targeting' providing context. It distinguishes from siblings like 'manage_acl' or 'list_devices' by focusing specifically on device tags rather than broader ACL or device operations. However, it doesn't explicitly differentiate from all siblings (e.g., 'device_action' could potentially overlap).
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. It doesn't mention when to choose 'manage_device_tags' over 'manage_acl' for ACL-related tasks or 'device_action' for other device operations. There are no prerequisites, exclusions, or contextual usage instructions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_dnsC
Manage Tailscale DNS configuration
| Name | Required | Description | Default |
|---|---|---|---|
| magicDNS | No | Enable/disable MagicDNS (for set_preferences operation) | |
| nameservers | No | DNS nameservers (for set_nameservers operation) | |
| operation | Yes | DNS operation to perform | |
| searchPaths | No | DNS search paths (for set_searchpaths operation) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Manage' implies both read and write operations, but it doesn't specify permissions needed, side effects, rate limits, or response format. For a tool with multiple mutation operations, this is a significant gap in 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 a single, efficient sentence with zero wasted words. It's appropriately sized for a tool name that suggests its domain, though it could be more informative given the tool's complexity.
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 4 parameters, multiple mutation operations, no annotations, and no output schema, the description is inadequate. It doesn't explain the tool's scope, behavioral traits, or return values, leaving significant gaps for the agent to navigate this complex configuration 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?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional parameter semantics beyond what's in the schema descriptions (e.g., which parameters correspond to which operations). This meets the baseline for 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 'Manage Tailscale DNS configuration' states the general purpose (managing DNS configuration) but is vague about what specific operations are available. It doesn't distinguish this tool from potential DNS-related siblings (though none are listed), and the verb 'manage' is broad rather than specific.
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. It doesn't mention prerequisites, context, or exclusions, leaving the agent to infer usage from the operation parameter alone without any directional advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_exit_nodesC
Manage Tailscale exit nodes and routing
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | No | Device ID for exit node operations | |
| operation | Yes | Exit node operation to perform | |
| routes | Yes | Routes to advertise (e.g., ["0.0.0.0/0", "::/0"] for full exit node) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Manage' implies both read and write operations, but it doesn't specify permissions required, side effects, or what happens during operations like 'set' or 'clear'. It mentions 'exit nodes and routing' but gives no insight into rate limits, authentication needs, or system impact. The description is too generic to adequately inform behavioral expectations.
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—just five words—with zero wasted language. It's front-loaded with the core concept ('Manage Tailscale exit nodes and routing') and contains no unnecessary elaboration. This efficiency makes it easy to parse, though it may be too brief for complete understanding.
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 complexity (multiple operations including destructive actions like 'set' and 'clear'), lack of annotations, and no output schema, the description is insufficiently complete. It doesn't explain what the tool returns, error conditions, or operational consequences. For a tool with potentially significant network impact, more context about behavior and outcomes is needed beyond the bare statement 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 description coverage is 100%, so the schema fully documents all three parameters (deviceId, operation, routes). The description adds no additional parameter semantics beyond what's in the schema—it doesn't explain parameter relationships, provide examples beyond the schema's route example, or clarify when deviceId is needed. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't detract 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 'Manage Tailscale exit nodes and routing' states the general domain (exit nodes and routing) but lacks specificity about what 'manage' entails. It doesn't distinguish this tool from sibling tools like 'manage_routes' or 'manage_acl', leaving the exact verb and resource scope vague. However, it does identify the correct technology context (Tailscale).
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. With sibling tools like 'manage_routes', 'device_action', and 'list_devices', there's no indication of how this tool differs or when it should be preferred. The description offers only a generic statement without context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_file_sharingC
Manage Tailscale file sharing settings
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | No | Device ID (for device-specific operations) | |
| operation | Yes | File sharing operation to perform |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Manage' implies mutation capabilities, but it doesn't specify permissions required, side effects, or response format. The description fails to explain that operations include getting status, enabling, and disabling (which the schema reveals), leaving the agent unaware of the tool's full behavioral range.
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, efficient sentence with zero wasted words. It's appropriately sized for a tool with only two parameters and clear scope. No unnecessary details or repetition are present, making it easy to parse quickly.
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 annotations and no output schema, the description is incomplete for a mutation-capable tool. It doesn't cover behavioral aspects like what 'enable' or 'disable' do, error conditions, or return values. For a tool that can change system state, more context is needed to use it safely and effectively.
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 fully documents both parameters (deviceId and operation with enum values). The description adds no additional meaning about parameters beyond what's in the schema, such as explaining when deviceId is required or the implications of each operation. This meets the baseline for 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 'Manage Tailscale file sharing settings' states the general purpose (managing file sharing settings) but lacks specificity about what 'manage' entails. It doesn't distinguish this tool from sibling tools like 'manage_acl' or 'manage_policy_file' that also manage different Tailscale settings. The verb 'manage' is vague compared to more precise alternatives like 'configure' or 'control'.
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. There's no mention of prerequisites, context for file sharing operations, or comparison to sibling tools. The agent must infer usage from the tool name and parameters alone, which is insufficient for clear decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_keysC
Manage Tailscale authentication keys
| Name | Required | Description | Default |
|---|---|---|---|
| keyConfig | No | Key configuration (for create operation) | |
| keyId | No | Authentication key ID (for delete operation) | |
| operation | Yes | Key management operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Manage' implies mutation capabilities, but the description doesn't specify what operations are available (list, create, delete), what permissions are required, whether operations are destructive, or what the response format looks like. For a tool with mutation capabilities and no annotation coverage, this is a significant gap in 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 extremely concise at just 4 words with no wasted language. It's front-loaded with the core purpose. While it's arguably too brief for a tool with mutation capabilities, it earns full marks for conciseness as every word contributes to the core message.
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 mutation capabilities (create, delete operations), no annotations, no output schema, and complex nested parameters, the description is inadequate. It doesn't explain the available operations, their effects, return values, or error conditions. The agent would need to rely entirely on the input schema to understand how to use this tool, which is insufficient for safe 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?
Schema description coverage is 100%, so the schema already documents all 3 parameters (operation, keyConfig, keyId) with their purposes. The description adds no additional parameter semantics beyond what's in the schema. According to the rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the 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 'Manage Tailscale authentication keys' states the resource (authentication keys) but uses the vague verb 'manage' without specifying what operations are available. It doesn't differentiate from sibling tools like manage_acl or manage_device_tags, which also 'manage' different resources. The purpose is understandable but lacks specificity about the CRUD operations involved.
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. It doesn't mention prerequisites, dependencies, or scenarios where this tool is appropriate. Given the sibling tools include various management functions, there's no indication of how this tool fits into the broader context of Tailscale administration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_network_lockC
Manage Tailscale network lock (key authority) for enhanced security
| Name | Required | Description | Default |
|---|---|---|---|
| keyId | No | Key ID for remove operations | |
| operation | Yes | Network lock operation to perform | |
| publicKey | No | Public key for add/remove operations |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'manage' implies mutation capabilities, the description doesn't specify which operations require special permissions, whether changes are reversible, what the tool returns, or any rate limits. The mention of 'enhanced security' hints at authorization needs but lacks concrete details about behavioral traits.
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, efficient sentence that gets straight to the point. It's appropriately sized for a tool with 3 parameters and no output schema. There's no wasted language, though it could potentially benefit from slightly more detail given the complete lack of annotations.
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 3 parameters, 100% schema coverage, but no annotations and no output schema, the description is minimally adequate. It identifies the domain (network lock/key authority) and purpose (enhanced security), but doesn't provide enough context about what the tool returns or the implications of different operations. Given the security-sensitive nature implied by 'key authority', more completeness would be beneficial.
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?
With 100% schema description coverage, the baseline is 3. The description adds value by clarifying that this manages 'network lock (key authority)', which provides context about what the parameters control beyond what the schema descriptions say. This helps the agent understand that keyId and publicKey parameters relate to key authority management, not just generic operations.
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 states the tool manages Tailscale network lock for enhanced security, which provides a general purpose (verb+resource). However, it's somewhat vague about what 'manage' entails and doesn't clearly differentiate from sibling tools like manage_keys or manage_acl that also handle security-related operations. The description lacks specificity about the key authority aspect mentioned in parentheses.
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. With multiple 'manage_' sibling tools (manage_acl, manage_keys, manage_device_tags, etc.), there's no indication of when network lock operations are appropriate versus other security or management tools. No context about prerequisites, timing, or exclusions is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_policy_fileC
Manage policy files and test ACL access rules
| Name | Required | Description | Default |
|---|---|---|---|
| operation | Yes | Policy file operation to perform | |
| policy | No | Policy content (HuJSON format) for update operation | |
| testRequest | No | Access test parameters for test_access operation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions 'manage' and 'test' operations but doesn't specify permissions required, whether updates are destructive, rate limits, or what the tool returns. For a tool with multiple operations including updates, this is a significant gap in 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 concise with two clear clauses, though it could be more front-loaded by specifying the three operations upfront. Every word earns its place, but the structure could better highlight the tool's multi-operation nature.
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 complexity (multiple operations including updates), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what happens during operations, return values, or error conditions, leaving significant gaps for the agent to understand tool 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?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds minimal value by hinting at policy content format (HuJSON) and access testing, but doesn't provide additional semantics beyond what's in the schema. Baseline 3 is appropriate when schema does the heavy lifting.
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 as managing policy files and testing ACL access rules, which is specific (verb+resource). However, it doesn't distinguish this from the sibling 'manage_acl' tool, which appears to handle similar ACL-related functionality, preventing a perfect score.
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 like 'manage_acl' or other sibling tools. It lacks context about prerequisites, exclusions, or specific scenarios where this tool is appropriate, leaving the agent with minimal usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_routesC
Enable or disable routes for a device
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Whether to enable or disable the routes | |
| deviceId | Yes | The ID of the device | |
| routes | Yes | Array of CIDR routes to manage |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'enable or disable' implies mutation, it doesn't specify whether this requires admin permissions, if changes are reversible, potential side effects on network connectivity, or error conditions. For a tool that modifies device routing, this leaves critical operational context undocumented.
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, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized for a tool with clear parameters and gets straight to the point with zero wasted verbiage.
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 mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after enabling/disabling routes (e.g., confirmation message, error responses, network impact) or provide context about typical use cases. Given the complexity of network routing changes, more operational guidance would be expected.
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%, with all parameters well-documented in the schema itself. The description adds no additional parameter context beyond what's already in the schema (device ID, routes as CIDR array, action as enable/disable). This meets the baseline for high schema coverage but doesn't provide extra value like format examples or 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 ('enable or disable') and resource ('routes for a device'), making the purpose immediately understandable. However, it doesn't explicitly differentiate this tool from siblings like 'manage_acl' or 'manage_device_tags', which also manage device configurations, leaving some ambiguity about scope boundaries.
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. With siblings like 'manage_acl' (for access control) and 'device_action' (generic device operations), there's no indication of whether this is for network routing specifically or how it relates to other management tools. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_webhooksC
Manage Tailscale webhooks for event notifications
| Name | Required | Description | Default |
|---|---|---|---|
| config | No | Webhook configuration for create operation | |
| operation | Yes | Webhook operation to perform | |
| webhookId | No | Webhook ID for delete/test operations |
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 of behavioral disclosure. 'Manage' implies CRUD operations, but the description doesn't specify what 'manage' entails, what permissions are required, whether operations are destructive, or what the response format looks like. For a multi-operation tool with no annotation coverage, 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, efficient sentence with zero wasted words. It's appropriately sized and front-loaded with the essential information about what the tool does.
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 multi-operation tool (list/create/delete/test) with no annotations and no output schema, the description is incomplete. It doesn't explain the different operations, their effects, or what results to expect. The context signals show this is a complex tool with nested objects and multiple operations that needs more comprehensive documentation.
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 all three parameters thoroughly. The description adds no parameter-specific information beyond what's in the schema. The baseline of 3 is appropriate when the schema does the heavy lifting for parameter documentation.
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 ('manage') and resource ('Tailscale webhooks for event notifications'), providing a specific purpose. However, it doesn't differentiate this tool from its many siblings on the server, which all appear to be Tailscale management tools with similar naming patterns.
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. With 17 sibling tools on the server including other 'manage_' tools, there's no indication of when webhook management is appropriate versus other Tailscale management operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_peerC
Ping a peer device
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | Number of ping packets to send | |
| target | Yes | Hostname or IP address of the target device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention what 'ping' entails (e.g., ICMP echo requests, latency measurement, success/failure criteria), potential side effects, or network requirements, which is insufficient for a tool with no annotation coverage.
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, efficient sentence with zero waste. It's appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration.
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 complexity (network operation with no annotations and no output schema), the description is incomplete. It lacks details on what the ping operation returns (e.g., latency stats, success indicators) or how it behaves in different network conditions, making it inadequate for the context.
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, clearly documenting both parameters (target and count). The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline score of 3 for 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 'Ping a peer device' clearly states the action (ping) and target (peer device), which is specific and unambiguous. However, it doesn't differentiate from sibling tools like 'connect_network' or 'get_network_status', which might also involve network connectivity testing, so it doesn't reach the highest score.
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. It doesn't mention prerequisites, context (e.g., network diagnostics), or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose targeting specific Tailscale functions like network connectivity, device management, ACLs, DNS, and security features. There is no overlap or ambiguity between tools, as each handles a unique aspect of the Tailscale ecosystem.
All tool names follow a consistent verb_noun pattern (e.g., connect_network, list_devices, manage_acl), with verbs like 'connect', 'get', 'list', 'manage', and 'ping' applied uniformly. This predictable naming makes it easy for agents to understand and select tools.
With 18 tools, the count is slightly high but reasonable for a comprehensive Tailscale management server covering network status, devices, ACLs, DNS, security, and more. It feels well-scoped without being excessive, though it borders on the heavier side for typical MCP servers.
The tool set provides complete coverage for Tailscale management, including core operations like network connectivity, device listing and actions, ACL and policy management, DNS configuration, security features, and utilities like pinging. There are no obvious gaps, supporting full lifecycle management of the domain.
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.
Model Context Protocol server for todo.vu task management and time tracking.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceProvides tools for managing Netskope infrastructure, policies, and steering configurations via the Model Context Protocol.332ISC
- AlicenseBqualityFmaintenanceProvides access to Consul functionality (services, health checks, KV store, sessions, events, queries, etc.) through a standardized Model Context Protocol interface.2418MIT
- -licenseCqualityNot gradedmaintenanceFollows the Model Context Protocol to enable code agents to use Netlify API and CLI, allowing them to create, deploy, and manage Netlify resources using natural language prompts.617,669
- FlicenseNot gradedqualityDmaintenanceEnables interaction with HashiCorp Vault for secret management operations including reading, writing, listing, and deleting secrets through the Model Context Protocol.1
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/HexSleeves/tailscale-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server