{"_id":"@babamba2/abap-mcp-adt-powerup","_rev":"10-686fffa4ec78c8e0adb480cd2d03d7bb","name":"@babamba2/abap-mcp-adt-powerup","dist-tags":{"latest":"4.8.4"},"versions":{"4.5.3":{"name":"@babamba2/abap-mcp-adt-powerup","version":"4.5.3","keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"license":"MIT","_id":"@babamba2/abap-mcp-adt-powerup@4.5.3","maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"}],"homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"bin":{"mcp-abap-adt":"bin/mcp-abap-adt.js","mcp-abap-adt-v2":"bin/mcp-abap-adt-v2.js"},"dist":{"shasum":"77ca9e454ff245bab7fcb0941e06184088af02ed","tarball":"https://registry.npmjs.org/@babamba2/abap-mcp-adt-powerup/-/abap-mcp-adt-powerup-4.5.3.tgz","fileCount":1644,"integrity":"sha512-epPckFcaGgY4yDFu+C4SnROb8OGHw5ieokkz+qdpAIj0+uX7y4kM2QdztKaEiVhw+GP+YVoy0tbxW1jC1RKB1A==","signatures":[{"sig":"MEQCIHF9MZf+pIQXpMr9p5YXa9Sj0QS27p/e4hPkh1no8b0eAiAZZy6pdyXe9/s0x4qzVCjP8CxWg0W6wYWeiDoZbXqhiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7638041},"jest":{"roots":["<rootDir>/src"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.test.ts"],"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"maxWorkers":1,"globalSetup":"<rootDir>/src/__tests__/integration/globalSetup.ts","testTimeout":600000,"testEnvironment":"node","moduleNameMapper":{"^(\\.{1,2}/.*)\\.js$":"$1"},"collectCoverageFrom":["src/**/*.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/index.ts"],"moduleFileExtensions":["ts","js","json"],"testPathIgnorePatterns":["__tests__/admin/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./utils":{"types":"./dist/lib/utils.d.ts","import":"./dist/lib/utils.js","require":"./dist/lib/utils.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.js"},"./handlers":{"types":"./dist/lib/handlers/index.d.ts","import":"./dist/lib/handlers/index.js","require":"./dist/lib/handlers/index.js"}},"gitHead":"857871867ff908f740f6c4b3a854d37e355068d1","mcpName":"io.github.babamba2/abap-mcp-adt-powerup","private":false,"scripts":{"dev":"npm run build && npx @modelcontextprotocol/inspector node ./dist/server/launcher.js --transport=stdio","auth":"npx sap-abap-auth auth","lint":"npx biome check --write src","test":"jest --passWithNoTests","build":"npx biome check --write --diagnostic-level=error src && npx tsc -p tsconfig.json","clean":"make clean","start":"node ./bin/mcp-abap-adt.js","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","dev:sse":"npm run build && node ./tools/dev-sse-v2.js","package":"npm pack","prepare":"husky","dev:http":"npm run build && node ./tools/dev-http-v2.js","test:low":"jest --testPathPatterns='integration.*Low' --runInBand --passWithNoTests --forceExit","docker:up":"cd docker && docker-compose up -d","start:sse":"node ./bin/mcp-abap-adt.js --transport=sse","test:high":"jest --testPathPatterns='integration.*High' --runInBand --passWithNoTests --forceExit","test:init":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"","build:fast":"npx tsc -p tsconfig.json","docs:tools":"node ./tools/generate-tools-docs.js","kill-ports":"lsof -ti:3000,3001,4000,4001,5000,6274,6277 | xargs -r kill -9 2>/dev/null || true","lint:check":"npx biome check src","start:http":"node ./bin/mcp-abap-adt.js --transport=http","test:check":"npx tsc --noEmit -p tsconfig.test.json","check-todos":"node tools/check-todos.js","docker:down":"cd docker && docker-compose down","docker:logs":"cd docker && docker-compose logs -f","docker:pack":"npm pack && mkdir -p docker/packages && mv *.tgz docker/packages/","test:reinit":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"","docker:build":"cd docker && docker-compose build","shared:check":"jest --testPathPatterns='admin/shared-deps/check' --testPathIgnorePatterns='[]' --passWithNoTests","shared:setup":"jest --testPathPatterns='admin/shared-deps/setup' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","package:build":"npm run build && npm pack","docker:rebuild":"npm run docker:down && npm run docker:build && npm run docker:up","prepublishOnly":"npm run build","smoke:mcp:crud":"node ./tools/mcp-crud-smoke.js","shared:teardown":"jest --testPathPatterns='admin/shared-deps/teardown' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","smoke:mcp:matrix":"node ./tools/mcp-crud-matrix.js","test:integration":"jest --testPathPatterns=integration --runInBand --passWithNoTests --forceExit","docker:up:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml up -d","docker:down:package":"cd docker && docker-compose -f docker-compose.package.yml down","docker:logs:package":"cd docker && docker-compose -f docker-compose.package.yml logs -f","docker:build:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml build","docker:up:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml up -d","docker:down:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml down","docker:logs:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml logs -f","docker:rebuild:package":"npm run docker:down:package && npm run docker:build:package && npm run docker:up:package","docker:build:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml build","docker:rebuild:headerless":"npm run docker:down:headerless && npm run docker:build:headerless && npm run docker:up:headerless"},"_npmUser":{"name":"psspss1122","email":"psspss1122@gmail.com"},"repository":{"url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git","type":"git"},"_npmVersion":"11.8.0","description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","directories":{"doc":"docs","test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["biome check --write"]},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.3.6","pino":"^10.1.0","axios":"^1.13.6","xml-js":"^1.6.11","js-yaml":"^4.1.1","pino-pretty":"^13.1.3","fast-xml-parser":"^5.4.2","@mcp-abap-adt/logger":"^0.1.4","@mcp-abap-adt/connection":"^1.5.0","@mcp-abap-adt/interfaces":"^3.1.0","@mcp-abap-adt/adt-clients":"^3.10.2","@mcp-abap-adt/auth-broker":"^1.0.5","@mcp-abap-adt/auth-stores":"^1.0.4","@modelcontextprotocol/sdk":"^1.27.1","@mcp-abap-adt/auth-providers":"^1.0.5","@mcp-abap-adt/header-validator":"^0.1.8"},"typesVersions":{"*":{"utils":["dist/lib/utils.d.ts"],"server":["dist/server/index.d.ts"],"handlers":["dist/lib/handlers/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","cors":"^2.8.6","jest":"^30.2.0","open":"^11.0.0","pino":"^10.3.0","yaml":"^2.8.1","husky":"^9.1.7","dotenv":"^17.3.1","express":"^5.1.0","ts-jest":"^29.2.0","commander":"^14.0.3","jest-util":"^30.2.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.3.5","lint-staged":"^16.4.0","pino-pretty":"^13.1.3","serve-handler":"^6.1.7","@biomejs/biome":"^2.4.6","@types/js-yaml":"^4.0.9","express-rate-limit":"^8.3.0","@modelcontextprotocol/inspector":"^0.21.1"},"optionalDependencies":{"node-rfc":"^3.3.1"},"_npmOperationalInternal":{"tmp":"tmp/abap-mcp-adt-powerup_4.5.3_1776150125100_0.6468476475213605","host":"s3://npm-registry-packages-npm-production"}},"4.6.0":{"name":"@babamba2/abap-mcp-adt-powerup","version":"4.6.0","keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"license":"MIT","_id":"@babamba2/abap-mcp-adt-powerup@4.6.0","maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"},{"name":"s2hoon326","email":"s2hoon326@gmail.com"}],"homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"bin":{"mcp-abap-adt":"bin/mcp-abap-adt.js","mcp-abap-adt-v2":"bin/mcp-abap-adt-v2.js"},"dist":{"shasum":"28a630b26e2198856ecf4c5b3d7c8712e86b90b4","tarball":"https://registry.npmjs.org/@babamba2/abap-mcp-adt-powerup/-/abap-mcp-adt-powerup-4.6.0.tgz","fileCount":1660,"integrity":"sha512-LGONlvOmx4PmanBX0F369f7KD7USCvvnblDlPPN7mv5Cnc0k66G06SDc58JdLKE/m/13voqMFfyxm2rIC7YdOw==","signatures":[{"sig":"MEUCIGLDWr2CKqtBXoNFQyUE4HtFzCXhubotvj/Fm7usqEJSAiEA6Okq7RMJNo2MBxeI/FRzawEPCjYo4qFonyRc1W0tNmc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7690449},"jest":{"roots":["<rootDir>/src"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.test.ts"],"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"maxWorkers":1,"globalSetup":"<rootDir>/src/__tests__/integration/globalSetup.ts","testTimeout":600000,"testEnvironment":"node","moduleNameMapper":{"^(\\.{1,2}/.*)\\.js$":"$1"},"collectCoverageFrom":["src/**/*.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/index.ts"],"moduleFileExtensions":["ts","js","json"],"testPathIgnorePatterns":["__tests__/admin/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./utils":{"types":"./dist/lib/utils.d.ts","import":"./dist/lib/utils.js","require":"./dist/lib/utils.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.js"},"./handlers":{"types":"./dist/lib/handlers/index.d.ts","import":"./dist/lib/handlers/index.js","require":"./dist/lib/handlers/index.js"}},"gitHead":"d46dc6329259f4f134a842ebc6c10041da84c6d9","mcpName":"io.github.babamba2/abap-mcp-adt-powerup","private":false,"scripts":{"dev":"npm run build && npx @modelcontextprotocol/inspector node ./dist/server/launcher.js --transport=stdio","auth":"npx sap-abap-auth auth","lint":"npx biome check --write src","test":"jest --passWithNoTests","build":"npx biome check --write --diagnostic-level=error src && npx tsc -p tsconfig.json","clean":"make clean","start":"node ./bin/mcp-abap-adt.js","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","dev:sse":"npm run build && node ./tools/dev-sse-v2.js","package":"npm pack","prepare":"husky","dev:http":"npm run build && node ./tools/dev-http-v2.js","test:low":"jest --testPathPatterns='integration.*Low' --runInBand --passWithNoTests --forceExit","docker:up":"cd docker && docker-compose up -d","start:sse":"node ./bin/mcp-abap-adt.js --transport=sse","test:high":"jest --testPathPatterns='integration.*High' --runInBand --passWithNoTests --forceExit","test:init":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"","build:fast":"npx tsc -p tsconfig.json","docs:tools":"node ./tools/generate-tools-docs.js","kill-ports":"lsof -ti:3000,3001,4000,4001,5000,6274,6277 | xargs -r kill -9 2>/dev/null || true","lint:check":"npx biome check src","start:http":"node ./bin/mcp-abap-adt.js --transport=http","test:check":"npx tsc --noEmit -p tsconfig.test.json","check-todos":"node tools/check-todos.js","docker:down":"cd docker && docker-compose down","docker:logs":"cd docker && docker-compose logs -f","docker:pack":"npm pack && mkdir -p docker/packages && mv *.tgz docker/packages/","test:reinit":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"","docker:build":"cd docker && docker-compose build","shared:check":"jest --testPathPatterns='admin/shared-deps/check' --testPathIgnorePatterns='[]' --passWithNoTests","shared:setup":"jest --testPathPatterns='admin/shared-deps/setup' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","package:build":"npm run build && npm pack","docker:rebuild":"npm run docker:down && npm run docker:build && npm run docker:up","prepublishOnly":"npm run build","smoke:mcp:crud":"node ./tools/mcp-crud-smoke.js","shared:teardown":"jest --testPathPatterns='admin/shared-deps/teardown' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","smoke:mcp:matrix":"node ./tools/mcp-crud-matrix.js","test:integration":"jest --testPathPatterns=integration --runInBand --passWithNoTests --forceExit","docker:up:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml up -d","docker:down:package":"cd docker && docker-compose -f docker-compose.package.yml down","docker:logs:package":"cd docker && docker-compose -f docker-compose.package.yml logs -f","docker:build:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml build","docker:up:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml up -d","docker:down:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml down","docker:logs:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml logs -f","docker:rebuild:package":"npm run docker:down:package && npm run docker:build:package && npm run docker:up:package","docker:build:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml build","docker:rebuild:headerless":"npm run docker:down:headerless && npm run docker:build:headerless && npm run docker:up:headerless"},"_npmUser":{"name":"psspss1122","email":"psspss1122@gmail.com"},"repository":{"url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git","type":"git"},"_npmVersion":"11.8.0","description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","directories":{"doc":"docs","test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["biome check --write"]},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.3.6","pino":"^10.1.0","axios":"^1.13.6","xml-js":"^1.6.11","js-yaml":"^4.1.1","pino-pretty":"^13.1.3","fast-xml-parser":"^5.4.2","@mcp-abap-adt/logger":"^0.1.4","@mcp-abap-adt/connection":"^1.5.0","@mcp-abap-adt/interfaces":"^3.1.0","@mcp-abap-adt/adt-clients":"^3.10.2","@mcp-abap-adt/auth-broker":"^1.0.5","@mcp-abap-adt/auth-stores":"^1.0.4","@modelcontextprotocol/sdk":"^1.27.1","@mcp-abap-adt/auth-providers":"^1.0.5","@mcp-abap-adt/header-validator":"^0.1.8"},"typesVersions":{"*":{"utils":["dist/lib/utils.d.ts"],"server":["dist/server/index.d.ts"],"handlers":["dist/lib/handlers/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","cors":"^2.8.6","jest":"^30.2.0","open":"^11.0.0","pino":"^10.3.0","yaml":"^2.8.1","husky":"^9.1.7","dotenv":"^17.3.1","express":"^5.1.0","ts-jest":"^29.2.0","commander":"^14.0.3","jest-util":"^30.2.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.3.5","lint-staged":"^16.4.0","pino-pretty":"^13.1.3","serve-handler":"^6.1.7","@biomejs/biome":"^2.4.6","@types/js-yaml":"^4.0.9","express-rate-limit":"^8.3.0","@modelcontextprotocol/inspector":"^0.21.1"},"optionalDependencies":{"node-rfc":"^3.3.1"},"_npmOperationalInternal":{"tmp":"tmp/abap-mcp-adt-powerup_4.6.0_1776358865792_0.9302617937337012","host":"s3://npm-registry-packages-npm-production"}},"4.7.0":{"name":"@babamba2/abap-mcp-adt-powerup","version":"4.7.0","keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"license":"MIT","_id":"@babamba2/abap-mcp-adt-powerup@4.7.0","maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"},{"name":"s2hoon326","email":"s2hoon326@gmail.com"}],"homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"bin":{"mcp-abap-adt":"bin/mcp-abap-adt.js","mcp-abap-adt-v2":"bin/mcp-abap-adt-v2.js"},"dist":{"shasum":"57ee57bc46b9e06c7a5f00c8f3eaaa44ff80cd75","tarball":"https://registry.npmjs.org/@babamba2/abap-mcp-adt-powerup/-/abap-mcp-adt-powerup-4.7.0.tgz","fileCount":1708,"integrity":"sha512-A3zBrzfg9pwc9smnKoNWVsHWtyUVPlg3aTylP65RBDr3t4J7cj+iUTTXV4Zf9U8CN9Ygr5xwid+KJexxIWWB8w==","signatures":[{"sig":"MEUCIQC5kw8+PmrqhJOl0NzxUq9uHdRRtarZ6an5nsMzHjbIfQIgUsBwma7IYKrzCLR+4BdfsmsSjwe2O2NsUnjj2n/fU0I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7914251},"jest":{"roots":["<rootDir>/src"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.test.ts"],"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"maxWorkers":1,"globalSetup":"<rootDir>/src/__tests__/integration/globalSetup.ts","testTimeout":600000,"testEnvironment":"node","moduleNameMapper":{"^(\\.{1,2}/.*)\\.js$":"$1"},"collectCoverageFrom":["src/**/*.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/index.ts"],"moduleFileExtensions":["ts","js","json"],"testPathIgnorePatterns":["__tests__/admin/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./utils":{"types":"./dist/lib/utils.d.ts","import":"./dist/lib/utils.js","require":"./dist/lib/utils.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.js"},"./handlers":{"types":"./dist/lib/handlers/index.d.ts","import":"./dist/lib/handlers/index.js","require":"./dist/lib/handlers/index.js"}},"gitHead":"174dac3ab9f0b972b87739a9f88f1765b208a909","mcpName":"io.github.babamba2/abap-mcp-adt-powerup","private":false,"scripts":{"dev":"npm run build && npx @modelcontextprotocol/inspector node ./dist/server/launcher.js --transport=stdio","auth":"npx sap-abap-auth auth","lint":"npx biome check --write src","test":"jest --passWithNoTests","build":"npx biome check --write --diagnostic-level=error src && npx tsc -p tsconfig.json","clean":"make clean","start":"node ./bin/mcp-abap-adt.js","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","dev:sse":"npm run build && node ./tools/dev-sse-v2.js","package":"npm pack","prepare":"husky","dev:http":"npm run build && node ./tools/dev-http-v2.js","test:low":"jest --testPathPatterns='integration.*Low' --runInBand --passWithNoTests --forceExit","docker:up":"cd docker && docker-compose up -d","start:sse":"node ./bin/mcp-abap-adt.js --transport=sse","test:high":"jest --testPathPatterns='integration.*High' --runInBand --passWithNoTests --forceExit","test:init":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"","build:fast":"npx tsc -p tsconfig.json","docs:tools":"node ./tools/generate-tools-docs.js","kill-ports":"lsof -ti:3000,3001,4000,4001,5000,6274,6277 | xargs -r kill -9 2>/dev/null || true","lint:check":"npx biome check src","start:http":"node ./bin/mcp-abap-adt.js --transport=http","test:check":"npx tsc --noEmit -p tsconfig.test.json","check-todos":"node tools/check-todos.js","docker:down":"cd docker && docker-compose down","docker:logs":"cd docker && docker-compose logs -f","docker:pack":"npm pack && mkdir -p docker/packages && mv *.tgz docker/packages/","test:reinit":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"","docker:build":"cd docker && docker-compose build","shared:check":"jest --testPathPatterns='admin/shared-deps/check' --testPathIgnorePatterns='[]' --passWithNoTests","shared:setup":"jest --testPathPatterns='admin/shared-deps/setup' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","package:build":"npm run build && npm pack","docker:rebuild":"npm run docker:down && npm run docker:build && npm run docker:up","prepublishOnly":"npm run build","smoke:mcp:crud":"node ./tools/mcp-crud-smoke.js","shared:teardown":"jest --testPathPatterns='admin/shared-deps/teardown' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","smoke:mcp:matrix":"node ./tools/mcp-crud-matrix.js","test:integration":"jest --testPathPatterns=integration --runInBand --passWithNoTests --forceExit","docker:up:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml up -d","docker:down:package":"cd docker && docker-compose -f docker-compose.package.yml down","docker:logs:package":"cd docker && docker-compose -f docker-compose.package.yml logs -f","docker:build:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml build","docker:up:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml up -d","docker:down:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml down","docker:logs:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml logs -f","docker:rebuild:package":"npm run docker:down:package && npm run docker:build:package && npm run docker:up:package","docker:build:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml build","docker:rebuild:headerless":"npm run docker:down:headerless && npm run docker:build:headerless && npm run docker:up:headerless"},"_npmUser":{"name":"psspss1122","email":"psspss1122@gmail.com"},"repository":{"url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git","type":"git"},"_npmVersion":"11.8.0","description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","directories":{"doc":"docs","test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["biome check --write"]},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.3.6","pino":"^10.1.0","axios":"^1.13.6","xml-js":"^1.6.11","js-yaml":"^4.1.1","pino-pretty":"^13.1.3","fast-xml-parser":"^5.4.2","@mcp-abap-adt/logger":"^0.1.4","@mcp-abap-adt/connection":"^1.5.0","@mcp-abap-adt/interfaces":"^3.1.0","@mcp-abap-adt/adt-clients":"^3.10.2","@mcp-abap-adt/auth-broker":"^1.0.5","@mcp-abap-adt/auth-stores":"^1.0.4","@modelcontextprotocol/sdk":"^1.27.1","@mcp-abap-adt/auth-providers":"^1.0.5","@mcp-abap-adt/header-validator":"^0.1.8"},"typesVersions":{"*":{"utils":["dist/lib/utils.d.ts"],"server":["dist/server/index.d.ts"],"handlers":["dist/lib/handlers/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","cors":"^2.8.6","jest":"^30.2.0","open":"^11.0.0","pino":"^10.3.0","yaml":"^2.8.1","husky":"^9.1.7","dotenv":"^17.3.1","express":"^5.1.0","ts-jest":"^29.2.0","commander":"^14.0.3","jest-util":"^30.2.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.3.5","lint-staged":"^16.4.0","pino-pretty":"^13.1.3","serve-handler":"^6.1.7","@biomejs/biome":"^2.4.6","@types/js-yaml":"^4.0.9","express-rate-limit":"^8.3.0","@modelcontextprotocol/inspector":"^0.21.1"},"optionalDependencies":{"node-rfc":"^3.3.1"},"_npmOperationalInternal":{"tmp":"tmp/abap-mcp-adt-powerup_4.7.0_1776422663745_0.7956309959529","host":"s3://npm-registry-packages-npm-production"}},"4.7.1":{"name":"@babamba2/abap-mcp-adt-powerup","version":"4.7.1","keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"license":"MIT","_id":"@babamba2/abap-mcp-adt-powerup@4.7.1","maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"},{"name":"s2hoon326","email":"s2hoon326@gmail.com"}],"homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"bin":{"mcp-abap-adt":"bin/mcp-abap-adt.js","mcp-abap-adt-v2":"bin/mcp-abap-adt-v2.js"},"dist":{"shasum":"c186c512a46530fe73552f25904ab8dfbd154ea7","tarball":"https://registry.npmjs.org/@babamba2/abap-mcp-adt-powerup/-/abap-mcp-adt-powerup-4.7.1.tgz","fileCount":1714,"integrity":"sha512-h3h9zb0rBgqXCar57ruub3X+b31+YreFIjiCq8JTl72o6i0PQaRfm8G2do3vQrydhm2A04YfadoO8gRweHda0g==","signatures":[{"sig":"MEUCIQDvYNK8FsU41yJXDp4kgrBQRnrJncloF4Lzx+VGCPigKwIgc8CHP6t9zbql7bNlplzPYrTRJJ2fK2gpWQhx60PNYjw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7966164},"jest":{"roots":["<rootDir>/src"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.test.ts"],"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"maxWorkers":1,"globalSetup":"<rootDir>/src/__tests__/integration/globalSetup.ts","testTimeout":600000,"testEnvironment":"node","moduleNameMapper":{"^(\\.{1,2}/.*)\\.js$":"$1"},"collectCoverageFrom":["src/**/*.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/index.ts"],"moduleFileExtensions":["ts","js","json"],"testPathIgnorePatterns":["__tests__/admin/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./utils":{"types":"./dist/lib/utils.d.ts","import":"./dist/lib/utils.js","require":"./dist/lib/utils.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.js"},"./handlers":{"types":"./dist/lib/handlers/index.d.ts","import":"./dist/lib/handlers/index.js","require":"./dist/lib/handlers/index.js"}},"gitHead":"ad02a0d44f1e9896dc7446dbd72ade3de2b4f850","mcpName":"io.github.babamba2/abap-mcp-adt-powerup","private":false,"scripts":{"dev":"npm run build && npx @modelcontextprotocol/inspector node ./dist/server/launcher.js --transport=stdio","auth":"npx sap-abap-auth auth","lint":"npx biome check --write src","test":"jest --passWithNoTests","build":"npx biome check --write --diagnostic-level=error src && npx tsc -p tsconfig.json","clean":"make clean","start":"node ./bin/mcp-abap-adt.js","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","dev:sse":"npm run build && node ./tools/dev-sse-v2.js","package":"npm pack","prepare":"husky","dev:http":"npm run build && node ./tools/dev-http-v2.js","test:low":"jest --testPathPatterns='integration.*Low' --runInBand --passWithNoTests --forceExit","docker:up":"cd docker && docker-compose up -d","start:sse":"node ./bin/mcp-abap-adt.js --transport=sse","test:high":"jest --testPathPatterns='integration.*High' --runInBand --passWithNoTests --forceExit","test:init":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"","build:fast":"npx tsc -p tsconfig.json","docs:tools":"node ./tools/generate-tools-docs.js","kill-ports":"lsof -ti:3000,3001,4000,4001,5000,6274,6277 | xargs -r kill -9 2>/dev/null || true","lint:check":"npx biome check src","start:http":"node ./bin/mcp-abap-adt.js --transport=http","test:check":"npx tsc --noEmit -p tsconfig.test.json","check-todos":"node tools/check-todos.js","docker:down":"cd docker && docker-compose down","docker:logs":"cd docker && docker-compose logs -f","docker:pack":"npm pack && mkdir -p docker/packages && mv *.tgz docker/packages/","test:reinit":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"","docker:build":"cd docker && docker-compose build","shared:check":"jest --testPathPatterns='admin/shared-deps/check' --testPathIgnorePatterns='[]' --passWithNoTests","shared:setup":"jest --testPathPatterns='admin/shared-deps/setup' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","package:build":"npm run build && npm pack","docker:rebuild":"npm run docker:down && npm run docker:build && npm run docker:up","prepublishOnly":"npm run build","smoke:mcp:crud":"node ./tools/mcp-crud-smoke.js","shared:teardown":"jest --testPathPatterns='admin/shared-deps/teardown' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","smoke:mcp:matrix":"node ./tools/mcp-crud-matrix.js","test:integration":"jest --testPathPatterns=integration --runInBand --passWithNoTests --forceExit","docker:up:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml up -d","docker:down:package":"cd docker && docker-compose -f docker-compose.package.yml down","docker:logs:package":"cd docker && docker-compose -f docker-compose.package.yml logs -f","docker:build:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml build","docker:up:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml up -d","docker:down:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml down","docker:logs:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml logs -f","docker:rebuild:package":"npm run docker:down:package && npm run docker:build:package && npm run docker:up:package","docker:build:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml build","docker:rebuild:headerless":"npm run docker:down:headerless && npm run docker:build:headerless && npm run docker:up:headerless"},"_npmUser":{"name":"psspss1122","email":"psspss1122@gmail.com"},"repository":{"url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git","type":"git"},"_npmVersion":"11.8.0","description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","directories":{"doc":"docs","test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["biome check --write"]},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.3.6","pino":"^10.1.0","axios":"^1.13.6","xml-js":"^1.6.11","js-yaml":"^4.1.1","pino-pretty":"^13.1.3","fast-xml-parser":"^5.4.2","@modelcontextprotocol/sdk":"^1.27.1","@babamba2/mcp-abap-adt-logger":"^0.1.4","@babamba2/mcp-abap-connection":"^1.5.3","@babamba2/mcp-abap-adt-clients":"^3.13.1","@babamba2/mcp-abap-adt-interfaces":"^5.0.0","@babamba2/mcp-abap-adt-auth-broker":"^1.0.5","@babamba2/mcp-abap-adt-auth-stores":"^1.0.4","@babamba2/mcp-abap-adt-auth-providers":"^1.0.5","@babamba2/mcp-abap-adt-header-validator":"^0.1.8"},"typesVersions":{"*":{"utils":["dist/lib/utils.d.ts"],"server":["dist/server/index.d.ts"],"handlers":["dist/lib/handlers/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","cors":"^2.8.6","jest":"^30.2.0","open":"^11.0.0","pino":"^10.3.0","yaml":"^2.8.1","husky":"^9.1.7","dotenv":"^17.3.1","express":"^5.1.0","ts-jest":"^29.2.0","commander":"^14.0.3","jest-util":"^30.2.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.3.5","lint-staged":"^16.4.0","pino-pretty":"^13.1.3","serve-handler":"^6.1.7","@biomejs/biome":"^2.4.6","@types/js-yaml":"^4.0.9","express-rate-limit":"^8.3.0","@modelcontextprotocol/inspector":"^0.21.1"},"optionalDependencies":{"node-rfc":"^3.3.1"},"_npmOperationalInternal":{"tmp":"tmp/abap-mcp-adt-powerup_4.7.1_1776524697675_0.24632770809215265","host":"s3://npm-registry-packages-npm-production"}},"4.8.0":{"name":"@babamba2/abap-mcp-adt-powerup","version":"4.8.0","keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"license":"MIT","_id":"@babamba2/abap-mcp-adt-powerup@4.8.0","maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"},{"name":"s2hoon326","email":"s2hoon326@gmail.com"}],"homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"bin":{"mcp-abap-adt":"bin/mcp-abap-adt.js","mcp-abap-adt-v2":"bin/mcp-abap-adt-v2.js"},"dist":{"shasum":"3beda137293d2ecdb5593b041f2af1d17d36c643","tarball":"https://registry.npmjs.org/@babamba2/abap-mcp-adt-powerup/-/abap-mcp-adt-powerup-4.8.0.tgz","fileCount":1730,"integrity":"sha512-jG+WFGM+cqIW78HplksW/SrmlyVPRHAaVKJ7gBgJgLmwx9KgRLSAGdSVtEWkoL2rlpoftv0X6ilElUmt8PqOBg==","signatures":[{"sig":"MEUCIHlTcyM6t7BmrNUQYlJL8AWBIY4bp0r6UiHXPxy9soTDAiEAzlZnZWild3h1F4/rYgqMpHxgNGDFvxXe9Ft6BOTgh/Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8006766},"jest":{"roots":["<rootDir>/src"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.test.ts"],"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"maxWorkers":1,"globalSetup":"<rootDir>/src/__tests__/integration/globalSetup.ts","testTimeout":600000,"testEnvironment":"node","moduleNameMapper":{"^(\\.{1,2}/.*)\\.js$":"$1"},"collectCoverageFrom":["src/**/*.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/index.ts"],"moduleFileExtensions":["ts","js","json"],"testPathIgnorePatterns":["__tests__/admin/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./utils":{"types":"./dist/lib/utils.d.ts","import":"./dist/lib/utils.js","require":"./dist/lib/utils.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.js"},"./handlers":{"types":"./dist/lib/handlers/index.d.ts","import":"./dist/lib/handlers/index.js","require":"./dist/lib/handlers/index.js"}},"gitHead":"8540274704ba7af0121a39eb5755d0a9daa26da3","mcpName":"io.github.babamba2/abap-mcp-adt-powerup","private":false,"scripts":{"dev":"npm run build && npx @modelcontextprotocol/inspector node ./dist/server/launcher.js --transport=stdio","auth":"npx sap-abap-auth auth","lint":"npx biome check --write src","test":"jest --passWithNoTests","build":"npx biome check --write --diagnostic-level=error src && npx tsc -p tsconfig.json","clean":"make clean","start":"node ./bin/mcp-abap-adt.js","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","dev:sse":"npm run build && node ./tools/dev-sse-v2.js","package":"npm pack","prepare":"husky","dev:http":"npm run build && node ./tools/dev-http-v2.js","test:low":"jest --testPathPatterns='integration.*Low' --runInBand --passWithNoTests --forceExit","docker:up":"cd docker && docker-compose up -d","start:sse":"node ./bin/mcp-abap-adt.js --transport=sse","test:high":"jest --testPathPatterns='integration.*High' --runInBand --passWithNoTests --forceExit","test:init":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"","build:fast":"npx tsc -p tsconfig.json","docs:tools":"node ./tools/generate-tools-docs.js","kill-ports":"lsof -ti:3000,3001,4000,4001,5000,6274,6277 | xargs -r kill -9 2>/dev/null || true","lint:check":"npx biome check src","start:http":"node ./bin/mcp-abap-adt.js --transport=http","test:check":"npx tsc --noEmit -p tsconfig.test.json","check-todos":"node tools/check-todos.js","docker:down":"cd docker && docker-compose down","docker:logs":"cd docker && docker-compose logs -f","docker:pack":"npm pack && mkdir -p docker/packages && mv *.tgz docker/packages/","test:reinit":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"","docker:build":"cd docker && docker-compose build","shared:check":"jest --testPathPatterns='admin/shared-deps/check' --testPathIgnorePatterns='[]' --passWithNoTests","shared:setup":"jest --testPathPatterns='admin/shared-deps/setup' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","package:build":"npm run build && npm pack","docker:rebuild":"npm run docker:down && npm run docker:build && npm run docker:up","prepublishOnly":"npm run build","smoke:mcp:crud":"node ./tools/mcp-crud-smoke.js","shared:teardown":"jest --testPathPatterns='admin/shared-deps/teardown' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","smoke:mcp:matrix":"node ./tools/mcp-crud-matrix.js","test:integration":"jest --testPathPatterns=integration --runInBand --passWithNoTests --forceExit","docker:up:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml up -d","docker:down:package":"cd docker && docker-compose -f docker-compose.package.yml down","docker:logs:package":"cd docker && docker-compose -f docker-compose.package.yml logs -f","docker:build:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml build","docker:up:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml up -d","docker:down:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml down","docker:logs:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml logs -f","docker:rebuild:package":"npm run docker:down:package && npm run docker:build:package && npm run docker:up:package","docker:build:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml build","docker:rebuild:headerless":"npm run docker:down:headerless && npm run docker:build:headerless && npm run docker:up:headerless"},"_npmUser":{"name":"psspss1122","email":"psspss1122@gmail.com"},"repository":{"url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git","type":"git"},"_npmVersion":"11.8.0","description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","directories":{"doc":"docs","test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["biome check --write"]},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.3.6","pino":"^10.1.0","axios":"^1.13.6","xml-js":"^1.6.11","js-yaml":"^4.1.1","pino-pretty":"^13.1.3","fast-xml-parser":"^5.4.2","@modelcontextprotocol/sdk":"^1.27.1","@babamba2/mcp-abap-adt-logger":"^0.1.4","@babamba2/mcp-abap-connection":"^1.5.3","@babamba2/mcp-abap-adt-clients":"^3.13.1","@babamba2/mcp-abap-adt-interfaces":"^5.0.0","@babamba2/mcp-abap-adt-auth-broker":"^1.0.5","@babamba2/mcp-abap-adt-auth-stores":"^1.0.4","@babamba2/mcp-abap-adt-auth-providers":"^1.0.5","@babamba2/mcp-abap-adt-header-validator":"^0.1.8"},"typesVersions":{"*":{"utils":["dist/lib/utils.d.ts"],"server":["dist/server/index.d.ts"],"handlers":["dist/lib/handlers/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","cors":"^2.8.6","jest":"^30.2.0","open":"^11.0.0","pino":"^10.3.0","yaml":"^2.8.1","husky":"^9.1.7","dotenv":"^17.3.1","express":"^5.1.0","ts-jest":"^29.2.0","commander":"^14.0.3","jest-util":"^30.2.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.3.5","lint-staged":"^16.4.0","pino-pretty":"^13.1.3","serve-handler":"^6.1.7","@biomejs/biome":"^2.4.6","@types/js-yaml":"^4.0.9","express-rate-limit":"^8.3.0","@modelcontextprotocol/inspector":"^0.21.1"},"optionalDependencies":{"node-rfc":"^3.3.1","@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/abap-mcp-adt-powerup_4.8.0_1776736657965_0.5868812315194845","host":"s3://npm-registry-packages-npm-production"}},"4.8.1":{"name":"@babamba2/abap-mcp-adt-powerup","version":"4.8.1","keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"license":"MIT","_id":"@babamba2/abap-mcp-adt-powerup@4.8.1","maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"},{"name":"s2hoon326","email":"s2hoon326@gmail.com"}],"homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"bin":{"mcp-abap-adt":"bin/mcp-abap-adt.js","mcp-abap-adt-v2":"bin/mcp-abap-adt-v2.js"},"dist":{"shasum":"c7cfdc4f040007fe306ee36570752b86f1a5cf86","tarball":"https://registry.npmjs.org/@babamba2/abap-mcp-adt-powerup/-/abap-mcp-adt-powerup-4.8.1.tgz","fileCount":1730,"integrity":"sha512-1hpWfU37/tRvSLOL0FTOJZ9qpB+mQXqh74G+QeWnTVrKPZodJtwHspJgwlGZ2oaDQUcAvKspoSZ8QYL5F61yvA==","signatures":[{"sig":"MEYCIQCFLhJUs83tQRXP4Zxp5zfjEeKb6M21nonLt7p0TD78TgIhAMsKlkeRoEJXktdk5qwC6/NCdg2eKzHlQsTXFvMIrT6t","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8060830},"jest":{"roots":["<rootDir>/src"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.test.ts"],"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"maxWorkers":1,"globalSetup":"<rootDir>/src/__tests__/integration/globalSetup.ts","testTimeout":600000,"testEnvironment":"node","moduleNameMapper":{"^(\\.{1,2}/.*)\\.js$":"$1"},"collectCoverageFrom":["src/**/*.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/index.ts"],"moduleFileExtensions":["ts","js","json"],"testPathIgnorePatterns":["__tests__/admin/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./utils":{"types":"./dist/lib/utils.d.ts","import":"./dist/lib/utils.js","require":"./dist/lib/utils.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.js"},"./handlers":{"types":"./dist/lib/handlers/index.d.ts","import":"./dist/lib/handlers/index.js","require":"./dist/lib/handlers/index.js"}},"gitHead":"b41d4df546e2cccfa3f6693b656e16868b6facb6","mcpName":"io.github.babamba2/abap-mcp-adt-powerup","private":false,"scripts":{"dev":"npm run build && npx @modelcontextprotocol/inspector node ./dist/server/launcher.js --transport=stdio","auth":"npx sap-abap-auth auth","lint":"npx biome check --write src","test":"jest --passWithNoTests","build":"npx biome check --write --diagnostic-level=error src && npx tsc -p tsconfig.json","clean":"make clean","start":"node ./bin/mcp-abap-adt.js","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","dev:sse":"npm run build && node ./tools/dev-sse-v2.js","package":"npm pack","prepare":"husky","dev:http":"npm run build && node ./tools/dev-http-v2.js","test:low":"jest --testPathPatterns='integration.*Low' --runInBand --passWithNoTests --forceExit","docker:up":"cd docker && docker-compose up -d","start:sse":"node ./bin/mcp-abap-adt.js --transport=sse","test:high":"jest --testPathPatterns='integration.*High' --runInBand --passWithNoTests --forceExit","test:init":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"","build:fast":"npx tsc -p tsconfig.json","docs:tools":"node ./tools/generate-tools-docs.js","kill-ports":"lsof -ti:3000,3001,4000,4001,5000,6274,6277 | xargs -r kill -9 2>/dev/null || true","lint:check":"npx biome check src","start:http":"node ./bin/mcp-abap-adt.js --transport=http","test:check":"npx tsc --noEmit -p tsconfig.test.json","check-todos":"node tools/check-todos.js","docker:down":"cd docker && docker-compose down","docker:logs":"cd docker && docker-compose logs -f","docker:pack":"npm pack && mkdir -p docker/packages && mv *.tgz docker/packages/","test:reinit":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"","docker:build":"cd docker && docker-compose build","shared:check":"jest --testPathPatterns='admin/shared-deps/check' --testPathIgnorePatterns='[]' --passWithNoTests","shared:setup":"jest --testPathPatterns='admin/shared-deps/setup' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","package:build":"npm run build && npm pack","docker:rebuild":"npm run docker:down && npm run docker:build && npm run docker:up","prepublishOnly":"npm run build","smoke:mcp:crud":"node ./tools/mcp-crud-smoke.js","shared:teardown":"jest --testPathPatterns='admin/shared-deps/teardown' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","smoke:mcp:matrix":"node ./tools/mcp-crud-matrix.js","test:integration":"jest --testPathPatterns=integration --runInBand --passWithNoTests --forceExit","docker:up:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml up -d","docker:down:package":"cd docker && docker-compose -f docker-compose.package.yml down","docker:logs:package":"cd docker && docker-compose -f docker-compose.package.yml logs -f","docker:build:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml build","docker:up:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml up -d","docker:down:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml down","docker:logs:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml logs -f","docker:rebuild:package":"npm run docker:down:package && npm run docker:build:package && npm run docker:up:package","docker:build:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml build","docker:rebuild:headerless":"npm run docker:down:headerless && npm run docker:build:headerless && npm run docker:up:headerless"},"_npmUser":{"name":"psspss1122","email":"psspss1122@gmail.com"},"repository":{"url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git","type":"git"},"_npmVersion":"11.8.0","description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","directories":{"doc":"docs","test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["biome check --write"]},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.3.6","pino":"^10.1.0","axios":"^1.13.6","xml-js":"^1.6.11","js-yaml":"^4.1.1","pino-pretty":"^13.1.3","fast-xml-parser":"^5.4.2","@modelcontextprotocol/sdk":"^1.27.1","@babamba2/mcp-abap-adt-logger":"^0.1.4","@babamba2/mcp-abap-connection":"^1.5.3","@babamba2/mcp-abap-adt-clients":"^3.13.1","@babamba2/mcp-abap-adt-interfaces":"^5.0.0","@babamba2/mcp-abap-adt-auth-broker":"^1.0.5","@babamba2/mcp-abap-adt-auth-stores":"^1.0.4","@babamba2/mcp-abap-adt-auth-providers":"^1.0.5","@babamba2/mcp-abap-adt-header-validator":"^0.1.8"},"typesVersions":{"*":{"utils":["dist/lib/utils.d.ts"],"server":["dist/server/index.d.ts"],"handlers":["dist/lib/handlers/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","cors":"^2.8.6","jest":"^30.2.0","open":"^11.0.0","pino":"^10.3.0","yaml":"^2.8.1","husky":"^9.1.7","dotenv":"^17.3.1","express":"^5.1.0","ts-jest":"^29.2.0","commander":"^14.0.3","jest-util":"^30.2.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.3.5","lint-staged":"^16.4.0","pino-pretty":"^13.1.3","serve-handler":"^6.1.7","@biomejs/biome":"^2.4.6","@types/js-yaml":"^4.0.9","express-rate-limit":"^8.3.0","@modelcontextprotocol/inspector":"^0.21.1"},"optionalDependencies":{"node-rfc":"^3.3.1","@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/abap-mcp-adt-powerup_4.8.1_1776840857523_0.8566512407305498","host":"s3://npm-registry-packages-npm-production"}},"4.8.2":{"name":"@babamba2/abap-mcp-adt-powerup","version":"4.8.2","keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"license":"MIT","_id":"@babamba2/abap-mcp-adt-powerup@4.8.2","maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"},{"name":"s2hoon326","email":"s2hoon326@gmail.com"}],"homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"bin":{"mcp-abap-adt":"bin/mcp-abap-adt.js","mcp-abap-adt-v2":"bin/mcp-abap-adt-v2.js"},"dist":{"shasum":"9e394982c97bec02665e0cc829e9b123375f7959","tarball":"https://registry.npmjs.org/@babamba2/abap-mcp-adt-powerup/-/abap-mcp-adt-powerup-4.8.2.tgz","fileCount":1730,"integrity":"sha512-95GqGK1ezqR6qGl7icBQEdbPM8+vpNnjw7xnhxuSral34hY48pu9foicD+9Jrph8bBRocatohq9lN8MCH9iZ8Q==","signatures":[{"sig":"MEUCIQCdgvKTvDuuGCRng29/PVgnIqxBNsEDAM5gWQd2+2WSmgIgLglk51Zjr7EvRWlmEEUoGuN9TL5NEBEzkHtkaE7w1Ug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8070790},"jest":{"roots":["<rootDir>/src"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.test.ts"],"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"maxWorkers":1,"globalSetup":"<rootDir>/src/__tests__/integration/globalSetup.ts","testTimeout":600000,"testEnvironment":"node","moduleNameMapper":{"^(\\.{1,2}/.*)\\.js$":"$1"},"collectCoverageFrom":["src/**/*.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/index.ts"],"moduleFileExtensions":["ts","js","json"],"testPathIgnorePatterns":["__tests__/admin/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./utils":{"types":"./dist/lib/utils.d.ts","import":"./dist/lib/utils.js","require":"./dist/lib/utils.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.js"},"./handlers":{"types":"./dist/lib/handlers/index.d.ts","import":"./dist/lib/handlers/index.js","require":"./dist/lib/handlers/index.js"}},"gitHead":"b8063143c08687d688027ca73dff1e4aba74fbac","mcpName":"io.github.babamba2/abap-mcp-adt-powerup","private":false,"scripts":{"dev":"npm run build && npx @modelcontextprotocol/inspector node ./dist/server/launcher.js --transport=stdio","auth":"npx sap-abap-auth auth","lint":"npx biome check --write src","test":"jest --passWithNoTests","build":"npx biome check --write --diagnostic-level=error src && npx tsc -p tsconfig.json","clean":"make clean","start":"node ./bin/mcp-abap-adt.js","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","dev:sse":"npm run build && node ./tools/dev-sse-v2.js","package":"npm pack","prepare":"husky","dev:http":"npm run build && node ./tools/dev-http-v2.js","test:low":"jest --testPathPatterns='integration.*Low' --runInBand --passWithNoTests --forceExit","docker:up":"cd docker && docker-compose up -d","start:sse":"node ./bin/mcp-abap-adt.js --transport=sse","test:high":"jest --testPathPatterns='integration.*High' --runInBand --passWithNoTests --forceExit","test:init":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"","build:fast":"npx tsc -p tsconfig.json","docs:tools":"node ./tools/generate-tools-docs.js","kill-ports":"lsof -ti:3000,3001,4000,4001,5000,6274,6277 | xargs -r kill -9 2>/dev/null || true","lint:check":"npx biome check src","start:http":"node ./bin/mcp-abap-adt.js --transport=http","test:check":"npx tsc --noEmit -p tsconfig.test.json","check-todos":"node tools/check-todos.js","docker:down":"cd docker && docker-compose down","docker:logs":"cd docker && docker-compose logs -f","docker:pack":"npm pack && mkdir -p docker/packages && mv *.tgz docker/packages/","test:reinit":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"","docker:build":"cd docker && docker-compose build","shared:check":"jest --testPathPatterns='admin/shared-deps/check' --testPathIgnorePatterns='[]' --passWithNoTests","shared:setup":"jest --testPathPatterns='admin/shared-deps/setup' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","package:build":"npm run build && npm pack","docker:rebuild":"npm run docker:down && npm run docker:build && npm run docker:up","prepublishOnly":"npm run build","smoke:mcp:crud":"node ./tools/mcp-crud-smoke.js","shared:teardown":"jest --testPathPatterns='admin/shared-deps/teardown' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","smoke:mcp:matrix":"node ./tools/mcp-crud-matrix.js","test:integration":"jest --testPathPatterns=integration --runInBand --passWithNoTests --forceExit","docker:up:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml up -d","docker:down:package":"cd docker && docker-compose -f docker-compose.package.yml down","docker:logs:package":"cd docker && docker-compose -f docker-compose.package.yml logs -f","docker:build:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml build","docker:up:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml up -d","docker:down:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml down","docker:logs:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml logs -f","docker:rebuild:package":"npm run docker:down:package && npm run docker:build:package && npm run docker:up:package","docker:build:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml build","docker:rebuild:headerless":"npm run docker:down:headerless && npm run docker:build:headerless && npm run docker:up:headerless"},"_npmUser":{"name":"psspss1122","email":"psspss1122@gmail.com"},"repository":{"url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git","type":"git"},"_npmVersion":"11.8.0","description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","directories":{"doc":"docs","test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["biome check --write"]},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.3.6","pino":"^10.1.0","axios":"^1.13.6","xml-js":"^1.6.11","js-yaml":"^4.1.1","pino-pretty":"^13.1.3","fast-xml-parser":"^5.4.2","@modelcontextprotocol/sdk":"^1.27.1","@babamba2/mcp-abap-adt-logger":"^0.1.4","@babamba2/mcp-abap-connection":"^1.5.3","@babamba2/mcp-abap-adt-clients":"^3.13.1","@babamba2/mcp-abap-adt-interfaces":"^5.0.0","@babamba2/mcp-abap-adt-auth-broker":"^1.0.5","@babamba2/mcp-abap-adt-auth-stores":"^1.0.4","@babamba2/mcp-abap-adt-auth-providers":"^1.0.5","@babamba2/mcp-abap-adt-header-validator":"^0.1.8"},"typesVersions":{"*":{"utils":["dist/lib/utils.d.ts"],"server":["dist/server/index.d.ts"],"handlers":["dist/lib/handlers/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","cors":"^2.8.6","jest":"^30.2.0","open":"^11.0.0","pino":"^10.3.0","yaml":"^2.8.1","husky":"^9.1.7","dotenv":"^17.3.1","express":"^5.1.0","ts-jest":"^29.2.0","commander":"^14.0.3","jest-util":"^30.2.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.3.5","lint-staged":"^16.4.0","pino-pretty":"^13.1.3","serve-handler":"^6.1.7","@biomejs/biome":"^2.4.6","@types/js-yaml":"^4.0.9","express-rate-limit":"^8.3.0","@modelcontextprotocol/inspector":"^0.21.1"},"optionalDependencies":{"node-rfc":"^3.3.1","@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/abap-mcp-adt-powerup_4.8.2_1776925093487_0.7021842463600032","host":"s3://npm-registry-packages-npm-production"}},"4.8.3":{"name":"@babamba2/abap-mcp-adt-powerup","version":"4.8.3","keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"license":"MIT","_id":"@babamba2/abap-mcp-adt-powerup@4.8.3","maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"},{"name":"s2hoon326","email":"s2hoon326@gmail.com"}],"homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"bin":{"mcp-abap-adt":"bin/mcp-abap-adt.js","mcp-abap-adt-v2":"bin/mcp-abap-adt-v2.js"},"dist":{"shasum":"202736e3250f6519c54b2b44f3e4cb33f9f54a10","tarball":"https://registry.npmjs.org/@babamba2/abap-mcp-adt-powerup/-/abap-mcp-adt-powerup-4.8.3.tgz","fileCount":1730,"integrity":"sha512-ljI0o50ZuPDN8yGlw910vM0He/elm9LDZjjTz4K34p5QZSdO5tbDwQw/ZsXZYD7Ouli/a7vrc/RJeF3g958IAg==","signatures":[{"sig":"MEUCIHpoFNloW84zFOC3qjxylzh2ztXhOWKtTl+8PE880vhvAiEA+sx2SlXYSWTz5120wm8/QqEHfGIHqf00RD5WTQqo1yY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8073758},"jest":{"roots":["<rootDir>/src"],"preset":"ts-jest","testMatch":["**/__tests__/**/*.test.ts"],"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"maxWorkers":1,"globalSetup":"<rootDir>/src/__tests__/integration/globalSetup.ts","testTimeout":600000,"testEnvironment":"node","moduleNameMapper":{"^(\\.{1,2}/.*)\\.js$":"$1"},"collectCoverageFrom":["src/**/*.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/index.ts"],"moduleFileExtensions":["ts","js","json"],"testPathIgnorePatterns":["__tests__/admin/"]},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","engines":{"npm":">=9.0.0","node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./utils":{"types":"./dist/lib/utils.d.ts","import":"./dist/lib/utils.js","require":"./dist/lib/utils.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.js"},"./handlers":{"types":"./dist/lib/handlers/index.d.ts","import":"./dist/lib/handlers/index.js","require":"./dist/lib/handlers/index.js"}},"gitHead":"244928a19b252e53e4105c550df0b891b1685de5","mcpName":"io.github.babamba2/abap-mcp-adt-powerup","private":false,"scripts":{"dev":"npm run build && npx @modelcontextprotocol/inspector node ./dist/server/launcher.js --transport=stdio","auth":"npx sap-abap-auth auth","lint":"npx biome check --write src","test":"jest --passWithNoTests","build":"npx biome check --write --diagnostic-level=error src && npx tsc -p tsconfig.json","clean":"make clean","start":"node ./bin/mcp-abap-adt.js","chrono":"./tools/version-stats.sh","format":"npx biome format --write src","dev:sse":"npm run build && node ./tools/dev-sse-v2.js","package":"npm pack","prepare":"husky","dev:http":"npm run build && node ./tools/dev-http-v2.js","test:low":"jest --testPathPatterns='integration.*Low' --runInBand --passWithNoTests --forceExit","docker:up":"cd docker && docker-compose up -d","start:sse":"node ./bin/mcp-abap-adt.js --transport=sse","test:high":"jest --testPathPatterns='integration.*High' --runInBand --passWithNoTests --forceExit","test:init":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"","build:fast":"npx tsc -p tsconfig.json","docs:tools":"node ./tools/generate-tools-docs.js","kill-ports":"lsof -ti:3000,3001,4000,4001,5000,6274,6277 | xargs -r kill -9 2>/dev/null || true","lint:check":"npx biome check src","start:http":"node ./bin/mcp-abap-adt.js --transport=http","test:check":"npx tsc --noEmit -p tsconfig.test.json","check-todos":"node tools/check-todos.js","docker:down":"cd docker && docker-compose down","docker:logs":"cd docker && docker-compose logs -f","docker:pack":"npm pack && mkdir -p docker/packages && mv *.tgz docker/packages/","test:reinit":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"","docker:build":"cd docker && docker-compose build","shared:check":"jest --testPathPatterns='admin/shared-deps/check' --testPathIgnorePatterns='[]' --passWithNoTests","shared:setup":"jest --testPathPatterns='admin/shared-deps/setup' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","package:build":"npm run build && npm pack","docker:rebuild":"npm run docker:down && npm run docker:build && npm run docker:up","prepublishOnly":"npm run build","smoke:mcp:crud":"node ./tools/mcp-crud-smoke.js","shared:teardown":"jest --testPathPatterns='admin/shared-deps/teardown' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","smoke:mcp:matrix":"node ./tools/mcp-crud-matrix.js","test:integration":"jest --testPathPatterns=integration --runInBand --passWithNoTests --forceExit","docker:up:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml up -d","docker:down:package":"cd docker && docker-compose -f docker-compose.package.yml down","docker:logs:package":"cd docker && docker-compose -f docker-compose.package.yml logs -f","docker:build:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml build","docker:up:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml up -d","docker:down:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml down","docker:logs:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml logs -f","docker:rebuild:package":"npm run docker:down:package && npm run docker:build:package && npm run docker:up:package","docker:build:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml build","docker:rebuild:headerless":"npm run docker:down:headerless && npm run docker:build:headerless && npm run docker:up:headerless"},"_npmUser":{"name":"psspss1122","email":"psspss1122@gmail.com"},"repository":{"url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git","type":"git"},"_npmVersion":"11.8.0","description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","directories":{"doc":"docs","test":"tests"},"lint-staged":{"src/**/*.{ts,js}":["biome check --write"]},"_nodeVersion":"24.13.1","dependencies":{"zod":"^4.3.6","pino":"^10.1.0","axios":"^1.13.6","xml-js":"^1.6.11","js-yaml":"^4.1.1","pino-pretty":"^13.1.3","fast-xml-parser":"^5.4.2","@modelcontextprotocol/sdk":"^1.27.1","@babamba2/mcp-abap-adt-logger":"^0.1.4","@babamba2/mcp-abap-connection":"^1.5.3","@babamba2/mcp-abap-adt-clients":"^3.13.1","@babamba2/mcp-abap-adt-interfaces":"^5.0.0","@babamba2/mcp-abap-adt-auth-broker":"^1.0.5","@babamba2/mcp-abap-adt-auth-stores":"^1.0.4","@babamba2/mcp-abap-adt-auth-providers":"^1.0.5","@babamba2/mcp-abap-adt-header-validator":"^0.1.8"},"typesVersions":{"*":{"utils":["dist/lib/utils.d.ts"],"server":["dist/server/index.d.ts"],"handlers":["dist/lib/handlers/index.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","cors":"^2.8.6","jest":"^30.2.0","open":"^11.0.0","pino":"^10.3.0","yaml":"^2.8.1","husky":"^9.1.7","dotenv":"^17.3.1","express":"^5.1.0","ts-jest":"^29.2.0","commander":"^14.0.3","jest-util":"^30.2.0","typescript":"^5.9.2","@types/jest":"^30.0.0","@types/node":"^25.3.5","lint-staged":"^16.4.0","pino-pretty":"^13.1.3","serve-handler":"^6.1.7","@biomejs/biome":"^2.4.6","@types/js-yaml":"^4.0.9","express-rate-limit":"^8.3.0","@modelcontextprotocol/inspector":"^0.21.1"},"optionalDependencies":{"node-rfc":"^3.3.1","@napi-rs/keyring":"^1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/abap-mcp-adt-powerup_4.8.3_1777012067245_0.40874336800482713","host":"s3://npm-registry-packages-npm-production"}},"4.8.4":{"name":"@babamba2/abap-mcp-adt-powerup","mcpName":"io.github.babamba2/abap-mcp-adt-powerup","version":"4.8.4","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./handlers":{"types":"./dist/lib/handlers/index.d.ts","import":"./dist/lib/handlers/index.js","require":"./dist/lib/handlers/index.js"},"./utils":{"types":"./dist/lib/utils.d.ts","import":"./dist/lib/utils.js","require":"./dist/lib/utils.js"},"./server":{"types":"./dist/server/index.d.ts","import":"./dist/server/index.js","require":"./dist/server/index.js"}},"typesVersions":{"*":{"handlers":["dist/lib/handlers/index.d.ts"],"utils":["dist/lib/utils.d.ts"],"server":["dist/server/index.d.ts"]}},"scripts":{"test:init":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';if(fs.existsSync(s)){console.log(s+' already exists, skipping (use test:reinit to overwrite)')}else{fs.copyFileSync(t,s);console.log('Created '+s+' — edit lines marked CHANGE')}\"","test:reinit":"node -e \"const fs=require('fs'),s='tests/test-config.yaml',t=s+'.template';fs.copyFileSync(t,s);console.log('Recreated '+s+' from template')\"","test":"jest --passWithNoTests","test:integration":"jest --testPathPatterns=integration --runInBand --passWithNoTests --forceExit","test:high":"jest --testPathPatterns='integration.*High' --runInBand --passWithNoTests --forceExit","test:low":"jest --testPathPatterns='integration.*Low' --runInBand --passWithNoTests --forceExit","test:check":"npx tsc --noEmit -p tsconfig.test.json","shared:setup":"jest --testPathPatterns='admin/shared-deps/setup' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","shared:teardown":"jest --testPathPatterns='admin/shared-deps/teardown' --testPathIgnorePatterns='[]' --runInBand --passWithNoTests","shared:check":"jest --testPathPatterns='admin/shared-deps/check' --testPathIgnorePatterns='[]' --passWithNoTests","lint":"npx biome check --write src","lint:check":"npx biome check src","format":"npx biome format --write src","build":"npx biome check --write --diagnostic-level=error src && npx tsc -p tsconfig.json","build:fast":"npx tsc -p tsconfig.json","check-todos":"node tools/check-todos.js","start":"node ./bin/mcp-abap-adt.js","start:http":"node ./bin/mcp-abap-adt.js --transport=http","start:sse":"node ./bin/mcp-abap-adt.js --transport=sse","dev":"npm run build && npx @modelcontextprotocol/inspector node ./dist/server/launcher.js --transport=stdio","dev:http":"npm run build && node ./tools/dev-http-v2.js","dev:sse":"npm run build && node ./tools/dev-sse-v2.js","kill-ports":"lsof -ti:3000,3001,4000,4001,5000,6274,6277 | xargs -r kill -9 2>/dev/null || true","auth":"npx sap-abap-auth auth","clean":"make clean","chrono":"./tools/version-stats.sh","smoke:mcp:crud":"node ./tools/mcp-crud-smoke.js","smoke:mcp:matrix":"node ./tools/mcp-crud-matrix.js","docs:tools":"node ./tools/generate-tools-docs.js","prepublishOnly":"npm run build","package":"npm pack","package:build":"npm run build && npm pack","docker:pack":"npm pack && mkdir -p docker/packages && mv *.tgz docker/packages/","docker:build":"cd docker && docker-compose build","docker:build:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml build","docker:build:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml build","docker:up":"cd docker && docker-compose up -d","docker:up:package":"npm run docker:pack && cd docker && docker-compose -f docker-compose.package.yml up -d","docker:up:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml up -d","docker:down":"cd docker && docker-compose down","docker:down:package":"cd docker && docker-compose -f docker-compose.package.yml down","docker:down:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml down","docker:logs":"cd docker && docker-compose logs -f","docker:logs:package":"cd docker && docker-compose -f docker-compose.package.yml logs -f","docker:logs:headerless":"cd docker && docker-compose -f docker-compose.headerless.yml logs -f","docker:rebuild":"npm run docker:down && npm run docker:build && npm run docker:up","docker:rebuild:package":"npm run docker:down:package && npm run docker:build:package && npm run docker:up:package","docker:rebuild:headerless":"npm run docker:down:headerless && npm run docker:build:headerless && npm run docker:up:headerless","prepare":"husky"},"keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","license":"MIT","repository":{"type":"git","url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git"},"devDependencies":{"@biomejs/biome":"^2.4.6","@modelcontextprotocol/inspector":"^0.21.1","@types/jest":"^30.0.0","@types/js-yaml":"^4.0.9","@types/node":"^25.3.5","commander":"^14.0.3","cors":"^2.8.6","dotenv":"^17.3.1","express":"^5.1.0","express-rate-limit":"^8.3.0","husky":"^9.1.7","jest":"^30.2.0","jest-util":"^30.2.0","lint-staged":"^16.4.0","open":"^11.0.0","pino":"^10.3.0","pino-pretty":"^13.1.3","serve-handler":"^6.1.7","ts-jest":"^29.2.0","tsx":"^4.21.0","typescript":"^5.9.2","yaml":"^2.8.1"},"dependencies":{"@babamba2/mcp-abap-adt-clients":"^3.13.1","@babamba2/mcp-abap-adt-auth-broker":"^1.0.5","@babamba2/mcp-abap-adt-auth-providers":"^1.0.5","@babamba2/mcp-abap-adt-auth-stores":"^1.0.4","@babamba2/mcp-abap-connection":"^1.5.3","@babamba2/mcp-abap-adt-header-validator":"^0.1.8","@babamba2/mcp-abap-adt-interfaces":"^5.0.0","@babamba2/mcp-abap-adt-logger":"^0.1.4","@modelcontextprotocol/sdk":"^1.27.1","axios":"^1.13.6","fast-xml-parser":"^5.4.2","js-yaml":"^4.1.1","pino":"^10.1.0","pino-pretty":"^13.1.3","xml-js":"^1.6.11","zod":"^4.3.6"},"optionalDependencies":{"node-rfc":"^3.3.1","@napi-rs/keyring":"^1.1.0"},"engines":{"node":">=20.0.0","npm":">=9.0.0"},"bin":{"mcp-abap-adt":"bin/mcp-abap-adt.js","mcp-abap-adt-v2":"bin/mcp-abap-adt-v2.js"},"jest":{"preset":"ts-jest","testEnvironment":"node","roots":["<rootDir>/src"],"testMatch":["**/__tests__/**/*.test.ts"],"transform":{"^.+\\.ts$":["ts-jest",{"tsconfig":"tsconfig.test.json"}]},"moduleFileExtensions":["ts","js","json"],"moduleNameMapper":{"^(\\.{1,2}/.*)\\.js$":"$1"},"collectCoverageFrom":["src/**/*.ts","!src/**/*.test.ts","!src/**/__tests__/**","!src/**/index.ts"],"testPathIgnorePatterns":["__tests__/admin/"],"maxWorkers":1,"testTimeout":600000,"globalSetup":"<rootDir>/src/__tests__/integration/globalSetup.ts"},"lint-staged":{"src/**/*.{ts,js}":["biome check --write"]},"private":false,"directories":{"doc":"docs","test":"tests"},"type":"commonjs","bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","gitHead":"9fc6da6bf1b056edd29179edbc812e69f80c5363","_id":"@babamba2/abap-mcp-adt-powerup@4.8.4","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-Zk2FwthoO4+SvvQsSbc9iuyTqkAz2oZqMUP7GgmQGE8B9SgXuhEqRll+eZCOErC47AYiuvUNyex81WvlgIJndg==","shasum":"f3739110297410ccbcde0a764a694cb653ce5b07","tarball":"https://registry.npmjs.org/@babamba2/abap-mcp-adt-powerup/-/abap-mcp-adt-powerup-4.8.4.tgz","fileCount":1734,"unpackedSize":8109673,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICJmGCwIObCpgjAMjOLeQILQdaodh8mnkRgBrXL+Rxo5AiEA5YiNSfYofNvXdAGj6gmTL7ckH4HxHIJBORIpIEui1eE="}]},"_npmUser":{"name":"psspss1122","email":"psspss1122@gmail.com"},"maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"},{"name":"s2hoon326","email":"s2hoon326@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/abap-mcp-adt-powerup_4.8.4_1777427324153_0.1536562578046854"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-14T07:02:04.683Z","modified":"2026-04-29T01:48:44.482Z","4.5.3":"2026-04-14T07:02:05.384Z","4.6.0":"2026-04-16T17:01:06.082Z","4.7.0":"2026-04-17T10:44:24.026Z","4.7.1":"2026-04-18T15:04:57.978Z","4.8.0":"2026-04-21T01:57:38.189Z","4.8.1":"2026-04-22T06:54:17.793Z","4.8.2":"2026-04-23T06:18:13.767Z","4.8.3":"2026-04-24T06:27:47.466Z","4.8.4":"2026-04-29T01:48:44.338Z"},"bugs":{"url":"https://github.com/babamba2/abap-mcp-adt-powerup/issues"},"author":{"name":"babamba2","email":"psspss1122@gmail.com"},"license":"MIT","homepage":"https://github.com/babamba2/abap-mcp-adt-powerup#readme","keywords":["abap","sap","adt","mcp","model-context-protocol","mcp-server","abap-cloud","sap-btp","xsuaa","jwt-auth","service-key","crud"],"repository":{"type":"git","url":"git+https://github.com/babamba2/abap-mcp-adt-powerup.git"},"description":"SAP ABAP ADT MCP server with full CRUD for on-prem and ABAP Cloud (BTP), plus JWT/XSUAA and service-key destination auth","maintainers":[{"name":"psspss1122","email":"psspss1122@gmail.com"},{"name":"s2hoon326","email":"s2hoon326@gmail.com"}],"readme":"# MCP ABAP ADT ( For sc4sap application )\n\n**🌐 Language / 언어 / 言語**: **English** · [한국어](README.ko.md) · [日本語](README.ja.md)\n\n[![npm version](https://img.shields.io/npm/v/@mcp-abap-adt/core)](https://www.npmjs.com/package/@mcp-abap-adt/core)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen)](https://nodejs.org/)\n[![MCP](https://img.shields.io/badge/MCP-Compatible-blue)](https://modelcontextprotocol.io/)\n[![Claude Code Plugin](https://img.shields.io/badge/Claude%20Code-Plugin-purple)](https://claude.com/claude-code)\n\n## Acknowledgments\n\nThis project was originally inspired by [mario-andreschak/mcp-abap-adt](https://github.com/mario-andreschak/mcp-abap-adt) and [fr0ster/mcp-abap-adt](https://github.com/fr0ster/mcp-abap-adt/tree/main/src). We started with the core concept and evolved it into an independent project with our own architecture and features. Huge thanks to the original authors and all [contributors](#contributors) whose work made this possible.\n\n---\n\n**Model Context Protocol (MCP) server for SAP ABAP development** — enables AI assistants and code editors to interact with SAP systems via ABAP Developer Toolkit (ADT) APIs.\n\nRead, create, update, and delete ABAP objects directly from Claude Code, Cline, Cursor, Windsurf, or any MCP-compatible client. Supports ABAP Cloud (BTP), On-Premise, and Legacy SAP systems.\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Supported SAP Environments](#supported-sap-environments)\n- [Quick Start](#quick-start)\n- [Installation](#installation)\n- [Claude Code Plugin](#claude-code-plugin)\n- [Configuration](#configuration)\n- [Authentication](#authentication)\n- [Available Tools](#available-tools)\n- [Transport Protocols](#transport-protocols)\n- [Client Configuration](#client-configuration)\n- [Handler Architecture](#handler-architecture)\n- [Docker Deployment](#docker-deployment)\n- [Development](#development)\n- [Testing](#testing)\n- [Troubleshooting](#troubleshooting)\n- [FAQ](#faq)\n- [Documentation](#documentation)\n- [Optional: Data Fetch Prevention](#optional-data-fetch-prevention)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Features\n\n- **287 MCP Tools** for comprehensive SAP ABAP development\n- **30+ ABAP object types** supported (Classes, Interfaces, CDS Views, Tables, RAP, and more)\n- **Multiple transport protocols**: stdio, HTTP (StreamableHTTP), SSE\n- **Flexible authentication**: JWT/XSUAA (OAuth2), Basic Auth, Service Key\n- **Multi-environment**: ABAP Cloud (BTP), On-Premise, Legacy (BASIS < 7.50)\n- **Runtime diagnostics**: Profiling, dump analysis, SQL queries\n- **Handler groups**: Read-Only, High-Level, Low-Level, Compact, System, Search\n- **Embeddable**: Use as a standalone server or embed handlers into existing MCP servers\n- **Auto-configurator**: `@mcp-abap-adt/configurator` for automated client setup\n- **Health endpoint**: `GET /mcp/health` for HTTP/SSE transports\n- **Optional data-fetch prevention**: opt-in server-side blocklist (`SC4SAP_POLICY=on`) that blocks row extraction from sensitive tables (PII, credentials, payroll, banking) regardless of caller — see [Optional: Data Fetch Prevention](#optional-data-fetch-prevention)\n\n---\n\n## Supported SAP Environments\n\n| Environment | Auth Methods | Notes |\n|------------|-------------|-------|\n| **ABAP Cloud (BTP)** | JWT/XSUAA, Service Key | Full RAP/CDS support |\n| **On-Premise** (S/4HANA) | Basic Auth, JWT | Full feature surface — Programs, Classes, CDS, Screens, GUI Statuses |\n| **Legacy** (ECC / BASIS < 7.50) | Basic Auth | Classic ABAP only — see matrix below |\n\nLegacy detection (BASIS < 7.50 / pre-S/4HANA) applies when any of:\n- `SAP_SYSTEM_TYPE=legacy` (explicit opt-in, back-compat)\n- `SAP_VERSION=ECC`\n- `ABAP_RELEASE` numeric < 750 (e.g., `740`, `731`)\n\nUnder legacy mode the client routes through `AdtClientLegacy`, which restricts endpoint probes to those actually present on BASIS 7.4x. Modern DDIC CRUD and RAP/Service endpoints deliberately refuse with a clear \"not supported on this SAP system\" message instead of a cryptic 404.\n\n### Legacy (ECC / BASIS < 7.50) Compatibility Matrix\n\nVerified on ECC 7.40 (SAP_VERSION=ECC, ABAP_RELEASE=740, SAP_SYSTEM_TYPE=onprem).\n\n| Category | Tool | ECC 7.40 | Reason |\n|---|---|---|---|\n| Session / Discovery | `GetSession`, `SearchObject`, `GetObjectInfo`, `GetObjectStructure` | ✅ | Basic ADT present on all releases |\n| Inactive objects | `GetInactiveObjects` | ✅ | — |\n| Package read | `GetPackageContents`, `GetPackageTree` | ✅ | ADT repository informationsystem |\n| Package metadata | `GetPackage` | ❌ | `/sap/bc/adt/packages` not present on BASIS < 7.50 — use SE80/SE21 in SAP GUI |\n| DDIC read | `GetTable`, `GetStructure`, `GetDataElement`, `GetDomain` | ❌ | `/sap/bc/adt/ddic/{tables,structures,dataelements,domains}` added in BASIS 7.50 |\n| DDIC write | `CreateTable`, `CreateStructure`, `CreateDataElement`, `CreateDomain` (+ Update/Delete) | ❌ | Same endpoint gap — create from SAP GUI (SE11) instead |\n| CDS view (DDLS) | `GetView`, `CreateView`, `UpdateView` | ✅ | DDL endpoint (`/sap/bc/adt/ddic/ddl/sources/`) present and activates cleanly from BASIS 7.40 SP05+ |\n| Classic view (VIEW/DV) | `GetView` for classic DDIC views | ❌ | Classic view endpoint falls in the same DDIC gap as Tables/Structures — use SE11 in SAP GUI |\n| ABAP source read | `GetProgram`, `GetClass`, `GetInterface`, `GetInclude`, `GetFunctionGroup`, `GetFunctionModule` | ✅ | `/sap/bc/adt/{programs,oo/classes,oo/interfaces,programs/includes,functions/groups}` all present |\n| ABAP source write | `Create*` / `Update*` for Program, Class, Interface, Include, FunctionGroup, FunctionModule | ✅ | `UpdateFunctionModule` defaults `transport_request` to `\"local\"` when omitted (consistent with FunctionGroup/Class) |\n| AST / Semantic analysis | `GetAbapSemanticAnalysis`, `GetAbapAST` | ✅ | Client-side parse, no SAP call |\n| WhereUsed | `GetWhereUsed` | ⚠️ | Classic object types only — `TABL` reports \"Unsupported object type for where-used\"; class/program targets work |\n| Enhancements | `GetEnhancements`, `GetEnhancementSpot`, `GetEnhancementImpl` | ❌ | `/sap/bc/adt/enhancements` discovery endpoints return 404 on BASIS < 7.50 — use SE18/SE19 or CMOD/SMOD in SAP GUI |\n| Transport | `ListTransports`, `GetTransport`, `CreateTransport` | ✅ | CTS endpoints present |\n| Runtime | `RuntimeListDumps`, `RuntimeAnalyzeDump`, `RuntimeGetDumpById` | ✅ | `/sap/bc/adt/runtime/dumps` present |\n| Screen / GUI Status | `GetScreen`, `GetGuiStatus`, `GetTextElement` (+ Create/Update) | ℹ️ | RFC-dispatched via `SAP_RFC_BACKEND` (`odata` default / `soap` / `native` / `gateway` / `zrfc`); the chosen backend's prerequisites (backend classes, SICF node, SDK) must be in place |\n| RAP / Behavior | `*BehaviorDefinition`, `*BehaviorImplementation` | ❌ | S/4HANA only — RAP does not exist on ECC |\n| Service binding | `*ServiceDefinition`, `*ServiceBinding` | ❌ | S/4HANA / ABAP Cloud only |\n| Metadata extensions | `*MetadataExtension` | ❌ | S/4HANA / ABAP Cloud only |\n| Table contents | `GetTableContents`, `GetSqlQuery` | ℹ️ | Works server-side but gated by the per-profile data-extraction policy — see [Optional: Data Fetch Prevention](#optional-data-fetch-prevention) |\n\nLegend: ✅ works fully · ⚠️ works with caveats · ❌ refuses with a clear \"not supported on this SAP system\" error (not a bug — SAP platform limit) · ℹ️ works, but depends on prior setup / policy.\n\n---\n\n## Quick Start\n\n### 1. Install\n\n```bash\nnpm install -g @mcp-abap-adt/core\n```\n\n### 2. Configure environment\n\n```bash\n# Create .env file in your working directory\ncat > .env << 'EOF'\nSAP_URL=https://your-sap-system.com\nSAP_CLIENT=100\nSAP_AUTH_TYPE=basic\nSAP_USERNAME=your_username\nSAP_PASSWORD=your_password\nEOF\n```\n\n### 3. Run\n\n```bash\n# stdio (for MCP clients like Claude Code, Cline, Cursor)\nmcp-abap-adt\n\n# HTTP server\nmcp-abap-adt --transport=http --port 3000\n\n# SSE server\nmcp-abap-adt --transport=sse --port 3000\n```\n\n---\n\n## Installation\n\n### From npm (Recommended)\n\n```bash\nnpm install -g @mcp-abap-adt/core\n```\n\n### From source\n\n```bash\ngit clone --recurse-submodules https://github.com/babamba2/abap-mcp-adt-powerup.git\ncd abap-mcp-adt-powerup\nnpm install\nnpm run build\nnpm start\n```\n\n### Platform-specific guides\n\n- [Windows Installation](docs/installation/platforms/INSTALL_WINDOWS.md)\n- [macOS Installation](docs/installation/platforms/INSTALL_MACOS.md)\n- [Linux Installation](docs/installation/platforms/INSTALL_LINUX.md)\n\n---\n\n## Claude Code Plugin\n\nThis repository is also distributed as a **Claude Code plugin** via the marketplace.\n\n### Install via marketplace\n\n```bash\n# Add this marketplace (once)\n/plugin marketplace add babamba2/abap-mcp-adt-powerup\n\n# Install the plugin\n/plugin install abap-mcp-adt-powerup\n```\n\nAfter install, configure the SAP connection through environment variables (see [Configuration](#configuration)) or use the auto-configurator:\n\n```bash\nnpx @mcp-abap-adt/configurator\n```\n\n### Manual plugin directory\n\nIf you're editing this repo locally, it already resolves as a plugin from:\n\n```\n~/.claude/plugins/marketplaces/abap-mcp-adt-powerup\n```\n\nReload Claude Code (`/plugin` → *Reload*) to pick up changes.\n\n---\n\n## Configuration\n\n### Environment Variables (.env)\n\n```env\n# SAP connection\nSAP_URL=https://your-abap-system.com\nSAP_CLIENT=100\nSAP_LANGUAGE=en\n\n# System type: cloud (default), onprem, or legacy\nSAP_SYSTEM_TYPE=cloud\n\n# TLS: set to 0 for self-signed certificates (dev only)\nTLS_REJECT_UNAUTHORIZED=0\n\n# Authentication\nSAP_AUTH_TYPE=xsuaa          # 'xsuaa' for JWT, 'basic' for username/password\nSAP_JWT_TOKEN=your_jwt_token # For JWT auth\n# SAP_USERNAME=your_username # For basic auth\n# SAP_PASSWORD=your_password # For basic auth\n\n# On-premise context (required for create/update on on-prem)\n# SAP_MASTER_SYSTEM=DEV\n# SAP_RESPONSIBLE=your_username\n\n# Timeouts (milliseconds)\nSAP_TIMEOUT_DEFAULT=45000    # General operations (default: 45s)\nSAP_TIMEOUT_CSRF=15000       # CSRF token requests (default: 15s)\nSAP_TIMEOUT_LONG=60000       # Long-running operations (default: 60s)\n```\n\n### CLI Options\n\n```bash\nmcp-abap-adt [options]\n\nOptions:\n  --transport=<type>    Transport protocol: stdio (default), http, sse\n  --port <number>       Server port for http/sse (default: 3000)\n  --host <address>      Bind address for http/sse (default: localhost)\n  --env <destination>   Destination name for multi-system setups\n  --env-path <path>     Path to .env file\n```\n\n### YAML Configuration\n\nAlternative to CLI arguments. See [YAML Config Guide](docs/configuration/YAML_CONFIG.md).\n\n---\n\n## Authentication\n\n### Basic Auth (On-Premise)\n\n```env\nSAP_AUTH_TYPE=basic\nSAP_USERNAME=developer\nSAP_PASSWORD=secret123\n```\n\n### JWT / XSUAA (Cloud / On-Premise)\n\n```env\nSAP_AUTH_TYPE=xsuaa\nSAP_JWT_TOKEN=eyJhbGciOiJSUzI1NiIs...\n```\n\n### Service Key (BTP)\n\nPlace your service key JSON file and configure via the configurator (`@mcp-abap-adt/configurator`).\n\n### Header-based Auth (HTTP/SSE transports)\n\nFor multi-tenant or proxy setups, pass SAP connection details via HTTP headers (`x-sap-*`). See [Authentication Guide](docs/user-guide/AUTHENTICATION.md).\n\n---\n\n## Available Tools\n\nThe server provides **287 tools** organized into handler groups:\n\n### Tool Categories\n\n| Category | Count | Description |\n|----------|-------|-------------|\n| **Read-Only** | 52 | Query and retrieve objects without modification |\n| **High-Level** | 113 | User-friendly CRUD operations |\n| **Low-Level** | 122 | Direct ADT API operations with granular control |\n| **Compact** | 22 | Streamlined access to common operations |\n| **System** | - | Runtime analysis, profiling, dumps, SQL queries |\n| **Search** | - | Object discovery, where-used analysis |\n\n### Supported ABAP Object Types\n\n| Object Type | Read | Create | Update | Delete |\n|------------|:----:|:------:|:------:|:------:|\n| Classes (CLAS) | O | O | O | O |\n| Interfaces (INTF) | O | O | O | O |\n| Programs (PROG) | O | O | O | O |\n| Includes | O | O | O | O |\n| Tables (TABL) | O | O | O | O |\n| Structures | O | O | O | O |\n| CDS Views (DDLS) | O | O | O | O |\n| Domains | O | O | O | O |\n| Data Elements (DTEL) | O | O | O | O |\n| Function Groups (FUGR) | O | O | O | O |\n| Function Modules (FUNC) | O | O | O | O |\n| Packages (DEVC) | O | O | O | O |\n| Transports | O | O | - | - |\n| Service Definitions (SRVD) | O | O | O | O |\n| Service Bindings (SRVB) | O | O | O | O |\n| Behavior Definitions (BDEF) | O | O | O | O |\n| Behavior Implementations (BIMP) | O | O | O | O |\n| Metadata Extensions (DDLX) | O | O | O | O |\n| Screens (DYNP) | O | O | O | O |\n| GUI Statuses | O | O | O | O |\n| Text Elements | O | O | O | O |\n| Unit Tests | O | O | O | O |\n| CDS Unit Tests | O | O | O | O |\n| Enhancements | O | - | - | - |\n\n### Runtime & System Tools\n\n- **Runtime Profiling** - Profile class and program execution with trace analysis\n- **Dump Analysis** - List and analyze ABAP runtime dumps\n- **SQL Queries** - Execute SQL queries via ADT (`GetSqlQuery`)\n- **Table Contents** - Read table data (`GetTableContents`)\n- **Object Search** - Find objects by name, type, package (`SearchObject`)\n- **Where-Used** - Cross-reference analysis (`GetWhereUsed`)\n- **Type Info** - Retrieve type information (`GetTypeInfo`)\n- **Inactive Objects** - List objects pending activation (`GetInactiveObjects`)\n- **AST / Semantic Analysis** - Parse ABAP syntax tree and semantic info\n\nFor the complete tool reference, see [AVAILABLE_TOOLS.md](docs/user-guide/AVAILABLE_TOOLS.md).\n\n---\n\n## Transport Protocols\n\n### stdio (Default)\n\nStandard input/output transport for MCP clients. Used by Claude Code, Cline, Cursor, and other MCP-compatible tools.\n\n```bash\nmcp-abap-adt\n# or explicitly:\nmcp-abap-adt --transport=stdio\n```\n\n### HTTP (StreamableHTTP)\n\nREST API with JSON streaming responses. Ideal for web clients and multi-user deployments.\n\n```bash\nmcp-abap-adt --transport=http --port 3000 --host 0.0.0.0\n```\n\nHealth check: `GET /mcp/health`\n\n### SSE (Server-Sent Events)\n\nLong-polling transport with session management.\n\n```bash\nmcp-abap-adt --transport=sse --port 3000\n```\n\n---\n\n## Client Configuration\n\n### Claude Code\n\n```json\n{\n  \"mcpServers\": {\n    \"mcp-abap-adt\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@mcp-abap-adt/core\"],\n      \"env\": {\n        \"SAP_URL\": \"https://your-sap-system.com\",\n        \"SAP_CLIENT\": \"100\",\n        \"SAP_AUTH_TYPE\": \"basic\",\n        \"SAP_USERNAME\": \"developer\",\n        \"SAP_PASSWORD\": \"secret\"\n      }\n    }\n  }\n}\n```\n\n### Cline / Cursor / VS Code\n\n```json\n{\n  \"mcpServers\": {\n    \"mcp-abap-adt\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@mcp-abap-adt/core\"],\n      \"env\": {\n        \"SAP_URL\": \"https://your-sap-system.com\",\n        \"SAP_CLIENT\": \"100\",\n        \"SAP_AUTH_TYPE\": \"xsuaa\",\n        \"SAP_JWT_TOKEN\": \"eyJhbGciOiJSUzI1NiIs...\"\n      }\n    }\n  }\n}\n```\n\n### Auto-Configuration\n\nUse the configurator for automated setup:\n\n```bash\nnpx @mcp-abap-adt/configurator\n```\n\nSee [Client Configuration Guide](docs/user-guide/CLIENT_CONFIGURATION.md) for more examples.\n\n---\n\n## Handler Architecture\n\nThe server organizes tools into composable handler groups:\n\n```\nhandlers/\n├── behavior_definition/    # BDEF CRUD\n├── behavior_implementation/# BIMP CRUD\n├── class/                  # CLAS CRUD\n├── compact/                # Shorthand tools\n├── common/                 # Shared handlers\n├── data_element/           # DTEL CRUD\n├── ddlx/                   # Metadata Extension CRUD\n├── domain/                 # Domain CRUD\n├── enhancement/            # Enhancement read-only\n├── function/               # Function-related\n├── function_group/         # FUGR CRUD\n├── function_module/        # FUNC CRUD\n├── gui_status/             # GUI Status CRUD\n├── include/                # Include CRUD\n├── interface/              # INTF CRUD\n├── metadata_extension/     # DDLX CRUD\n├── package/                # DEVC CRUD\n├── program/                # PROG CRUD\n├── screen/                 # Screen/Dynpro CRUD\n├── search/                 # Object search & where-used\n├── service_binding/        # SRVB CRUD\n├── service_definition/     # SRVD CRUD\n├── structure/              # Structure CRUD\n├── system/                 # Runtime diagnostics\n├── table/                  # TABL CRUD\n├── text_element/           # Text Element CRUD\n├── transport/              # Transport management\n├── unit_test/              # Unit test CRUD & run\n└── view/                   # CDS View CRUD\n```\n\nEach handler category contains subdirectories:\n- `high/` - High-level, user-friendly operations\n- `low/` - Low-level, direct ADT API operations\n- `readonly/` - Safe read-only queries\n\n### Embedding Handlers\n\nFor integrating into existing MCP servers (e.g., CAP/CDS applications):\n\n```typescript\nimport { HandlerExporter } from '@mcp-abap-adt/core/handlers';\n\nconst exporter = new HandlerExporter({\n  includeReadOnly: true,\n  includeHighLevel: true,\n  includeLowLevel: false,\n  includeSystem: true,\n  includeSearch: true,\n});\n\nexporter.registerOnServer(mcpServer, () => connection);\n```\n\n---\n\n## Docker Deployment\n\n### Using Docker Compose\n\n```bash\n# Build and run\nnpm run docker:build\nnpm run docker:up\n\n# Or with pre-built package\nnpm run docker:build:package\nnpm run docker:up:package\n```\n\n### Manual Docker Build\n\n```bash\ncd docker\ndocker-compose build\ndocker-compose up -d\n```\n\nSee [Docker Deployment Guide](docs/deployment/DOCKER.md) for full details.\n\n---\n\n## Development\n\n### Prerequisites\n\n- **Node.js** >= 20.0.0\n- **npm** >= 9.0.0\n- **TypeScript** 5.9+\n\n### Setup\n\n```bash\ngit clone --recurse-submodules https://github.com/babamba2/abap-mcp-adt-powerup.git\ncd abap-mcp-adt-powerup\nnpm install\nnpm run build\n```\n\n### Scripts\n\n| Command | Description |\n|---------|-------------|\n| `npm run build` | Lint + compile TypeScript |\n| `npm run build:fast` | Compile only (skip lint) |\n| `npm run dev` | Build + launch MCP Inspector (stdio) |\n| `npm run dev:http` | Build + launch HTTP dev server |\n| `npm run dev:sse` | Build + launch SSE dev server |\n| `npm run lint` | Run Biome linter with auto-fix |\n| `npm run format` | Format code with Biome |\n| `npm start` | Run MCP server (stdio) |\n| `npm run start:http` | Run MCP server (HTTP) |\n| `npm run start:sse` | Run MCP server (SSE) |\n| `npm run docs:tools` | Regenerate tool documentation |\n\n### Project Structure\n\n```\nmcp-abap-adt/\n├── bin/                    # CLI entry points\n│   ├── mcp-abap-adt.js    # Main CLI\n│   └── mcp-abap-adt-v2.js # V2 server variant\n├── src/\n│   ├── handlers/           # 30 handler categories (287 tools)\n│   ├── lib/\n│   │   ├── auth/           # Auth broker, JWT/XSUAA\n│   │   ├── config/         # Configuration management\n│   │   ├── handlers/       # Handler registry & utilities\n│   │   ├── stores/         # Session/token storage\n│   │   ├── types/          # TypeScript interfaces\n│   │   └── utils.ts        # Core utilities\n│   ├── server/\n│   │   ├── BaseMcpServer.ts         # MCP server extension\n│   │   ├── StdioServer.ts           # stdio transport\n│   │   ├── SseServer.ts             # SSE transport\n│   │   ├── StreamableHttpServer.ts  # HTTP transport\n│   │   └── launcher.ts              # Server startup\n│   └── utils/              # Utility modules\n├── docker/                 # Docker deployment\n├── docs/                   # Documentation\n├── tests/                  # Test configuration\n├── tools/                  # Dev tools & scripts\n└── package.json\n```\n\n### Key Dependencies\n\n| Package | Purpose |\n|---------|---------|\n| `@mcp-abap-adt/adt-clients` | ADT REST API clients |\n| `@mcp-abap-adt/connection` | SAP connection management |\n| `@mcp-abap-adt/auth-broker` | Authentication token management |\n| `@mcp-abap-adt/auth-providers` | Auth strategy implementations |\n| `@modelcontextprotocol/sdk` | MCP protocol SDK |\n| `fast-xml-parser` | XML parsing for ADT responses |\n\n---\n\n## Testing\n\n### Integration Tests\n\nIntegration tests run against a real SAP system in two modes:\n\n- **Soft mode** (default): Calls handlers directly, no MCP subprocess\n- **Hard mode**: Spawns full MCP server via stdio, calls tools through MCP protocol\n\n### Setup\n\n```bash\n# Create test config from template\nnpm run test:init\n\n# Edit only the lines marked \"# <- CHANGE\"\n# - environment.env (session .env file)\n# - environment.system_type (onprem/cloud/legacy)\n# - environment.default_package\n# - environment.default_transport\n```\n\n### Running Tests\n\n```bash\n# Unit tests\nnpm test\n\n# All integration tests (soft mode)\nnpm run test:integration\n\n# High-level handler tests only\nnpm run test:high\n\n# Low-level handler tests only\nnpm run test:low\n\n# Type check test files\nnpm run test:check\n```\n\nSee [Testing Guide](docs/development/tests/TESTING_GUIDE.md) for full details.\n\n---\n\n## Troubleshooting\n\n### `self-signed certificate in certificate chain`\n\nYour SAP system uses a self-signed TLS certificate. For development only:\n\n```env\nTLS_REJECT_UNAUTHORIZED=0\n```\n\nFor production, install the SAP CA certificate into the Node.js trust store.\n\n### `401 Unauthorized` / `403 Forbidden`\n\n- **Basic Auth**: confirm `SAP_USERNAME` / `SAP_PASSWORD` and that the user has ADT authorization (`S_DEVELOP`, `S_RFC`, `S_TCODE`).\n- **JWT/XSUAA**: the token may be expired — refresh via the configurator or service key.\n- **Client mismatch**: verify `SAP_CLIENT` matches the logon client.\n\n### `CSRF token validation failed` on Update/Create\n\nThe session lost its CSRF token. Most handlers refresh automatically; if it persists:\n\n- Increase `SAP_TIMEOUT_CSRF` (default 15s).\n- Confirm cookies are not being stripped by a proxy.\n\n### `transport required` on On-Premise\n\nCreate or update on on-prem systems requires a transport request. Set:\n\n```env\nSAP_MASTER_SYSTEM=DEV\nSAP_RESPONSIBLE=your_username\n```\n\n…and pass `transport=<TRKORR>` to the handler, or use a local package (`$TMP`).\n\n### Claude Code doesn't see the MCP server\n\n1. Restart Claude Code after editing config.\n2. Check logs: `~/.claude/logs/` (stderr from the MCP process).\n3. Run `mcp-abap-adt` directly in a shell — it must start without errors before Claude can connect.\n\n### `Programs not available` on Cloud\n\nPrograms (`PROG`) are on-premise / legacy only. Use Classes or CDS on ABAP Cloud.\n\n---\n\n## FAQ\n\n**Q. Does this work with S/4HANA Cloud, public edition?**\nYes — via ABAP Cloud (BTP) with JWT/XSUAA or a service key. RAP/CDS objects are fully supported; classic objects (Programs, Screens, GUI Statuses) are not available on cloud.\n\n**Q. Can I use this without Claude Code?**\nYes. Any MCP-compatible client works: Cline, Cursor, Windsurf, VS Code MCP extension, or a custom client built with `@modelcontextprotocol/sdk`.\n\n**Q. How do I limit which tools are exposed?**\nUse the `HandlerExporter` to select handler groups when embedding, or set environment flags to disable groups. See [Handler Management](docs/user-guide/HANDLERS_MANAGEMENT.md).\n\n**Q. Is it safe to use against a productive SAP system?**\nThe server respects SAP authorization — whatever your user cannot do in SE80/ADT, it cannot do here either. Still, we recommend a dedicated development user and running against non-prod first.\n\n**Q. How do I run against multiple SAP systems?**\nUse `--env <destination>` with per-destination `.env` files, or the YAML config. For HTTP/SSE deployments, pass `x-sap-*` headers per request.\n\n**Q. Does it support RFC?**\nYes, for legacy systems where ADT HTTP APIs are unavailable. Set `connection_type: rfc` in the test config (or equivalent env) — requires the SAP NW RFC SDK installed locally.\n\n---\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Installation](docs/installation/INSTALLATION.md) | Platform-specific installation |\n| [Client Configuration](docs/user-guide/CLIENT_CONFIGURATION.md) | MCP client setup |\n| [Authentication](docs/user-guide/AUTHENTICATION.md) | Auth methods & destinations |\n| [Available Tools](docs/user-guide/AVAILABLE_TOOLS.md) | Complete tool reference (287 tools) |\n| [CLI Options](docs/user-guide/CLI_OPTIONS.md) | Command-line reference |\n| [YAML Config](docs/configuration/YAML_CONFIG.md) | YAML configuration guide |\n| [Architecture](docs/architecture/ARCHITECTURE.md) | System architecture overview |\n| [Stateful Sessions](docs/architecture/STATEFUL_SESSION_GUIDE.md) | Lock/update/unlock flow |\n| [Handler Architecture](docs/architecture/TOOLS_ARCHITECTURE.md) | Tool & handler structure |\n| [Docker Deployment](docs/deployment/DOCKER.md) | Container deployment |\n| [Testing Guide](docs/development/tests/TESTING_GUIDE.md) | Test setup & execution |\n| [Handler Management](docs/user-guide/HANDLERS_MANAGEMENT.md) | Enable/disable handler groups |\n\n---\n\n## Optional: Data Fetch Prevention\n\nRow-returning tools (`GetTableContents`, `GetSqlQuery`) can expose sensitive business data — PII, credentials, payroll, banking, transactional finance. This server ships with an **opt-in server-side blocklist** that stops such calls before they ever reach SAP, regardless of the caller (Claude, other LLMs, direct JSON-RPC, external scripts).\n\nThe feature is **disabled by default** — nothing is blocked unless you explicitly turn it on.\n\n### Enable\n\n```bash\nexport SC4SAP_POLICY=on                    # or: strict | standard | minimal | custom\nexport SC4SAP_POLICY_PROFILE=strict        # optional, default when SC4SAP_POLICY=on\nexport SC4SAP_BLOCKLIST_PATH=/path/to/table_exception.md   # optional extra list\nexport SC4SAP_ALLOW_TABLE=TAB1,TAB2        # session-scoped emergency exemption (logged)\n```\n\n### Profiles\n\n| Profile | Blocks |\n|---------|--------|\n| `strict` (default when `SC4SAP_POLICY=on`) | PII + credentials + HR + transactional finance + audit logs + workflow |\n| `standard` | PII + credentials + HR + transactional finance |\n| `minimal` | PII + credentials + HR + Tax (business tables allowed) |\n| `custom` | User-supplied list only (`blocklist-custom.txt`) |\n\n### Behavior\n\nWhen a blocked table is accessed, the server responds with `isError: true` and a categorized reason — **no SAP round-trip occurs**. Schema/DDIC metadata calls (`GetTable`, `GetStructure`, `GetView`, `GetDataElement`, `GetDomain`), existence checks (`SearchObject`), and aggregate-only `GetSqlQuery` remain allowed.\n\nBuilt-in blocklist covers 100+ tables / patterns across Banking (BNKA, KNBK, LFBK, REGUH), Customer/Vendor PII (KNA1, LFA1, BUT000, BUT0ID), Addresses (ADRC, ADR6, ADRP), Authentication (USR02, RFCDES, AGR_1251), HR/Payroll (`PA*` / `HRP*` / `PCL*`), Tax IDs, Protected Business Data (VBAK/BKPF/ACDOCA), Audit logs, and customer `Z*` PII patterns.\n\nThis feature is **designed for but not coupled to** the [sc4sap](https://github.com/babamba2/superclaude-for-sap) plugin — any MCP client can benefit from it.\n\n---\n\n## Contributing\n\nWe welcome contributions! Please see the [development documentation](docs/development/) for setup instructions.\n\n### Contributors\n\n- **Paek Seunghyun** ([@babamba2](https://github.com/babamba2)) - Enhanced features addition\n- **Oleksii Kyslytsia** ([@fr0ster](https://github.com/fr0ster)) - Main maintainer (539+ commits)\n- **mario-andreschak** ([@mario-andreschak](https://github.com/mario-andreschak)) - Original project maintainer\n- **Henry Mao** ([@calclavia](https://github.com/calclavia)) - Contributor\n- **Aleksandr Razinkin** ([@raaleksandr-epam](https://github.com/raaleksandr-epam)) - Contributor\n- **Frank Fiegel** ([@punkpeye](https://github.com/punkpeye)) - Contributor\n\n---\n\n## License\n\n[MIT](LICENSE) — Copyright (c) 2026 백승현 (Paek Seunghyun) & Oleksii Kyslytsia\n","readmeFilename":"README.md"}