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 модель работает в терминале свободно.

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

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.1

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.1
File Size Uploaded
network_terminal_mcp-0.1.1.tar.gz 160.2 kB Details

Built distribution (wheel)

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

Total release size: 202.9 kB

Release files / network_terminal_mcp-0.1.1.tar.gz

Download URL network_terminal_mcp-0.1.1.tar.gz
Size 160.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9c6114a14d5777dbb1f4feb000b06f1b0295a84fac2ce5245bc5332b0d71af5a
BLAKE2b-256 checksum
How to use checksums
d6024dc8c47f236b0f87f09bac7e678310063732ff2e731ca541a3196c5abcfe
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.1-py3-none-any.whl

Download URL network_terminal_mcp-0.1.1-py3-none-any.whl
Size 42.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7d47ceccb9fcea5b1516e5104018f88ca1e2a84b44df3aa9fb3fbba4fba9f77f
BLAKE2b-256 checksum
How to use checksums
9b4c558582290cf90fd93cc9484e8eb8dd95718f9e34bca4ce284a0a954acfb7
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

This release

0.1.1 This release

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