Skip to main content
Glama
xiaoliang2

dsh-abap-mcp

by xiaoliang2

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.tsdist/permissions.js). По умолчанию ядро только для чтения всегда включено; 7 категорий прав на запись по умолчанию выключены, включаются по категориям через переменную окружения MCP_ABAP_PERMISSIONS. Любой незарегистрированный инструмент отклоняется (deny-by-default), новые обработчики не открывают доступ незаметно.

Ядро только для чтения (~75 инструментов, всегда включено)

Подгруппа

Инструменты

Описание

Аутентификация / сессия

login logout dropSession

Вход / выход / очистка локального кэша сессии

Обнаружение объектов

objectStructure searchObject findObjectPath objectTypes reentranceTicket

Структура объекта / поиск / поиск пути / типы объектов / повторный билет

Интроспекция классов

classIncludes classComponents

Состав include класса / список компонентов

Анализ кода (только чтение)

syntaxCheckCode syntaxCheckCdsUrl codeCompletion findDefinition usageReferences syntaxCheckTypes codeCompletionFull codeCompletionElement usageReferenceSnippets fixProposals fixEdits fragmentMappings abapDocumentation

Проверка синтаксиса / дополнение / переход к определению / поиск ссылок / предложения по исправлению / документация (только чтение)

Чтение исходного кода

getObjectSource

Чтение исходного кода объекта

Неактивные объекты

inactiveObjects

Список неактивированных объектов

Регистрация / проверка

objectRegistrationInfo validateNewObject

Информация о регистрации объекта / проверка параметров нового объекта (только чтение)

Чтение транспортов

transportInfo hasTransportConfig transportConfigurations getTransportConfiguration userTransports transportsByConfig systemUsers transportReference

Информация о транспортных запросах / транспорты пользователя / конфигурация / системные пользователи (только чтение)

Обзор репозитория

nodeContents mainPrograms

Обзор дерева объектов / главные программы include

Возможности / обнаружение

featureDetails collectionFeatureDetails findCollectionByUrl loadTypes adtDiscovery adtCoreDiscovery adtCompatibiliyGraph

Обнаружение возможностей ADT / запрос характеристик

Чтение результатов юнит-тестов

unitTestEvaluation unitTestOccurrenceMarkers

Оценка результатов юнит-тестов / позиции маркеров (только чтение)

Чтение настроек форматирования

prettyPrinterSetting

Чтение настроек форматирования (без изменения)

Чтение Git

gitRepos gitExternalRepoInfo checkRepo remoteRepoInfo

Список репозиториев / информация об удалённых / проверка (только чтение)

Чтение DDIC

annotationDefinitions ddicElement ddicRepositoryAccess packageSearchHelp

Аннотации / элементы DDIC / поиск пакетов (только чтение)

Детали привязки сервиса

bindingDetails

Детали привязки сервиса (только чтение)

Чтение данных

tableContents runQuery

Данные таблиц / SQL-запросы (только чтение)

Feeds / Dumps

feeds dumps

Список динамических объектов / список коротких дампов (dump)

Анализ переименования

renameEvaluate renamePreview

Оценка переименования / предпросмотр (только выполнение, без записи)

Чтение ATC

atcCustomizing atcCheckVariant atcWorklists atcUsers isProposalMessage atcContactUri

Конфигурация проверки ATC / варианты / рабочие списки / пользователи / контакты (только чтение)

Чтение трассировок

tracesList tracesListRequests tracesHitList tracesDbAccess tracesStatements

Список трассировок / запросы / попадания / доступ к БД / операторы (только чтение)

Ревизии / здоровье

revisions healthcheck

История ревизий объекта / проверка работоспособности соединения

7 категорий прав на запись (по умолчанию все выключены)

Переключатель

Подкатегория

Инструменты

Описание

sourceWrite

Запись исходного кода

setObjectSource deleteObject activateObjects activateByName createObject createTestInclude lock unLock

Запись исходного кода / удаление объектов / активация / создание объектов / создание тестовых include / блокировка и разблокировка

transports

Транспортные запросы

createTransport setTransportsConfig createTransportsConfig transportDelete transportRelease transportSetOwner transportAddUser

Создание / настройка / удаление / выпуск / смена ответственного / добавление пользователя

refactor

Рефакторинг

renameExecute extractMethodEvaluate extractMethodPreview extractMethodExecute prettyPrinter setPrettyPrinterSetting

Выполнение переименования / извлечение метода (оценка/предпросмотр/выполнение) / форматирование (чтение/запись)

exec

Запуск

runClass unitTestRun

Запуск ABAP-класса / запуск модульных тестов

Запись ATC

createAtcRun atcExemptProposal atcRequestExemption atcChangeContact

Запуск проверки ATC / предложение исключения / запрос исключения / изменение контакта

Настройка трассировки

tracesSetParameters tracesCreateConfiguration tracesDeleteConfiguration tracesDelete

Установка параметров трассировки / создание конфигурации / удаление конфигурации / удаление записей

git

Запись Git

gitCreateRepo gitPullRepo gitUnlinkRepo stageRepo pushRepo switchRepoBranch

Создание репозитория / pull / отвязка / stage / push / переключение ветки

debug

Отладка

debuggerListeners debuggerListen debuggerDeleteListener debuggerSetBreakpoints debuggerDeleteBreakpoints debuggerAttach debuggerSaveSettings debuggerStackTrace debuggerVariables debuggerChildVariables debuggerStep debuggerGoToStack debuggerSetVariableValue

Прослушивание / точки останова / подключение / пошаговое выполнение / стек / чтение и запись переменных

serviceBinding

Привязка сервисов

publishServiceBinding unPublishServiceBinding

Публикация / отмена публикации привязки 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».

Конфигурация (карточка на странице настроек)

Предварительная подготовка (проверьте перед подключением)

  1. На стороне SAP необходимо активировать узел сервиса ADT в транзакции SICF: плагин обращается к SAP через HTTP(S)-сервис ABAP Development Tools (ADT). Если соответствующие узлы сервиса ADT не активированы, подключение завершится ошибкой. Обычно достаточно активировать в SICF default_host/sap/bc/adt и его подузлы (конкретные узлы немного различаются в зависимости от версии системы).

  2. Формат адреса SAP: в большинстве случаев http://адрес:порт или https://адрес:порт (в некоторых новых версиях/конфигурациях шлюза — полный путь http://адрес:порт/sap/bc/adt). Уточните протокол и порт в соответствии с фактической системой, например http://10.0.0.1:8000 или https://sap.example.com:44300.

Поле

Описание

Включить подключение

Общий переключатель; при выключении не подключается и не регистрирует никакие инструменты

Адрес SAP

Например http://адрес:порт / https://адрес:порт (необходимо предварительно включить сервис ADT)

Имя пользователя / пароль

Учётные данные для подключения

Клиент / язык

Например 000 / EN

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), данный плагин добавляет уровень разрешений поверх неё.

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    9
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.
    4
    24

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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