VPN基础设施管理服务器

NetBird MCP Server是一个通过AI助手提供50多种工具用于完整VPN基础设施管理的模型上下文协议服务器。

  • by XNet-NGO
  • Go
  • 本地部署
  • 8 星标
  • 更新于
在 GitHub 查看 XNet-NGO/mcp-netbird

使用说明

NetBird MCP服务器

全面 模型上下文协议 (MCP)服务器 NetBird 通过AI助手提供50多种工具,用于完整的VPN基础设施管理。

由XNet股份有限公司维护。
首席开发人员:Joshua S.Doucette

关于

此MCP服务器使Kiro、Claude Desktop和其他MCP客户端等AI助手能够以编程方式管理NetBird VPN基础设施。它提供:

  • 50+管理工具:完成所有NetBird资源的CRUD操作
  • 多个部署选项:本地STDIO、远程SSE或Docker MCP网关
  • 高级策略管理:验证、依赖性跟踪和批量操作
  • 辅助函数:组整合、策略模板和通用工作流
  • 生产就绪:全面的错误处理、日志记录和安全功能

该项目最初源自Grafana Labs的Grafana MCP服务器,现已针对NetBird基础设施管理进行了大幅扩展和增强。

快速开始

Docker(推荐)

最简单的入门方法是将Docker与Docker MCP网关一起使用:

# Pull the latest image
docker pull xnetadmin/mcp-netbird:latest

# Run in SSE mode for remote access
docker run -d \
  --name mcp-netbird \
  -p 8001:8001 \
  -e NETBIRD_API_TOKEN=your_token_here \
  -e NETBIRD_API_HOST=api.netbird.io \
  xnetadmin/mcp-netbird:latest \
  -t sse -sse-address 0.0.0.0:8001

然后配置MCP客户端(请参阅 配置 在......下面

从版本安装

从以下位置下载适用于您平台的预构建二进制文件 发布页面.

Linux(Debian/Ubuntu):

wget https://github.com/XNet-NGO/mcp-netbird/releases/latest/download/mcp-netbird_VERSION_linux_x86_64.deb
sudo dpkg -i mcp-netbird_VERSION_linux_x86_64.deb

Linux(其他):

wget https://github.com/XNet-NGO/mcp-netbird/releases/latest/download/mcp-netbird_VERSION_Linux_x86_64.tar.gz
tar -xzf mcp-netbird_VERSION_Linux_x86_64.tar.gz
sudo mv mcp-netbird /usr/local/bin/

macOS:

# Intel Macs
wget https://github.com/XNet-NGO/mcp-netbird/releases/latest/download/mcp-netbird_VERSION_Darwin_x86_64.tar.gz
tar -xzf mcp-netbird_VERSION_Darwin_x86_64.tar.gz
sudo mv mcp-netbird /usr/local/bin/

# Apple Silicon
wget https://github.com/XNet-NGO/mcp-netbird/releases/latest/download/mcp-netbird_VERSION_Darwin_arm64.tar.gz
tar -xzf mcp-netbird_VERSION_Darwin_arm64.tar.gz
sudo mv mcp-netbird /usr/local/bin/

视窗:从下载ZIP 发布,提取并添加到PATH。

从源头构建

git clone https://github.com/XNet-NGO/mcp-netbird
cd mcp-netbird
make install

或者直接从GitHub安装:

go install github.com/XNet-NGO/mcp-netbird/cmd/mcp-netbird@latest

配置

NetBird MCP服务器支持三种部署模式。选择最适合您用例的一个。

获取NetBird API代币

在配置之前,您需要一个NetBird API令牌:

  1. 登录您的NetBird仪表板(https://app.netbird.io或您的自托管实例)
  2. 首选 设置→ 访问令牌
  3. 创建一个 服务用户 (建议用于生产)或使用个人令牌
  4. 分配适当的角色: 管理员 (完全访问)或 网络管理员 (仅限网络管理)
  5. 生成并复制API令牌(从 nbp_)

部署选项

选项1:Docker MCP网关(推荐)

Docker MCP网关为远程MCP服务器提供最佳体验,处理本地STDIO和远程SSE之间的协议转换。

1.启用NetBird MCP服务器

创建或更新 ~/.docker/mcp/config.yaml:

netbird-mcp-server:
  netbird_host: api.netbird.io  # or your self-hosted domain
  enabled: true

2.设置您的API代币

创建或更新 ~/.docker/mcp/.env:

NETBIRD_API_TOKEN=nbp_your_token_here

3.配置您的MCP客户端

对于 基罗 (~/.kiro/settings/mcp.json):

{
  "mcpServers": {
    "MCP_DOCKER": {
      "command": "docker",
      "args": [
        "mcp",
        "gateway",
        "run",
        "--servers=netbird-mcp-server"
      ],
      "disabled": false,
      "autoApprove": ["*"]
    }
  }
}

对于 克劳德桌面版 (~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):

{
  "mcpServers": {
    "MCP_DOCKER": {
      "command": "docker",
      "args": [
        "mcp",
        "gateway",
        "run",
        "--servers=netbird-mcp-server"
      ]
    }
  }
}

4.验证设置

# Check server is enabled
docker mcp server list | grep netbird

# Restart your MCP client (Kiro/Claude Desktop)
# Tools will appear with mcp_MCP_DOCKER_ prefix

选项2:本地STDIO模式

在本地运行MCP服务器以进行开发或单用户场景。

献给基洛 (~/.kiro/settings/mcp.json):

{
  "mcpServers": {
    "netbird": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "xnetadmin/mcp-netbird:latest",
        "-t",
        "stdio"
      ],
      "env": {
        "NETBIRD_API_TOKEN": "nbp_your_token_here",
        "NETBIRD_API_HOST": "api.netbird.io"
      },
      "disabled": false
    }
  }
}

