使用说明
NetBox MCP服务器
一个全面的只读FastMCP服务器,通过模型上下文协议(MCP)向人工智能系统公开NetBox API功能。
概述
此项目实现了一个只读MCP服务器,该服务器提供了与NetBox基础架构数据交互的全面工具。它支持对网络设备、站点、电路、VLAN、IP前缀和单个IP地址进行自然语言查询,使AI助手更容易检索和呈现网络基础设施信息,而不允许对NetBox数据进行任何修改。
特性
设备管理
- 使用结构化筛选器查询NetBox设备
- 按特定名称搜索设备
- 使用自然语言询问设备
- 支持按站点、角色、状态、制造商等进行筛选
现场运营
- 列出所有可用站点的状态和地区信息
- 获取全面的现场详细信息,包括设备和机架数量
- 跨所有资源类型的基于站点的筛选
电路管理
- 按供应商、类型、状态和端接地点查询电路
- 使用自然语言搜索电路
- 轨道电路端子(A侧和Z侧)
- 按电路ID模式过滤
IP前缀管理
- 按站点、VRF、租户、状态和角色查询IP前缀
- 支持IPv4和IPv6地址族
- VLAN关联和过滤
- 前缀池管理
- CIDR符号模式匹配
VLAN管理
- 按名称、VID(VLAN ID)、站点、组、租户、角色和状态查询VLAN
- VLAN名称和描述的真实子字符串匹配
- 跨VLAN属性的跨字段搜索
- 支持VLAN组和租户组织
IP 地址管理
- 按地址、设备、接口、VRF和状态查询单个IP地址
- 跟踪设备和接口的IP分配
- 按IP角色筛选(环回、VIP、次要、任意播)
- DNS主机名搜索和父前缀过滤
- IPv4和IPv6支持
前缀与IP地址: 使用 前缀 子网/地址工具 池/VLAN到子网的映射,以及 IP地址 单个IP的工具 分配给设备/接口、DNS查找和IP角色过滤。
自然语言处理
- 将自然语言查询智能解析为结构化API调用
- 站点、角色、提供者和电路类型的模糊匹配
- 跨领域搜索功能
- 用户友好的错误消息和建议
查询示例
设备查询
- “显示SF1站点的所有设备”
- “列出所有活动防火墙”
- “告诉我有关设备sf1.as1的信息”
- “查找所有ION设备”
- “显示纽约市位置的开关”
网站查询
- “列出所有可用站点”
- “告诉我关于SF1网站的情况”
- “显示丹佛的网站信息”
电路查询
- “给我看看Zayo的电路”
- “列出SF1处的互联网电路”
- “查找电路CID-12345”
- “显示活动MPLS电路”
IP前缀查询
- “在SF1处显示IPv4前缀”
- “列出所有/24个子网”
- “查找VLAN 100中的前缀”
- “显示前缀池”
VLAN查询
- “显示VLAN 100”
- “列出SF1站点的所有VLAN”
- “查找名称中包含'90'的VLAN”
- “显示租户ABC的活动VLAN”
- “获取所有生产VLAN”
IP地址查询
- “显示设备交换机01上的IP地址”
- “查找所有环回地址”
- “防火墙01分配了哪些IP?”
- “显示主机名包含ntp的IP”
- “列出VRF生产中的IPv4地址”
部署
运行层部署(推荐)
此项目旨在支持使用流式HTTP传输的Runlayer部署。通过自动扩展、监控和HTTPS端点部署到Runlayer的托管基础设施。
先决条件:
- 本地运行的Docker(或Colima)
- 运行层CLI(
uvx runlayer) - Runlayer实例中的Admin API密钥
部署:
# Initialize deployment (creates runlayer.yaml)
uvx runlayer deploy init --secret <api-key> --host <runlayer-url>
# Configure runlayer.yaml with your environment variables, then deploy
uvx runlayer deploy --config runlayer.yaml --secret <api-key> --host <runlayer-url>
Colima用户,在部署命令前加上以下前缀:
DOCKER_HOST=unix://${HOME}/.colima/docker.sock uvx runlayer deploy ...
部署后,在Runlayer仪表板中将服务注册为MCP服务器,使其在MCP目录中可用。
配置: 这 runlayer.yaml 已预先配置用于:
- ARM64架构(成本优化)
- 8000端口
/mcp端点路径 - 可流式HTTP传输
每用户身份验证: 在托管的Runlayer部署中,每个用户
使用他们自己的NetBox API令牌进行身份验证。 NETBOX_TOKEN 因此 不
开始 runlayer.yaml --它是一个Runlayer 占位符,根据请求注入
这 x-rl-env-NETBOX_TOKEN 标头,并由服务器为该请求解析。
仅 NETBOX_URL 和 NETBOX_SSL_VERIFY 是部署范围的环境变量。
要配置它,请在连接器中 标头 字段(Runlayer仪表板)地图:
{ "x-rl-env-NETBOX_TOKEN": "{NETBOX_TOKEN}" }
并标记 NETBOX_TOKEN 占位符为必填项+机密。(在本地运行时
通过STDIO,令牌来自 NETBOX_TOKEN 环境变量。)
安装
本地运行(STDIO)
对于本地使用(例如使用像Claude Desktop这样的MCP客户端),请运行服务器
STDIO传输 uv。服务器使用包内导入,因此必须运行
从 src 目录通过 --directory:
MCP_TRANSPORT=stdio \
NETBOX_URL=https://your-netbox.example.com \
NETBOX_TOKEN=your_api_token \
NETBOX_SSL_VERIFY=true \
uv run --directory src python server.py
没有控制台脚本入口点;服务器直接通过以下方式启动
python server.py(本地通过STDIO)或作为HTTP服务(托管——请参阅 部署).
开发设置
对于开发和测试:
-
克隆存储库:
git clone https://github.com/chadkunsman/netbox_mcp.git cd netbox_mcp -
在开发模式下安装:
uv venv source .venv/bin/activate # On Windows: .venv\Scripts\activate uv pip install -e . -
设置环境变量:
export NETBOX_URL=https://your-netbox.example.com export NETBOX_TOKEN=your_api_token export NETBOX_SSL_VERIFY=true
Claude桌面配置
将此添加到您的Claude Desktop MCP配置中(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上),将路径替换为您的
本地克隆:
{
"mcpServers": {
"netbox": {
"command": "uv",
"args": [
"run", "--directory",
"/absolute/path/to/netbox_mcp/src",
"python", "server.py"
],
"env": {
"MCP_TRANSPORT": "stdio",
"NETBOX_URL": "https://your-netbox.example.com",
"NETBOX_TOKEN": "your_api_token",
"NETBOX_SSL_VERIFY": "true"
}
}
}
}
笔记:
MCP_TRANSPORT=stdio是必需的(服务器默认为HTTP)。 Claude Desktop以最小的PATH,所以如果uv未找到,请使用其 绝对路径command(例如。/opt/homebrew/bin/uv).重新启动克劳德桌面 编辑配置后。
自动化测试
运行pytest测试套件(集成测试查询真实的NetBox实例,因此
NETBOX_URL/NETBOX_TOKEN 必须设置,例如通过本地 .env):
# Run the full suite
uv run pytest tests/ -v
# Run only the integration tests
uv run pytest tests/test_mcp_tools.py -v
# Run with coverage
uv run pytest tests/ --cov=src
使用MCPTools进行手动测试
用于交互式探索和调试:
# List all available tools
mcp tools uv run --directory src python server.py
# Call a specific tool with parameters
mcp call get_device --params '{"name":"my-device-01"}' uv run --directory src python server.py
# Start interactive testing shell
mcp shell uv run --directory src python server.py
# View server logs during testing
mcp tools --server-logs uv run --directory src python server.py
配置
服务器读取以下环境变量:
NetBox连接:
NETBOX_URL:NetBox实例的URL(例如。,https://netbox.example.com)--必填NETBOX_TOKEN:具有读取权限的API令牌。本地/STDIO使用所需;在托管的Runlayer部署中,它是通过以下方式为每个用户提供的x-rl-env-NETBOX_TOKEN改为标题(请参见 部署)NETBOX_SSL_VERIFY:是否验证SSL证书(true/false,默认为true)
运输 (启动服务器时使用):
MCP_TRANSPORT:stdio供当地使用,或http(流式HTTP)用于托管/Runlayer。默认为httpMCP_HOST:为HTTP传输绑定主机(默认0.0.0.0)MCP_PORT:绑定HTTP传输端口(默认8000)
项目结构
netbox_mcp/
├── src/
│ ├── server.py # Main MCP server implementation
│ ├── tools/ # Tool definitions
│ │ ├── devices.py # Device-related tools
│ │ ├── sites.py # Site-related tools
│ │ ├── circuits.py # Circuit-related tools
│ │ ├── prefixes.py # IP prefix-related tools
│ │ ├── vlans.py # VLAN-related tools
│ │ └── ip_addresses.py # IP address-related tools
│ ├── models/ # Pydantic models
│ ├── utils/ # Shared utility functions
│ └── config/ # Configuration
│ └── netbox.py # NetBox client configuration
├── tests/ # Pytest test suite
│ ├── test_mcp_tools.py # Integration tests
│ └── conftest.py # Test fixtures
└── docs/ # NetBox-specific documentation
许可证
贡献
欢迎投稿!请随时提交拉取请求。
