mcp-tailscale
The mcp-tailscale server provides read-only monitoring and inspection of your Tailscale network (tailnet) through the following tools:
List all devices (
tailscale_list_devices): Retrieve all devices in your tailnet with details like name, hostname, IP addresses, OS, and connection status; optionally filter which fields to returnGet a specific device (
tailscale_get_device): Look up detailed information about a single device by its numeric ID or nameList online devices (
tailscale_list_online_devices): View only devices currently connected to the Tailscale control planeList offline devices (
tailscale_list_offline_devices): View only devices that are currently disconnected or offlineCheck for updates (
tailscale_check_updates): Identify which devices have Tailscale client updates availableGet a network summary (
tailscale_device_summary): Get an overview of your tailnet broken down by OS type, online/offline status, and update availability
Allows managing a Tailscale network (tailnet) by listing devices, checking online/offline status, monitoring connection health, viewing available client updates, and retrieving network summary statistics.
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., "@mcp-tailscaleWhich of my devices are currently online?"
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.
mcp-tailscale
MCP server for managing your Tailscale network (tailnet) through Claude Code and other MCP clients.
Features
List Devices - View all devices in your tailnet with detailed information
Device Status - Check online/offline status and connection health
Update Management - See which devices have Tailscale client updates available
Network Summary - Get overview statistics of your tailnet
Device Search - Find specific devices by ID, name, or hostname
Related MCP server: mcp-tailscale
Available Tools
Tool | Description |
| List all devices in your tailnet |
| Get details about a specific device |
| List only online/connected devices |
| List only offline/disconnected devices |
| Check which devices need updates |
| Get summary stats (online/offline, by OS, etc.) |
Installation
npm install
npm run buildConfiguration
Environment Variables
TAILSCALE_API_KEY- Required. Your Tailscale API key from https://login.tailscale.com/admin/settings/keysTAILSCALE_TAILNET- Optional. Defaults to-(your current user's tailnet)
Get an API Key
Click "Generate auth key"
Configure:
Expiry: Choose duration (1-90 days)
Description: "MCP Server"
Copy the key (starts with
tskey-api-)
Claude Desktop Configuration
Add to your claude_desktop_config.json:
{
"mcpServers": {
"tailscale": {
"command": "node",
"args": ["/absolute/path/to/mcp-tailscale/dist/index.js"],
"env": {
"TAILSCALE_API_KEY": "tskey-api-your-key-here"
}
}
}
}Claude Code Configuration
claude mcp add mcp-tailscale --type stdio
claude mcp config mcp-tailscale command "node"
claude mcp config mcp-tailscale args '["'$(pwd)'/dist/index.js"]'
claude mcp config mcp-tailscale env.TAILSCALE_API_KEY "tskey-api-your-key-here"Usage Examples
List All Devices
Can you list all my Tailscale devices?Check Online Devices
Which of my Tailscale devices are currently online?Check for Updates
Do any of my Tailscale devices need updates?Get Device Details
Show me details about my device named "COMPY"Network Summary
Give me a summary of my Tailscale networkDevelopment
# Build
npm run build
# Watch mode
npm run watch
# Test locally
TAILSCALE_API_KEY=your-key node dist/index.jsAPI Permissions
This MCP server uses read-only API calls. It does not modify your Tailscale configuration. The API key only needs:
Device list access
Device status access
Security Notes
API keys are case-sensitive
Keys expire based on the duration you set
Store keys securely (never commit to version control)
Use environment variables or secure configuration management
Changelog
See CHANGELOG.md for version history and release notes.
License
MIT License - see LICENSE for details.
Author
Jim Christian
Website: jimchristian.net
GitHub: @aplaceforallmystuff
Links
Available Tools
6 toolstailscale_check_updatesB
Check which devices have updates available for their Tailscale client.
| 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 the tool checks for updates but does not describe what 'updates' entail (e.g., client software versions), how results are returned, or any operational constraints like permissions or rate limits. This leaves gaps in understanding the tool's behavior beyond its basic function.
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 unnecessary words. It is front-loaded and wastes no space, making it easy to understand quickly. Every part of the sentence contributes to 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 (0 parameters, no output schema), the description is adequate but incomplete. It explains what the tool does but lacks details on output format, update criteria, or integration with sibling tools. For a tool that likely returns a list of devices with update status, more context on behavior would enhance 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?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description does not add parameter details, which is acceptable since there are no parameters. This aligns with the baseline for zero parameters, providing clarity without redundancy.
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: 'Check which devices have updates available for their Tailscale client.' It specifies the action ('check') and resource ('devices'), but does not explicitly differentiate from sibling tools like tailscale_list_devices or tailscale_device_summary, which might list devices without checking updates. This makes it clear but not fully sibling-distinctive.
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 does not mention scenarios like monitoring update status, prerequisites, or comparisons to siblings such as tailscale_list_devices for general device listing. Without such context, users must infer usage, leading to potential misapplication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_device_summaryB
Get a summary of devices by OS type, online/offline status, and update availability.
| 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 the tool retrieves a summary, implying a read-only operation, but doesn't address potential behavioral aspects such as permissions needed, rate limits, data freshness, or what format the summary is returned in (e.g., aggregated counts vs. detailed list). This leaves significant gaps for an agent to understand how to use it effectively.
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 front-loads the core action ('Get a summary') and specifies the key dimensions without any wasted words. It's appropriately sized for a tool with no parameters and a straightforward 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 complexity is low (0 parameters, no output schema, no annotations), the description is minimally complete—it states what the tool does. However, it lacks context on usage versus siblings and behavioral details, which are important for an agent to operate correctly in this sibling-rich environment. Without an output schema, it also doesn't explain what the summary looks like, leaving a gap in understanding the return value.
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 0 parameters with 100% coverage, meaning no parameters are documented in the schema. The description doesn't mention any parameters, which is appropriate since none exist. It adds value by explaining what the summary includes (OS type, status, update availability), but since there are no parameters to describe, the baseline is high.
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 specific verbs ('Get a summary') and resources ('devices'), and specifies the summary dimensions (OS type, online/offline status, update availability). However, it doesn't explicitly differentiate from sibling tools like 'tailscale_list_devices' or 'tailscale_get_device', which likely provide different levels of detail or formats.
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 'tailscale_list_devices', 'tailscale_list_online_devices', and 'tailscale_list_offline_devices', there's no indication of when this summary tool is preferred over those more specific listing tools, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_get_deviceB
Get detailed information about a specific device by its device ID or name.
| Name | Required | Description | Default |
|---|---|---|---|
| deviceId | Yes | Device ID (numeric) or device name (e.g., 'opus.centaur-snapper.ts.net') |
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 doesn't disclose behavioral traits such as whether this is a read-only operation, authentication requirements, rate limits, or what 'detailed information' includes. The description is minimal and lacks essential context for safe 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 front-loads the purpose without unnecessary words. It's appropriately sized for a simple tool, with no wasted 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?
Given no annotations and no output schema, the description is incomplete. It doesn't explain what 'detailed information' entails, potential errors, or behavioral aspects. For a tool with one parameter but unknown output and safety profile, this leaves significant gaps for an AI agent.
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 'deviceId' well-documented in the schema. The description adds no additional meaning beyond the schema, such as examples or constraints, so it meets the baseline of 3 without compensating 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 the verb 'Get' and resource 'detailed information about a specific device', specifying it's by 'device ID or name'. It distinguishes from siblings like 'tailscale_list_devices' by focusing on a single device rather than listing multiple, though it doesn't explicitly name alternatives.
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 detailed info for a specific device is needed, but doesn't explicitly state when to use this vs. siblings like 'tailscale_device_summary' or list tools. No exclusions or prerequisites are mentioned, leaving some ambiguity about context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_list_devicesA
List all devices in your Tailscale network (tailnet). Shows device name, hostname, IP addresses, OS, connection status, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Optional: Specific fields to return (e.g., ['name', 'addresses', 'os']). If not specified, returns all fields. |
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 describes the tool as a list operation, implying it is read-only and non-destructive, and mentions the types of data returned. However, it lacks details on permissions, rate limits, pagination, or error handling, leaving behavioral gaps 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 front-loads the core purpose and includes useful details without redundancy. Every part of the sentence adds value, making it appropriately sized and well-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?
Given the tool's low complexity (1 optional parameter, no output schema, no annotations), the description is reasonably complete for a list operation. It covers what the tool does and the data returned, but could improve by addressing behavioral aspects like permissions or output format, which are not covered by annotations or 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?
Schema description coverage is 100%, so the schema fully documents the 'fields' parameter. The description does not add any parameter-specific information beyond what the schema provides, such as examples of field values or usage tips. Baseline 3 is appropriate when the schema handles 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 action ('List all devices') and resource ('in your Tailscale network'), specifying the scope ('all devices') and key data returned ('device name, hostname, IP addresses, OS, connection status, and more'). It distinguishes from siblings like tailscale_list_offline_devices by emphasizing 'all devices' rather than filtered subsets.
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 comprehensive device information, but does not explicitly state when to use this tool versus alternatives like tailscale_list_offline_devices or tailscale_get_device. It provides clear context for listing all devices but lacks explicit exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tailscale_list_offline_devicesB
List devices that are currently offline or disconnected.
| 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. It states what the tool does but doesn't describe how it behaves - no information about permissions needed, rate limits, pagination, return format, or what 'offline/disconnected' means operationally. For a tool with zero annotation coverage, this leaves significant behavioral 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?
The description is a single, efficient sentence that states exactly what the tool does without any wasted words. It's appropriately sized for a simple listing tool and front-loads the core functionality immediately. Every word earns its place in this concise statement.
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 (no parameters) but lack of annotations and no output schema, the description should do more to explain what 'offline/disconnected' means and what the return format looks like. The description is too minimal for a tool that presumably returns device data - it doesn't help the agent understand what information will be returned or how to interpret the results.
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 with 100% schema description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't discuss parameters since none exist, which is correct. Baseline would be 4 for zero parameters, and the description doesn't contradict or add unnecessary 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 action ('List') and target resource ('devices that are currently offline or disconnected'), making the purpose immediately understandable. It doesn't explicitly distinguish from sibling tools like 'tailscale_list_devices' or 'tailscale_list_online_devices', but the offline/disconnected focus provides some implicit 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 like 'tailscale_list_devices' or 'tailscale_list_online_devices'. It doesn't mention prerequisites, timing considerations, or any explicit when/when-not scenarios, leaving the agent to infer usage context 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.
tailscale_list_online_devicesA
List only devices that are currently online and connected to the control plane.
| 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 full burden. It states the tool lists devices but doesn't disclose behavioral traits such as permissions required, rate limits, response format, or whether it's a read-only operation. For a tool with zero annotation coverage, this leaves significant gaps in understanding its 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 front-loads the purpose and filtering criteria with zero wasted words. It's appropriately sized for a simple list tool with no parameters.
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 low complexity (0 parameters, no output schema, no annotations), the description is complete enough to understand its basic function and filtering. However, it lacks details on output format or behavioral context, which would be helpful despite the simplicity, keeping it at a minimum viable level.
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% (empty schema). The description doesn't need to add parameter details, so it meets the baseline of 4 for tools with no parameters, as there's nothing to compensate for.
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 specific action ('List') and resource ('devices'), with precise filtering criteria ('only devices that are currently online and connected to the control plane'). It effectively distinguishes from sibling tools like 'tailscale_list_devices' (general list) and 'tailscale_list_offline_devices' (opposite filter).
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 defines when to use this tool: when needing devices that are 'currently online and connected to the control plane'. This implicitly suggests alternatives like 'tailscale_list_devices' for all devices or 'tailscale_list_offline_devices' for offline ones, providing clear context for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool has a clearly distinct purpose with no ambiguity: checking updates, getting a device summary, retrieving a specific device, listing all devices, listing offline devices, and listing online devices. The descriptions clearly differentiate each tool's function, making misselection unlikely.
All tool names follow a consistent 'tailscale_verb_noun' pattern with snake_case throughout. The verbs (check, get, list) are used appropriately and predictably, creating a cohesive naming scheme that enhances usability.
With 6 tools, this server is well-scoped for managing Tailscale devices. Each tool earns its place by covering distinct aspects of device monitoring and management, avoiding both bloat and thin coverage for this domain.
The toolset provides strong coverage for device querying and monitoring (list, get, summary, status filters, update checks). A minor gap exists in device management operations like modifying device settings or removing devices, but core workflows are well-supported.
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.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
- mcpOAuthcom.gibsonai
GibsonAI MCP server: manage your databases with natural language
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
- AlicenseAqualityCmaintenanceProduction-ready MCP server for Tailscale management with 48 tools across 9 domains: Devices, DNS/Split DNS, ACL policies, Auth Keys, Users, Webhooks, Posture Integrations, Tailnet Settings, and Diagnostics. Supports stdio and SSE transport with Bearer token authentication. Built with TypeScript strict mode, Zod validation, and zero shell execution. AGPL-3.0 + Commercial dual-licensed.49931AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceWraps the Tailscale CLI to enable MCP-capable AI agents to manage devices, serve configurations, and diagnose connectivity.3MIT
- AlicenseAqualityAmaintenanceMCP server for safe programmatic access to the local Tailscale daemon: tailnet discovery, SSH config generation, port sharing via Serve/Funnel, and latency matrices.619Creative Commons Attribution Non Commercial No Derivatives 4.0 International
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/aplaceforallmystuff/mcp-tailscale'
If you have feedback or need assistance with the MCP directory API, please join our Discord server