MCP server for Tailscale API - manage devices, check status, and configure your tailnet
The server defines 6 tools with clear action-verb naming (list_, get_, check_) and reasonable descriptions. However, there are significant gaps: most tools lack parameter descriptions, output schemas are not formally documented, and error handling is minimal. Tool names are well-chosen and unambiguous (e.g., 'tailscale_list_online_devices' vs 'tailscale_list_offline_devices'), and all descriptions are present and between 10-200 characters. The 'deviceId' parameter in tailscale_get_device has a description, but other tools have parameters with no descriptions or constraint documentation. Response handling is basic, results are returned as JSON strings without formal schema documentation. The server accepts the API key via environment variable (good for secrets), but there is no per-parameter validation or user-friendly error messages.
Check which devices have updates available for their Tailscale client.
Get a summary of devices by OS type, online/offline status, and update availability.
Get detailed information about a specific device by its device ID or name.
List all devices in your Tailscale network (tailnet). Shows device name, hostname, IP addresses, OS, connection status, and more.
List devices that are currently offline or disconnected.
List only devices that are currently online and connected to the control plane.
Output schemas are not documented. LLMs cannot plan downstream operations or extract specific fields without knowing the structure returned by each tool.
Parameters in tools with empty property objects (tailscale_list_online_devices, tailscale_list_offline_devices, tailscale_check_updates, tailscale_device_summary) have no descriptions. Even though these tools take no required inputs, the schema should explain what the tool does and what it returns.
The 'fields' parameter in tailscale_list_devices lacks guidance on valid field names. LLMs cannot determine which fields are available without example values, and example values in descriptions are discouraged. Provide an enum of supported field names or a reference to documentation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 40 | - | v1 |
Error handling is minimal. When a device is not found (tailscale_get_device), the response includes a hint but does not guide the LLM on retry strategy. No errors indicate retryability, and no timeouts or rate-limit handling is present.
Results are not paginated. The tools return all devices as a flat JSON string. For tailnets with hundreds of devices, this will blow the context window. Implement limit/offset pagination or cursor-based pagination.