{"_id":"@aspirio/sap-adt-mcp","_rev":"4-25549a64636c039219f503c296e9c7e1","name":"@aspirio/sap-adt-mcp","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.0":{"name":"@aspirio/sap-adt-mcp","version":"1.0.0","keywords":["mcp","sap","abap","adt","model-context-protocol"],"license":"MIT","_id":"@aspirio/sap-adt-mcp@1.0.0","maintainers":[{"name":"aspirio","email":"soultan_98@hotmail.com"}],"homepage":"https://github.com/aspirio187/abap-adt-mcp#readme","bugs":{"url":"https://github.com/aspirio187/abap-adt-mcp/issues"},"bin":{"sap-adt-mcp":"dist/index.js"},"dist":{"shasum":"b4f26b4b702a103033a20ff815cadee0718db28e","tarball":"https://registry.npmjs.org/@aspirio/sap-adt-mcp/-/sap-adt-mcp-1.0.0.tgz","fileCount":10,"integrity":"sha512-CdTLN6AtwN8F3YOjHdhd6/Jde1jFQEJs8TH8tM0UzROfNZpMkuAvMT3e87G7M6RAImW4rkW/2R3IRTjeQZ45JQ==","signatures":[{"sig":"MEYCIQC6C8dDNkjDALDET0smVbeOxiCX13vZxyJ2Qq6AA2vUfwIhAPckN8/5PvTXMX4RBBuknGCpK9ErJxVHUXR/251xh+py","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56997},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"0c2942e0f9ed1fd01de0da95bac3d58674526134","scripts":{"dev":"tsc && node dist/index.js","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"aspirio","email":"soultan_98@hotmail.com"},"repository":{"url":"git+https://github.com/aspirio187/abap-adt-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for SAP ADT (ABAP Development Tools)","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.0.0","fast-xml-parser":"^5.2.3","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.15.3"},"_npmOperationalInternal":{"tmp":"tmp/sap-adt-mcp_1.0.0_1775810569817_0.8248355490235633","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@aspirio/sap-adt-mcp","version":"1.1.3","keywords":["mcp","sap","abap","adt","model-context-protocol"],"_id":"@aspirio/sap-adt-mcp@1.1.3","maintainers":[{"name":"aspirio","email":"soultan_98@hotmail.com"}],"homepage":"https://github.com/aspirio187/app-adt-abap-interceptor#readme","bugs":{"url":"https://github.com/aspirio187/app-adt-abap-interceptor/issues"},"bin":{"sap-adt-mcp":"dist/index.js"},"dist":{"shasum":"1d5c63dedd4e62ba3cd6d37b9bdf4b5cff1172ef","tarball":"https://registry.npmjs.org/@aspirio/sap-adt-mcp/-/sap-adt-mcp-1.1.3.tgz","fileCount":14,"integrity":"sha512-d9IX98Un+xXLi1cSnddO3MvgPP7u6KFyKATn9gX5Il41zexaw/DuMkayjGAeoc7wkDqxZeDgPRKy7y4tL5+qxQ==","signatures":[{"sig":"MEUCIAKA5apRa0O4z0wypbXbm6JGVfEdCqtbB+pxkyKHGadkAiEA8l5AOMJ0R+daU4JfRb9gkzxQquj89tnYJIRf0ulF4HM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66574},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"f80ac100e48a2437f64374e07e42a184bb376193","scripts":{"dev":"tsc && node dist/index.js","test":"vitest run","build":"tsc","start":"node dist/index.js","semantic-release":"semantic-release"},"_npmUser":{"name":"aspirio","email":"soultan_98@hotmail.com"},"repository":{"url":"git+https://github.com/aspirio187/app-adt-abap-interceptor.git","type":"git"},"_npmVersion":"10.9.7","description":"MCP server for SAP ADT (ABAP Development Tools)","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.0.0","fast-xml-parser":"^5.2.3","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.4","typescript":"^5.8.3","@types/node":"^22.15.3","semantic-release":"^25.0.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@semantic-release/github":"^12.0.6","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/sap-adt-mcp_1.1.3_1775978231898_0.7911392720259118","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@aspirio/sap-adt-mcp","version":"1.2.0","keywords":["mcp","sap","abap","adt","model-context-protocol"],"_id":"@aspirio/sap-adt-mcp@1.2.0","maintainers":[{"name":"aspirio","email":"soultan_98@hotmail.com"}],"homepage":"https://github.com/aspirio187/app-adt-abap-interceptor#readme","bugs":{"url":"https://github.com/aspirio187/app-adt-abap-interceptor/issues"},"bin":{"sap-adt-mcp":"dist/index.js"},"dist":{"shasum":"1784a583a081426eb5197e4bef623d6f825dac2d","tarball":"https://registry.npmjs.org/@aspirio/sap-adt-mcp/-/sap-adt-mcp-1.2.0.tgz","fileCount":14,"integrity":"sha512-wtG7wQoIks7RCLJ3hI1PVc0HkLUZ1lGerj+sXkt2s8DgpclaqtwcDHouBF/e1nA4LAIHgpDFF0/S+l9uayVMbA==","signatures":[{"sig":"MEUCIG0/c0r4xxUOqOW+yYwqbTAI7IxhxaTanOkU5uaMTHYpAiEAt/p97apvVO/Y6vVDWuoo9XGtxnL26b4qbl6AwARp/HM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81178},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"5f28a1d36d8c9ac700cda390ec49c1c7e57689f6","scripts":{"dev":"tsc && node dist/index.js","test":"vitest run","build":"tsc","start":"node dist/index.js","test:local":"node test-local.mjs","semantic-release":"semantic-release"},"_npmUser":{"name":"aspirio","email":"soultan_98@hotmail.com"},"repository":{"url":"git+https://github.com/aspirio187/app-adt-abap-interceptor.git","type":"git"},"_npmVersion":"10.9.7","description":"MCP server for SAP ADT (ABAP Development Tools)","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^4.0.0","fast-xml-parser":"^5.2.3","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.4","typescript":"^5.8.3","@types/node":"^22.15.3","semantic-release":"^25.0.3","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^13.1.5","@semantic-release/github":"^12.0.6","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0"},"_npmOperationalInternal":{"tmp":"tmp/sap-adt-mcp_1.2.0_1775987441846_0.5306306030742429","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@aspirio/sap-adt-mcp","version":"1.2.1","description":"MCP server for SAP ADT (ABAP Development Tools)","type":"module","main":"dist/index.js","bin":{"sap-adt-mcp":"dist/index.js"},"keywords":["mcp","sap","abap","adt","model-context-protocol"],"repository":{"type":"git","url":"git+https://github.com/aspirio187/app-adt-abap-interceptor.git"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsc && node dist/index.js","test":"vitest run","test:local":"node test-local.mjs","semantic-release":"semantic-release"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","fast-xml-parser":"^5.2.3","zod":"^4.0.0"},"devDependencies":{"@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.6","@semantic-release/npm":"^13.1.5","@semantic-release/release-notes-generator":"^14.1.0","@types/node":"^22.15.3","semantic-release":"^25.0.3","typescript":"^5.8.3","vitest":"^4.1.4"},"_id":"@aspirio/sap-adt-mcp@1.2.1","gitHead":"80d000e5f54f69ae6501c98d806ce26ee8255aa1","types":"./dist/index.d.ts","bugs":{"url":"https://github.com/aspirio187/app-adt-abap-interceptor/issues"},"homepage":"https://github.com/aspirio187/app-adt-abap-interceptor#readme","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-g0juhTGyjcnRLrXzpCbgi9/oiRXuNRndGPxTvCo1O3y9Z/SIsPEfhZl/GV87cVbY6s82gADHtJoepBUdDvn6Iw==","shasum":"4a91702e76df69a766f7364dc4c07ea2526a8cf1","tarball":"https://registry.npmjs.org/@aspirio/sap-adt-mcp/-/sap-adt-mcp-1.2.1.tgz","fileCount":14,"unpackedSize":83500,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCB3rnU604IbgYb9s0j9OypMwJJVfUh6ecoXtQKM+tAvQIgOhhTubZpfMJdm6XEy7mo9/qyNFsnmB0lhBMSXnsUrbc="}]},"_npmUser":{"name":"aspirio","email":"soultan_98@hotmail.com"},"directories":{},"maintainers":[{"name":"aspirio","email":"soultan_98@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sap-adt-mcp_1.2.1_1775996920242_0.7992316803681869"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-10T08:42:49.737Z","modified":"2026-04-12T12:28:40.481Z","1.0.0":"2026-04-10T08:42:49.998Z","1.1.3":"2026-04-12T07:17:12.042Z","1.2.0":"2026-04-12T09:50:42.001Z","1.2.1":"2026-04-12T12:28:40.372Z"},"bugs":{"url":"https://github.com/aspirio187/app-adt-abap-interceptor/issues"},"homepage":"https://github.com/aspirio187/app-adt-abap-interceptor#readme","keywords":["mcp","sap","abap","adt","model-context-protocol"],"repository":{"type":"git","url":"git+https://github.com/aspirio187/app-adt-abap-interceptor.git"},"description":"MCP server for SAP ADT (ABAP Development Tools)","maintainers":[{"name":"aspirio","email":"soultan_98@hotmail.com"}],"readme":"# abap-adt-mcp\n\n> **⚠️ Known Issue:** Generating the lock file with npm 11 (bundled with Node 24) produces a `package-lock.json` that is incompatible with npm 10 (Node 22). This causes `npm ci` to fail in CI/CD pipelines with \"Missing: @emnapi/core from lock file\". Always regenerate the lock file using the same npm version used in CI, or upgrade CI to Node 24+.\n\nA standalone Node.js MCP (Model Context Protocol) server for SAP ADT (ABAP Development Tools). Interact directly with your SAP system — search objects, read/write source code, run tests, and more.\n\nThis is a TypeScript port of the [Eclipse-based SAP ADT MCP Server plugin](sap-adt-mcp-server/).\n\n## Features\n\n**19 tools** covering the full ABAP development lifecycle:\n\n| Tool                      | Description                                                   |\n| ------------------------- | ------------------------------------------------------------- |\n| `sap_search_object`       | Search ABAP objects by name pattern with wildcards            |\n| `sap_get_source`          | Read source code (active, inactive, or working area)          |\n| `sap_set_source`          | Write source code with automatic lock/unlock/activate         |\n| `sap_object_structure`    | Get object metadata, includes, and function modules           |\n| `sap_usage_references`    | Where-used analysis across the system                         |\n| `sap_syntax_check`        | Syntax check with errors/warnings and line numbers            |\n| `sap_activate`            | Activate objects after editing                                |\n| `sap_lock` / `sap_unlock` | Manual object locking/unlocking (lock includes transport info)|\n| `sap_create_object`       | Create programs, includes, classes, interfaces, function groups, data elements, domains, tables, structures |\n| `sap_inactive_objects`    | List all inactive objects for the current user                |\n| `sap_run_unit_test`       | Run ABAP Unit tests with pass/fail per method                 |\n| `sap_atc_run`             | Run ATC code quality checks                                   |\n| `sap_sql_query`           | Execute SQL SELECT queries with data preview                  |\n| `sap_abap_docu`           | Look up ABAP documentation (keywords, classes, etc.)          |\n| `sap_list_package_objects` | List all objects in a package with optional type filtering    |\n| `sap_transport_check`     | Validate transport requirements before creation/modification  |\n| `sap_get_main_programs`   | Get main programs that use a given include                    |\n| `sap_object_properties`   | Get object properties (package, owner, version, dates, etc.)  |\n\n### Flexible Input Resolution\n\nMost tools accept two input styles:\n\n- **By type + name** (primary): `objectType: \"CLAS\", objectName: \"ZCL_MY_CLASS\"`\n- **By direct ADT URL** (advanced): `objectSourceUrl` or `objectUrl` or `url`\n\nWhen both are provided, `objectType + objectName` takes priority. This matches the Java reference implementation's `AbstractMcpTool` resolution pattern.\n\n### Notable Output Formats\n\n- **`sap_usage_references`** returns `{ statusCode: number, response: string }` — the `response` field contains the raw ADT XML body. This matches the Java `UsageReferencesTool` output contract.\n- **`sap_abap_docu`** uses ADT type codes `CLAS`, `FUNC`, and `TYPE` for class, function module, and type documentation lookups respectively.\n\n## Requirements\n\n- Node.js 18+\n- SAP system with ADT services enabled (HTTP/HTTPS)\n- SAP user with appropriate ADT authorizations\n\n## Installation\n\n```bash\nnpm install\nnpm run build\n```\n\n## Configuration\n\nSet these environment variables:\n\n| Variable           | Required | Description                                      |\n| ------------------ | -------- | ------------------------------------------------ |\n| `SAP_URL`          | ✅       | SAP system URL (e.g. `https://myserver:44300`)   |\n| `SAP_USER`         | ✅       | SAP username                                     |\n| `SAP_PASSWORD`     | ✅       | SAP password                                     |\n| `SAP_CLIENT`       |          | SAP client number (default: `100`)               |\n| `SAP_LANGUAGE`     |          | Logon language (default: `EN`)                   |\n| `SAP_INSECURE_SSL` |          | Set to `true` to skip SSL certificate validation |\n\n## Usage\n\n### With an MCP client\n\nAdd to your MCP client configuration (e.g. `~/.claude.json` or equivalent):\n\n```json\n{\n  \"mcpServers\": {\n    \"abap-adt-mcp\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/abap-adt-mcp/dist/index.js\"],\n      \"env\": {\n        \"SAP_URL\": \"https://your-sap-server:44300\",\n        \"SAP_USER\": \"YOUR_USER\",\n        \"SAP_PASSWORD\": \"YOUR_PASSWORD\",\n        \"SAP_CLIENT\": \"100\"\n      }\n    }\n  }\n}\n```\n\n### Standalone\n\n```bash\nSAP_URL=https://myserver:44300 SAP_USER=admin SAP_PASSWORD=secret node dist/index.js\n```\n\nThe server communicates via stdio using the MCP protocol.\n\n## Local Testing\n\nThe server uses stdio (JSON-RPC over stdin/stdout), so you can't just run it and see output.\nHere's how to test it locally:\n\n### Quick smoke test\n\nCreate a test script (e.g. `test-local.mjs`):\n\n```js\nimport { spawn } from \"child_process\";\n\nconst proc = spawn(\"node\", [\"dist/index.js\"], {\n  env: {\n    ...process.env,\n    SAP_URL: \"https://your-sap-server:8443\",\n    SAP_USER: \"YOUR_USER\",\n    SAP_PASSWORD: \"YOUR_PASSWORD\",\n    SAP_CLIENT: \"800\",\n    SAP_INSECURE_SSL: \"true\", // set to \"true\" for self-signed certs\n  },\n  stdio: [\"pipe\", \"pipe\", \"pipe\"],\n});\n\nproc.stderr.on(\"data\", (d) => console.error(\"[server]\", d.toString().trim()));\nproc.stdout.on(\"data\", (d) => console.log(\"[response]\", d.toString().trim()));\n\nfunction send(msg) {\n  proc.stdin.write(JSON.stringify(msg) + \"\\n\");\n}\n\n// 1. Initialize handshake\nsend({\n  jsonrpc: \"2.0\",\n  id: 1,\n  method: \"initialize\",\n  params: {\n    protocolVersion: \"2024-11-05\",\n    capabilities: {},\n    clientInfo: { name: \"test\", version: \"1.0\" },\n  },\n});\n\nsetTimeout(() => {\n  send({ jsonrpc: \"2.0\", method: \"notifications/initialized\" });\n\n  // 2. List all available tools\n  send({ jsonrpc: \"2.0\", id: 2, method: \"tools/list\", params: {} });\n}, 500);\n\nsetTimeout(() => {\n  // 3. Call a tool — search for classes starting with ZCL_\n  send({\n    jsonrpc: \"2.0\",\n    id: 3,\n    method: \"tools/call\",\n    params: {\n      name: \"sap_search_object\",\n      arguments: { query: \"ZCL_*\", max: 5 },\n    },\n  });\n}, 1500);\n\nsetTimeout(() => {\n  proc.kill();\n  process.exit(0);\n}, 8000);\n```\n\nRun it:\n\n```bash\nnode test-local.mjs\n```\n\nExpected output:\n\n```bash\n[server]  abap-adt-mcp server running (SAP: https://your-sap-server:8443, user: YOUR_USER)\n[response] {\"result\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{...},\"serverInfo\":{\"name\":\"abap-adt-mcp\",\"version\":\"1.0.0\"}},\"jsonrpc\":\"2.0\",\"id\":1}\n[response] {\"result\":{\"tools\":[...19 tools...]},\"jsonrpc\":\"2.0\",\"id\":2}\n[response] {\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"{\\\"totalResults\\\":5,\\\"results\\\":[...]}\"}]},\"jsonrpc\":\"2.0\",\"id\":3}\n```\n\n### Finding your SAP ADT port\n\nIf you don't know which port ADT runs on, try common SAP HTTPS ports:\n\n```bash\nfor port in 443 8443 44300 44301 50001; do\n  echo -n \"Port $port: \"\n  curl -sk --connect-timeout 3 -o /dev/null -w \"%{http_code}\\n\" \\\n    \"https://your-sap-server:$port/sap/bc/adt/core/discovery\"\ndone\n```\n\nA response of `401` (Unauthorized) means ADT is running on that port.\n\n## Development\n\n```bash\nnpm run build    # Compile TypeScript\nnpm run dev      # Build and run\n```\n\n### Debugging ADT API calls with Eclipse Communication Log\n\nTo see exactly which HTTP requests Eclipse ADT makes to the SAP backend (useful for implementing new tools):\n\n1. **Enable the log:** Window → Preferences → ABAP Development → Communication Log → Enable\n2. **Open the view:** Window → Show View → ABAP Communication Log<!--  -->\n\nThis dumps every HTTP request/response ADT makes. Trigger an action in Eclipse (e.g. open a class, run ATC, activate an object) and the corresponding `/sap/bc/adt/` calls will appear in the log with full URLs, headers, and XML bodies.\n\n## Architecture\n\n```\nsrc/\n├── index.ts            # MCP server with all 19 tool registrations\n├── adt-client.ts       # HTTP REST client (CSRF tokens, cookies, auth, connection retry)\n├── resolve-helpers.ts  # Tool input resolution with direct URL fallback\n├── abap-docu-utils.ts  # Documentation type detection and keyword list\n├── url-resolver.ts     # Object type → ADT URL mapping\n└── xml-parser.ts       # XML response parsers for all ADT endpoints\n```\n","readmeFilename":"README.md"}