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: vibing-steampunk
Модель прав (по умолчанию = строго только чтение)
Модель прав принудительно применяется на стороне 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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables interaction with SAP ABAP systems through ABAP Development Tools (ADT), providing access to repository objects, source code, where-used analysis, and SQL queries with support for both on-premise and BTP systems.2
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to access SAP ADT APIs for reading, writing, debugging, deploying, and testing ABAP code through natural language or DSL automation.448MIT
- AlicenseAqualityCmaintenanceEnables 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.9MIT
- FlicenseAqualityCmaintenanceEnables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.424
Related MCP Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Odoo ERP for AI agents: hosted OAuth endpoint, gated writes, one endpoint for every instance.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/xiaoliang2/dsh-abap-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server