这是一个使用官方 Tailscale Go 客户端库 v2 来管理 Tailscale 资源的 MCP(模型上下文协议)服务器。该服务器提供了对 Tailscale API 的全面覆盖,并通过 OpenAPI 文档增强了自描述工具。
此 MCP 服务器提供42个全面工具,按逻辑类别组织,每个工具都有详细的描述、OAuth 范围、用例和安全注意事项:
运行 Tailscale MCP 服务器最简单的方法是使用 Docker:
# 使用 API 密钥认证
docker run -d \
--name tailscale-mcp-server \
--restart unless-stopped \
-e TAILSCALE_API_KEY="tskey-api-..." \
-e TAILSCALE_TAILNET="your-tailnet" \
tailscale-mcp-server:latest
# 使用 OAuth 认证
docker run -d \
--name tailscale-mcp-server \
--restart unless-stopped \
-e TAILSCALE_CLIENT_ID="your-client-id" \
-e TAILSCALE_CLIENT_SECRET="your-client-secret" \
-e TAILSCALE_TAILNET="your-tailnet" \
tailscale-mcp-server:latest
git clone <repository-url>
cd mcp
# 复制示例环境文件
cp .env.example .env
# 编辑您的凭据
vim .env
# 构建并启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务器
docker-compose down
# 构建镜像
docker build -t tailscale-mcp-server:local .
# 使用本地镜像运行
docker run -d \
--name tailscale-mcp-server \
-e TAILSCALE_API_KEY="tskey-api-..." \
tailscale-mcp-server:local
git clone <repository-url>
cd mcp
go mod tidy
go build -o tailscale-mcp-server ./cmd
# 直接下载并安装
go install github.com/pnocera/tailscale-mcp-server/cmd@latest
服务器支持 API 密钥和 OAuth 认证方法,以实现最大灵活性。
export TAILSCALE_API_KEY="tskey-api-..."
export TAILSCALE_TAILNET="your-tailnet-name" # 可选,默认为 "-"
export TAILSCALE_CLIENT_ID="your-oauth-client-id"
export TAILSCALE_CLIENT_SECRET="your-oauth-client-secret"
export TAILSCALE_TAILNET="your-tailnet-name" # 可选,默认为 "-"
TAILSCALE_CLIENT_ID 和 TAILSCALE_CLIENT_SECRET,则使用 OAuthTAILSCALE_API_KEY# 使用 API 密钥认证
TAILSCALE_API_KEY="tskey-api-..." ./tailscale-mcp-server
# 使用 OAuth 认证
TAILSCALE_CLIENT_ID="..." TAILSCALE_CLIENT_SECRET="..." ./tailscale-mcp-server
# 使用自定义尾网
TAILSCALE_API_KEY="tskey-api-..." TAILSCALE_TAILNET="mycompany.com" ./tailscale-mcp-server
使用 Docker:
# 将 Docker 容器添加到 Claude Code
claude mcp add tailscale docker run --rm -i \
-e TAILSCALE_API_KEY="tskey-api-..." \
tailscale-mcp-server:latest
使用二进制:
# 将二进制文件添加到 Claude Code
claude mcp add tailscale /path/to/tailscale-mcp-server
使用 Docker:
{
"mcpServers": {
"tailscale": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TAILSCALE_API_KEY=tskey-api-...",
"-e", "TAILSCALE_TAILNET=your-tailnet",
"tailscale-mcp-server:latest"
]
}
}
}
使用二进制:
{
"mcpServers": {
"tailscale": {
"command": "/path/to/tailscale-mcp-server",
"env": {
"TAILSCALE_API_KEY": "tskey-api-...",
"TAILSCALE_TAILNET": "your-tailnet"
}
}
}
}
即时设置:
# Bash/Linux/macOS - 快速运行并验证环境
./scripts/quick-run.sh
# PowerShell/Windows - 快速运行并验证环境
.\scripts\quick-run.ps1
# 自定义镜像
./scripts/quick-run.sh ghcr.io/myuser/tailscale-mcp-server:v1.0.0
注册发布:
# Bash - 构建并推送到注册表
./scripts/build-and-push.sh
./scripts/build-and-push.sh ghcr.io/myuser v1.0.0
./scripts/build-and-push.sh docker.io/myuser latest linux/amd64
# PowerShell - 构建并推送到注册表
.\scripts\build-and-push.ps1
.\scripts\build-and-push.ps1 -Registry "ghcr.io/myuser" -Tag "v1.0.0"
.\scripts\build-and-push.ps1 -Registry "docker.io/myuser" -Platform "linux/amd64"
# 检查容器状态
docker ps | grep tailscale-mcp-server
# 查看容器日志
docker logs tailscale-mcp-server
# 重启容器
docker restart tailscale-mcp-server
# 更新到最新镜像
docker pull tailscale-mcp-server:latest
docker stop tailscale-mcp-server
docker rm tailscale-mcp-server
# 然后使用新镜像运行
// 列出所有设备及其详细信息
{
"name": "tailscale_devices_list",
"arguments": {
"fields": "all"
}
}
// 获取特定设备的详细信息
{
"name": "tailscale_device_get",
"arguments": {
"device_id": "device-id-here",
"fields": "all"
}
}
// 授权设备
{
"name": "tailscale_device_authorize",
"arguments": {
"device_id": "device-id-here",
"authorized": true
}
}
// 为 ACL 基础的访问控制设置设备标签
{
"name": "tailscale_device_set_tags",
"arguments": {
"device_id": "device-id-here",
"tags": ["tag:server", "tag:production"]
}
}
// 创建一个可重复使用的预授权密钥并带有标签
{
"name": "tailscale_key_create",
"arguments": {
"reusable": true,
"ephemeral": false,
"preauthorized": true,
"description": "CI/CD 部署密钥",
"tags": ["tag:ci", "tag:automated"],
"expiry_seconds": 86400
}
}
// 列出所有身份验证密钥
{
"name": "tailscale_keys_list",
"arguments": {}
}
// 设置自定义 DNS 名服务器
{
"name": "tailscale_dns_nameservers_set",
"arguments": {
"nameservers": ["8.8.8.8", "8.8.4.4", "1.1.1.1"]
}
}
// 启用 MagicDNS 以便轻松连接设备
{
"name": "tailscale_dns_preferences_set",
"arguments": {
"magic_dns": true
}
}
// 设置短主机名的 DNS 搜索路径
{
"name": "tailscale_dns_searchpaths_set",
"arguments": {
"search_paths": ["company.com", "internal.local"]
}
}
// 获取当前 ACL 策略
{
"name": "tailscale_policy_get",
"arguments": {}
}
// 在应用前验证策略
{
"name": "tailscale_policy_validate",
"arguments": {
"policy": "{\n \"acls\": [\n {\n \"action\": \"accept\",\n \"src\": [\"tag:server\"],\n \"dst\": [\"tag:database:5432\"]\n }\n ]\n}"
}
}
// 更新 ACL 策略
{
"name": "tailscale_policy_set",
"arguments": {
"policy": "{\n \"acls\": [\n {\n \"action\": \"accept\",\n \"src\": [\"*\"],\n \"dst\": [\"*:*\"]\n }\n ]\n}"
}
}
// 为设备事件创建 webhook
{
"name": "tailscale_webhook_create",
"arguments": {
"endpoint_url": "https://your-app.com/webhook",
"subscriptions": ["device.created", "device.deleted", "user.approved"]
}
}
// 创建设备态势集成
{
"name": "tailscale_device_posture_integration_create",
"arguments": {
"provider": "crowdstrike",
"client_id": "your-client-id",
"client_secret": "your-client-secret",
"tenant_id": "your-tenant-id"
}
}
服务器遵循干净、模块化的架构:
├── cmd/
│ └── main.go # 入口点和服务器设置
├── internal/
│ ├── config/ # 配置管理
│ ├── client/ # Tailscale 客户端包装器
│ └── handlers/ # MCP 请求处理器
├── pkg/
│ └── tools/ # 工具实现
│ ├── devices.go # 设备管理(9个工具)
│ ├── keys.go # 密钥管理(4个工具)
│ ├── users.go # 用户及联系人管理(8个工具)
│ ├── dns.go # DNS 及策略管理(9个工具)
│ └── additional.go # 高级功能(12个工具)
├── tailscale_api_docs/ # OpenAPI 文档
├── .gitignore # Git 忽略规则
├── LICENSE.md # MIT 许可证
└── README.md # 本文档
每个工具在其描述中指定了所需的 OAuth 范围:
devices:read / devices:write - 设备管理keys:read / keys:write - 身份验证密钥管理users:read / users:write - 用户管理dns:read / dns:write - DNS 配置acl:read / acl:write - ACL 策略管理webhooks:read / webhooks:write - webhook 管理logging:read - 日志配置访问posture:read / posture:write - 设备态势管理settings:read / settings:write - 尾网设置tailscale_api_docs/tailscaleapi.yaml 中pkg/tools/ 中RegisterTools 方法中添加工具定义:tool := mcp.NewTool(
"tailscale_new_tool",
mcp.WithDescription("详细功能描述,包括 OAuth 范围和用例"),
mcp.WithString("param", mcp.Description("参数描述"), mcp.Required()),
)
mcpServer.AddTool(tool, dt.NewToolHandler)
所有工具都包括: