Skip to main content
Glama
xiaoliang2

dsh-abap-mcp

by xiaoliang2

dsh-abap-mcp

⚠️ Fase experimental · EXPERIMENTAL

Este plugin aún se encuentra en fase experimental (Experimental) y está destinado únicamente para entornos de desarrollo / prueba (Dev / Test).

  • No conecte directamente a sistemas de producción. Incluso si el modo predeterminado es de solo lectura, las herramientas de solo lectura pueden leer el código fuente y los datos comerciales del sistema de producción.

  • Utilice una cuenta SAP con privilegios mínimos (least-privilege) para conectarse.

  • Los interruptores de permisos de escritura (sourceWrite / transports / refactor / exec / git / debug / serviceBinding) están desactivados por defecto; actívelos solo en sistemas de desarrollo, según sea necesario y con precaución.

  • La contraseña se escribe en texto plano en el archivo local settings.yaml; preste atención a la seguridad de las credenciales.

Al usar este plugin, usted reconoce los riesgos mencionados y asume las consecuencias.

Plugin DeepSeek Harness: conecta SAP ABAP ADT a través de MCP, permitiendo consultar/leer objetos ABAP en SAP directamente desde DSH. Por defecto es estrictamente de solo lectura; los 7 tipos de permisos de escritura son interruptores configurables.

Servidor upstream: mario-andreschak/mcp-abap-abap-adt-api Este plugin incluye en server/ una copia del servidor con una capa de permisos (solo lectura por defecto + interruptores), y se encarga de la conexión, el registro de herramientas y la reconexión cuando cambia la configuración.


Arquitectura

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 开关启用
  • La única fuente de verdad de permisos está en el lado del servidor: el Host solo transmite los valores de los interruptores al servidor; la lista de herramientas y las llamadas se filtran/deniegan según los permisos. Incluso si alguien evita DSH y se conecta directamente al servidor, los permisos siguen vigentes.

  • Nombres de herramientas: mcp__abap__<nombre de herramienta> (por ejemplo, mcp__abap__searchObject).

Related MCP server: vibing-steampunk

Modelo de permisos (por defecto = estrictamente solo lectura)

El modelo de permisos se aplica en el lado del servidor (server/src/permissions.tsdist/permissions.js). El núcleo de solo lectura está siempre activo por defecto; los 7 tipos de permisos de escritura están desactivados por defecto y se activan por categoría mediante la variable de entorno MCP_ABAP_PERMISSIONS. Cualquier herramienta no registrada se rechaza (deny-by-default); los nuevos handlers no se habilitan silenciosamente.

Núcleo de solo lectura (~75 herramientas, siempre activo)

Subgrupo

Herramientas

Descripción

Autenticación / sesión

login logout dropSession

Iniciar sesión / cerrar sesión / limpiar caché de sesión local

Descubrimiento de objetos

objectStructure searchObject findObjectPath objectTypes reentranceTicket

Consultar estructura de objeto / buscar / localizar ruta / tipos de objeto / ticket de reentrada

Introspección de clases

classIncludes classComponents

Composición de includes de clase / lista de componentes

Análisis de código (solo lectura)

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

Verificación de sintaxis / autocompletado / salto a definición / consulta de referencias / sugerencias de corrección / documentación (solo lectura)

Lectura de código fuente

getObjectSource

Leer código fuente del objeto

Objetos inactivos

inactiveObjects

Listar objetos no activados

Registro / validación

objectRegistrationInfo validateNewObject

Información de registro de objeto / validación de parámetros de nuevo objeto (solo lectura)

Lectura de transportes

transportInfo hasTransportConfig transportConfigurations getTransportConfiguration userTransports transportsByConfig systemUsers transportReference

Información de solicitudes de transporte / transportes de usuario / configuración / usuarios del sistema (solo lectura)

Exploración de repositorio

nodeContents mainPrograms

Exploración de árbol de objetos / programa principal de includes

Características / descubrimiento

featureDetails collectionFeatureDetails findCollectionByUrl loadTypes adtDiscovery adtCoreDiscovery adtCompatibiliyGraph

