{"name":"io.github.williansaez/abap-adt-mcp","slug":"williansaez-abap-adt-mcp","title":null,"description":"ABAP development from Claude and other MCP hosts: source, transports, tests, ATC, debugger","url":"https://mcp.market/server/williansaez-abap-adt-mcp","rating":null,"grade":"B","score":75,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":37,"stars":9,"forks":3,"downloads_week":305,"last_push_at":"2026-09-16T01:07:25.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/williansaez/abap-adt-mcp","website":null,"version":"2.0.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"abap-adt-mcp","version":"2.0.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Path to a JSON file mapping destination names to system configs (url, client, authType basic/sso/oauth, credentials). Recommended; keep the file mode 0600. See systems.example.json","name":"SAP_SYSTEMS_FILE"},{"description":"Inline JSON map of destinations (same shape as SAP_SYSTEMS_FILE). Contains credentials — prefer SAP_SYSTEMS_FILE","isSecret":true,"name":"SAP_SYSTEMS"},{"description":"Destination name used when a tool call omits `destination` (alternatively mark an entry with \"default\": true)","name":"SAP_DEFAULT_DESTINATION"},{"description":"Default auth type for entries that don't specify one: sso (default), basic, or oauth","name":"SAP_AUTH_TYPE"},{"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_PORT"},{"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_HOST"},{"description":"Bearer token for the HTTP transport; auto-generated and written to ~/.abap-adt-mcp/http-token when unset","isSecret":true,"name":"MCP_HTTP_TOKEN"},{"description":"Maximum concurrent MCP sessions on the HTTP transport (default 16); further initialize requests get 503","name":"MCP_HTTP_MAX_SESSIONS"},{"description":"Largest request body the HTTP transport accepts, in bytes (default 4194304); larger bodies are refused with HTTP 413","name":"MCP_HTTP_MAX_BODY_BYTES"},{"description":"Idle minutes after which an HTTP session (and its SAP sessions/locks) is closed (default 30)","name":"MCP_HTTP_SESSION_TTL_MINUTES"},{"description":"Comma-separated Origin values allowed on the HTTP transport (loopback origins always allowed when bound to loopback; * allows any)","name":"MCP_HTTP_ALLOWED_ORIGINS"},{"description":"Comma-separated Host header values allowed (DNS-rebinding protection; loopback hosts always allowed when bound to loopback)","name":"MCP_HTTP_ALLOWED_HOSTS"},{"description":"When set, exportPackageSources may only write inside this directory","name":"MCP_EXPORT_ROOT"},{"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_AUDIT_FILE"},{"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_READ_ONLY"},{"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_TOOLSETS"},{"description":"Toolsets to hide, comma list (core cannot be disabled)","name":"MCP_DISABLED_TOOLSETS"},{"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":"MCP_MAX_RESPONSE_CHARS"},{"description":"Set to 1 to enable the reentranceTicket tool (disabled by default: it returns a live SAP logon credential into the conversation)","name":"SAP_ALLOW_REENTRANCE_TICKET"},{"description":"Legacy single-system mode: base URL of the SAP system, e.g. https://host:44300","name":"SAP_URL"},{"description":"Legacy single-system mode: SAP username","name":"SAP_USER"},{"description":"Legacy single-system mode: SAP password","isSecret":true,"name":"SAP_PASSWORD"},{"description":"Legacy single-system mode: SAP client number, e.g. 100","name":"SAP_CLIENT"},{"description":"Legacy single-system mode: logon language, e.g. EN","name":"SAP_LANGUAGE"},{"description":"SSO destinations: path to a Chromium/Chrome/Edge binary for the browser login (auto-detected when unset)","name":"SAP_BROWSER_PATH"},{"description":"SSO destinations: directory of the persistent browser profile that keeps the identity-provider session (default ~/.abap-adt-mcp/sso/<host>)","name":"SAP_BROWSER_PROFILE_DIR"},{"description":"Legacy single-system mode: set to 1 to skip TLS certificate verification for that system only (sandboxes with self-signed certificates)","name":"SAP_TLS_INSECURE"},{"description":"Legacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 token endpoint (client_credentials)","name":"SAP_OAUTH_TOKEN_URL"},{"description":"Legacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 client id","name":"SAP_OAUTH_CLIENT_ID"},{"description":"Legacy single-system mode with SAP_AUTH_TYPE=oauth: OAuth2 client secret","isSecret":true,"name":"SAP_OAUTH_CLIENT_SECRET"},{"description":"Legacy single-system mode with SAP_AUTH_TYPE=oauth: optional OAuth2 scope","name":"SAP_OAUTH_SCOPE"},{"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_PROFILE_GATE"},{"description":"Lifetime of the per-session source cache used by grepPackage, cdsViewInfo and syntaxCheckCode (default 300; 0 keeps entries until logout)","name":"MCP_SOURCE_CACHE_TTL_SECONDS"},{"description":"Directory for the cached SAP cloudification repository used by apiReleaseState (default ~/.abap-adt-mcp/cache)","name":"MCP_CACHE_DIR"}]}],"tools":[{"name":"abapDocumentation","description":"ABAP keyword documentation (the F1 help) as plain text. Two ways to ask: (a) keyword: a statement or addition such as \"SELECT SINGLE\", \"WITH PRIVILEGED ACCESS\", \"LOOP AT GROUP BY\" (the server builds the context for you); (b) cursor: objectUri, body (the source; fetched from objectUri when omitted), line and column of the element to explain. Long documents are paged with startLine/maxLines.","write_action":false,"price_micros":0,"input_schema":null},{"name":"activateByName","description":"Activate a single ABAP object by name and URL. Run after setObjectSource (and unLock); after activation run unitTestRun to verify behavior.","write_action":false,"price_micros":0,"input_schema":null},{"name":"activateObjects","description":"Activate ABAP objects using object references. Run after setObjectSource; the entries returned by inactiveObjects can be passed here directly. For a single object, activateByName is simpler.","write_action":false,"price_micros":0,"input_schema":null},{"name":"activatePackage","description":"Activate every inactive object of a package (and its sub-packages) in one activation request, the way RAP stacks (CDS, behavior definition, service definition, classes) must be activated together. Returns the activation messages and what is still inactive afterwards.","write_action":false,"price_micros":0,"input_schema":null},{"name":"adtCompatibilityGraph","description":"Retrieves the ADT compatibility graph.","write_action":false,"price_micros":0,"input_schema":null},{"name":"adtCoreDiscovery","description":"Performs ADT core discovery. Returns a list of core discovery collections. For large systems, use startIndex/maxItems to page through the list instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"adtDiscovery","description":"Performs ADT discovery. Returns a list of discovery collections. For large systems, use startIndex/maxItems to page through the list instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"annotationDefinitions","description":"Retrieves the CDS annotation catalog for the system. This can be large; use startIndex/maxItems to page through it instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apiReleaseState","description":"Release state of SAP objects for ABAP Cloud / Clean Core, from SAP's official cloudification repository (released, deprecated with successors, classicAPI, noAPI) plus, when objectUrl is given, the backend's own /sap/bc/adt/apireleases answer. Check APIs before writing cloud code instead of recalling from memory. Pass names as \"CL_X\", \"TABL:MARA\", \"FUGR:BAPI_...\" (comma-separated) or a source to sc","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcApplyQuickfix","description":"Apply a deterministic quickfix at an ATC finding location: recomputes the proposals (see atcQuickfixProposals), applies the chosen one to the source and writes it back with setObjectSource. Requires the object to be locked (lock returns the lockHandle). Activate afterwards with activateByName and re-run ATC to confirm the finding is gone.","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcChangeContact","description":"Changes the contact for an ATC finding.","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcCheckVariant","description":"Retrieves information about an ATC check variant.","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcContactUri","description":"Retrieves the contact URI for an ATC finding.","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcCustomizing","description":"Retrieves ATC customizing information.","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcDocumentation","description":"Read the documentation of an ATC check/finding (what the check tests, why it matters, how to fix). Pass the documentation URI found in an ATC finding (atcWorklists → findings[].link / docUri).","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcExemptProposal","description":"Retrieves an ATC exemption proposal.","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcQuickfixProposals","description":"List the quickfix proposals available at an ATC finding location. Pass the source URL and position from an atcWorklists finding. Apply a proposal with atcApplyQuickfix. Read-only.","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcRequestExemption","description":"Requests an ATC exemption.","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcSummary","description":"Aggregated view of an ATC result: totals by priority, by check and by object, top findings with location and quickfix availability. Pass runResultId from createAtcRun, or mainUrl (+ variant) to run ATC and summarize in one call. mainUrl accepts an object URL, a package URL (/sap/bc/adt/packages/zfin) or a transport URL (/sap/bc/adt/cts/transportrequests/DEVK900123).","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcUsers","description":"Retrieves a list of ATC users.","write_action":false,"price_micros":0,"input_schema":null},{"name":"atcWorklists","description":"Retrieves ATC worklists. For runs covering many objects, use startIndex/maxItems to page through the findings-per-object list instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"cdsViewInfo","description":"CDS entity by name in one call: element info (fields with types, associations, extension views, secondary objects) and optionally the DDL source. Pass the entity name (ZI_PRODUCT), not a URL.","write_action":false,"price_micros":0,"input_schema":null},{"name":"checkRepo","description":"Checks a Git repository.","write_action":false,"price_micros":0,"input_schema":null},{"name":"classComponents","description":"List class components (methods, attributes, types). For large classes, use startIndex/maxComponents to page through the top-level component list instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"classIncludes","description":"URLs of the includes of a class (main, definitions, implementations, testclasses, macros) to use with getObjectSource/editObjectSource as they are (no /source/main suffix).","write_action":false,"price_micros":0,"input_schema":null},{"name":"codeCompletion","description":"Get code completion suggestions","write_action":false,"price_micros":0,"input_schema":null},{"name":"codeCompletionElement","description":"Retrieves code completion element information.","write_action":false,"price_micros":0,"input_schema":null},{"name":"codeCompletionFull","description":"Performs full code completion.","write_action":false,"price_micros":0,"input_schema":null},{"name":"collectionFeatureDetails","description":"Retrieves details for a given collection feature.","write_action":false,"price_micros":0,"input_schema":null},{"name":"creatableTypeDetails","description":"List the object types createObject supports, with per-type required fields, label and max name length (SAP-style get_object_type_details). Filter with typeId. For the system-reported creatable catalog see loadTypes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"createAtcRun","description":"Creates an ATC run. Flow: atcCustomizing (system check variant name) -> atcCheckVariant (returns a worklistId) -> createAtcRun -> atcWorklists (findings). Passing a check variant NAME here also works: it is resolved to a worklistId via atcCheckVariant automatically.","write_action":true,"price_micros":0,"input_schema":null},{"name":"ddicElement","description":"Retrieves information about a DDIC element. For complex objects the child element list (fields/associations/secondary objects) can be large; use startIndex/maxItems to page through it instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ddicRepositoryAccess","description":"Accesses the DDIC repository. This can return a large list of object references; use startIndex/maxItems to page through it instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerAttach","description":"Attaches the debugger.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerChildVariables","description":"Retrieves child variables of a debugger variable. If the parent is a large structure/table, use startIndex/maxItems to page through the returned child rows instead of retrieving them all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerDeleteBreakpoints","description":"Deletes breakpoints.","write_action":true,"price_micros":0,"input_schema":null},{"name":"debuggerDeleteListener","description":"Stops a debug listener.","write_action":true,"price_micros":0,"input_schema":null},{"name":"debuggerGoToStack","description":"Navigates to a specific stack entry in the debugger.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerListen","description":"Listens for debugging events.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerListeners","description":"Retrieves a list of debugger listeners.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerSaveSettings","description":"Saves debugger settings.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerSetBreakpoints","description":"Sets breakpoints.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerSetVariableValue","description":"Sets the value of a debugger variable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerStackTrace","description":"Retrieves the debugger stack trace.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerStep","description":"Performs a debugger step.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debuggerVariables","description":"Retrieves debugger variables. If an inspected parent is a large internal table, use startIndex/maxItems to page through the returned variable list instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"deleteObject","description":"Deletes an ABAP object from the system","write_action":true,"price_micros":0,"input_schema":null},{"name":"dropSession","description":"Clear local session cache","write_action":true,"price_micros":0,"input_schema":null},{"name":"dumpDetails","description":"Full formatted analysis of one ABAP short dump as plain text (header, what happened, error analysis, where terminated, source extract, variables, call stack). Pass the dumpId from dumps (or the full self link). Page long dumps with startLine/maxLines.","write_action":false,"price_micros":0,"input_schema":null},{"name":"dumps","description":"List recent ABAP short dumps (runtime errors). By default returns a compact summary per dump (runtime error, exception, program, user, time, where it terminated with source URL and line, top of the call stack) instead of the raw HTML. Filter with from/to (timestamps), user, or a substring in program/runtime error. Use dumpDetails(dumpId) for the full analysis of one dump. This is the root-cause pa","write_action":false,"price_micros":0,"input_schema":null},{"name":"exportPackageSources","description":"Write the sources of a package (and sub-packages) to a local directory in abapGit file layout (zcl_x.clas.abap, zcl_x.clas.testclasses.abap, zi_x.ddls.asddls, zrep.prog.abap …) so local tools (grep, editors, code review, documentation pipelines) can work on them. Read-only on SAP; writes only to the given directory (must be absolute; restricted to MCP_EXPORT_ROOT when set). Classes, interfaces, pr","write_action":true,"price_micros":0,"input_schema":null},{"name":"featureDetails","description":"Retrieves details for a given feature.","write_action":false,"price_micros":0,"input_schema":null},{"name":"feeds","description":"Retrieves a list of feeds.","write_action":false,"price_micros":0,"input_schema":null},{"name":"findCollectionByUrl","description":"Finds a collection by its URL.","write_action":false,"price_micros":0,"input_schema":null},{"name":"findDefinition","description":"Find symbol definition","write_action":false,"price_micros":0,"input_schema":null},{"name":"findObjectPath","description":"Find path for an object","write_action":false,"price_micros":0,"input_schema":null},{"name":"fixEdits","description":"Applies fix edits.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fixProposals","description":"Retrieves fix proposals.","write_action":false,"price_micros":0,"input_schema":null},{"name":"forceUnlock","description":"Release every lock this server holds on the destination (or one objectUrl). With dropSession=true also drops the SAP session afterwards, which frees locks whose handles are already invalid. Use after failed writes left objects locked.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fragmentMappings","description":"Retrieves fragment mappings.","write_action":false,"price_micros":0,"input_schema":null},{"name":"getDataElementProperties","description":"Read a DDIC data element: type (domain or built-in), length, field labels (short/medium/long/heading), search help and flags. Pass the data element URL (/sap/bc/adt/ddic/dataelements/zde).","write_action":false,"price_micros":0,"input_schema":null},{"name":"getDomainProperties","description":"Read a DDIC domain: data type, length, decimals, output settings and fixed values / value table. Pass the domain URL (/sap/bc/adt/ddic/domains/zdom) and optionally version=inactive.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gitCreateRepo","description":"Creates a new Git repository.","write_action":true,"price_micros":0,"input_schema":null},{"name":"gitExternalRepoInfo","description":"Retrieves information about an external Git repository.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gitPullRepo","description":"Pulls changes from a Git repository. For repos with many changed objects, use startIndex/maxItems to page through the list of imported/changed objects returned in the response instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gitRepos","description":"Retrieves a list of Git repositories.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gitUnlinkRepo","description":"Unlinks a Git repository.","write_action":false,"price_micros":0,"input_schema":null},{"name":"inactiveObjects","description":"Get list of inactive objects. For systems with many inactive objects across users, use startIndex/maxItems to page through the list instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"isProposalMessage","description":"Checks if a given object is a proposal message.","write_action":false,"price_micros":0,"input_schema":null},{"name":"listLocks","description":"List the ADT locks this server currently holds on the destination (object, lockHandle, when, whether acquired automatically). Use it when a write fails with a lock/lockHandle error or before forceUnlock.","write_action":false,"price_micros":0,"input_schema":null},{"name":"loadTypes","description":"List the ABAP object types creatable on this system (version-aware). Use BEFORE createObject to pick a valid objtype value such as CLAS/OC. For the raw ADT type catalog see objectTypes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"lock","description":"Lock an ABAP object for editing and keep the lock across calls. Returns the lockHandle; the server also records it, so setObjectSource/editObjectSource/deleteObject/createTestInclude/atcApplyQuickfix on the same object may omit lockHandle while it is held. Not needed for a single write: those tools lock and unlock by themselves when no lock is held. Always unLock when done.","write_action":false,"price_micros":0,"input_schema":null},{"name":"login","description":"Authenticate with ABAP system","write_action":false,"price_micros":0,"input_schema":null},{"name":"logout","description":"Terminate ABAP session","write_action":false,"price_micros":0,"input_schema":null},{"name":"mainPrograms","description":"Retrieves the main programs for a given include.","write_action":false,"price_micros":0,"input_schema":null},{"name":"nodeContents","description":"Retrieves the contents of a node in the ABAP repository tree. For large packages/namespaces, use startIndex/maxItems to page through the node list instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"objectEnhancements","description":"Enhancement implementations (implicit/explicit enhancement points, BAdI-free source enhancements) active on an ABAP source object, with optional source of each implementation. Use before editing standard-adjacent code to see what customer enhancements already hook in.","write_action":false,"price_micros":0,"input_schema":null},{"name":"objectRegistrationInfo","description":"Get registration information for an ABAP object","write_action":false,"price_micros":0,"input_schema":null},{"name":"objectStructure","description":"Get object structure details. For large/complex objects (e.g. classes with many includes), use startIndex/maxItems to page through the structure's top-level array instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"objectStructureElements","description":"Flat list of the members (methods, attributes, events, types, fields…) of an object with name, type, visibility and flags, cheaper than objectStructure/classComponents when you only need an outline. version=inactive reads the inactive version.","write_action":false,"price_micros":0,"input_schema":null},{"name":"objectTypes","description":"Retrieve the ADT object type catalog reported by the system. For picking an objtype to pass to createObject, prefer loadTypes (creatable types).","write_action":false,"price_micros":0,"input_schema":null},{"name":"packageSearchHelp","description":"Performs a package search help.","write_action":false,"price_micros":0,"input_schema":null},{"name":"packageTree","description":"Package hierarchy with its objects in one call: sub-packages (to maxDepth) and, per package, the objects with name, type, URL and description. Cheaper than repeated nodeContents calls; use objectTypes to keep only e.g. CLAS/OC,DDLS/DF.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pushRepo","description":"Pushes changes to a Git repository.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reentranceTicket","description":"Retrieves an SAP reentrance ticket. WARNING: the ticket is a live logon credential and will appear in the conversation/host logs. Disabled unless the server is started with SAP_ALLOW_REENTRANCE_TICKET=1.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remoteRepoInfo","description":"Retrieves information about a remote Git repository.","write_action":false,"price_micros":0,"input_schema":null},{"name":"runClass","description":"Runs a class.","write_action":true,"price_micros":0,"input_schema":null},{"name":"searchObject","description":"Search for objects","write_action":false,"price_micros":0,"input_schema":null},{"name":"setDataElementProperties","description":"Write a DDIC data element (type, field labels, search help…). Read it first with getDataElementProperties, modify the returned properties/metaData objects and pass them back as JSON. Requires lock (lockHandle) and a transport for transportable packages; activate afterwards with activateByName.","write_action":true,"price_micros":0,"input_schema":null},{"name":"setDomainProperties","description":"Write a DDIC domain (type, length, fixed values, value table…). Read it first with getDomainProperties, modify the returned properties/metaData objects and pass them back as JSON. Requires lock (lockHandle) and a transport for transportable packages; activate afterwards with activateByName.","write_action":true,"price_micros":0,"input_schema":null},{"name":"stageRepo","description":"Stages changes in a Git repository. For a large initial package push, use startIndex/maxItems to page through the staged/unstaged/ignored object lists instead of retrieving them all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"switchRepoBranch","description":"Switches the branch of a Git repository.","write_action":false,"price_micros":0,"input_schema":null},{"name":"syntaxCheckCdsUrl","description":"Perform ABAP syntax check with CDS URL","write_action":false,"price_micros":0,"input_schema":null},{"name":"syntaxCheckCode","description":"ABAP syntax check of a source against the context of an existing object: url is the source URL of that object (…/source/main), required because the check resolves types and includes in its context; it is not a standalone check of free text. Provide the source in \"code\" (alias: source), or omit it to reuse the source last read/written for \"url\" this session. Returns line, offset, severity and text ","write_action":false,"price_micros":0,"input_schema":null},{"name":"syntaxCheckTypes","description":"Retrieves syntax check types.","write_action":false,"price_micros":0,"input_schema":null},{"name":"typeHierarchy","description":"Type hierarchy (subtypes or supertypes) of the class/interface at a given source position. Pass the source URL (…/source/main) and the 1-based line/column of the type name; the current source is re-read from SAP unless you pass it in \"source\". superTypes=true lists the inheritance chain upwards, false (default) lists implementers/subclasses.","write_action":false,"price_micros":0,"input_schema":null},{"name":"unLock","description":"Unlock an ABAP object previously locked with lock (requires its lockHandle).","write_action":false,"price_micros":0,"input_schema":null},{"name":"usageReferenceSnippets","description":"Retrieves usage reference snippets (source excerpts) for a list of usage references, e.g. from usageReferences. For large input lists the returned snippets can be large; use startIndex/maxItems to page through the result instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"usageReferences","description":"Find symbol references (system-wide \"where used\"). For widely-used symbols this can return hundreds/thousands of hits; use startIndex/maxItems to page through the result instead of retrieving it all at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"whereUsed","description":"Where-used list by object name: resolves the name with searchObject and returns the usage references (using object, its URL, kind of usage). No URL or source position needed.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":75,"grade":"B","scanned_at":"2026-09-19T21:42:23.583Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-19T21:42:23.578Z","components":{"code":{"score":20,"max":25,"notes":["63 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 4 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/lib/browserLogin.js: …n = browserLogin; const dynamicImport = new Function('specifier', 'return import(specifier)')…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"abap-adt-mcp","version":"2.0.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":6,"publishedAt":"2026-09-08T19:36:41.127Z","repositoryUrl":"git+https://github.com/williansaez/abap-adt-mcp.git","weeklyDownloads":305}],"repo":{"found":true,"owner":"williansaez","repo":"abap-adt-mcp","archived":false,"pushedAt":"2026-09-16T01:07:25Z","stars":9,"forks":3,"openIssues":8,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/23337029?v=4","ownerCreatedAt":"2016-11-08T12:35:51Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/23337029?v=4&s=128","source":"github"},"presence":{"stars":9,"forks":3,"downloadsWeek":305,"license":"MIT","lastPushAt":"2026-09-16T01:07:25.000Z","score":37}}}},"grade_history":[],"reviews":[]}