Skip to main content

network-terminal-mcp

PyPI CI License: MIT

Локальный MCP-сервер для постоянных интерактивных сессий с сетевым оборудованием. Проект даёт OpenCode сырой терминал: подключиться к устройству, использовать контекстную подсказку ?, выполнить несколько команд, при необходимости зайти вторым ssh/telnet внутрь той же сессии и получить полный вывод без временных sshpass-команд и одноразовых скриптов.

Статус: v0.1.0 — этапы 1-9 реализованы. Сессия — это один постоянный терминальный stream (SSH, Telnet, TCP console или локальный serial /dev/tty*); модель пишет в него точно то, что нужно, включая вложенные переходы, и читает вывод без требования определённой формы prompt. Для первого подключения поддерживаются direct, один локальный SOCKS5 hop и один SSH ProxyJump hop; nested-маршрутов и командно-ориентированных инструментов больше нет. Секреты, запрашиваемые уже внутри сессии, вводятся через terminal_write_secret со ссылкой на pass и не попадают в audit. Один процесс держит несколько независимых сессий.

Подключение описывает модель в самом вызове open_session: host, protocol, credentials (ссылки pass/key file или plaintext за флагом), route (direct/socks/proxyjump), host key policy, serial-параметры и legacy-алгоритмы. Инвентаря и profile-конфигов больше нет — после установки достаточно открыть сессию. Единственный необязательный локальный файл — policy.yml (posture и лимиты). Проверено на живом оборудовании: direct SSH на Cisco IOS, SNR old/eNOS, D-Link, Huawei VRP и Junos; ProxyJump через реальные bastion. Подробности в результатах проверок.

Текущие ограничения: raw input выполняется без per-команды подтверждения — после одобренного open_session модель работает в устройстве свободно; оператор может добавить permission ask для terminal_write в OpenCode. Автоматического распознавания sensitive-команд (conf t, system-view, commit) пока нет. Telnet, console и serial требуют явных per-call флагов и могут быть hard-deny политикой. transcripts_enabled остаётся зарезервированной настройкой.

Основные цели

  • Прямой SSH, SOCKS5, ProxyJump, Telnet, TCP console и локальный serial.
  • Современное и устаревшее оборудование: legacy SSH алгоритмы включаются явно для конкретного host в вызове.
  • Постоянная сессия: авторизация выполняется один раз, затем модель пишет команды, ssh/telnet и одиночные клавиши в тот же stream.
  • Несколько параллельных сессий в одном процессе: переключение между устройствами без переподключения.
  • Zero-config: модель описывает соединение сама, локально нужен только необязательный policy.yml.
  • Точные команды выбирает модель. MCP не переводит абстрактные операции в vendor CLI и не хранит полный каталог команд.
  • Собственный терминальный слой на Paramiko, telnetlib3 и pyserial; тип устройства модель определяет сама по баннеру и выводу.
  • Пароли загружаются из pass или явного key file; секреты вводятся в живой prompt через terminal_write_secret и не попадают в MCP arguments, results и audit. Plaintext-пароль — только за явным insecure-флагом.
  • Все подключения, ввод и события терминала журналируются без секретов.

Первая область поддержки

  • Cisco IOS/IOS-XE, включая старые 29xx/35xx.
  • Huawei VRP и Huawei OLT.
  • Juniper Junos.
  • SNR 29xx и 52xx на базе механики Cisco IOS, но как разные CLI-диалекты.
  • D-Link DGS/DES.
  • Eltex MES/ESR.
  • MikroTik RouterOS через обычный SSH.
  • BDCOM, EcoSGE и PON-платформы через generic transport.

Не входит в первую версию

  • Отдельный RouterOS API MCP.
  • Полноценная система управления конфигурациями или Source of Truth.
  • Автоматическая запись в production.
  • Обход TACACS/RADIUS command authorization.
  • Автоматическое включение слабых SSH-алгоритмов для всех устройств.

Документы

Установка

uvx network-terminal-mcp
# или как постоянный инструмент:
uv tool install network-terminal-mcp
# или:
pip install network-terminal-mcp

Запуск

Локальный MCP запускается OpenCode через stdio, без прослушивания TCP-порта:

{
  "mcp": {
    "network-terminal": {
      "type": "local",
      "command": ["uvx", "network-terminal-mcp"],
      "enabled": true
    }
  },
  "permission": {
    "network-terminal_open_session": "ask"
  }
}

Конфигурационные файлы не обязательны. Для строгих ограничений (например, hard-deny Telnet, serial, legacy-алгоритмов, plaintext) можно положить policy.yml в ~/.config/network-terminal-mcp/. Ввод в живой сессии по умолчанию не подтверждается: после одобренного open_session модель работает в терминале свободно.

Проверка локальной политики до запуска:

uv sync
uv run python -m network_terminal_mcp check

Подробный порядок регистрации SSH host key и запуска через OpenCode описан в руководстве эксплуатации.

Metadata

Release files for network-terminal-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for network-terminal-mcp 0.1.0
File Size Uploaded
network_terminal_mcp-0.1.0.tar.gz 159.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for network-terminal-mcp 0.1.0
File Interpreter ABI Platform
network_terminal_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 202.4 kB

Release files / network_terminal_mcp-0.1.0.tar.gz

Download URL network_terminal_mcp-0.1.0.tar.gz
Size 159.8 kB
Tags Source
SHA-256 checksum
How to use checksums
33991d61ee1d725f4906a01bcf0295ae82eaa0f6539188d1b7e6c905bb46bc96
BLAKE2b-256 checksum
How to use checksums
37753edb73daf7a1163547b144b90846945d9b5b75daaeb204613848f7ae08d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / network_terminal_mcp-0.1.0-py3-none-any.whl

Download URL network_terminal_mcp-0.1.0-py3-none-any.whl
Size 42.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7b07106c4c51b6f17b6b7acd0b0c199c446796bf994d198c2fe4f470c12369d9
BLAKE2b-256 checksum
How to use checksums
7bfc639817f7d88b1e0e900b58571be9c182c557ff45c529b408cf840ed40565
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

0.1.1

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page