Descubrimiento de capacidades ADT / consulta de características

Lectura de resultados de pruebas unitarias

unitTestEvaluation unitTestOccurrenceMarkers

Evaluar resultados de pruebas unitarias / marcar posiciones (solo lectura)

Lectura de configuración de formato

prettyPrinterSetting

Leer configuración de formato (sin modificar)

Lectura de Git

gitRepos gitExternalRepoInfo checkRepo remoteRepoInfo

Lista de repositorios / información remota / verificación (solo lectura)

Lectura de DDIC

annotationDefinitions ddicElement ddicRepositoryAccess packageSearchHelp

Anotaciones / elementos DDIC / búsqueda de paquetes (solo lectura)

Detalles de enlace de servicio

bindingDetails

Detalles de enlace de servicio (solo lectura)

Lectura de datos

tableContents runQuery

Datos de tabla / consulta SQL (solo lectura)

Feeds / Dumps

feeds dumps

Lista de objetos dinámicos / lista de dumps (volcados)

Análisis de renombrado

renameEvaluate renamePreview

Evaluación de renombrado / vista previa (solo ejecuta, no persiste)

Lectura de ATC

atcCustomizing atcCheckVariant atcWorklists atcUsers isProposalMessage atcContactUri

Configuración de verificación ATC / variantes / listas de trabajo / usuarios / contactos (solo lectura)

Lectura de trazas

tracesList tracesListRequests tracesHitList tracesDbAccess tracesStatements

Lista de trazas / solicitudes / aciertos / acceso a BD / sentencias (solo lectura)

Revisiones / salud

revisions healthcheck

Historial de revisiones de objeto / verificación de salud de conexión

7 tipos de permisos de escritura (desactivados por defecto)

Interruptor

Subcategoría

Herramientas

Descripción

sourceWrite

Escritura de código fuente

setObjectSource deleteObject activateObjects activateByName createObject createTestInclude lock unLock

Escribir código fuente / eliminar objetos / activar / crear objetos / crear test include / bloquear y desbloquear

transports

Solicitudes de transporte

createTransport setTransportsConfig createTransportsConfig transportDelete transportRelease transportSetOwner transportAddUser

Crear / configurar / eliminar / liberar / cambiar responsable / añadir usuario

refactor

Refactorización

renameExecute extractMethodEvaluate extractMethodPreview extractMethodExecute prettyPrinter setPrettyPrinterSetting

Ejecutar renombrado / extraer método (evaluar/vista previa/ejecutar) / formatear (lectura/escritura)

exec

Clase de ejecución

runClass unitTestRun

Ejecutar clase ABAP / ejecutar pruebas unitarias

Operaciones de escritura ATC

createAtcRun atcExemptProposal atcRequestExemption atcChangeContact

Iniciar comprobación ATC / propuesta de exención / solicitar exención / cambiar contacto

Configuración de trazas

tracesSetParameters tracesCreateConfiguration tracesDeleteConfiguration tracesDelete

Establecer parámetros de traza / crear configuración / eliminar configuración / eliminar registros

git

Operaciones de escritura Git

gitCreateRepo gitPullRepo gitUnlinkRepo stageRepo pushRepo switchRepoBranch

Crear repositorio / pull / desvincular / stage / push / cambiar de rama

debug

Depuración

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

Escuchar / puntos de interrupción / adjuntar / paso a paso / pila / lectura y escritura de variables

serviceBinding

Enlace de servicios

publishServiceBinding unPublishServiceBinding

Publicar / cancelar publicación de enlace de servicio OData

Nota: en el núcleo de solo lectura, «Lectura ATC», «Lectura de trazas», «Lectura Git» y «Lectura de transportes» solo permiten leer; solo las herramientas de escritura de las categorías correspondientes (iniciar comprobaciones, modificar configuración, hacer push de código, publicar servicios, etc.) requieren permisos. Antes de un renombrado, la vista previa (renameEvaluate/renamePreview) es de solo lectura; solo la ejecución real (renameExecute) requiere refactor.

Confirmación manual de permisos (para evitar que la IA active permisos por sí misma)

Al activar cualquier interruptor de permisos, el plugin exige confirmación manual: al marcar la tarjeta de la página de configuración se genera un credencial de confirmación de un solo uso (confirm-<marca de tiempo>-<cadena aleatoria>) que se escribe en la configuración; el lado del Host solo permite la conexión en el modo correspondiente si el credencial es reciente (dentro de 60 segundos) y tiene el formato correcto; de lo contrario, fuerza la vuelta a solo lectura y muestra en el estado el aviso «requiere confirmación manual en la tarjeta de configuración». Este mecanismo cubre los 7 tipos de interruptores de permisos (sourceWrite / transports / refactor / exec / git / debug / serviceBinding) por igual.

  • Los permisos solo se pueden activar mediante la tarjeta de la página de configuración. Activarlos a través de la API settings / editando directamente settings.yaml / pidiendo al modelo en la conversación que modifique permissions será rechazado por falta de un credencial válido.

  • El credencial tiene una validez de 60 segundos y caduca automáticamente al reiniciar; hay que volver a operar en la tarjeta.

  • Desactivar todos los permisos (volver a todo desactivado) no requiere confirmación y siempre está permitido.

Instalación

Desde npm (paquete oficial)

dsh plugin add @xiaobanli/dsh-abap-mcp

Directorio local (desarrollo/integración)

Añade la dependencia en el package.json del perfil y ejecuta pnpm install:

{
  "dependencies": {
    "@xiaobanli/dsh-abap-mcp": "link:C:/othersoftware/harness/harness/project6/dsh-abap-mcp"
  },
  "dsh": { "profile": { "bundles": [ "...", "dsh-abap-mcp" ] } }
}

Tras reiniciar DSH, aparecerá la tarjeta «ABAP MCP» en el lado izquierdo de la página de configuración.

Configuración (tarjeta de la página de configuración)

Preparación previa (confírmalo antes de conectar)

  1. En el lado de SAP, hay que activar el nodo de servicio ADT en la transacción SICF: el plugin accede a SAP a través del servicio HTTP(S) de ABAP Development Tools (ADT); si los nodos de servicio ADT correspondientes no están activos, la conexión fallará. Normalmente basta con activar default_host/sap/bc/adt y sus subnodos en SICF (los nodos concretos varían ligeramente según la versión del sistema).

  2. Formato de la dirección SAP: la mayoría son http://dirección:puerto o https://dirección:puerto (en algunas versiones superiores/configuraciones de gateway, la ruta completa es http://dirección:puerto/sap/bc/adt). Confirma el protocolo y el puerto según el sistema real, por ejemplo http://10.0.0.1:8000 o https://sap.example.com:44300.

Campo

Descripción

Habilitar conexión

Interruptor general; si está desactivado, no conecta ni registra ninguna herramienta

Dirección SAP

Por ejemplo http://dirección:puerto / https://dirección:puerto (requiere activar primero el servicio ADT)

Usuario / Contraseña

Credenciales de conexión

Cliente / Idioma

Por ejemplo 000 / EN

7 interruptores de permisos de escritura

Marcar habilita la capacidad de escritura correspondiente

Tras guardar, el Host se reconecta automáticamente; también puedes preguntar directamente al modelo en la conversación por abap_mcp_status para ver el estado de la conexión.

Botón «Probar conexión»: primero guarda el formulario actual en disco y luego realiza una secuencia real de spawn→conexión→enumeración de herramientas→desconexión con la configuración actual; el resultado (éxito/fallo, tiempo empleado, número de herramientas) se muestra junto al botón; no cambia el estado del interruptor «Habilitar conexión».

  • Si no se han rellenado la dirección SAP / el usuario / la contraseña, el botón muestra directamente «Rellene primero la configuración» sin ejecutar una prueba en vacío.

  • Durante la prueba, el botón muestra «Probando…»; si no hay resultado en 60 segundos, se considera automáticamente tiempo de espera agotado y se muestra el aviso.

  • El resultado de la prueba (status.lastTest) se muestra de forma continua junto al botón y no se borra al refrescar el estado de reconexión.

  • La prueba es una acción puntual: no activa una conexión persistente ni una reconexión automática; si la prueba falla, tampoco entra en reintentos con retroceso. Solo un cambio de configuración (interruptor de habilitación / campos de conexión / permisos) activa la conexión persistente y la reconexión acotada (se abandona tras un máximo de 5 intentos).

