@yawlabs/tailscale-mcp 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +36 -33
  2. package/dist/index.js +23250 -120
  3. package/package.json +10 -11
  4. package/dist/api.d.ts +0 -35
  5. package/dist/api.js +0 -134
  6. package/dist/api.js.map +0 -1
  7. package/dist/cli.d.ts +0 -5
  8. package/dist/cli.js +0 -43
  9. package/dist/cli.js.map +0 -1
  10. package/dist/index.d.ts +0 -2
  11. package/dist/index.js.map +0 -1
  12. package/dist/tools/acl.d.ts +0 -86
  13. package/dist/tools/acl.js +0 -105
  14. package/dist/tools/acl.js.map +0 -1
  15. package/dist/tools/audit.d.ts +0 -50
  16. package/dist/tools/audit.js +0 -60
  17. package/dist/tools/audit.js.map +0 -1
  18. package/dist/tools/devices.d.ts +0 -290
  19. package/dist/tools/devices.js +0 -254
  20. package/dist/tools/devices.js.map +0 -1
  21. package/dist/tools/dns.d.ts +0 -130
  22. package/dist/tools/dns.js +0 -139
  23. package/dist/tools/dns.js.map +0 -1
  24. package/dist/tools/invites.d.ts +0 -158
  25. package/dist/tools/invites.js +0 -160
  26. package/dist/tools/invites.js.map +0 -1
  27. package/dist/tools/keys.d.ts +0 -94
  28. package/dist/tools/keys.js +0 -92
  29. package/dist/tools/keys.js.map +0 -1
  30. package/dist/tools/log-streaming.d.ts +0 -90
  31. package/dist/tools/log-streaming.js +0 -89
  32. package/dist/tools/log-streaming.js.map +0 -1
  33. package/dist/tools/network-lock.d.ts +0 -14
  34. package/dist/tools/network-lock.js +0 -20
  35. package/dist/tools/network-lock.js.map +0 -1
  36. package/dist/tools/oauth-clients.d.ts +0 -118
  37. package/dist/tools/oauth-clients.js +0 -102
  38. package/dist/tools/oauth-clients.js.map +0 -1
  39. package/dist/tools/posture.d.ts +0 -126
  40. package/dist/tools/posture.js +0 -103
  41. package/dist/tools/posture.js.map +0 -1
  42. package/dist/tools/services.d.ts +0 -124
  43. package/dist/tools/services.js +0 -106
  44. package/dist/tools/services.js.map +0 -1
  45. package/dist/tools/status.d.ts +0 -26
  46. package/dist/tools/status.js +0 -38
  47. package/dist/tools/status.js.map +0 -1
  48. package/dist/tools/tailnet.d.ts +0 -142
  49. package/dist/tools/tailnet.js +0 -111
  50. package/dist/tools/tailnet.js.map +0 -1
  51. package/dist/tools/users.d.ts +0 -118
  52. package/dist/tools/users.js +0 -108
  53. package/dist/tools/users.js.map +0 -1
  54. package/dist/tools/webhooks.d.ts +0 -126
  55. package/dist/tools/webhooks.js +0 -121
  56. package/dist/tools/webhooks.js.map +0 -1
  57. package/dist/tools/workload-identity.d.ts +0 -118
  58. package/dist/tools/workload-identity.js +0 -105
  59. package/dist/tools/workload-identity.js.map +0 -1
