dsh-abap-mcp
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.ts → dist/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 |
| Iniciar sesión / cerrar sesión / limpiar caché de sesión local |
Descubrimiento de objetos |
| Consultar estructura de objeto / buscar / localizar ruta / tipos de objeto / ticket de reentrada |
Introspección de clases |
| Composición de includes de clase / lista de componentes |
Análisis de código (solo lectura) |
| 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 |
| Leer código fuente del objeto |
Objetos inactivos |
| Listar objetos no activados |
Registro / validación |
| Información de registro de objeto / validación de parámetros de nuevo objeto (solo lectura) |
Lectura de transportes |
| Información de solicitudes de transporte / transportes de usuario / configuración / usuarios del sistema (solo lectura) |
Exploración de repositorio |
| Exploración de árbol de objetos / programa principal de includes |
Características / descubrimiento |
| Descubrimiento de capacidades ADT / consulta de características |
Lectura de resultados de pruebas unitarias |
| Evaluar resultados de pruebas unitarias / marcar posiciones (solo lectura) |
Lectura de configuración de formato |
| Leer configuración de formato (sin modificar) |
Lectura de Git |
| Lista de repositorios / información remota / verificación (solo lectura) |
Lectura de DDIC |
| Anotaciones / elementos DDIC / búsqueda de paquetes (solo lectura) |
Detalles de enlace de servicio |
| Detalles de enlace de servicio (solo lectura) |
Lectura de datos |
| Datos de tabla / consulta SQL (solo lectura) |
Feeds / Dumps |
| Lista de objetos dinámicos / lista de dumps (volcados) |
Análisis de renombrado |
| Evaluación de renombrado / vista previa (solo ejecuta, no persiste) |
Lectura de ATC |
| Configuración de verificación ATC / variantes / listas de trabajo / usuarios / contactos (solo lectura) |
Lectura de trazas |
| Lista de trazas / solicitudes / aciertos / acceso a BD / sentencias (solo lectura) |
Revisiones / salud |
| 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 |
| Escritura de código fuente |
| Escribir código fuente / eliminar objetos / activar / crear objetos / crear test include / bloquear y desbloquear |
| Solicitudes de transporte |
| Crear / configurar / eliminar / liberar / cambiar responsable / añadir usuario |
| Refactorización |
| Ejecutar renombrado / extraer método (evaluar/vista previa/ejecutar) / formatear (lectura/escritura) |
| Clase de ejecución |
| Ejecutar clase ABAP / ejecutar pruebas unitarias |
Operaciones de escritura ATC |
| Iniciar comprobación ATC / propuesta de exención / solicitar exención / cambiar contacto | |
Configuración de trazas |
| Establecer parámetros de traza / crear configuración / eliminar configuración / eliminar registros | |
| Operaciones de escritura Git |
| Crear repositorio / pull / desvincular / stage / push / cambiar de rama |
| Depuración |
| Escuchar / puntos de interrupción / adjuntar / paso a paso / pila / lectura y escritura de variables |
| Enlace de servicios |
| 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) requiererefactor.
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 directamentesettings.yaml/ pidiendo al modelo en la conversación que modifiquepermissionsserá 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-mcpDirectorio 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)
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/adty sus subnodos en SICF (los nodos concretos varían ligeramente según la versión del sistema).Formato de la dirección SAP: la mayoría son
http://dirección:puertoohttps://dirección:puerto(en algunas versiones superiores/configuraciones de gateway, la ruta completa eshttp://dirección:puerto/sap/bc/adt). Confirma el protocolo y el puerto según el sistema real, por ejemplohttp://10.0.0.1:8000ohttps://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 |
Usuario / Contraseña | Credenciales de conexión |
Cliente / Idioma | Por ejemplo |
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.yamllocal.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.jsexiste (si no has modificado el código fuente deserver/, no es necesario reconstruir); sinode server/dist/index.jsse 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
modedeabap_mcp_statusha pasado aread-only + <categoría>; si sigue siendoread-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 nuevodist/.
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__dumpspara 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.yamllocal (persistida por el servicio de configuración de DSH). Si necesitas un nivel de seguridad mayor, amplía por tu cuenta el almacenamiento al serviciocredentials.El proceso hijo del servidor solo hereda las variables de entorno de la lista blanca del SDK + las
SAP_*yMCP_ABAP_PERMISSIONSinyectadas 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.
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