dsh-abap-mcp
dsh-abap-mcp
⚠️ Экспериментальная стадия · EXPERIMENTAL
Этот плагин всё ещё находится на экспериментальной стадии (Experimental) и предназначен только для сред разработки / тестирования (Dev / Test).
Не подключайтесь напрямую к продуктивным системам. Даже если по умолчанию доступ только для чтения, инструменты чтения могут считывать исходный код и бизнес-данные продуктивной системы.
Используйте учётную запись SAP с минимальными привилегиями (least-privilege) для подключения.
Переключатели прав на запись (
sourceWrite/transports/refactor/exec/git/debug/serviceBinding) по умолчанию все выключены, включайте их только в системах разработки, по мере необходимости и с осторожностью.Пароль записывается в локальный
settings.yamlв открытом виде, следите за безопасностью учётных данных.Используя этот плагин, вы подтверждаете, что осведомлены о вышеуказанных рисках и принимаете на себя все последствия.
Плагин DeepSeek Harness: подключение к SAP ABAP ADT через MCP, позволяющее напрямую запрашивать/читать объекты ABAP в SAP прямо в DSH. По умолчанию строго только чтение, 7 категорий прав на запись — настраиваемые переключатели.
Верхнеуровневый сервер: mario-andreschak/mcp-abap-abap-adt-api Этот плагин встроил в
server/копию сервера с добавленным слоем прав (по умолчанию только чтение + переключатели), а также отвечает за подключение, регистрацию инструментов и переподключение при изменении настроек.
Архитектура
DSH 设置页卡片(ABAP MCP)
│ settingsScope.set(...) ←→ settings/updated
▼
Host 插件 lib/index.js
1. settings.register("abap-mcp", schema) # 连接配置 + 7 类权限开关 + 状态
2. spawn `node server/dist/index.js`(StdioClientTransport,env=SAP_* + MCP_ABAP_PERMISSIONS)
3. MCP Client 连接,把服务器工具注册为 mcp__abap__<tool>
4. 配置变更 → 去抖重连;连接断开 → 有界退避重试
▼
server/dist/index.js(MCP 服务器,权限在这里强制生效)
- MCP_ABAP_PERMISSIONS 未设置 → 默认只读(约 75 个只读工具)
- 7 类写权限通过 MCP_ABAP_PERMISSIONS 的 JSON 开关启用Единый источник истины для прав — на стороне сервера: Host лишь передаёт значения переключателей серверу; список инструментов и вызовы фильтруются/отклоняются по правам. Даже если кто-то обойдёт DSH и подключится напрямую к серверу, права всё равно действуют.
Именование инструментов:
mcp__abap__<имя_инструмента>(например,mcp__abap__searchObject).
Related MCP server: abap-adt-mcp
Модель прав (по умолчанию = строго только чтение)
Модель прав принудительно применяется на стороне server (server/src/permissions.ts → dist/permissions.js). По умолчанию ядро только для чтения всегда включено; 7 категорий прав на запись по умолчанию выключены, включаются по категориям через переменную окружения MCP_ABAP_PERMISSIONS. Любой незарегистрированный инструмент отклоняется (deny-by-default), новые обработчики не открывают доступ незаметно.
Ядро только для чтения (~75 инструментов, всегда включено)
Подгруппа | Инструменты | Описание |
Аутентификация / сессия |
| Вход / выход / очистка локального кэша сессии |
Обнаружение объектов |
| Структура объекта / поиск / поиск пути / типы объектов / повторный билет |
Интроспекция классов |
| Состав include класса / список компонентов |
Анализ кода (только чтение) |
| Проверка синтаксиса / дополнение / переход к определению / поиск ссылок / предложения по исправлению / документация (только чтение) |
Чтение исходного кода |
| Чтение исходного кода объекта |
Неактивные объекты |
| Список неактивированных объектов |
Регистрация / проверка |
| Информация о регистрации объекта / проверка параметров нового объекта (только чтение) |
Чтение транспортов |
| Информация о транспортных запросах / транспорты пользователя / конфигурация / системные пользователи (только чтение) |
Обзор репозитория |
| Обзор дерева объектов / главные программы include |
Возможности / обнаружение |
| Обнаружение возможностей ADT / запрос характеристик |
Чтение результатов юнит-тестов |
| Оценка результатов юнит-тестов / позиции маркеров (только чтение) |
Чтение настроек форматирования |
| Чтение настроек форматирования (без изменения) |
Чтение Git |
| Список репозиториев / информация об удалённых / проверка (только чтение) |
Чтение DDIC |
| Аннотации / элементы DDIC / поиск пакетов (только чтение) |
Детали привязки сервиса |
| Детали привязки сервиса (только чтение) |
Чтение данных |
| Данные таблиц / SQL-запросы (только чтение) |
Feeds / Dumps |
| Список динамических объектов / список коротких дампов (dump) |
Анализ переименования |
| Оценка переименования / предпросмотр (только выполнение, без записи) |
Чтение ATC |
| Конфигурация проверки ATC / варианты / рабочие списки / пользователи / контакты (только чтение) |
Чтение трассировок |
| Список трассировок / запросы / попадания / доступ к БД / операторы (только чтение) |
Ревизии / здоровье |
| История ревизий объекта / проверка работоспособности соединения |
7 категорий прав на запись (по умолчанию все выключены)
Переключатель | Подкатегория | Инструменты | Описание |
| Запись исходного кода |
| Запись исходного кода / удаление объектов / активация / создание объектов / создание тестовых include / блокировка и разблокировка |
| Транспортные запросы |
| Создание / настройка / удаление / выпуск / смена ответственного / добавление пользователя |
| Рефакторинг |
| Выполнение переименования / извлечение метода (оценка/предпросмотр/выполнение) / форматирование (чтение/запись) |
| Запуск |
| Запуск ABAP-класса / запуск модульных тестов |
Запись ATC |
| Запуск проверки ATC / предложение исключения / запрос исключения / изменение контакта | |
Настройка трассировки |
| Установка параметров трассировки / создание конфигурации / удаление конфигурации / удаление записей | |
| Запись Git |
| Создание репозитория / pull / отвязка / stage / push / переключение ветки |
| Отладка |
| Прослушивание / точки останова / подключение / пошаговое выполнение / стек / чтение и запись переменных |
| Привязка сервисов |
| Публикация / отмена публикации привязки OData-сервиса |
Примечание: в режиме «только чтение» «чтение ATC», «чтение трассировки», «чтение Git», «чтение транспортов» доступны только для чтения; инструменты записи в соответствующих категориях (запуск проверок, изменение конфигурации, push кода, публикация сервисов и т.д.) требуют открытия разрешений. Предпросмотр перед переименованием (
renameEvaluate/renamePreview) доступен только для чтения, фактическое выполнение (renameExecute) требует разрешенияrefactor.
Ручное подтверждение разрешений (предотвращение самостоятельного включения разрешений ИИ)
При включении любого переключателя разрешений плагин требует ручного подтверждения: при установке флажка на карточке в настройках генерируется одноразовый подтверждающий токен (confirm-<временная метка>-<случайная строка>), который записывается в конфигурацию. Сторона Host разрешает подключение в соответствующем режиме только если токен свежий (в течение 60 секунд) и имеет корректный формат; в противном случае принудительно выполняется откат к режиму только для чтения, а в статусе отображается подсказка «требуется ручное подтверждение на карточке настроек». Этот механизм распространяется на все 7 категорий переключателей разрешений (sourceWrite / transports / refactor / exec / git / debug / serviceBinding) без исключений.
Разрешения можно включить только через карточку на странице настроек. Попытки включить через API
settings/ прямое изменениеsettings.yaml/ изменениеpermissionsмоделью в диалоге будут отклонены из-за отсутствия действительного токена.Токен действителен 60 секунд, автоматически истекает после перезапуска — необходимо повторно выполнить действие на карточке.
Отключение всех разрешений (возврат к полностью выключенному состоянию) не требует подтверждения и разрешено всегда.
Установка
Из npm (официальный пакет)
dsh plugin add @xiaobanli/dsh-abap-mcpЛокальная директория (разработка/отладка)
Добавьте зависимость в package.json профиля и выполните pnpm install:
{
"dependencies": {
"@xiaobanli/dsh-abap-mcp": "link:C:/othersoftware/harness/harness/project6/dsh-abap-mcp"
},
"dsh": { "profile": { "bundles": [ "...", "dsh-abap-mcp" ] } }
}После перезапуска DSH на левой панели страницы настроек появится карточка «ABAP MCP».
Конфигурация (карточка на странице настроек)
Предварительная подготовка (проверьте перед подключением)
На стороне SAP необходимо активировать узел сервиса ADT в транзакции SICF: плагин обращается к SAP через HTTP(S)-сервис ABAP Development Tools (ADT). Если соответствующие узлы сервиса ADT не активированы, подключение завершится ошибкой. Обычно достаточно активировать в SICF
default_host/sap/bc/adtи его подузлы (конкретные узлы немного различаются в зависимости от версии системы).Формат адреса SAP: в большинстве случаев
http://адрес:портилиhttps://адрес:порт(в некоторых новых версиях/конфигурациях шлюза — полный путьhttp://адрес:порт/sap/bc/adt). Уточните протокол и порт в соответствии с фактической системой, напримерhttp://10.0.0.1:8000илиhttps://sap.example.com:44300.
Поле | Описание |
Включить подключение | Общий переключатель; при выключении не подключается и не регистрирует никакие инструменты |
Адрес SAP | Например |
Имя пользователя / пароль | Учётные данные для подключения |
Клиент / язык | Например |
7 переключателей разрешений на запись | Установка флажка включает соответствующую возможность записи |
После сохранения Host автоматически переподключается; также можно напрямую спросить модель abap_mcp_status в диалоге, чтобы увидеть статус подключения.
Кнопка «Проверить подключение»: сначала сохраняет текущую форму на диск, затем выполняет реальный цикл spawn→подключение→перечисление инструментов→отключение с текущей конфигурацией. Результат (успех/неудача, время, количество инструментов) отображается рядом с кнопкой; состояние переключателя «Включить подключение» не изменяется.
Если адрес SAP / имя пользователя / пароль не заполнены, кнопка сразу показывает «Пожалуйста, заполните конфигурацию» и не выполняет пустой тест.
Во время теста кнопка показывает «Тестирование…»; при отсутствии результата в течение 60 секунд автоматически фиксируется таймаут с соответствующим уведомлением.
Результат теста (
status.lastTest) постоянно отображается рядом с кнопкой и не стирается при обновлении статуса переподключения.Тест — разовое действие: не запускает постоянное подключение или автоматическое переподключение; при неудаче теста не выполняется повторная попытка с откатом. Постоянное подключение и ограниченные повторные попытки (не более 5, после чего отказ) запускаются только при изменении конфигурации (переключатель включения/поля подключения/разрешения).
Сборка сервера (после изменения server/)
cd server
npm install --ignore-scripts # 依赖均为纯 JS,无需生命周期脚本
node node_modules/typescript/bin/tsc -p tsconfig.json # 产出 dist/Устранение неполадок (Troubleshooting)
«Проверить подключение» постоянно показывает «Тестирование…» или не реагирует на нажатие
Скорее всего, запись настроек не была сохранена на диск. Убедитесь, что адрес SAP / имя пользователя / пароль заполнены; плагин записывает настройки обратно в локальный
settings.yaml.Если зависание повторяется, проверьте в журналах DSH наличие
SettingsConflictError(конфликт ревизии настроек, из-за которого запись была отброшена) — перезапустите DSH и попробуйте ещё раз.
Ошибка подключения McpError: Connection closed
Хост в виде десктопного приложения работает в Electron, дочерний процесс должен запускаться в режиме Node (плагин автоматически устанавливает
ELECTRON_RUN_AS_NODE=1).Если ошибка сохраняется, убедитесь, что
server/dist/index.jsсуществует (если исходный кодserver/не изменялся, пересборка не требуется); еслиnode server/dist/index.jsв терминале ожидает подключения, значит сам сервер работает нормально.
Включён переключатель разрешения на запись, но соответствующий инструмент не появился
Разрешения фактически применяются на стороне сервера: после сохранения переключателя плагин переподключается и заново перечисляет инструменты (количество инструментов должно увеличиться, например 75 → 83).
Если количество инструментов не изменилось, проверьте в
abap_mcp_status, изменился лиmodeнаread-only + <категория>; если по-прежнемуread-only, значит переключатель не был сохранён.
После изменения исходного кода server/ поведение инструментов не изменилось
Требуется пересборка:
cd server && npm install --ignore-scripts && node node_modules/typescript/bin/tsc -p tsconfig.json, затем перезапустите DSH, чтобы плагин использовал новыйdist/.
Во время выполнения ABAP выдаёт ошибки типа STRING_OFFSET_TOO_LARGE
Такие ошибки возникают в самой ABAP-программе, которая читается/выполняется на стороне SAP, и не связаны с плагином. Используйте
mcp__abap__dumpsдля просмотра подробностей короткого дампа или исправьте соответствующую программу в SE38.
Замечания по безопасности
Только чтение ≠ безвредно: инструменты только для чтения всё равно могут читать исходный код и бизнес-данные в продуктивной системе. Настоятельно рекомендуется подключаться к системам разработки/тестирования и использовать учётную запись с минимальными правами (переключатели разрешений — лишь ограждение на стороне DSH и не заменяют авторизацию на стороне SAP).
Сервер при запуске выводит режим разрешений и предупреждение «рекомендуется использовать только для систем разработки/тестирования» (это рекомендация + предупреждение, не принудительное требование).
Пароль записывается открытым текстом в локальный
settings.yaml(сохраняется сервисом настроек DSH). Для более высокого уровня безопасности расширьте решение самостоятельно, используя сервисcredentials.Дочерний процесс сервера наследует только переменные окружения из SDK-белого списка + явно внедряемые плагином
SAP_*иMCP_ABAP_PERMISSIONS; остальные переменные окружения хоста не утекают.
Лицензия
MIT. Серверная часть принадлежит оригинальному автору mario-andreschak (MIT), данный плагин добавляет уровень разрешений поверх неё.
This server cannot be deployed
Maintenance
Related MCP Connectors
Any REST/SOAP/GraphQL/OData/SQL API as MCP tools for Claude & ChatGPT. 385 connectors: SAP, ERP.
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
- StackOneOAuthcom.stackone
Give AI agents 30,000+ safe, token-optimized actions across Workday, SAP, Oracle + hundreds more.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants like Claude Code to directly connect to SAP ABAP systems via the ADT REST API with read/write capabilities, featuring AI-friendly high-level tools and built-in safety measures such as read-only mode, prefix whitelisting, and automatic locking.9396 npmMIT
- AlicenseAqualityDmaintenanceEnables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.24396 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to work with SAP ABAP systems through the ADT REST API, supporting repository search, source code read/write, activation, syntax checks, and transport request management.1Apache 2.0
- AlicenseBqualityAmaintenanceEnables LLMs to develop, debug, test, and manage SAP ABAP objects on a live system through the ABAP Development Tools (ADT) protocol.296MIT