一个用于Juniper Junos设备的模型上下文协议(MCP)服务器,使大型语言模型(LLM)能够与网络设备进行交互。
警告: 此服务器允许LLM访问您的网络基础设施。请仔细审查这些安全考虑事项。
警告: Junos MCP服务器支持配置更改,但请确保仅在希望LLM生成的配置被加载并提交到您的Junos路由器时使用此功能。
始终检查由LLM生成的配置,并仅在该配置适合您的使用场景时允许工具执行。
获取代码。
git clone https://github.com/Juniper/junos-mcp-server.git
cd junos-mcp-server
pip install -r requirements.txt
如果您正在使用uv,可以直接运行服务器:
uv run python jmcp.py -f devices.json -t stdio
$ python3.11 jmcp.py --help
Junos MCP Server
选项:
-h, --help 显示此帮助信息并退出
-f DEVICE_MAPPING, --device-mapping DEVICE_MAPPING
包含设备映射的JSON文件的名称
-H HOST, --host HOST Junos MCP服务器主机
-t TRANSPORT, --transport TRANSPORT
Junos MCP服务器传输
-p PORT, --port PORT Junos MCP服务器端口
Junos MCP服务器支持流式HTTP和stdio传输。使用stdio传输时不要使用--host。
{
"mcpServers": {
"jmcp": {
"type": "stdio",
"command": "python3",
"args": ["jmcp.py", "-f", "devices.json", "-t", "stdio"]
}
}
}
{
"mcpServers": {
"jmcp": {
"type": "stdio",
"command": "uv",
"args": ["run", "python", "jmcp.py", "-f", "devices.json", "-t", "stdio"]
}
}
}
注意: 请提供jmcp.py和devices.json文件的绝对路径。
{
"mcpServers": {
"jmcp": {
"type": "stdio",
"command": "/usr/local/bin/docker",
"args": [
"run",
"--rm",
"-i",
"-v",
"devices.json:/app/config/devices.json",
"-v",
"vsrx_keypair.pem:/app/config/vsrx_keypair.pem",
"junos-mcp-server:latest"
]
}
}
}
$ docker build -t junos-mcp-server:latest .
默认情况下,Docker容器使用stdio传输运行:
$ docker run --rm -it -v /path/to/your/devices.json:/app/config/devices.json junos-mcp-server:latest
这使用默认命令:python jmcp.py -f /app/config/devices.json -t stdio
您可以通过指定完整命令来覆盖任何参数:
对于stdio传输:
$ docker run --rm -it -v /path/to/your/devices.json:/app/config/devices.json junos-mcp-server:latest python jmcp.py -f /app/config/devices.json -t stdio
对于流式HTTP传输:
$ docker run --rm -it -v /path/to/your/devices.json:/app/config/devices.json -p 30030:30030 junos-mcp-server:latest python jmcp.py -f /app/config/devices.json -t streamable-http -H 0.0.0.0
对于流式HTTP传输自定义端口:
$ docker run --rm -it -v /path/to/your/devices.json:/app/config/devices.json -p 8080:8080 junos-mcp-server:latest python jmcp.py -f /app/config/devices.json -t streamable-http -p 8080 -H 0.0.0.0
注意:
-v /path/to/your/devices.json:/app/config/devices.json挂载您的设备配置文件-p host_port:container_port暴露端口-v /path/to/key.pem:/app/config/key.pem)构建Junos MCP服务器的Docker容器
$ docker build -t junos-mcp-server:latest .
注意: 挂载您的配置文件devices.json,并挂载其他文件,例如我使用的.pem文件用于SSH私钥身份验证,因此我也挂载了vsrx_keypair.pem。
Junos MCP服务器支持基于“密码”的认证以及基于“SSH密钥”的认证(参见前两个路由器配置[router-1, router-2])。
{
"router-1": {
"ip": "ip-addr",
"port": 22,
"username": "user",
"auth": {
"type": "password",
"password": "pwd"
}
},
"router-2": {
"ip": "ip-addr",
"port": 22,
"username": "user",
"auth": {
"type": "ssh_key",
"private_key_path": "/path/to/private/key.pem"
}
},
"router-3": {
"ip": "ip-addr",
"port": 22,
"username": "user",
"ssh_config": "~/.ssh/config_dc",
"auth": {
"type": "ssh_key",
"private_key_path": "/path/to/private/key.pem"
}
},
"router-4": {
"ip": "ip-addr",
"port": 22,
"username": "user",
"ssh_config": "/home/user/.ssh/config_jumphost",
"auth": {
"type": "password",
"password": "pwd"
}
}
}
Junos MCP服务器还提供了对ProxyCommand的支持。(参见最后两个路由器配置[router-3, router-4]),这使得您可以通过支持netcat的中间主机访问目标设备。当您只能通过中间主机(跳板机)登录到目标设备时,这非常有用。
这是一个示例SSH配置文件.ssh/config_jumphost:
# Jumphost VM连接
Host jumphost-vm
HostName 10.2.11.200
User root
# 用于MCP服务器
IdentityFile /home/user/.ssh/id_rsa_claude
IdentitiesOnly yes
StrictHostKeyChecking no
# cRPD设备(通过跳板机)
Host dt-crpd1 dtwin-crpd1 digital-twin-crpd1 clab-digital-twin-eop6-pe1
HostName 172.20.20.11
User claude
IdentityFile c
# ProxyJump jumphost-vm # 不适用于JunOS MCP
ProxyCommand ssh -l root jumphost-vm nc %h 22 2>/dev/null
StrictHostKeyChecking no
注意#1: Port值应为整数(通常为22用于SSH)。
注意#2: IdentityFile推荐使用完整路径(例如/home/user/.ssh/id_rsa_claude而不是~/.ssh/id_rsa_claude)。
重要: 当前激发功能仅与VSCode(使用流式HTTP传输)兼容。Claude桌面尚不支持激发,因此
add_device工具无法在Claude桌面中使用。
Junos MCP服务器包括一个强大的add_device工具,允许您动态添加新的Junos设备而不必修改配置文件。此工具使用MCP的激发功能来交互式地收集设备信息。
当您使用add_device工具时,它会交互式地询问以下内容:
该工具会验证每个输入:
add_device工具仅支持SSH密钥认证。出于安全原因,已禁用密码认证,因为VSCode的激发UI无法正确屏蔽密码字段。
在VSCode中使用GitHub Copilot:
@jmcp 请向MCP服务器添加一个新的设备
然后工具将引导您完成过程:
vsrx-lab110.0.1.10022(或按Enter键使用默认值)admin/home/user/.ssh/junos_key.pem成功添加后,设备立即可用于所有其他Junos MCP工具。
示例Docker挂载:
docker run --rm -it \
-v /path/to/devices.json:/app/config/devices.json \
-v /path/to/ssh_key.pem:/app/config/ssh_key.pem \
-p 30030:30030 \
junos-mcp-server:latest \
python jmcp.py -f /app/config/devices.json -t streamable-http -H 0.0.0.0
对于Claude桌面用户,设备仍需按照Junos设备配置部分所述在devices.json文件中进行配置。
$ python3.11 jmcp.py -f devices.json
[06/11/25 08:26:11] INFO 启动MCP服务器'jmcp-server',使用传输'streamable-http'在http://127.0.0.1:30030/mcp
INFO: 启动服务器进程 [33512]
INFO: 等待应用程序启动。
INFO: 应用程序启动完成。
INFO: Uvicorn正在http://127.0.0.1:30030运行(按CTRL+C退出)
{
"mcp": {
"servers": {
"my-junos-mcp-server": {
"url": "http://127.0.0.1:30030/mcp/"
}
}
}
}
注意: 您可以使用VSCode的Cmd+Shift+P来配置MCP服务器。
Junos MCP服务器支持基于令牌的认证,用于使用流式HTTP传输的安全客户端访问。这防止未经授权的访问您的网络基础设施。
服务器包括一个专用的令牌管理CLI工具:jmcp_token_manager.py
# 基本令牌生成
python jmcp_token_manager.py generate --id "vscode-dev"
# 带描述
python jmcp_token_manager.py generate --id "vscode-dev" --description "VSCode开发环境"
# 示例输出:
生成的新令牌:
ID: vscode-dev
Token: jmcp_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8
描述:VSCode开发环境
安全保存此令牌 - 它不会再次显示!
python jmcp_token_manager.py list
# 示例输出:
ID 描述 创建日期
-------------------------------------------------------------------------------------
vscode-dev VSCode开发环境 2025-01-28T10:30: