@yawlabs/tailscale-mcp 0.1.3 → 0.1.4
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 +14 -6
- package/dist/index.js +1 -1
- package/dist/tools/audit.d.ts +17 -0
- package/dist/tools/audit.js +19 -0
- package/dist/tools/audit.js.map +1 -1
- package/dist/tools/devices.d.ts +55 -0
- package/dist/tools/devices.js +37 -0
- package/dist/tools/devices.js.map +1 -1
- package/dist/tools/status.d.ts +1 -0
- package/dist/tools/status.js +1 -0
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/users.d.ts +56 -0
- package/dist/tools/users.js +43 -1
- package/dist/tools/users.js.map +1 -1
- package/dist/tools/webhooks.d.ts +9 -5
- package/dist/tools/webhooks.js +9 -4
- package/dist/tools/webhooks.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
[](https://github.com/YawLabs/tailscale-mcp/stargazers)
|
|
6
6
|
|
|
7
|
-
**Manage your Tailscale tailnet from Claude Code, Cursor, and any MCP client.**
|
|
7
|
+
**Manage your Tailscale tailnet from Claude Code, Cursor, and any MCP client.** 52 tools. One env var. Works on first try.
|
|
8
8
|
|
|
9
9
|
Built and maintained by [YawLabs](https://yaw.sh).
|
|
10
10
|
|
|
@@ -72,7 +72,7 @@ The server checks for an API key first, then falls back to OAuth. If neither is
|
|
|
72
72
|
|
|
73
73
|
**Tailnet:** Uses your default tailnet automatically. Set `TAILSCALE_TAILNET` to specify one explicitly.
|
|
74
74
|
|
|
75
|
-
## Tools (
|
|
75
|
+
## Tools (52)
|
|
76
76
|
|
|
77
77
|
### Status
|
|
78
78
|
|
|
@@ -81,7 +81,7 @@ The server checks for an API key first, then falls back to OAuth. If neither is
|
|
|
81
81
|
| `tailscale_status` | Verify API connection, see tailnet info and device count |
|
|
82
82
|
|
|
83
83
|
<details>
|
|
84
|
-
<summary><strong>Devices</strong> (
|
|
84
|
+
<summary><strong>Devices</strong> (13 tools)</summary>
|
|
85
85
|
|
|
86
86
|
| Tool | Description |
|
|
87
87
|
|------|-------------|
|
|
@@ -94,6 +94,9 @@ The server checks for an API key first, then falls back to OAuth. If neither is
|
|
|
94
94
|
| `tailscale_expire_device` | Expire a device's key, forcing re-authentication |
|
|
95
95
|
| `tailscale_get_device_routes` | Get advertised and enabled subnet routes |
|
|
96
96
|
| `tailscale_set_device_routes` | Enable or disable subnet routes |
|
|
97
|
+
| `tailscale_get_device_posture_attributes` | Get all posture attributes for a device |
|
|
98
|
+
| `tailscale_set_device_posture_attribute` | Set a custom posture attribute (with optional expiry) |
|
|
99
|
+
| `tailscale_delete_device_posture_attribute` | Delete a custom posture attribute |
|
|
97
100
|
| `tailscale_set_device_tags` | Set ACL tags on a device |
|
|
98
101
|
|
|
99
102
|
</details>
|
|
@@ -139,12 +142,16 @@ The server checks for an API key first, then falls back to OAuth. If neither is
|
|
|
139
142
|
</details>
|
|
140
143
|
|
|
141
144
|
<details>
|
|
142
|
-
<summary><strong>Users</strong> (
|
|
145
|
+
<summary><strong>Users</strong> (6 tools)</summary>
|
|
143
146
|
|
|
144
147
|
| Tool | Description |
|
|
145
148
|
|------|-------------|
|
|
146
149
|
| `tailscale_list_users` | List all users in the tailnet |
|
|
147
150
|
| `tailscale_get_user` | Get details for a specific user |
|
|
151
|
+
| `tailscale_approve_user` | Approve a pending user |
|
|
152
|
+
| `tailscale_suspend_user` | Suspend a user, revoking access |
|
|
153
|
+
| `tailscale_restore_user` | Restore a suspended user |
|
|
154
|
+
| `tailscale_update_user_role` | Update a user's role (owner, admin, member, etc.) |
|
|
148
155
|
|
|
149
156
|
</details>
|
|
150
157
|
|
|
@@ -177,7 +184,7 @@ The server checks for an API key first, then falls back to OAuth. If neither is
|
|
|
177
184
|
| `tailscale_list_webhooks` | List webhooks |
|
|
178
185
|
| `tailscale_get_webhook` | Get a specific webhook |
|
|
179
186
|
| `tailscale_create_webhook` | Create a webhook |
|
|
180
|
-
| `tailscale_update_webhook` | Update a webhook's subscriptions |
|
|
187
|
+
| `tailscale_update_webhook` | Update a webhook's endpoint URL and/or subscriptions |
|
|
181
188
|
| `tailscale_delete_webhook` | Delete a webhook |
|
|
182
189
|
|
|
183
190
|
</details>
|
|
@@ -195,11 +202,12 @@ The server checks for an API key first, then falls back to OAuth. If neither is
|
|
|
195
202
|
</details>
|
|
196
203
|
|
|
197
204
|
<details>
|
|
198
|
-
<summary><strong>
|
|
205
|
+
<summary><strong>Logging</strong> (2 tools)</summary>
|
|
199
206
|
|
|
200
207
|
| Tool | Description |
|
|
201
208
|
|------|-------------|
|
|
202
209
|
| `tailscale_get_audit_log` | Get configuration audit log (who changed what, when) |
|
|
210
|
+
| `tailscale_get_network_flow_logs` | Get network traffic flow logs between devices |
|
|
203
211
|
|
|
204
212
|
</details>
|
|
205
213
|
|
package/dist/index.js
CHANGED
|
@@ -27,7 +27,7 @@ const allTools = [
|
|
|
27
27
|
];
|
|
28
28
|
const server = new McpServer({
|
|
29
29
|
name: "@yawlabs/tailscale-mcp",
|
|
30
|
-
version: "0.1.
|
|
30
|
+
version: "0.1.4",
|
|
31
31
|
});
|
|
32
32
|
for (const tool of allTools) {
|
|
33
33
|
server.tool(tool.name, tool.description, tool.inputSchema.shape, async (input) => {
|
package/dist/tools/audit.d.ts
CHANGED
|
@@ -16,4 +16,21 @@ export declare const auditTools: readonly [{
|
|
|
16
16
|
start: string;
|
|
17
17
|
end?: string;
|
|
18
18
|
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
19
|
+
}, {
|
|
20
|
+
readonly name: "tailscale_get_network_flow_logs";
|
|
21
|
+
readonly description: "Get network traffic flow logs showing connections between devices. Shows source/destination nodes, timestamps, and traffic metadata — useful for security monitoring and debugging connectivity.";
|
|
22
|
+
readonly inputSchema: z.ZodObject<{
|
|
23
|
+
start: z.ZodString;
|
|
24
|
+
end: z.ZodOptional<z.ZodString>;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
start: string;
|
|
27
|
+
end?: string | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
start: string;
|
|
30
|
+
end?: string | undefined;
|
|
31
|
+
}>;
|
|
32
|
+
readonly handler: (input: {
|
|
33
|
+
start: string;
|
|
34
|
+
end?: string;
|
|
35
|
+
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
19
36
|
}];
|
package/dist/tools/audit.js
CHANGED
|
@@ -20,5 +20,24 @@ export const auditTools = [
|
|
|
20
20
|
return apiGet(`/tailnet/${getTailnet()}/logging/configuration?${params}`);
|
|
21
21
|
},
|
|
22
22
|
},
|
|
23
|
+
{
|
|
24
|
+
name: "tailscale_get_network_flow_logs",
|
|
25
|
+
description: "Get network traffic flow logs showing connections between devices. Shows source/destination nodes, timestamps, and traffic metadata — useful for security monitoring and debugging connectivity.",
|
|
26
|
+
inputSchema: z.object({
|
|
27
|
+
start: z
|
|
28
|
+
.string()
|
|
29
|
+
.describe("Start time in RFC3339 format (e.g. '2026-04-01T00:00:00Z'). Required."),
|
|
30
|
+
end: z
|
|
31
|
+
.string()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("End time in RFC3339 format. Defaults to now."),
|
|
34
|
+
}),
|
|
35
|
+
handler: async (input) => {
|
|
36
|
+
const params = new URLSearchParams({ start: input.start });
|
|
37
|
+
if (input.end)
|
|
38
|
+
params.set("end", input.end);
|
|
39
|
+
return apiGet(`/tailnet/${getTailnet()}/logging/network?${params}`);
|
|
40
|
+
},
|
|
41
|
+
},
|
|
23
42
|
];
|
|
24
43
|
//# sourceMappingURL=audit.js.map
|
package/dist/tools/audit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,uHAAuH;QACzH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,CAAC,uEAAuE,CAAC;YACpF,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;SAC5D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAsC,EAAE,EAAE;YACxD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,OAAO,MAAM,CACX,YAAY,UAAU,EAAE,0BAA0B,MAAM,EAAE,CAC3D,CAAC;QACJ,CAAC;KACF;CACO,CAAC"}
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,uHAAuH;QACzH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,CAAC,uEAAuE,CAAC;YACpF,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;SAC5D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAsC,EAAE,EAAE;YACxD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,OAAO,MAAM,CACX,YAAY,UAAU,EAAE,0BAA0B,MAAM,EAAE,CAC3D,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,iCAAiC;QACvC,WAAW,EACT,kMAAkM;QACpM,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,KAAK,EAAE,CAAC;iBACL,MAAM,EAAE;iBACR,QAAQ,CAAC,uEAAuE,CAAC;YACpF,GAAG,EAAE,CAAC;iBACH,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,8CAA8C,CAAC;SAC5D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAsC,EAAE,EAAE;YACxD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,OAAO,MAAM,CACX,YAAY,UAAU,EAAE,oBAAoB,MAAM,EAAE,CACrD,CAAC;QACJ,CAAC;KACF;CACO,CAAC"}
|
package/dist/tools/devices.d.ts
CHANGED
|
@@ -124,6 +124,61 @@ export declare const deviceTools: readonly [{
|
|
|
124
124
|
deviceId: string;
|
|
125
125
|
routes: string[];
|
|
126
126
|
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
127
|
+
}, {
|
|
128
|
+
readonly name: "tailscale_get_device_posture_attributes";
|
|
129
|
+
readonly description: "Get all posture attributes for a device, including custom and system-managed attributes.";
|
|
130
|
+
readonly inputSchema: z.ZodObject<{
|
|
131
|
+
deviceId: z.ZodString;
|
|
132
|
+
}, "strip", z.ZodTypeAny, {
|
|
133
|
+
deviceId: string;
|
|
134
|
+
}, {
|
|
135
|
+
deviceId: string;
|
|
136
|
+
}>;
|
|
137
|
+
readonly handler: (input: {
|
|
138
|
+
deviceId: string;
|
|
139
|
+
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
140
|
+
}, {
|
|
141
|
+
readonly name: "tailscale_set_device_posture_attribute";
|
|
142
|
+
readonly description: "Set a custom posture attribute on a device. Attribute keys must start with 'custom:'. Useful for compliance tracking, JIT access, and custom security policies.";
|
|
143
|
+
readonly inputSchema: z.ZodObject<{
|
|
144
|
+
deviceId: z.ZodString;
|
|
145
|
+
attributeKey: z.ZodString;
|
|
146
|
+
value: z.ZodString;
|
|
147
|
+
expiry: z.ZodOptional<z.ZodString>;
|
|
148
|
+
}, "strip", z.ZodTypeAny, {
|
|
149
|
+
value: string;
|
|
150
|
+
deviceId: string;
|
|
151
|
+
attributeKey: string;
|
|
152
|
+
expiry?: string | undefined;
|
|
153
|
+
}, {
|
|
154
|
+
value: string;
|
|
155
|
+
deviceId: string;
|
|
156
|
+
attributeKey: string;
|
|
157
|
+
expiry?: string | undefined;
|
|
158
|
+
}>;
|
|
159
|
+
readonly handler: (input: {
|
|
160
|
+
deviceId: string;
|
|
161
|
+
attributeKey: string;
|
|
162
|
+
value: string;
|
|
163
|
+
expiry?: string;
|
|
164
|
+
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
165
|
+
}, {
|
|
166
|
+
readonly name: "tailscale_delete_device_posture_attribute";
|
|
167
|
+
readonly description: "Delete a custom posture attribute from a device.";
|
|
168
|
+
readonly inputSchema: z.ZodObject<{
|
|
169
|
+
deviceId: z.ZodString;
|
|
170
|
+
attributeKey: z.ZodString;
|
|
171
|
+
}, "strip", z.ZodTypeAny, {
|
|
172
|
+
deviceId: string;
|
|
173
|
+
attributeKey: string;
|
|
174
|
+
}, {
|
|
175
|
+
deviceId: string;
|
|
176
|
+
attributeKey: string;
|
|
177
|
+
}>;
|
|
178
|
+
readonly handler: (input: {
|
|
179
|
+
deviceId: string;
|
|
180
|
+
attributeKey: string;
|
|
181
|
+
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
127
182
|
}, {
|
|
128
183
|
readonly name: "tailscale_set_device_tags";
|
|
129
184
|
readonly description: "Set ACL tags on a device. Replaces all existing tags.";
|
package/dist/tools/devices.js
CHANGED
|
@@ -97,6 +97,43 @@ export const deviceTools = [
|
|
|
97
97
|
return apiPost(`/device/${input.deviceId}/routes`, { routes: input.routes });
|
|
98
98
|
},
|
|
99
99
|
},
|
|
100
|
+
{
|
|
101
|
+
name: "tailscale_get_device_posture_attributes",
|
|
102
|
+
description: "Get all posture attributes for a device, including custom and system-managed attributes.",
|
|
103
|
+
inputSchema: z.object({
|
|
104
|
+
deviceId: z.string().describe("The device ID"),
|
|
105
|
+
}),
|
|
106
|
+
handler: async (input) => {
|
|
107
|
+
return apiGet(`/device/${input.deviceId}/attributes`);
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: "tailscale_set_device_posture_attribute",
|
|
112
|
+
description: "Set a custom posture attribute on a device. Attribute keys must start with 'custom:'. Useful for compliance tracking, JIT access, and custom security policies.",
|
|
113
|
+
inputSchema: z.object({
|
|
114
|
+
deviceId: z.string().describe("The device ID"),
|
|
115
|
+
attributeKey: z.string().describe("The attribute key (must start with 'custom:', e.g. 'custom:lastAuditDate')"),
|
|
116
|
+
value: z.string().describe("The attribute value"),
|
|
117
|
+
expiry: z.string().optional().describe("Optional expiry time in RFC3339 format (e.g. '2026-12-01T00:00:00Z'). Attribute is automatically removed after expiry."),
|
|
118
|
+
}),
|
|
119
|
+
handler: async (input) => {
|
|
120
|
+
const body = { value: input.value };
|
|
121
|
+
if (input.expiry !== undefined)
|
|
122
|
+
body.expiry = input.expiry;
|
|
123
|
+
return apiPost(`/device/${input.deviceId}/attributes/${input.attributeKey}`, body);
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: "tailscale_delete_device_posture_attribute",
|
|
128
|
+
description: "Delete a custom posture attribute from a device.",
|
|
129
|
+
inputSchema: z.object({
|
|
130
|
+
deviceId: z.string().describe("The device ID"),
|
|
131
|
+
attributeKey: z.string().describe("The attribute key to delete (e.g. 'custom:lastAuditDate')"),
|
|
132
|
+
}),
|
|
133
|
+
handler: async (input) => {
|
|
134
|
+
return apiDelete(`/device/${input.deviceId}/attributes/${input.attributeKey}`);
|
|
135
|
+
},
|
|
136
|
+
},
|
|
100
137
|
{
|
|
101
138
|
name: "tailscale_set_device_tags",
|
|
102
139
|
description: "Set ACL tags on a device. Replaces all existing tags.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/tools/devices.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/tools/devices.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/status.d.ts
CHANGED
package/dist/tools/status.js
CHANGED
package/dist/tools/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,8JAA8J;QAChK,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAClD,MAAM,CAAyB,YAAY,UAAU,EAAE,oBAAoB,CAAC;gBAC5E,MAAM,CAA0B,YAAY,UAAU,EAAE,WAAW,CAAC;aACrE,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACnB,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;YAE1D,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI;oBACf,OAAO,EAAE,UAAU,EAAE;oBACrB,WAAW;oBACX,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,8JAA8J;QAChK,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAClD,MAAM,CAAyB,YAAY,UAAU,EAAE,oBAAoB,CAAC;gBAC5E,MAAM,CAA0B,YAAY,UAAU,EAAE,WAAW,CAAC;aACrE,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBACnB,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;YAE1D,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE;oBACJ,SAAS,EAAE,IAAI;oBACf,OAAO,EAAE,UAAU,EAAE;oBACrB,WAAW;oBACX,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;oBACvD,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,KAAK,IAAI,kCAAkC,EAAE,CAAC;iBACtG;aACF,CAAC;QACJ,CAAC;KACF;CACO,CAAC"}
|
package/dist/tools/users.d.ts
CHANGED
|
@@ -17,4 +17,60 @@ export declare const userTools: readonly [{
|
|
|
17
17
|
readonly handler: (input: {
|
|
18
18
|
userId: string;
|
|
19
19
|
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
20
|
+
}, {
|
|
21
|
+
readonly name: "tailscale_approve_user";
|
|
22
|
+
readonly description: "Approve a pending user, granting them access to the tailnet.";
|
|
23
|
+
readonly inputSchema: z.ZodObject<{
|
|
24
|
+
userId: z.ZodString;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
userId: string;
|
|
27
|
+
}, {
|
|
28
|
+
userId: string;
|
|
29
|
+
}>;
|
|
30
|
+
readonly handler: (input: {
|
|
31
|
+
userId: string;
|
|
32
|
+
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
33
|
+
}, {
|
|
34
|
+
readonly name: "tailscale_suspend_user";
|
|
35
|
+
readonly description: "Suspend a user, immediately revoking their access to the tailnet. Their devices will be disconnected.";
|
|
36
|
+
readonly inputSchema: z.ZodObject<{
|
|
37
|
+
userId: z.ZodString;
|
|
38
|
+
}, "strip", z.ZodTypeAny, {
|
|
39
|
+
userId: string;
|
|
40
|
+
}, {
|
|
41
|
+
userId: string;
|
|
42
|
+
}>;
|
|
43
|
+
readonly handler: (input: {
|
|
44
|
+
userId: string;
|
|
45
|
+
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
46
|
+
}, {
|
|
47
|
+
readonly name: "tailscale_restore_user";
|
|
48
|
+
readonly description: "Restore a previously suspended user, re-granting them access to the tailnet.";
|
|
49
|
+
readonly inputSchema: z.ZodObject<{
|
|
50
|
+
userId: z.ZodString;
|
|
51
|
+
}, "strip", z.ZodTypeAny, {
|
|
52
|
+
userId: string;
|
|
53
|
+
}, {
|
|
54
|
+
userId: string;
|
|
55
|
+
}>;
|
|
56
|
+
readonly handler: (input: {
|
|
57
|
+
userId: string;
|
|
58
|
+
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
59
|
+
}, {
|
|
60
|
+
readonly name: "tailscale_update_user_role";
|
|
61
|
+
readonly description: "Update a user's role in the tailnet.";
|
|
62
|
+
readonly inputSchema: z.ZodObject<{
|
|
63
|
+
userId: z.ZodString;
|
|
64
|
+
role: z.ZodEnum<["owner", "admin", "it-admin", "network-admin", "billing-admin", "auditor", "member"]>;
|
|
65
|
+
}, "strip", z.ZodTypeAny, {
|
|
66
|
+
userId: string;
|
|
67
|
+
role: "owner" | "admin" | "it-admin" | "network-admin" | "billing-admin" | "auditor" | "member";
|
|
68
|
+
}, {
|
|
69
|
+
userId: string;
|
|
70
|
+
role: "owner" | "admin" | "it-admin" | "network-admin" | "billing-admin" | "auditor" | "member";
|
|
71
|
+
}>;
|
|
72
|
+
readonly handler: (input: {
|
|
73
|
+
userId: string;
|
|
74
|
+
role: string;
|
|
75
|
+
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
20
76
|
}];
|
package/dist/tools/users.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { apiGet, getTailnet } from "../api.js";
|
|
2
|
+
import { apiGet, apiPost, apiPatch, getTailnet } from "../api.js";
|
|
3
3
|
export const userTools = [
|
|
4
4
|
{
|
|
5
5
|
name: "tailscale_list_users",
|
|
@@ -19,5 +19,47 @@ export const userTools = [
|
|
|
19
19
|
return apiGet(`/users/${input.userId}`);
|
|
20
20
|
},
|
|
21
21
|
},
|
|
22
|
+
{
|
|
23
|
+
name: "tailscale_approve_user",
|
|
24
|
+
description: "Approve a pending user, granting them access to the tailnet.",
|
|
25
|
+
inputSchema: z.object({
|
|
26
|
+
userId: z.string().describe("The user ID to approve"),
|
|
27
|
+
}),
|
|
28
|
+
handler: async (input) => {
|
|
29
|
+
return apiPost(`/users/${input.userId}/approve`);
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "tailscale_suspend_user",
|
|
34
|
+
description: "Suspend a user, immediately revoking their access to the tailnet. Their devices will be disconnected.",
|
|
35
|
+
inputSchema: z.object({
|
|
36
|
+
userId: z.string().describe("The user ID to suspend"),
|
|
37
|
+
}),
|
|
38
|
+
handler: async (input) => {
|
|
39
|
+
return apiPost(`/users/${input.userId}/suspend`);
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "tailscale_restore_user",
|
|
44
|
+
description: "Restore a previously suspended user, re-granting them access to the tailnet.",
|
|
45
|
+
inputSchema: z.object({
|
|
46
|
+
userId: z.string().describe("The user ID to restore"),
|
|
47
|
+
}),
|
|
48
|
+
handler: async (input) => {
|
|
49
|
+
return apiPost(`/users/${input.userId}/restore`);
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "tailscale_update_user_role",
|
|
54
|
+
description: "Update a user's role in the tailnet.",
|
|
55
|
+
inputSchema: z.object({
|
|
56
|
+
userId: z.string().describe("The user ID"),
|
|
57
|
+
role: z.enum(["owner", "admin", "it-admin", "network-admin", "billing-admin", "auditor", "member"])
|
|
58
|
+
.describe("The new role to assign"),
|
|
59
|
+
}),
|
|
60
|
+
handler: async (input) => {
|
|
61
|
+
return apiPatch(`/users/${input.userId}/role`, { role: input.role });
|
|
62
|
+
},
|
|
63
|
+
},
|
|
22
64
|
];
|
|
23
65
|
//# sourceMappingURL=users.js.map
|
package/dist/tools/users.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/tools/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAElE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,iCAAiC;QAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,MAAM,CAAC,YAAY,UAAU,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,kCAAkC;QAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;SAC3C,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAyB,EAAE,EAAE;YAC3C,OAAO,MAAM,CAAC,UAAU,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1C,CAAC;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SACtD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAyB,EAAE,EAAE;YAC3C,OAAO,OAAO,CAAC,UAAU,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;QACnD,CAAC;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,uGAAuG;QACpH,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SACtD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAyB,EAAE,EAAE;YAC3C,OAAO,OAAO,CAAC,UAAU,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;QACnD,CAAC;KACF;IACD;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,8EAA8E;QAC3F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;SACtD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAyB,EAAE,EAAE;YAC3C,OAAO,OAAO,CAAC,UAAU,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;QACnD,CAAC;KACF;IACD;QACE,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE,sCAAsC;QACnD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC1C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;iBAChG,QAAQ,CAAC,wBAAwB,CAAC;SACtC,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAuC,EAAE,EAAE;YACzD,OAAO,QAAQ,CAAC,UAAU,KAAK,CAAC,MAAM,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;KACF;CACO,CAAC"}
|
package/dist/tools/webhooks.d.ts
CHANGED
|
@@ -36,20 +36,24 @@ export declare const webhookTools: readonly [{
|
|
|
36
36
|
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
37
37
|
}, {
|
|
38
38
|
readonly name: "tailscale_update_webhook";
|
|
39
|
-
readonly description: "Update an existing webhook's subscriptions.";
|
|
39
|
+
readonly description: "Update an existing webhook's endpoint URL and/or subscriptions.";
|
|
40
40
|
readonly inputSchema: z.ZodObject<{
|
|
41
41
|
webhookId: z.ZodString;
|
|
42
|
-
|
|
42
|
+
endpointUrl: z.ZodOptional<z.ZodString>;
|
|
43
|
+
subscriptions: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
43
44
|
}, "strip", z.ZodTypeAny, {
|
|
44
45
|
webhookId: string;
|
|
45
|
-
|
|
46
|
+
endpointUrl?: string | undefined;
|
|
47
|
+
subscriptions?: string[] | undefined;
|
|
46
48
|
}, {
|
|
47
49
|
webhookId: string;
|
|
48
|
-
|
|
50
|
+
endpointUrl?: string | undefined;
|
|
51
|
+
subscriptions?: string[] | undefined;
|
|
49
52
|
}>;
|
|
50
53
|
readonly handler: (input: {
|
|
51
54
|
webhookId: string;
|
|
52
|
-
|
|
55
|
+
endpointUrl?: string;
|
|
56
|
+
subscriptions?: string[];
|
|
53
57
|
}) => Promise<import("../api.js").ApiResponse<unknown>>;
|
|
54
58
|
}, {
|
|
55
59
|
readonly name: "tailscale_delete_webhook";
|
package/dist/tools/webhooks.js
CHANGED
|
@@ -37,17 +37,22 @@ export const webhookTools = [
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
name: "tailscale_update_webhook",
|
|
40
|
-
description: "Update an existing webhook's subscriptions.",
|
|
40
|
+
description: "Update an existing webhook's endpoint URL and/or subscriptions.",
|
|
41
41
|
inputSchema: z.object({
|
|
42
42
|
webhookId: z.string().describe("The webhook ID to update"),
|
|
43
|
+
endpointUrl: z.string().optional().describe("New URL to send webhook events to"),
|
|
43
44
|
subscriptions: z
|
|
44
45
|
.array(z.string())
|
|
46
|
+
.optional()
|
|
45
47
|
.describe("Updated list of event types to subscribe to (e.g. ['nodeCreated', 'nodeDeleted', 'nodeApproved', 'policyUpdate', 'userCreated', 'userDeleted'])"),
|
|
46
48
|
}),
|
|
47
49
|
handler: async (input) => {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
const body = {};
|
|
51
|
+
if (input.endpointUrl !== undefined)
|
|
52
|
+
body.endpointUrl = input.endpointUrl;
|
|
53
|
+
if (input.subscriptions !== undefined)
|
|
54
|
+
body.subscriptions = input.subscriptions;
|
|
55
|
+
return apiPatch(`/webhooks/${input.webhookId}`, body);
|
|
51
56
|
},
|
|
52
57
|
},
|
|
53
58
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE7E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,MAAM,CAAC,YAAY,UAAU,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACjD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAA4B,EAAE,EAAE;YAC9C,OAAO,MAAM,CAAC,aAAa,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,uBAAuB;QACpC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACrE,aAAa,EAAE,CAAC;iBACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,CACP,iIAAiI,CAClI;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAuD,EAAE,EAAE;YACzE,OAAO,OAAO,CAAC,YAAY,UAAU,EAAE,WAAW,EAAE;gBAClD,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;aACnC,CAAC,CAAC;QACL,CAAC;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/tools/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE7E,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,gDAAgD;QAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,MAAM,CAAC,YAAY,UAAU,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;KACF;IACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,qCAAqC;QAClD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACjD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAA4B,EAAE,EAAE;YAC9C,OAAO,MAAM,CAAC,aAAa,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,uBAAuB;QACpC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YACrE,aAAa,EAAE,CAAC;iBACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,CACP,iIAAiI,CAClI;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAAuD,EAAE,EAAE;YACzE,OAAO,OAAO,CAAC,YAAY,UAAU,EAAE,WAAW,EAAE;gBAClD,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;aACnC,CAAC,CAAC;QACL,CAAC;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,iEAAiE;QAC9E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YAC1D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;YAChF,aAAa,EAAE,CAAC;iBACb,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,EAAE;iBACV,QAAQ,CACP,iJAAiJ,CAClJ;SACJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAA4E,EAAE,EAAE;YAC9F,MAAM,IAAI,GAA4B,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;gBAAE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YAC1E,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;gBAAE,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;YAChF,OAAO,QAAQ,CAAC,aAAa,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;KACF;IACD;QACE,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,kFAAkF;QAC/F,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SAC3D,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,KAA4B,EAAE,EAAE;YAC9C,OAAO,SAAS,CAAC,aAAa,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACnD,CAAC;KACF;CACO,CAAC"}
|