Почему предыдущие подходы к 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 анализирует изменения и корректирует скрипты. Это не фиксированная автоматизация, а живая система.
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.13Конфигурация 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 сервера:
- Playwright Browser - дает Claude доступ к браузеру. Может кликать, заполнять формы, делать скриншоты
- SAP Connector - кастомный плагин для прямого подключения к SAP RFC (если нужно)
- Filesystem - доступ к файловой системе для сохранения скриптов и логов
Claude Code видит эти инструменты как «функции», которые можно вызывать. Например: «открой SAP, войди в систему, найди транзакцию MM01, создай материал».
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 для бизнес-пользователей
Самое интересное: эта среда учится. Каждый успешный или неуспешный запуск можно логировать, анализировать и использовать для улучшения промптов. Через месяц работы система будет генерировать более точные скрипты, чем в первый день.
И последнее: не пытайтесь автоматизировать все сразу. Начните с одной простой транзакции. Доведите ее до идеала. Поймите, как Claude Code взаимодействует с SAP. Потом масштабируйтесь. SAP-автоматизация через AI - это не бинарный переключатель «включено/выключено». Это постепенное обучение системы.
Через полгода такой подход сократит 80% ручной работы с SAP. Но первые недели будут болью. Готовы?