{
  "slug": "io-github-williansaez-abap-adt-mcp",
  "name": "io.github.williansaez/abap-adt-mcp",
  "title": "abap-adt-mcp",
  "description": "ABAP development from Claude and other MCP hosts: source, transports, tests, ATC, debugger",
  "version": "2.8.1",
  "publishedAt": "2026-10-26T09:55:59.760029Z",
  "updatedAt": "2026-10-26T09:55:59.760029Z",
  "repoUrl": "https://github.com/williansaez/abap-adt-mcp",
  "websiteUrl": null,
  "namespace": {
    "type": "github",
    "owner": "williansaez"
  },
  "kind": "local",
  "packages": [
    {
      "registryType": "npm",
      "identifier": "abap-adt-mcp",
      "version": "2.8.1",
      "transport": "stdio",
      "runtimeHint": null
    }
  ],
  "remotes": [],
  "envVars": [
    {
      "name": "SAP_SYSTEMS_FILE",
      "isSecret": false,
      "isRequired": false,
      "description": "Path to a JSON file mapping destination names to system configs (url, client, authType basic/sso/sso2/oauth, credentials). Recommended; keep the file mode 0600. See systems.example.json"
    },
    {
      "name": "SAP_SYSTEMS",
      "isSecret": true,
      "isRequired": false,
      "description": "Inline JSON map of destinations (same shape as SAP_SYSTEMS_FILE). Contains credentials — prefer SAP_SYSTEMS_FILE"
    },
    {
      "name": "SAP_DEFAULT_DESTINATION",
      "isSecret": false,
      "isRequired": false,
      "description": "Destination name used when a tool call omits `destination` (alternatively mark an entry with \"default\": true)"
    },
    {
      "name": "SAP_AUTH_TYPE",
      "isSecret": false,
      "isRequired": false,
      "description": "Default auth type for entries that don't specify one: sso (default), sso2, basic, or oauth"
    },
    {
      "name": "MCP_HTTP_PORT",
      "isSecret": false,
      "isRequired": false,
      "description": "When set (1024-65535), serve Streamable HTTP on http://127.0.0.1:<port>/mcp with bearer-token auth instead of stdio"
    },
    {
      "name": "MCP_HTTP_HOST",
      "isSecret": false,
      "isRequired": false,
      "description": "Bind address for the HTTP transport (default 127.0.0.1). Set 0.0.0.0 only inside containers that publish the port"
    },
    {
      "name": "MCP_HTTP_TOKEN",
      "isSecret": true,
      "isRequired": false,
      "description": "Bearer token for the HTTP transport; auto-generated and written to ~/.abap-adt-mcp/http-token when unset"
    },
    {
      "name": "MCP_HTTP_MAX_SESSIONS",
      "isSecret": false,
      "isRequired": false,
      "description": "Maximum concurrent MCP sessions on the HTTP transport (default 16); further initialize requests get 503"
    },
    {
      "name": "MCP_HTTP_MAX_BODY_BYTES",
      "isSecret": false,
      "isRequired": false,
      "description": "Largest request body the HTTP transport accepts, in bytes (default 4194304); larger bodies are refused with HTTP 413"
    },
    {
      "name": "MCP_HTTP_SESSION_TTL_MINUTES",
      "isSecret": false,
      "isRequired": false,
      "description": "Idle minutes after which an HTTP session (and its SAP sessions/locks) is closed (default 30)"
    },
    {
      "name": "MCP_HTTP_ALLOWED_ORIGINS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated Origin values allowed on the HTTP transport (loopback origins always allowed when bound to loopback; * allows any)"
    },
    {
      "name": "MCP_HTTP_ALLOWED_HOSTS",
      "isSecret": false,
      "isRequired": false,
      "description": "Comma-separated Host header values allowed (DNS-rebinding protection; loopback hosts always allowed when bound to loopback)"
    },
    {
      "name": "MCP_EXPORT_ROOT",
      "isSecret": false,
      "isRequired": false,
      "description": "When set, exportPackageSources may only write inside this directory"
    },
    {
      "name": "MCP_AUDIT_FILE",
      "isSecret": false,
      "isRequired": false,
      "description": "Path of a JSONL audit trail: one record per tool call (tool, destination, duration, outcome ok/error/denied/unavailable, policy gate, redacted argument summary)"
    },
    {
      "name": "MCP_ADT_TRACE_FILE",
      "isSecret": false,
      "isRequired": false,
      "description": "Diagnostics: path of a JSONL trace with one line per ADT request (method, URI, status, headers). Cookie, Set-Cookie, Authorization and CSRF values are reduced to name and length; no response body is kept, error lines carry the first 300 characters of the redacted error text. Off when unset."
    },
    {
      "name": "MCP_READ_ONLY",
      "isSecret": false,
      "isRequired": false,
      "description": "Set to 1 to make every destination read-only (server-side; only read-only annotated tools plus login/logout run). Per-destination policies live in systems.json"
    },
    {
      "name": "MCP_ALLOW_DATA_PREVIEW",
      "isSecret": false,
      "isRequired": false,
      "description": "Set to 1 to let tableContents read table and CDS rows on every destination that does not state policy.allowDataPreview itself (reading table data is off by default)"
    },
    {
      "name": "MCP_ALLOW_FREE_SQL",
      "isSecret": false,
      "isRequired": false,
      "description": "Set to 1 to allow runQuery and tableContents with sqlQuery on every destination that does not state policy.allowFreeSql itself (free SQL is off by default; implies table data)"
    },
    {
      "name": "MCP_TOOLSETS",
      "isSecret": false,
      "isRequired": false,
      "description": "Toolsets to publish: comma list (core,source,objects,transports,analysis,tests,atc,data,discovery,runtime,refactoring,rap,services,git,debugger,traces) or a preset: all (default) or focused"
    },
    {
      "name": "MCP_DISABLED_TOOLSETS",
      "isSecret": false,
      "isRequired": false,
      "description": "Toolsets to hide, comma list (core cannot be disabled)"
    },
    {
      "name": "MCP_MAX_RESPONSE_CHARS",
      "isSecret": false,
      "isRequired": false,
      "description": "Character budget for a single tool response before results are paged/truncated (default 40000, minimum 5000). Raise it if your MCP host accepts larger tool outputs"
    },
    {
      "name": "SAP_ALLOW_REENTRANCE_TICKET",
      "isSecret": false,
      "isRequired": false,
      "description": "Set to 1 to enable the reentranceTicket tool (disabled by default: it returns a live SAP logon credential into the conversation)"
    },
    {
      "name": "SAP_URL",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system mode: base URL of the SAP system, e.g. https://host:44300"
    },
    {
      "name": "SAP_USER",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system mode: SAP username"
    },
    {
      "name": "SAP_PASSWORD",
      "isSecret": true,
      "isRequired": false,
      "description": "Legacy single-system mode: SAP password"
    },
    {
      "name": "SAP_CLIENT",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system mode: SAP client number, e.g. 100"
    },
    {
      "name": "SAP_LANGUAGE",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system mode: logon language, e.g. EN"
    },
    {
      "name": "SAP_BROWSER_PATH",
      "isSecret": false,
      "isRequired": false,
      "description": "SSO destinations: path to a Chromium/Chrome/Edge binary for the browser login (auto-detected when unset)"
    },
    {
      "name": "SAP_BROWSER_PROFILE_DIR",
      "isSecret": false,
      "isRequired": false,
      "description": "SSO destinations: directory of the persistent browser profile that keeps the identity-provider session (default ~/.abap-adt-mcp/sso/<host>)"
    },
    {
      "name": "SAP_SSO2_COMMAND",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system sso2 mode: absolute path to the trusted local ticket provider"
    },
    {
      "name": "SAP_SSO2_ARGS",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system sso2 mode: JSON array of provider arguments (never put a ticket here)"
    },
    {
      "name": "SAP_SSO2_TIMEOUT_MS",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system sso2 mode: provider timeout in milliseconds (default 30000; range 1000-300000)"
    },
    {
      "name": "SAP_TLS_INSECURE",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system mode: set to 1 to skip TLS certificate verification for that system only (sandboxes with self-signed certificates)"
    },
    {
      "name": "SAP_OAUTH_TOKEN_URL",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 token endpoint (client_credentials)"
    },
    {
      "name": "SAP_OAUTH_CLIENT_ID",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 client id"
    },
    {
      "name": "SAP_OAUTH_CLIENT_SECRET",
      "isSecret": true,
      "isRequired": false,
      "description": "Legacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 client secret"
    },
    {
      "name": "SAP_OAUTH_SCOPE",
      "isSecret": false,
      "isRequired": false,
      "description": "Legacy single-system mode with SAP_AUTH_TYPE=oauth: optional OAuth2 scope"
    },
    {
      "name": "MCP_PROFILE_GATE",
      "isSecret": false,
      "isRequired": false,
      "description": "Platform gate for toolsets the destination does not expose (debugger, traces, abapGit, ...): enforce (default, refuse before calling SAP), warn (log only) or off"
    },
    {
      "name": "MCP_SOURCE_CACHE_TTL_SECONDS",
      "isSecret": false,
      "isRequired": false,
      "description": "Lifetime of the per-session source cache used by grepPackage, cdsViewInfo and syntaxCheckCode (default 300; 0 keeps entries until logout)"
    },
    {
      "name": "MCP_CACHE_DIR",
      "isSecret": false,
      "isRequired": false,
      "description": "Directory for the cached SAP cloudification repository used by apiReleaseState (default ~/.abap-adt-mcp/cache)"
    },
    {
      "name": "MCP_API_CLASSIFICATION_FILES",
      "isSecret": false,
      "isRequired": false,
      "description": "Extra classification files for apiReleaseState, comma list: a path inside SAP's cloudification repository (partner/objectClassifications_ACME.json) or an https URL"
    }
  ],
  "category": "dev-tools",
  "subcategory": "testing",
  "company": "",
  "categoryAuto": true,
  "checks": [
    {
      "id": "source-linked",
      "label": "Source repository linked",
      "result": "pass",
      "detail": "https://github.com/williansaez/abap-adt-mcp"
    },
    {
      "id": "version-pinned",
      "label": "Version pinned",
      "result": "pass",
      "detail": "Every package has an explicit version"
    },
    {
      "id": "secrets-requested",
      "label": "Secrets requested",
      "result": "warn",
      "detail": "Asks for 4 secrets: SAP_SYSTEMS, MCP_HTTP_TOKEN, SAP_PASSWORD, SAP_OAUTH_CLIENT_SECRET"
    },
    {
      "id": "known-registry",
      "label": "Known package registry",
      "result": "pass",
      "detail": "All packages come from npm, PyPI, OCI, NuGet or MCPB"
    },
    {
      "id": "namespace",
      "label": "Namespace ownership",
      "result": "info",
      "detail": "Name verified via GitHub account williansaez"
    },
    {
      "id": "meta-text",
      "label": "Registry text aimed at the AI",
      "result": "pass",
      "detail": "Description and settings contain no hidden characters or instructions to the AI"
    },
    {
      "id": "install-scripts",
      "label": "Install scripts",
      "result": "pass",
      "detail": "abap-adt-mcp@2.8.1 runs nothing at install"
    },
    {
      "id": "code-flags",
      "label": "Code red flags",
      "result": "pass",
      "detail": "Read 82 files in abap-adt-mcp@2.8.1: no obfuscation, encoded execution, credential reads or data-collection endpoints found"
    },
    {
      "id": "ai-text",
      "label": "Text aimed at the AI",
      "result": "pass",
      "detail": "No hidden characters or instructions to the AI in 82 files, including comments and the README"
    }
  ],
  "scannedAt": "2026-10-29",
  "level": "Scanned",
  "install": [
    {
      "label": "Claude Desktop (npm)",
      "kind": "claude_desktop_json",
      "text": "{\n  \"mcpServers\": {\n    \"abap-adt-mcp\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"abap-adt-mcp@2.8.1\"\n      ]\n    }\n  }\n}"
    }
  ],
  "curated": true,
  "stars": 15,
  "archived": false,
  "pushedAt": "2026-10-26T17:56:45Z",
  "health": {
    "score": 59,
    "parts": {
      "popularity": 0.39639220224397803,
      "activity": 0.6,
      "issues": 0.8235294117647058,
      "security": 0.8
    },
    "fail": 0,
    "warn": 1,
    "raw": {
      "stars": 15,
      "forks": 6,
      "downloads": 522,
      "hn": null,
      "issuesOpen": 3,
      "issuesClosed": 14,
      "prsMerged": 57,
      "commits90": 0,
      "release": "2026-10-26T09:56:39Z",
      "pushed": "2026-10-26T17:56:45Z",
      "growth": null,
      "growthDays": null,
      "archived": false
    },
    "at": "2026-10-31T07:35:52.424Z"
  }
}
