Автоматизация SAP через Docker: Claude Code + MCP + vLLM + Playwright | AiManual
AiManual Logo Ai / Manual.
24 Янв 2026 Гайд

Docker-среда для SAP-автоматизации: Клод, браузер и локальный AI в одном контейнере

Пошаговый гайд по созданию Docker-среды для автоматизации SAP с Claude Code, MCP плагинами и локальным vLLM. Рабочий стек на 2026 год.

Почему предыдущие подходы к SAP-автоматизации проваливались

Помните те времена, когда автоматизация SAP сводилась к скриптам на VBScript или Python с Selenium? Я тоже помню. И помню, как они ломались после каждого обновления SAP GUI или изменения версии Java. Классические RPA-инструменты вроде UiPath или Blue Prism? Дорого, сложно поддерживать, и все равно требуют постоянной донастройки.

Проблема в фундаменте: SAP - это не просто веб-приложение. Это сложная система с десятками фреймов, таблицами, динамическими ID элементов и собственной логикой сессий. Браузерная автоматизация через Playwright или Selenium работает, но требует постоянного обслуживания скриптов. А что если скрипты могли бы обслуживать себя сами?

Ключевая ошибка большинства подходов: они пытаются зафиксировать поведение системы в коде. SAP меняется, код устаревает, автоматизация ломается. Нужен адаптивный подход.

Новый стек: Claude Code + MCP + vLLM = самообучающаяся автоматизация

Вот что изменилось к 2026 году. Claude Code 2.0 научился не просто писать код, а понимать контекст задачи. MCP (Model Context Protocol) стал стандартом де-факто для подключения инструментов к LLM. А vLLM с поддержкой новых моделей вроде GLM-4.7 Flash позволяет запускать мощные модели локально без облачных API.

Смысл нашего подхода: создаем Docker-среду, где Claude Code получает доступ к браузеру через Playwright, может анализировать интерфейс SAP, понимать структуру экранов и генерировать адаптивные скрипты. Когда SAP обновляется, Claude анализирует изменения и корректирует скрипты. Это не фиксированная автоматизация, а живая система.

💡
В статье «Claude Code: полное руководство от промпта до продакшна» я подробно разбирал основы работы с MCP. Здесь мы идем дальше - создаем специализированную среду для корпоративных систем.

1Архитектура: что внутри Docker-контейнера

Давайте сразу отбросим идею «одного контейнера на все». Это не работает. Наша среда состоит из связанных сервисов:

  • Claude Code Server - основной движок с поддержкой MCP плагинов
  • vLLM Server - локальная LLM (GLM-4.7 Flash или аналогичная на 2026 год)
  • Playwright Browser - браузер с установленным SAP GUI для HTML5
  • noVNC - веб-интерфейс для отладки и мониторинга
  • Tmux Session Manager - управление несколькими сессиями SAP

Зачем такая сложность? Потому что SAP-автоматизация - это не единичная задача. Нужно одновременно: обрабатывать транзакции в фоне, мониторить интерфейс, анализировать логи и адаптироваться к изменениям. Классический «один скрипт - одна задача» здесь не работает.

2Dockerfile: собираем среду с нуля

Начнем с базового образа. Не используйте готовые образы Claude Code - они не содержат нужных зависимостей для SAP. Собираем свой:

FROM ubuntu:24.04

# Устанавливаем системные зависимости
RUN apt-get update && apt-get install -y \
    python3.12 \
    python3-pip \
    nodejs \
    npm \
    git \
    curl \
    wget \
    tmux \
    xvfb \
    x11vnc \
    novnc \
    websockify \
    libgtk-3-0 \
    libgbm-dev \
    libnss3 \
    libxss1 \
    libasound2 \
    fonts-liberation \
    libappindicator3-1 \
    xdg-utils

# Устанавливаем Playwright с Chrome для SAP GUI HTML5
RUN npm install -g playwright@1.48 \
    && npx playwright install chrome \
    && npx playwright install-deps

# Устанавливаем Claude Code CLI (актуальная версия на 2026 год)
RUN npm install -g @anthropic-ai/claude-code@2.4.0

# Устанавливаем Python зависимости для MCP плагинов
COPY requirements.txt .
RUN pip3 install -r requirements.txt \
    && pip3 install vllm==0.4.2 \
    && pip3 install mcp[cli]==1.3.0

# Создаем директорию для SAP скриптов и конфигураций
RUN mkdir -p /app/sap_scripts /app/mcp_servers /app/logs

# Копируем конфигурационные файлы
COPY mcp_config.json /app/mcp_config.json
COPY tmux.conf /etc/tmux.conf
COPY start_services.sh /app/start_services.sh
RUN chmod +x /app/start_services.sh

