{"name":"io.github.abap2UI5/mcp-server","slug":"abap2ui5-mcp-server","title":"abap2UI5","description":"abap2UI5 dev loop for AI agents: validate views, screenshot, deploy and run apps - no SAP system","url":"https://mcp.market/server/abap2ui5-mcp-server","rating":null,"grade":"B","score":77,"certified":false,"status":"active","category":"devtools","tags":["devtools"],"presence":{"score":28,"stars":1,"forks":0,"downloads_week":28,"last_push_at":"2026-10-14T09:16:00.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/abap2UI5/mcp-server","website":"https://abap2ui5.github.io/docs/advanced/mcp_server.html","version":"1.0.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@abap2ui5/mcp-server","version":"1.0.0","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Checkout or install of @abap2ui5/linter (validate_view, fix_view, screenshot_view). Default: the peer npm installs beside the server. A set value is authoritative.","format":"filepath","name":"AI_VIEW_CHECK_HOME"},{"description":"abap2UI5 framework checkout (app_guide, api_reference, pitfalls; backend when present). Default: ../abap2UI5, else the GitHub mirror and the npm runtime.","format":"filepath","name":"A2UI5_HOME"},{"description":"samples-controls checkout (capabilities, examples, generation_rules, scope_of, UI5 for screenshots). Default: ../samples-controls, else the GitHub mirror.","format":"filepath","name":"SAMPLES_CONTROLS_HOME"},{"description":"abap2UI5/samples checkout, one of the catalogues examples searches. Default: ../samples, else the GitHub mirror.","format":"filepath","name":"SAMPLES_HOME"},{"description":"abap2UI5/samples-stack checkout (OData, RAP, APC, launchpad samples). Default: ../samples-stack, else the GitHub mirror.","format":"filepath","name":"SAMPLES_STACK_HOME"},{"description":"abap2UI5/app-template checkout that scaffold_app serves and add_agent_setup executes. Default: ../app-template, else the GitHub mirror.","format":"filepath","name":"APP_TEMPLATE_HOME"},{"description":"abap2UI5/docs checkout that docs_search reads. Default: ../docs, else the GitHub mirror.","format":"filepath","name":"DOCS_HOME"},{"description":"abap2UI5-addons/abap-cloud-gui checkout (with npm ci done) whose report2cloud converter migrate_report runs. Default: ../abap-cloud-gui; no mirror.","format":"filepath","name":"ABAP_CLOUD_GUI_HOME"},{"description":"abap2UI5-addons/popups checkout whose popups migrate_report with deploy: true writes into the dev sandbox beside the converted class. Default: .deps/popups of the abap-cloud-gui checkout, ../popups beside it, then its build/popups.","format":"filepath","name":"POPUPS_HOME"},{"description":"OpenUI5 source checkout scope_of reads the JSDoc from (via samples-controls). Default: ../fork-openui5 next to samples-controls.","format":"filepath","name":"OPENUI5_SRC"},{"description":"Where the npm backend installs, the dev sandbox lives and a framework clone lands. Default: ~/.abap2ui5-mcp.","format":"filepath","name":"A2UI5_MCP_WORKSPACE"},{"description":"Which backend runs the apps: npm (the @abap2ui5/node-runtime package, even beside a checkout) or clone (clone the framework). Default: decided per call.","format":"string","choices":["npm","clone"],"name":"A2UI5_MCP_BACKEND"},{"description":"Pin the @abap2ui5/node-runtime release (X.Y.Z) the npm backend installs. Default: the registry's latest.","format":"string","name":"A2UI5_MCP_RUNTIME_VERSION"},{"description":"Port of the local backend run_app boots against. Default: 3000.","format":"number","name":"A2UI5_MCP_PORT"},{"description":"Whether app_start/app_describe/app_act declare their MCP Apps screen (ui://abap2ui5/app-screen): auto (default - when the client advertises the io.modelcontextprotocol/ui extension), on, off.","format":"string","name":"A2UI5_MCP_UI"},{"description":"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-rendering hosts).","format":"string","name":"A2UI5_MCP_APP_FORMAT"},{"description":"Set to 1 for no network: no UI5 CDN fallback, no GitHub mirror, no registry lookup.","format":"string","name":"A2UI5_MCP_OFFLINE"},{"description":"Set to 0 to switch off the read-only GitHub mirror used when no checkout is found.","format":"string","name":"A2UI5_MCP_REMOTE"},{"description":"Cache directory of the GitHub mirror. Default: <tmp>/abap2ui5-mcp-remote.","format":"filepath","name":"A2UI5_MCP_REMOTE_DIR"},{"description":"How long a mirrored copy is used before it is refreshed, in milliseconds. Default: one day.","format":"number","name":"A2UI5_MCP_REMOTE_TTL_MS"},{"description":"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 switches the cache off. Default: 64.","format":"number","name":"A2UI5_MCP_UI5_CACHE_MB"},{"description":"Pages (Chromium tabs) of validate_view's warm render gate, which concurrent calls queue on. Default: 2 (1 to 8).","format":"number","name":"A2UI5_MCP_RENDER_PAGES"},{"description":"Chromium binary for run_app and interact_app. Default: CHROMIUM_BIN, Playwright's managed browser, then a system chromium.","format":"filepath","name":"A2UI5_MCP_CHROMIUM"},{"description":"Where run_app and interact_app write their PNGs (the newest 50 are kept) and build_backend its log. Default: <tmp>/abap2ui5-mcp-screenshots.","format":"filepath","name":"A2UI5_MCP_SCREENSHOT_DIR"},{"description":"Where build_backend mode prebuilt downloads the backend from. Default: the framework's release asset.","format":"string","name":"A2UI5_MCP_PREBUILT_URL"},{"description":"Set to 0 to run every lint as a fresh abaplint process. Default: a long-lived worker keeps @abaplint/core with the framework parsed and lints a deploy in milliseconds (the CLI runs whenever the worker cannot stand in for it).","format":"string","name":"A2UI5_MCP_LINT_WORKER"},{"description":"How long the warm lint worker (about 300 MB with the framework parsed) is kept without a request before it exits, in milliseconds; the next lint starts a fresh one. 0 keeps it for the server's life. Default: 10 minutes.","format":"number","name":"A2UI5_MCP_LINT_IDLE_MS"},{"description":"Hard timeout of the abaplint run, in milliseconds. Default: 5 minutes.","format":"number","name":"A2UI5_MCP_LINT_TIMEOUT_MS"},{"description":"Hard timeout of scope_of, in milliseconds. Default: 5 minutes.","format":"number","name":"A2UI5_MCP_SCOPE_TIMEOUT_MS"},{"description":"Hard timeout of a build, the prebuilt download and the npm install, in milliseconds. Default: 30 minutes.","format":"number","name":"A2UI5_MCP_BUILD_TIMEOUT_MS"},{"description":"Hard timeout of the ABAP Unit runner, in milliseconds. Default: 10 minutes.","format":"number","name":"A2UI5_MCP_UNIT_TIMEOUT_MS"},{"description":"Switches on the SYSTEM MODE: the app tools against this real SAP system instead of the sandbox loop. The launch URL, e.g. https://host:44300/sap/bc/z2ui5?app_start={class}&sap-client=100.","format":"string","name":"A2UI5_MCP_SYSTEM_URL"},{"description":"System mode: the SAP user the app tools log on with (Basic authentication).","format":"string","name":"A2UI5_MCP_SYSTEM_USER"},{"description":"System mode: the password of A2UI5_MCP_SYSTEM_USER. Or A2UI5_MCP_SYSTEM_PASSWORD_CMD, to keep it out of the configuration.","format":"string","isSecret":true,"name":"A2UI5_MCP_SYSTEM_PASSWORD"},{"description":"System mode: a shell command that prints the password (a keychain lookup) - instead of A2UI5_MCP_SYSTEM_PASSWORD.","format":"string","name":"A2UI5_MCP_SYSTEM_PASSWORD_CMD"},{"description":"System mode: set to 1 to accept a certificate that cannot be verified. NODE_EXTRA_CA_CERTS with the CA is the better fix.","format":"string","name":"A2UI5_MCP_SYSTEM_INSECURE_TLS"},{"description":"Optional token sent to api.github.com only, to raise the rate limit of the docs tree listing (GH_TOKEN is read too).","format":"string","isSecret":true,"name":"GITHUB_TOKEN"}]}],"tools":[{"name":"add_agent_setup","description":"Set up an EXISTING abap2UI5 project for AI work - what `npm create abap2ui5-app -- --agent-setup` does,","write_action":false,"price_micros":0,"input_schema":null},{"name":"api_reference","description":"The client API an app calls at runtime — z2ui5_if_client, parsed live from the framework","write_action":false,"price_micros":0,"input_schema":null},{"name":"app_act","description":"Operate a running app session on the SAP system semantically: fill fields and fire an event, then get the new","write_action":false,"price_micros":0,"input_schema":null},{"name":"app_describe","description":"The current agent snapshot of a running app session (see app_start) - answered from the last response this","write_action":false,"price_micros":0,"input_schema":null},{"name":"app_guide","description":"READ THIS BEFORE WRITING ABAP for an app of your own. The complete guide to BUILDING an","write_action":false,"price_micros":0,"input_schema":null},{"name":"app_list","description":"The classes on the SAP system that app_start can start - an ADT class-name search (the system counterpart of","write_action":false,"price_micros":0,"input_schema":null},{"name":"app_start","description":"Start an abap2UI5 app class on the SAP system and get its screen as an AGENT SNAPSHOT (v1): the fields you can","write_action":false,"price_micros":0,"input_schema":null},{"name":"backend","description":"Manage the local express backend serving the transpiled apps: status | start | stop | restart.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_log","description":"Read the full output of the LAST build_backend run — the tool result itself carries only a","write_action":false,"price_micros":0,"input_schema":null},{"name":"capabilities","description":"Query what abap2UI5 can express, from the verified capability map (CAPABILITIES.md — every entry","write_action":false,"price_micros":0,"input_schema":null},{"name":"deploy_app","description":"Deploy an abap2UI5 app: writes <class_name>.clas.abap (+ abapGit sidecar) into the dev sandbox -","write_action":true,"price_micros":0,"input_schema":null},{"name":"docs_search","description":"Full-text search over the abap2UI5 documentation site (abap2ui5.github.io/docs), from its","write_action":false,"price_micros":0,"input_schema":null},{"name":"examples","description":"Find a WORKING APP that already does what you are about to build, across ALL THREE sample","write_action":false,"price_micros":0,"input_schema":null},{"name":"fix_view","description":"Apply the linter's MECHANICAL fixes to a source and get the corrected source back —","write_action":false,"price_micros":0,"input_schema":null},{"name":"generation_rules","description":"The rulebook for PORTING one official UI5 demo-kit sample to abap2UI5 as a","write_action":false,"price_micros":0,"input_schema":null},{"name":"interact_app","description":"Boot an app class headless like run_app, then DRIVE it: a short script of actions — click a control","write_action":false,"price_micros":0,"input_schema":null},{"name":"migrate_report","description":"Convert a CLASSIC ABAP REPORT (REPORT ... PARAMETERS / SELECT-OPTIONS, event blocks, WRITE list, ALV) into an","write_action":false,"price_micros":0,"input_schema":null},{"name":"pitfalls","description":"The catalogues of defects a green CI does NOT catch, read live from the abap2UI5 checkout:","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_app","description":"Read back the source of a DEPLOYED dev app exactly as it sits in the dev sandbox — the file","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_example","description":"READ the source of a sample the `examples` tool pointed at — the whole class, from the","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_app","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"run_app","description":"Boot an app class headless in Chromium against the local backend (?app_start=<class>) and LOOK at it:","write_action":true,"price_micros":0,"input_schema":null},{"name":"run_unit_tests","description":"Run the ABAP Unit tests in the transpiled backend — the local test classes deployed with an app","write_action":true,"price_micros":0,"input_schema":null},{"name":"scaffold_app","description":"The files a NEW abap2UI5 project starts from, named after the app you are writing — served","write_action":false,"price_micros":0,"input_schema":null},{"name":"scope_of","description":"Authoritative in/out-of-scope verdict for UI5 control entities (exists since UI5 <= 1.71, not","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot_view","description":"LOOK at the view your ABAP builds, in seconds and without a system, a build or a backend.","write_action":false,"price_micros":0,"input_schema":null},{"name":"setup_status","description":"What this server can do RIGHT NOW, in one read - call it first, or whenever a tool says something is","write_action":false,"price_micros":0,"input_schema":null},{"name":"system_status","description":"Which SAP system this server is connected to and whether it works: the abap2UI5 endpoint and user from the","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_view","description":"Fast static validation via abap2UI5-linter, BEFORE the build/run loop: reconstructs the view from the","write_action":false,"price_micros":0,"input_schema":null},{"name":"verify_app","description":"The whole loop in ONE call, stopping at the first stage that fails: validate (the linter's gates over the","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":77,"grade":"B","scanned_at":"2026-10-14T12:20:45.194Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-14T12:20:45.166Z","components":{"code":{"score":20,"max":25,"notes":["44 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 0 days ago"]},"identity":{"score":9,"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":"lib/migrate.mjs: …valuates a dynamic WHERE condition with eval() after rewriting the * comparisons it …"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@abap2ui5/mcp-server","version":"1.0.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-10-14T07:23:29.273Z","repositoryUrl":"git+https://github.com/abap2UI5/mcp-server.git","weeklyDownloads":28}],"repo":{"found":true,"owner":"abap2UI5","repo":"mcp-server","archived":false,"pushedAt":"2026-10-14T09:16:00Z","stars":1,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/136813377?v=4","ownerCreatedAt":"2023-06-16T11:51:57Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/136813377?v=4&s=128","source":"github"},"presence":{"stars":1,"forks":0,"downloadsWeek":28,"license":"MIT","lastPushAt":"2026-10-14T09:16:00.000Z","score":28}}}},"grade_history":[],"reviews":[]}