适用于克劳德桌面:

{
  "mcpServers": {
    "netbird": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "xnetadmin/mcp-netbird:latest",
        "-t",
        "stdio"
      ],
      "env": {
        "NETBIRD_API_TOKEN": "nbp_your_token_here",
        "NETBIRD_API_HOST": "api.netbird.io"
      }
    }
  }
}

选项3:远程SSE服务器

将MCP服务器部署为远程服务,供团队协作或生产使用。

1.部署MCP服务器

创建 docker-compose.yml:

version: '3.8'

services:
  mcp-netbird:
    image: xnetadmin/mcp-netbird:latest
    container_name: mcp-netbird-server
    restart: unless-stopped
    command: ["-t", "sse", "-sse-address", "0.0.0.0:8001"]
    environment:
      - NETBIRD_API_TOKEN=nbp_your_token_here
      - NETBIRD_API_HOST=api.netbird.io
    ports:
      - "8001:8001"

部署:

docker compose up -d

2.配置反向代理(可选但推荐)

卡迪 (Caddyfile):

mcp.example.com {
    reverse_proxy /sse localhost:8001 {
        flush_interval -1  # Required for SSE
    }
    redir / /sse
}

Nginx:

server {
    listen 443 ssl http2;
    server_name mcp.example.com;
    
    location /sse {
        proxy_pass http://localhost:8001;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_buffering off;  # Required for SSE
        proxy_cache off;
        chunked_transfer_encoding off;
    }
}

3.配置Docker MCP网关

更新 ~/.docker/mcp/config.yaml:

netbird-mcp-server:
  url: https://mcp.example.com/sse
  transport: sse
  enabled: true

然后添加到MCP客户端配置中,如选项1所示。

配置优先

当多个配置源提供相同的值时:

CLI参数>HTTP标头>环境变量

例子:

# Environment variable
export NETBIRD_API_TOKEN="token-from-env"

# CLI argument overrides environment
mcp-netbird --api-token "token-from-cli"
# Result: Uses "token-from-cli"

自托管NetBird

对于自托管NetBird实例,请将API主机设置为您的域:

# Docker MCP Gateway
netbird-mcp-server:
  netbird_host: api.yourdomain.com
  enabled: true

或者对于STDIO模式:

{
  "env": {
    "NETBIRD_API_TOKEN": "your_token",
    "NETBIRD_API_HOST": "api.yourdomain.com"
  }
}

故障排除

工具未出现:配置更改后重新启动MCP客户端。

连接超时:验证API令牌是否有效以及是否具有适当的权限。

401未经授权:请检查您的API令牌是否尚未过期。

有关详细的设置说明,请参阅 docs/MCP_SETUP_GUIDE.md.

特性

完整的NetBird API覆盖范围

MCP服务器提供50多种工具,涵盖所有NetBird资源:

资源 操作 描述
同行 列表、获取、更新、删除 管理网络对等体及其配置
群组 列表、获取、创建、更新、删除 将对等体组织到逻辑组中
政策 列表、获取、创建、更新、删除 控制组之间的网络访问
网络 列表、获取、创建、更新、删除 管理网络配置
网络资源 列表、获取、创建、更新、删除 定义网络子网和资源
网络路由器 列表、获取、创建、更新、删除 为网络配置路由对等体
域名服务器 列表、获取、创建、更新、删除 管理DNS名称服务器组
路线 列表、获取、创建、更新、删除 配置网络路由(旧版)
设置键 列表、获取、创建、更新、删除 生成对等注册密钥
用户 列表、获取、邀请、更新、删除 管理用户帐户和权限
姿势检查 列表、获取、创建、更新、删除 定义安全态势要求
端口分配 列表、获取、创建、更新、删除 管理入口端口转发
账户 获取、更新 配置全帐户设置

辅助工具

用于常见管理工作流的高级工具:

  • 列表_政策_组:查找引用特定组的所有策略
  • replace_group_in_policies:批量替换所有策略中的组
  • get_policy_template:获取带有文档的示例策略结构

关键能力

  • ✅ 完整的CRUD操作:创建、读取、更新和删除所有NetBird资源
  • ✅ 策略验证:在提交API之前自动验证策略规则
  • ✅ 依赖项跟踪:查找和管理资源依赖关系
  • ✅ 批量操作:跨多个资源执行操作
  • ✅ 错误处理:全面的错误消息和恢复建议
  • ✅ 生产就绪:安全的身份验证、日志记录和监控支持

用法示例

基本操作

列出所有同行:

mcp_MCP_DOCKER_list_netbird_peers()
// Returns: Array of peer objects with IP, status, groups, etc.

创建组:

mcp_MCP_DOCKER_create_netbird_group({
  name: "developers",
  peers: []  // Add peer IDs here
})

创建设置密钥:

mcp_MCP_DOCKER_create_netbird_setup_key({
  name: "dev-team-key",
  type: "reusable",
  expires_in: 2592000,  // 30 days
  auto_groups: ["dev-group-id"],
  usage_limit: 50
})

策略管理

创建一个简单的策略:

mcp_MCP_DOCKER_create_netbird_policy({
  name: "Admin SSH Access",
  description: "Allow admins to SSH to servers",
  enabled: true,
  rules: [{
    name: "SSH Rule",
    enabled: true,
    action: "accept",
    bidirectional: false,
    protocol: "tcp",
    sources: ["admin-group-id"],
    destinations: ["server-group-id"],
    port_ranges: [{ start: 22, end: 22 }]
  }]
})

使用组查找策略:

mcp_MCP_DOCKER_list_policies_by_group({
  group_id: "d535b93ngf8s73892nng"
})
// Returns: List of policies referencing this group

在所有策略中替换组:

mcp_MCP_DOCKER_replace_group_in_policies({
  old_group_id: "old-group-id",
  new_group_id: "new-group-id"
})
// Updates all policies to use the new group

网络配置

创建网络:

const network = mcp_MCP_DOCKER_create_netbird_network({
  name: "production-network",
  description: "Production infrastructure"
})

添加网络资源:

mcp_MCP_DOCKER_create_netbird_network_resource({
  network_id: network.id,
  name: "database-subnet",
  address: "10.0.1.0/24",
  enabled: true,
  groups: ["db-group-id"]
})

配置网络路由器:

mcp_MCP_DOCKER_create_netbird_network_router({
  network_id: network.id,
  peer: "router-peer-id",
  metric: 100,
  masquerade: true,
  enabled: true
})

