tailscale-mcp 2026.3.16 → 2026.3.18
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/CHANGELOG.md +40 -0
- package/CLAUDE.md +3 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -58
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +51 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +96 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/diagnostics.d.ts +98 -0
- package/dist/tools/diagnostics.d.ts.map +1 -1
- package/dist/tools/diagnostics.js +121 -5
- package/dist/tools/diagnostics.js.map +1 -1
- package/dist/tools/tailnet.d.ts.map +1 -1
- package/dist/tools/tailnet.js +16 -2
- package/dist/tools/tailnet.js.map +1 -1
- package/dist/types.d.ts +27 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +12 -3
- package/server.json +6 -9
- package/.mcpregistry_github_token +0 -1
- package/.mcpregistry_registry_token +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,46 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
This project uses [Calendar Versioning](https://calver.org/) (`YYYY.MM.DD.TS`).
|
|
5
5
|
|
|
6
6
|
|
|
7
|
+
## v2026.03.17.1
|
|
8
|
+
|
|
9
|
+
- **Fix DERP map, log streaming, and tailnet lock 404 handling** (#42)
|
|
10
|
+
- Fix `tailscale_derp_map` to read from ACL policy's `derpMap` field instead of non-existent standalone endpoint
|
|
11
|
+
- Add `tailscale_derp_map_set` tool — sets custom DERP regions (IDs 900-999) by patching the ACL policy
|
|
12
|
+
- Handle 404 gracefully for `tailscale_log_stream_get` — returns "not configured" instead of error
|
|
13
|
+
- Handle 404 gracefully for `tailscale_tailnet_lock_status` — returns "not initialized" with CLI setup instructions
|
|
14
|
+
- Tool count: 48 → 49
|
|
15
|
+
- Tests: 199 → 205
|
|
16
|
+
|
|
17
|
+
## v2026.03.16.4
|
|
18
|
+
|
|
19
|
+
- **Add pre-publish security scan** (#39)
|
|
20
|
+
- Add `scripts/prepublish-check.js` — blocks `npm publish` if forbidden files (`.mcpregistry_*`, `.env`, `.pem`, `.key`, `credentials`) are in the tarball
|
|
21
|
+
- Add `prepublishOnly` npm hook: build + test + security scan before every publish
|
|
22
|
+
- Update `.npmignore` with comprehensive security exclusions
|
|
23
|
+
- Implements ADR-0026
|
|
24
|
+
|
|
25
|
+
## v2026.03.16.3
|
|
26
|
+
|
|
27
|
+
- **Plugin API: extract `createServer()` factory for enterprise extensibility** (#37)
|
|
28
|
+
- Add `src/types.ts` with `ToolHandler`, `ToolMiddleware`, and `ToolResult` types
|
|
29
|
+
- Add `src/server.ts` with `createServer()` factory supporting optional middleware
|
|
30
|
+
- Refactor `src/index.ts` to use `createServer()` internally (zero behavior change)
|
|
31
|
+
- Add `exports` map to `package.json` for subpath imports (`/server`, `/types`, `/client/*`, `/utils/*`, `/transport`)
|
|
32
|
+
- Add design doc `docs/plans/003-plugin-api.md`
|
|
33
|
+
- 199 unit tests (was 188)
|
|
34
|
+
|
|
35
|
+
## v2026.03.16.2
|
|
36
|
+
|
|
37
|
+
- Add ADR-0024 reference to `.gitignore` and MCP Registry Tokens entry to CLAUDE.md security section (#35)
|
|
38
|
+
|
|
39
|
+
## v2026.03.16.1
|
|
40
|
+
|
|
41
|
+
- Register on official MCP Registry as `io.github.itunified-io/tailscale` (#12)
|
|
42
|
+
- Add `server.json` metadata for MCP registry publishing
|
|
43
|
+
- Add `mcpName` field to package.json for registry validation
|
|
44
|
+
- Bump version to `2026.3.16`, publish `tailscale-mcp@2026.3.16` to npm
|
|
45
|
+
- Add `.mcpregistry_*` to `.gitignore`
|
|
46
|
+
|
|
7
47
|
## v2026.03.15.5
|
|
8
48
|
|
|
9
49
|
- Publish to npm as `tailscale-mcp`, add `.npmignore`, `bin` entry, expanded keywords (#12)
|
package/CLAUDE.md
CHANGED
|
@@ -86,6 +86,8 @@ docs/
|
|
|
86
86
|
- **Error handling**: No credential leaks in error messages (Bearer token never appears in logs or errors)
|
|
87
87
|
- **Credentials**: Never hardcoded, never logged, never in git
|
|
88
88
|
- **Secret Redaction — MANDATORY**: When using `grep`, `cat`, `sed`, `awk`, shell scripts, or any tool that reads/displays file contents containing secrets (`.env`, credentials, API keys, tokens, passwords), **ALWAYS redact the secret values** in output. Never display raw secret values in terminal output, logs, conversation context, or commit messages.
|
|
89
|
+
- **MCP Registry Tokens**: `.mcpregistry_*` files are gitignored (ADR-0024) AND npmignored. Never commit or publish registry auth tokens.
|
|
90
|
+
- **Pre-Publish Security Scan — MANDATORY** (ADR-0026): `prepublishOnly` hook runs `scripts/prepublish-check.js` before every `npm publish`. Blocks publish if forbidden files (`.mcpregistry_*`, `.env`, `.pem`, `.key`, `credentials`) are in the tarball. Never bypass with `--ignore-scripts`.
|
|
89
91
|
- **Public Repo Documentation Policy — MANDATORY**: This is a **public repository**. All documentation, code examples, test data, and commit messages MUST use only generic placeholders:
|
|
90
92
|
- Tailnet names: `your-tailnet-name`, `example.com`
|
|
91
93
|
- Device IDs: `123456789`
|
|
@@ -131,6 +133,7 @@ docs/
|
|
|
131
133
|
- Ensure `npm run build` succeeds before publishing
|
|
132
134
|
- Verify with `npm view tailscale-mcp version` after publishing
|
|
133
135
|
- Auth: granular access token set via `npm config set //registry.npmjs.org/:_authToken TOKEN`
|
|
136
|
+
- **`.npmignore` MUST exclude** `.mcpregistry_*` files (ADR-0024) — verify before every publish that tokens are not in tarball
|
|
134
137
|
|
|
135
138
|
## Git Workflow
|
|
136
139
|
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/dist/index.js
CHANGED
|
@@ -1,65 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* CLI entry point for mcp-tailscale.
|
|
3
|
+
* Uses createServer() factory and connects the appropriate transport.
|
|
4
|
+
*/
|
|
2
5
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
6
|
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
|
|
4
7
|
import express from "express";
|
|
5
8
|
import { validateTransportConfig, createAuthMiddleware } from "./transport.js";
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
import { deviceToolDefinitions, handleDeviceTool } from "./tools/devices.js";
|
|
9
|
-
import { dnsToolDefinitions, handleDnsTool } from "./tools/dns.js";
|
|
10
|
-
import { aclToolDefinitions, handleAclTool } from "./tools/acl.js";
|
|
11
|
-
import { keyToolDefinitions, handleKeyTool } from "./tools/keys.js";
|
|
12
|
-
import { tailnetToolDefinitions, handleTailnetTool } from "./tools/tailnet.js";
|
|
13
|
-
import { diagnosticsToolDefinitions, handleDiagnosticsTool } from "./tools/diagnostics.js";
|
|
14
|
-
import { userToolDefinitions, handleUserTool } from "./tools/users.js";
|
|
15
|
-
import { webhookToolDefinitions, handleWebhookTool } from "./tools/webhooks.js";
|
|
16
|
-
import { postureToolDefinitions, handlePostureTool } from "./tools/posture.js";
|
|
17
|
-
const allToolDefinitions = [
|
|
18
|
-
...deviceToolDefinitions,
|
|
19
|
-
...dnsToolDefinitions,
|
|
20
|
-
...aclToolDefinitions,
|
|
21
|
-
...keyToolDefinitions,
|
|
22
|
-
...tailnetToolDefinitions,
|
|
23
|
-
...diagnosticsToolDefinitions,
|
|
24
|
-
...userToolDefinitions,
|
|
25
|
-
...webhookToolDefinitions,
|
|
26
|
-
...postureToolDefinitions,
|
|
27
|
-
];
|
|
28
|
-
const toolHandlers = new Map();
|
|
29
|
-
for (const def of deviceToolDefinitions)
|
|
30
|
-
toolHandlers.set(def.name, handleDeviceTool);
|
|
31
|
-
for (const def of dnsToolDefinitions)
|
|
32
|
-
toolHandlers.set(def.name, handleDnsTool);
|
|
33
|
-
for (const def of aclToolDefinitions)
|
|
34
|
-
toolHandlers.set(def.name, handleAclTool);
|
|
35
|
-
for (const def of keyToolDefinitions)
|
|
36
|
-
toolHandlers.set(def.name, handleKeyTool);
|
|
37
|
-
for (const def of tailnetToolDefinitions)
|
|
38
|
-
toolHandlers.set(def.name, handleTailnetTool);
|
|
39
|
-
for (const def of diagnosticsToolDefinitions)
|
|
40
|
-
toolHandlers.set(def.name, handleDiagnosticsTool);
|
|
41
|
-
for (const def of userToolDefinitions)
|
|
42
|
-
toolHandlers.set(def.name, handleUserTool);
|
|
43
|
-
for (const def of webhookToolDefinitions)
|
|
44
|
-
toolHandlers.set(def.name, handleWebhookTool);
|
|
45
|
-
for (const def of postureToolDefinitions)
|
|
46
|
-
toolHandlers.set(def.name, handlePostureTool);
|
|
47
|
-
const server = new Server({ name: "mcp-tailscale", version: "2026.3.14" }, { capabilities: { tools: {} } });
|
|
48
|
-
const client = createClientFromEnv();
|
|
49
|
-
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
50
|
-
tools: allToolDefinitions,
|
|
51
|
-
}));
|
|
52
|
-
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
53
|
-
const { name, arguments: args } = request.params;
|
|
54
|
-
const handler = toolHandlers.get(name);
|
|
55
|
-
if (!handler) {
|
|
56
|
-
return {
|
|
57
|
-
content: [{ type: "text", text: `Unknown tool: ${name}` }],
|
|
58
|
-
isError: true,
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
return handler(name, (args ?? {}), client);
|
|
62
|
-
});
|
|
9
|
+
import { createServer } from "./server.js";
|
|
10
|
+
const { server } = createServer();
|
|
63
11
|
async function main() {
|
|
64
12
|
const config = validateTransportConfig(process.env);
|
|
65
13
|
if (config.mode === "stdio") {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;AAElC,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,GAAyC,CAAC,CAAC;IAE1F,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;QACtB,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAEhD,+DAA+D;QAC/D,MAAM,aAAa,GAAG,IAAI,GAAG,EAA8B,CAAC;QAE5D,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,IAAI,kBAAkB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YAC3D,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAElD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACnB,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAQ,EAAE,GAAQ,EAAE,EAAE;YACjD,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,SAAmB,CAAC;YAChD,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBACzD,OAAO;YACT,CAAC;YACD,MAAM,SAAS,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACxC,OAAO,CAAC,KAAK,CAAC,+BAA+B,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server factory for mcp-tailscale.
|
|
3
|
+
* Creates an MCP server with all Tailscale tools registered.
|
|
4
|
+
* Supports optional middleware for enterprise extensions (audit, RBAC, etc.).
|
|
5
|
+
*/
|
|
6
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
7
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
+
import type { ITailscaleClient } from "./client/types.js";
|
|
9
|
+
import type { ToolHandler, ToolMiddleware } from "./types.js";
|
|
10
|
+
/**
|
|
11
|
+
* Options for creating an MCP Tailscale server.
|
|
12
|
+
*/
|
|
13
|
+
export interface CreateServerOptions {
|
|
14
|
+
/** Optional middleware to intercept all tool calls (for audit, RBAC, etc.) */
|
|
15
|
+
middleware?: ToolMiddleware;
|
|
16
|
+
/** Server name (default: "mcp-tailscale") */
|
|
17
|
+
name?: string;
|
|
18
|
+
/** Server version (default: "2026.3.18") */
|
|
19
|
+
version?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Result from createServer().
|
|
23
|
+
*/
|
|
24
|
+
export interface CreateServerResult {
|
|
25
|
+
/** The MCP server instance, ready to connect a transport */
|
|
26
|
+
server: Server;
|
|
27
|
+
/** The Tailscale API client */
|
|
28
|
+
client: ITailscaleClient;
|
|
29
|
+
/** All 49 tool definitions */
|
|
30
|
+
allToolDefinitions: Tool[];
|
|
31
|
+
/** Map of tool name → handler function */
|
|
32
|
+
toolHandlers: Map<string, ToolHandler>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create an MCP server with all Tailscale tools registered.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // Basic usage (identical to running `npx tailscale-mcp`)
|
|
39
|
+
* const { server } = createServer();
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* // With enterprise middleware
|
|
43
|
+
* const { server } = createServer({
|
|
44
|
+
* middleware: async (name, args, client, next) => {
|
|
45
|
+
* console.log(`Tool called: ${name}`);
|
|
46
|
+
* return next(name, args, client);
|
|
47
|
+
* },
|
|
48
|
+
* });
|
|
49
|
+
*/
|
|
50
|
+
export declare function createServer(options?: CreateServerOptions): CreateServerResult;
|
|
51
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwB9D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,8EAA8E;IAC9E,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,8BAA8B;IAC9B,kBAAkB,EAAE,IAAI,EAAE,CAAC;IAC3B,0CAA0C;IAC1C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACxC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,kBAAkB,CAgFpB"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server factory for mcp-tailscale.
|
|
3
|
+
* Creates an MCP server with all Tailscale tools registered.
|
|
4
|
+
* Supports optional middleware for enterprise extensions (audit, RBAC, etc.).
|
|
5
|
+
*/
|
|
6
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
7
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
+
import { createClientFromEnv } from "./client/client-factory.js";
|
|
9
|
+
import { deviceToolDefinitions, handleDeviceTool } from "./tools/devices.js";
|
|
10
|
+
import { dnsToolDefinitions, handleDnsTool } from "./tools/dns.js";
|
|
11
|
+
import { aclToolDefinitions, handleAclTool } from "./tools/acl.js";
|
|
12
|
+
import { keyToolDefinitions, handleKeyTool } from "./tools/keys.js";
|
|
13
|
+
import { tailnetToolDefinitions, handleTailnetTool, } from "./tools/tailnet.js";
|
|
14
|
+
import { diagnosticsToolDefinitions, handleDiagnosticsTool, } from "./tools/diagnostics.js";
|
|
15
|
+
import { userToolDefinitions, handleUserTool } from "./tools/users.js";
|
|
16
|
+
import { webhookToolDefinitions, handleWebhookTool, } from "./tools/webhooks.js";
|
|
17
|
+
import { postureToolDefinitions, handlePostureTool, } from "./tools/posture.js";
|
|
18
|
+
/**
|
|
19
|
+
* Create an MCP server with all Tailscale tools registered.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* // Basic usage (identical to running `npx tailscale-mcp`)
|
|
23
|
+
* const { server } = createServer();
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // With enterprise middleware
|
|
27
|
+
* const { server } = createServer({
|
|
28
|
+
* middleware: async (name, args, client, next) => {
|
|
29
|
+
* console.log(`Tool called: ${name}`);
|
|
30
|
+
* return next(name, args, client);
|
|
31
|
+
* },
|
|
32
|
+
* });
|
|
33
|
+
*/
|
|
34
|
+
export function createServer(options) {
|
|
35
|
+
const { middleware, name = "mcp-tailscale", version = "2026.3.18", } = options ?? {};
|
|
36
|
+
// Assemble all tool definitions
|
|
37
|
+
const allToolDefinitions = [
|
|
38
|
+
...deviceToolDefinitions,
|
|
39
|
+
...dnsToolDefinitions,
|
|
40
|
+
...aclToolDefinitions,
|
|
41
|
+
...keyToolDefinitions,
|
|
42
|
+
...tailnetToolDefinitions,
|
|
43
|
+
...diagnosticsToolDefinitions,
|
|
44
|
+
...userToolDefinitions,
|
|
45
|
+
...webhookToolDefinitions,
|
|
46
|
+
...postureToolDefinitions,
|
|
47
|
+
];
|
|
48
|
+
// Build tool handler map
|
|
49
|
+
const toolHandlers = new Map();
|
|
50
|
+
for (const def of deviceToolDefinitions)
|
|
51
|
+
toolHandlers.set(def.name, handleDeviceTool);
|
|
52
|
+
for (const def of dnsToolDefinitions)
|
|
53
|
+
toolHandlers.set(def.name, handleDnsTool);
|
|
54
|
+
for (const def of aclToolDefinitions)
|
|
55
|
+
toolHandlers.set(def.name, handleAclTool);
|
|
56
|
+
for (const def of keyToolDefinitions)
|
|
57
|
+
toolHandlers.set(def.name, handleKeyTool);
|
|
58
|
+
for (const def of tailnetToolDefinitions)
|
|
59
|
+
toolHandlers.set(def.name, handleTailnetTool);
|
|
60
|
+
for (const def of diagnosticsToolDefinitions)
|
|
61
|
+
toolHandlers.set(def.name, handleDiagnosticsTool);
|
|
62
|
+
for (const def of userToolDefinitions)
|
|
63
|
+
toolHandlers.set(def.name, handleUserTool);
|
|
64
|
+
for (const def of webhookToolDefinitions)
|
|
65
|
+
toolHandlers.set(def.name, handleWebhookTool);
|
|
66
|
+
for (const def of postureToolDefinitions)
|
|
67
|
+
toolHandlers.set(def.name, handlePostureTool);
|
|
68
|
+
// Create Tailscale API client
|
|
69
|
+
const client = createClientFromEnv();
|
|
70
|
+
// Create MCP server
|
|
71
|
+
const server = new Server({ name, version }, { capabilities: { tools: {} } });
|
|
72
|
+
// Register ListTools handler
|
|
73
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
74
|
+
tools: allToolDefinitions,
|
|
75
|
+
}));
|
|
76
|
+
// Register CallTools handler (with optional middleware)
|
|
77
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
78
|
+
const { name: toolName, arguments: args } = request.params;
|
|
79
|
+
const handler = toolHandlers.get(toolName);
|
|
80
|
+
if (!handler) {
|
|
81
|
+
return {
|
|
82
|
+
content: [
|
|
83
|
+
{ type: "text", text: `Unknown tool: ${toolName}` },
|
|
84
|
+
],
|
|
85
|
+
isError: true,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const typedArgs = (args ?? {});
|
|
89
|
+
if (middleware) {
|
|
90
|
+
return middleware(toolName, typedArgs, client, handler);
|
|
91
|
+
}
|
|
92
|
+
return handler(toolName, typedArgs, client);
|
|
93
|
+
});
|
|
94
|
+
return { server, client, allToolDefinitions, toolHandlers };
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ export declare const diagnosticsToolDefinitions: ({
|
|
|
9
9
|
destinationType?: undefined;
|
|
10
10
|
url?: undefined;
|
|
11
11
|
confirm?: undefined;
|
|
12
|
+
regions?: undefined;
|
|
13
|
+
omitDefaultRegions?: undefined;
|
|
12
14
|
};
|
|
13
15
|
required?: undefined;
|
|
14
16
|
};
|
|
@@ -26,6 +28,8 @@ export declare const diagnosticsToolDefinitions: ({
|
|
|
26
28
|
destinationType?: undefined;
|
|
27
29
|
url?: undefined;
|
|
28
30
|
confirm?: undefined;
|
|
31
|
+
regions?: undefined;
|
|
32
|
+
omitDefaultRegions?: undefined;
|
|
29
33
|
};
|
|
30
34
|
required: string[];
|
|
31
35
|
};
|
|
@@ -52,6 +56,100 @@ export declare const diagnosticsToolDefinitions: ({
|
|
|
52
56
|
type: string;
|
|
53
57
|
description: string;
|
|
54
58
|
};
|
|
59
|
+
regions?: undefined;
|
|
60
|
+
omitDefaultRegions?: undefined;
|
|
61
|
+
};
|
|
62
|
+
required: string[];
|
|
63
|
+
};
|
|
64
|
+
} | {
|
|
65
|
+
name: string;
|
|
66
|
+
description: string;
|
|
67
|
+
inputSchema: {
|
|
68
|
+
type: "object";
|
|
69
|
+
properties: {
|
|
70
|
+
regions: {
|
|
71
|
+
type: string;
|
|
72
|
+
description: string;
|
|
73
|
+
additionalProperties: {
|
|
74
|
+
type: string;
|
|
75
|
+
properties: {
|
|
76
|
+
regionId: {
|
|
77
|
+
type: string;
|
|
78
|
+
description: string;
|
|
79
|
+
};
|
|
80
|
+
regionCode: {
|
|
81
|
+
type: string;
|
|
82
|
+
description: string;
|
|
83
|
+
};
|
|
84
|
+
regionName: {
|
|
85
|
+
type: string;
|
|
86
|
+
description: string;
|
|
87
|
+
};
|
|
88
|
+
avoid: {
|
|
89
|
+
type: string;
|
|
90
|
+
description: string;
|
|
91
|
+
};
|
|
92
|
+
nodes: {
|
|
93
|
+
type: string;
|
|
94
|
+
description: string;
|
|
95
|
+
items: {
|
|
96
|
+
type: string;
|
|
97
|
+
properties: {
|
|
98
|
+
name: {
|
|
99
|
+
type: string;
|
|
100
|
+
description: string;
|
|
101
|
+
};
|
|
102
|
+
regionId: {
|
|
103
|
+
type: string;
|
|
104
|
+
description: string;
|
|
105
|
+
};
|
|
106
|
+
hostName: {
|
|
107
|
+
type: string;
|
|
108
|
+
description: string;
|
|
109
|
+
};
|
|
110
|
+
certName: {
|
|
111
|
+
type: string;
|
|
112
|
+
description: string;
|
|
113
|
+
};
|
|
114
|
+
ipv4: {
|
|
115
|
+
type: string;
|
|
116
|
+
description: string;
|
|
117
|
+
};
|
|
118
|
+
ipv6: {
|
|
119
|
+
type: string;
|
|
120
|
+
description: string;
|
|
121
|
+
};
|
|
122
|
+
stunPort: {
|
|
123
|
+
type: string;
|
|
124
|
+
description: string;
|
|
125
|
+
};
|
|
126
|
+
stunOnly: {
|
|
127
|
+
type: string;
|
|
128
|
+
description: string;
|
|
129
|
+
};
|
|
130
|
+
derpPort: {
|
|
131
|
+
type: string;
|
|
132
|
+
description: string;
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
required: string[];
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
required: string[];
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
omitDefaultRegions: {
|
|
143
|
+
type: string;
|
|
144
|
+
description: string;
|
|
145
|
+
};
|
|
146
|
+
confirm: {
|
|
147
|
+
type: string;
|
|
148
|
+
description: string;
|
|
149
|
+
};
|
|
150
|
+
logType?: undefined;
|
|
151
|
+
destinationType?: undefined;
|
|
152
|
+
url?: undefined;
|
|
55
153
|
};
|
|
56
154
|
required: string[];
|
|
57
155
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/tools/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/tools/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAgE3D,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4HtC,CAAC;AAMF,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAoJ7D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { TailscaleApiError } from "../utils/errors.js";
|
|
2
3
|
// ---------------------------------------------------------------------------
|
|
3
4
|
// Zod schemas for input validation
|
|
4
5
|
// ---------------------------------------------------------------------------
|
|
@@ -20,6 +21,29 @@ const LogStreamSetSchema = z.object({
|
|
|
20
21
|
}),
|
|
21
22
|
});
|
|
22
23
|
const DerpMapSchema = z.object({});
|
|
24
|
+
const DerpMapSetSchema = z.object({
|
|
25
|
+
regions: z.record(z.string(), z.object({
|
|
26
|
+
regionId: z.number().int().positive(),
|
|
27
|
+
regionCode: z.string().min(1),
|
|
28
|
+
regionName: z.string().min(1),
|
|
29
|
+
avoid: z.boolean().optional(),
|
|
30
|
+
nodes: z.array(z.object({
|
|
31
|
+
name: z.string().min(1),
|
|
32
|
+
regionId: z.number().int().positive(),
|
|
33
|
+
hostName: z.string().min(1),
|
|
34
|
+
certName: z.string().optional(),
|
|
35
|
+
ipv4: z.string().optional(),
|
|
36
|
+
ipv6: z.string().optional(),
|
|
37
|
+
stunPort: z.number().int().optional(),
|
|
38
|
+
stunOnly: z.boolean().optional(),
|
|
39
|
+
derpPort: z.number().int().optional(),
|
|
40
|
+
})),
|
|
41
|
+
})),
|
|
42
|
+
omitDefaultRegions: z.boolean().optional(),
|
|
43
|
+
confirm: z.literal(true, {
|
|
44
|
+
errorMap: () => ({ message: "confirm must be true to update the DERP map" }),
|
|
45
|
+
}),
|
|
46
|
+
});
|
|
23
47
|
// ---------------------------------------------------------------------------
|
|
24
48
|
// Tool definitions (for ListTools)
|
|
25
49
|
// ---------------------------------------------------------------------------
|
|
@@ -84,12 +108,63 @@ export const diagnosticsToolDefinitions = [
|
|
|
84
108
|
},
|
|
85
109
|
{
|
|
86
110
|
name: "tailscale_derp_map",
|
|
87
|
-
description: "Get the DERP relay map
|
|
111
|
+
description: "Get the custom DERP relay map from the tailnet's ACL policy. Returns the derpMap field from the ACL, or a 'not configured' message if no custom DERP map exists.",
|
|
88
112
|
inputSchema: {
|
|
89
113
|
type: "object",
|
|
90
114
|
properties: {},
|
|
91
115
|
},
|
|
92
116
|
},
|
|
117
|
+
{
|
|
118
|
+
name: "tailscale_derp_map_set",
|
|
119
|
+
description: "Set or update the custom DERP relay map in the tailnet's ACL policy. Requires confirm: true. Custom DERP regions use IDs 900-999. Set omitDefaultRegions: true to replace Tailscale's default relays entirely.",
|
|
120
|
+
inputSchema: {
|
|
121
|
+
type: "object",
|
|
122
|
+
properties: {
|
|
123
|
+
regions: {
|
|
124
|
+
type: "object",
|
|
125
|
+
description: "Map of region ID (string) to region config. Custom regions should use IDs 900-999.",
|
|
126
|
+
additionalProperties: {
|
|
127
|
+
type: "object",
|
|
128
|
+
properties: {
|
|
129
|
+
regionId: { type: "number", description: "Region ID (900-999 for custom)" },
|
|
130
|
+
regionCode: { type: "string", description: "Short region code (e.g., 'mydc')" },
|
|
131
|
+
regionName: { type: "string", description: "Human-readable region name" },
|
|
132
|
+
avoid: { type: "boolean", description: "If true, avoid using this region" },
|
|
133
|
+
nodes: {
|
|
134
|
+
type: "array",
|
|
135
|
+
description: "DERP nodes in this region",
|
|
136
|
+
items: {
|
|
137
|
+
type: "object",
|
|
138
|
+
properties: {
|
|
139
|
+
name: { type: "string", description: "Node name" },
|
|
140
|
+
regionId: { type: "number", description: "Must match parent region" },
|
|
141
|
+
hostName: { type: "string", description: "DERP server hostname" },
|
|
142
|
+
certName: { type: "string", description: "TLS cert name if different from hostName" },
|
|
143
|
+
ipv4: { type: "string", description: "IPv4 address" },
|
|
144
|
+
ipv6: { type: "string", description: "IPv6 address" },
|
|
145
|
+
stunPort: { type: "number", description: "STUN port (default 3478)" },
|
|
146
|
+
stunOnly: { type: "boolean", description: "If true, only use for STUN" },
|
|
147
|
+
derpPort: { type: "number", description: "DERP port (default 443)" },
|
|
148
|
+
},
|
|
149
|
+
required: ["name", "regionId", "hostName"],
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
required: ["regionId", "regionCode", "regionName", "nodes"],
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
omitDefaultRegions: {
|
|
157
|
+
type: "boolean",
|
|
158
|
+
description: "If true, omit Tailscale's default DERP regions and use only custom ones",
|
|
159
|
+
},
|
|
160
|
+
confirm: {
|
|
161
|
+
type: "boolean",
|
|
162
|
+
description: "Must be true to confirm the DERP map update",
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
required: ["regions", "confirm"],
|
|
166
|
+
},
|
|
167
|
+
},
|
|
93
168
|
];
|
|
94
169
|
// ---------------------------------------------------------------------------
|
|
95
170
|
// Tool handler
|
|
@@ -146,8 +221,21 @@ export async function handleDiagnosticsTool(name, args, client) {
|
|
|
146
221
|
}
|
|
147
222
|
case "tailscale_log_stream_get": {
|
|
148
223
|
const parsed = LogStreamGetSchema.parse(args);
|
|
149
|
-
|
|
150
|
-
|
|
224
|
+
try {
|
|
225
|
+
const result = await client.get(`/tailnet/${client.tailnet}/logging/${parsed.logType}/stream`);
|
|
226
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
if (err instanceof TailscaleApiError && err.status === 404 ||
|
|
230
|
+
err instanceof Error && err.message.includes("404")) {
|
|
231
|
+
return { content: [{ type: "text", text: JSON.stringify({
|
|
232
|
+
configured: false,
|
|
233
|
+
logType: parsed.logType,
|
|
234
|
+
message: `No log streaming configured for '${parsed.logType}' logs. Configure via the Tailscale admin console (https://login.tailscale.com/admin/logs) or use tailscale_log_stream_set to set a streaming destination.`,
|
|
235
|
+
}, null, 2) }] };
|
|
236
|
+
}
|
|
237
|
+
throw err;
|
|
238
|
+
}
|
|
151
239
|
}
|
|
152
240
|
case "tailscale_log_stream_set": {
|
|
153
241
|
const parsed = LogStreamSetSchema.parse(args);
|
|
@@ -159,8 +247,36 @@ export async function handleDiagnosticsTool(name, args, client) {
|
|
|
159
247
|
}
|
|
160
248
|
case "tailscale_derp_map": {
|
|
161
249
|
DerpMapSchema.parse(args);
|
|
162
|
-
|
|
163
|
-
|
|
250
|
+
// DERP map is managed through the ACL policy's derpMap field
|
|
251
|
+
const acl = await client.get(`/tailnet/${client.tailnet}/acl`);
|
|
252
|
+
if (acl.derpMap) {
|
|
253
|
+
return { content: [{ type: "text", text: JSON.stringify({
|
|
254
|
+
source: "acl-policy",
|
|
255
|
+
derpMap: acl.derpMap,
|
|
256
|
+
}, null, 2) }] };
|
|
257
|
+
}
|
|
258
|
+
return { content: [{ type: "text", text: JSON.stringify({
|
|
259
|
+
configured: false,
|
|
260
|
+
message: "No custom DERP map configured in ACL policy. The tailnet uses Tailscale's default DERP relay regions. To add custom DERP servers, use tailscale_derp_map_set with regions using IDs 900-999.",
|
|
261
|
+
}, null, 2) }] };
|
|
262
|
+
}
|
|
263
|
+
case "tailscale_derp_map_set": {
|
|
264
|
+
const parsed = DerpMapSetSchema.parse(args);
|
|
265
|
+
// Read current ACL, patch derpMap, write back
|
|
266
|
+
const currentAcl = await client.get(`/tailnet/${client.tailnet}/acl`);
|
|
267
|
+
const derpMap = {
|
|
268
|
+
Regions: parsed.regions,
|
|
269
|
+
};
|
|
270
|
+
if (parsed.omitDefaultRegions !== undefined) {
|
|
271
|
+
derpMap["OmitDefaultRegions"] = parsed.omitDefaultRegions;
|
|
272
|
+
}
|
|
273
|
+
const updatedAcl = { ...currentAcl, derpMap };
|
|
274
|
+
const result = await client.post(`/tailnet/${client.tailnet}/acl`, updatedAcl);
|
|
275
|
+
return { content: [{ type: "text", text: JSON.stringify({
|
|
276
|
+
message: "DERP map updated in ACL policy",
|
|
277
|
+
derpMap,
|
|
278
|
+
aclUpdated: true,
|
|
279
|
+
}, null, 2) }] };
|
|
164
280
|
}
|
|
165
281
|
default:
|
|
166
282
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/tools/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/tools/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailnet.d.ts","sourceRoot":"","sources":["../../src/tools/tailnet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tailnet.d.ts","sourceRoot":"","sources":["../../src/tools/tailnet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAyD3D,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkHlC,CAAC;AAMF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAiF7D"}
|
package/dist/tools/tailnet.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { TailscaleApiError } from "../utils/errors.js";
|
|
2
3
|
// ---------------------------------------------------------------------------
|
|
3
4
|
// Zod schemas for input validation
|
|
4
5
|
// ---------------------------------------------------------------------------
|
|
@@ -181,8 +182,21 @@ export async function handleTailnetTool(name, args, client) {
|
|
|
181
182
|
}
|
|
182
183
|
case "tailscale_tailnet_lock_status": {
|
|
183
184
|
TailnetLockStatusSchema.parse(args);
|
|
184
|
-
|
|
185
|
-
|
|
185
|
+
try {
|
|
186
|
+
const result = await client.get(`/tailnet/${client.tailnet}/lock/status`);
|
|
187
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
if (err instanceof TailscaleApiError && err.status === 404 ||
|
|
191
|
+
err instanceof Error && err.message.includes("404")) {
|
|
192
|
+
return { content: [{ type: "text", text: JSON.stringify({
|
|
193
|
+
enabled: false,
|
|
194
|
+
initialized: false,
|
|
195
|
+
message: "Tailnet Lock is not initialized. Tailnet Lock requires CLI setup — it cannot be enabled via API. Steps: (1) Run 'tailscale lock init' on a trusted device, (2) Sign existing nodes with 'tailscale lock sign', (3) Status will then be available via this tool. See https://tailscale.com/kb/1226/tailnet-lock for details.",
|
|
196
|
+
}, null, 2) }] };
|
|
197
|
+
}
|
|
198
|
+
throw err;
|
|
199
|
+
}
|
|
186
200
|
}
|
|
187
201
|
case "tailscale_tailnet_settings_update": {
|
|
188
202
|
const parsed = TailnetSettingsUpdateSchema.parse(args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tailnet.js","sourceRoot":"","sources":["../../src/tools/tailnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tailnet.js","sourceRoot":"","sources":["../../src/tools/tailnet.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for MCP tool handling and middleware.
|
|
3
|
+
* Used by the core server and enterprise extensions.
|
|
4
|
+
*/
|
|
5
|
+
import type { ITailscaleClient } from "./client/types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Result returned by a tool handler.
|
|
8
|
+
*/
|
|
9
|
+
export type ToolResult = {
|
|
10
|
+
content: Array<{
|
|
11
|
+
type: "text";
|
|
12
|
+
text: string;
|
|
13
|
+
}>;
|
|
14
|
+
isError?: boolean;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Handler function for a single MCP tool.
|
|
18
|
+
* Receives the tool name, validated arguments, and Tailscale client.
|
|
19
|
+
*/
|
|
20
|
+
export type ToolHandler = (name: string, args: Record<string, unknown>, client: ITailscaleClient) => Promise<ToolResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Middleware that intercepts tool calls before/after execution.
|
|
23
|
+
* Call `next(name, args, client)` to continue to the actual handler.
|
|
24
|
+
* Enterprise uses this for audit logging, RBAC, policy enforcement, etc.
|
|
25
|
+
*/
|
|
26
|
+
export type ToolMiddleware = (name: string, args: Record<string, unknown>, client: ITailscaleClient, next: ToolHandler) => Promise<ToolResult>;
|
|
27
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,gBAAgB,KACrB,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,WAAW,KACd,OAAO,CAAC,UAAU,CAAC,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tailscale-mcp",
|
|
3
3
|
"mcpName": "io.github.itunified-io/tailscale",
|
|
4
|
-
"version": "2026.3.
|
|
5
|
-
"description": "Secure MCP access for private infrastructure over Tailscale —
|
|
4
|
+
"version": "2026.3.18",
|
|
5
|
+
"description": "Secure MCP access for private infrastructure over Tailscale — 49 tools for devices, DNS, ACL, keys, users, webhooks, posture, and tailnet management via Tailscale API v2",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./dist/index.js",
|
|
10
|
+
"./server": "./dist/server.js",
|
|
11
|
+
"./types": "./dist/types.js",
|
|
12
|
+
"./client/*": "./dist/client/*.js",
|
|
13
|
+
"./utils/*": "./dist/utils/*.js",
|
|
14
|
+
"./transport": "./dist/transport.js"
|
|
15
|
+
},
|
|
8
16
|
"bin": {
|
|
9
17
|
"mcp-tailscale": "dist/index.js"
|
|
10
18
|
},
|
|
@@ -13,7 +21,8 @@
|
|
|
13
21
|
"test": "vitest run",
|
|
14
22
|
"dev": "tsc --watch",
|
|
15
23
|
"start": "node dist/index.js",
|
|
16
|
-
"typecheck": "tsc --noEmit"
|
|
24
|
+
"typecheck": "tsc --noEmit",
|
|
25
|
+
"prepublishOnly": "npm run build && npm test && node scripts/prepublish-check.js"
|
|
17
26
|
},
|
|
18
27
|
"repository": {
|
|
19
28
|
"type": "git",
|
package/server.json
CHANGED
|
@@ -3,23 +3,20 @@
|
|
|
3
3
|
"name": "io.github.itunified-io/tailscale",
|
|
4
4
|
"title": "Tailscale MCP Server",
|
|
5
5
|
"description": "Secure MCP access for private infrastructure over Tailscale — 48 tools across 9 domains",
|
|
6
|
+
"version": "2026.3.16",
|
|
6
7
|
"repository": {
|
|
7
8
|
"url": "https://github.com/itunified-io/mcp-tailscale",
|
|
8
9
|
"source": "github"
|
|
9
10
|
},
|
|
10
|
-
"version_detail": {
|
|
11
|
-
"version": "2026.3.15",
|
|
12
|
-
"release_date": "2026-03-15"
|
|
13
|
-
},
|
|
14
11
|
"packages": [
|
|
15
12
|
{
|
|
16
13
|
"registryType": "npm",
|
|
17
14
|
"identifier": "tailscale-mcp",
|
|
18
|
-
"version": "2026.3.
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
15
|
+
"version": "2026.3.16",
|
|
16
|
+
"runtimeHint": "npx",
|
|
17
|
+
"runtimeArguments": [],
|
|
18
|
+
"packageArguments": [],
|
|
19
|
+
"environmentVariables": [
|
|
23
20
|
{
|
|
24
21
|
"name": "TAILSCALE_API_KEY",
|
|
25
22
|
"description": "Tailscale API key",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ghu_7si3hZcRXM5oe8ZNBuynQHUWZa54CB4Jt0WS
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"token":"eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJtY3AtcmVnaXN0cnkiLCJleHAiOjE3NzM1NjU0MjksIm5iZiI6MTc3MzU2NTEyOSwiaWF0IjoxNzczNTY1MTI5LCJhdXRoX21ldGhvZCI6ImdpdGh1Yi1hdCIsImF1dGhfbWV0aG9kX3N1YiI6Iml0dW5pZmllZC1idWVjaGVsZWIiLCJwZXJtaXNzaW9ucyI6W3siYWN0aW9uIjoicHVibGlzaCIsInJlc291cmNlIjoiaW8uZ2l0aHViLml0dW5pZmllZC1idWVjaGVsZWIvKiJ9LHsiYWN0aW9uIjoicHVibGlzaCIsInJlc291cmNlIjoiaW8uZ2l0aHViLml0dW5pZmllZC8qIn0seyJhY3Rpb24iOiJwdWJsaXNoIiwicmVzb3VyY2UiOiJpby5naXRodWIuaXR1bmlmaWVkLWlvLyoifV19.h2qb1P7ArenWZNrHffxwHTLH5uujGs_GXTvBxE4nap-yIYRx_LL_OERCx5dLj4FtJfQ5w7Eblyv1udtxMl4cCg","expires_at":1773565429}
|