1. Conduid
  2. Developer Tools
  3. Junos
MCP server · Developer Tools

Junos

MCP server for Juniper devices running Junos. Tools for executing operational commands and changing device configuration

59Fair

Scored 5 months ago · breakdown

About Junos

Junos is an MCP server published by dpajin in the Developer Tools category: mCP server for Juniper devices running Junos. Tools for executing operational commands and changing device configuration.

The repository has 10 stars and 3 forks, with the last commit a year ago. Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.

Install

From source
git clone https://github.com/dpajin/mcp-server-junos

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Tools (4)

apply_configLoad and commit configuration changes to the device in both `set` and `junos` (curly brackets) formats.

Parameters not published.

get_factRetrieve basic information about the device, such as OS version and model.

Parameters not published.

list_devicesRetrieve the list of **locally configured** devices on the MCP server. The list include **device name** and **IP address** for remote access.

Parameters not published.

show_commandExecute any specified show command on the device and return the output. It can be used to retrieve device configuration and execute ping command.

Parameters not published.

Ask AI

✦

Ask AI about Junos

Powered by Claude · Grounded in docs

I know everything about Junos. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

Static checks derived from the repository 2 days ago. Heuristics on the source, not an audit.

  • ✓README presentThe repository ships documentation.
  • ✓License declaredUsable under a stated license.
  • !Tests presentNo tests found. Behaviour changes may go unnoticed between versions.
  • !Dependencies pinnedNo lockfile. Installs can pull different code over time.
  • ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.
  • !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.

README

Junos MCP Server (mcp-server-junos)

Overview

The mcp-server-junos project provides MCP tools for viewing operational state and changing configuraton of Juniper Networks devices with Junos operating system. it uses Juniper's junos-eznc Python SDK and FastMCP.

Tools

  • get_fact: Retrieve basic information about the device, such as OS version and model.
  • show_command: Execute any specified show command on the device and return the output. It can be used to retrieve device configuration and execute ping command.
  • apply_config: Load and commit configuration changes to the device in both set and junos (curly brackets) formats.
  • list_devices: Retrieve the list of locally configured devices on the MCP server. The list include device name and IP address for remote access.

Installation

  1. Clone the repository:
    git clone <repository-url>
    cd mcp-server-junos
    

Running as a standalone application

  1. Install the required dependencies:

    pip install -r requirements.txt
    
  2. Rename example config file config.example.yml to config.yml

    mv config.example.yml config.yml
    

Running as a docker container

NOTE: If you want to include the configuration file in the docker image, please configure it in advance before building the container image. Otherwise, you can provide global access parameters into the container using Environment Variables (example in Usage section)

  1. Rename example config file config.example.yml to config.yml and configure it accordingly, before

    mv config.example.yml config.yml
    
  2. Build docker container image

    docker build -t mcp-server-junos .
    

Configuration

The expected configuration file is named config.yml and it should be located in the root directory. The supplied example config file config.example.yml can be used as a starting point

mv config.example.yml config.yml

If Environment variables are used, they will take precedence over configuration file parameters.

Global server configuration

Using config file:

global:
  # To listen on all available interfaces use "0.0.0.0"
  server_host: 127.0.0.1
  server_port: 10008
  # Possible values: "sse" or "streamable-http"
  server_transport: "streamable-http"

Using Environment variables:

MCP_SERVER_JUNOS_HOST="127.0.0.1"
MCP_SERVER_JUNOS_PORT=10008
MCP_SERVER_JUNOS_TRANSPORT="streamable-http"
LOG_LEVEL="INFO"

Devices inventory

Using config file:

Configuration file key devices contains the dictionary of the device names with their respective access configuration.

  • device_name: Name of the device
    • host: IP address for access
    • user: Username for access
    • passwd: Password for access
    • port: TCP port for NETCONF/SSH access

Example:

access: 

  default:
    user: "admin"
    passwd: "admin@123"
    port: 830

  test: &test
    user: "admin"
    passwd: "admin@123"
    port: 830

devices:

  r1:
    host: 172.20.20.2
    user: "admin"
    passwd: "admin@123"
    port: 830

  r2:
    host: 172.20.20.3
    <<: *test

Default access parameters can be specified for devices which are not explicitly configured in the configuration file. Those can be used through exposed MCP tools by supplying IP address in the host argument.

  • First preference are environment variables:

    MCP_SERVER_JUNOS_ACCESS_DEFAULT_USER="admin"
    MCP_SERVER_JUNOS_ACCESS_DEFAULT_PASSWD="admin"
    MCP_SERVER_JUNOS_ACCESS_DEFAULT_PORT=830
    
  • Second preference is config file:

    access:
      default:
        user: "admin"
        passwd: "admin"
        port: 830
    

Usage

Running as a standalone application

To use the MCP server, run the file:

python mcp_server_junos.py
  • The MCP server exposes HTTP SSE interface on configurable port (default 10008) and IPs
  • The URL for connecting locally to MCP server over transport SSE would be: http://127.0.0.1:10008/sse
  • The URL for connecting locally to MCP server over transport Streamable HTTP would be: http://127.0.0.1:10008/mcp/

Running as a docker container

When running as a docker container, user can supply global configuration through Environment variables and no configuration file. Access to any device would use those supplied access credentials.

Other option is building a docker image with the configuration file config.yml or mounting it to the container as a volume to /mcp-server-junos/config.yml path.

docker run -d \
  --net=host \
  --name mcp-server-junos \
  -e MCP_SERVER_JUNOS_ACCESS_DEFAULT_USER="admin" \
  -e MCP_SERVER_JUNOS_ACCESS_DEFAULT_PASSWD="admin@123" \
  -e MCP_SERVER_JUNOS_ACCESS_DEFAULT_PORT=830 \
  -e MCP_SERVER_JUNOS_HOST="127.0.0.1" \
  -e MCP_SERVER_JUNOS_PORT=10008 \
  -e MCP_SERVER_JUNOS_TRANSPORT="streamable-http" \
  mcp-server-junos:latest

Tests

Tested with Github Copilot and VS Code (v1.100.2) as MCP client using Streamable HTTP and SSE.

  • various show commands
  • basic device configuration
  • ping between devices

NOTE: Streamable HTTP transport for MCP servers in VS Code is supported from v1.100. Older versions support SSE transport.

License

The project is licensed under the MIT License.

README fetched from the repository 2 days ago. The original is authoritative.

Questions

About Junos

How do I install Junos?

No package has been published for this server, so install it from source: clone the repository and follow its README.

Is Junos safe to use with an AI agent?

Its trust score is 59 out of 100 (fair). It passes 3 of the 6 static security checks run so far; the failures are listed above. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Junos still maintained?

The last commit was a year ago and 2 open issues. That's long enough that you should check whether the maintainer is responding to issues before depending on it.