DNS配置

添加名称服务器组:

mcp_MCP_DOCKER_create_netbird_nameserver({
  name: "Cloudflare DNS",
  description: "Primary DNS resolver",
  nameservers: [
    { ip: "1.1.1.1", ns_type: "udp", port: 53 },
    { ip: "1.0.0.1", ns_type: "udp", port: 53 }
  ],
  enabled: true,
  groups: ["all-group-id"],
  primary: true,
  domains: [],
  search_domains_enabled: false
})

完整工作流示例

以下是设置新环境的完整示例:

// 1. Create groups
const adminGroup = mcp_MCP_DOCKER_create_netbird_group({
  name: "admins",
  peers: []
})

const serverGroup = mcp_MCP_DOCKER_create_netbird_group({
  name: "servers",
  peers: []
})

// 2. Create setup keys
const adminKey = mcp_MCP_DOCKER_create_netbird_setup_key({
  name: "admin-key",
  type: "reusable",
  expires_in: 2592000,
  auto_groups: [adminGroup.id],
  usage_limit: 10
})

const serverKey = mcp_MCP_DOCKER_create_netbird_setup_key({
  name: "server-key",
  type: "reusable",
  expires_in: 2592000,
  auto_groups: [serverGroup.id],
  usage_limit: 100
})

// 3. Create policy
mcp_MCP_DOCKER_create_netbird_policy({
  name: "Admin Access",
  description: "Allow admins to access servers",
  enabled: true,
  rules: [{
    name: "Admin to Servers",
    enabled: true,
    action: "accept",
    bidirectional: true,
    protocol: "all",
    sources: [adminGroup.id],
    destinations: [serverGroup.id]
  }]
})

// 4. Configure DNS
mcp_MCP_DOCKER_create_netbird_nameserver({
  name: "Primary DNS",
  nameservers: [
    { ip: "1.1.1.1", ns_type: "udp", port: 53 }
  ],
  enabled: true,
  groups: [adminGroup.id, serverGroup.id],
  primary: true
})

// Setup keys can now be used to enroll peers
console.log("Admin key:", adminKey.key)
console.log("Server key:", serverKey.key)

使用AI助手

配置后,您可以通过自然语言与NetBird交互:

Kiro/Claude桌面:

  • “你能解释一下我的NetBird对等体、组和策略吗?”
  • “创建一个名为“开发人员”的新组,并为其生成设置密钥”
  • “显示引用管理员组的所有策略”
  • “配置DNS以对所有对等端使用Cloudflare”

有关更多示例和详细文档,请参阅 docs/MCP_SETUP_GUIDE.md.

高级用法

策略规则格式

在创建或更新策略时,规则必须遵循以下结构:

{
  "name": "Rule Name",
  "description": "Optional description",
  "enabled": true,
  "action": "accept",
  "bidirectional": true,
  "protocol": "all",
  "sources": ["group-id-1"],
  "destinations": ["group-id-2"],
  "port_ranges": [
    {"start": 80, "end": 80},
    {"start": 443, "end": 443}
  ]
}

必填字段:

  • name, enabled, action, bidirectional, protocol
  • 至少一个源(组ID数组或sourceResource对象)
  • 至少一个目标(组ID数组或destinationResource对象)

可选字段:

  • description, port_ranges (仅TCP/UDP), authorized_groups

获取策略模板:

mcp_MCP_DOCKER_get_policy_template()
// Returns example policy structures with documentation

群组管理

查找组依赖关系:

mcp_MCP_DOCKER_list_policies_by_group({
  group_id: "d535b93ngf8s73892nng"
})
// Returns all policies referencing this group

强制删除组 (从所有策略中删除):

mcp_MCP_DOCKER_delete_netbird_group({
  group_id: "group-id",
  force: true
})

生产部署

对于生产环境,将MCP服务器部署为远程SSE服务:

  1. 使用Docker Compose进行部署 (参见 配置)
  2. 配置反向代理 使用SSL/TLS(Caddy或Nginx)
  3. 设置监控 以及日志记录
  4. 使用服务用户 具有适当的权限
  5. 旋转API令牌 定期

