Junos MCP
MCP server for Juniper Networks device operations via junos-ops
Connector by shigechika · GitHub account verified by the MCP Registry
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.
About
Reviews
Write a reviewNo 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_inventorycheck_reachabilitycheck_remote_packagescheck_upgrade_readinesscompare_versiondaily_brief_resultget_configget_config_diffget_device_factsget_package_infoget_router_listget_version
Show 2 more tools
health_checklist_remote_files
Write 8 · Create, change, send or run things.
daily_briefdaily_brief_startinstall_packagepush_configpush_config_resultpush_config_startrun_show_command_batchschedule_reboot
Delete 3 · Delete, drop, revoke or wipe things.
rollback_packagerun_show_commandrun_show_commands
Not yet classified 3 · We could not tell from the name and description.
collect_rsicollect_rsi_batchcopy_package
Network hosts it talks to 4
github.com· found in codejson.schemastore.org· found in coderaw.githubusercontent.com· found in codeshigechika.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_inventoryVerify 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_reachabilityProbe 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_packagesVerify 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_readinessCheck 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_rsiCollect 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_batchCollect 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_versionCompare 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_packageCopy 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_briefRun 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_resultFetch 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_startStart 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_configGet 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_diffShow 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_factsGet 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_infoGet 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_listList 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_versionGet 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_checkReport 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_packageInstall 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_filesList 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_configPush 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_resultFetch 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_startStart 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_packageRollback 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_commandRun 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_batchRun 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_commandsRun 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_rebootSchedule 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
- Repository
- github.com/shigechika/junos-mcp
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from shigechika
- 0.606score
Zabbix API MCP
shigechika
MCP server for the Zabbix API — daily brief, problems, hosts, items
ConnectorAFreshness: ALocal↓ 264/wkClaude Code +5 - 0.604score
KeyCloak MCP
shigechika
MCP server for KeyCloak Admin REST API via Service Account
ConnectorAFreshness: ALocal↓ 286/wkClaude Code +5 - 0.598score
Cloud Armor WAF Patrol MCP
shigechika
MCP server for Google Cloud Armor WAF log patrol: deny summaries and false-positive checks
ConnectorAFreshness: ALocal↓ 126/wkClaude Code +5 - 0.592score
Aruba Central MCP
shigechika
MCP server for Aruba Central: expose AP, switch, and client status to AI assistants
ConnectorAFreshness: ALocal↓ 79/wkClaude Code +5 - 0.591score
EOS MCP
shigechika
MCP server for Arista EOS device operations via eAPI
ConnectorAFreshness: ALocal↓ 95/wkClaude Code +5 - 0.582score
MCP Stdio
shigechika
Stdio-to-HTTP gateway — connects MCP clients to remote HTTP MCP servers
ConnectorAFreshness: ALocal★ 9↓ 327/wkClaude Code +5
Cite this page
Junos MCP. Agent Mart. https://agentmart.dev/connectors/shigechika-junos-mcp (last updated 2026-10-24)