{"_id":"@cencosud-mdh-ar/sap-mcp","_rev":"2-f5a9dba57807ea3f5c3354769fa97fa3","name":"@cencosud-mdh-ar/sap-mcp","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@cencosud-mdh-ar/sap-mcp","version":"1.0.0","keywords":["sap","abap","adt","mcp","model-context-protocol","s4hana","ecc"],"author":{"name":"Cencosud MDH Argentina"},"license":"UNLICENSED","_id":"@cencosud-mdh-ar/sap-mcp@1.0.0","maintainers":[{"name":"lucas.jqn","email":"lucasjoaquin.florio@cencosud.cl"}],"bin":{"sap-mcp":"dist/presentation/cli/index.js","sap-mcp-server":"dist/index.js"},"dist":{"shasum":"b3ec002e5d37adc18bc42726b77e1d66ea5c7676","tarball":"https://registry.npmjs.org/@cencosud-mdh-ar/sap-mcp/-/sap-mcp-1.0.0.tgz","fileCount":283,"integrity":"sha512-B1GJO+SKoMK8v1UodSczqfgWT4wcAdP9B8KU+DJvMFpuxkEWsA3fTuNqTjDjVmNCwby640yQm6syOn7Kx/TCow==","signatures":[{"sig":"MEQCIHXSrtcaZPyDMsb1AkYgXghq0VPJlSJBouJuNauTkvlOAiAS8+oqzmwez+LrnFnYrum4ICFXvqAKiphIPkNhdj7i9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":783540},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"lint":"eslint . && prettier --check .","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","verify":"npm run build && npm run typecheck && npm run lint && npm run test:coverage","lint:fix":"eslint . --fix && prettier --write .","test:e2e":"vitest run tests/e2e","typecheck":"tsc -p tsconfig.json","test:coverage":"vitest run --coverage","prepublishOnly":"npm run verify"},"_npmUser":{"name":"lucas.jqn","email":"lucasjoaquin.florio@cencosud.cl"},"_npmVersion":"11.0.0","description":"Servidor MCP profesional para desarrollo SAP ABAP vía ADT REST (sin SAP GUI Scripting, sin Eclipse, sin RFC en el núcleo).","directories":{},"_nodeVersion":"22.13.0","dependencies":{"zod":"^3.25.0","pino":"^9.6.0","axios":"^1.9.0","commander":"^14.0.0","tough-cookie":"^5.1.0","fast-xml-parser":"^5.9.3","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.27.0","vitest":"^3.1.0","prettier":"^3.5.0","@eslint/js":"^9.27.0","typescript":"^5.8.0","@types/node":"^22.15.0","typescript-eslint":"^8.32.0","@vitest/coverage-v8":"^3.1.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/sap-mcp_1.0.0_1783605266328_0.046437962083950124","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@cencosud-mdh-ar/sap-mcp","version":"1.1.0","description":"Servidor MCP profesional para desarrollo SAP ABAP vía ADT REST (sin SAP GUI Scripting, sin Eclipse, sin RFC en el núcleo).","author":{"name":"Cencosud MDH Argentina"},"keywords":["sap","abap","adt","mcp","model-context-protocol","s4hana","ecc"],"license":"UNLICENSED","type":"module","publishConfig":{"access":"public"},"engines":{"node":">=20.0.0"},"main":"dist/index.js","bin":{"sap-mcp":"dist/presentation/cli/index.js","sap-mcp-server":"dist/index.js"},"scripts":{"build":"tsc -p tsconfig.build.json","clean":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\"","typecheck":"tsc -p tsconfig.json","lint":"eslint . && prettier --check .","lint:fix":"eslint . --fix && prettier --write .","test":"vitest run","test:coverage":"vitest run --coverage","test:e2e":"vitest run tests/e2e","verify":"npm run build && npm run typecheck && npm run lint && npm run test:coverage","prepublishOnly":"npm run verify"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.0","axios":"^1.9.0","commander":"^14.0.0","fast-xml-parser":"^5.9.3","pino":"^9.6.0","tough-cookie":"^5.1.0","zod":"^3.25.0"},"optionalDependencies":{"@napi-rs/keyring":"^1.1.0"},"devDependencies":{"@eslint/js":"^9.27.0","@types/node":"^22.15.0","@vitest/coverage-v8":"^3.1.0","eslint":"^9.27.0","prettier":"^3.5.0","typescript":"^5.8.0","typescript-eslint":"^8.32.0","vitest":"^3.1.0"},"_id":"@cencosud-mdh-ar/sap-mcp@1.1.0","gitHead":"f7566d49f47a63703c6b9ad9ae3a4f4a2d4d761b","types":"./dist/index.d.ts","_nodeVersion":"22.13.0","_npmVersion":"11.0.0","dist":{"integrity":"sha512-e23PKWQGViCHBtn/xGwk2CyyFV802J7v6hnza/v5CTp+/ybXtHgqlZfcJVFl5pXjVh8XVYP1uWKNYp88ioOigw==","shasum":"6a6a72475de701217cd841147c45019247301847","tarball":"https://registry.npmjs.org/@cencosud-mdh-ar/sap-mcp/-/sap-mcp-1.1.0.tgz","fileCount":283,"unpackedSize":786142,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIF/XE0ynWgx1a/6LozH+sx8u9Ub3qZGJAkgk6sXGsc47AiEAuZ5+FkeqzUbnmxPzENi1ruCR+pxDw+DB4QGtSyvO4wQ="}]},"_npmUser":{"name":"lucas.jqn","email":"lucasjoaquin.florio@cencosud.cl"},"directories":{},"maintainers":[{"name":"lucas.jqn","email":"lucasjoaquin.florio@cencosud.cl"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sap-mcp_1.1.0_1783624593163_0.5280956303216697"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-09T13:54:26.172Z","modified":"2026-07-09T19:16:33.531Z","1.0.0":"2026-07-09T13:54:26.523Z","1.1.0":"2026-07-09T19:16:33.394Z"},"author":{"name":"Cencosud MDH Argentina"},"license":"UNLICENSED","keywords":["sap","abap","adt","mcp","model-context-protocol","s4hana","ecc"],"description":"Servidor MCP profesional para desarrollo SAP ABAP vía ADT REST (sin SAP GUI Scripting, sin Eclipse, sin RFC en el núcleo).","maintainers":[{"name":"lucas.jqn","email":"lucasjoaquin.florio@cencosud.cl"}],"readme":"# @cencosud-mdh-ar/sap-mcp — SAP ABAP Development MCP Server\n\nServidor MCP (Model Context Protocol) profesional para desarrollo ABAP sobre **SAP ADT (ABAP Development Tools) REST**, sin SAP GUI Scripting, sin Eclipse, sin RFC en el núcleo. Permite que clientes MCP (Claude Desktop, Claude Code, Cursor, VSCode, entre otros) exploren, lean, modifiquen y administren objetos ABAP usando las credenciales SAP propias de cada desarrollador.\n\n> **Estado: v1.0.0 — roadmap completo (Etapas 0–12).**\n> 52 herramientas MCP operativas: exploración, lectura, escritura transaccional, creación de objetos, dependencias, Diccionario profundo, calidad (ABAP Unit, ATC, pretty printer), versiones y transportes. 220 tests verdes, `npm audit` sin vulnerabilidades. `delete_*` queda explícitamente fuera de v1.\n\n## Herramientas MCP disponibles\n\n| Herramienta | Descripción |\n|-------------|-------------|\n| `search_object` | Búsqueda de objetos por patrón (quickSearch), filtro opcional por tipo |\n| `list_packages` | Paquetes que coinciden con un patrón |\n| `list_package_contents` | Todos los objetos de un paquete |\n| `list_programs` / `list_classes` / `list_interfaces` | Contenido del paquete filtrado por tipo |\n| `read_program` / `read_include` | Fuente + metadatos de programas e includes |\n| `read_class` / `read_interface` / `read_method` | Fuente de clases, interfaces y métodos individuales |\n| `read_function_module` / `read_function_group` | Módulos de función y grupos |\n| `read_table` / `read_structure` | Metadatos DDIC + fuente DDL si el release la soporta |\n| `read_domain` / `read_data_element` | Metadatos DDIC (edición no soportada por ADT) |\n| `read_cds` | Fuente DDL de vistas CDS |\n| `get_object_metadata` | Metadatos adtcore de cualquier URI ADT |\n| `update_program` / `update_include` / `update_class` / `update_interface` / `update_cds` | Reemplazo del fuente completo (lock→PUT→unlock, rollback local, transporte) |\n| `update_method` | Reemplazo de un método individual de una clase |\n| `activate_object` / `activate_multiple` | Activación de objetos (compila la versión inactiva) |\n| `check_syntax` | Chequeo de sintaxis sobre fuente en memoria, sin persistir |\n| `get_where_used` | Usos de un objeto ABAP (where-used real de ADT) |\n| `get_references` | Referencias del símbolo en una posición del fuente (línea/columna) |\n| `get_callers` | Quiénes llaman a un método concreto de una clase |\n| `get_called_methods` | Llamadas salientes (métodos/FM/forms/submits) por análisis estático local |\n| `get_dependency_graph` | Grafo de dependencias inversas por BFS acotado (maxDepth ≤ 3, límite de nodos) |\n| `read_table_contents` | Datos de una tabla/vista vía datapreview (solo SELECT, nunca cacheado) |\n| `get_table_keys` | Campos clave y foreign keys (DDL o fallback datapreview) |\n| `get_table_indexes` | Índices secundarios si el release los expone por ADT |\n| `read_search_help` / `read_lock_object` | Metadatos de ayudas de búsqueda y objetos de bloqueo (según discovery) |\n| `run_unit_tests` | Ejecuta ABAP Unit y detalla las aserciones fallidas por clase/método |\n| `run_atc` | Corrida ATC completa con hallazgos priorizados (variante del sistema o explícita) |\n| `format_source` | Pretty printer del sistema sobre fuente en memoria |\n| `analyze_source` | Análisis estático local con reglas Clean ABAP básicas (sin conexión) |\n| `list_versions` | Historial de versiones ADT del objeto (según release) |\n| `compare_versions` | Diff de líneas cliente-side entre dos versiones (\"active\" = actual) |\n| `list_transports` | Órdenes de transporte del usuario con estado y tareas |\n| `create_transport` | Crea una orden workbench (bloqueada en conexiones readOnly) |\n| `get_transport_info` | Si el objeto exige orden, su paquete y qué órdenes sirven |\n| `create_program` / `create_include` | Crea programas e includes nuevos (transporte obligatorio fuera de $TMP) |\n| `create_class` / `create_interface` | Crea clases (con include de test classes) e interfaces globales nuevas |\n| `create_cds` | Crea vistas CDS (DDL sources) nuevas, con definición DDL inicial opcional |\n\n## Instalación y puesta en marcha\n\n```bash\nnpm install -g @cencosud-mdh-ar/sap-mcp\n\nsap-mcp init                  # crea la conexión (URL, mandante, usuario); --allow-insecure para http://\nsap-mcp login                 # guarda tu password en el llavero del SO y lo verifica\nsap-mcp doctor                # diagnostica entorno + conectividad ADT + capacidades del sistema\nsap-mcp config list           # muestra la configuración efectiva\n```\n\nCon la conexión verificada por `doctor`, configurá el servidor en tu cliente MCP (sección siguiente). El proceso servidor es `sap-mcp-server`; acepta `--connection <nombre>` para elegir una conexión distinta de la default.\n\n## Configuración por cliente MCP\n\n### Claude Code\n\n```bash\nclaude mcp add sap-abap --scope user -- sap-mcp-server --connection dev\n```\n\no directamente en `~/.claude.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"sap-abap\": {\n      \"type\": \"stdio\",\n      \"command\": \"sap-mcp-server\",\n      \"args\": [\"--connection\", \"dev\"],\n      \"env\": {}\n    }\n  }\n}\n```\n\n### Claude Desktop\n\nArchivo `claude_desktop_config.json` (Windows: `%APPDATA%\\Claude\\`; macOS: `~/Library/Application Support/Claude/`; Linux: `~/.config/Claude/`):\n\n```json\n{\n  \"mcpServers\": {\n    \"sap-abap\": {\n      \"command\": \"sap-mcp-server\",\n      \"args\": [\"--connection\", \"dev\"]\n    }\n  }\n}\n```\n\n### Cursor\n\n`~/.cursor/mcp.json` (global) o `.cursor/mcp.json` en el proyecto:\n\n```json\n{\n  \"mcpServers\": {\n    \"sap-abap\": {\n      \"command\": \"sap-mcp-server\",\n      \"args\": [\"--connection\", \"dev\"]\n    }\n  }\n}\n```\n\n### VSCode (GitHub Copilot / MCP)\n\n`.vscode/mcp.json` en el workspace:\n\n```json\n{\n  \"servers\": {\n    \"sap-abap\": {\n      \"type\": \"stdio\",\n      \"command\": \"sap-mcp-server\",\n      \"args\": [\"--connection\", \"dev\"]\n    }\n  }\n}\n```\n\nEn todos los casos la credencial NO va en la configuración del cliente: vive en el llavero del sistema operativo (la guardó `sap-mcp login`). Si el binario global no está en el PATH del cliente, usá la ruta absoluta a `sap-mcp-server` como `command`.\n\n## Prueba E2E contra un sistema SAP real\n\nLa suite `tests/e2e/` ejecuta **solo lecturas** (discovery + capacidades, `search_object`, `read_program`) contra un sistema real. Está desactivada por defecto y nunca corre en CI: se habilita con variables de entorno y las credenciales viven solo en la memoria del proceso.\n\nPowerShell (Windows):\n\n```powershell\n$env:SAP_MCP_E2E = \"1\"\n$env:SAP_MCP_E2E_URL = \"https://sapdev.empresa.com:44300\"\n$env:SAP_MCP_E2E_CLIENT = \"100\"\n$env:SAP_MCP_E2E_USER = \"TUUSUARIO\"\n$env:SAP_MCP_E2E_PASSWORD = \"********\"\n# opcionales:\n# $env:SAP_MCP_E2E_INSECURE = \"1\"            # certificado self-signed\n# $env:SAP_MCP_E2E_CAPATH = \"C:\\ca\\corp.pem\" # CA corporativa\n# $env:SAP_MCP_E2E_PROGRAM = \"ZMIPROGRAMA\"   # default: SAPMSSY0 (estándar)\n# $env:SAP_MCP_E2E_QUERY = \"ZVENT*\"          # default: Z*\nnpm run test:e2e\n```\n\nbash (Linux/macOS):\n\n```bash\nSAP_MCP_E2E=1 SAP_MCP_E2E_URL=https://sapdev:44300 SAP_MCP_E2E_CLIENT=100 \\\nSAP_MCP_E2E_USER=TUUSUARIO SAP_MCP_E2E_PASSWORD='********' npm run test:e2e\n```\n\nLa salida `[E2E]` en stderr muestra las capacidades detectadas, los resultados de búsqueda y el tamaño/paquete del programa leído. Alternativa sin código: `sap-mcp init` → `sap-mcp login` → `sap-mcp doctor` valida lo mismo desde la CLI.\n\n## Desarrollo\n\n```bash\nnpm install\nnpm run verify        # build + typecheck + lint + tests con cobertura\nnpm run build         # compila a dist/\nnpm test              # tests unitarios (vitest)\n```\n\nBinarios generados: `sap-mcp` (CLI de administración) y `sap-mcp-server` (proceso MCP por stdio). Para desarrollo local, `npm run build && npm link` deja ambos disponibles globalmente apuntando a `dist/`. Reglas de contribución y checklist de release en [CONTRIBUTING.md](CONTRIBUTING.md).\n\nEstructura del código según [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md): `src/domain` (errores, puertos), `src/application` (servicios, desde la Etapa 3), `src/infrastructure` (config, logging, y el cliente ADT en la Etapa 3), `src/presentation` (MCP + CLI), `src/composition` (composition root).\n\n## Documentación de arquitectura\n\n| Documento | Contenido |\n|-----------|-----------|\n| [docs/ADT_CAPABILITIES.md](docs/ADT_CAPABILITIES.md) | Catálogo de endpoints ADT con evidencia + matriz de capacidades por objeto/operación (base normativa: nada se implementa fuera de esta matriz) |\n| [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | Clean Architecture: capas, servicios, repositorios, cliente ADT, sesiones, multi-conexión, extensibilidad |\n| [docs/MCP_CONTRACT.md](docs/MCP_CONTRACT.md) | Contrato de herramientas MCP: naming, zod, envelope uniforme, códigos de error, convenciones |\n| [docs/SECURITY.md](docs/SECURITY.md) | Modelo de amenazas, keychain del SO, redacción de secretos, auditoría |\n| [docs/CLI_SPEC.md](docs/CLI_SPEC.md) | Especificación de `sap-mcp init/login/logout/doctor/config/logs/version/cache/update` |\n| [docs/CONFIGURATION.md](docs/CONFIGURATION.md) | config.json, variables de entorno, precedencia, multi-conexión, ubicaciones por plataforma |\n| [docs/LOGGING.md](docs/LOGGING.md) | pino, niveles, rotación, correlación, redacción obligatoria |\n| [docs/CACHE.md](docs/CACHE.md) | Cache L1/L2 por usuario y sistema, TTL por categoría, invalidación |\n| [docs/TESTING.md](docs/TESTING.md) | vitest, mock ADT server, fixtures XML, cobertura mínima, E2E opt-in |\n| [docs/ADR.md](docs/ADR.md) | 12 decisiones de arquitectura con alternativas evaluadas |\n| [docs/ROADMAP.md](docs/ROADMAP.md) | Etapas 1–12 validadas técnicamente + Definition of Done por etapa |\n\n## Principios no negociables\n\n- Comunicación exclusiva por HTTP(S) contra `/sap/bc/adt/*`; las capacidades reales se detectan por el **discovery** del sistema conectado — jamás se inventan endpoints.\n- Credenciales por desarrollador, guardadas en el llavero del sistema operativo (fallback cifrado AES-256-GCM); nunca en código, config ni logs.\n- TypeScript estricto, sin `any`, sin TODOs, sin funciones vacías; cada etapa cierra compilando con lint y tests verdes.\n- Compatibilidad: SAP ECC (NW ≥ 7.31 SP04 con ADT activo) y S/4HANA · Windows, Linux y macOS.\n\n## Licencia\n\nPropietaria — Cencosud S.A. Ver [LICENSE](LICENSE). La publicación en npmjs.com es solo un canal de distribución interna: el paquete no es open source y su uso está restringido a personal autorizado de Cencosud.\n","readmeFilename":"README.md"}