Контейнер-MCP
Безопасная контейнерная реализация протокола контекста модели (MCP) для выполнения инструментов от имени больших языковых моделей.
Обзор
Container-MCP предоставляет изолированную среду для безопасного выполнения кода, запуска команд, доступа к файлам и выполнения веб-операций, запрашиваемых большими языковыми моделями. Он реализует протокол MCP для предоставления этих возможностей в качестве инструментов, которые могут быть обнаружены и вызваны системами ИИ безопасным образом.
Архитектура использует шаблон менеджера, специфичный для домена, с многоуровневой безопасностью, чтобы гарантировать выполнение инструментов в изолированных средах с соответствующими ограничениями, защищая хост-систему от потенциально вредоносных операций.
Related MCP server: MCP Local File Reader
Основные характеристики
Многоуровневая безопасность
Изоляция контейнеров с помощью Podman/Docker
Профили AppArmor для ограничения доступа
Песочница Firejail для дополнительной изоляции
Ограничения ресурсов (ЦП, память, время выполнения)
Предотвращение обхода пути
Разрешенные ограничения расширения
Реализация протокола MCP
Стандартизированное обнаружение и выполнение инструментов
Управление ресурсами
Поддержка асинхронного выполнения
Менеджеры доменов
BashManager: безопасное выполнение командPythonManager: изолированное выполнение кода PythonFileManager: Безопасные операции с файламиWebManager: безопасный просмотр и сбор веб-страниц
Настраиваемая среда
Расширенная настройка через переменные среды
Поддержка пользовательской среды
Методы разработки и производства
Доступные инструменты
Системные операции
system_run_command
Выполняет команды bash в безопасной среде-песочнице.
Параметры :
command(строка, обязательно): команда bash для выполненияworking_dir(строка, необязательно): Рабочий каталог (игнорируется в песочнице)
Возврат :
stdout(строка): стандартный вывод командыstderr(строка): стандартная ошибка командыexit_code(целое число): Код выхода командыsuccess(логическое значение): успешно ли выполнена команда
system_run_python
Выполняет код Python в безопасной среде-песочнице.
Параметры :
code(строка, обязательно): код Python для выполненияworking_dir(строка, необязательно): Рабочий каталог (игнорируется в песочнице)
Возврат :
output(строка): Распечатать вывод из кодаerror(строка): Ошибка вывода кодаresult(любой): Необязательное возвращаемое значение (доступно, если код задает переменную_)success(логическое значение): успешно ли выполнен код
system_env_var
Получает значения переменных среды.
Параметры :
var_name(строка, необязательно): Конкретная переменная для извлечения
Возврат :
variables(объект): Словарь переменных окруженияrequested_var(string): Значение запрошенной переменной (если указано var_name)
Операции с файлами
file_read
Безопасное чтение содержимого файла.
Параметры :
path(строка, обязательно): Путь к файлу (относительно корня песочницы)encoding(строка, необязательно): Кодировка файла (по умолчанию: «utf-8»)
Возврат :
content(строка): Содержимое файлаsize(целое число): размер файла в байтахmodified(плавающее): отметка времени последнего измененияsuccess(логическое значение): было ли чтение успешным
file_write
Безопасно записывает содержимое в файл.
Параметры :
path(строка, обязательно): Путь к файлу (относительно корня песочницы)content(строка, обязательно): Содержимое для записиencoding(строка, необязательно): Кодировка файла (по умолчанию: «utf-8»)
Возврат :
success(логическое значение): была ли запись успешнойpath(строка): Путь к записанному файлу
file_list
Безопасно выводит список содержимого каталога.
Параметры :
path(строка, необязательно): Путь к каталогу (по умолчанию: "/")pattern(строка, необязательно): шаблон для фильтрации файлов
Возврат :
entries(массив): Список записей каталога с метаданнымиpath(строка): указанный путь к каталогуsuccess(логическое значение): был ли листинг успешным
file_delete
Безопасное удаление файла.
Параметры :
path(строка, обязательно): Путь к файлу для удаления.
Возврат :
success(логическое значение): было ли удаление успешнымpath(строка): Путь к удаленному файлу
file_move
Безопасное перемещение или переименование файла.
Параметры :
source(строка, обязательно): Путь к исходному файлуdestination(строка, обязательно): Путь к файлу назначения
Возврат :
success(логическое значение): был ли ход успешнымsource(строка): Исходный путь к файлуdestination(строка): Новый путь к файлу
Веб-операции
web_search
Использует поисковую систему для поиска информации в Интернете.
Параметры :
query(строка, обязательно): Запрос для поиска
Возврат :
results(массив): Список результатов поискаquery(строка): Исходный запрос
web_scrape
Извлекает определенный URL-адрес и возвращает его содержимое.
Параметры :
url(строка, обязательно): URL для считыванияselector(строка, необязательно): селектор CSS для выбора определенного контента
Возврат :
content(строка): Извлеченное содержимоеurl(строка): URL-адрес, который был скопированtitle(строка): Заголовок страницыsuccess(логическое значение): Был ли скрейп успешнымerror(строка): Сообщение об ошибке, если очистка не удалась
web_browse
Интерактивный просмотр веб-сайта с помощью Playwright.
Параметры :
url(строка, обязательно): Начальный URL для сеанса просмотра
Возврат :
content(строка): HTML-содержимое страницыurl(строка): конечный URL после всех перенаправленийtitle(строка): Заголовок страницыsuccess(логическое значение): был ли просмотр успешнымerror(строка): Сообщение об ошибке, если просмотр не удался
Среда исполнения
Container-MCP предоставляет изолированные среды выполнения для различных типов операций, каждая из которых имеет свои собственные меры безопасности и ограничения ресурсов.
Контейнерная среда
Основная служба Container-MCP работает внутри контейнера (с использованием Podman или Docker), обеспечивая первый уровень изоляции:
Базовый образ : Ubuntu 24.04
Пользователь : Пользователь Ubuntu без полномочий root
Питон : 3.12
Сеть : Ограничено только привязкой к локальному хосту
Файловая система : монтирование томов для конфигурации, данных и журналов
Безопасность : AppArmor, Seccomp и ограничения возможностей
Среда выполнения Bash
Среда исполнения Bash настроена с несколькими уровнями изоляции:
Разрешенные команды : Ограничено безопасными командами, настроенными в
BASH_ALLOWED_COMMANDSFirejail Sandbox : изоляция процесса с ограниченным доступом к файловой системе
Профиль AppArmor : Детальный контроль доступа
Ограничения ресурсов :
Тайм-аут выполнения (по умолчанию: 30 с, макс.: 120 с)
Ограниченный доступ к каталогу только для песочницы
Сеть : Нет доступа к сети
Файловая система : доступ только для чтения к данным, чтение и запись в песочнице
Примеры разрешенных команд:
Среда выполнения Python
Среда исполнения Python предназначена для безопасного выполнения кода:
Версия Python : 3.12
Ограничение памяти : настраиваемый предел памяти (по умолчанию: 256 МБ)
Время ожидания выполнения : настраиваемый лимит времени (по умолчанию: 30 с, макс.: 120 с)
Профиль AppArmor : Ограничивает доступ к системным ресурсам
Firejail Sandbox : изоляция процесса
Возможности : Все возможности удалены
Сеть : Нет доступа к сети
Доступные библиотеки : Только стандартная библиотека
Захват выходных данных : stdout/stderr перенаправляется и очищается
Контроль ресурсов : применяются ограничения ЦП и памяти
Среда файловой системы
Среда файловой системы управляет доступом к файлам внутри песочницы:
Базовый каталог : все операции ограничены корнем песочницы
Проверка пути : все пути нормализованы и проверены на наличие попыток обхода.
Ограничения по размеру : максимальный размер файла ограничен (по умолчанию: 10 МБ)
Управление расширениями : разрешены только разрешенные расширения (по умолчанию: txt, md, csv, json, py)
Контроль разрешений : применяются соответствующие разрешения на чтение/запись.
Изоляция : нет доступа к файловой системе хоста
Веб-среда
Веб-среда обеспечивает контролируемый доступ к внешним ресурсам:
Управление доменами : необязательное внесение в белый список разрешенных доменов
Управление тайм-аутами : настраиваемые тайм-ауты для операций
Управление браузером : Headless-браузер через Playwright для полного рендеринга
Управление скрейпингом : Простой скрейпинг через запросы/BeautifulSoup
Очистка контента : весь контент анализируется и очищается.
Сетевая изоляция : отдельное сетевое пространство имен с помощью контейнера
Архитектура
Проект имеет модульную архитектуру:
Каждый менеджер следует последовательным шаблонам проектирования:
Метод класса
.from_env()для инициализации на основе средыМетоды асинхронного выполнения для неблокирующих операций
Строгая проверка входных данных и обработка ошибок
Подход ко всем операциям, ориентированный на безопасность
Меры безопасности
Container-MCP реализует несколько уровней безопасности:
Изоляция контейнера : использует Podman/Docker для изоляции контейнера.
Профили AppArmor : детальный контроль доступа для выполнения bash и Python
Firejail Sandboxing : дополнительная изоляция процесса
Ограничения ресурсов : память, процессор и время выполнения.
Предотвращение обхода пути : проверяет и нормализует все пути к файлам.
Ограничения разрешенных расширений : контролирует, к каким типам файлов можно получить доступ.
Ограничения сети : контролирует, к каким доменам разрешен доступ.
Наименьшие привилегии : компоненты запускаются с минимальными необходимыми разрешениями.
Установка
Предпосылки
Система Linux с Podman или Docker
Питон 3.12+
Firejail (
apt install firejailилиdnf install firejail)AppArmor (
apt install apparmor apparmor-utilsилиdnf install apparmor apparmor-utils)
Быстрый старт
Самый быстрый способ начать работу — использовать универсальный скрипт:
Пошаговая установка
Вы также можете выполнить шаги установки по отдельности:
Инициализируйте проект :
./bin/01-init.shПостройте контейнер :
./bin/02-build-container.shНастройте среду :
./bin/03-setup-environment.shЗапустите контейнер :
./bin/04-run-container.shЗапустите тесты (необязательно):
./bin/05-run-tests.sh
Использование
После запуска контейнера вы можете подключиться к нему с помощью любой реализации клиента MCP. Сервер будет доступен по адресу http://localhost:8000 или по порту, указанному в вашей конфигурации.
Важно: при настройке клиента MCP необходимо задать URL конечной точки на http://127.0.0.1:<port>/sse (где <port> — это 8000 по умолчанию или настроенный вами порт). Путь /sse необходим для правильной связи событий, отправленных сервером.
Пример клиента Python
Конфигурация
Container-MCP можно настроить с помощью переменных среды, которые можно задать в volume/config/custom.env :
Конфигурация сервера
Конфигурация Bash Manager
Конфигурация менеджера Python
Конфигурация файлового менеджера
Конфигурация веб-менеджера
Разработка
Настройка среды разработки
Создайте виртуальную среду Python:
python3.12 -m venv .venv source .venv/bin/activateУстановите зависимости:
pip install -r requirements-dev.txtУстановите пакет в режиме разработки:
pip install -e .
Проведение тестов
Сервер разработки
Чтобы запустить сервер MCP в режиме разработки:
Лицензия
Данный проект лицензирован по лицензии Apache License 2.0.
Автор
Мартин Буковски