package/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
  [![npm version](https://img.shields.io/npm/v/@yawlabs/tailscale-mcp)](https://www.npmjs.com/package/@yawlabs/tailscale-mcp)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
5
  [![GitHub stars](https://img.shields.io/github/stars/YawLabs/tailscale-mcp)](https://github.com/YawLabs/tailscale-mcp/stargazers)
6
- [![CI](https://github.com/YawLabs/tailscale-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/YawLabs/tailscale-mcp/actions/workflows/ci.yml)
6
+ [![CI](https://github.com/YawLabs/tailscale-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/YawLabs/tailscale-mcp/actions/workflows/ci.yml) [![Release](https://github.com/YawLabs/tailscale-mcp/actions/workflows/release.yml/badge.svg)](https://github.com/YawLabs/tailscale-mcp/actions/workflows/release.yml)
7
7
 
8
- **Manage your Tailscale tailnet from Claude Code, Cursor, and any MCP client.** 81 tools + 4 resources. One env var. Works on first try.
8
+ **Manage your Tailscale tailnet from Claude Code, Cursor, and any MCP client.** 98 tools + 4 resources. One env var. Works on first try.
9
9
 
10
10
  Built and maintained by [YawLabs](https://yaw.sh).
11
11
 
@@ -17,6 +17,7 @@ Other Tailscale MCP servers were vibe-coded in a weekend and abandoned. This one
17
17
  - **Safe ACL updates** — uses ETags to prevent overwriting concurrent changes. No silent data loss.
18
18
  - **Tool annotations** — every tool declares `readOnlyHint`, `destructiveHint`, and `idempotentHint`, so MCP clients skip confirmation dialogs for safe operations.
19
19
  - **MCP Resources** — exposes tailnet status, device list, ACL policy, and DNS config as browsable resources.
20
+ - **Instant startup** — ships as a single self-contained bundle with zero runtime dependencies. `npx` downloads ~150 KB and starts immediately — no 5-minute `node_modules` installs.
20
21
  - **Zero restarts** — the server always starts, even with missing credentials. Auth errors surface as clear tool-call errors, not silent crashes that force you to restart your AI assistant.
21
22
  - **One env var setup** — no config files, no setup wizards, no multi-step flows.
22
23
  - **Every tool verified** — no placeholder endpoints that 404. If it's in the tool list, it works.
@@ -33,8 +34,6 @@ export TAILSCALE_API_KEY="tskey-api-..."
33
34
 
34
35
  **2. Create `.mcp.json` in your project root**
35
36
 
36
- macOS / Linux / WSL:
37
-
38
37
  ```json
39
38
  {
40
39
  "mcpServers": {
@@ -46,20 +45,7 @@ macOS / Linux / WSL:
46
45
  }
47
46
  ```
48
47
 
49
- Windows:
50
-
51
- ```json
52
- {
53
- "mcpServers": {
54
- "tailscale": {
55
- "command": "cmd",
56
- "args": ["/c", "npx", "-y", "@yawlabs/tailscale-mcp"]
57
- }
58
- }
59
- }
60
- ```
61
-
62
- > **Tip:** This file is safe to commit — it contains no secrets. Teammates who set their own `TAILSCALE_API_KEY` will get the MCP server automatically.
48
+ > **Tip:** This file is safe to commit — it contains no secrets. Teammates who set their own `TAILSCALE_API_KEY` will get the MCP server automatically. Works on macOS, Linux, and Windows — no platform-specific config needed.
63
49
 
64
50
  **3. Restart and approve**
65
51
 
@@ -110,7 +96,7 @@ MCP Resources expose read-only data that clients can browse without tool calls.
110
96
  | ACL Policy | `tailscale://tailnet/acl` | Full ACL policy (HuJSON preserved) |
111
97
  | DNS Config | `tailscale://tailnet/dns` | Nameservers, search paths, split DNS, MagicDNS |
112
98
 
113
- ## Tools (81)
99
+ ## Tools (98)
114
100
 
115
101
  <details>
116
102
  <summary><strong>Status</strong> (1 tool)</summary>
@@ -122,7 +108,7 @@ MCP Resources expose read-only data that clients can browse without tool calls.
122
108
  </details>
123
109
 
124
110
  <details>
125
- <summary><strong>Devices</strong> (13 tools)</summary>
111
+ <summary><strong>Devices</strong> (16 tools)</summary>
126
112
 
127
113
  | Tool | Description |
128
114
  |------|-------------|
@@ -139,6 +125,9 @@ MCP Resources expose read-only data that clients can browse without tool calls.
139
125
  | `tailscale_set_device_posture_attribute` | Set a custom posture attribute (with optional expiry) |
140
126
  | `tailscale_delete_device_posture_attribute` | Delete a custom posture attribute |
141
127
  | `tailscale_set_device_tags` | Set ACL tags on a device |
128
+ | `tailscale_set_device_ip` | Set a device's Tailscale IPv4 address |
129
+ | `tailscale_update_device_key` | Update device key settings (e.g. disable key expiry) |
130
+ | `tailscale_batch_update_posture_attributes` | Batch update custom posture attributes across devices |
142
131
 
143
132
  </details>
144
133
 
@@ -155,7 +144,7 @@ MCP Resources expose read-only data that clients can browse without tool calls.
155
144
  </details>
156
145
 
157
146
  <details>
158
- <summary><strong>DNS</strong> (8 tools)</summary>
147
+ <summary><strong>DNS</strong> (11 tools)</summary>
159
148
 
160
149
  | Tool | Description |
161
150
  |------|-------------|
@@ -164,14 +153,17 @@ MCP Resources expose read-only data that clients can browse without tool calls.
164
153
  | `tailscale_get_search_paths` | Get DNS search paths |
165
154
  | `tailscale_set_search_paths` | Set DNS search paths |
166
155
  | `tailscale_get_split_dns` | Get split DNS configuration |
167
- | `tailscale_set_split_dns` | Set split DNS configuration |
156
+ | `tailscale_set_split_dns` | Set split DNS configuration (full replace) |
157
+ | `tailscale_update_split_dns` | Update split DNS configuration (partial merge) |
168
158
  | `tailscale_get_dns_preferences` | Get DNS preferences (MagicDNS) |
169
159
  | `tailscale_set_dns_preferences` | Set DNS preferences (MagicDNS) |
160
+ | `tailscale_get_dns_configuration` | Get unified DNS configuration (all settings in one call) |
161
+ | `tailscale_set_dns_configuration` | Set unified DNS configuration (all settings in one call) |
170
162
 
171
163
  </details>
172
164
 
173
165
  <details>
174
- <summary><strong>Auth Keys</strong> (4 tools)</summary>
166
+ <summary><strong>Auth Keys</strong> (5 tools)</summary>
175
167
 
176
168
  | Tool | Description |
177
169
  |------|-------------|
@@ -179,11 +171,12 @@ MCP Resources expose read-only data that clients can browse without tool calls.
179
171
  | `tailscale_get_key` | Get details for an auth key |
180
172
  | `tailscale_create_key` | Create a new auth key |
181
173
  | `tailscale_delete_key` | Delete an auth key |
174
+ | `tailscale_update_key` | Update an existing auth key |
182
175
 
183
176
  </details>
184
177
 
185
178
  <details>
186
- <summary><strong>Users</strong> (6 tools)</summary>
179
+ <summary><strong>Users</strong> (7 tools)</summary>
187
180
 
188
181
  | Tool | Description |
189
182
  |------|-------------|
@@ -193,18 +186,20 @@ MCP Resources expose read-only data that clients can browse without tool calls.
193
186
  | `tailscale_suspend_user` | Suspend a user, revoking access |
194
187
  | `tailscale_restore_user` | Restore a suspended user |
195
188
  | `tailscale_update_user_role` | Update a user's role (owner, admin, member, etc.) |
189
+ | `tailscale_delete_user` | Delete a user and all their devices |
196
190
 
197
191
  </details>
198
192
 
199
193
  <details>
200
- <summary><strong>Tailnet Settings</strong> (4 tools)</summary>
194
+ <summary><strong>Tailnet Settings</strong> (5 tools)</summary>
201
195
 
202
196
  | Tool | Description |
203
197
  |------|-------------|
204
198
  | `tailscale_get_tailnet_settings` | Get tailnet settings (HTTPS, device approval, key expiry, etc.) |
205
- | `tailscale_update_tailnet_settings` | Update tailnet settings (HTTPS certificates, approval, auto-updates, key expiry, posture, regional routing, network flow logging) |
199
+ | `tailscale_update_tailnet_settings` | Update tailnet settings (HTTPS certificates, approval, auto-updates, key expiry, posture, regional routing, network flow logging, external ACL management) |
206
200
  | `tailscale_get_contacts` | Get tailnet contacts |
207
201
  | `tailscale_set_contacts` | Set tailnet contacts |
202
+ | `tailscale_resend_contact_verification` | Resend verification email for a contact |
208
203
 
209
204
  </details>
210
205
 
@@ -218,7 +213,7 @@ MCP Resources expose read-only data that clients can browse without tool calls.
218
213
  </details>
219
214
 
220
215
  <details>
221
- <summary><strong>Webhooks</strong> (6 tools)</summary>
216
+ <summary><strong>Webhooks</strong> (7 tools)</summary>
222
217
 
223
218
  | Tool | Description |
224
219
  |------|-------------|
@@ -228,6 +223,7 @@ MCP Resources expose read-only data that clients can browse without tool calls.
228
223
  | `tailscale_update_webhook` | Update a webhook's endpoint URL and/or subscriptions |
229
224
  | `tailscale_delete_webhook` | Delete a webhook |
230
225
  | `tailscale_rotate_webhook_secret` | Rotate a webhook's secret |
226
+ | `tailscale_test_webhook` | Send a test event to verify webhook delivery |
231
227
 
232
228
  </details>
233
229
 
@@ -245,7 +241,7 @@ MCP Resources expose read-only data that clients can browse without tool calls.
245
241
  </details>
246
242
 
247
243
  <details>
248
- <summary><strong>Tailscale Services</strong> (5 tools)</summary>
244
+ <summary><strong>Tailscale Services</strong> (7 tools)</summary>
249
245
 
250
246
  | Tool | Description |
251
247
  |------|-------------|
@@ -254,18 +250,23 @@ MCP Resources expose read-only data that clients can browse without tool calls.
254
250
  | `tailscale_update_service` | Update a service's configuration |
255
251
  | `tailscale_delete_service` | Delete a service |
256
252
  | `tailscale_list_service_hosts` | List devices hosting a service |
253
+ | `tailscale_get_service_device_approval` | Get approval status of a device for a service |
254
+ | `tailscale_set_service_device_approval` | Approve or reject a device to host a service |
257
255
 
258
256
  </details>
259
257
 
260
258
  <details>
261
- <summary><strong>Log Streaming</strong> (4 tools)</summary>
259
+ <summary><strong>Log Streaming</strong> (7 tools)</summary>
262
260
 
263
261
  | Tool | Description |
264
262
  |------|-------------|
265
- | `tailscale_list_log_stream_configs` | List log streaming configurations |
263
+ | `tailscale_list_log_stream_configs` | List log streaming configurations (both audit and network) |
266
264
  | `tailscale_get_log_stream_config` | Get log streaming config for a log type |
267
265
  | `tailscale_set_log_stream_config` | Set where logs are sent (Axiom, Datadog, Splunk, etc.) |
268
266
  | `tailscale_delete_log_stream_config` | Delete a log streaming configuration |
267
+ | `tailscale_get_log_stream_status` | Check if log streaming is delivering successfully |
268
+ | `tailscale_create_aws_external_id` | Create/get AWS external ID for S3 log streaming |
269
+ | `tailscale_validate_aws_trust_policy` | Validate AWS IAM role trust policy for S3 log streaming |
269
270
 
270
271
  </details>
271
272
 
@@ -296,19 +297,20 @@ MCP Resources expose read-only data that clients can browse without tool calls.
296
297
  </details>
297
298
 
298
299
  <details>
299
- <summary><strong>Device Invites</strong> (4 tools)</summary>
300
+ <summary><strong>Device Invites</strong> (5 tools)</summary>
300
301
 
301
302
  | Tool | Description |
302
303
  |------|-------------|
303
- | `tailscale_list_device_invites` | List device invites |
304
+ | `tailscale_list_device_invites` | List device invites for a specific device |
304
305
  | `tailscale_create_device_invite` | Create a device invite |
305
306
  | `tailscale_get_device_invite` | Get a device invite |
306
307
  | `tailscale_delete_device_invite` | Delete a device invite |
308
+ | `tailscale_resend_device_invite` | Resend a device invite email |
307
309
 
308
310
  </details>
309
311
 
310
312
  <details>
311
- <summary><strong>User Invites</strong> (4 tools)</summary>
313
+ <summary><strong>User Invites</strong> (5 tools)</summary>
312
314
 
313
315
  | Tool | Description |
314
316
  |------|-------------|
@@ -316,6 +318,7 @@ MCP Resources expose read-only data that clients can browse without tool calls.
316
318
  | `tailscale_create_user_invite` | Create a user invite |
317
319
  | `tailscale_get_user_invite` | Get a user invite |
318
320
  | `tailscale_delete_user_invite` | Delete a user invite |
321
+ | `tailscale_resend_user_invite` | Resend a user invite email |
319
322
 
320
323
  </details>
321
324