@yawlabs/tailscale-mcp 0.1.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.
Files changed (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +218 -0
  3. package/dist/api.d.ts +30 -0
  4. package/dist/api.js +108 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +70 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/tools/acl.d.ts +58 -0
  10. package/dist/tools/acl.js +72 -0
  11. package/dist/tools/acl.js.map +1 -0
  12. package/dist/tools/audit.d.ts +19 -0
  13. package/dist/tools/audit.js +24 -0
  14. package/dist/tools/audit.js.map +1 -0
  15. package/dist/tools/devices.d.ts +144 -0
  16. package/dist/tools/devices.js +112 -0
  17. package/dist/tools/devices.js.map +1 -0
  18. package/dist/tools/dns.d.ts +74 -0
  19. package/dist/tools/dns.js +83 -0
  20. package/dist/tools/dns.js.map +1 -0
  21. package/dist/tools/keys.d.ts +66 -0
  22. package/dist/tools/keys.js +64 -0
  23. package/dist/tools/keys.js.map +1 -0
  24. package/dist/tools/network-lock.d.ts +7 -0
  25. package/dist/tools/network-lock.js +13 -0
  26. package/dist/tools/network-lock.js.map +1 -0
  27. package/dist/tools/posture.d.ts +62 -0
  28. package/dist/tools/posture.js +47 -0
  29. package/dist/tools/posture.js.map +1 -0
  30. package/dist/tools/status.d.ts +18 -0
  31. package/dist/tools/status.js +28 -0
  32. package/dist/tools/status.js.map +1 -0
  33. package/dist/tools/tailnet.d.ts +85 -0
  34. package/dist/tools/tailnet.js +48 -0
  35. package/dist/tools/tailnet.js.map +1 -0
  36. package/dist/tools/users.d.ts +20 -0
  37. package/dist/tools/users.js +23 -0
  38. package/dist/tools/users.js.map +1 -0
  39. package/dist/tools/webhooks.d.ts +50 -0
  40. package/dist/tools/webhooks.js +49 -0
  41. package/dist/tools/webhooks.js.map +1 -0
  42. package/package.json +45 -0
@@ -0,0 +1,144 @@
1
+ import { z } from "zod";
2
+ export declare const deviceTools: readonly [{
3
+ readonly name: "tailscale_list_devices";
4
+ readonly description: "List all devices in your tailnet with their status, IP addresses, OS, and last seen time.";
5
+ readonly inputSchema: z.ZodObject<{
6
+ fields: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ fields?: string | undefined;
9
+ }, {
10
+ fields?: string | undefined;
11
+ }>;
12
+ readonly handler: (input: {
13
+ fields?: string;
14
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
15
+ }, {
16
+ readonly name: "tailscale_get_device";
17
+ readonly description: "Get detailed information about a specific device by its ID.";
18
+ readonly inputSchema: z.ZodObject<{
19
+ deviceId: z.ZodString;
20
+ }, "strip", z.ZodTypeAny, {
21
+ deviceId: string;
22
+ }, {
23
+ deviceId: string;
24
+ }>;
25
+ readonly handler: (input: {
26
+ deviceId: string;
27
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
28
+ }, {
29
+ readonly name: "tailscale_authorize_device";
30
+ readonly description: "Authorize a device that is pending authorization.";
31
+ readonly inputSchema: z.ZodObject<{
32
+ deviceId: z.ZodString;
33
+ }, "strip", z.ZodTypeAny, {
34
+ deviceId: string;
35
+ }, {
36
+ deviceId: string;
37
+ }>;
38
+ readonly handler: (input: {
39
+ deviceId: string;
40
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
41
+ }, {
42
+ readonly name: "tailscale_deauthorize_device";
43
+ readonly description: "Deauthorize a device, removing its access to the tailnet.";
44
+ readonly inputSchema: z.ZodObject<{
45
+ deviceId: z.ZodString;
46
+ }, "strip", z.ZodTypeAny, {
47
+ deviceId: string;
48
+ }, {
49
+ deviceId: string;
50
+ }>;
51
+ readonly handler: (input: {
52
+ deviceId: string;
53
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
54
+ }, {
55
+ readonly name: "tailscale_delete_device";
56
+ readonly description: "Delete a device from the tailnet. The device can re-authenticate to rejoin.";
57
+ readonly inputSchema: z.ZodObject<{
58
+ deviceId: z.ZodString;
59
+ }, "strip", z.ZodTypeAny, {
60
+ deviceId: string;
61
+ }, {
62
+ deviceId: string;
63
+ }>;
64
+ readonly handler: (input: {
65
+ deviceId: string;
66
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
67
+ }, {
68
+ readonly name: "tailscale_rename_device";
69
+ readonly description: "Set the name of a device in the tailnet.";
70
+ readonly inputSchema: z.ZodObject<{
71
+ deviceId: z.ZodString;
72
+ name: z.ZodString;
73
+ }, "strip", z.ZodTypeAny, {
74
+ deviceId: string;
75
+ name: string;
76
+ }, {
77
+ deviceId: string;
78
+ name: string;
79
+ }>;
80
+ readonly handler: (input: {
81
+ deviceId: string;
82
+ name: string;
83
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
84
+ }, {
85
+ readonly name: "tailscale_expire_device";
86
+ readonly description: "Expire a device's key, forcing it to re-authenticate.";
87
+ readonly inputSchema: z.ZodObject<{
88
+ deviceId: z.ZodString;
89
+ }, "strip", z.ZodTypeAny, {
90
+ deviceId: string;
91
+ }, {
92
+ deviceId: string;
93
+ }>;
94
+ readonly handler: (input: {
95
+ deviceId: string;
96
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
97
+ }, {
98
+ readonly name: "tailscale_get_device_routes";
99
+ readonly description: "Get the subnet routes a device advertises and which are enabled.";
100
+ readonly inputSchema: z.ZodObject<{
101
+ deviceId: z.ZodString;
102
+ }, "strip", z.ZodTypeAny, {
103
+ deviceId: string;
104
+ }, {
105
+ deviceId: string;
106
+ }>;
107
+ readonly handler: (input: {
108
+ deviceId: string;
109
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
110
+ }, {
111
+ readonly name: "tailscale_set_device_routes";
112
+ readonly description: "Enable or disable subnet routes for a device.";
113
+ readonly inputSchema: z.ZodObject<{
114
+ deviceId: z.ZodString;
115
+ routes: z.ZodArray<z.ZodString, "many">;
116
+ }, "strip", z.ZodTypeAny, {
117
+ deviceId: string;
118
+ routes: string[];
119
+ }, {
120
+ deviceId: string;
121
+ routes: string[];
122
+ }>;
123
+ readonly handler: (input: {
124
+ deviceId: string;
125
+ routes: string[];
126
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
127
+ }, {
128
+ readonly name: "tailscale_set_device_tags";
129
+ readonly description: "Set ACL tags on a device. Replaces all existing tags.";
130
+ readonly inputSchema: z.ZodObject<{
131
+ deviceId: z.ZodString;
132
+ tags: z.ZodArray<z.ZodString, "many">;
133
+ }, "strip", z.ZodTypeAny, {
134
+ deviceId: string;
135
+ tags: string[];
136
+ }, {
137
+ deviceId: string;
138
+ tags: string[];
139
+ }>;
140
+ readonly handler: (input: {
141
+ deviceId: string;
142
+ tags: string[];
143
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
144
+ }];
@@ -0,0 +1,112 @@
1
+ import { z } from "zod";
2
+ import { apiGet, apiPost, apiDelete, getTailnet } from "../api.js";
3
+ export const deviceTools = [
4
+ {
5
+ name: "tailscale_list_devices",
6
+ description: "List all devices in your tailnet with their status, IP addresses, OS, and last seen time.",
7
+ inputSchema: z.object({
8
+ fields: z
9
+ .string()
10
+ .optional()
11
+ .describe("Comma-separated list of fields to include. Omit for all fields. Valid fields: addresses, advertisedRoutes, authorized, blocksIncomingConnections, clientConnectivity, clientVersion, connectedToControl, created, distro, enabledRoutes, expires, hostname, id, isExternal, keyExpiryDisabled, lastSeen, machineKey, name, nodeId, nodeKey, os, sshEnabled, tags, tailnetLockError, tailnetLockKey, updateAvailable, user. Use 'all' for every field."),
12
+ }),
13
+ handler: async (input) => {
14
+ const params = input.fields ? `?fields=${encodeURIComponent(input.fields)}` : "";
15
+ return apiGet(`/tailnet/${getTailnet()}/devices${params}`);
16
+ },
17
+ },
18
+ {
19
+ name: "tailscale_get_device",
20
+ description: "Get detailed information about a specific device by its ID.",
21
+ inputSchema: z.object({
22
+ deviceId: z.string().describe("The device ID (numeric or nodekey format)"),
23
+ }),
24
+ handler: async (input) => {
25
+ return apiGet(`/device/${input.deviceId}`);
26
+ },
27
+ },
28
+ {
29
+ name: "tailscale_authorize_device",
30
+ description: "Authorize a device that is pending authorization.",
31
+ inputSchema: z.object({
32
+ deviceId: z.string().describe("The device ID to authorize"),
33
+ }),
34
+ handler: async (input) => {
35
+ return apiPost(`/device/${input.deviceId}/authorized`, { authorized: true });
36
+ },
37
+ },
38
+ {
39
+ name: "tailscale_deauthorize_device",
40
+ description: "Deauthorize a device, removing its access to the tailnet.",
41
+ inputSchema: z.object({
42
+ deviceId: z.string().describe("The device ID to deauthorize"),
43
+ }),
44
+ handler: async (input) => {
45
+ return apiPost(`/device/${input.deviceId}/authorized`, { authorized: false });
46
+ },
47
+ },
48
+ {
49
+ name: "tailscale_delete_device",
50
+ description: "Delete a device from the tailnet. The device can re-authenticate to rejoin.",
51
+ inputSchema: z.object({
52
+ deviceId: z.string().describe("The device ID to delete"),
53
+ }),
54
+ handler: async (input) => {
55
+ return apiDelete(`/device/${input.deviceId}`);
56
+ },
57
+ },
58
+ {
59
+ name: "tailscale_rename_device",
60
+ description: "Set the name of a device in the tailnet.",
61
+ inputSchema: z.object({
62
+ deviceId: z.string().describe("The device ID to rename"),
63
+ name: z.string().describe("The new name for the device (FQDN within your tailnet)"),
64
+ }),
65
+ handler: async (input) => {
66
+ return apiPost(`/device/${input.deviceId}/name`, { name: input.name });
67
+ },
68
+ },
69
+ {
70
+ name: "tailscale_expire_device",
71
+ description: "Expire a device's key, forcing it to re-authenticate.",
72
+ inputSchema: z.object({
73
+ deviceId: z.string().describe("The device ID to expire"),
74
+ }),
75
+ handler: async (input) => {
76
+ return apiPost(`/device/${input.deviceId}/expire`);
77
+ },
78
+ },
79
+ {
80
+ name: "tailscale_get_device_routes",
81
+ description: "Get the subnet routes a device advertises and which are enabled.",
82
+ inputSchema: z.object({
83
+ deviceId: z.string().describe("The device ID"),
84
+ }),
85
+ handler: async (input) => {
86
+ return apiGet(`/device/${input.deviceId}/routes`);
87
+ },
88
+ },
89
+ {
90
+ name: "tailscale_set_device_routes",
91
+ description: "Enable or disable subnet routes for a device.",
92
+ inputSchema: z.object({
93
+ deviceId: z.string().describe("The device ID"),
94
+ routes: z.array(z.string()).describe("List of CIDR routes to enable (e.g. ['10.0.0.0/24', '192.168.1.0/24'])"),
95
+ }),
96
+ handler: async (input) => {
97
+ return apiPost(`/device/${input.deviceId}/routes`, { routes: input.routes });
98
+ },
99
+ },
100
+ {
101
+ name: "tailscale_set_device_tags",
102
+ description: "Set ACL tags on a device. Replaces all existing tags.",
103
+ inputSchema: z.object({
104
+ deviceId: z.string().describe("The device ID"),
105
+ tags: z.array(z.string()).describe("List of ACL tags (e.g. ['tag:server', 'tag:production'])"),
106
+ }),
107
+ handler: async (input) => {
108
+ return apiPost(`/device/${input.deviceId}/tags`, { tags: input.tags });
109
+ },
110
+ },
111
+ ];
112
+ //# sourceMappingURL=devices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/tools/devices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { z } from "zod";
2
+ export declare const dnsTools: readonly [{
3
+ readonly name: "tailscale_get_nameservers";
4
+ readonly description: "Get the DNS nameservers configured for your tailnet.";
5
+ readonly inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ readonly handler: () => Promise<import("../api.js").ApiResponse<unknown>>;
7
+ }, {
8
+ readonly name: "tailscale_set_nameservers";
9
+ readonly description: "Set the DNS nameservers for your tailnet.";
10
+ readonly inputSchema: z.ZodObject<{
11
+ dns: z.ZodArray<z.ZodString, "many">;
12
+ }, "strip", z.ZodTypeAny, {
13
+ dns: string[];
14
+ }, {
15
+ dns: string[];
16
+ }>;
17
+ readonly handler: (input: {
18
+ dns: string[];
19
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
20
+ }, {
21
+ readonly name: "tailscale_get_search_paths";
22
+ readonly description: "Get the DNS search paths configured for your tailnet.";
23
+ readonly inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
24
+ readonly handler: () => Promise<import("../api.js").ApiResponse<unknown>>;
25
+ }, {
26
+ readonly name: "tailscale_set_search_paths";
27
+ readonly description: "Set the DNS search paths for your tailnet.";
28
+ readonly inputSchema: z.ZodObject<{
29
+ searchPaths: z.ZodArray<z.ZodString, "many">;
30
+ }, "strip", z.ZodTypeAny, {
31
+ searchPaths: string[];
32
+ }, {
33
+ searchPaths: string[];
34
+ }>;
35
+ readonly handler: (input: {
36
+ searchPaths: string[];
37
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
38
+ }, {
39
+ readonly name: "tailscale_get_split_dns";
40
+ readonly description: "Get the split DNS configuration for your tailnet.";
41
+ readonly inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
42
+ readonly handler: () => Promise<import("../api.js").ApiResponse<unknown>>;
43
+ }, {
44
+ readonly name: "tailscale_set_split_dns";
45
+ readonly description: "Set split DNS configuration. Maps domains to specific nameservers.";
46
+ readonly inputSchema: z.ZodObject<{
47
+ splitDns: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>;
48
+ }, "strip", z.ZodTypeAny, {
49
+ splitDns: Record<string, string[]>;
50
+ }, {
51
+ splitDns: Record<string, string[]>;
52
+ }>;
53
+ readonly handler: (input: {
54
+ splitDns: Record<string, string[]>;
55
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
56
+ }, {
57
+ readonly name: "tailscale_get_dns_preferences";
58
+ readonly description: "Get DNS preferences for your tailnet, including whether MagicDNS is enabled.";
59
+ readonly inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
60
+ readonly handler: () => Promise<import("../api.js").ApiResponse<unknown>>;
61
+ }, {
62
+ readonly name: "tailscale_set_dns_preferences";
63
+ readonly description: "Set DNS preferences for your tailnet, such as enabling or disabling MagicDNS.";
64
+ readonly inputSchema: z.ZodObject<{
65
+ magicDNS: z.ZodBoolean;
66
+ }, "strip", z.ZodTypeAny, {
67
+ magicDNS: boolean;
68
+ }, {
69
+ magicDNS: boolean;
70
+ }>;
71
+ readonly handler: (input: {
72
+ magicDNS: boolean;
73
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
74
+ }];
@@ -0,0 +1,83 @@
1
+ import { z } from "zod";
2
+ import { apiGet, apiPost, getTailnet } from "../api.js";
3
+ export const dnsTools = [
4
+ {
5
+ name: "tailscale_get_nameservers",
6
+ description: "Get the DNS nameservers configured for your tailnet.",
7
+ inputSchema: z.object({}),
8
+ handler: async () => {
9
+ return apiGet(`/tailnet/${getTailnet()}/dns/nameservers`);
10
+ },
11
+ },
12
+ {
13
+ name: "tailscale_set_nameservers",
14
+ description: "Set the DNS nameservers for your tailnet.",
15
+ inputSchema: z.object({
16
+ dns: z.array(z.string()).describe("List of DNS server IP addresses (e.g. ['8.8.8.8', '1.1.1.1'])"),
17
+ }),
18
+ handler: async (input) => {
19
+ return apiPost(`/tailnet/${getTailnet()}/dns/nameservers`, { dns: input.dns });
20
+ },
21
+ },
22
+ {
23
+ name: "tailscale_get_search_paths",
24
+ description: "Get the DNS search paths configured for your tailnet.",
25
+ inputSchema: z.object({}),
26
+ handler: async () => {
27
+ return apiGet(`/tailnet/${getTailnet()}/dns/searchpaths`);
28
+ },
29
+ },
30
+ {
31
+ name: "tailscale_set_search_paths",
32
+ description: "Set the DNS search paths for your tailnet.",
33
+ inputSchema: z.object({
34
+ searchPaths: z.array(z.string()).describe("List of DNS search domains (e.g. ['example.com', 'internal.corp'])"),
35
+ }),
36
+ handler: async (input) => {
37
+ return apiPost(`/tailnet/${getTailnet()}/dns/searchpaths`, {
38
+ searchPaths: input.searchPaths,
39
+ });
40
+ },
41
+ },
42
+ {
43
+ name: "tailscale_get_split_dns",
44
+ description: "Get the split DNS configuration for your tailnet.",
45
+ inputSchema: z.object({}),
46
+ handler: async () => {
47
+ return apiGet(`/tailnet/${getTailnet()}/dns/split-dns`);
48
+ },
49
+ },
50
+ {
51
+ name: "tailscale_set_split_dns",
52
+ description: "Set split DNS configuration. Maps domains to specific nameservers.",
53
+ inputSchema: z.object({
54
+ splitDns: z
55
+ .record(z.string(), z.array(z.string()))
56
+ .describe("Map of domain to nameserver list (e.g. { \"corp.example.com\": [\"10.0.0.1\"], \"internal.dev\": [\"10.0.0.2\"] })"),
57
+ }),
58
+ handler: async (input) => {
59
+ return apiPost(`/tailnet/${getTailnet()}/dns/split-dns`, input.splitDns);
60
+ },
61
+ },
62
+ {
63
+ name: "tailscale_get_dns_preferences",
64
+ description: "Get DNS preferences for your tailnet, including whether MagicDNS is enabled.",
65
+ inputSchema: z.object({}),
66
+ handler: async () => {
67
+ return apiGet(`/tailnet/${getTailnet()}/dns/preferences`);
68
+ },
69
+ },
70
+ {
71
+ name: "tailscale_set_dns_preferences",
72
+ description: "Set DNS preferences for your tailnet, such as enabling or disabling MagicDNS.",
73
+ inputSchema: z.object({
74
+ magicDNS: z.boolean().describe("Whether to enable MagicDNS"),
75
+ }),
76
+ handler: async (input) => {
77
+ return apiPost(`/tailnet/${getTailnet()}/dns/preferences`, {
78
+ magicDNS: input.magicDNS,
79
+ });
80
+ },
81
+ },
82
+ ];
83
+ //# sourceMappingURL=dns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns.js","sourceRoot":"","sources":["../../src/tools/dns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { z } from "zod";
2
+ export declare const keyTools: readonly [{
3
+ readonly name: "tailscale_list_keys";
4
+ readonly description: "List all auth keys in your tailnet.";
5
+ readonly inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ readonly handler: () => Promise<import("../api.js").ApiResponse<unknown>>;
7
+ }, {
8
+ readonly name: "tailscale_get_key";
9
+ readonly description: "Get details for a specific auth key.";
10
+ readonly inputSchema: z.ZodObject<{
11
+ keyId: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ keyId: string;
14
+ }, {
15
+ keyId: string;
16
+ }>;
17
+ readonly handler: (input: {
18
+ keyId: string;
19
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
20
+ }, {
21
+ readonly name: "tailscale_create_key";
22
+ readonly description: "Create a new auth key for adding devices to your tailnet.";
23
+ readonly inputSchema: z.ZodObject<{
24
+ reusable: z.ZodOptional<z.ZodBoolean>;
25
+ ephemeral: z.ZodOptional<z.ZodBoolean>;
26
+ preauthorized: z.ZodOptional<z.ZodBoolean>;
27
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
28
+ expirySeconds: z.ZodOptional<z.ZodNumber>;
29
+ description: z.ZodOptional<z.ZodString>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ tags?: string[] | undefined;
32
+ reusable?: boolean | undefined;
33
+ ephemeral?: boolean | undefined;
34
+ preauthorized?: boolean | undefined;
35
+ expirySeconds?: number | undefined;
36
+ description?: string | undefined;
37
+ }, {
38
+ tags?: string[] | undefined;
39
+ reusable?: boolean | undefined;
40
+ ephemeral?: boolean | undefined;
41
+ preauthorized?: boolean | undefined;
42
+ expirySeconds?: number | undefined;
43
+ description?: string | undefined;
44
+ }>;
45
+ readonly handler: (input: {
46
+ reusable?: boolean;
47
+ ephemeral?: boolean;
48
+ preauthorized?: boolean;
49
+ tags?: string[];
50
+ expirySeconds?: number;
51
+ description?: string;
52
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
53
+ }, {
54
+ readonly name: "tailscale_delete_key";
55
+ readonly description: "Delete an auth key.";
56
+ readonly inputSchema: z.ZodObject<{
57
+ keyId: z.ZodString;
58
+ }, "strip", z.ZodTypeAny, {
59
+ keyId: string;
60
+ }, {
61
+ keyId: string;
62
+ }>;
63
+ readonly handler: (input: {
64
+ keyId: string;
65
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
66
+ }];
@@ -0,0 +1,64 @@
1
+ import { z } from "zod";
2
+ import { apiGet, apiPost, apiDelete, getTailnet } from "../api.js";
3
+ export const keyTools = [
4
+ {
5
+ name: "tailscale_list_keys",
6
+ description: "List all auth keys in your tailnet.",
7
+ inputSchema: z.object({}),
8
+ handler: async () => {
9
+ return apiGet(`/tailnet/${getTailnet()}/keys`);
10
+ },
11
+ },
12
+ {
13
+ name: "tailscale_get_key",
14
+ description: "Get details for a specific auth key.",
15
+ inputSchema: z.object({
16
+ keyId: z.string().describe("The auth key ID"),
17
+ }),
18
+ handler: async (input) => {
19
+ return apiGet(`/tailnet/${getTailnet()}/keys/${input.keyId}`);
20
+ },
21
+ },
22
+ {
23
+ name: "tailscale_create_key",
24
+ description: "Create a new auth key for adding devices to your tailnet.",
25
+ inputSchema: z.object({
26
+ reusable: z.boolean().optional().describe("Whether the key can be used more than once (default: false)"),
27
+ ephemeral: z.boolean().optional().describe("Whether devices using this key are ephemeral (default: false)"),
28
+ preauthorized: z.boolean().optional().describe("Whether devices are pre-authorized (default: false)"),
29
+ tags: z.array(z.string()).optional().describe("ACL tags to apply to devices using this key"),
30
+ expirySeconds: z.number().optional().describe("Key expiry in seconds (default: 90 days)"),
31
+ description: z.string().optional().describe("Description for this key"),
32
+ }),
33
+ handler: async (input) => {
34
+ const body = {
35
+ capabilities: {
36
+ devices: {
37
+ create: {
38
+ reusable: input.reusable ?? false,
39
+ ephemeral: input.ephemeral ?? false,
40
+ preauthorized: input.preauthorized ?? false,
41
+ tags: input.tags ?? [],
42
+ },
43
+ },
44
+ },
45
+ };
46
+ if (input.expirySeconds)
47
+ body.expirySeconds = input.expirySeconds;
48
+ if (input.description)
49
+ body.description = input.description;
50
+ return apiPost(`/tailnet/${getTailnet()}/keys`, body);
51
+ },
52
+ },
53
+ {
54
+ name: "tailscale_delete_key",
55
+ description: "Delete an auth key.",
56
+ inputSchema: z.object({
57
+ keyId: z.string().describe("The auth key ID to delete"),
58
+ }),
59
+ handler: async (input) => {
60
+ return apiDelete(`/tailnet/${getTailnet()}/keys/${input.keyId}`);
61
+ },
62
+ },
63
+ ];
64
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/tools/keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { z } from "zod";
2
+ export declare const networkLockTools: readonly [{
3
+ readonly name: "tailscale_get_tailnet_keys";
4
+ readonly description: "Get the tailnet's auth keys and their capabilities, including tailnet lock signing key information if tailnet lock is enabled.";
5
+ readonly inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ readonly handler: () => Promise<import("../api.js").ApiResponse<unknown>>;
7
+ }];
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ import { apiGet, getTailnet } from "../api.js";
3
+ export const networkLockTools = [
4
+ {
5
+ name: "tailscale_get_tailnet_keys",
6
+ description: "Get the tailnet's auth keys and their capabilities, including tailnet lock signing key information if tailnet lock is enabled.",
7
+ inputSchema: z.object({}),
8
+ handler: async () => {
9
+ return apiGet(`/tailnet/${getTailnet()}/keys`);
10
+ },
11
+ },
12
+ ];
13
+ //# sourceMappingURL=network-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-lock.js","sourceRoot":"","sources":["../../src/tools/network-lock.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,gBAAgB,GAAG;IAC9B;QACE,IAAI,EAAE,4BAA4B;QAClC,WAAW,EACT,gIAAgI;QAClI,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO,MAAM,CAAC,YAAY,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;KACF;CACO,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { z } from "zod";
2
+ export declare const postureTools: readonly [{
3
+ readonly name: "tailscale_list_posture_integrations";
4
+ readonly description: "List all device posture integrations configured for your tailnet.";
5
+ readonly inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ readonly handler: () => Promise<import("../api.js").ApiResponse<unknown>>;
7
+ }, {
8
+ readonly name: "tailscale_get_posture_integration";
9
+ readonly description: "Get details for a specific posture integration.";
10
+ readonly inputSchema: z.ZodObject<{
11
+ integrationId: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ integrationId: string;
14
+ }, {
15
+ integrationId: string;
16
+ }>;
17
+ readonly handler: (input: {
18
+ integrationId: string;
19
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
20
+ }, {
21
+ readonly name: "tailscale_create_posture_integration";
22
+ readonly description: "Create a new device posture integration.";
23
+ readonly inputSchema: z.ZodObject<{
24
+ provider: z.ZodString;
25
+ clientId: z.ZodString;
26
+ clientSecret: z.ZodString;
27
+ tenantId: z.ZodOptional<z.ZodString>;
28
+ cloudEnvironment: z.ZodOptional<z.ZodString>;
29
+ }, "strip", z.ZodTypeAny, {
30
+ provider: string;
31
+ clientId: string;
32
+ clientSecret: string;
33
+ tenantId?: string | undefined;
34
+ cloudEnvironment?: string | undefined;
35
+ }, {
36
+ provider: string;
37
+ clientId: string;
38
+ clientSecret: string;
39
+ tenantId?: string | undefined;
40
+ cloudEnvironment?: string | undefined;
41
+ }>;
42
+ readonly handler: (input: {
43
+ provider: string;
44
+ clientId: string;
45
+ clientSecret: string;
46
+ tenantId?: string;
47
+ cloudEnvironment?: string;
48
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
49
+ }, {
50
+ readonly name: "tailscale_delete_posture_integration";
51
+ readonly description: "Delete a posture integration.";
52
+ readonly inputSchema: z.ZodObject<{
53
+ integrationId: z.ZodString;
54
+ }, "strip", z.ZodTypeAny, {
55
+ integrationId: string;
56
+ }, {
57
+ integrationId: string;
58
+ }>;
59
+ readonly handler: (input: {
60
+ integrationId: string;
61
+ }) => Promise<import("../api.js").ApiResponse<unknown>>;
62
+ }];