network-terminal-mcp
Локальный 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-алгоритмов для всех устройств.
Документы
- Инструкция для модели — она же MCP-ресурс
network-terminal://usage; краткий контракт едет в MCPinstructions - Архитектура
- План разработки
- Модель безопасности
- Конфигурация
- Эксплуатация
- Результаты проверок
- История этапов 0-8
- Разработка адаптеров
- Стратегия тестирования
- Открытые вопросы
Установка
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)
| File | Size | Uploaded | |
|---|---|---|---|
| network_terminal_mcp-0.1.1.tar.gz | 160.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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