{"id":35202832,"url":"https://github.com/fr0ster/mcp-abap-adt","last_synced_at":"2026-05-24T08:02:18.942Z","repository":{"id":322658721,"uuid":"1086732356","full_name":"fr0ster/mcp-abap-adt","owner":"fr0ster","description":"MCP server for SAP BTP ABAP Cloud and On-Premise ECC/S/4HANA ABAP ADT with full CRUD, JWT/XSUAA, and service-key auth.","archived":false,"fork":false,"pushed_at":"2026-05-15T20:02:10.000Z","size":14328,"stargazers_count":52,"open_issues_count":2,"forks_count":15,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-21T11:54:01.666Z","etag":null,"topics":["abap","abap-cloud","adt","btp","crud","jwt","mcp","mcp-server","sap","sap-btp","service-key","xsuaa"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fr0ster.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmaps/LEGACY_SUPPORT.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-30T20:31:13.000Z","updated_at":"2026-05-20T11:54:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fr0ster/mcp-abap-adt","commit_stats":null,"previous_names":["fr0ster/mcp-abap-adt"],"tags_count":134,"template":false,"template_full_name":null,"purl":"pkg:github/fr0ster/mcp-abap-adt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fr0ster%2Fmcp-abap-adt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fr0ster%2Fmcp-abap-adt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fr0ster%2Fmcp-abap-adt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fr0ster%2Fmcp-abap-adt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fr0ster","download_url":"https://codeload.github.com/fr0ster/mcp-abap-adt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fr0ster%2Fmcp-abap-adt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33426013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"online","status_checked_at":"2026-05-24T02:00:06.296Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["abap","abap-cloud","adt","btp","crud","jwt","mcp","mcp-server","sap","sap-btp","service-key","xsuaa"],"created_at":"2025-12-29T12:11:41.128Z","updated_at":"2026-05-24T08:02:18.933Z","avatar_url":"https://github.com/fr0ster.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003cimg src=\"logo.png\" alt=\"mcp-abap-adt logo\" width=\"36\" align=\"absmiddle\" /\u003e mcp-abap-adt: Your Gateway to ABAP Development Tools (ADT)\n[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua)\n\n`mcp-abap-adt` is an MCP server for ABAP ADT in SAP ECC/S/4HANA (on-premise) and SAP BTP ABAP Cloud systems. It gives agents controlled access to real ABAP repositories through ADT, so analysis and changes are grounded in system data instead of assumptions. It is built for AI-assisted pair programming (AIPNV: AI Pairing, Not Vibing), not autopilot vibe coding.\n\n**Primary workflows:**\n- **Deep ABAP analysis**: where-used, object metadata, repository navigation, object structure, semantic analysis, dependency and impact exploration.\n- **High-level ABAP development**: rapid CRUD and iterative updates for RAP and classic ABAP artifacts (classes, interfaces, function groups/modules, programs, DDIC, CDS/view/service artifacts), validated through ADT flows.\n\n**Why teams use it:**\n- **Full CRUD** (not read-only): create, read, update, and delete ABAP artifacts\n- Works with **On-Premise (ECC/S/4HANA)**, **ABAP Cloud (BTP)**, and **Legacy** systems (BASIS \u003c 7.50)\n- **JWT/XSUAA**, **service key** (destination-based), and **RFC** authorization\n- Multiple transports: **stdio**, **HTTP**, **SSE**\n- Rich tool surface for ABAP objects, metadata, transports, and search\n\n**Authorization \u0026 Destinations (Important):** A *destination* is the filename of a service key stored locally. You place service keys in the service-keys directory, and use `--mcp=\u003cdestination\u003e` to select which one to use. This is the primary auth model for on‑prem and BTP systems. See [Authentication \u0026 Destinations](docs/user-guide/AUTHENTICATION.md).\n\nYou can configure MCP clients either manually (JSON/TOML) or via the configurator CLI (`@mcp-abap-adt/configurator`, repo: [`mcp-abap-adt-conf`](https://github.com/fr0ster/mcp-abap-adt-conf)).\n\n## Table of Contents\n\n1. [Getting Started](#getting-started)\n2. [Architecture](#architecture)\n3. [Quick Start](#quick-start)\n4. [Use Cases](#use-cases)\n5. [Target Users](#target-users)\n6. [Capabilities (High-Level Focus)](#capabilities-high-level-focus)\n7. [Terminology](#terminology)\n8. [Authorization \u0026 Destinations](#authorization--destinations)\n9. [Registries](#registries)\n10. [Features](#features)\n11. [Documentation](#documentation)\n12. [Dependencies](#dependencies)\n13. [Running the Server](#running-the-server)\n\n## Getting Started\n\nInstall the server and configure your client using the configurator:\n\n```bash\nnpm install -g @mcp-abap-adt/core\nnpm install -g @mcp-abap-adt/configurator\n\n# stdio (destination)\nmcp-conf --client cline --name abap --mcp TRIAL\n\n# HTTP (streamable HTTP)\nmcp-conf --client copilot --name abap --transport http --url http://localhost:3000/mcp/stream/http --mcp trial\n```\n\nFull configurator usage (separate repo): [CLIENT_INSTALLERS.md](https://github.com/fr0ster/mcp-abap-adt-conf/tree/main/docs/CLIENT_INSTALLERS.md).\n\n## Terminology\n\n**Destination**: a local service key filename. You store service keys in the standard `service-keys` directory, and pass the filename (without extension) via `--mcp=\u003cdestination\u003e` to select which system to use.\n\nSee [docs/user-guide/TERMINOLOGY.md](docs/user-guide/TERMINOLOGY.md) for the full list.\n\n## Authorization \u0026 Destinations\n\nDestination-based auth is the default. Drop service keys into the standard platform folder and use the filename as your destination:\n\n```bash\nmcp-abap-adt --transport=stdio --mcp=TRIAL\n```\n\nStandard service key paths:\n- Unix (Linux/macOS): `~/.config/mcp-abap-adt/service-keys/\u003cdestination\u003e.json`\n- Windows: `%USERPROFILE%\\\\Documents\\\\mcp-abap-adt\\\\service-keys\\\\\u003cdestination\u003e.json`\n\nFor full details (paths, `.env`, direct headers), see [Authentication \u0026 Destinations](docs/user-guide/AUTHENTICATION.md).\n\n## Architecture\n\nThe project provides two main usage patterns:\n\n### 1. Standalone MCP Server (Default)\nRun as a standalone MCP server with stdio, HTTP, or SSE transport:\n```bash\nmcp-abap-adt                           # stdio (default)\nmcp-abap-adt --transport=http          # HTTP mode\nmcp-abap-adt --transport=sse           # SSE mode\n```\n\n### 2. Embeddable Server (For Integration)\nEmbed MCP server into existing applications (e.g., SAP CAP/CDS, Express):\n```typescript\nimport {\n  EmbeddableMcpServer,\n  ReadVsGetDedupStrategy, // optional: hide Read\u003cX\u003e when Get\u003cX\u003e also exposed\n} from '@mcp-abap-adt/core/server';\n\nconst server = new EmbeddableMcpServer({\n  connection,              // Your AbapConnection instance\n  logger,                  // Optional logger\n  exposition: ['readonly', 'high'],  // Handler groups to expose\n  // Optional; default: no dedup — existing consumers see no change.\n  readOnlyDedupStrategy: new ReadVsGetDedupStrategy(),\n});\nawait server.connect(transport);\n```\n\nSee [Handlers Management → EmbeddableMcpServer dedup strategies](docs/user-guide/HANDLERS_MANAGEMENT.md#embeddablemcpserver-dedup-strategies) for opt-in dedup of readonly tools against high/low/compact, including how to plug a custom `IReadOnlyDedupStrategy` for role-based rules.\n\n## Quick Start\n\n1. **Install server**: See [Installation Guide](docs/installation/INSTALLATION.md)\n2. **Configure client (auto)**: Use `mcp-conf` from `@mcp-abap-adt/configurator` (repo: [`mcp-abap-adt-conf`](https://github.com/fr0ster/mcp-abap-adt-conf), docs: [CLIENT_INSTALLERS.md](https://github.com/fr0ster/mcp-abap-adt-conf/tree/main/docs/CLIENT_INSTALLERS.md))\n3. **Configure client (manual)**: See [Client Configuration](docs/user-guide/CLIENT_CONFIGURATION.md)\n4. **Use**:\n   - [Read-Only Tools](docs/user-guide/AVAILABLE_TOOLS_READONLY.md)\n   - [High-Level Tools](docs/user-guide/AVAILABLE_TOOLS_HIGH.md)\n   - [Low-Level Tools](docs/user-guide/AVAILABLE_TOOLS_LOW.md)\n   - [Legacy System Tools](docs/user-guide/AVAILABLE_TOOLS_LEGACY.md)\n\n## Use Cases\n\n- **Impact analysis / where-used before changes**: map object usage and probable blast radius.\n- **Dependency audit**: inspect links across classes, interfaces, DDIC, CDS/views, and RAP artifacts.\n- **Migration and cleanup prep**: extract repository facts to plan refactoring or cloud-readiness work.\n- **RAP and ABAP iterative development**: create/update artifacts quickly with ADT-backed operations.\n- **Automated documentation and RAG ingestion**: pull structured facts from ABAP systems for downstream tooling.\n\n## Target Users\n\n- ABAP developers and ABAP architects\n- RAP developers\n- Team leads and tech leads who need fast repository visibility\n- Teams building RAG/agent workflows for SAP landscapes\n\n## Capabilities (High-Level Focus)\n\nKey examples of high-value workflows and tools:\n\n- **Repository and impact analysis**: `GetWhereUsed`, `DescribeByList`, `GetObjectStructure`, `GetObjectInfo`, `SearchObject`, `GetPackageTree`, `GetPackageContents`\n- **Code and semantic introspection**: `GetAbapAST`, `GetAbapSemanticAnalysis`, `GetIncludesList`, `GetProgFullCode`\n- **RAP development**: `CreateBehaviorDefinition`, `UpdateBehaviorDefinition`, `CreateBehaviorImplementation`, `UpdateBehaviorImplementation`, `CreateServiceDefinition`, `UpdateServiceDefinition`, `CreateMetadataExtension`, `UpdateMetadataExtension`\n- **CDS/View development**: `CreateView`, `UpdateView`, `GetView`, `DeleteView`\n- **ABAP OO CRUD**: `CreateClass`, `UpdateClass`, `GetClass`, `DeleteClass`, `CreateInterface`, `UpdateInterface`, `GetInterface`, `DeleteInterface`\n- **Function module/group CRUD**: `CreateFunctionGroup`, `UpdateFunctionGroup`, `GetFunctionGroup`, `DeleteFunctionGroup`, `CreateFunctionModule`, `UpdateFunctionModule`, `GetFunctionModule`, `DeleteFunctionModule`\n- **Transport and activation support**: `CreateTransport`, `GetTransport`, `ActivateObject`\n\n## Registries\n\nPublished in the official MCP Registry and listed on Glama.ai.\n\n- MCP Registry: [docs/deployment/MCP_REGISTRY.md](docs/deployment/MCP_REGISTRY.md)\n- Glama.ai:\n  \u003ca href=\"https://glama.ai/mcp/servers/@fr0ster/mcp-abap-adt\"\u003e\n    \u003cimg width=\"380\" height=\"200\" src=\"https://glama.ai/mcp/servers/@fr0ster/mcp-abap-adt/badge\" /\u003e\n  \u003c/a\u003e\n\n## Features\n\n- **🏗️ Domain Management**: `GetDomain`, `CreateDomain`, `UpdateDomain` - Create, retrieve, and update ABAP domains\n- **📊 Data Element Management**: `GetDataElement`, `CreateDataElement`, `UpdateDataElement` - Create, retrieve, and update ABAP data elements\n- **📦 Table Management**: `GetTable`, `CreateTable`, `GetTableContents` - Create and retrieve ABAP database tables with data preview\n- **🏛️ Structure Management**: `GetStructure`, `CreateStructure` - Create and retrieve ABAP structures\n- **👁️ View Management**: `GetView`, `CreateView`, `UpdateView` - Create and manage CDS Views and Classic Views\n- **🎓 Class Management**: `GetClass`, `CreateClass`, `UpdateClass` - Create, retrieve, and update ABAP classes\n- **📝 Program Management**: `GetProgram`, `CreateProgram`, `UpdateProgram` - Create, retrieve, and update ABAP programs\n- **🔧 Behavior Definition (BDEF) Management**: `GetBehaviorDefinition`, `CreateBehaviorDefinition`, `UpdateBehaviorDefinition` - Create and manage ABAP Behavior Definitions with support for Managed, Unmanaged, Abstract, and Projection types\n- **📋 Metadata Extension (DDLX) Management**: `CreateMetadataExtension`, `UpdateMetadataExtension` - Create and manage ABAP Metadata Extensions\n- **⚡ Activation**: `ActivateObject` - Universal activation for any ABAP object\n- **🚚 Transport Management**: `CreateTransport`, `GetTransport` - Create and retrieve transport requests\n- **🔍 Enhancement Analysis**: `GetEnhancements`, `GetEnhancementImpl`, `GetEnhancementSpot` - Enhancement discovery and analysis\n- **📋 Include Management**: `GetIncludesList` - Recursive include discovery\n- **🔍 System Tools**: `GetInactiveObjects` - Monitor inactive objects waiting for activation\n- **🧪 Runtime Diagnostics**: `RuntimeCreateProfilerTraceParameters`, `RuntimeListProfilerTraceFiles`, `RuntimeGetProfilerTraceData`, `RuntimeGetDumpById` - Profiling and dump analysis with JSON payloads\n- **📡 Runtime Feeds**: `RuntimeListFeeds`, `RuntimeListSystemMessages`, `RuntimeGetGatewayErrorLog` - Feed reader (dumps, system messages, gateway errors), SM02 system messages, Gateway error log\n- **🚀 SAP BTP Support**: JWT/XSUAA authentication with browser-based token helper\n- **🔑 Destination-Based Authentication**: Service key-based authentication with automatic token management (see [Client Configuration](docs/user-guide/CLIENT_CONFIGURATION.md#destination-based-authentication))\n- **💾 Freestyle SQL**: `GetSqlQuery` - Execute custom SQL queries via ADT Data Preview API\n\n\u003e ℹ️ **ABAP Cloud limitation**: Direct ADT data preview of database tables is blocked by SAP BTP backend policies. The server returns a descriptive error when attempting such operations. On-premise systems continue to support data preview.\n\n## Documentation\n\n### For Users\n- **[Docs Index](docs/README.md)** - Full documentation index\n- **[Installation Guide](docs/installation/README.md)** - Installation overview and platform guides\n- **[User Guide](docs/user-guide/README.md)** - End-user docs (auth, config, tools)\n- **[Authentication \u0026 Destinations](docs/user-guide/AUTHENTICATION.md)** - Destination-based auth and service keys\n- **[Handlers Management](docs/user-guide/HANDLERS_MANAGEMENT.md)** - Enable/disable handler groups\n- **Configurator**: `@mcp-abap-adt/configurator` (repo: [`mcp-abap-adt-conf`](https://github.com/fr0ster/mcp-abap-adt-conf)) provides the `mcp-conf` CLI to auto-configure clients\n- **Tools by level**\n  - [Read-Only Tools](docs/user-guide/AVAILABLE_TOOLS_READONLY.md)\n  - [High-Level Tools](docs/user-guide/AVAILABLE_TOOLS_HIGH.md)\n  - [Low-Level Tools](docs/user-guide/AVAILABLE_TOOLS_LOW.md)\n  - [Legacy System Tools](docs/user-guide/AVAILABLE_TOOLS_LEGACY.md)\n\n### For Administrators\n- **[Deployment Docs](docs/deployment/README.md)** - MCP Registry, Docker, release notes\n- **[Server Configuration](docs/configuration/YAML_CONFIG.md)** - YAML config reference\n\n### For Developers\n- **[Architecture Documentation](docs/architecture/README.md)** - System architecture and design decisions\n- **[Development Documentation](docs/development/README.md)** - Testing guides and development resources\n- **[CHANGELOG.md](CHANGELOG.md)** - Version history and changes\n\n## Dependencies\n\nThis project uses two npm packages:\n\n- **[@mcp-abap-adt/connection](https://www.npmjs.com/package/@mcp-abap-adt/connection)** – connection/auth/session layer\n- **[@mcp-abap-adt/adt-clients](https://www.npmjs.com/package/@mcp-abap-adt/adt-clients)** – Builder-first ADT clients\n\nThese packages are automatically installed via `npm install` and are published to npm.\n\n---\n\n\n## Running the Server\n\n### Global Installation (Recommended)\nAfter installing globally with `npm install -g`, you can run from any directory:\n\n```bash\n# Show help\nmcp-abap-adt --help\n\n# Default HTTP mode (works without .env file)\nmcp-abap-adt\n\n# HTTP mode on custom port\nmcp-abap-adt --http-port=8080\n\n# Use stdio mode (for MCP clients, requires .env file or --mcp parameter)\nmcp-abap-adt --transport=stdio\n\n# Use stdio mode with auth-broker (--mcp parameter)\nmcp-abap-adt --transport=stdio --mcp=TRIAL\n\n# Use env destination from platform sessions store\nmcp-abap-adt --env=trial\n\n# Use explicit .env file path\nmcp-abap-adt --env-path=/path/to/my.env\n\n# SSE mode (requires .env file or --mcp parameter)\nmcp-abap-adt --transport=sse --sse-port=3001\n\n# SSE mode with auth-broker (--mcp parameter)\nmcp-abap-adt --transport=sse --mcp=TRIAL\n```\n\n### Development Mode\n```bash\n# Build and run locally\nnpm run build\nnpm start\n\n# HTTP mode\nnpm run start:http\n\n# SSE mode\nnpm run start:sse\n\n# Legacy v1 server (for backward compatibility)\nnpm run start:legacy\n```\n\n### Environment Configuration\n\nEnv resolution:\n1. `--env-path=\u003cpath|file\u003e` (or `MCP_ENV_PATH`) for explicit `.env` file.\n   - Absolute path: used as-is.\n   - Relative path or file name only (e.g. `my.env`): resolved from current working directory.\n2. `--env=\u003cdestination\u003e` for destination file in standard sessions store:\n   - Unix: `~/.config/mcp-abap-adt/sessions/\u003cdestination\u003e.env`\n   - Windows: `%USERPROFILE%\\\\Documents\\\\mcp-abap-adt\\\\sessions\\\\\u003cdestination\u003e.env`\n3. Fallback to `.env` in current working directory.\n\n**Example .env file:**\n```bash\nSAP_URL=https://your-sap-system.com\nSAP_CLIENT=100\nSAP_AUTH_TYPE=basic\nSAP_USERNAME=your-username\nSAP_PASSWORD=your-password\n```\n\nFor JWT authentication (SAP BTP):\n```bash\nSAP_URL=https://your-btp-system.com\nSAP_CLIENT=100\nSAP_AUTH_TYPE=jwt\nSAP_JWT_TOKEN=your-jwt-token\n```\n\nFor RFC connection:\n```bash\nSAP_URL=https://your-legacy-system.com\nSAP_CLIENT=100\nSAP_AUTH_TYPE=basic\nSAP_USERNAME=your-username\nSAP_PASSWORD=your-password\nSAP_CONNECTION_TYPE=rfc\n```\n\nSee [RFC Setup Guide](docs/installation/RFC_SETUP.md) for prerequisites (SAP NW RFC SDK).\n\nFor client certificate (mTLS) authentication — on-prem HTTP only:\n```bash\nSAP_URL=https://your-sap-system.com\nSAP_AUTH_TYPE=certificate\n\n# PEM format (provide both files):\nSAP_CERT_PATH=/path/to/client.crt\nSAP_CERT_KEY_PATH=/path/to/client.key\n\n# Or PKCS#12 format (alternative to PEM):\n# SAP_CERT_PFX_PATH=/path/to/client.pfx\n# SAP_CERT_PASSPHRASE=your-passphrase\n```\n\nFor Kerberos (SPNEGO) authentication — on-prem HTTP only:\n```bash\nSAP_URL=https://your-sap-system.com\nSAP_AUTH_TYPE=kerberos\n\n# Optional: explicit SPN (default: HTTP@\u003chost\u003e)\n# SAP_KERBEROS_SPN=HTTP@mysaphost.corp.example\n# Optional: service class used to derive the SPN when SAP_KERBEROS_SPN is unset (default: HTTP)\n# SAP_KERBEROS_SERVICE=HTTP\n```\n\n**Certificate auth notes:**\n- Identifies the client via mTLS — no `SAP_USERNAME` / `SAP_PASSWORD` required.\n- Provide either PEM files (`SAP_CERT_PATH` + `SAP_CERT_KEY_PATH`) or a PKCS#12 file (`SAP_CERT_PFX_PATH`), not both.\n- On-prem HTTP connections only (`SAP_CONNECTION_TYPE=rfc` is not supported).\n\n**Kerberos auth notes:**\n- Requires a valid Kerberos ticket on the host before starting the server. Obtain one with `kinit` or a keytab.\n- The optional [`kerberos`](https://www.npmjs.com/package/kerberos) npm package must be installed (needs GSSAPI dev libs on Linux / build tools on Windows): `npm i kerberos`.\n- No `SAP_USERNAME` / `SAP_PASSWORD` required — identity comes from the TGT.\n- Both auth types bypass the auth-broker; use `.env` directly.\n- **NTLM is hard-rejected:** if the SAP system offers NTLM instead of Kerberos/SPNEGO, the connection fails with a clear error rather than silently downgrading. Ensure the system accepts Kerberos (SPNEGO) for your user.\n\n\u003e **⚠️ Help wanted — not yet validated on a live system.** Certificate and Kerberos auth pass full unit coverage but have not been tested against a real SAP system. If you have on-prem **client-certificate** or **Kerberos/SPNEGO** SSO, please try it and [open an issue](https://github.com/fr0ster/mcp-abap-adt/issues) with results — especially whether Kerberos succeeds with a single-leg Negotiate token or your system needs mutual-auth continuation.\n\n**Generate .env from Service Key (JWT):**\n```bash\n# Install the connection package globally (one-time setup)\nnpm install -g @mcp-abap-adt/connection\n\n# Generate .env file from service key JSON\nmcp-auth auth -k path/to/service-key.json\n```\n\nThis will automatically create/update `.env` file with JWT tokens and connection details.\n\n**.env comments rule:** only full-line comments are supported (lines that start with `#`).  \nInline comments are not parsed, so keep comments on separate lines.\n\n**Claude recommendation:** place the service key in the service-keys directory and use `--mcp=\u003cdestination\u003e` (avoid manual JWT tokens).\n\n### Command-Line Options\n\n**Authentication:**\n- `--auth-broker` - Force use of auth-broker (service keys), ignore .env file\n- `--auth-broker-path=\u003cpath\u003e` - Custom path for auth-broker service keys and sessions\n- `--browser-auth-port=\u003cport\u003e` - Override OAuth browser callback port (default: 5000 for HTTP, 4000 for SSE, 4001 for stdio)\n- `--connection-type=\u003chttp|rfc\u003e` - SAP connection transport: `http` (default) or `rfc`\n- `--unsafe` - Enable file-based session storage (persists tokens to disk). By default, sessions are stored in-memory (secure, lost on restart)\n\nWhen `--mcp=\u003cdestination\u003e` is specified, automatic fallback loading of `./.env` is skipped.\n\n**Examples:**\n```bash\n# Use auth-broker with file-based session storage (persists tokens)\nmcp-abap-adt --auth-broker --unsafe\n\n# Use auth-broker with in-memory session storage (default, secure)\nmcp-abap-adt --auth-broker\n\n# Custom path for service keys and sessions\nmcp-abap-adt --auth-broker --auth-broker-path=~/prj/tmp/ --unsafe\n```\n\nSee [Client Configuration](docs/user-guide/CLIENT_CONFIGURATION.md) for complete configuration options.\n\n### Handler logging switches\n- `AUTH_LOG_LEVEL=error|warn|info|debug` — sets base log level for handler logger; `DEBUG_AUTH_LOG=true` also enables `debug`.\n- `HANDLER_LOG_SILENT=true` — fully disables handler logging.\n- `DEBUG_CONNECTORS=true` — verbose connection logging in high-level handlers.\n- `DEBUG_HANDLERS=true` — enables verbose logs for selected read-only/system handlers.\n\n## Development\n\n### Testing\n```bash\nnpm test\n```\n\n#### Test logging switches\n- `TEST_LOG_LEVEL=error|warn|info|debug` — controls test logger verbosity (DEBUG_TESTS/DEBUG_ADT_TESTS/DEBUG_CONNECTORS force `debug`).\n- `TEST_LOG_FILE=/tmp/adt-tests.log` — writes test logs to a file (best-effort).\n- `TEST_LOG_SILENT=true` — disables test logging pipeline (console output muted).\n- `TEST_LOG_COLOR=true` — adds colored/prefixed tags to test log lines.\n- All `console.*` in tests are routed through the test logger with a `[test]` prefix.\n\n### Building\n```bash\nnpm run build\n```\n\n### Developer Tools\n```bash\n# Generate tool documentation\nnpm run docs:tools\n\n# See tools/README.md for more developer utilities\n```\n\n## Contributors\n\nThank you to all contributors! See [CONTRIBUTORS.md](CONTRIBUTORS.md) for the complete list.\n\n---\n\n**Acknowledgment**: This project was originally inspired by [mario-andreschak/mcp-abap-adt](https://github.com/mario-andreschak/mcp-abap-adt). We started with the core concept and then evolved it into an independent project with our own architecture and features.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffr0ster%2Fmcp-abap-adt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffr0ster%2Fmcp-abap-adt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffr0ster%2Fmcp-abap-adt/lists"}