Skip to content
Agentmart
Submit a tool

Junos MCP

MCP server for Juniper Networks device operations via junos-ops

Connector by shigechika · GitHub account verified by the MCP Registry

IndexedApache-2.0Local (stdio)★ 1
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/shigechika-junos-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

MCP server for Juniper Networks device operations via junos-ops

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
14 read · 8 write · 3 delete · 3 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Tools by what they do 28

Read from the source code; the running server may list different tools.

Read 14 · Look things up without changing anything.

  • check_local_inventory
  • check_reachability
  • check_remote_packages
  • check_upgrade_readiness
  • compare_version
  • daily_brief_result
  • get_config
  • get_config_diff
  • get_device_facts
  • get_package_info
  • get_router_list
  • get_version
Show 2 more tools
  • health_check
  • list_remote_files

Write 8 · Create, change, send or run things.

  • daily_brief
  • daily_brief_start
  • install_package
  • push_config
  • push_config_result
  • push_config_start
  • run_show_command_batch
  • schedule_reboot

Delete 3 · Delete, drop, revoke or wipe things.

  • rollback_package
  • run_show_command
  • run_show_commands

Not yet classified 3 · We could not tell from the name and description.

  • collect_rsi
  • collect_rsi_batch
  • copy_package

Network hosts it talks to 4

  • github.com · found in code
  • json.schemastore.org · found in code
  • raw.githubusercontent.com · found in code
  • shigechika.github.io · found in code

Files it touches

  • Your home directory (~)
  • ~/.config/junos-ops/config.ini.

