@yawlabs/tailscale-mcp 0.12.3 → 0.12.5

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.
package/README.md CHANGED
@@ -9,9 +9,9 @@
9
9
 
10
10
  Built and maintained by [Yaw Labs](https://yaw.sh).
11
11
 
12
- [![Add to mcp.hosting](https://mcp.hosting/install-button.svg)](https://mcp.hosting/install?name=Tailscale&command=npx&args=-y%2C%40yawlabs%2Ftailscale-mcp&description=Manage%20your%20Tailscale%20tailnet%20-%20devices%2C%20ACLs%2C%20DNS%2C%20keys&source=https%3A%2F%2Fgithub.com%2FYawLabs%2Ftailscale-mcp)
12
+ [![Add to Yaw MCP](https://yaw.sh/yaw-mcp-button.svg)](yaw://install?name=Tailscale&command=npx&args=-y%2C%40yawlabs%2Ftailscale-mcp&description=Manage%20your%20Tailscale%20tailnet%20-%20devices%2C%20ACLs%2C%20DNS%2C%20keys&source=https%3A%2F%2Fgithub.com%2FYawLabs%2Ftailscale-mcp)
13
13
 
14
- One click adds this to your [mcp.hosting](https://mcp.hosting) account so it syncs to every MCP client you use. Or install manually below.
14
+ One click adds this to your local Yaw MCP config so it's available in every Yaw Terminal session. Or install manually below.
15
15
 
16
16
  ## What's the point if the API already exists?
17
17
 
@@ -72,7 +72,7 @@ macOS / Linux / WSL:
72
72
  "mcpServers": {
73
73
  "tailscale": {
74
74
  "command": "npx",
75
- "args": ["-y", "@yawlabs/tailscale-mcp"]
75
+ "args": ["-y", "@yawlabs/tailscale-mcp@latest"]
76
76
  }
77
77
  }
78
78
  }
@@ -85,7 +85,7 @@ Windows:
85
85
  "mcpServers": {
86
86
  "tailscale": {
87
87
  "command": "cmd",
88
- "args": ["/c", "npx", "-y", "@yawlabs/tailscale-mcp"]
88
+ "args": ["/c", "npx", "-y", "@yawlabs/tailscale-mcp@latest"]
89
89
  }
90
90
  }
91
91
  }
@@ -457,7 +457,7 @@ MCP Resources expose read-only data clients can browse without a tool call.
457
457
  For the simple "deploy ACL from git on merge" workflow, you don't need an MCP server or an agent — use the built-in CLI:
458
458
 
459
459
  ```bash
460
- npx @yawlabs/tailscale-mcp deploy-acl tailscale/acl.json
460
+ npx -y @yawlabs/tailscale-mcp@latest deploy-acl tailscale/acl.json
461
461
  ```
462
462
 
463
463
  Handles ETag fetching, validation, and deployment in one command. Works in any CI system. Set `TAILSCALE_API_KEY` and `TAILSCALE_TAILNET` as env vars.
package/dist/index.js CHANGED
@@ -31188,7 +31188,8 @@ async function apiRequest(method, path, body, options) {
31188
31188
  if (res.status !== 429 || attempt === MAX_429_RETRIES || !isRetryable) break;
31189
31189
  const delay = compute429DelayMs(res.headers.get("retry-after"), attempt);
31190
31190
  const elapsed2 = Date.now() - startedAt;
31191
- if (elapsed2 + delay + REQUEST_TIMEOUT_MS > requestBudgetMs) {
31191
+ const nextAttemptBudgetMs = requestBudgetMs - elapsed2 - delay;
31192
+ if (nextAttemptBudgetMs <= 0) {
31192
31193
  debugLog(` -> 429 (attempt ${attempt + 1}), giving up: budget exhausted (${elapsed2}ms + ${delay}ms)`);
31193
31194
  break;
31194
31195
  }
@@ -32689,7 +32690,7 @@ async function runTailscaleCli(args, options = {}) {
32689
32690
  }
32690
32691
 
32691
32692
  // src/tools/local-cli.ts
32692
- var HOSTNAME_LABEL = /^[a-zA-Z0-9_]([a-zA-Z0-9_-]*[a-zA-Z0-9_])?$/;
32693
+ var HOSTNAME_LABEL = /^[a-zA-Z0-9]([a-zA-Z0-9_-]*[a-zA-Z0-9])?$/;
32693
32694
  function isValidPingTarget(s) {
32694
32695
  if (s.length === 0 || s.length > 253) return false;
32695
32696
  if (net2.isIP(s)) return true;
@@ -33520,6 +33521,7 @@ function getAllowedWebhookEvents() {
33520
33521
  const extras = raw.split(",").map((s) => s.trim()).filter(Boolean);
33521
33522
  return /* @__PURE__ */ new Set([...STATIC_WEBHOOK_EVENT_TYPES, ...extras]);
33522
33523
  }
33524
+ var endpointUrlSchema = external_exports.string().url().refine((u) => u.startsWith("https://"), "endpointUrl must use https://");
33523
33525
  var webhookSubscriptionsSchema = external_exports.array(external_exports.string()).min(1).superRefine((arr, ctx) => {
33524
33526
  const allowed = getAllowedWebhookEvents();
33525
33527
  let knownEventsList = null;
@@ -33583,7 +33585,7 @@ var webhookTools = [
33583
33585
  openWorldHint: true
33584
33586
  },
33585
33587
  inputSchema: external_exports.object({
33586
- endpointUrl: external_exports.string().url().refine((u) => u.startsWith("https://"), "endpointUrl must use https://").describe("The HTTPS URL to send webhook events to"),
33588
+ endpointUrl: endpointUrlSchema.describe("The HTTPS URL to send webhook events to"),
33587
33589
  subscriptions: webhookSubscriptionsSchema.describe("Event types to subscribe to (at least one)")
33588
33590
  }),
33589
33591
  handler: async (input) => {
@@ -33605,7 +33607,7 @@ var webhookTools = [
33605
33607
  },
33606
33608
  inputSchema: external_exports.object({
33607
33609
  webhookId: external_exports.string().describe("The webhook ID to update"),
33608
- endpointUrl: external_exports.string().url().refine((u) => u.startsWith("https://"), "endpointUrl must use https://").optional().describe("New HTTPS URL to send webhook events to"),
33610
+ endpointUrl: endpointUrlSchema.optional().describe("New HTTPS URL to send webhook events to"),
33609
33611
  subscriptions: webhookSubscriptionsSchema.optional().describe("Updated list of event types to subscribe to (at least one)")
33610
33612
  }),
33611
33613
  handler: async (input) => {
@@ -33674,7 +33676,7 @@ var webhookTools = [
33674
33676
  ];
33675
33677
 
33676
33678
  // src/index.ts
33677
- var version2 = true ? "0.12.3" : (await null).createRequire(import.meta.url)("../package.json").version;
33679
+ var version2 = true ? "0.12.5" : (await null).createRequire(import.meta.url)("../package.json").version;
33678
33680
  var subcommand = process.argv[2];
33679
33681
  if (subcommand === "deploy-acl") {
33680
33682
  const filePath = process.argv[3];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yawlabs/tailscale-mcp",
3
- "version": "0.12.3",
3
+ "version": "0.12.5",
4
4
  "mcpName": "io.github.YawLabs/tailscale-mcp",
5
5
  "description": "Tailscale MCP server for managing your tailnet from AI assistants",
6
6
  "license": "MIT",