@yawlabs/tailscale-mcp 0.8.5 → 0.8.7
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 +13 -9
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@yawlabs/tailscale-mcp)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
[](https://github.com/YawLabs/tailscale-mcp/stargazers)
|
|
6
|
-
[](https://github.com/YawLabs/tailscale-mcp/actions/workflows/ci.yml) [](https://github.com/YawLabs/tailscale-mcp/actions/workflows/release.yml)
|
|
6
|
+
[](https://github.com/YawLabs/tailscale-mcp/actions/workflows/ci.yml) [](https://github.com/YawLabs/tailscale-mcp/actions/workflows/release.yml)
|
|
7
7
|
|
|
8
|
-
**Ask your agent questions about your tailnet and have it act on the answers.** 99 tools + 4 resources covering the full [Tailscale v2 API](https://tailscale.com/api). Backed by 735 tests and
|
|
8
|
+
**Ask your agent questions about your tailnet and have it act on the answers.** 99 tools + 4 resources covering the full [Tailscale v2 API](https://tailscale.com/api). Backed by 735 unit tests and an opt-in live-tailnet integration suite.
|
|
9
9
|
|
|
10
10
|
Built and maintained by [Yaw Labs](https://yaw.sh).
|
|
11
11
|
|
|
@@ -33,20 +33,20 @@ Reasonable question. Both have their place. Where this MCP is better:
|
|
|
33
33
|
|
|
34
34
|
- **Full admin API coverage.** The `tailscale` CLI is scoped to the node it runs on. Admin concerns — ACLs, users, invites, webhooks, log streaming, workload identity, OAuth clients, posture — live in the v2 HTTP API. You'd be shelling out to `curl` anyway.
|
|
35
35
|
- **Typed tool surface, not string parsing.** Every tool has a Zod-validated input schema and a structured response. No brittle `tailscale status --json | jq` pipelines that break when the schema evolves.
|
|
36
|
-
- **Cross-client, no user rewriting.** A Claude Code skill
|
|
36
|
+
- **Cross-client, no user rewriting.** A Claude Code skill only loads in Claude Code. An MCP server works in Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, and anything else that speaks MCP. Version bumps ship through `npx` — users don't re-author their skill when Tailscale adds an endpoint.
|
|
37
37
|
- **Safe-by-default writes.** Every tool declares `readOnlyHint` / `destructiveHint` / `idempotentHint` so clients can skip confirmation on reads and require it on mutations. A skill that shells out to the CLI can't express that.
|
|
38
|
-
- **Real tests.** 735 unit tests
|
|
38
|
+
- **Real tests.** 735 unit tests covering every tool's input validation, API shape, and error handling. Plus an opt-in live-tailnet integration suite (`RUN_INTEGRATION_TESTS=1` + a tailnet API key) for shape-drift detection. Most skills are short markdown prompts without their own test layer — if the vendor changes output format, nothing catches it for you.
|
|
39
39
|
|
|
40
40
|
If you already have a skill that covers your 10% of Tailscale workflows, great — keep it. The MCP is for the other 90%.
|
|
41
41
|
|
|
42
42
|
## Trust signals
|
|
43
43
|
|
|
44
|
-
Fair critique from Reddit: a
|
|
44
|
+
Fair critique from Reddit: a new repo claiming "actively maintained" with no visible tests is worth exactly zero trust. Here's what's actually verifiable:
|
|
45
45
|
|
|
46
46
|
- **735 tests** (179 suites, `node --test`) covering every tool's input validation, API shape, and error handling. Run `npm test` to see them pass locally.
|
|
47
47
|
- **3 CI workflows** on GitHub Actions:
|
|
48
48
|
- [`ci.yml`](.github/workflows/ci.yml) — lint + typecheck + build + unit tests on every push and PR.
|
|
49
|
-
- [`integration.yml`](.github/workflows/integration.yml) —
|
|
49
|
+
- [`integration.yml`](.github/workflows/integration.yml) — read-only live-API smoke tests against a real tailnet. Wired up with three triggers (nightly schedule, every tag push via `release.yml`, manual dispatch); skips gracefully when no test-tailnet secret is configured, so forks aren't blocked.
|
|
50
50
|
- [`release.yml`](.github/workflows/release.yml) — publishes to npm from a signed tag.
|
|
51
51
|
- **Dependabot alerts** surface on this repo and get fixed, not ignored.
|
|
52
52
|
- **Every tool verified against the live API.** If it's in the tool list, it calls a real endpoint that exists in the current v2 API. No placeholder 404 tools.
|
|
@@ -91,7 +91,7 @@ Windows:
|
|
|
91
91
|
}
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
> **Why the extra step on Windows?**
|
|
94
|
+
> **Why the extra step on Windows?** On Windows, `npx` is a `.cmd` file, and Node 20+ refuses to spawn `.cmd` files directly. Wrapping with `cmd /c` is the standard workaround.
|
|
95
95
|
|
|
96
96
|
**3. Restart and approve**
|
|
97
97
|
|
|
@@ -158,7 +158,7 @@ Set to `1` or `true` to drop every tool without `readOnlyHint: true`. Stacks wit
|
|
|
158
158
|
The server logs the active filter to stderr on startup:
|
|
159
159
|
|
|
160
160
|
```
|
|
161
|
-
@yawlabs/tailscale-mcp v0.8.
|
|
161
|
+
@yawlabs/tailscale-mcp v0.8.7 ready (19 tools, profile=core, readonly)
|
|
162
162
|
```
|
|
163
163
|
|
|
164
164
|
If you don't set any filter, startup prints a tip pointing you at the profiles.
|
|
@@ -453,7 +453,7 @@ This shows a read-only banner in the Tailscale Admin Console pointing to your re
|
|
|
453
453
|
|
|
454
454
|
## Contributing
|
|
455
455
|
|
|
456
|
-
Contributions welcome. Please [open an issue](https://github.com/YawLabs/tailscale-mcp/issues) to discuss before a PR for anything beyond a typo fix.
|
|
456
|
+
Contributions welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for the PR workflow and AI-agent guidelines. Please [open an issue](https://github.com/YawLabs/tailscale-mcp/issues) to discuss before a PR for anything beyond a typo fix.
|
|
457
457
|
|
|
458
458
|
```bash
|
|
459
459
|
git clone https://github.com/YawLabs/tailscale-mcp.git
|
|
@@ -467,6 +467,10 @@ npm test # node --test (735 tests)
|
|
|
467
467
|
|
|
468
468
|
For integration testing against your own tailnet: set `TAILSCALE_API_KEY` and run `node dist/index.js`.
|
|
469
469
|
|
|
470
|
+
## Security
|
|
471
|
+
|
|
472
|
+
Found a vulnerability? See [SECURITY.md](SECURITY.md) — please use GitHub's private vulnerability reporting, not a public issue.
|
|
473
|
+
|
|
470
474
|
## License
|
|
471
475
|
|
|
472
476
|
MIT
|
package/dist/index.js
CHANGED
|
@@ -32393,7 +32393,7 @@ var workloadIdentityTools = [
|
|
|
32393
32393
|
},
|
|
32394
32394
|
{
|
|
32395
32395
|
name: "tailscale_get_workload_identity",
|
|
32396
|
-
description: "Get details for a specific workload identity provider.",
|
|
32396
|
+
description: "Get details for a specific federated workload identity provider, including issuer URL, audience, and the subject patterns it accepts for OIDC token exchange.",
|
|
32397
32397
|
annotations: {
|
|
32398
32398
|
title: "Get workload identity",
|
|
32399
32399
|
readOnlyHint: true,
|
|
@@ -32479,7 +32479,7 @@ var workloadIdentityTools = [
|
|
|
32479
32479
|
];
|
|
32480
32480
|
|
|
32481
32481
|
// src/index.ts
|
|
32482
|
-
var version2 = true ? "0.8.
|
|
32482
|
+
var version2 = true ? "0.8.7" : (await null).createRequire(import.meta.url)("../package.json").version;
|
|
32483
32483
|
var subcommand = process.argv[2];
|
|
32484
32484
|
if (subcommand === "deploy-acl") {
|
|
32485
32485
|
const filePath = process.argv[3];
|