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@latest
# или как постоянный инструмент:
uv tool install network-terminal-mcp@latest
# или:
pip install network-terminal-mcp

Запуск

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

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

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

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

uvx network-terminal-mcp check
# в чекауте проекта:
uv sync && uv run python -m network_terminal_mcp check

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

Metadata

Release files for network-terminal-mcp 0.1.2

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.2
File Size Uploaded
network_terminal_mcp-0.1.2.tar.gz 162.4 kB Details

Built distribution (wheel)

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

Total release size: 206.2 kB

Release files / network_terminal_mcp-0.1.2.tar.gz

Download URL network_terminal_mcp-0.1.2.tar.gz
Size 162.4 kB
Tags Source
SHA-256 checksum
How to use checksums
9dfd4dfaccb09327158ef8d01d0374b5b592dbaa0da0b1cf15a00504f0afe59e
BLAKE2b-256 checksum
How to use checksums
36a4da3fdd135cc114fa5693c2ad32d8ef41fbc55c9938b523ad253ec814c757
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 8, 2026.

Transparency log

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

Download URL network_terminal_mcp-0.1.2-py3-none-any.whl
Size 43.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e0500a287246e573cc0156acbdd522e1667711441fb098c12ac71d0444b46f48
BLAKE2b-256 checksum
How to use checksums
a29b705fc5c0fbb241a7789517225f6d6ec4a13d621b5dac6b667cbc6c50f79d
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 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

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