Tools (28)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • check_local_inventory

    Verify local firmware checksums against the config.ini inventory. Equivalent to ``junos-ops check --local``. Iterates every ``<model>.file`` / ``<model>.hash`` pair in the DEFAULT section of ``config.ini`` and verifies the file on the staging server. No device connection required. Args: model: Restrict to a single model (empty = all configured models) config_path: Path to config.ini (empty string uses default search)

  • check_reachability

    Probe NETCONF reachability for one or more devices. Equivalent to ``junos-ops check --connect``. Opens a fast NETCONF handshake (no full PyEZ facts gathering, 5-second TCP probe) and reports per-host status as a table. Args: hostnames: List of target device hostnames (must exist in config.ini) tags: Tag filter. Each list element is one tag group (comma-separated tags AND together within a group); multiple list elements OR together across groups. Combined with ``hostnames`` the result is the intersection. max_workers: Maximum parallel threads (default 20, m…

  • check_remote_packages

    Verify the staged firmware checksum on one or more devices. Equivalent to ``junos-ops check --remote``. Connects to each device via NETCONF and verifies the package file (``<model>.file``) sitting on the device against ``<model>.hash``. Doubles as post-SCP copy verification. Per-host model resolution: ``model`` arg > config.ini ``[host].model`` > device facts. Args: hostnames: List of target device hostnames (must exist in config.ini) tags: Tag filter. Each list element is one tag group (comma-separated tags AND together within a group); multiple list elements OR toge…

  • check_upgrade_readiness

    Check if a device is ready for upgrade. Verifies whether the device is already running the target version, and performs a dry-run to check local/remote package availability. Args: hostname: Target device hostname (must exist in config.ini) config_path: Path to config.ini (empty string uses default search)

  • collect_rsi

    Collect RSI (Request Support Information) and SCF (Show Configuration) from a device. Saves two files: {hostname}.SCF (show configuration) and {hostname}.RSI (request support information). Model-specific timeouts are applied automatically (e.g., SRX Branch: 1200s, Virtual Chassis: 1800s). Args: hostname: Target device hostname (must exist in config.ini) output_dir: Directory to save output files (empty uses config RSI_DIR or current dir) config_path: Path to config.ini (empty string uses default search)

  • collect_rsi_batch

    Collect RSI/SCF from multiple devices in parallel. Uses ThreadPoolExecutor for concurrent collection. Default 20 workers matches junos-ops CLI default for RSI collection. Either ``hostnames`` or ``tags`` selects the targets; if both are omitted, every router in config.ini is targeted. When both are given, the intersection is used. Args: hostnames: List of target device hostnames tags: Tag filter. Each list element is one tag group (comma-separated tags AND together within a group); multiple list elements OR together across groups. Combined with ``hostnames`` the resul…

  • compare_version

    Compare two JUNOS version strings. Returns whether left is greater than, equal to, or less than right. No device connection required. Args: left: First JUNOS version string (e.g., "22.4R3-S6.5") right: Second JUNOS version string (e.g., "23.2R1.0")

  • copy_package

    Copy firmware package to remote device via SCP with checksum verification. Checks if copy is needed (already running target version, or package already present on device). Cleans up storage before copying. Args: hostname: Target device hostname (must exist in config.ini) dry_run: If True (default), show what would be done without copying force: If True, skip version checks and force copy config_path: Path to config.ini (empty string uses default search)

  • daily_brief

    Run a morning health check across multiple devices in parallel. Checks per host (Phase 1): - ``show system alarms`` / ``show chassis alarms`` - ``show interfaces descriptions`` — a physical interface is flagged ``[IF_DOWN]`` only when it has a description (``Admin=up``, ``Link=down``) and its ``Last flapped`` time is within ``since_hours``. Undescribed unused ports and chronically-down ports are suppressed (loopback / mgmt / internal logical units are also excluded). - ``show log messages | last 200`` — alert patterns within ``since_hours`` - dual-RE redundancy — an explicit routing-…

  • daily_brief_result

    Fetch a ``daily_brief_start`` job by id. ``status`` is ``running`` (keep polling), ``done`` (``result`` holds the brief), ``error`` (``error`` holds the exception type name only) or ``unknown`` (bad or expired id).

  • daily_brief_start

    Start a daily_brief in the background; returns immediately with a ``job_id``. Use this for a fleet too large for one synchronous ``daily_brief`` (a client's per-call timeout is about 60 s). Arguments mirror ``daily_brief``. Poll ``daily_brief_result(job_id)`` every few seconds until ``status`` is ``done`` (the full brief is under ``result``, with no deadline) or ``error``. If too many jobs are retained, returns ``{"status": "rejected", ...}``. While a job is running, a call that would switch to a different config file is refused (the config is process-global); use the same ``config_path`` or…

  • get_config

    Get device configuration. Args: hostname: Target device hostname (must exist in config.ini) output_format: Output format - "text" (default), "set", or "xml" config_path: Path to config.ini (empty string uses default search)

  • get_config_diff

    Show configuration difference compared to a rollback version. Args: hostname: Target device hostname (must exist in config.ini) rollback_id: Rollback version to compare against (0-49, default 1) config_path: Path to config.ini (empty string uses default search)

  • get_device_facts

    Get basic device information (model, hostname, serial, version, etc.). Args: hostname: Target device hostname (must exist in config.ini) config_path: Path to config.ini (empty string uses default search)

  • get_package_info

    Get package file name and expected hash for a specific device model. Retrieves model-specific package information from config.ini. No device connection required. Args: hostname: Target device hostname (must exist in config.ini) model: Device model name (e.g., "EX2300-24T") config_path: Path to config.ini (empty string uses default search)

Show 13 more tools
  • get_router_list

    List routers defined in config.ini, optionally filtered by tags. Returns section names from config.ini, which represent the hostnames that can be used with other tools. No device connection required. Args: tags: Tag filter. Each list element is one tag group (comma-separated tags AND together within a group); multiple list elements OR together across groups. E.g. ``["tokyo,core", "backup"]`` means ``(tokyo AND core) OR backup``. None/empty returns all. config_path: Path to config.ini (empty string uses default search)

  • get_version

    Get JUNOS version information with upgrade status. Shows running version, planning version, pending version, local/remote package status, and reboot schedule. Args: hostname: Target device hostname (must exist in config.ini) config_path: Path to config.ini (empty string uses default search)

  • health_check

    Report server version and config status — without connecting to any device. Call this at session start (or after a tool-call timeout) to confirm the MCP is up, see which version is running, and verify that config.ini loads and how many routers it defines. Lightweight by design: junos-mcp fans out to many Juniper devices, so this check ONLY loads config.ini and counts hosts — it opens NO NETCONF/SSH connection to any device. Always returns the same keys: ``status`` (healthy / error), ``service``, ``version``, ``config_path`` (the resolved config.ini path it would use), ``router_count`` (numbe…

  • install_package

    Install firmware package on device with pre-flight checks. Full upgrade flow: version check -> rollback pending if needed -> copy (with checksum) -> clear reboot schedule -> rescue config save -> request system software add (with validation). Args: hostname: Target device hostname (must exist in config.ini) dry_run: If True (default), show what would be done without installing force: If True, skip version checks and force install unlink: If True, run ``request system software add <pkg> unlink`` via CLI instead of PyEZ SW.install(). Use for low-flash devices (E…

  • list_remote_files

    List files on the remote device path (/var/tmp by default). Args: hostname: Target device hostname (must exist in config.ini) config_path: Path to config.ini (empty string uses default search)

  • push_config

    Push configuration to a device with commit confirmed and health check. Supports two input methods (exactly one required): - config_file: Path to a .set or .j2 file containing set commands - set_commands: List of set command strings (inline) Safety features (not available in Juniper's official MCP server): - dry_run mode (default True): shows diff without committing - commit confirmed: auto-rollback if not confirmed within timeout - health check: auto-rollback on connectivity failure after commit Commit flow (normal): lock -> load -> diff -> commit_check -> commit confirmed -> health…

  • push_config_result

    Fetch a ``push_config_start`` (or deadline-bound ``push_config``) job by id. ``status`` is ``running`` (keep polling; ``diff`` is present once computed), ``done`` (``result`` holds the same text ``push_config`` returns: committed and permanent, no changes, or the intentional no_commit rollback), ``dry_run`` (``result`` holds the diff; nothing committed), ``failed`` (``result`` says why: lock/load error, failed health check, or a commit confirmed that is or may be pending and rolls back after confirm_timeout minutes), ``error`` (``error`` holds the exception type name only; any unconfirmed com…

  • push_config_start

    Start push_config as a background job and return its diff and ``job_id`` without waiting for the commit. Use this instead of ``push_config`` when the client cuts a tool call at about 60 s (hosted connectors) or the device commits slowly (SRX branch models such as SRX300/320/340/345), or when ``push_config`` answered "Still running". The job uses the host's full RPC timeout (``timeout`` in config.ini, else 180 s on SRX branch models and 120 s otherwise) and no per-call deadline. Arguments and the commit flow are the same as ``push_config``. The job locks the candidate configuration, loads the…

  • rollback_package

    Rollback to previously installed package version. Checks pending version first. If no pending version exists, rollback is skipped. Args: hostname: Target device hostname (must exist in config.ini) dry_run: If True (default), show what would be done without rolling back config_path: Path to config.ini (empty string uses default search)

  • run_show_command

    Run a CLI show command on the device and return output. Args: hostname: Target device hostname (must exist in config.ini) command: CLI command to execute (e.g., "show bgp summary") output_format: Output format — "text" (default), "json", or "xml". Note: pipe stages (| match, | last, | count, etc.) are silently dropped regardless of output_format — PyEZ's Device.cli() sends the command over NETCONF RPC, which JunOS does not pipe-process. Run the command without pipes; for line filtering, use run_show_command_batch's grep_pattern argument inst…

  • run_show_command_batch

    Run a CLI show command on multiple devices in parallel. Uses ThreadPoolExecutor for concurrent execution. Either ``hostnames`` or ``tags`` selects the targets; if both are omitted, every router in config.ini is targeted. When both are given, the intersection is used. Args: command: CLI command to execute on all devices hostnames: List of target device hostnames (must exist in config.ini) tags: Tag filter. Each list element is one tag group (comma-separated tags AND together within a group). Multiple list elements OR together across groups. E.g. ``["tokyo,core", "b…

  • run_show_commands

    Run multiple CLI show commands on the device in a single session. Commands are executed in sequence and stop on the first failure. To run all commands regardless of individual errors, call run_show_command once per command instead. Args: hostname: Target device hostname (must exist in config.ini) commands: List of CLI commands to execute output_format: Output format — "text" (default), "json", or "xml". Note: pipe stages (| match, | last, | count, etc.) are silently dropped regardless of output_format — PyEZ's Device.cli() sends the command over NETCONF RP…

  • schedule_reboot

    Schedule device reboot at a specified time. Checks for existing reboot schedules. If one exists and force is False, the existing schedule is preserved. Args: hostname: Target device hostname (must exist in config.ini) reboot_at: Reboot time in YYMMDDHHMM format (e.g., "2601020304" = 2026-01-02 03:04) dry_run: If True (default), show what would be done without scheduling force: If True, clear existing reboot schedule and set new one config_path: Path to config.ini (empty string uses default search)

Signals

Stars
1
Forks
0
Open issues
4
Weekly downloads
253
Last commit
Oct 18, 2026 (10 days ago)
Last release
Oct 18, 2026 (10 days ago)
Last package publish
Oct 18, 2026 (10 days ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.shigechika/junos-mcp
Version
0.23.0
Auth
No auth
Packages
pypi junos-mcp
License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from shigechika

Cite this page

Junos MCP. Agent Mart. https://agentmart.dev/connectors/shigechika-junos-mcp (last updated 2026-10-24)