{"_id":"@hexsleeves/tailscale-mcp-server","_rev":"15-88f10c7c2516912fcd1793db27d5de04","name":"@hexsleeves/tailscale-mcp-server","dist-tags":{"latest":"1.3.4"},"versions":{"0.1.0":{"name":"@hexsleeves/tailscale-mcp-server","version":"0.1.0","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@0.1.0","maintainers":[{"name":"skyflyer55","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"b2baa10ca905e672aa1c56f77a96bc750936318e","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-0.1.0.tgz","fileCount":5,"integrity":"sha512-s0IWFtIrTMlF+t3bAhLtnIFs4cRtVPR4+0MvwHx8S7R7Y9p0avzh7L/fG/h6F04gaC2nOLzx5+TgOFLPviT5vA==","signatures":[{"sig":"MEUCIDK2NgzVg35oxWyFRWCsvevcL99NyaPzYr444PiXgWiWAiEAtrTy4jiE3j16Iu2r+lHKxy9pyVaTISCIAGmpU6BIVP0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129728},"main":"dist/index.js","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"efe2d5687467f8ace09718ac28bb7ea6e7d5f059","scripts":{"dev":"npm run build:dev && node dist/index.js","test":"jest","build":"node esbuild.config.js build","clean":"rimraf dist","start":"node dist/index.js","dev:tsx":"tsx src/index.ts","test:ci":"jest --ci --coverage --watchAll=false","build:dev":"node esbuild.config.js dev","build:tsc":"tsc","dev:watch":"npm run build:watch","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","test:watch":"jest --watch","type-check":"tsc --noEmit","build:watch":"node esbuild.config.js watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"skyflyer55","email":"lecoqjacob@gmail.com"},"_npmVersion":"11.4.1","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^3.25.55","axios":"^1.9.0","dotenv":"^16.5.0","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","jest":"^29.7.0","rimraf":"^6.0.1","esbuild":"^0.25.5","ts-jest":"^29.3.4","ts-node":"^10.9.2","audit-ci":"^7.1.0","typescript":"^5.8.3","@types/jest":"^29.5.8","@types/node":"^22.15.30","@jest/globals":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_0.1.0_1749242925600_0.6484030723336602","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@hexsleeves/tailscale-mcp-server","version":"0.1.1","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@0.1.1","maintainers":[{"name":"skyflyer55","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"e1f4e0401be1566ac8f32ffd02e532ab589e7846","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-0.1.1.tgz","fileCount":5,"integrity":"sha512-dtApXtqjY+t0coEB/z+ExVoGFzi23moIw6JzJs6Lhro/ku9ixBwE8b7QLmhgNNCYMr3mM3N4ERrD16JfqnaUYQ==","signatures":[{"sig":"MEUCIQC6hqy1zDbbqwROlqBpXdzz7A1IsQnkWb/M9hapnUAZCQIgZdT7V2Nkpy1CdX+5+LxMnaepYRw88j6xQJf8Ed0/OLI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129210},"main":"dist/index.js","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"bf0195976ace1f6166f261b4042179b729516153","scripts":{"dev":"npm run build:dev && node dist/index.js","test":"jest","build":"node esbuild.config.js build","clean":"rimraf dist","start":"node dist/index.js","dev:tsx":"tsx src/index.ts","test:ci":"jest --ci --coverage --watchAll=false","build:dev":"node esbuild.config.js dev","build:tsc":"tsc","dev:watch":"npm run build:watch","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","test:watch":"jest --watch","type-check":"tsc --noEmit","build:watch":"node esbuild.config.js watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"skyflyer55","email":"lecoqjacob@gmail.com"},"_npmVersion":"11.4.1","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^3.25.55","axios":"^1.9.0","dotenv":"^16.5.0","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","jest":"^29.7.0","rimraf":"^6.0.1","esbuild":"^0.25.5","ts-jest":"^29.3.4","ts-node":"^10.9.2","audit-ci":"^7.1.0","typescript":"^5.8.3","@types/jest":"^29.5.8","@types/node":"^22.15.30","@jest/globals":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_0.1.1_1749262357807_0.8981471385080217","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@hexsleeves/tailscale-mcp-server","version":"0.2.0","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@0.2.0","maintainers":[{"name":"skyflyer55","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"b2c1180dbba8d8f77c23b6107f5e59206f964b0a","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-0.2.0.tgz","fileCount":5,"integrity":"sha512-+Mx4FaS5ds1lAKIzceGXe1LvVJSWHcpTlHocIPPVXlXNuwT/Ghl2LouKRmfZZ6q+70S5h3VbCXrWjaNiR/hUOw==","signatures":[{"sig":"MEYCIQDA46TcH/0fGmEXieooAklDmrj7S0ZrmbAk2vkohLXnigIhANX67hp0KdODpchmb3Tw0hRbVg+4pEyjI5kpIwrWArUp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127531},"main":"dist/index.js","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"82236e6c177df53a9ae70f700214f9beae7d5b0c","scripts":{"dev":"npm run build:dev && node dist/index.js","test":"jest","build":"node esbuild.config.js build","clean":"rimraf dist","start":"node dist/index.js","dev:tsx":"tsx src/index.ts","test:ci":"jest --ci --coverage --watchAll=false","build:dev":"node esbuild.config.js dev","build:tsc":"tsc","dev:watch":"npm run build:watch","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","test:watch":"jest --watch","type-check":"tsc --noEmit","build:watch":"node esbuild.config.js watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"skyflyer55","email":"lecoqjacob@gmail.com"},"_npmVersion":"11.4.1","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^3.25.55","axios":"^1.9.0","dotenv":"^16.5.0","express":"^5.1.0","@types/express":"^5.0.3","@modelcontextprotocol/sdk":"^1.12.1","@hexsleeves/tailscale-mcp-server":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","jest":"^29.7.0","rimraf":"^6.0.1","esbuild":"^0.25.5","ts-jest":"^29.3.4","ts-node":"^10.9.2","audit-ci":"^7.1.0","typescript":"^5.8.3","@types/jest":"^29.5.8","@types/node":"^22.15.30","@jest/globals":"^29.7.0"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_0.2.0_1749266274438_0.30420715748603055","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@hexsleeves/tailscale-mcp-server","version":"0.2.1","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@0.2.1","maintainers":[{"name":"skyflyer55","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"1550f4794caee1220795765cec2d2c1219d17b83","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-0.2.1.tgz","fileCount":5,"integrity":"sha512-mkwNHpaQLxCgnaEdcG8DlptkPehWnLdf9Fy7XoQlbwJz5AqyrZdbEnbXLc7aZqeaQxi50Vc1laUCJ/ihGs4L0Q==","signatures":[{"sig":"MEYCIQDVzbpxF23IJcI90vy21OP1BYr5LAUKNAGU8r++uqkRWQIhAMLgKyl7vyey1AObaV7W+tkGE8Res42JoCE5+SRdGmgQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":137958},"main":"dist/index.js","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"620899e36088ae508ec8f405264e9538ad314f10","scripts":{"dev":"npm run build:dev && node dist/index.js","test":"jest","build":"node esbuild.config.js build","clean":"rimraf dist","start":"node dist/index.js","dev:tsx":"tsx src/index.ts","test:ci":"jest --ci --coverage --watchAll=false","build:dev":"node esbuild.config.js dev","build:tsc":"tsc","dev:watch":"npm run build:watch","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","test:watch":"jest --watch","type-check":"tsc --noEmit","build:watch":"node esbuild.config.js watch","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"skyflyer55","email":"lecoqjacob@gmail.com"},"_npmVersion":"11.4.1","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^3.25.55","axios":"^1.9.0","dotenv":"^16.5.0","express":"^5.1.0","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","jest":"^29.7.0","rimraf":"^6.0.1","esbuild":"^0.25.5","ts-jest":"^29.3.4","ts-node":"^10.9.2","audit-ci":"^7.1.0","typescript":"^5.8.3","@types/jest":"^29.5.8","@types/node":"^22.15.30","@jest/globals":"^29.7.0","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_0.2.1_1749267975870_0.7046986275409346","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@hexsleeves/tailscale-mcp-server","version":"0.2.2","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@0.2.2","maintainers":[{"name":"skyflyer55","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"b5ff9f42aca9462aa7aed6c69c45848b79bc3a53","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-0.2.2.tgz","fileCount":5,"integrity":"sha512-txY1efPnkfEGi0/IaDaEk8H5ogi8bYh4HN7DMzka5QtZo8u5wUHrxS9Wv7PM4t73lhKZlIqpIU5e98l1SlIfxQ==","signatures":[{"sig":"MEUCIDu+TgYvBo9wwpCxA0lS+LObvpAq+WPMlq2Fnb0cVyDCAiEAt3Dvwq6GUpIwCbaSPHGwiytWVZb38KENNVRwQBw5aLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139368},"main":"dist/index.js","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0452e699a94b41caa56a22a2e5bd8b6667d8d926","scripts":{"dev":"npm run build:dev && node dist/index.js","test":"jest","build":"node esbuild.config.js build","clean":"rimraf dist","start":"node dist/index.js","dev:tsx":"tsx src/index.ts","publish":"./scripts/publish.sh","test:ci":"jest --ci --coverage --watchAll=false","build:dev":"node esbuild.config.js dev","build:tsc":"tsc","dev:watch":"npm run build:watch","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","test:watch":"jest --watch","type-check":"tsc --noEmit","build:watch":"node esbuild.config.js watch","publish:test":"./scripts/test-publish.sh","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"skyflyer55","email":"lecoqjacob@gmail.com"},"_npmVersion":"11.4.1","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^3.25.55","axios":"^1.9.0","dotenv":"^16.5.0","express":"^5.1.0","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","jest":"^29.7.0","rimraf":"^6.0.1","semver":"^7.7.2","esbuild":"^0.25.5","ts-jest":"^29.3.4","ts-node":"^10.9.2","audit-ci":"^7.1.0","typescript":"^5.8.3","@types/jest":"^29.5.8","@types/node":"^22.15.30","@jest/globals":"^29.7.0","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_0.2.2_1749269053755_0.8140449734028155","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@hexsleeves/tailscale-mcp-server","version":"0.2.3","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@0.2.3","maintainers":[{"name":"skyflyer55","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"37e09909fffd02c441f2fa00d0f52361d1ae2d5c","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-0.2.3.tgz","fileCount":5,"integrity":"sha512-G0g/o9U5gnSDxwAYztkVhH1lyDB0N6yiT9XXGSLtimzlsWrGPiAS+TvjWwV569GrJ4+J63NOjD3m9VPqUcqFpw==","signatures":[{"sig":"MEYCIQC8Z101efgN1wiHOLzczWWLhdai/Xd0EgWsZINifODloQIhANUVTxNljW3JLpeH0aM/CbQG7X9yA8xe+DEE7b7oFkiu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145892},"main":"dist/index.js","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"212fe4c5f4d0adb8db682a879d2774c34d56b279","scripts":{"qa":"npm run typecheck && npm run test:unit && npm run lint","dev":"npm run build:dev && node dist/index.js","lint":"eslint .","test":"jest","build":"node esbuild.config.js build","clean":"rimraf dist","start":"node dist/index.js","format":"eslint --fix . && prettier --write .","publish":"./scripts/publish.sh","qa:full":"npm run typecheck && npm run test && npm run lint","test:ci":"jest --ci --coverage --watchAll=false","build:dev":"node esbuild.config.js dev","dev:watch":"npm run build:watch","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","test:unit":"jest --config jest.config.unit.ts","typecheck":"tsc --noEmit","dev:direct":"tsx src/index.ts","test:setup":"./scripts/setup-testing.sh","test:watch":"jest --watch","build:watch":"node esbuild.config.js watch","publish:test":"./scripts/test-publish.sh","test:unit:ci":"jest --config jest.config.unit.ts --ci --coverage --watchAll=false","test:coverage":"jest --coverage","prepublishOnly":"npm run qa:full && npm run build","test:unit:watch":"jest --config jest.config.unit.ts --watch","test:integration":"jest --config jest.config.integration.ts","test:unit:coverage":"jest --config jest.config.unit.ts --coverage","test:integration:ci":"jest --config jest.config.integration.ts --ci --coverage --watchAll=false","test:integration:watch":"jest --config jest.config.integration.ts --watch","test:integration:coverage":"jest --config jest.config.integration.ts --coverage"},"_npmUser":{"name":"skyflyer55","email":"lecoqjacob@gmail.com"},"_npmVersion":"11.4.1","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^3.25.56","axios":"^1.9.0","dotenv":"^16.5.0","express":"^5.1.0","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.4","jest":"^29.7.0","eslint":"^9.28.0","rimraf":"^6.0.1","semver":"^7.7.2","esbuild":"^0.25.5","globals":"^16.2.0","ts-jest":"^29.3.4","ts-node":"^10.9.2","audit-ci":"^7.1.0","prettier":"3.5.3","@eslint/js":"^9.28.0","typescript":"^5.8.3","@types/jest":"^29.5.8","@types/node":"^22.15.30","@eslint/json":"^0.12.0","@jest/globals":"^29.7.0","@types/express":"^5.0.3","@eslint/markdown":"^6.5.0","typescript-eslint":"^8.33.1","@typescript-eslint/parser":"^8.33.1","@typescript-eslint/eslint-plugin":"^8.33.1"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_0.2.3_1749341822344_0.7697472548674129","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@hexsleeves/tailscale-mcp-server","version":"0.3.0","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":"HexSleeves","license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@0.3.0","maintainers":[{"name":"skyflyer55","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"25de27de8ae083c6f9427d7986030ed55f13d448","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-0.3.0.tgz","fileCount":7,"integrity":"sha512-gio07+8DGu0UgQFj0K7b86eqMBfKfLnsS2C2QCkPySSt26t3wuo+16HGq42a+jJLKcY8E4wn7NwKO3q95Q/lbw==","signatures":[{"sig":"MEQCIAFDyq3Q3kb+nNkmwBkBb3+3H6iER3+q4czvMFnqn3LFAiA62seTcfNP0xXHR1WQxqm2XGj0tPKpBWoGpdBuDi3xLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":691864},"main":"dist/index.js","type":"module","shasum":"25de27de8ae083c6f9427d7986030ed55f13d448","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"qa":"bun run typecheck && bun run test:unit && bun run check","dev":"bun run build:dev && bun dist/index.js","lint":"biome lint .","test":"bun test","build":"bun esbuild.config.js build","check":"biome check .","clean":"rimraf dist","start":"bun dist/index.js","format":"biome format --write .","publish":"./scripts/publish.sh","qa:full":"bun run typecheck && bun run test && bun run check","test:ci":"bun test --coverage","build:dev":"bun esbuild.config.js dev","check:fix":"biome check --write .","dev:watch":"bun run build:watch","inspector":"bunx @modelcontextprotocol/inspector bun dist/index.js","test:unit":"bun test --testNamePattern='(?!.*integration)'","typecheck":"tsc --noEmit","dev:direct":"tsx src/index.ts","test:setup":"./scripts/setup-testing.sh","build:watch":"bun esbuild.config.js watch","publish:test":"./scripts/test-publish.sh","test:unit:ci":"bun test --coverage --testNamePattern='(?!.*integration)'","test:coverage":"bun test --coverage","prepublishOnly":"bun run build","test:integration":"bun test --testNamePattern='integration'","test:integration:ci":"bun test --coverage --testNamePattern='integration'"},"_npmUser":{"name":"skyflyer55","email":"lecoqjacob@gmail.com"},"_integrity":"sha512-gio07+8DGu0UgQFj0K7b86eqMBfKfLnsS2C2QCkPySSt26t3wuo+16HGq42a+jJLKcY8E4wn7NwKO3q95Q/lbw==","_npmVersion":"10.8.3","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"22.6.0","dependencies":{"zod":"^3.25.64","axios":"^1.10.0","dotenv":"^16.5.0","express":"^5.1.0","@modelcontextprotocol/sdk":"^1.12.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","eslint":"^9.29.0","rimraf":"^6.0.1","semver":"^7.7.2","esbuild":"^0.25.5","globals":"^16.2.0","audit-ci":"^7.1.0","prettier":"3.5.3","@eslint/js":"^9.29.0","@types/bun":"latest","typescript":"^5.8.3","@types/node":"^24.0.3","@eslint/json":"^0.12.0","@biomejs/biome":"1.9.4","@types/express":"^5.0.3","@eslint/markdown":"^6.5.0","typescript-eslint":"^8.34.0","@typescript-eslint/parser":"^8.34.0","@typescript-eslint/eslint-plugin":"^8.34.0"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_0.3.0_1750127747874_0.11008663124821183","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@hexsleeves/tailscale-mcp-server","version":"0.3.1","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@0.3.1","maintainers":[{"name":"skyflyer55","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"a205a7c8a1708eae755657d693de3cb138dc70eb","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-0.3.1.tgz","fileCount":5,"integrity":"sha512-1i42mMftePng3bdVr1bk9bmfEaOCeIKhx1jii3WRlsvQGlGWHMcUQ8VF8zGyl1M2KrUns6UzdK36fe+4qKuNhg==","signatures":[{"sig":"MEUCIQDfbodN3q3N67gUJAYpBI/biy91hK6ZB5RjWMU30o/7VgIgA8sq2lmBw01kxt1SlxgjXvLHU5yi7wPIeJicF0yDN/8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164191},"main":"dist/index.js","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"1de60f4d7ea7b169368c499e8fa7a20561ae0dc9","scripts":{"qa":"bun run typecheck && bun run test:unit && bun run check","dev":"bun run build:dev && bun dist/index.js","lint":"biome lint .","test":"bun test","build":"bun esbuild.config.js build","check":"biome check .","clean":"rimraf dist","start":"bun dist/index.js","format":"biome format --write .","publish":"./scripts/publish.sh","qa:full":"bun run typecheck && bun run test && bun run check","test:ci":"bun test ./src/__test__/utils/","build:dev":"bun esbuild.config.js dev","check:fix":"biome check --write .","dev:watch":"bun run build:watch","inspector":"bunx @modelcontextprotocol/inspector bun dist/index.js","test:unit":"bun test --testNamePattern='(?!.*integration)'","typecheck":"tsc --noEmit","dev:direct":"tsx src/index.ts","test:setup":"./scripts/setup-testing.sh","build:watch":"bun esbuild.config.js watch","publish:test":"./scripts/test-publish.sh","test:unit:ci":"npm run test:ci","test:coverage":"bun test --coverage","prepublishOnly":"bun run build","test:integration":"bun test --testNamePattern='integration'","test:integration:ci":"bun test --coverage --testNamePattern='integration'"},"_npmUser":{"name":"skyflyer55","email":"lecoqjacob@gmail.com"},"_npmVersion":"11.6.2","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.0.5","axios":"^1.10.0","dotenv":"^17.2.0","express":"^5.1.0","@modelcontextprotocol/sdk":"^1.16.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","eslint":"^9.31.0","rimraf":"^6.0.1","semver":"^7.7.2","esbuild":"^0.25.6","globals":"^16.3.0","audit-ci":"^7.1.0","prettier":"3.6.2","@eslint/js":"^9.31.0","@types/bun":"latest","typescript":"^5.8.3","@types/node":"^24.0.14","@eslint/json":"^0.13.0","@biomejs/biome":"2.1.2","@types/express":"^5.0.3","@eslint/markdown":"^7.0.0","typescript-eslint":"^8.37.0","@types/json-schema":"7.0.15","@typescript-eslint/parser":"^8.37.0","@typescript-eslint/eslint-plugin":"^8.37.0"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_0.3.1_1767070465176_0.02213571468205755","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@hexsleeves/tailscale-mcp-server","version":"0.3.2","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@0.3.2","maintainers":[{"name":"skyflyer55","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"fe449b784aec78cb60db8849514be6470d41d82a","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-0.3.2.tgz","fileCount":5,"integrity":"sha512-AET/Zg+t17g2Pa8JjvNFhMraqS12CAwf3iz7B661DCPeCqBJqlvmMJ+JF/FQ5IOg5ap1b62AO2pNHqjatkISdQ==","signatures":[{"sig":"MEUCIQDZ1vNBhHxkUtEQqtGpW0Vpx4tfZ8/USL8gX2tivBMl8gIgWtwIcZjA2Ql4GTF8tTw7njmZRU+ABawyypzHag6La9Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164116},"main":"dist/index.js","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"2253fffff7e2f1c385a06a0c93c6da9bfe46f4c4","scripts":{"qa":"bun run typecheck && bun run test:unit && bun run check","dev":"bun run build:dev && bun dist/index.js","lint":"biome lint .","test":"bun test","build":"bun esbuild.config.js build","check":"biome check .","clean":"rimraf dist","start":"bun dist/index.js","format":"biome format --write .","publish":"./scripts/publish.sh","qa:full":"bun run typecheck && bun run test && bun run check","test:ci":"bun test ./src/__test__/utils/","build:dev":"bun esbuild.config.js dev","check:fix":"biome check --write .","dev:watch":"bun run build:watch","inspector":"bunx @modelcontextprotocol/inspector bun dist/index.js","test:unit":"bun test ./src/__test__/utils/ ./src/__test__/tailscale/oauth.test.ts","typecheck":"tsc --noEmit","dev:direct":"tsx src/index.ts","test:setup":"./scripts/setup-testing.sh","build:watch":"bun esbuild.config.js watch","publish:test":"./scripts/test-publish.sh","test:unit:ci":"npm run test:ci","test:coverage":"bun test --coverage","prepublishOnly":"bun run build","test:integration":"bun test ./src/__test__/tailscale/*.integration.test.ts","test:integration:ci":"bun test --coverage --testNamePattern='integration'"},"_npmUser":{"name":"skyflyer55","email":"lecoqjacob@gmail.com"},"_npmVersion":"11.6.2","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.3.6","axios":"^1.13.2","dotenv":"^17.2.3","express":"^5.2.1","ipaddr.js":"2.3.0","@modelcontextprotocol/sdk":"^1.25.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","rimraf":"^6.1.2","semver":"^7.7.3","esbuild":"^0.27.2","audit-ci":"^7.1.0","@types/bun":"latest","typescript":"^5.9.3","@types/node":"^25.0.10","@biomejs/biome":"2.3.12","@types/express":"^5.0.6","@types/json-schema":"7.0.15"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_0.3.2_1769230282189_0.21115105027742875","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@hexsleeves/tailscale-mcp-server","version":"1.0.0","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@1.0.0","maintainers":[{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"30e4a5422c5aa54fbc7c584b9583e3b9dee0fd38","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-1.0.0.tgz","fileCount":92,"integrity":"sha512-+tgaHrOFloPaiOk8KVvVT/mG0/gjxowWRnWl/sWnmlWUlzQu1DQznoCdustgHham6S+uCK1iMHvs4pYde/06VQ==","signatures":[{"sig":"MEUCIQD7byAhXe7VggT8pqHDjbFNuG63fpjRsxDsT/nFvhPZBAIgM+u1ZzpcnAtUk9R+Lk5oDRbThXh5LTy15tWtuP77LXE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162217},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"949fec7a61579011d1fecc96a9dbebd38440d90d","scripts":{"qa":"bun run typecheck && bun run test:unit && bun run check","dev":"bun run src/index.ts","lint":"biome lint .","test":"bun test","build":"bun esbuild.config.js build && bun run build:types","check":"biome check .","clean":"rimraf dist","start":"bun run dist/index.js","format":"biome format --write .","publish":"./scripts/publish.sh","qa:full":"bun run typecheck && bun run test && bun run check","test:ci":"bun test ./src/__test__/utils/","build:dev":"bun esbuild.config.js dev","check:fix":"biome check --write .","dev:watch":"bun run build:watch","inspector":"bunx @modelcontextprotocol/inspector bun dist/index.js","test:unit":"bun test ./src/__test__/utils/ ./src/__test__/tailscale/oauth.test.ts ./src/__test__/config/ ./src/__test__/observability/ ./src/__test__/security/","typecheck":"tsc --noEmit","dev:direct":"tsx src/index.ts","test:setup":"./scripts/setup-testing.sh","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly","build:watch":"bun esbuild.config.js watch","publish:test":"./scripts/test-publish.sh","test:unit:ci":"npm run test:ci","test:coverage":"bun test --coverage","prepublishOnly":"bun run build","test:integration":"bun test ./src/__test__/tailscale/*.integration.test.ts","test:integration:ci":"bun test --coverage --testNamePattern='integration'"},"_npmUser":{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"},"overrides":{"qs":"6.15.1","ajv":"8.20.0","path-to-regexp":"8.4.2","@hono/node-server":"1.19.14"},"_npmVersion":"11.13.0","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"zod":"4.3.6","axios":"1.15.2","dotenv":"17.4.2","express":"5.2.1","ipaddr.js":"2.3.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","rimraf":"6.1.3","semver":"7.7.4","esbuild":"0.28.0","audit-ci":"7.1.0","@types/bun":"1.3.13","typescript":"6.0.3","@types/node":"25.6.0","@biomejs/biome":"2.4.13","@types/express":"5.0.6","@types/json-schema":"7.0.15"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_1.0.0_1777088523548_0.10166108058646284","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@hexsleeves/tailscale-mcp-server","version":"1.1.0","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@1.1.0","maintainers":[{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"5bd5aa4142a76121055608e5550a2f0933ec6743","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-1.1.0.tgz","fileCount":92,"integrity":"sha512-FrJqqaXcL6J5p6sP1sZfyIreT7vEdAPuuPZM4C26wUvlZUwyvflGILd8jhVZVJHF7WIEI+v103tumsg9I72FRg==","signatures":[{"sig":"MEUCIQDe/pw1zvYcG8FK9uSMNsi+GepAyknmCO1oPgOnIA+88gIgErnASWLy74nw1J/0h3KtyhVR/JcBv0YkOdl+Fb+RSx8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164690},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.3.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"eef7695ebe72c84665cd5c141186b6047f439372","scripts":{"qa":"bun run typecheck && bun run test:unit && bun run check","dev":"bun run src/index.ts","lint":"biome lint .","test":"bun test","build":"bun esbuild.config.js build && bun run build:types","check":"biome check .","clean":"rimraf dist","start":"bun run dist/index.js","format":"biome format --write .","qa:full":"bun run typecheck && bun run test && bun run check","test:ci":"bun test ./src/__test__/utils/","build:dev":"bun esbuild.config.js dev","check:fix":"biome check --write .","dev:watch":"bun run build:watch","inspector":"bunx @modelcontextprotocol/inspector bun dist/index.js","test:unit":"bun test ./src/__test__/utils/ ./src/__test__/tailscale/oauth.test.ts ./src/__test__/config/ ./src/__test__/observability/ ./src/__test__/security/","typecheck":"tsc --noEmit","dev:direct":"tsx src/index.ts","test:setup":"./scripts/setup-testing.sh","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly","build:watch":"bun esbuild.config.js watch","build:binary":"bun build src/index.ts --compile --target=bun --outfile=dist/server","test:unit:ci":"npm run test:ci","test:coverage":"bun test --coverage","prepublishOnly":"bun run build","test:integration":"bun test ./src/__test__/tailscale/*.integration.test.ts","test:integration:ci":"bun test --coverage --testNamePattern='integration'"},"_npmUser":{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"},"overrides":{"qs":"6.15.1","ajv":"8.20.0","hono":"4.12.18","fast-uri":"3.1.2","ip-address":"10.2.0","path-to-regexp":"8.4.2","@hono/node-server":"1.19.14"},"_npmVersion":"11.14.1","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"4.3.6","axios":"1.16.0","dotenv":"17.4.2","express":"5.2.1","ipaddr.js":"2.4.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.21.0","rimraf":"6.1.3","semver":"7.8.0","esbuild":"0.28.0","@types/bun":"1.3.13","typescript":"6.0.3","@types/node":"25.6.2","@biomejs/biome":"2.4.15","@types/express":"5.0.6","@types/json-schema":"7.0.15"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_1.1.0_1778386772562_0.9891282254951754","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@hexsleeves/tailscale-mcp-server","version":"1.2.0","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@1.2.0","maintainers":[{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"99b7abe451e5540984fe5419c41be79a97aabb60","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-1.2.0.tgz","fileCount":92,"integrity":"sha512-uD3lqZ3BQ/Lf22VZnzZQlxcVLuILg6x1t1APpbJcQzqesgq3Upu//qAR2Fbaq4mWzmBCLLYC1ZoOaJcoMwPZ7A==","signatures":[{"sig":"MEUCIQCvYIIkyinSUYGe4WV/4uemzm6zY3KaW85QEwTJ9SXS3gIgYfNZBb7TZfMklLhYqWPfbAXmBnSXTGv/qVp7NoMnd+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165026},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"bun":">=1.3.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"8d3db199c62b1b5adb9843fe225cf3678044c909","scripts":{"qa":"bun run typecheck && bun run test:unit && bun run check","dev":"bun run src/index.ts","lint":"biome lint .","test":"bun test","build":"bun esbuild.config.js build && bun run build:types","check":"biome check .","clean":"rimraf dist","start":"bun run dist/index.js","format":"biome format --write .","qa:full":"bun run typecheck && bun run test && bun run check","test:ci":"bun test ./src/__test__/utils/","build:dev":"bun esbuild.config.js dev","check:fix":"biome check --write .","dev:watch":"bun run build:watch","inspector":"bunx @modelcontextprotocol/inspector bun dist/index.js","test:unit":"bun test ./src/__test__/utils/ ./src/__test__/tailscale/oauth.test.ts ./src/__test__/config/ ./src/__test__/observability/ ./src/__test__/security/","typecheck":"tsc --noEmit","dev:direct":"tsx src/index.ts","test:setup":"./scripts/setup-testing.sh","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly","build:watch":"bun esbuild.config.js watch","build:binary":"bun build src/index.ts --compile --target=bun --outfile=dist/server","test:unit:ci":"npm run test:ci","test:coverage":"bun test --coverage","prepublishOnly":"bun run build","test:integration":"bun test ./src/__test__/tailscale/*.integration.test.ts","test:integration:ci":"bun test --coverage --testNamePattern='integration'"},"_npmUser":{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"},"overrides":{"qs":"6.15.2","ajv":"8.20.0","hono":"4.12.18","fast-uri":"3.1.2","ip-address":"10.2.0","path-to-regexp":"8.4.2","brace-expansion":"5.0.6","@hono/node-server":"1.19.14"},"_npmVersion":"11.16.0","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.11.0","dependencies":{"zod":"4.4.3","axios":"1.16.1","dotenv":"17.4.2","express":"5.2.1","ipaddr.js":"2.4.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","rimraf":"6.1.3","semver":"7.8.1","esbuild":"0.28.0","@types/bun":"1.3.14","typescript":"6.0.3","@types/node":"25.9.1","@biomejs/biome":"2.4.16","@types/express":"5.0.6","@types/json-schema":"7.0.15"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_1.2.0_1780435939516_0.8186184143132322","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@hexsleeves/tailscale-mcp-server","version":"1.3.0","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@1.3.0","maintainers":[{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"f6f04be1bbdb54a6f6be00da5c69931487a22979","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-1.3.0.tgz","fileCount":92,"integrity":"sha512-wNyIH/NQ+RICX9T81W+VyAdpsecJ8v6weVLLDFeqdJL9VlDSchN+FsvSW+YT+quL741+oM/lbrOqw3+SCuEQVg==","signatures":[{"sig":"MEUCIGNLgimzNB64d26VRwiY5Dzi0vKqNH49/XD/5FQXhwwhAiEA3V+VhlqBqOQmfc73d0MwUZQPX8imicrV/JUWR+908JQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169939},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"3b4a65fe95a86cdac7de5a846cd4b1853c885ddb","scripts":{"qa":"bun run typecheck && bun run test:unit && bun run check","dev":"bun run src/index.ts","lint":"biome lint .","test":"bun test","build":"bun esbuild.config.js build && bun run build:types","check":"biome check .","clean":"rimraf dist","start":"bun run dist/index.js","format":"biome format --write .","qa:full":"bun run typecheck && bun run test && bun run check","test:ci":"bun test ./src/__test__/utils/","build:dev":"bun esbuild.config.js dev","check:fix":"biome check --write .","dev:watch":"bun run build:watch","inspector":"bunx @modelcontextprotocol/inspector bun dist/index.js","test:unit":"bun test ./src/__test__/utils/ ./src/__test__/tailscale/oauth.test.ts ./src/__test__/config/ ./src/__test__/observability/ ./src/__test__/security/ ./src/__test__/mcp/","typecheck":"tsc --noEmit","dev:direct":"tsx src/index.ts","test:setup":"./scripts/setup-testing.sh","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly","build:watch":"bun esbuild.config.js watch","build:binary":"bun build src/index.ts --compile --target=bun --outfile=dist/server","test:unit:ci":"npm run test:ci","test:coverage":"bun test --coverage","prepublishOnly":"bun run build","test:integration":"bun test ./src/__test__/tailscale/*.integration.test.ts","test:integration:ci":"bun test --coverage --testNamePattern='integration'"},"_npmUser":{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"},"overrides":{"qs":"6.15.2","ajv":"8.20.0","hono":"4.12.21","fast-uri":"3.1.2","ip-address":"10.2.0","path-to-regexp":"8.4.2","brace-expansion":"5.0.6","@hono/node-server":"1.19.14"},"_npmVersion":"11.13.0","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"25.9.0","dependencies":{"zod":"4.4.3","axios":"1.17.0","dotenv":"17.4.2","express":"5.2.1","ipaddr.js":"2.4.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","rimraf":"6.1.3","esbuild":"0.28.0","@types/bun":"1.3.14","typescript":"6.0.3","@types/node":"25.9.3","@biomejs/biome":"2.4.16","@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_1.3.0_1781194519745_0.23395142878592212","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@hexsleeves/tailscale-mcp-server","version":"1.3.2","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","_id":"@hexsleeves/tailscale-mcp-server@1.3.2","maintainers":[{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"}],"bin":{"tailscale-mcp-server":"dist/index.js"},"dist":{"shasum":"46333b380b64ef24b1fc7a4beb26bb33d2abc368","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-1.3.2.tgz","fileCount":60,"integrity":"sha512-r0zr8l2sDL/umldL17wyOZher1Zwfac5Puba2PnNQWK8XvI9CaQxd0/ZMP8kHhqqkStwEfSbwSNCNd85Cyzq1Q==","signatures":[{"sig":"MEUCIQD/KdrAf56/6JoUyR/2smBxUdOfRdZBYhZJmm3Yxj9+YwIgXOsMM4lDi1Um5YycgSPeDmxvOBJf0JwsFsAd94hQMVc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129586},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"gitHead":"77788e99ebaefc00a51b0fb4210398f42ff1d10b","scripts":{"qa":"bun run typecheck && bun run test:unit && bun run check","dev":"bun run src/index.ts","lint":"biome lint .","test":"bun test","build":"bun esbuild.config.js build && bun run build:types","check":"biome check .","clean":"rimraf dist","start":"bun run dist/index.js","format":"biome format --write .","qa:full":"bun run typecheck && bun run test && bun run check","test:ci":"bun test ./src/__test__/utils/","build:dev":"bun esbuild.config.js dev","check:fix":"biome check --write .","dev:watch":"bun run build:watch","inspector":"bunx @modelcontextprotocol/inspector bun dist/index.js","test:unit":"bun test ./src/__test__/utils/ ./src/__test__/tailscale/oauth.test.ts ./src/__test__/config/ ./src/__test__/observability/ ./src/__test__/security/ ./src/__test__/mcp/","typecheck":"tsc --noEmit","dev:direct":"tsx src/index.ts","test:setup":"./scripts/setup-testing.sh","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly","build:watch":"bun esbuild.config.js watch","build:binary":"bun build src/index.ts --compile --target=bun --outfile=dist/server","test:unit:ci":"npm run test:ci","test:coverage":"bun test --coverage","prepublishOnly":"bun run build","test:integration":"bun test ./src/__test__/tailscale/*.integration.test.ts","test:integration:ci":"bun test --coverage --testNamePattern='integration'"},"_npmUser":{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"},"overrides":{"qs":"6.15.3","ajv":"8.20.0","hono":"4.12.25","fast-uri":"4.1.0","form-data":"4.0.6","ip-address":"10.2.0","path-to-regexp":"8.4.2","brace-expansion":"5.0.7","@hono/node-server":"1.19.14"},"_npmVersion":"11.18.0","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"zod":"4.4.3","axios":"1.18.1","dotenv":"17.4.2","express":"5.2.1","ipaddr.js":"2.4.0","@modelcontextprotocol/sdk":"1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.22.4","rimraf":"6.1.3","esbuild":"0.28.1","@types/bun":"1.3.14","typescript":"6.0.3","@types/node":"26.1.0","@biomejs/biome":"2.5.2","@types/express":"5.0.6"},"_npmOperationalInternal":{"tmp":"tmp/tailscale-mcp-server_1.3.2_1783045973892_0.07855467877941025","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@hexsleeves/tailscale-mcp-server","version":"1.3.4","description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"author":{"name":"HexSleeves"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/HexSleeves/tailscale-mcp.git"},"type":"module","packageManager":"bun@1.3.14","main":"dist/index.js","bin":{"tailscale-mcp-server":"dist/index.js"},"engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"clean":"rimraf dist","build":"bun esbuild.config.js build && bun run build:types","build:binary":"bun build src/index.ts --compile --target=bun --outfile=dist/server","build:types":"tsc --project tsconfig.build.json --emitDeclarationOnly","build:dev":"bun esbuild.config.js dev","build:watch":"bun esbuild.config.js watch","start":"bun run dist/index.js","dev":"bun run src/index.ts","dev:watch":"bun run build:watch","dev:direct":"tsx src/index.ts","typecheck":"tsc --noEmit","lint":"biome lint .","format":"biome format --write .","check":"biome check .","check:fix":"biome check --write .","test":"bun test","test:unit":"bun test ./src/__test__/utils/ ./src/__test__/tailscale/oauth.test.ts ./src/__test__/config/ ./src/__test__/observability/ ./src/__test__/security/ ./src/__test__/mcp/","test:integration":"bun test ./src/__test__/tailscale/*.integration.test.ts","test:coverage":"bun test --coverage","test:ci":"bun test ./src/__test__/utils/","test:unit:ci":"npm run test:ci","test:integration:ci":"bun test --coverage --testNamePattern='integration'","test:setup":"./scripts/setup-testing.sh","qa":"bun run typecheck && bun run test:unit && bun run check","qa:full":"bun run typecheck && bun run test && bun run check","inspector":"bunx @modelcontextprotocol/inspector bun dist/index.js","prepublishOnly":"bun run build"},"dependencies":{"@modelcontextprotocol/sdk":"1.29.0","axios":"1.18.1","dotenv":"17.4.2","express":"5.2.1","ipaddr.js":"2.4.0","zod":"4.4.3"},"devDependencies":{"@biomejs/biome":"2.5.2","@types/bun":"1.3.14","@types/express":"5.0.6","@types/node":"26.1.0","esbuild":"0.28.1","rimraf":"6.1.3","tsx":"4.22.4","typescript":"6.0.3"},"overrides":{"@hono/node-server":"2.0.11","ajv":"8.20.0","fast-uri":"4.1.1","hono":"4.12.31","ip-address":"10.2.0","path-to-regexp":"8.4.2","brace-expansion":"5.0.8","form-data":"4.0.6","qs":"6.15.3"},"gitHead":"8657959a14893860c2e6296e98a40d01a9df11dd","types":"./dist/index.d.ts","_id":"@hexsleeves/tailscale-mcp-server@1.3.4","bugs":{"url":"https://github.com/HexSleeves/tailscale-mcp/issues"},"homepage":"https://github.com/HexSleeves/tailscale-mcp#readme","_nodeVersion":"24.17.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-5Zzs9lAnFV8bGNhHK5oxAXr9J6Pg1yFYSawrPUw1sN02xEUWr6yMJ4k7F4kQyYE+8y8WdpnQTHJYpa5yOPq/+Q==","shasum":"a420b8561d68f6bf09f9e9e0d8c83740c651c37e","tarball":"https://registry.npmjs.org/@hexsleeves/tailscale-mcp-server/-/tailscale-mcp-server-1.3.4.tgz","fileCount":61,"unpackedSize":65937167,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCYQB+sIiJTKgPdO0aQ5CHPfkWfIolhqs998qPY2Qn1ZgIhAIdsb0Pm9Vb8T7OzKcZmh4eIYwahBp0py7rnv2BFFF5/"}]},"_npmUser":{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"},"directories":{},"maintainers":[{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tailscale-mcp-server_1.3.4_1784946770929_0.865878162184105"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-06T20:48:45.504Z","modified":"2026-07-25T02:32:51.566Z","0.1.0":"2025-06-06T20:48:45.795Z","0.1.1":"2025-06-07T02:12:38.027Z","0.2.0":"2025-06-07T03:17:54.680Z","0.2.1":"2025-06-07T03:46:16.105Z","0.2.2":"2025-06-07T04:04:13.957Z","0.2.3":"2025-06-08T00:17:02.514Z","0.3.0":"2025-06-17T02:35:48.085Z","0.3.1":"2025-12-30T04:54:25.336Z","0.3.2":"2026-01-24T04:51:22.367Z","1.0.0":"2026-04-25T03:42:03.708Z","1.1.0":"2026-05-10T04:19:32.701Z","1.2.0":"2026-06-02T21:32:19.668Z","1.3.0":"2026-06-11T16:15:19.894Z","1.3.2":"2026-07-03T02:32:54.030Z","1.3.4":"2026-07-25T02:32:51.383Z"},"author":{"name":"HexSleeves"},"license":"MIT","keywords":["tailscale","mcp","model context protocol","tailscale mcp","tailscale mcp server"],"description":"A Model Context Protocol (MCP) server that provides seamless integration with Tailscale's CLI commands and REST API, enabling automated network management and monitoring through a standardized interface.","maintainers":[{"name":"cypressinklabs","email":"lecoqjacob@gmail.com"}],"readme":"# Tailscale MCP Server\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/@hexsleeves/tailscale-mcp-server\">\n    <img src=\"https://img.shields.io/npm/v/@hexsleeves/tailscale-mcp-server?label=npm\" alt=\"npm version\" />\n  </a>\n  <a href=\"LICENSE\">\n    <img src=\"https://img.shields.io/github/license/HexSleeves/tailscale-mcp\" alt=\"MIT License\" />\n  </a>\n  <a href=\"https://github.com/HexSleeves/tailscale-mcp/actions/workflows/ci.yml\">\n    <img src=\"https://img.shields.io/github/actions/workflow/status/HexSleeves/tailscale-mcp/ci.yml?branch=main&label=CI\" alt=\"CI status\" />\n  </a>\n  <a href=\"https://hub.docker.com/r/hexsleeves/tailscale-mcp-server\">\n    <img src=\"https://img.shields.io/docker/v/hexsleeves/tailscale-mcp-server?label=Docker\" alt=\"Docker image\" />\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://glama.ai/mcp/servers/@HexSleeves/tailscale-mcp\">\n    <img width=\"380\" height=\"200\" src=\"https://glama.ai/mcp/servers/@HexSleeves/tailscale-mcp/badge\" alt=\"Tailscale MCP server on Glama\" />\n  </a>\n</p>\n\nA [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server for operating Tailscale from any MCP client. Supports local `stdio` for desktop clients and an authenticated HTTP transport for private tailnet deployments. Defaults to read-only access, localhost binding, and short-lived OAuth credentials where available.\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Requirements](#requirements)\n- [Quick Start](#quick-start)\n  - [Claude Desktop](#claude-desktop)\n  - [Claude Code (CLI)](#claude-code-cli)\n  - [Cursor](#cursor)\n- [Tool Reference](#tool-reference)\n- [Resources and Prompts](#resources-and-prompts)\n- [Configuration](#configuration)\n- [HTTP Transport](#http-transport)\n- [Docker](#docker)\n- [Example Prompts](#example-prompts)\n- [Development](#development)\n- [Contributing](#contributing)\n\n---\n\n## Features\n\n- **Device management** — list, authorize, deauthorize, delete, expire keys, manage routes.\n- **Network operations** — connect/disconnect host, ping peers, get CLI status and version.\n- **Administration** — tailnet info, file sharing, exit nodes, webhooks, device tags, server version.\n- **ACL and policy** — read/validate/update ACL, DNS settings, auth keys, policy file, network lock.\n- **Read-only resources** — tailnet summary, device list, per-device detail, current ACL.\n- **Prompts** — guided connectivity diagnosis and ACL change review.\n- **Risk-gated tools** — `read`, `write`, and `admin` levels via `TAILSCALE_ALLOWED_TOOL_RISK`.\n- **OAuth + API key** — OAuth client credentials (preferred) or legacy API key.\n- **Private HTTP mode** — bearer auth, Host validation, request size limits, health check endpoint.\n- **Docker support** — pre-built images on Docker Hub and GHCR; sidecar deployment with Tailscale Serve.\n\n---\n\n## Requirements\n\nOne of:\n\n- **Node.js 20+** — run via `npx` or install globally (no extra runtime needed).\n- **Bun 1.3+** — used for development; also works as a production runtime.\n- **Docker** — use the pre-built image (no local runtime required).\n\nPlus one auth method:\n\n- OAuth client credentials: `TAILSCALE_OAUTH_CLIENT_ID` + `TAILSCALE_OAUTH_CLIENT_SECRET` (preferred).\n- Legacy API key: `TAILSCALE_API_KEY`.\n\nThe local **Tailscale CLI** is optional. It is only required for CLI-backed tools: `get_network_status`, `connect_network`, `disconnect_network`, `ping_peer`, `get_version`, and `manage_exit_nodes` (set/clear operations).\n\n---\n\n## Quick Start\n\n### Claude Desktop\n\nEdit `~/.claude/claude_desktop_config.json` (create if absent).\n\n#### OAuth credentials (recommended)\n\n```json\n{\n  \"mcpServers\": {\n    \"tailscale\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@hexsleeves/tailscale-mcp-server\"],\n      \"env\": {\n        \"TAILSCALE_OAUTH_CLIENT_ID\": \"your-client-id\",\n        \"TAILSCALE_OAUTH_CLIENT_SECRET\": \"your-client-secret\",\n        \"TAILSCALE_TAILNET\": \"-\"\n      }\n    }\n  }\n}\n```\n\n#### API key\n\n```json\n{\n  \"mcpServers\": {\n    \"tailscale\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@hexsleeves/tailscale-mcp-server\"],\n      \"env\": {\n        \"TAILSCALE_API_KEY\": \"tskey-api-...\",\n        \"TAILSCALE_TAILNET\": \"-\"\n      }\n    }\n  }\n}\n```\n\n#### Enable write/admin tools\n\nAdd `TAILSCALE_ALLOWED_TOOL_RISK` to the `env` block:\n\n```json\n\"TAILSCALE_ALLOWED_TOOL_RISK\": \"write\"\n```\n\nSet to `\"admin\"` to unlock destructive operations (delete, deauthorize, connect/disconnect, key mutation).\n\n#### Docker Hub\n\n```json\n{\n  \"mcpServers\": {\n    \"tailscale\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\", \"--rm\", \"-i\",\n        \"-e\", \"TAILSCALE_API_KEY=tskey-api-...\",\n        \"-e\", \"TAILSCALE_TAILNET=your-tailnet\",\n        \"hexsleeves/tailscale-mcp-server:latest\"\n      ]\n    }\n  }\n}\n```\n\n---\n\n### Claude Code (CLI)\n\n```bash\nclaude mcp add tailscale \\\n  -e TAILSCALE_API_KEY=tskey-api-... \\\n  -e TAILSCALE_TAILNET=- \\\n  -- npx -y @hexsleeves/tailscale-mcp-server\n```\n\nWith write access:\n\n```bash\nclaude mcp add tailscale \\\n  -e TAILSCALE_API_KEY=tskey-api-... \\\n  -e TAILSCALE_TAILNET=- \\\n  -e TAILSCALE_ALLOWED_TOOL_RISK=write \\\n  -- npx -y @hexsleeves/tailscale-mcp-server\n```\n\n---\n\n### Cursor\n\nAdd to `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"tailscale\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@hexsleeves/tailscale-mcp-server\"],\n      \"env\": {\n        \"TAILSCALE_API_KEY\": \"tskey-api-...\",\n        \"TAILSCALE_TAILNET\": \"-\"\n      }\n    }\n  }\n}\n```\n\n---\n\n## Tool Reference\n\n### Devices\n\n| Tool | Description | Min risk |\n|------|-------------|----------|\n| `list_devices` | List all devices in the configured tailnet | `read` |\n| `device_action` | Authorize or expire a device key (`write`); deauthorize or delete (`admin`) | `write` / `admin` |\n| `manage_routes` | Enable or disable advertised routes for a device | `write` |\n\n### Network\n\n| Tool | Description | Min risk |\n|------|-------------|----------|\n| `get_network_status` | Get current Tailscale network status via local CLI | `read` |\n| `connect_network` | Connect this host to Tailscale with optional CLI flags | `admin` |\n| `disconnect_network` | Disconnect this host from Tailscale | `admin` |\n| `ping_peer` | Ping a Tailscale peer through the local CLI | `read` |\n| `get_version` | Get local Tailscale CLI version information | `read` |\n\n### Administration\n\n| Tool | Description | Min risk |\n|------|-------------|----------|\n| `get_tailnet_info` | Get detailed information about the configured tailnet | `read` |\n| `manage_file_sharing` | Read (`read`) or update (`write`) tailnet file sharing settings | `read` / `write` |\n| `manage_exit_nodes` | List exit nodes (`read`); set, clear, advertise, or stop advertising (`admin`) | `read` / `admin` |\n| `manage_webhooks` | List webhooks (`read`); create, delete, or test webhooks (`write`) | `read` / `write` |\n| `manage_device_tags` | Read (`read`) or update (`write`) tags for a device | `read` / `write` |\n| `get_version_info` | Return server version identifier | `read` |\n\n### ACL and Policy\n\n| Tool | Description | Min risk |\n|------|-------------|----------|\n| `manage_acl` | Read (`read`), validate, or update (`write`) the tailnet ACL policy | `read` / `write` |\n| `manage_dns` | Read (`read`) or update (`write`) Tailscale DNS settings | `read` / `write` |\n| `manage_keys` | List auth keys (`read`); create or delete (`admin`) | `read` / `admin` |\n| `manage_policy_file` | Read (`read`) or update (`write`) the tailnet policy file | `read` / `write` |\n| `manage_network_lock` | Network lock status (`read`) and mutation operations (`admin`) | `read` / `admin` |\n\n---\n\n## Resources and Prompts\n\n### Resources (read-only)\n\n| URI | Description |\n|-----|-------------|\n| `tailscale://tailnet/summary` | High-level tailnet summary |\n| `tailscale://devices` | All devices in the tailnet |\n| `tailscale://devices/{deviceId}` | Detail for a single device |\n| `tailscale://acl/current` | Current ACL policy |\n\n### Prompts\n\n| Name | Description |\n|------|-------------|\n| `diagnose_tailnet_connectivity` | Guided diagnostic for connectivity issues |\n| `review_acl_change` | Structured review workflow for ACL policy changes |\n\n---\n\n## Configuration\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `TAILSCALE_OAUTH_CLIENT_ID` | — | OAuth client ID (preferred auth method) |\n| `TAILSCALE_OAUTH_CLIENT_SECRET` | — | OAuth client secret (required with `CLIENT_ID`) |\n| `TAILSCALE_API_KEY` | — | Legacy API key fallback |\n| `TAILSCALE_TAILNET` | `-` | Tailnet name or `-` shorthand for the default tailnet |\n| `TAILSCALE_API_BASE_URL` | `https://api.tailscale.com` | Tailscale API base URL (https required except for localhost) |\n| `TAILSCALE_ALLOWED_TOOL_RISK` | `read` | Maximum allowed tool risk: `read`, `write`, or `admin` |\n| `TAILSCALE_CLI_PATH` | `tailscale` | Path to the local Tailscale CLI binary |\n| `MCP_TRANSPORT` | `stdio` | Transport mode: `stdio` or `http` |\n| `MCP_HTTP_BIND_HOST` | `127.0.0.1` | Host to bind in HTTP mode |\n| `MCP_HTTP_PORT` | `3000` | Port to bind in HTTP mode |\n| `MCP_HTTP_BEARER_TOKEN` | — | Required for HTTP mode (minimum 32 characters) |\n| `MCP_ALLOWED_HOSTS` | — | Comma-separated additional allowed HTTP Host header values |\n| `LOG_LEVEL` | `info` | Log verbosity: `debug`, `info`, `warn`, or `error` |\n| `MCP_SERVER_LOG_FILE` | — | Optional file path for log output |\n\n### Risk levels\n\n- `read` — list devices, inspect status, read resources, run diagnostics.\n- `write` — update ACLs, DNS, routes, policy files, webhooks, tags, and other mutating settings.\n- `admin` — destructive or host-affecting operations: delete, deauthorize, connect, disconnect, auth key mutation, file sharing changes, exit node control.\n\n---\n\n## HTTP Transport\n\nHTTP mode is intended for private tailnet access. It requires `MCP_HTTP_BEARER_TOKEN` and binds to `127.0.0.1` by default.\n\n```bash\nexport MCP_TRANSPORT=http\nexport MCP_HTTP_BEARER_TOKEN=\"$(openssl rand -base64 32)\"\nexport TAILSCALE_OAUTH_CLIENT_ID=\"your-client-id\"\nexport TAILSCALE_OAUTH_CLIENT_SECRET=\"your-client-secret\"\nexport TAILSCALE_TAILNET=\"-\"\n\nnpx -y @hexsleeves/tailscale-mcp-server --http --host 127.0.0.1 --port 3000\n```\n\nExpose privately with Tailscale Serve (recommended for tailnet deployments):\n\n```bash\ntailscale serve --bg 443 localhost:3000\n```\n\nDo not use Tailscale Funnel for normal MCP operation. Funnel makes the endpoint publicly reachable on the internet.\n\nA `GET /health` endpoint returns `200 OK` when the server is running.\n\nFor full Docker sidecar deployment instructions, see [docs/docker.md](docs/docker.md).\n\n---\n\n## Docker\n\n### Run with Docker Hub image\n\n```bash\ndocker run --rm \\\n  -e TAILSCALE_API_KEY=\"tskey-api-...\" \\\n  -e TAILSCALE_TAILNET=\"-\" \\\n  -p 127.0.0.1:3000:3000 \\\n  hexsleeves/tailscale-mcp-server:latest\n```\n\n### Run with GHCR image\n\n```bash\ndocker run --rm \\\n  -e TAILSCALE_API_KEY=\"tskey-api-...\" \\\n  -e TAILSCALE_TAILNET=\"-\" \\\n  -p 127.0.0.1:3000:3000 \\\n  ghcr.io/hexsleeves/tailscale-mcp-server:latest\n```\n\n### Build locally\n\n```bash\ndocker build -t tailscale-mcp-server .\n```\n\nFor sidecar deployment with Tailscale Serve, see [docs/docker.md](docs/docker.md).\n\n---\n\n## Example Prompts\n\nOnce the server is connected to your MCP client, try these:\n\n- \"List my Tailscale devices and show which ones are offline.\"\n- \"What is the current Tailscale network status on this machine?\"\n- \"Diagnose connectivity to my NAS at 100.64.0.5.\"\n- \"Show me the current ACL policy for my tailnet.\"\n- \"Review this ACL change before I apply it.\" *(attach the new policy)*\n- \"What DNS nameservers is my tailnet using?\"\n- \"List all active webhooks in my tailnet.\"\n\n---\n\n## Development\n\n```bash\n# Install dependencies (Bun required for development)\nbun install\n\n# Type check\nbun run typecheck\n\n# Run tests\nbun test\n\n# Lint and format\nbun run check\n\n# Build\nbun run build\n\n# Full verification (typecheck + lint + test + build)\nbun run qa:full\n\n# Security audit\nbun audit\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full development workflow, commit conventions, and release process.\n\n---\n\n## Contributing\n\nContributions are welcome. Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request.\n\n- [CONTRIBUTING.md](CONTRIBUTING.md) — development setup, commit conventions, PR process.\n- [SECURITY.md](SECURITY.md) — responsible disclosure policy.\n- [LICENSE](LICENSE) — MIT.\n","readmeFilename":"README.md","homepage":"https://github.com/HexSleeves/tailscale-mcp#readme","repository":{"type":"git","url":"git+https://github.com/HexSleeves/tailscale-mcp.git"},"bugs":{"url":"https://github.com/HexSleeves/tailscale-mcp/issues"}}