Pack local or remote codebases into AI-friendly files that LLMs and coding agents can read or search
abap2UI5 is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
abap2UI5 dev loop for AI agents: validate views, screenshot, deploy and run apps - no SAP system
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user abap2ui5-mcp '--' npx -y @abap2ui5/mcp-server
# 2 — ask your agent for something these tools do
# setup_status, read_example, app_guide and 25 more
abap2UI5 costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts abap2UI5 as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user abap2ui5-mcp '--' npx -y @abap2ui5/mcp-serverReconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take AI_VIEW_CHECK_HOME (Checkout or install of @abap2ui5/linter (validate_view, fix_view, screenshot_view). Default: the peer npm installs beside the server. A set value is authoritati), A2UI5_HOME (abap2UI5 framework checkout (app_guide, api_reference, pitfalls; backend when present). Default: ../abap2UI5, else the GitHub mirror and the npm runtime.), SAMPLES_CONTROLS_HOME (samples-controls checkout (capabilities, examples, generation_rules, scope_of, UI5 for screenshots). Default: ../samples-controls, else the GitHub mirror.), SAMPLES_HOME (abap2UI5/samples checkout, one of the catalogues examples searches. Default: ../samples, else the GitHub mirror.), SAMPLES_STACK_HOME (abap2UI5/samples-stack checkout (OData, RAP, APC, launchpad samples). Default: ../samples-stack, else the GitHub mirror.), APP_TEMPLATE_HOME (abap2UI5/app-template checkout that scaffold_app serves and add_agent_setup executes. Default: ../app-template, else the GitHub mirror.), DOCS_HOME (abap2UI5/docs checkout that docs_search reads. Default: ../docs, else the GitHub mirror.), ABAP_CLOUD_GUI_HOME (abap2UI5-addons/abap-cloud-gui checkout (with npm ci done) whose report2cloud converter migrate_report runs. Default: ../abap-cloud-gui; no mirror.), POPUPS_HOME (abap2UI5-addons/popups checkout whose popups migrate_report with deploy: true writes into the dev sandbox beside the converted class. Default: .deps/popups of t), OPENUI5_SRC (OpenUI5 source checkout scope_of reads the JSDoc from (via samples-controls). Default: ../fork-openui5 next to samples-controls.), A2UI5_MCP_WORKSPACE (Where the npm backend installs, the dev sandbox lives and a framework clone lands. Default: ~/.abap2ui5-mcp.), A2UI5_MCP_BACKEND (Which backend runs the apps: npm (the @abap2ui5/node-runtime package, even beside a checkout) or clone (clone the framework). Default: decided per call.), A2UI5_MCP_RUNTIME_VERSION (Pin the @abap2ui5/node-runtime release (X.Y.Z) the npm backend installs. Default: the registry's latest.), A2UI5_MCP_PORT (Port of the local backend run_app boots against. Default: 3000.), A2UI5_MCP_UI (Whether app_start/app_describe/app_act declare their MCP Apps screen (ui://abap2ui5/app-screen): auto (default - when the client advertises the io.modelcontextp), A2UI5_MCP_APP_FORMAT (The default answer format of the app tools: snapshot (default) or adaptive-card (the snapshot plus an Adaptive Card 1.5 as an embedded resource, for card-render), A2UI5_MCP_OFFLINE (Set to 1 for no network: no UI5 CDN fallback, no GitHub mirror, no registry lookup.), A2UI5_MCP_REMOTE (Set to 0 to switch off the read-only GitHub mirror used when no checkout is found.), A2UI5_MCP_REMOTE_DIR (Cache directory of the GitHub mirror. Default: <tmp>/abap2ui5-mcp-remote.), A2UI5_MCP_REMOTE_TTL_MS (How long a mirrored copy is used before it is refreshed, in milliseconds. Default: one day.), A2UI5_MCP_UI5_CACHE_MB (How many MB of UI5 answers from the CDN (sdk.openui5.org) run_app and interact_app keep in memory across calls, so a second boot does not download them again. 0), A2UI5_MCP_RENDER_PAGES (Pages (Chromium tabs) of validate_view's warm render gate, which concurrent calls queue on. Default: 2 (1 to 8).), A2UI5_MCP_CHROMIUM (Chromium binary for run_app and interact_app. Default: CHROMIUM_BIN, Playwright's managed browser, then a system chromium.), A2UI5_MCP_SCREENSHOT_DIR (Where run_app and interact_app write their PNGs (the newest 50 are kept) and build_backend its log. Default: <tmp>/abap2ui5-mcp-screenshots.) if you want to set them.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
28 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
What this server can do RIGHT NOW, in one read - call it first, or whenever a tool says something is
No parameter schema on file.
READ the source of a sample the examples tool pointed at — the whole class, from the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| class | string | no | the sample class, e.g. Z2UI5_CL_SMP_APP_493 — resolved to its repository and path through the catalogues |
| repo | string | no | with path: the repository the examples entry named |
| path | string | no | with repo: the file path the examples entry carries, e.g. src/01/z2ui5_cl_smp_app_493.clas.abap |
| from_line | number | no | optional: the first line to return (1-based) - a long sample comes in pages, each answer names the next from_line |
READ THIS BEFORE WRITING ABAP for an app of your own. The complete guide to BUILDING an
| Parameter | Type | Required | Notes |
|---|---|---|---|
| section | string | no | one chapter: its number ("5") or a word from its heading ("events", "binding") |
| query | string | no | optional keywords — returns only the chapters carrying every term, e.g. "popup" or "value help" |
| offset | number | no | skip this many of the matching chapters (the more of the previous answer names it); default 0 |
| limit | number | no | at most this many chapters; default every one that fits one answer |
The client API an app calls at runtime — z2ui5_if_client, parsed live from the framework
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | keywords AND-ed over method names, documentation, parameter names/docs and constant paths/values, e.g. "toast", "_bind omit", "nav_app" or "clipboard" |
| kind | string | no | optional filter on what comes back (default all); the singular - method, constant, type - is the same filter |
| limit | number | no | maximum entries to return - methods, constant groups and types, in that order (default: every entry that fits about 60,000 characters); pages the compact list too |
| offset | number | no | skip this many entries - the paging cursor a more hint names (default 0); pages the compact list too |
The rulebook for PORTING one official UI5 demo-kit sample to abap2UI5 as a
No parameter schema on file.
The files a NEW abap2UI5 project starts from, named after the app you are writing — served
| Parameter | Type | Required | Notes |
|---|---|---|---|
| class | string | no | the app class, lower case, e.g. zcl_my_app (^z(cl|cx)_, letters digits underscore, at most 30 characters - the rule the template's abaplint object_naming enforces). Left out, the files come back on |
| package | string | no | short text of the ABAP package, e.g. "My App" (the sidecar's CTEXT) |
| repo | string | no | the abapGit repository name written into .abapgit.xml, e.g. my-app |
| files | array | no | only these paths (as this tool returns them, with the same class). One answer carries about 60,000 characters: the first one every file that fits, smallest first - the class, its sidecar and the confi |
Set up an EXISTING abap2UI5 project for AI work - what npm create abap2ui5-app -- --agent-setup does,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_dir | string | no | the project's root directory (where .abapgit.xml and .git are). Defaults to the server's working directory, which then has to look like a project (a .git, .abapgit.xml or package.json in it). |
| dry_run | boolean | no | decide everything and answer the same report, but write nothing (default false) |
Full-text search over the abap2UI5 documentation site (abap2ui5.github.io/docs), from its
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | keywords, e.g. "value help", "launchpad setup" or "custom control" — every term must match |
| limit | number | no | maximum pages to return (default 10, at most 50); matches counts every page that matched |
| offset | number | no | skip this many matching pages - the paging cursor a more hint names (default 0) |
The catalogues of defects a green CI does NOT catch, read live from the abap2UI5 checkout:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| area | string | no | which catalogue (default: all) |
| query | string | no | optional keywords — returns only the matching sections, e.g. "icon" or "abapgit sidecar" |
| offset | number | no | skip this many sections: an answer carries about 60,000 characters (both catalogues whole are twice that), and more names the offset the next page starts at (default 0) |
Authoritative in/out-of-scope verdict for UI5 control entities (exists since UI5 <= 1.71, not
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entities | array | yes | control entities, e.g. ["sap.m.Wizard", "sap.f.SidePanel"] |
Deploy an abap2UI5 app: writes <class_name>.clas.abap (+ abapGit sidecar) into the dev sandbox -
| Parameter | Type | Required | Notes |
|---|---|---|---|
| class_name | string | yes | lowercase ABAP class name starting z or y, <= 30 chars, e.g. zcl_my_app or z2ui5_cl_my_app |
| abap_source | string | yes | full ABAP source of the class (CLASS ... DEFINITION + IMPLEMENTATION) |
| description | string | no | short class description (abapGit DESCRIPT; default "MCP dev app <class>" - unique per class, as abaplint identical_descriptions demands) |
| testclasses | string | no | optional: the local test classes (the .clas.testclasses.abap include — CLASS ltcl_... FOR TESTING, typically with a local z2ui5_if_client double, see app_guide chapter 9). Written beside the class a |
| lint | boolean | no | run abaplint after writing (default true) |
Read back the source of a DEPLOYED dev app exactly as it sits in the dev sandbox — the file
| Parameter | Type | Required | Notes |
|---|---|---|---|
| class_name | string | yes | the deployed dev app class, e.g. zcl_my_app (remove_app without arguments lists them) |
| from_line | number | no | optional: the first line to return (1-based) - a long class comes in pages, each answer names the next from_line |
Fast static validation via abap2UI5-linter, BEFORE the build/run loop: reconstructs the view from the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| abap_source | string | no | ABAP class source building its view with z2ui5_cl_ui5_view_builder |
| xml | string | no | alternatively: raw view/fragment XML |
| project_dir | string | no | the project this source belongs to — its abap2ui5lint.jsonc (searched upwards from here) supplies the rule overrides, allow list and UI5 floor, so a finding matches what that project's own CI says. De |
| min_ui5 | string | no | UI5 floor for the property gate (default 1.71) |
| allow | array | no | accepted deviations, e.g. ["sap.m.GenericTile.systemInfo"] |
| render | boolean | no | run the headless render gate (default true) |
| explain | boolean | no | add the full explanation of every rule that fired — why the defect matters and what the fix looks like (default false; the one-line summary of each rule is always included) |
Apply the linter's MECHANICAL fixes to a source and get the corrected source back —
| Parameter | Type | Required | Notes |
|---|---|---|---|
| abap_source | string | no | ABAP class source building its view with z2ui5_cl_ui5_view_builder |
| xml | string | no | alternatively: raw view/fragment XML |
| project_dir | string | no | the project this source belongs to — its abap2ui5lint.jsonc (searched upwards from here) supplies the rule overrides, allow list and UI5 floor. Defaults to the working directory, then to the samples-c |
| min_ui5 | string | no | UI5 floor for the property gate (default 1.71) |
| allow | array | no | accepted deviations, e.g. ["sap.m.GenericTile.systemInfo"] |
LOOK at the view your ABAP builds, in seconds and without a system, a build or a backend.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| abap_source | string | no | ABAP class source building its view with z2ui5_cl_ui5_view_builder |
| xml | string | no | alternatively: raw view/fragment XML |
| sizes | array | no | viewports as WIDTHxHEIGHT, e.g. ["390x844", "1280x900"] (default one 1280x900) |
| theme | string | no | UI5 theme, e.g. sap_horizon (default) or sap_horizon_dark |
| model | object | no | preview data merged over the derived model — the way to photograph a list with rows in it, e.g. { "T_ITEMS": [{ "TEXT": "first" }, { "TEXT": "second" }] } |
Rebuild the transpiled Node backend so run_app and run_unit_tests pick up deployed/edited ABAP.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mode | string | no | default auto |
Read the full output of the LAST build_backend run — the tool result itself carries only a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tail | number | no | how many lines (default 100, max 2000) |
| offset | number | no | 0-based line to start from; leave out to get the LAST tail lines |
Boot an app class headless in Chromium against the local backend (?app_start=<class>) and LOOK at it:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| class_name | string | yes | the app class to start, e.g. zcl_my_app, z2ui5_cl_my_app or z2ui5_cl_smpc_app_005 |
| timeout_ms | number | no | boot timeout in ms (default 60000, between 5000 and 600000) |
Boot an app class headless like run_app, then DRIVE it: a short script of actions — click a control
| Parameter | Type | Required | Notes |
|---|---|---|---|
| class_name | string | yes | the app class to start, e.g. zcl_my_app |
| actions | array | yes | the script, at most 30 steps: { action: click | fill | press | wait, id? | selector? | text?, value? (fill), key? (press, e.g. Enter), ms? (wait, <= 10000), commit? (fill: false leaves the field focus |
| timeout_ms | number | no | boot timeout in ms (default 60000, between 5000 and 600000) |
| action_timeout_ms | number | no | per-action timeout in ms (default 10000, between 500 and 120000) |
The app classes the built backend can start with app_start: the deployed dev apps (source "dev") and the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| filter | string | no | substring of the class name, case-insensitive (e.g. "smp_app_00") |
Start an app class on the local backend and get its screen as an AGENT SNAPSHOT (v1): the fields you can fill
| Parameter | Type | Required | Notes |
|---|---|---|---|
| app | string | yes | the app class to start, e.g. z2ui5_cl_smp_app_009 or zcl_my_app (app_list names the built ones) |
| values | object | no | optional { "<field id, model path or name>": value } kept as pending edits (sent with the next app_act event) |
| max_rows | number | no | table rows per table in the snapshot (default 20, max 200) |
| format | string | no | optional: "adaptive-card" adds the screen as an Adaptive Card 1.5 (an embedded resource, application/vnd.microsoft.card.adaptive) after the snapshot - for hosts that render cards (Copilot, Teams); def |
The current agent snapshot of a running app session (see app_start) - answered from the last response this
| Parameter | Type | Required | Notes |
|---|---|---|---|
| session | string | yes | the session of the last snapshot (the draft id to continue with) |
| max_rows | number | no | table rows per table (default: what app_start used) |
| format | string | no | optional: "adaptive-card" adds the screen as an Adaptive Card 1.5 (an embedded resource, application/vnd.microsoft.card.adaptive) after the snapshot - for hosts that render cards (Copilot, Teams); def |
Operate a running app session semantically: fill fields and fire an event, then get the new agent snapshot.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| session | string | yes | the session of the last snapshot |
| values | object | no | { "<field id, model path or name>": value, "<table path>/<row>/<COLUMN>": value } |
| event | string | no | the action to fire: its event name (e.g. "SAVE") or its id ("a3") |
| args | array | no | event arguments, positional to the action's args; null where the client fills the value in |
| row | number | no | for a row action: the row index (0-based) in its table - for a selection dialog's confirm, the row to pick |
| max_rows | number | no | table rows per table in the answer (default: what app_start used) |
| format | string | no | optional: "adaptive-card" adds the screen as an Adaptive Card 1.5 (an embedded resource, application/vnd.microsoft.card.adaptive) after the snapshot - for hosts that render cards (Copilot, Teams); def |
Run the ABAP Unit tests in the transpiled backend — the local test classes deployed with an app
| Parameter | Type | Required | Notes |
|---|---|---|---|
| class_name | string | no | the app class whose test classes to run, e.g. zcl_my_app; leave it out (or null) for every deployed app's tests - on a framework checkout the whole tree, minutes. An empty string is refused, not read |
| class_names | array | no | several classes in one run (the deployed apps of a project, say); null is the same as leaving it out, an empty list is refused |
The whole loop in ONE call, stopping at the first stage that fails: validate (the linter's gates over the
| Parameter | Type | Required | Notes |
|---|---|---|---|
| class_name | string | yes | lowercase ABAP class name, e.g. zcl_my_app |
| abap_source | string | yes | full ABAP source of the class |
| testclasses | string | no | optional: the local test classes (see deploy_app) |
| description | string | no | short class description (abapGit DESCRIPT; default "MCP dev app <class>" - unique per class, as abaplint identical_descriptions demands) |
| boot | boolean | no | run the boot stage (default true; false stops after the unit tests, or after the build) |
| render | boolean | no | validate with the render gate (default: what the project config says) |
| project_dir | string | no | the project whose abap2ui5lint.jsonc validate judges by (as in validate_view) |
| timeout_ms | number | no | boot timeout in ms (default 60000, between 5000 and 600000) |
Convert a CLASSIC ABAP REPORT (REPORT ... PARAMETERS / SELECT-OPTIONS, event blocks, WRITE list, ALV) into an
| Parameter | Type | Required | Notes |
|---|---|---|---|
| source | string | yes | the report source, as in <report>.prog.abap |
| texts_xml | string | no | optional: the report's abapGit <report>.prog.xml - its text pool (selection texts, text symbols, title); without it the texts are placeholders and TODOs |
| class_name | string | no | optional: the class to generate (default zcl_ + the report name, e.g. zcl_flights for ZFLIGHTS) |
| partial | boolean | no | optional: on refusals, still return the draft class with the refused statements marked (default false) |
| deploy | boolean | no | optional: deploy the class (with abap-cloud-gui's src/01 - its classes, interfaces and the variant/layout store tables - and the popups it calls) into the dev sandbox, build_backend and app_start it; |
Manage the local express backend serving the transpiled apps: status | start | stop | restart.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| action | string | no | default: status |
Remove a previously deployed dev app from the dev sandbox (takes effect in the served backend after the next build_backend). Without class_name lists the deployed dev apps.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| class_name | string | no | the dev app class to remove; omit to list deployed dev apps |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install abap2UI5 or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 1.0.0. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish abap2UI5 can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.