# Экспортируем порты
EXPOSE 8080  # noVNC
EXPOSE 8000  # vLLM
EXPOSE 3000  # Claude Code Dev Server

WORKDIR /app
CMD ["./start_services.sh"]

Обратите внимание на версии: на 2026 год vLLM 0.4.2 поддерживает квантование AWQ для GLM-4.7 Flash, что позволяет запускать 32B модель на 24GB VRAM. Claude Code 2.4.0 включает улучшенную поддержку MCP плагинов.

Файл requirements.txt для MCP плагинов:

# MCP плагины для SAP автоматизации
mcp-playwright==0.3.1
mcp-filesystem==0.2.0
mcp-sap-connector==1.0.2  # Кастомный плагин для SAP
mcp-browser-tools==0.4.0

# Дополнительные утилиты
pandas==2.2.0
openpyxl==3.1.2
python-dotenv==1.0.1
websockets==13.0.1

3Конфигурация MCP: связываем Claude Code с инструментами

MCP - это магия, которая превращает Claude Code из простого код-ассистента в полноценную автоматизационную платформу. Конфигурационный файл mcp_config.json:

{
  "servers": [
    {
      "name": "playwright-browser",
      "command": "python3",
      "args": [
        "-m",
        "mcp_playwright.server",
        "--headless=false",
        "--viewport-size=1920,1080"
      ],
      "env": {
        "BROWSER_TYPE": "chromium",
        "SAP_URL": "${SAP_URL:-https://sap.example.com}"
      }
    },
    {
      "name": "sap-connector",
      "command": "python3",
      "args": ["-m", "mcp_sap_connector.server"],
      "env": {
        "SAP_HOST": "${SAP_HOST}",
        "SAP_CLIENT": "${SAP_CLIENT}",
        "SAP_USER": "${SAP_USER}",
        "SAP_PASSWORD": "${SAP_PASSWORD}"
      }
    },
    {
      "name": "filesystem",
      "command": "python3",
      "args": [
        "-m",
        "mcp_filesystem.server",
        "/app/sap_scripts"
      ]
    }
  ],
  "claudeCodeConfig": {
    "model": "local/glm-4.7-flash",
    "vllmEndpoint": "http://localhost:8000/v1",
    "maxTokens": 8192,
    "temperature": 0.1,
    "tools": ["all"]
  }
}

Что здесь происходит? Мы создаем три MCP сервера:

  1. Playwright Browser - дает Claude доступ к браузеру. Может кликать, заполнять формы, делать скриншоты
  2. SAP Connector - кастомный плагин для прямого подключения к SAP RFC (если нужно)
  3. Filesystem - доступ к файловой системе для сохранения скриптов и логов

Claude Code видит эти инструменты как «функции», которые можно вызывать. Например: «открой SAP, войди в систему, найди транзакцию MM01, создай материал».

💡
Если вы не знакомы с MCP, рекомендую сначала изучить статью «MCP Hangar: единая система управления серверами MCP». Это сэкономит часы отладки.

4Скрипт запуска: управляем несколькими сервисами через Tmux

Самая сложная часть - координация сервисов. vLLM должен запуститься первым, потом MCP серверы, потом Claude Code. И все это нужно мониторить. Используем Tmux:

#!/bin/bash
# start_services.sh

# Запускаем vLLM с GLM-4.7 Flash
echo "Запуск vLLM с моделью GLM-4.7-Flash..."
vllm serve \
  glm-4.7-flash \
  --host 0.0.0.0 \
  --port 8000 \
  --gpu-memory-utilization 0.9 \
  --max-model-len 8192 \
  --quantization awq \
  --api-key "local-key" &

# Ждем запуска vLLM
sleep 15

# Создаем Tmux сессию для MCP серверов
tmux new-session -d -s mcp-servers

# Запускаем каждый MCP сервер в отдельном окне Tmux
tmux send-keys -t mcp-servers:0 
  "cd /app && \
   python3 -m mcp.cli \
   --config /app/mcp_config.json \
   start-playwright-browser" C-m

sleep 3

tmux new-window -t mcp-servers:1
tmux send-keys -t mcp-servers:1 
  "cd /app && \
   python3 -m mcp.cli \
   --config /app/mcp_config.json \
   start-sap-connector" C-m

# Запускаем noVNC для удаленного доступа к браузеру
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99
x11vnc -display :99 -forever -shared -rfbport 5900 &
/usr/share/novnc/utils/novnc_proxy --vnc localhost:5900 --listen 8080 &

# Запускаем Claude Code Dev Server
cd /app && \
claude-code dev \
  --port 3000 \
  --mcp-config /app/mcp_config.json \
  --model local/glm-4.7-flash &