Construir el servidor (tras modificar server/)

cd server
npm install --ignore-scripts   # 依赖均为纯 JS,无需生命周期脚本
node node_modules/typescript/bin/tsc -p tsconfig.json   # 产出 dist/

Solución de problemas (Troubleshooting)

«Probar conexión» muestra «Probando…» todo el tiempo, o no responde al hacer clic

  • Lo más probable es que la escritura de la configuración no se haya guardado en disco. Confirma que la dirección SAP / el usuario / la contraseña están rellenados; el plugin escribe la configuración de vuelta en el settings.yaml local.

  • Si se queda atascado repetidamente, revisa en los logs de DSH si aparece SettingsConflictError (conflicto de revisión de configuración que hace que la escritura se descarte): reinicia DSH e inténtalo de nuevo.

La conexión reporta McpError: Connection closed

  • El host de escritorio se ejecuta en Electron; el proceso hijo debe iniciarse en modo Node (el plugin ya establece automáticamente ELECTRON_RUN_AS_NODE=1).

  • Si sigue apareciendo, confirma que server/dist/index.js existe (si no has modificado el código fuente de server/, no es necesario reconstruir); si node server/dist/index.js se queda a la espera en la terminal, significa que el servidor en sí funciona correctamente.

Se ha activado un interruptor de permisos de escritura, pero la herramienta correspondiente no aparece

  • El punto donde los permisos surten efecto realmente está en el lado del servidor: tras guardar el interruptor, el plugin se reconecta y vuelve a enumerar las herramientas (el número de herramientas debería aumentar, por ejemplo de 75 a 83).

  • Si el número de herramientas de solo lectura no cambia, comprueba si el mode de abap_mcp_status ha pasado a read-only + <categoría>; si sigue siendo read-only, significa que el interruptor no se guardó correctamente.

Tras modificar el código fuente de server/, el comportamiento de las herramientas no cambia

  • Hay que reconstruir: cd server && npm install --ignore-scripts && node node_modules/typescript/bin/tsc -p tsconfig.json, y luego reiniciar DSH para que el plugin use el nuevo dist/.

En tiempo de ejecución, ABAP reporta errores como STRING_OFFSET_TOO_LARGE

  • Este tipo de errores provienen del propio programa ABAP leído/ejecutado en el lado de SAP y no tienen relación con el plugin. Usa mcp__abap__dumps para ver los detalles del short dump, o corrige el programa correspondiente en SE38.

Notas de seguridad

  • Solo lectura ≠ inofensivo: las herramientas de solo lectura aún pueden leer código fuente y datos de negocio de sistemas de producción. Se recomienda encarecidamente conectar a sistemas de desarrollo/pruebas y usar una cuenta con privilegios mínimos (los interruptores de permisos son solo una barrera en el lado de DSH, no sustituyen a la autorización del lado de SAP).

  • El servidor imprime al iniciarse el modo de permisos y el aviso de «se recomienda usar solo con sistemas de desarrollo/pruebas» (es una recomendación + aviso, no es obligatorio).

  • La contraseña se escribe en texto plano en el settings.yaml local (persistida por el servicio de configuración de DSH). Si necesitas un nivel de seguridad mayor, amplía por tu cuenta el almacenamiento al servicio credentials.

  • El proceso hijo del servidor solo hereda las variables de entorno de la lista blanca del SDK + las SAP_* y MCP_ABAP_PERMISSIONS inyectadas explícitamente por este plugin; no filtra el resto de variables de entorno del host.

Licencia

MIT. La parte del servidor es propiedad del autor original mario-andreschak (MIT); este plugin añade una capa de permisos sobre ella.

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