看 docs/MCP_SETUP_GUIDE.md 获取详细的生产部署指南。

码头工人

构建自定义图像

构建并标记图像:

docker build -t mcp-netbird-sse:v1 -f Dockerfile.sse .

使用不同的配置方法运行:

环境变量:

docker run --name mcp-netbird -p 8001:8001 \
  -e NETBIRD_API_TOKEN=your_token \
  -e NETBIRD_API_HOST=api.netbird.io \
  mcp-netbird-sse:v1

命令行参数:

docker run --name mcp-netbird -p 8001:8001 \
  mcp-netbird-sse:v1 \
  --transport sse \
  --sse-address :8001 \
  --api-token your_token \
  --api-host api.netbird.io

无状态(HTTP标头):

# Run without credentials
docker run --name mcp-netbird -p 8001:8001 mcp-netbird-sse:v1

# Pass credentials per request
curl -X POST http://localhost:8001/sse \
  -H "X-Netbird-API-Token: your_token" \
  -H "X-Netbird-Host: api.netbird.io" \
  -H "Content-Type: application/json" \
  -d '{"method": "tools/list"}'

使用ToolHive

ToolHive 简化了MCP服务器部署:

# Install thv
# See: https://github.com/StacklokLabs/toolhive#installation

# Add NetBird API token
thv secret set netbird

# Build SSE image
docker build -t mcp-netbird-sse:v1 -f Dockerfile.sse .

# Start server
thv run --secret netbird,target=NETBIRD_API_TOKEN \
  --transport sse \
  --name thv-mcp-netbird \
  --port 8080 \
  --target-port 8001 \
  mcp-netbird-sse:v1

# Stop server
thv stop thv-mcp-netbird

发展

欢迎投稿!请打开问题或提交拉取请求。

先决条件

  • 转到1.21或更高版本
  • Docker(用于测试SSE模式)
  • Make(可选,方便命令)

本地运行

STDIO模式:

export NETBIRD_API_TOKEN=your_token
go run cmd/mcp-netbird/main.go

SSE模式:

go run cmd/mcp-netbird/main.go \
  --transport sse \
  --sse-address :8001 \
  --api-token your_token \
  --api-host api.netbird.io

使用MCP检查器进行调试

这 MCP 检查员 是用于测试MCP服务器的交互式工具:

# Install and run
npx @modelcontextprotocol/inspector

# In the UI, configure:
# - Transport: stdio or sse
# - Command: mcp-netbird --api-token your_token
# - Or URL: http://localhost:8001/sse (for SSE mode)

测试

运行测试套件:

make test

运行特定测试:

go test ./tools -v -run TestListPeers

代码检查

make lint

添加新工具

  1. 在中创建新文件 tools/ (例如。, tools/new_resource.go)
  2. 按照现有模式实现工具功能
  3. 将工具添加到 func newServer() 在 cmd/mcp-netbird/main.go
  4. 在中添加测试 tools/new_resource_test.go
  5. 更新文档

项目结构

mcp-netbird/
├── cmd/mcp-netbird/     # Main application entry point
├── tools/               # MCP tool implementations
│   ├── peers.go
│   ├── groups.go
│   ├── policies.go
│   └── ...
├── docs/                # Documentation
│   └── MCP_SETUP_GUIDE.md
├── Dockerfile           # STDIO mode container
├── Dockerfile.sse       # SSE mode container
└── Makefile            # Build and development commands

文档

支持和社区

许可证

该项目根据 Apache许可证,版本2.0.

版权所有2025-2026 XNet股份有限公司。
版权所有2025-2026约书亚·S·杜赛特

归因

该项目最初源于 Grafana的MCP服务器 由Grafana Labs开发。当前的代码库已针对NetBird基础架构管理进行了大幅修改和扩展。

此项目使用 MCP Go 由Mark III实验室开发。


由XNet股份有限公司维护|首席开发人员:Joshua S.Doucette

如有疑问或支持,请在GitHub上发布问题或通过我们的社区渠道联系我们。