pyats-junos-routing
SKILL.md
JunOS Routing Operations via pyATS
Inspect Juniper routing protocols (OSPF, OSPFv3, BGP), route tables, MPLS/LDP/RSVP label-switched paths, traffic engineering database, PFE forwarding state, and perform connectivity tests (ping, traceroute) using pyATS pyats_run_show_command.
How to Call
PYATS_TESTBED_PATH=$PYATS_TESTBED_PATH python3 $MCP_CALL "python3 -u $PYATS_MCP_SCRIPT" pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"<command>"}'
Commands
OSPF (IPv4)
Neighbors
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf neighbor"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf neighbor detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf neighbor extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf neighbor 10.1.1.2 detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf neighbor instance all"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf neighbor instance my-instance"}'
Interfaces
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface brief"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface ge-0/0/0"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface ge-0/0/0 detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface brief instance my-instance"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface detail instance my-instance"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface instance my-instance"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf interface ge-0/0/0 detail instance my-instance"}'
Database (LSDB)
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database summary"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database external extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database opaque-area"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database advertising-router self detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database advertising-router 10.0.0.1 extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database lsa-id 10.0.0.1 detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database network lsa-id 10.0.0.1 detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf database router extensive"}'
Overview, Routes & Statistics
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf overview"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf overview extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf route brief"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf route detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf route network extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf route 10.0.0.0/24"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf statistics"}'
OSPFv3 (IPv6)
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 neighbor"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 neighbor detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 neighbor extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 neighbor instance all"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 interface"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 interface extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 database"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 database extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 database external extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 database network detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 database link advertising-router 10.0.0.1 detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 database advertising-router 10.0.0.1 extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 overview"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 overview extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 route network extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ospf3 route 2001:db8::/32"}'
BGP
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp summary"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp summary instance my-vrf"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp neighbor"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp neighbor 10.1.1.2"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp group brief"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp group brief | no-more"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp group detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp group detail | no-more"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp group summary"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show bgp group summary | no-more"}'
Route Table
General
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route summary"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route 10.0.0.0/24"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route 10.0.0.1/32 extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route extensive 10.0.0.0/24"}'
By Protocol
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route protocol ospf"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route protocol ospf extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route protocol bgp"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route protocol bgp extensive 10.0.0.0/24"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route protocol static"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route protocol direct"}'
By Table
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route table inet.0"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route table inet.3"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route table mpls.0"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route table my-vrf.inet.0 10.0.0.0/24"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route table inet.0 label-switched-path my-lsp"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route protocol ospf table inet.0 extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route protocol bgp table my-vrf.inet.0 extensive 10.0.0.0/24"}'
Advertising & Receiving Protocols
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route advertising-protocol bgp 10.1.1.2"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route advertising-protocol bgp 10.1.1.2 10.0.0.0/24"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route advertising-protocol bgp 10.1.1.2 10.0.0.0/24 detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route receive-protocol bgp 10.1.1.2"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route receive-protocol bgp 10.1.1.2 10.0.0.0/24"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route receive-protocol bgp 10.1.1.2 extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route receive-protocol bgp 10.1.1.2 10.0.0.0/24 extensive"}'
Instance & Logical System
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route instance detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route instance my-vrf"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route logical-system my-lsys"}'
Forwarding Table
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route forwarding-table summary"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show route forwarding-table label 100000"}'
MPLS
LSPs
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show mpls lsp name my-lsp detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show mpls lsp name my-lsp extensive"}'
LDP Parameters
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show mpls ldp parameters"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show mpls ldp discovery detail"}'
Configuration
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show configuration protocols mpls label-switched-path my-lsp"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show configuration protocols mpls path my-path"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show configuration interfaces ge-0/0/0 unit 0 family bridge vlan-id"}'
LDP
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ldp overview"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ldp neighbor"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ldp session"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ldp session 10.1.1.2 detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ldp interface ge-0/0/0"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ldp interface ge-0/0/0 detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ldp database session 10.1.1.2"}'
RSVP
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show rsvp neighbor"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show rsvp neighbor detail"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show rsvp session"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show rsvp session transit"}'
Traffic Engineering Database (TED)
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ted database extensive"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ted database extensive 10.0.0.1"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show ted database 10.0.0.1"}'
PFE (Packet Forwarding Engine)
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show pfe route summary"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show pfe statistics traffic"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show pfe statistics ip icmp"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show krt queue"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"show krt state"}'
Connectivity Tests
Ping
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"ping 10.0.0.2 count 5"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"ping 10.0.0.2 source 10.0.0.1 count 5"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"ping 10.0.0.2 size 1500 count 5 do-not-fragment"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"ping 10.0.0.2 source 10.0.0.1 size 1500 count 5 tos 184 rapid"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"ping 10.0.0.2 ttl 10 count 5 wait 2"}'
MPLS Ping
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"ping mpls rsvp my-lsp"}'
Traceroute
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"traceroute 10.0.0.2 no-resolve"}'
pyats_run_show_command '{"device_name":"juniper-rtr-01","command":"traceroute 10.0.0.2 source 10.0.0.1 no-resolve"}'
Workflows
1. JunOS OSPF Health Check
show ospf overview → area count, SPF runs, LSA count
→ show ospf neighbor → verify all adjacencies Full
→ show ospf interface brief → check interface states (DR/BDR/DROther)
→ show ospf database summary → LSA count per type
→ show ospf statistics → error counters, retransmits
→ Flag: neighbors not Full, interface cost mismatches, high retransmit counts
→ GAIT
2. JunOS BGP Session Audit
show bgp summary → peer state, prefixes received, session uptime
→ show bgp neighbor {peer} → per-peer: hold time, keepalive, AFI/SAFI, import/export policy
→ show route advertising-protocol bgp {peer} → what we advertise
→ show route receive-protocol bgp {peer} → what we receive
→ Flag: peers not Established, prefix count anomalies, flapping sessions
→ GAIT
3. MPLS LSP Verification
show mpls lsp name {lsp} detail → path, state, bandwidth
→ show rsvp session → RSVP session state
→ show ldp session → LDP adjacency state
→ show route table mpls.0 → label bindings
→ ping mpls rsvp {lsp} → end-to-end LSP verification
→ show ted database extensive → TE topology view
→ GAIT
4. Route Table Baseline
show route summary → route count per table and protocol
→ show route protocol ospf → OSPF-learned routes
→ show route protocol bgp → BGP-learned routes
→ show route protocol static → static routes
→ show route forwarding-table summary → FIB state
→ show pfe route summary → PFE forwarding entries
→ show krt queue → pending route updates (should be 0)
→ GAIT
5. End-to-End Connectivity Test
ping {target} count 5 → basic reachability
→ ping {target} size 1500 count 5 do-not-fragment → MTU verification
→ traceroute {target} no-resolve → path analysis
→ Correlate with show route {target} → verify expected next-hop
→ GAIT
Integration with Other Skills
| Skill | Integration |
|---|---|
| pyats-junos-system | Chassis/system context (RE CPU, FPC state) for routing issues |
| pyats-junos-interfaces | Interface state complements routing protocol analysis |
| junos-network | JunOS MCP for config changes; pyATS for operational verification |
| pyats-routing | Same methodology for Cisco devices — multi-vendor routing audits |
| pyats-parallel-ops | pCall pattern for fleet-wide BGP/OSPF audits |
| te-path-analysis | ThousandEyes path data complements traceroute analysis |
| netbox-reconcile | Cross-reference learned routes with NetBox prefix assignments |
| gait-session-tracking | Every command logged in GAIT |
Guardrails
- All commands are read-only — show, ping, traceroute only
- No routing config changes — never use set/delete protocols via this skill
- Use count limits on ping — always specify
countto avoid infinite pings - Use
no-resolveon traceroute — avoids DNS timeouts - Cross-reference with SoT — compare route tables with expected prefixes in NetBox/Nautobot
- Record in GAIT — every command execution must be logged
Weekly Installs
1
Repository
automateyournet…/netclawGitHub Stars
282
First Seen
10 days ago
Security Audits
Installed on
mcpjam1
claude-code1
replit1
junie1
windsurf1
zencoder1