io.github.palimkarakshay/abap-mcp
NPM · ABAP-MCP · SCANNED SEP 20
Offline SAP ABAP/RAP tools for AI agents: lint, Cloud readiness, released APIs, knowledge.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 32 of 112 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 9 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability89
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 16801 tokens (~91/item across 184 items; 18 tools + 166 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
- Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 18 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the io.github.palimkarakshay/abap-mcp server?
io.github.palimkarakshay/abap-mcp runs locally as an npm package, launched with npx -y abap-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · abap-mcp
claude mcp add palimkarakshay-abap-mcp -- npx -y abap-mcp
{
"mcpServers": {
"palimkarakshay-abap-mcp": {
"command": "npx",
"args": [
"-y",
"abap-mcp"
]
}
}
} {
"servers": {
"palimkarakshay-abap-mcp": {
"command": "npx",
"args": [
"-y",
"abap-mcp"
]
}
}
} codex mcp add palimkarakshay-abap-mcp -- npx -y abap-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"palimkarakshay-abap-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"abap-mcp"
],
"enabled": true
}
}
} openclaw mcp add palimkarakshay-abap-mcp --command npx --arg -y --arg abap-mcp
mcp_servers:
palimkarakshay-abap-mcp:
command: "npx"
args: ["-y", "abap-mcp"] {
"McpServers": {
"palimkarakshay-abap-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"abap-mcp"
]
}
}
} assistant mcp add palimkarakshay-abap-mcp -t stdio -c npx -a -y abap-mcp
{
"mcpServers": {
"palimkarakshay-abap-mcp": {
"command": "npx",
"args": [
"-y",
"abap-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Sept 26 −2
- Stability: pass → 0.80 functional
- 15 Sept 26 0
- Stability: 0.97 → pass security
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 11 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 10 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- Schema quality: fail → pass ▲ functional
- Stability: pass → 0.83 functional
- Package version: 0.10.0 → 0.12.0 functional
- Package version: 0.10.0 → 0.11.0 functional
- 9 Sept 26 0
- Stability: 0.97 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/abap-mcp@0.12.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 112 packages
| Packages resolved | 112 |
|---|---|
| Stale | 32 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
check_cloud_readiness Check ABAP Cloud readiness ~523
Assess how far ABAP source is from ABAP Cloud (Clean Core tier 1) by parsing it twice — once at a classic baseline (default v758) and once at version Cloud — and diffing: findings that appear only at Cloud are genuine cloud blockers (statements ABAP Cloud removed), reported in categories (dynpro, list output, native SQL, report events, …) with a transparent score, an A–D tech-debt grade and a verdict; findings already present at the baseline are reported separately as broken code, not migration work. It also reports snapshot-dated released-API observations for direct table and function-module references the parser can extract; those stay separate from the language-level blocker count and score. Use this when someone asks 'is this code cloud-ready / Clean Core compliant / S/4HANA-cloud safe', before porting classic ABAP into an ABAP Cloud environment, or for a graded tech-debt assessment of an abapGit export. It is static and parser-level: its released-API scan is not exhaustive dependency discovery, it does not connect to any SAP system or run ATC, and a 'ready' verdict means no detected language-level blockers — not a certification. Our A–D grade is blocker density (see gradeMeaning), NOT SAP's own Clean Core Level A–D; a target system's own released-API ATC check ("Usage of Released APIs (Cloudification Repository)" for SAP Cloud ERP Public Edition / "Usage of APIs (Cloudification Repository)" for SAP Cloud ERP Private Edition / on-premise, via variants such as ABAP_CLEAN_CORE_DEVELOPMENT / ABAP_CLEAN_CORE_READINESS) remains authoritative. Example: check_cloud_readiness({ "files": [ { "source": "REPORT zold.\nWRITE: / 'hi'." } ] }).
| Name | Type | Req | Description |
|---|---|---|---|
| baselineVersion | string | – | Classic ABAP version the code is assumed to run on today; used to separate broken-anyway code from cloud blockers. |
| edition | string | – | SAP edition of the bundled Cloudification snapshot to check against: "s4hc" (default, SAP Cloud ERP Public Edition), "btp" (SAP BTP ABAP environment), or "pce" (SAP Cloud ERP Private Edition / on-pre… |
| files | array | yes | Source files to analyze, up to 32 per call, 100k chars each. |
| Name | Type | Req | Description |
|---|---|---|---|
| baselineVersion | string | yes | The baseline used. |
| brokenAtBaseline | array | yes | Findings that fail even at the baseline version — fix first, they are not migration items. |
| categories | array | yes | – |
| cleanCoreVocabulary | object | yes | SAP's real ATC vocabulary for released-API/Clean Core checks — see docs/atc-vocabulary.json (F04). |
| cloudBlockerCount | number | yes | Statements valid at the baseline but not in ABAP Cloud. |
| edition | string | yes | SAP edition the released-API findings were checked against. |
| fileCount | number | yes | Files analyzed — the denominator of the grade's density banding. |
| grade | string | yes | Blocker-density tech-debt grade (see gradeMeaning): A = no blockers, B = ≤ 0.5 blockers/file, C = ≤ 2 blockers/file, D = more. The same objective count as the score, sized for assessment reports. |
| gradeMeaning | string | yes | What `grade` means: a banding of blockers per file. NOT SAP's own Clean Core Level A–D (see cleanCoreVocabulary.cleanCoreLevels for those) — do not conflate the two. |
| releasedApiFindings | array | yes | Released-API observations from the bundled SAP Cloudification snapshot (deprecated-API usage, direct non-released table access with successor hints, and which edition/source answered each one). Infor… |
| releasedApiSnapshotDate | string | yes | Date of the bundled released-API snapshot the releasedApiFindings reflect. |
| scopeNote | string | yes | Exactly what this check does and does not cover. |
| score | number | yes | 100 − 5×blockers, floored at 0. Transparent, not an oracle. |
| verdict | string | yes | Banded verdict from the blocker count (0 / ≤5 / ≤20 / >20). |
No examples provided.
check_rap_behavior Check a RAP behavior/service definition ~669
Check RAP behavior definitions (.bdef.asbdef) and CDS service definitions (.srvd.srvdsrv) for syntax and structural-consistency defects, offline, using abap-mcp's own BDL/SDL parser — abaplint does not deep-parse either file type (it stores a BDEF behind a single regex and a SRVD not at all), so this is the only static feedback these files get without a system. Reports the draft/etag/lock/authorization/numbering consistency set, strict-mode obligations, action/operation/validation/determination/side-effect coherence, projection 'use' statements against the base BDEF, and service 'expose' sets against the CDS entities you pass in the same call; with abapRelease set, it also flags constructs newer than that release from a bundled, dated copy of SAP's RAP BDL feature table. Use this when you have written or generated a BDEF/SRVD (by hand, from scaffold_rap_bo, or from a model that may have invented RAP syntax) and want it checked before it reaches ADT — and pass the base BDEF and the .ddls.asddls views alongside it, because the cross-file rules only run on files present in the call. It does NOT connect to SAP, does not activate anything, does not run ATC, cannot see DDIC tables, behavior-pool classes or CDS field types, and cannot certify that ADT would accept the file — the grammar is derived from SAP's published feature tables plus a 102-file corpus of Apache-2.0 SAP sample sources, so constructs it does not recognise are reported as info, never as errors. For ABAP classes use lint_abap; for a new BO use scaffold_rap_bo; for what a release added use explain_abap_release. Example: check_rap_behavior({ "files": [ { "filename": "zr_travel.bdef.asbdef", "source": "managed implementation in class zbp_travel unique;\nstrict ( 2 );\nwith draft;\n\ndefine behavior for ZR_Travel alias Travel\npersistent table ztravel\nlock master\n{ create; }\n" } ], "abapRelease": "2508" }).
| Name | Type | Req | Description |
|---|---|---|---|
| abapRelease | string | – | Target ABAP Cloud release, e.g. "2508". When set, constructs whose SAP-documented minimum release is newer are reported as warnings (rule RAP900) from the bundled, dated feature table. Omit to skip r… |
| files | array | yes | The BDEF/SRVD files to check, plus any .ddls.asddls or base .bdef.asbdef you want cross-checked in the same call. Up to 32 files, 100k chars each — passing the base BDEF and the CDS views is what tur… |
| strict | boolean | – | Run the strict-mode rules even when the BDEF does not declare strict/strict(2) — use it to see what a BO would have to fix before it can be released under the C0/C1 contract. Default false: strict ru… |
| Name | Type | Req | Description |
|---|---|---|---|
| files | array | yes | One row per supplied file: what it was taken to be, and whether it parsed. |
| findings | array | yes | Every rule finding, sorted by file, line, column, rule id. |
| grammarVersion | string | yes | Which BDL/SDL grammar read the files, e.g. "bdl/2026-09-10". |
| releaseGate | object | – | Present only when abapRelease was passed. |
| rulesVersion | string | yes | Which rule set judged them, e.g. "rap-rules/1.0.0". |
| scopeNote | string | yes | Exactly what this checker proves and does not prove — abaplint did not parse these files, and ADT remains the authority. |
| summary | object | yes | Counts, including the two honesty counters that make coverage gaps measurable. |
| validated | string | yes | Checked by abap-mcp's own RAP parser + rule set at the stamped grammar/rules version. It does NOT claim abaplint parsed it, that SAP's parser would accept it, or that the object would activate. |
No examples provided.
check_released_api Check ABAP released-API status ~534
Look up ABAP repository objects (DB tables, CDS view entities, function modules, classes, interfaces, …) in SAP's published ABAP Cloudification list and report, per object, whether it is a 'released' API (safe to use in ABAP Cloud / Clean Core), 'deprecated' (released but being retired), or 'not-released' (a classic/internal object that is not a public API — e.g. most classic DDIC tables) — with SAP's own successor(s) when the snapshot has any, a curated CDS successor hint otherwise, and a classicAPI/noAPI/internalAPI classification where SAP publishes one. This reflects SAP's official per-edition Cloudification lists as bundled in this package (default edition "s4hc", snapshot 2026-09-10); it ships offline with the server. Use this when you need to know if your code may reference a given object in ABAP Cloud, or which released CDS view to use instead of a classic table. This explicit lookup complements check_cloud_readiness's limited, source-extracted released-API observations and can check objects that do not appear in the supplied source. It does not connect to any SAP system, does not run ATC, and is only as current as the bundled snapshot — a target system's own released-API ATC check ("Usage of Released APIs (Cloudification Repository)" for SAP Cloud ERP Public Edition / "Usage of APIs (Cloudification Repository)" for SAP Cloud ERP Private Edition / on-premise, via variants such as ABAP_CLEAN_CORE_DEVELOPMENT / ABAP_CLEAN_CORE_READINESS) remains authoritative; treat an 'absent from the list' result as 'not-released as of the snapshot', not as proof. Example: check_released_api({ "objects": ["MARA", "I_Product", "BAPI_MATERIAL_GET_DETAIL"] }).
| Name | Type | Req | Description |
|---|---|---|---|
| edition | string | – | SAP edition of the bundled Cloudification snapshot to check against: "s4hc" (default, SAP Cloud ERP Public Edition), "btp" (SAP BTP ABAP environment), or "pce" (SAP Cloud ERP Private Edition / on-pre… |
| objects | array | yes | Objects to check, 1–200 per call. Each is a bare name string or a { name, type? } object, e.g. ["MARA", { "name": "I_Product", "type": "CDS_STOB" }]. |
| Name | Type | Req | Description |
|---|---|---|---|
| edition | string | yes | SAP edition these results were checked against. |
| results | array | yes | – |
| snapshotDate | string | yes | Date of the bundled SAP Cloudification snapshot these results reflect. |
| source | string | yes | URL of the SAP Apache-2.0 source the snapshot was built from. |
No examples provided.
compare_abap Compare two ABAP versions ~464
Compare a BEFORE and an AFTER version of ABAP source and report what a rework actually changed: lint findings resolved and introduced (matched by content, so moved-but-unchanged code is not noise), cloud-blocker / score / A–D grade movement from the same dual-parse diff as check_cloud_readiness, and structural changes — classes, methods and FORMs added or removed. Use this when reviewing a refactor, a modernization step or an AI-generated rewrite of an existing object and you need an objective better-or-worse verdict instead of eyeballing a diff. It is not a textual diff tool (use git diff to see the edits) and it cannot judge functional equivalence — behavior can change while every number improves; it does not connect to any SAP system. Example: compare_abap({ "before": [ { "source": "REPORT zr.\nWRITE 1." } ], "after": [ { "source": "REPORT zr.\nWRITE 2." } ] }).
| Name | Type | Req | Description |
|---|---|---|---|
| abapVersion | string | – | ABAP language version both sides are linted against. "v758" (default) is current on-prem; "Cloud" is ABAP Cloud. |
| after | array | yes | The AFTER sources — the reworked version being judged. Up to 32 files, 100k chars each. |
| before | array | yes | The BEFORE sources — the current/old version of the object(s). Up to 32 files, 100k chars each. |
| focus | string | – | Curated rule-pack lens: report only rules carrying this abaplint tag — "Performance" for a tuning pass, "Security" for a security sweep, "Styleguide" for Clean ABAP adherence. Parser errors always su… |
| preset | string | – | Lint preset applied identically to both sides: "style" (default) for isolated snippets, "full" when every referenced object is provided, "syntax-only" for parser errors only. |
| rules | object | – | abaplint rule overrides applied to both sides, e.g. { "line_length": { "length": 120 } }. |
| Name | Type | Req | Description |
|---|---|---|---|
| after | object | yes | Lint and readiness numbers for the AFTER side. |
| before | object | yes | Lint and readiness numbers for the BEFORE side. |
| introduced | array | yes | Findings present only after — regressions to fix. |
| matchNote | string | yes | How findings were matched and what the numbers do and do not mean. |
| outlineChanges | object | yes | – |
| resolved | array | yes | Findings present before but gone after — improvements. |
| unchangedCount | number | yes | Findings present on both sides (content-matched). |
No examples provided.
explain_abap_release Explain ABAP Cloud / RAP release deltas ~609
Look up what changed in ABAP Cloud, CDS, ABAP SQL, RAP, EML, ABAP Unit, ATC and the development tools across the 2502 to 2608 release trains plus ABAP Platform 2025 (SAP_BASIS 816), from a dated knowledge base bundled with this package. Each row carries an original summary, an optional syntax sketch, the release and ABAP release, the products it was verified for, the cited SAP source URL, and a confidence flag ("confirmed" = fact-checked, "reported" = single-source). Use this when you are about to write or review ABAP and need to know whether a language, CDS or RAP feature exists in the target release — for example before using CDS table entities as draft persistence, BUFFER ON, RAP change documents, global side effects, or a feature-control attribute. Filter by sinceRelease to see only what is new since the customer's current level. Rows flagged pre-2502 exist to stop an agent presenting an established feature (business events, late numbering, prechecks, bgPF) as a 2025-26 novelty. It does not connect to any SAP system, does not read release notes live, and is not a complete changelog — it is a curated snapshot (curated 2026-09-10) and the target system's own release notes stay authoritative. For released-API state of a specific object use check_released_api; for Clean Core levels and ATC vocabulary use search_sap_knowledge. Example: explain_abap_release({ "sinceRelease": "2605", "kind": "rap" }).
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string | – | Restrict to one facet: "language", "cds", "sql", "rap", "testing", "atc", "tooling" or "eml". Use it to answer "what is new in RAP" without wading through tooling rows. |
| limit | integer | – | Maximum rows to return, 1 to 200; defaults to 60. Raise it only when you really want a full release dump. |
| product | string | – | Restrict to one product: "btp" (SAP BTP ABAP environment), "s4hc-public", "s4hc-private" or "onprem". Rows list the products their source actually verified. |
| sinceRelease | string | – | Return only rows at this release or newer, chronologically: pre-2502, 2502, 2505, 2508, platform-2025, 2511, 2602, 2605, 2608. Use the customer's current level, e.g. "2508", to see what upgrading buy… |
| topic | string | – | Free-text topic matched against row ids, titles, keywords and summaries, e.g. "draft table entity", "side effects", "change documents". Omit it to browse a whole release or facet. |
| Name | Type | Req | Description |
|---|---|---|---|
| curatedDate | string | yes | Date the bundled knowledge base was curated. |
| deltas | array | yes | Matching release-delta rows, newest release first. |
| matchCount | number | yes | How many rows matched before the limit was applied. |
| scopeNote | string | yes | Dated-knowledge caveat to repeat to the user. |
| truncated | boolean | yes | True when more rows matched than were returned. |
No examples provided.
explain_abap_rule Explain an abaplint rule ~152
Explain one abaplint rule in depth: title, description, extended rationale (often citing the Clean ABAP style guide), tags, documentation URL, and good/bad code examples where the rule defines them. Use this when a lint_abap or check_cloud_readiness finding needs justification — to explain to a developer why the finding matters and how to fix it. It does not run analysis and only knows abaplint rules; SAP ATC check documentation is out of scope. Example: explain_abap_rule({ "rule": "exit_or_check" }).
| Name | Type | Req | Description |
|---|---|---|---|
| rule | string | yes | The abaplint rule key from a finding, e.g. "exit_or_check" or "obsolete_statement". |
| Name | Type | Req | Description |
|---|---|---|---|
| badExample | string | – | Code the rule flags, if the rule ships an example. |
| docsUrl | string | yes | Documentation URL. |
| extendedInformation | string | yes | Extended rationale; may cite Clean ABAP. |
| goodExample | string | – | The compliant version, if the rule ships one. |
| key | string | yes | Rule key. |
| shortDescription | string | yes | One-line description. |
| tags | array | yes | abaplint tags. |
| title | string | yes | Rule title. |
No examples provided.
fix_abap Fix ABAP automatically (deterministic) ~386
Apply abaplint's own machine-applicable corrections to ABAP sources and return the corrected code: keyword casing, obsolete statements with defined modern replacements (MOVE → =, and every other rule that ships a concrete edit), applied in verified batches — after each batch the result is re-parsed, and a batch that would break the parse is discarded, so the output is parser-guaranteed, never guessed. Findings WITHOUT a machine fix come back in `remaining` — those need judgment (yours or an agent's, proven afterwards with compare_abap). Use this when someone highlights code and wants it corrected to best practices / modern syntax instantly, as the mechanical first pass before any AI rewriting, or to modernize a file before review. It does not invent rewrites (only fixes abaplint defines), does not resolve cloud blockers that need re-architecture (dynpro, WRITE output — see plan_cloud_migration), and is not a formatter (format_abap pretty-prints without changing statements). Example: fix_abap({ "files": [ { "source": "report zdemo.\ndata lv_x type i.\nmove 5 to lv_x." } ] }).
| Name | Type | Req | Description |
|---|---|---|---|
| abapVersion | string | – | ABAP language version to parse and fix against ("Cloud" for ABAP Cloud code). |
| files | array | yes | Source files to analyze, up to 32 per call, 100k chars each. |
| preset | string | – | Which ruleset supplies the fixes: "style" (default) fits isolated snippets; "full" expects all referenced objects provided; "syntax-only" yields no style fixes. |
| rules | object | – | abaplint rule overrides merged onto the preset, e.g. { "keyword_case": { "style": "lower" } } — fixes follow your org's pack, same as lint_abap. |
| Name | Type | Req | Description |
|---|---|---|---|
| files | array | yes | – |
| fixed | array | yes | What was fixed (capped at 200 entries; fixedCount carries the total). |
| fixedCount | number | yes | Total machine fixes applied. |
| iterations | number | yes | Fix batches applied (each batch re-parses before the next). |
| remaining | array | yes | Findings with no machine fix — judgment work; rework them and verify with compare_abap. |
| stoppedEarly | string | – | Present when the safety valve discarded a batch or the batch cap was reached. |
No examples provided.
format_abap Format ABAP source ~162
Pretty-print one ABAP source: normalize keyword casing and indentation using abaplint's formatter — the offline equivalent of Pretty Printer in ADT/SE80. Use this when generated or hand-written ABAP has inconsistent casing/indentation and you want it normalized before review or commit. It does not reformat CDS views or behavior definitions, does not change any logic, and fails cleanly on source it cannot parse. Example: format_abap({ "source": "report ztest.\nwrite 'hi'." }).
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | – | abapGit-style name if known, e.g. "zcl_x.clas.abap"; inferred from the source when omitted. |
| source | string | yes | The complete ABAP source to format. |
| Name | Type | Req | Description |
|---|---|---|---|
| formatted | string | yes | The pretty-printed source. |
No examples provided.
get_abap_agent_rules Get the AGENTS.md rules block for an ABAP repo ~372
Generate the ABAP section of a repository's AGENTS.md / CLAUDE.md: the lint-before-commit rule, the ABAP Cloud readiness gate, released-API discipline, scaffold-first, the offline unit-test loop, and the division of labour with an online ADT MCP server. Use this when you set up a new ABAP repo for agentic development or want a team's coding-agent rules to reference the abap-mcp tools consistently. It does not write the file (paste the returned markdown yourself), does not read the workspace, and is not a substitute for the project's own conventions — it encodes the tool contract, nothing project-specific beyond the parameters you pass. Example: { "target": "Cloud", "pairedWith": ["sap-adt-mcp"], "runEnabled": true }.
| Name | Type | Req | Description |
|---|---|---|---|
| edition | string | – | Released-API edition the readiness gate should quote: "s4hc" (S/4HANA Cloud Public Edition), "btp" (BTP ABAP Environment), "pce" (Private Cloud Edition). |
| packagePrefix | string | – | Customer namespace/prefix for new objects, e.g. "Z", "Y" or "/ACME/". |
| pairedWith | array | – | Online ADT MCP servers the agent can also use: "sap-adt-mcp" (SAP official, ships with ADT), "abap-adt-mcp" (community), or "none". |
| runEnabled | boolean | – | True when run_abap_unit is enabled (ABAP_MCP_ENABLE_RUN=1) so the rules prescribe the offline test loop. |
| target | string | – | "Cloud" (default) for ABAP Cloud / Steampunk repos, "classic" for on-prem baselines that still migrate. |
| Name | Type | Req | Description |
|---|---|---|---|
| markdown | string | yes | The AGENTS.md section, ready to paste. |
| ruleCount | number | yes | Number of rules emitted. |
No examples provided.
get_abap_outline Get ABAP source outline ~237
Return the structural outline of ABAP sources — classes (with methods, visibility, attributes, interfaces, inheritance), interfaces, and FORM routines — without you having to read the whole file. Use this when navigating a large class or legacy program to decide which part to read or edit next; it is the cheap first call before pulling thousands of lines into context. Set mermaid: true to also get the structure as a Mermaid classDiagram (inheritance, interface realization, method visibility) for documentation visuals. It does not return method bodies or analyze code quality (use lint_abap for that), and CDS/behavior-definition files yield an empty outline. Example: get_abap_outline({ "files": [ { "filename": "zcl_big.clas.abap", "source": "CLASS zcl_big DEFINITION…" } ] }).
| Name | Type | Req | Description |
|---|---|---|---|
| files | array | yes | Source files to analyze, up to 32 per call, 100k chars each. |
| mermaid | boolean | – | Also return the outline as Mermaid classDiagram source — render it anywhere Mermaid renders (GitHub, docs sites) for an instant structure diagram. |
| Name | Type | Req | Description |
|---|---|---|---|
| mermaid | string | – | Mermaid classDiagram source for all files; present only when requested. |
| outlines | array | yes | – |
No examples provided.
get_object_dependencies Get a dependency graph of ABAP objects ~398
Build a dependency graph over the provided ABAP sources for migration sequencing and impact reading: nodes are the provided objects plus every DB table / function module they reference (annotated with released-API state and CDS successor from the bundled SAP snapshot); edges are tiered by how they were derived — parser-level db-access and call-function references, structural inherits/implements from class definitions, and word-boundary references-textual matches between the provided objects. Optional Mermaid flowchart output. Use this when deciding what to migrate first (leaves before roots), what a rework might break, or which objects pull non-released tables into the picture — the sequencing companion to plan_cloud_migration. It is not a system where-used list: it only sees the text you pass, textual edges cannot see dynamic calls, and an absent edge is not proof of independence — a system's where-used and ATC remain authoritative. Example: get_object_dependencies({ "files": [ { "filename": "zcl_a.clas.abap", "source": "…" }, { "filename": "zcl_b.clas.abap", "source": "…" } ], "mermaid": true }).
| Name | Type | Req | Description |
|---|---|---|---|
| abapVersion | string | – | ABAP language version used for parsing when extracting object references. |
| edition | string | – | SAP edition of the bundled Cloudification snapshot to check against: "s4hc" (default, SAP Cloud ERP Public Edition), "btp" (SAP BTP ABAP environment), or "pce" (SAP Cloud ERP Private Edition / on-pre… |
| files | array | yes | Source files to analyze, up to 32 per call, 100k chars each. |
| mermaid | boolean | – | Also return a Mermaid flowchart (graph LR) of the dependency graph for instant visualization. |
| Name | Type | Req | Description |
|---|---|---|---|
| edges | array | yes | – |
| edition | string | yes | SAP edition the nodes' released-API states were checked against. |
| mermaid | string | – | Mermaid flowchart when requested. |
| nodes | array | yes | – |
| releasedApiSnapshotDate | string | yes | Date of the bundled released-API snapshot behind the annotations. |
| scopeNote | string | yes | Exactly what the graph can and cannot claim. |
No examples provided.
lint_abap Lint ABAP source ~666
Run abaplint static analysis over ABAP, CDS or behavior-definition sources and return structured findings (rule key, message, severity, file/line/column, the offending line, and a docs URL per finding). Use this when you have written or modified ABAP code and want style and correctness feedback before it goes anywhere near a system — it runs entirely offline on the provided text. It does not connect to any SAP system, does not run ATC, and cannot judge whether referenced objects exist unless you provide them in the same call (preset "style", the default, skips whole-program checks for that reason; preset "full" enables them when you provide every dependency). A focus tag turns a pass into a themed review (performance / security / Clean ABAP style) without hand-picking rules; rule overrides layer a team's own pack on top. For an ABAP-Cloud migration verdict use check_cloud_readiness instead. When the call contains a .bdef.asbdef or .srvd.srvdsrv file, abap-mcp's own RAP checker also runs over the whole set and its findings are merged in under rap/ rule keys (abaplint does not deep-parse those file types, so without this they would silently produce nothing); set rapCheck:false to opt out, or call check_rap_behavior for the full structured RAP report with hints, confidence and the scope note. Example: lint_abap({ "files": [ { "source": "REPORT ztest.\nDATA foo TYPE i.\nIF foo = 1.\nENDIF." } ] }).
| Name | Type | Req | Description |
|---|---|---|---|
| abapVersion | string | – | ABAP language version to parse against. "v758" (default) is current on-prem; "Cloud" is ABAP Cloud / Steampunk. |
| files | array | yes | Source files to analyze, up to 32 per call, 100k chars each. |
| focus | string | – | Curated rule-pack lens: report only rules carrying this abaplint tag — "Performance" for a tuning pass, "Security" for a security sweep, "Styleguide" for Clean ABAP adherence. Parser errors always su… |
| preset | string | – | "style" (default): abaplint default rules minus whole-program semantic checks — right for isolated snippets. "full": every default rule, expects all referenced objects provided. "syntax-only": parser… |
| rapCheck | boolean | – | Also run abap-mcp's own RAP behavior/service-definition checker when the call contains a .bdef.asbdef or .srvd.srvdsrv file, merging its findings under namespaced "rap/RAP026"-style rule keys. Defaul… |
| rules | object | – | abaplint rule overrides merged onto the preset (and onto a focus filter), e.g. { "line_length": { "length": 120 }, "7bit_ascii": false } — encode an org's best-practice pack here. |
| Name | Type | Req | Description |
|---|---|---|---|
| fileCount | number | yes | Number of files analyzed. |
| findings | array | yes | – |
| rapChecked | boolean | yes | True when the RAP checker ran (the call held a BDEF/SRVD and rapCheck was on); its findings carry rap/ rule keys. |
| rapScopeNote | string | – | Present only when rapChecked is true: what the RAP checker proves and does not prove. |
| truncated | boolean | yes | True if the list was cut short — more than 500 findings, or the RAP checker hit one of its own caps. |
No examples provided.
list_abap_rules List abaplint rules ~175
List the abaplint rules this server can check, optionally filtered by a free-text query or a tag, returning key, title, one-line description, tags and a documentation URL per rule. Use this when deciding which rules to enable or override in lint_abap, or to discover what a Clean-ABAP-style check exists for. It does not run any analysis and does not change configuration — it is a read-only catalog. Example: list_abap_rules({ "query": "obsolete" }).
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | – | Case-insensitive substring matched against rule key, title and description, e.g. "select" or "obsolete". |
| tag | string | – | Filter by abaplint tag, e.g. "Styleguide", "Security", "Performance", "Quickfix", "SingleFile". |
| Name | Type | Req | Description |
|---|---|---|---|
| count | number | yes | Number of rules returned. |
| rules | array | yes | – |
No examples provided.
plan_cloud_migration Plan an ABAP Cloud migration ~407
Turn ABAP sources into an ordered, phased ABAP Cloud migration backlog: runs the same dual-parse analysis as check_cloud_readiness, then arranges every blocker into per-object work items across consulting-ordered phases — repair-the-baseline first (broken code is not migration work), then mechanical quick wins, core rework of removed statements, UI/output re-architecture, and a separate snapshot-dated released-API remediation phase. Each work item carries an S/M/L effort band, a remediation recipe and sample locations; each phase carries a goal and objective, re-checkable exit criteria. Use this when someone asks 'plan the migration', 'what do we tackle first', or wants a work breakdown / task backlog instead of raw findings — the natural next call after check_cloud_readiness says rework is needed. It is a deterministic re-arrangement of the readiness analysis: it does not estimate person-days, does not modify any code, and inherits every readiness limitation (static, parser-level, snapshot-dated released-API data — a system's ATC stays authoritative). Example: plan_cloud_migration({ "files": [ { "source": "REPORT zold.\nWRITE: / 'hi'.\nCALL SCREEN 100." } ] }).
| Name | Type | Req | Description |
|---|---|---|---|
| baselineVersion | string | – | Classic ABAP version the code runs on today; used to separate broken-anyway code (phase: repair the baseline) from real migration work. |
| edition | string | – | SAP edition of the bundled Cloudification snapshot to check against: "s4hc" (default, SAP Cloud ERP Public Edition), "btp" (SAP BTP ABAP environment), or "pce" (SAP Cloud ERP Private Edition / on-pre… |
| files | array | yes | Source files to analyze, up to 32 per call, 100k chars each. |
| Name | Type | Req | Description |
|---|---|---|---|
| phases | array | yes | – |
| releasedApiSnapshotDate | string | yes | Date of the bundled released-API snapshot behind the released-api phase. |
| scopeNote | string | yes | Exactly what the underlying analysis does and does not cover. |
| suggestedLoop | string | yes | How to execute and prove each item: the fix → compare_abap → re-check loop. |
| summary | object | yes | Roll-up of the plan and the readiness numbers it rearranges. |
No examples provided.
scaffold_abap_ai_sdk Scaffold an ABAP AI SDK (ISLM) class ~783
Generate one validated global ABAP class that calls the SAP Generative AI Hub through the ABAP AI SDK powered by Intelligent Scenario Lifecycle Management (ISLM) — SAP's own client library, not a third-party SDK with a similar name. Seven interaction shapes: "string" (single prompt via EXECUTE_FOR_STRING), "messages" (system/user/assistant turns plus token-count/finish-reason retrieval), "prompt-template" (CL_AIC_ISLM_PROMPT_TPL_FACTORY, never the non-existent CL_AIC_PROMPT_TEMPLATE), "function-calling" (the tool-call DO-loop, with the upstream SAP sample's undeclared-tool_calls bug fixed — the table is declared and populated before ADD_TOOL_RESULTS), "structured-output" (DEFINE_RESPONSE_FORMAT->JSON_SCHEMA->FROM_STRING), "streaming" (IF_AIC_ADT_COMPLETION_API delta loop), and "orchestration" (the separate Orchestration API, which does not yet support structured output, function calling or media input). Every generated class carries an injectable constructor seam (an OPTIONAL api parameter) so it can be unit-tested with cl_abap_testdouble instead of a live ISLM scenario; pass withUnitTest for a FOR TESTING skeleton using that seam. Generated files are round-tripped through abaplint (version Cloud, preset syntax-only) together with abap-mcp's own bundled stub declarations of the referenced IF_AIC_*/CL_AIC_*/CX_AIC_* types, labelled validated:"abaplint-syntax" — this proves the ABAP parses, not that it matches SAP's real API surface exactly. Use this when you are adding a Generative-AI-Hub call to ABAP Cloud code and want correct, cited API shapes instead of guessing class/method names from memory (a common LLM hallucination surface — e.g. inventing CL_AIC_PROMPT_TEMPLATE, or copying SAP's own buggy function-calling sample verbatim). It does NOT call any LLM, does NOT deploy or activate anything, and does NOT create the SAP_COM_0A69 communication arrangement or the Intelligent Scenario (INTS/INTM) itself — those are manual ISLM/BTP-cockpit steps returned in setupStep…
| Name | Type | Req | Description |
|---|---|---|---|
| className | string | – | Generated global class name, e.g. "ZCL_AI_TRAVEL_SUMMARY". Defaults to "<prefix>CL_AI_<INTERACTION>" when omitted; must start with the chosen prefix. |
| functions | array | – | Tool/function definitions for interaction "function-calling"; ignored for every other interaction. A single illustrative demo function is generated when this is left empty. |
| interaction | string | yes | Which SAP AI SDK interaction shape to generate: "string", "messages", "prompt-template", "function-calling", "structured-output", "streaming", or "orchestration" — see the tool description for what e… |
| prefix | string | – | Customer namespace prefix for both scenarioName and className. |
| scenarioName | string | yes | ISLM intelligent-scenario name the generated class calls via CREATE_INSTANCE( ), e.g. "ZDEMO_AI_SCENARIO". Must start with the chosen prefix; the scenario itself must already exist, be published, dep… |
| withUnitTest | boolean | – | Also generate a FOR TESTING skeleton class reusing the injectable seam with cl_abap_testdouble; the skeleton asserts a TODO fail( ) until you replace it with real given/when/then logic. |
| Name | Type | Req | Description |
|---|---|---|---|
| constraints | array | yes | Documented limits: temperature range, per-instance parameter persistence, catchable error codes via IF_AIC_API_ERROR, ABAP Cross Trace debugging, and — for interaction "orchestration" only — the thre… |
| files | array | yes | The generated class file, plus a testclasses file when withUnitTest is true. |
| nextSteps | array | yes | What to fill in or verify next, specific to the chosen interaction. |
| scopeNote | string | yes | Exactly what this tool does and does not do — no LLM calls, no scenario creation, no deployment, no network access. |
| setupSteps | array | yes | The manual AI Core / ISLM configuration this code depends on at runtime (extended service plan, SAP_COM_0A69, INTS/INTM, F4469/F4470 deploy+activate) — this tool performs none of it. |
| validated | string | yes | Top-level echo of the file-level label: syntax-checked against bundled stubs only, not SAP's real API surface. |
| validationIssues | array | yes | abaplint findings on the generated sources — empty on a clean round-trip. |
No examples provided.
scaffold_abap_unit Scaffold ABAP Unit test classes ~320
Generate the local ABAP Unit test-class include (<class>.clas.testclasses.abap) for each global class in the provided sources: a FOR TESTING class (RISK LEVEL HARMLESS, DURATION SHORT) with a setup method that instantiates the class under test and one skeleton test method per public method. Every skeleton fails loudly with cl_abap_unit_assert=>fail('TODO …') so generated-but-empty tests can never masquerade as coverage; abstract classes and parameterized constructors get TODO guidance instead of a blind NEW #( ). Generated code is round-tripped through abaplint together with the class under test before being returned. Use this when a class has no tests yet and you want a correct, ready-to-fill test harness — the natural first step of test-driven rework and the 'add tests before we migrate this' consulting task. It does not invent assertions or test data (the given/when/then substance is yours or the agent's to write), does not create test doubles, and cannot run the tests — ADT/CI does that. Example: scaffold_abap_unit({ "files": [ { "filename": "zcl_travel.clas.abap", "source": "CLASS zcl_travel DEFINITION PUBLIC.\n…" } ] }).
| Name | Type | Req | Description |
|---|---|---|---|
| abapVersion | string | – | ABAP language version the generated tests are validated against ("Cloud" for ABAP Cloud classes). |
| files | array | yes | Source files to analyze, up to 32 per call, 100k chars each. |
| Name | Type | Req | Description |
|---|---|---|---|
| files | array | yes | – |
| nextSteps | array | yes | What to do with the generated skeletons, in order. |
| skipped | array | yes | Inputs no test class was generated for, with the reason (interfaces, programs, FOR TESTING classes…). |
| validationIssues | array | yes | abaplint findings on generated code — empty on a clean round-trip. |
No examples provided.
scaffold_rap_bo Scaffold a RAP business object ~460
Generate the complete, canonical RAP managed business-object stack for one root entity: root CDS view entity, behavior definition (managed, strict(2), optional draft), behavior implementation class with handler locals, projection view with transactional_query, projection behavior definition, UI metadata extension, and an OData V4 service definition — plus a suggested table DDL, the activation order, and next steps. Use this when starting a new RAP business object in ABAP Cloud or S/4HANA and you want correct boilerplate that follows the SAP /DMO reference shape instead of writing it by hand. Generated classes and CDS views are round-trip validated through abaplint at ABAP-Cloud level before being returned; behavior and service definitions are canonical templates (abaplint does not parse those deeply) and ADT activation is the final check. It does not create the table or the service binding (binding is not a source artifact — create it in ADT), and it generates single-entity BOs: model compositions (parent-child) yourself for now. Example: scaffold_rap_bo({ "entityName": "Travel", "sqlTable": "ztravel", "keyField": "travel_id", "fields": [ { "name": "agency_id", "type": "abap.char(6)" } ], "draft": true }).
| Name | Type | Req | Description |
|---|---|---|---|
| draft | boolean | – | Generate draft handling (draft table reference, draft actions, use draft). |
| entityName | string | yes | Entity name in UpperCamelCase, e.g. "Travel" — drives ZR_/ZC_/ZBP_/ZUI_ artifact names. |
| fields | array | – | Non-key business fields. Admin fields (created_by/created_at/…) are added automatically. |
| keyField | string | yes | snake_case key field of that table, e.g. "travel_id". |
| managedUuidKey | boolean | – | true (default): UUID key filled by managed numbering — modern RAP default. false: the caller provides the key on create. |
| prefix | string | – | Customer namespace prefix for all generated names. |
| sqlTable | string | yes | Persistent table the BO is backed by, e.g. "ztravel". Must start with the namespace prefix. |
| Name | Type | Req | Description |
|---|---|---|---|
| activationOrder | array | yes | The order to create/activate artifacts in ADT. |
| files | array | yes | – |
| nextSteps | array | yes | What the generator cannot do for you (table, binding, draft table). |
| rapFindings | array | yes | abap-mcp's own RAP checker findings on the generated BDEF/SRVD set — empty in normal operation. |
| suggestedTableDdl | string | yes | Starting-point DDL for the persistent table; adjust types. |
| validationIssues | array | yes | abaplint findings on the generated sources — empty in normal operation. |
No examples provided.
search_sap_knowledge Search the bundled SAP knowledge base ~506
Search one dated, cited knowledge bundle covering three areas: ABAP Cloud / RAP release deltas, Clean Core governance (SAP's extensibility Levels A-D, release contracts C0 to C4, the real ATC check and variant names, and the SAP/abap-atc-cr-cv-s4hc Cloudification Repository file and schema inventory), and decision cards for the SAP AI options an ABAP team can reach (SAP-ABAP-1, the Generative AI Hub orchestration API, the ABAP AI SDK powered by ISLM, Joule for Developers, SAP's official ADT MCP server, the custom code migration agent, and the community MCP ecosystem). Every hit returns its sources, a confidence flag and the full card. Use this when a question is about SAP facts rather than about a piece of source text — which Clean Core level a pattern lands in, what a C1 release contract guarantees, which ATC variant to run, whether SAP-ABAP-1 accepts a system prompt, which classes the ABAP AI SDK exposes, or what SAP's own MCP server can and cannot do. It does not connect to any SAP system, does not run ATC, does not fetch anything live, and is not a substitute for a real ATC run or for SAP's own documentation — it is a curated snapshot (curated 2026-09-10) and the target system and SAP's current documentation stay authoritative. For release-timeline questions prefer explain_abap_release; for the release state of a specific object use check_released_api; to analyze actual source text use lint_abap or check_cloud_readiness. Example: search_sap_knowledge({ "query": "sap-abap-1 system prompt" }).
| Name | Type | Req | Description |
|---|---|---|---|
| area | string | – | Restrict the search: "release" (release deltas), "clean-core" (levels, contracts, ATC and repository facts), "sap-ai" (the AI decision cards), or "all" (default). |
| limit | integer | – | Maximum ranked cards to return, 1 to 25; defaults to 5. The SAP-AI cards are large, so keep this small. |
| query | string | yes | The question or terms to search for, e.g. "clean core level C", "release contract C1", "sap-abap-1 system prompt", "ADT MCP server tools". Names, identifiers and class names work well. |
| Name | Type | Req | Description |
|---|---|---|---|
| curatedDate | string | yes | Date the bundled knowledge base was curated. |
| hits | array | yes | Ranked cards, most relevant first. |
| matchCount | number | yes | How many cards matched before the limit was applied. |
| scopeNote | string | yes | Dated-knowledge caveat to repeat to the user. |
| truncated | boolean | yes | True when more cards matched than were returned. |
No examples provided.
What is the io.github.palimkarakshay/abap-mcp server?
io.github.palimkarakshay/abap-mcp is listed in the public MCP registry as io.github.palimkarakshay/abap-mcp. Offline SAP ABAP/RAP tools for AI agents: lint, Cloud readiness, released APIs, knowledge. This page covers its npm package (abap-mcp).
Is the io.github.palimkarakshay/abap-mcp server safe to use?
io.github.palimkarakshay/abap-mcp scores 85 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.palimkarakshay/abap-mcp server expose?
io.github.palimkarakshay/abap-mcp exposes 18 tools: lint_abap, fix_abap, check_cloud_readiness, plan_cloud_migration, compare_abap, and 13 more. Their descriptions and schemas cost roughly 7,823 tokens of context every time the server is loaded.
Is the io.github.palimkarakshay/abap-mcp server still maintained?
io.github.palimkarakshay/abap-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.palimkarakshay/abap-mcp server under?
io.github.palimkarakshay/abap-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.