NetBox MCP服务器部署
前言:为什么要用 MCP 服务器
在传统方式中,如果我们希望程序或自动化脚本获取 NetBox 中的数据,通常会直接调用 NetBox REST API。这种方式稳定、直接,也非常适合固定流程的系统集成,例如资产同步、批量导出、自动化巡检等。
但当我们希望让 AI 助手或 Agent 参与网络运维时,直接调用 REST API 就不够方便了。NetBox 的数据模型较为复杂,涉及站点、机柜、设备、接口、IP 地址、VLAN、前缀、线缆等多个对象。AI 如果直接面对原始 REST API,需要理解大量接口路径、查询参数、分页逻辑和返回字段,这不仅增加了集成复杂度,也容易造成调用不稳定或上下文浪费。
MCP,全称 Model Context Protocol,即模型上下文协议。它的作用是为 AI 模型提供一种标准化方式,让模型能够安全、统一地访问外部系统、工具和数据源。通过 MCP 服务器,我们可以把 NetBox 的 REST API 封装成一组更适合 AI 使用的工具,例如查询设备、查找可用 IP、获取接口信息、分析设备连接关系等。这样,AI 不需要直接理解 NetBox 底层 API,只需要调用语义清晰的 MCP 工具,就可以完成对 NetBox 数据的查询和分析。
使用 netbox-mcp-server 的核心价值在于:它不是替代 NetBox API,而是在 NetBox API 之上增加了一层面向 AI 的适配层。这个适配层可以隐藏底层接口细节,整理返回结果,减少无关字段,并为 AI 提供更容易理解的上下文。对于网络运维人员来说,这意味着可以用自然语言向 AI 提问,例如“某个站点有哪些交换机”“某个网段还有多少可用 IP”“这台设备连接到了哪里”,而不必手动编写 API 请求或解析复杂 JSON。
此外,MCP 服务器还可以作为安全边界。相比直接把 NetBox API Token 暴露给 AI 客户端,通过 MCP 服务器可以集中管理访问凭据、限制可用工具、控制读写权限,并在必要时增加审计、脱敏和访问控制。这对于生产环境中的网络资产数据尤为重要。
因此,在构建 AI 运维助手、网络 Copilot 或自动化 Agent 时,部署一个 NetBox MCP 服务器可以显著降低集成复杂度,让 AI 以更标准、更安全、更自然的方式使用 NetBox 数据。简单来说,NetBox REST API 更适合传统程序调用,而 netbox-mcp-server 更适合让 AI 助手理解、查询和分析 NetBox。
Netbox 系列文章:https://songxwn.com/categories/NetBox/
环境介绍
Rocky Linux 9 (理论上也适用于RHEL系列的7-9版本)
南京大学镜像源ISO镜像下载:https://mirror.nju.edu.cn/rocky/9/isos/x86_64/Rocky-9-latest-x86_64-minimal.iso
环境配置
1 | systemctl disable --now firewalld |
Docker-CE 环境安装
1 | yum install -y yum-utils |
参考清华大学源:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
Docker国内镜像加速器配置
1 | sudo mkdir -p /etc/docker |
PS: 或者参考 https://songxwn.com/cf-works-DockerHub-Proxy/ 自行搭建
MCP项目地址:
1 | https://github.com/netboxlabs/netbox-mcp-server |
一、部署架构
整体关系是:
1 | AI 客户端 / Agent |
也就是说,netbox-mcp-server 本身不存储 NetBox 数据,它只是一个 MCP 适配层,后面仍然通过 NetBox REST API 查询数据。
二、准备条件
你需要提前准备好:
- 一台已经运行的 NetBox
- NetBox API Token
- Docker
- Docker Compose
假设你的 NetBox 地址是:
1 | https://netbox.example.com |
API Token 类似:
1 | 0123456789abcdef0123456789abcdef01234567 |
建议使用 只读权限 Token,除非你明确需要让 AI 修改 NetBox 数据。(注意目前只支持v1 的API Token)
三、创建部署目录
1 | mkdir -p /opt/netbox-mcp-server |
四、创建 .env 文件
- .env文件会默认隐藏,打开修改直接输入全名即可。
1 | cat > .env << 'EOF' |
修改成你自己的 NetBox 地址和 Token:
1 | vim .env |
例如:
1 | NETBOX_URL=https://netbox.songxwn.com |
- 注意这里的监听端口是容器对外映射的端口
五、创建 docker-compose.yml 文件
1 | cat > docker-compose.yml << 'EOF' |
六、启动服务
1 | docker compose up -d |
查看容器状态:
1 | docker compose ps |
查看日志:
1 | docker compose logs -f |
如果启动成功,通常你会看到类似信息:
1 | netbox-mcp-server listening on 0.0.0.0:8000 |
七、确认 MCP Server 是否运行
查看端口监听:
1 | docker compose ps |
或者:
1 | curl http://127.0.0.1:8000 |
如果该 MCP Server 使用 SSE 或 Streamable HTTP,常见访问地址可能类似:
1 | http://127.0.0.1:8000/sse |
或者:
1 | http://127.0.0.1:8000/mcp |
具体 endpoint 需要以项目 README 或启动日志为准。
你也可以进入容器查看帮助:
1 | docker compose exec netbox-mcp-server netbox-mcp-server --help |
如果命令名不是 netbox-mcp-server,可以查看容器内可执行文件:
1 | docker compose exec netbox-mcp-server sh |
然后执行:
1 | which netbox-mcp-server |
或:
1 | ls /usr/local/bin |
八、连接 MCP 客户端
不同客户端的 MCP 配置略有不同。
方式一:HTTP / SSE 方式
如果你的 AI 客户端支持远程 MCP Server,可以配置类似:
1 | { |
或者:
1 | { |
具体用 /sse 还是 /mcp,要看 netbox-mcp-server 当前版本支持的 transport。
方式二:Claude Desktop 本地 stdio 方式
如果你的 MCP 客户端只支持 stdio,例如部分 Claude Desktop 场景,可以不用长期暴露端口,而是让客户端直接通过 Docker 启动容器。
示例配置:
1 | { |
这种方式和 docker-compose up -d 的服务端模式不太一样:
docker-compose up -d更适合 HTTP / SSE MCP Server;docker run -i更适合 stdio MCP Server。
⑨、如果 NetBox 运行在宿主机上
如果你的 NetBox 是直接跑在 Docker 宿主机上,例如:
1 | http://127.0.0.1:8000 |
容器内部访问 127.0.0.1 指的是容器自己,不是宿主机。
这时 .env 不要写:
1 | NETBOX_URL=http://127.0.0.1:8000 |
可以改成:
1 | NETBOX_URL=http://host.docker.internal:8000 |
同时在 docker-compose.yml 中加入:
1 | extra_hosts: |
完整示例:
1 | services: |
十、生产环境建议
如果你要在生产环境使用,建议不要直接裸露 8000 端口到公网。
推荐架构:
1 | AI Client |
建议至少做:
- HTTPS
- IP 白名单
- Basic Auth 或 OAuth 认证
- 使用只读 NetBox Token
- 限制 MCP Server 能访问的 NetBox 权限
- 日志审计
- 不要把 Token 写进 Git 仓库
十一、常见问题
1. 容器启动后立即退出
查看日志:
1 | docker compose logs netbox-mcp-server |
常见原因:
- 命令名不对;
- 参数不对;
- 环境变量缺失;
- NetBox 地址不可达;
- Token 无效。
可以查看帮助:
1 | docker compose run --rm netbox-mcp-server netbox-mcp-server --help |
2. 连接 NetBox 失败
进入容器测试:
1 | docker compose exec netbox-mcp-server sh |
然后:
1 | curl -H "Authorization: Token $NETBOX_TOKEN" "$NETBOX_URL/api/status/" |
如果正常,应该能看到 NetBox API 返回。
3. 401 Unauthorized
说明 Token 不正确或权限不足。
检查:
1 | echo $NETBOX_TOKEN |
以及 NetBox 后台的 Token 是否有效。
4. HTTPS 证书问题
如果 NetBox 使用自签名证书,容器可能会报证书验证失败。
生产环境建议给 NetBox 配置正式证书。
临时测试可以考虑使用 HTTP,或者把内部 CA 证书挂载进容器。
十二、最小可用版本文件一览
最小文件结构:
1 | /opt/netbox-mcp-server/ |
.env:
1 | NETBOX_URL=https://netbox.example.com |
docker-compose.yml:
1 | services: |
启动:
1 | docker compose up -d |
查看日志:
1 | docker compose logs -f |
PS:之后会用此MCP,做一个AI Chat工具用于自然语言查询NetBox数据。
技术交流群
发送邮件到 ➡️ [email protected]
或者关注WX公众号:网工格物
