返回市场
junos-MCP-服务器

junos-MCP-服务器

作者:Juniper57 星标更新:2025-11-06

项目介绍

junos-mcp-server

一个用于Juniper Junos设备的模型上下文协议(MCP)服务器,使大型语言模型(LLM)能够与网络设备进行交互。

目录

重要安全通知

警告: 此服务器允许LLM访问您的网络基础设施。请仔细审查这些安全考虑事项。

安全需求

  • 公司政策合规性: 仅当您公司的政策允许将Junos设备的数据发送到LLM服务时,才使用此服务器。
  • 服务器安全性: 在生产环境中部署之前,请务必确保您的Junos MCP服务器的安全。
  • 认证: 不要使用密码认证进行生产部署。我们强烈建议使用基于SSH密钥的认证以增强安全性。
  • 部署策略: 在您的MCP服务器得到适当保护之前,仅在本地部署用于测试目的。不要在没有适当安全措施的情况下在生产环境中部署远程服务器。

最佳安全实践

  • 使用SSH密钥认证而不是密码
  • 实施适当的网络访问控制
  • 监控并记录所有MCP服务器活动
  • 定期进行安全审计和更新
  • 遵循您组织的安全政策

重要配置通知

警告: 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,可以直接运行服务器:

uv run python jmcp.py -f devices.json -t stdio

启动Junos MCP服务器

$ 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。

配置

针对Claude桌面的配置(stdio传输)

{
  "mcpServers": {
    "jmcp": {
      "type": "stdio",
      "command": "python3",
      "args": ["jmcp.py", "-f", "devices.json", "-t", "stdio"]
    }
  }
}

针对Claude桌面的配置(使用uv)

{
  "mcpServers": {
    "jmcp": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "python", "jmcp.py", "-f", "devices.json", "-t", "stdio"]
    }
  }
}

注意: 请提供jmcp.py和devices.json文件的绝对路径。

针对Claude桌面的配置(Docker容器)

{
  "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用法

构建Docker容器

$ 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挂载您的设备配置文件
  • 对于流式HTTP传输,使用-p host_port:container_port暴露端口
  • 如果使用基于密钥的身份验证,请挂载任何SSH私钥文件(例如,-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设备配置

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工具时,它会交互式地询问以下内容:

  1. 设备名称:设备的唯一标识符(例如,“router1-east”)
  2. IP地址:设备的IP地址
  3. SSH端口:SSH端口(默认为22)
  4. 用户名:用于认证的用户名
  5. SSH密钥路径:MCP服务器上的SSH私钥文件路径

该工具会验证每个输入:

  • 设备名称必须是唯一的
  • IP地址必须有效
  • SSH密钥文件必须存在且可读
  • 可选连接测试后添加设备

安全注意事项

add_device工具仅支持SSH密钥认证。出于安全原因,已禁用密码认证,因为VSCode的激发UI无法正确屏蔽密码字段。

示例用法

在VSCode中使用GitHub Copilot:

@jmcp 请向MCP服务器添加一个新的设备

然后工具将引导您完成过程:

  1. 输入设备名称vsrx-lab1
  2. 输入IP地址10.0.1.100
  3. 输入SSH端口22(或按Enter键使用默认值)
  4. 输入用户名admin
  5. 输入SSH密钥路径/home/user/.ssh/junos_key.pem
  6. 确认并可选测试连接

成功添加后,设备立即可用于所有其他Junos MCP工具。

SSH密钥要求

  • SSH私钥文件必须存在于MCP服务器文件系统上
  • 文件必须可由运行MCP服务器的过程读取
  • 对于Docker部署,将SSH密钥文件挂载到容器中

示例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

限制

  • 仅限VSCode:激发不支持Claude桌面
  • 仅限SSH密钥:不支持密码认证
  • 无持久性:添加的设备仅存储在内存中;服务器重启后将丢失
  • 超时:用户有5分钟时间响应每个提示

对于Claude桌面用户,设备仍需按照Junos设备配置部分所述在devices.json文件中进行配置。

VSCode + GitHub Copilot集成

启动您的服务器

$ 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退出)

在VSCode配置中指向此URL

{
    "mcp": {
        "servers": {
            "my-junos-mcp-server": {
                "url": "http://127.0.0.1:30030/mcp/"
            }
        }
    }
}

注意: 您可以使用VSCode的Cmd+Shift+P来配置MCP服务器。

MCP服务器访问认证

Junos MCP服务器支持基于令牌的认证,用于使用流式HTTP传输的安全客户端访问。这防止未经授权的访问您的网络基础设施。

认证行为

  • stdio传输(Claude桌面):无需认证 - 由于设计安全,它在本地运行
  • 流式HTTP传输(VSCode,Web客户端):可用基于令牌的认证

令牌管理

服务器包括一个专用的令牌管理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: