@yawlabs/tailscale-mcp 0.1.6 → 0.2.1
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 +104 -14
- package/dist/api.js +2 -2
- package/dist/api.js.map +1 -1
- package/dist/index.js +59 -8
- package/dist/index.js.map +1 -1
- package/dist/tools/acl.d.ts +28 -0
- package/dist/tools/acl.js +33 -4
- package/dist/tools/acl.js.map +1 -1
- package/dist/tools/audit.d.ts +14 -0
- package/dist/tools/audit.js +19 -15
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/devices.d.ts +91 -0
- package/dist/tools/devices.js +102 -4
- package/dist/tools/devices.js.map +1 -1
- package/dist/tools/dns.d.ts +56 -0
- package/dist/tools/dns.js +57 -1
- package/dist/tools/dns.js.map +1 -1
- package/dist/tools/invites.d.ts +56 -0
- package/dist/tools/invites.js +59 -9
- package/dist/tools/invites.js.map +1 -1
- package/dist/tools/keys.d.ts +28 -0
- package/dist/tools/keys.js +29 -1
- package/dist/tools/keys.js.map +1 -1
- package/dist/tools/log-streaming.d.ts +90 -0
- package/dist/tools/log-streaming.js +89 -0
- package/dist/tools/log-streaming.js.map +1 -0
- package/dist/tools/network-lock.d.ts +7 -0
- package/dist/tools/network-lock.js +7 -0
- package/dist/tools/network-lock.js.map +1 -1
- package/dist/tools/oauth-clients.d.ts +118 -0
- package/dist/tools/oauth-clients.js +102 -0
- package/dist/tools/oauth-clients.js.map +1 -0
- package/dist/tools/posture.d.ts +35 -0
- package/dist/tools/posture.js +36 -1
- package/dist/tools/posture.js.map +1 -1
- package/dist/tools/services.d.ts +124 -0
- package/dist/tools/services.js +106 -0
- package/dist/tools/services.js.map +1 -0
- package/dist/tools/status.d.ts +7 -0
- package/dist/tools/status.js +7 -0
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/tailnet.d.ts +28 -0
- package/dist/tools/tailnet.js +28 -0
- package/dist/tools/tailnet.js.map +1 -1
- package/dist/tools/users.d.ts +42 -0
- package/dist/tools/users.js +45 -2
- package/dist/tools/users.js.map +1 -1
- package/dist/tools/webhooks.d.ts +42 -0
- package/dist/tools/webhooks.js +43 -1
- package/dist/tools/webhooks.js.map +1 -1
- package/dist/tools/workload-identity.d.ts +118 -0
- package/dist/tools/workload-identity.js +105 -0
- package/dist/tools/workload-identity.js.map +1 -0
- package/package.json +6 -2
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { apiDelete, apiGet, apiPatch, apiPost, encPath, getTailnet } from "../api.js";
|
|
3
|
+
export const workloadIdentityTools = [
|
|
4
|
+
{
|
|
5
|
+
name: "tailscale_list_workload_identities",
|
|
6
|
+
description: "List all federated workload identity providers configured for your tailnet. Workload identities allow CI/CD pipelines and automated systems to authenticate using OIDC federation.",
|
|
7
|
+
annotations: {
|
|
8
|
+
title: "List workload identities",
|
|
9
|
+
readOnlyHint: true,
|
|
10
|
+
destructiveHint: false,
|
|
11
|
+
idempotentHint: true,
|
|
12
|
+
openWorldHint: true,
|
|
13
|
+
},
|
|
14
|
+
inputSchema: z.object({}),
|
|
15
|
+
handler: async () => {
|
|
16
|
+
return apiGet(`/tailnet/${getTailnet()}/workload-identity/providers`);
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "tailscale_get_workload_identity",
|
|
21
|
+
description: "Get details for a specific workload identity provider.",
|
|
22
|
+
annotations: {
|
|
23
|
+
title: "Get workload identity",
|
|
24
|
+
readOnlyHint: true,
|
|
25
|
+
destructiveHint: false,
|
|
26
|
+
idempotentHint: true,
|
|
27
|
+
openWorldHint: true,
|
|
28
|
+
},
|
|
29
|
+
inputSchema: z.object({
|
|
30
|
+
providerId: z.string().describe("The workload identity provider ID"),
|
|
31
|
+
}),
|
|
32
|
+
handler: async (input) => {
|
|
33
|
+
return apiGet(`/tailnet/${getTailnet()}/workload-identity/providers/${encPath(input.providerId)}`);
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "tailscale_create_workload_identity",
|
|
38
|
+
description: "Create a new workload identity provider for OIDC federation. Enables CI/CD systems (GitHub Actions, GitLab CI, etc.) to authenticate to your tailnet without static credentials.",
|
|
39
|
+
annotations: {
|
|
40
|
+
title: "Create workload identity",
|
|
41
|
+
readOnlyHint: false,
|
|
42
|
+
destructiveHint: false,
|
|
43
|
+
idempotentHint: false,
|
|
44
|
+
openWorldHint: true,
|
|
45
|
+
},
|
|
46
|
+
inputSchema: z.object({
|
|
47
|
+
name: z.string().describe("A human-readable name for this provider"),
|
|
48
|
+
issuerUrl: z
|
|
49
|
+
.string()
|
|
50
|
+
.describe("The OIDC issuer URL (e.g. 'https://token.actions.githubusercontent.com' for GitHub Actions)"),
|
|
51
|
+
audience: z.string().optional().describe("Expected audience claim in the OIDC token"),
|
|
52
|
+
claimMappings: z
|
|
53
|
+
.record(z.string(), z.string())
|
|
54
|
+
.optional()
|
|
55
|
+
.describe("Map of Tailscale attributes to OIDC token claims (e.g. { 'tag': 'repository' })"),
|
|
56
|
+
}),
|
|
57
|
+
handler: async (input) => {
|
|
58
|
+
return apiPost(`/tailnet/${getTailnet()}/workload-identity/providers`, input);
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "tailscale_update_workload_identity",
|
|
63
|
+
description: "Update an existing workload identity provider's configuration.",
|
|
64
|
+
annotations: {
|
|
65
|
+
title: "Update workload identity",
|
|
66
|
+
readOnlyHint: false,
|
|
67
|
+
destructiveHint: false,
|
|
68
|
+
idempotentHint: true,
|
|
69
|
+
openWorldHint: true,
|
|
70
|
+
},
|
|
71
|
+
inputSchema: z.object({
|
|
72
|
+
providerId: z.string().describe("The workload identity provider ID to update"),
|
|
73
|
+
name: z.string().optional().describe("Updated human-readable name"),
|
|
74
|
+
audience: z.string().optional().describe("Updated expected audience claim"),
|
|
75
|
+
claimMappings: z.record(z.string(), z.string()).optional().describe("Updated claim mappings"),
|
|
76
|
+
}),
|
|
77
|
+
handler: async (input) => {
|
|
78
|
+
const { providerId, ...body } = input;
|
|
79
|
+
const cleanBody = {};
|
|
80
|
+
for (const [key, value] of Object.entries(body)) {
|
|
81
|
+
if (value !== undefined)
|
|
82
|
+
cleanBody[key] = value;
|
|
83
|
+
}
|
|
84
|
+
return apiPatch(`/tailnet/${getTailnet()}/workload-identity/providers/${encPath(providerId)}`, cleanBody);
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "tailscale_delete_workload_identity",
|
|
89
|
+
description: "Delete a workload identity provider. This is irreversible — any CI/CD pipelines using this provider will lose access.",
|
|
90
|
+
annotations: {
|
|
91
|
+
title: "Delete workload identity",
|
|
92
|
+
readOnlyHint: false,
|
|
93
|
+
destructiveHint: true,
|
|
94
|
+
idempotentHint: true,
|
|
95
|
+
openWorldHint: true,
|
|
96
|
+
},
|
|
97
|
+
inputSchema: z.object({
|
|
98
|
+
providerId: z.string().describe("The workload identity provider ID to delete"),
|
|
99
|
+
}),
|
|
100
|
+
handler: async (input) => {
|
|
101
|
+
return apiDelete(`/tailnet/${getTailnet()}/workload-identity/providers/${encPath(input.providerId)}`);
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
];
|
|
105
|
+
//# sourceMappingURL=workload-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workload-identity.js","sourceRoot":"","sources":["../../src/tools/workload-identity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yawlabs/tailscale-mcp",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Tailscale MCP server for managing your tailnet from AI assistants",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "YawLabs <contact@yaw.sh>",
|
|
@@ -30,13 +30,17 @@
|
|
|
30
30
|
"dev": "tsc --watch",
|
|
31
31
|
"start": "node dist/index.js",
|
|
32
32
|
"test": "node --test dist/**/*.test.js",
|
|
33
|
+
"test:ci": "npm run build && npm test",
|
|
34
|
+
"lint": "biome check src/",
|
|
35
|
+
"lint:fix": "biome check --write src/",
|
|
33
36
|
"prepublishOnly": "npm run build"
|
|
34
37
|
},
|
|
35
38
|
"dependencies": {
|
|
36
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
37
40
|
"zod": "^3.24.4"
|
|
38
41
|
},
|
|
39
42
|
"devDependencies": {
|
|
43
|
+
"@biomejs/biome": "^1.9.4",
|
|
40
44
|
"@types/node": "^22.15.2",
|
|
41
45
|
"typescript": "^5.8.3"
|
|
42
46
|
},
|