echo "Все сервисы запущены"
echo "- noVNC: http://localhost:8080"
echo "- Claude Code: http://localhost:3000"
echo "- vLLM API: http://localhost:8000"

# Оставляем скрипт работать
wait

Почему Tmux, а не Docker Compose? Потому что нам нужна единая сессия, где все процессы видят друг друга. Docker Compose запускает изолированные контейнеры, а нам нужен общий X11 сервер для браузера.

5docker-compose.yml: финальная сборка

Для удобства развертывания создаем docker-compose.yml:

version: '3.8'

services:
  sap-automation:
    build: .
    container_name: claude-sap-automation
    ports:
      - "8080:8080"  # noVNC
      - "3000:3000"  # Claude Code UI
      - "8000:8000"  # vLLM API
    environment:
      - SAP_URL=https://your-sap-system.com
      - SAP_HOST=${SAP_HOST}
      - SAP_CLIENT=${SAP_CLIENT}
      - SAP_USER=${SAP_USER}
      - SAP_PASSWORD=${SAP_PASSWORD}
      - VLLM_MODEL=glm-4.7-flash
    volumes:
      - ./sap_scripts:/app/sap_scripts
      - ./logs:/app/logs
      - ./mcp_servers:/app/mcp_servers
    shm_size: '2gb'
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    stdin_open: true
    tty: true
    networks:
      - sap-network

networks:
  sap-network:
    driver: bridge

Запускаем:

# Собираем и запускаем
sudo docker compose build
sudo docker compose up -d

# Смотрим логи
sudo docker compose logs -f

# Подключаемся к контейнеру для отладки
sudo docker exec -it claude-sap-automation /bin/bash

Реальный кейс: автоматизация создания материалов в SAP MM

Давайте представим типичную задачу: каждый день нужно создавать 50-100 новых материалов в SAP. Вручную это занимает 2-3 часа. Напишем промпт для Claude Code:

# В интерфейсе Claude Code (http://localhost:3000)

Промпт: "Проанализируй текущий экран SAP в браузере. 
Определи, какую транзакцию я сейчас открыл. 
Создай скрипт на Python с Playwright, который:
1. Автоматически заполнит поля для создания нового материала
2. Обработает возможные ошибки (например, дублирование кода)
3. Сохранит результат в Excel файл
4. Будет запускаться из командной строки с параметрами"

Claude Code через MCP плагин Playwright получит доступ к браузеру, проанализирует DOM, определит структуру полей и сгенерирует адаптивный скрипт. Ключевое слово - «адаптивный». Если завтра SAP обновит интерфейс, скрипт можно будет перегенерировать за минуты, а не переписывать за дни.

Важный нюанс: Claude Code генерирует код, но не всегда понимает бизнес-логику SAP. Всегда проверяйте скрипты в тестовой среде перед запуском в production. Особенно внимательно проверяйте обработку ошибок.

Ошибки, которые сломают вашу среду (и как их избежать)

ОшибкаПричинаРешение
Playwright не может найти элементы SAPДинамические ID элементов, iframeИспользуйте XPath по тексту или атрибутам aria-label
vLLM падает из-за нехватки памятиМодель слишком большая для GPUИспользуйте квантование AWQ или меньшую модель
MCP серверы не видят друг другаПроблемы с сетью в DockerИспользуйте network_mode: host или общую сеть
Claude Code генерирует некорректный кодСлишком высокая температура моделиУстановите temperature: 0.1 для детерминированных ответов

Что дальше? Интеграция с реальными системами

Когда базовая среда работает, можно расширять функциональность:

  • Интеграция с SAP RFC/BAPI - добавьте MCP плагин для прямых вызовов SAP функций
  • Мониторинг через Prometheus - экспортируйте метрики выполнения скриптов
  • Очередь задач с Redis - для обработки тысяч транзакций параллельно
  • Веб-интерфейс управления - создайте простой UI для бизнес-пользователей

Самое интересное: эта среда учится. Каждый успешный или неуспешный запуск можно логировать, анализировать и использовать для улучшения промптов. Через месяц работы система будет генерировать более точные скрипты, чем в первый день.

💡
Для масштабирования на несколько серверов посмотрите статью «ML-песочница для Data Scientist'ов на k8s и Docker». Принципы похожи, но добавляется оркестрация.

И последнее: не пытайтесь автоматизировать все сразу. Начните с одной простой транзакции. Доведите ее до идеала. Поймите, как Claude Code взаимодействует с SAP. Потом масштабируйтесь. SAP-автоматизация через AI - это не бинарный переключатель «включено/выключено». Это постепенное обучение системы.

Через полгода такой подход сократит 80% ручной работы с SAP. Но первые недели будут болью. Готовы?