abap2UI5 MCP Server
OfficialThis server provides a local abap2UI5 development loop for AI coding agents, enabling them to write, validate, deploy, build, and visually verify ABAP-based UI5 apps without an SAP system.
Query Capabilities: Check what abap2UI5 can express for UI5 features (direct, workaround, needs-live-test, or not-expressible) using a verified capability map.
Get Generation Rules: Retrieve the canonical rulebook for writing abap2UI5 apps with the generic view builder.
Check Control Scope: Get an in/out-of-scope verdict for UI5 controls based on OpenUI5 source (since version, deprecation).
Validate Views Statically: Run fast static validation of ABAP source or raw XML, including property gates and headless rendering, before deployment.
Deploy Applications: Write an ABAP class into a gitignored sandbox and optionally lint it with abaplint.
Build Backend: Rebuild the transpiled Node backend (incremental or full) to incorporate deployed apps.
Run and Visualize Applications: Boot an app headless in Chromium, returning boot status, page errors, and a full-page screenshot for visual verification.
Manage Backend Server: Control the local Express backend (status, start, stop, restart).
Manage Deployed Applications: Delete a dev app from the sandbox or list all deployed dev apps.
Provides tools for developing abap2UI5 applications for the SAP platform, enabling AI agents to validate UI5 views, deploy ABAP classes, build transpiled backends, and run apps in a headless browser to capture screenshots and errors.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@abap2UI5 MCP ServerCreate an ABAP class with a table, validate it, deploy, build, and run with screenshot."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-server
The MCP server for abap2UI5 — gives any AI coding agent (Claude Code, Cursor, VS Code Copilot, or any MCP client) the full abap2UI5 development loop, without an SAP system:
examples -> app_guide -> validate_view + screenshot_view -> deploy_app -> build_backend -> run_app -> pitfalls
(has somebody (how an app (SECONDS, no system: (write ABAP, (transpile (boot headless, (what a green
built it is built) is the view legal, lint) to Node) errors + run still
already?) and what does it LOOK like) SCREENSHOT) does not prove)The agent writes an ABAP class, validates the view and looks at a picture of it in seconds, deploys it, boots it in a real browser and looks at the running app — then iterates. Everything runs locally on infrastructure that already guards the abap2UI5 ecosystem in CI: the abaplint transpiler + open-abap runtime, the framework's express shim, the samples-controls build and boot gates, and the linter validation core.
Documentation
→ The MCP server, in full — what MCP means here, the three setup levels and what each one buys, how to register the server with your client, every tool with what the agent gets from it, and the loop they are meant to be used in.
→ Building with AI — the whole AI setup in rising order of effort. This server is the top rung; the cheaper ones matter first.
Related MCP server: @ui5/mcp-server
Quick start
Level 1 — validate_view and screenshot_view, the two tools most work
happens at (~3 MB, a minute):
git clone https://github.com/abap2UI5/linter # AI_VIEW_CHECK_HOME
cd linter && npm ciThe server itself is on npm, so it needs no checkout. Register it with Claude Code:
claude mcp add abap2ui5 -- npx --yes @abap2ui5/mcp-server(The install is ~45 MB, 19 MB of it a Playwright driver only run_app uses —
paid on the first start, cached after. From a checkout instead:
git clone https://github.com/abap2UI5/mcp-server && cd mcp-server && npm ci,
then claude mcp add abap2ui5 -- node /path/to/mcp-server/server.mjs.)
Cursor, VS Code and Claude Desktop take the standard stdio shape — the documentation has the JSON, and the two further levels (the sample catalogues and deploying, then the headless build-and-boot loop). A tool whose prerequisites are missing answers with a message naming what it needs; the server starts either way.
The abap2UI5 VS Code extension registers this server for you, and adds a second one of its own for the tools that need a real SAP system.
Everything in one command — for a machine (or
Codespace) dedicated
to the full build-and-boot loop, setup.sh clones the framework,
corpus and linter checkouts next to this repo, installs their dependencies and
the headless browser (existing checkouts are reused, safe to re-run):
git clone https://github.com/abap2UI5/mcp-server && ./mcp-server/setup.shA Claude Code started inside the checkout picks the server up automatically
via the committed .mcp.json; the
devcontainer runs the same setup on create.
Tools
Every tool reads live from a sibling checkout, and each one needs a specific
sibling — there is no "optional" repository, only tools you do or do not use.
The Needs column says which checkout a tool is dead without: the linter
alone carries validate_view and screenshot_view (the fast loop, where most
iterations happen), the framework checkout carries the guide, the pitfalls and
the backend, and the corpus carries almost everything else. A tool whose
checkout is missing answers with the clone command and env var that fix it.
Tool | What it does | Needs |
| Whether abap2UI5 can express a UI5 feature at all, from the verified capability map | samples-controls |
| How to build an app, live from the framework checkout | abap2UI5 |
| The client API ( | abap2UI5 |
| The files a new project starts from, live from app-template; | app-template |
| Search the three sample catalogues, verification status and all — answers with a class to read, never a snippet to trust | any of samples / samples-controls / samples-stack |
| Full-text search over the documentation site's pages: page, heading, snippet and the published URL | docs |
| The rulebook for porting a UI5 demo-kit sample into samples-controls | samples-controls |
| The defects a green run does not catch: | abap2UI5 |
| In/out-of-scope verdict for a UI5 control | samples-controls + an OpenUI5 checkout |
| The linter's gates in seconds, judged by your project's own | linter |
| Apply the linter's mechanical fixes and get the corrected source back — writes nothing | linter |
| See the view in seconds — no build, no backend | linter |
| Write the class + abapGit sidecar into the gitignored sandbox, then abaplint it | samples-controls |
| Read a deployed dev app's source back, and whether the built backend already carries it | samples-controls |
| Rebuild the transpiled Node backend; incremental after the first full build | samples-controls + abap2UI5 |
| Page through the last build's full output — the error the result's short tail cut off | nothing (reads the record the last build left) |
| Boot an app headless: status, real page errors, and a screenshot | samples-controls + abap2UI5 |
|
| abap2UI5 (start/restart; status and stop always work) |
| Delete a dev app from the sandbox, or list the deployed ones | samples-controls |
examples degrades per catalogue instead of failing: it searches the
checkouts it finds and names the ones it could not, so a thinner answer never
reads as "nobody has built this". It reads each repository's committed
catalogue.json where the checkout has one — which is what carries a control
port's verification status (checked over reviewed over generated, used to
break ranking ties), the learning-path stage, and what a stack sample needs
from the system — and falls back to parsing SAMPLES.md on a checkout from
before that file existed. screenshot_view and run_app answer the
same question at three orders of magnitude apart: the first photographs the
reconstructed view with no backend, the second the running app after a
build. Most iterations should end at the first.
Resources
The knowledge documents behind those tools are also MCP resources, for clients that surface them (context pickers, attach-a-document UIs) and for agents that want a document whole instead of sliced. Same live reads from the same sibling checkouts: listing is free (no checkout needed), reading a resource whose checkout is missing answers with the same actionable error the tool gives.
Resource | Content | Needs |
| The app-building guide, whole ( | abap2UI5 |
| One guide chapter, by number or heading keyword (a resource template) | abap2UI5 |
| The client API summary — every | abap2UI5 |
| abap-check — the ABAP defects a green CI does not catch | abap2UI5 |
| ui5-check — the view defects a green CI does not catch | abap2UI5 |
| CAPABILITIES.md — the verified capability map | samples-controls |
| The rulebook for porting a UI5 demo-kit sample | samples-controls |
Prompts
Two prompts — one per job this server serves — put an agent straight into the loop instead of leaving it to reconstruct the order from the tool descriptions alone. Each renders an orchestration script over the tools above and duplicates none of their content:
build-an-abap2ui5-app(argument:task, what the app should do) — orient withexamples/capabilities, learn the shape fromapp_guide, write the class, iterate throughvalidate_view/screenshot_viewin seconds, prove it withdeploy_app→build_backend→run_app, close withpitfalls.port-a-ui5-sample(argument:sample, the demo-kit sample) — the corpus job:generation_rulesas the brief,scope_ofandcapabilitiesbefore writing, neighbouring ports fromexamples, then the same validate/screenshot/deploy/run loop.
Notes
Dev sandbox: deployed apps land in the samples-controls checkout's gitignored
src/zz_dev/— nothing an agent deploys can leak into a commit.Port: the backend listens on 3000 (
A2UI5_MCP_PORToverrides).Timeouts: every spawned child is killed (whole process tree) when it exceeds its limit — lint/scope 5 min, build 30 min by default;
A2UI5_MCP_LINT_TIMEOUT_MS,A2UI5_MCP_SCOPE_TIMEOUT_MSandA2UI5_MCP_BUILD_TIMEOUT_MSoverride (values in ms).UI5 sources are served from the samples-controls checkout's
@openui5packages, so booting needs no network. The built theme CSS is not in those packages — with network access it loads from the CDN (styled screenshots); without, apps render unstyled but structurally complete.A2UI5_MCP_OFFLINE=1forces the hermetic behaviour.Chromium: uses the Playwright-managed browser; if absent, falls back to a system chromium (
A2UI5_MCP_CHROMIUMoverrides the executable path).Screenshots:
run_appwrites its PNG to<tmp>/abap2ui5-mcp-screenshots/<class>.pngand returns the path beside the image — deliberately not into the install directory, which is insidenode_moduleswhen you install from npm.A2UI5_MCP_SCREENSHOT_DIRputs them somewhere you keep.scope_ofneeds an OpenUI5 checkout as well as the corpus: it reads the JSDoc fromOPENUI5_SRC, or from../fork-openui5beside the samples-controls checkout when that variable is unset.If you set this up earlier: the corpus repository was
ai-demokit, thenabap2UI5-api, and issamples-controlstoday. Nothing needs changing — an existing checkout is still found under any of the three directory names, andAI_DEMOKIT_HOMEis still read alongsideSAMPLES_CONTROLS_HOME.Real-system deployment stays what it is today: abapGit. This server is the inner dev loop; the real-system half lives in the VS Code extension, whose own MCP server exposes it as
run_app_on_system. Both servers are registered in the same editor window, which is why that tool is not calledrun_app.
Working on this repository
npm ci
npm testAGENTS.md carries the conventions, CONTRIBUTING.md and RELEASING.md the
rest of the workflow.
Available Tools
9 toolsbackendA
Manage the local express backend serving the transpiled apps: status | start | stop | restart. run_app starts it automatically; use this for diagnostics or to free the port.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | default: status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It mentions actions and port freeing, but does not disclose side effects such as making served apps unavailable when stopping or restarting. This is a significant gap for a management tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the resource and actions, with no filler or redundant content. It is optimally concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one param, no output schema), but the description lacks details about the status command's output and the impact of stop/restart on running apps. It is adequate for basic understanding but not fully complete given the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with an enum describing the action parameter. The description merely lists the same enum values without adding extra meaning or details about each action's behavior, so it meets the baseline but adds no new value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Manage the local express backend serving the transpiled apps' and enumerates specific actions (status | start | stop | restart). This distinguishes it from siblings like run_app, which is mentioned as a separate tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance: 'run_app starts it automatically; use this for diagnostics or to free the port.' This tells when to use this tool and names the alternative (run_app) for normal start.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_backendA
Rebuild the transpiled Node backend so run_app picks up deployed/edited ABAP. mode auto (default) is incremental when a prior full build exists: only src/zz_dev/ is re-copied and re-transpiled (~1-2 min). mode full runs the complete e2e-build (downport + transpile, tens of minutes) — needed once initially, or when framework/port sources changed, or when the incremental transpile rejects a construct (then simplify the ABAP or go full). Stops a running backend first.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | default auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool stops a running backend first, explains the two modes (incremental vs full) with timing, and highlights the failure condition for incremental builds. It does not cover error handling or side effects beyond stopping the backend, but it provides substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph of three sentences. It front-loads the primary purpose and then provides mode details. While not broken into bullets or sections, it is efficient and every sentence conveys necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of rebuilding a backend, the description covers all essential aspects: the modes, timing, prerequisites (prior full build), trigger conditions for full mode, and the fact that it stops a running backend. There is no output schema, but for a build tool this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only lists 'mode' with enum values and default 'auto.' The description adds rich meaning: it explains what auto does (incremental when prior full build exists), what full does (complete e2e-build), and when to choose each. This goes far beyond the schema's raw enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Rebuild the transpiled Node backend' and connects it to the downstream effect 'so run_app picks up deployed/edited ABAP.' This clearly distinguishes the tool from sibling tools like run_app or deploy_app, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use each mode: auto is incremental when a prior build exists, full is needed for initial builds or framework/port changes. It also mentions when incremental fails (rejects a construct) and suggests fallback actions. It lacks an explicit 'use this instead of X' comparison, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capabilitiesA
Query what abap2UI5 can express, from the verified capability map (CAPABILITIES.md — every entry names a proving port). Call this BEFORE deciding a UI5 feature cannot be built. Without arguments returns a summary; with query returns matching entries (status: direct | workaround | needs-live-test | not-expressible).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | keywords matched against feature/how/evidence, e.g. "tree binding" or "dialog" | |
| status | No | optional filter on the capability status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses return behavior: 'Without arguments returns a summary; with `query` returns matching entries' and enumerates status values. It also adds context that the map is verified and every entry names a proving port. No contradictions with annotations (since none exist).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose. Each sentence serves a distinct function: what it does, when to use it, and how the arguments affect the response. No filler or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description explains the two primary return modes (summary vs matching entries) and the status filter. It could provide more detail on entry structure, but for a capability discovery tool this is adequate and the sibling context reinforces its role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaningful behavior: it explains the effect of omitting vs providing `query` and enumerates the `status` options. This goes beyond the schema's bare descriptions and helps the agent understand parameter influence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Query what abap2UI5 can express.' The reference to a 'verified capability map (CAPABILITIES.md)' distinguishes this from sibling tools like 'validate_view' or 'build_backend', making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Call this BEFORE deciding a UI5 feature cannot be built.' This is a clear directive. It doesn't name explicit alternatives or when-not-to-use, but the context is strong enough for an agent to know this is the first stop for capability checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_appA
Deploy an abap2UI5 app: writes .clas.abap (+ abapGit sidecar) into the gitignored dev sandbox src/zz_dev/ and lints it with the repo abaplint config. The class must implement z2ui5_if_app. After deploying, run build_backend once (rebuilds the transpiled Node backend), then run_app to see it. Set lint:false to skip the lint (faster, not recommended).
| Name | Required | Description | Default |
|---|---|---|---|
| lint | No | run abaplint after writing (default true) | |
| class_name | Yes | lowercase class name matching ^z2ui5_cl_..., <= 30 chars, e.g. z2ui5_cl_my_app | |
| abap_source | Yes | full ABAP source of the class (CLASS ... DEFINITION + IMPLEMENTATION) | |
| description | No | short class description (abapGit DESCRIPT) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It discloses that it writes to a gitignored dev sandbox, creates a sidecar file, lints using repo config, and requires the class to implement z2ui5_if_app. This gives the agent essential behavioral context for a file-writing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The three-sentence description is efficient, covering purpose, side effects, prerequisites, and follow-up actions without redundancy. A minor typo 'ababGit' does not detract from overall clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a deploy tool: it specifies the target directory, the linting step, the required interface, and the post-deploy build/run sequence. It lacks error-handling details but given the tool's straightforward nature, this is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explaining the lint parameter's default and trade-off, and by stating the interface prerequisite for class_name. This goes beyond the schema's basic parameter types and provides decision-relevant guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Deploy an abap2UI5 app' and details the concrete actions: writing a .clas.abap file with a sidecar into a specific directory and linting. It distinguishes from sibling tools by referencing build_backend and run_app as subsequent steps, making the deploy scope explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides workflow guidance, explicitly stating to run build_backend and run_app after deployment, and explains the lint:false flag to skip linting. While it doesn't explicitly list exclusions, it clearly defines where this tool fits in the deployment pipeline compared to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generation_rulesA
The canonical rulebook for writing an abap2UI5 app with the generic view builder (dispatcher skeleton, view/attribute idioms, binding and event rules). Read it once before generating ABAP.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. The 'rulebook' and 'Read it' phrasing imply a read-only, informational tool, but it doesn't explicitly state that it has no side effects or describe the output format. This is adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose and followed by a direct usage instruction. Every word earns its place; no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple documentation tool with no parameters or output schema, the description is nearly complete. It states what the tool provides, what it covers, and when to use it. The only minor gap is the absence of explicit statement that it's a read-only reference, which would fully satisfy contextual completeness in the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, which warrants a baseline of 4. The description adds context about the content of the rulebook, which is meaningful given no input schema exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as 'the canonical rulebook' for writing abap2UI5 apps, specifying the exact areas covered (dispatcher skeleton, view/attribute idioms, binding and event rules). This is specific and distinguishes it from operational siblings like deploy_app and run_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The instruction 'Read it once before generating ABAP' provides a clear when-to-use directive. While it doesn't explicitly name alternatives, the context implies this is a prerequisite learning tool, distinct from the other sibling tools that perform actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_appA
Remove a previously deployed dev app from src/zz_dev/ (takes effect in the served backend after the next build_backend). Without class_name lists the deployed dev apps.
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | No | the dev app class to remove; omit to list deployed dev apps |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that removal takes effect only after the next build_backend, which is important behavioral context, and that omitting class_name lists deployed apps, indicating a non-destructive mode. This adds meaningful detail beyond the obvious 'remove' action, though it could go further (e.g., error states or permanence).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, followed by the critical timing detail and the alternate usage. Every word earns its place, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter tool with no output schema, the description covers the main function, the deferred effect, and the list mode. It does not describe return values or error behavior, but given the low complexity and schema richness, this is not a critical gap. The tool's dual nature is fully explained, making it largely complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the class_name parameter, including the 'omit to list' behavior, achieving 100% coverage. The description's mention of 'Without class_name lists the deployed dev apps' largely duplicates the schema text, adding no substantial new meaning. Thus a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove a previously deployed dev app'), specifies the resource location ('from src/zz_dev/'), and distinguishes itself from siblings like deploy_app and build_backend by noting the deferred effect. The alternate listing behavior ('Without class_name lists the deployed dev apps') adds further specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool (to remove a previously deployed dev app) and notes the dependency on build_backend for the effect to take place. It does not explicitly mention when not to use it or name alternatives, but the dual listing behavior implies the useful single-argument use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_appA
Boot an app class headless in Chromium against the local backend (?app_start=) and LOOK at it: returns booted/ok, real page errors + failed backend calls (benign UI5 noise filtered), and a full-page screenshot as an image. The visual verification step of the loop — also works for the 276 existing ports and z2ui5_cl_ai_app_overview.
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | Yes | the app class to start, e.g. z2ui5_cl_my_app or z2ui5_cl_ai_app_005 | |
| timeout_ms | No | boot timeout in ms (default 60000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses key behaviors: runs headless, filters benign UI5 noise, returns page errors and failed backend calls, and produces a full-page screenshot. It doesn't mention side effects or required permissions, but for a dev-loop tool this is solid transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with a front-loaded action and clear deliverables. Every clause adds value, and there is no redundant repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description enumerates the key return values (boot status, real page errors, failed backend calls, screenshot) and the environment. It doesn't explain the 'loop' in detail, but for a 2-parameter tool this is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds extra meaning by showing how class_name is used ('?app_start=<class>'), going beyond the schema. timeout_ms is not elaborated, but the schema covers it sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Boot') and identifies the resource ('app class'), environment ('headless in Chromium against the local backend'), and clear outputs ('booted/ok', errors, screenshot). It distinguishes itself from sibling tools like validate_view by positioning as the visual verification step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool ('The visual verification step of the loop') and notes compatibility with existing ports and specific app classes. It doesn't explicitly name alternatives or exclusion criteria, but the context is strong enough for an agent to choose it over other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scope_ofA
Authoritative in/out-of-scope verdict for UI5 control entities (exists since UI5 <= 1.71, not deprecated), read from the OpenUI5 source JSDoc. Needs an OpenUI5 checkout (OPENUI5_SRC or ../fork-openui5).
| Name | Required | Description | Default |
|---|---|---|---|
| entities | Yes | control entities, e.g. ["sap.m.Wizard", "sap.f.SidePanel"] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It discloses the data source (OpenUI5 source JSDoc), the version constraint, and the required checkout, which are meaningful behavioral details beyond the tool's basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the key purpose, and includes essential caveats without any fluff. Every word contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single simple parameter and no output schema, the description explains the core purpose, source, version constraints, and prerequisite. It does not detail return format or error behavior, but these are reasonably inferable and the description is largely complete for its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'entities' is fully described in the schema with examples. The description adds no additional semantic detail beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool provides an 'authoritative in/out-of-scope verdict for UI5 control entities', which is a specific verb+resource combination. It also adds clarifying context (exists since UI5 <= 1.71, not deprecated) and distinguishes from siblings by its focus on scope determination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool (when needing a scope verdict for UI5 control entities) and states a prerequisite (OpenUI5 checkout). It does not explicitly compare with sibling tools or list exclusions, but the purpose is distinct enough that an agent can infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_viewA
Fast static validation via ai-view-check, BEFORE the build/run loop: reconstructs the view from the z2ui5_cl_ai_xml builder calls (or takes raw view XML), runs the UI5 property gate (@since floor, deprecation) and renders it headless with a typed mock model. Seconds instead of a build+boot — use it after writing ABAP, then deploy_app once it is clean.
| Name | Required | Description | Default |
|---|---|---|---|
| xml | No | alternatively: raw view/fragment XML | |
| allow | No | accepted deviations, e.g. ["sap.m.GenericTile.systemInfo"] | |
| render | No | run the headless render gate (default true) | |
| min_ui5 | No | UI5 floor for the property gate (default 1.71) | |
| abap_source | No | ABAP class source building its view with z2ui5_cl_ai_xml |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool reconstructs the view from builder calls or raw XML, runs two gates (property gate and headless render), and uses typed mock models. It also mentions performance ('Seconds'). It does not elaborate on edge cases like how deviations are handled, but the schema covers 'allow'. Overall, it provides substantive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence telegraphs the core purpose and mechanism, the second adds the speed benefit and workflow recommendation. Every clause earns its place, and the structure is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete enough for a validation tool with 5 params and no output schema. It explains the two validation gates, the input forms, the performance win, and the next step. It doesn't detail return values or failure messages, but since there's no output schema, that burden falls somewhat on the agent. The lack of explicit mention of the 'allow' parameter is minor, as the schema covers it. Overall, solid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds meaning by tying parameters to behavior: it references 'z2ui5_cl_ai_xml builder calls' (abap_source), 'raw view XML' (xml), 'UI5 property gate' (min_ui5), and 'renders it headless' (render). It doesn't explicitly explain the 'allow' parameter, but the schema does. The description adds context beyond the schema, hence a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Fast static validation via ai-view-check', a specific verb+resource combination. It details that it reconstructs the view, runs a UI5 property gate, and renders headless, distinguishing it from build/run tools. The explicit mention of 'BEFORE the build/run loop' and 'then deploy_app once it is clean' clearly separates it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: 'use it after writing ABAP, then deploy_app once it is clean'. It contrasts with the build+boot cycle and names deploy_app as the next step after validation passes. This makes the tool's position in the workflow clear and provides a concrete alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
backend - First observed
build_backend - First observed
capabilities - First observed
deploy_app - First observed
generation_rules - First observed
remove_app - First observed
run_app - First observed
scope_of - First observed
validate_view
TDQS
Each tool has a clearly distinct purpose: capabilities and scope_of differ (abap2UI5 feature map vs. UI5 control entity verdicts), validate_view/deploy_app/run_app form a sequential loop, and backend/build_backend/run_app/remove_app manage separate aspects of the dev environment. No two tools appear to do the same thing.
The action tools mostly follow verb_noun (deploy_app, validate_view, build_backend, run_app, remove_app), but the knowledge/management tools use noun-style names (capabilities, generation_rules, scope_of, backend). All are snake_case and readable, but the pattern is not consistent throughout.
Nine tools is well-scoped for an MCP server focused on abap2UI5 development. Each tool earns its place in the workflow, from capability lookup and rule reading to validation, deployment, backend management, and cleanup.
The tool set covers the full development lifecycle: understand what's possible (capabilities, generation_rules, scope_of), validate (validate_view), deploy (deploy_app), build and run (build_backend, run_app, backend), and remove (remove_app). No obvious dead ends or missing critical operations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Deploy and manage your apps, databases, storage, and scheduled jobs from your AI agent
Build, validate, deploy — HTTP APIs, cron jobs, webhooks and MCP tools — from your AI client.
Zero-Ops deploy of a private AI workspace to your own VPS — from your AI chat. Free and open-source.
UI design from prompts, screenshots, and URLs for AI coding agents and theme tokens.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to access SAP ADT APIs for reading, writing, debugging, deploying, and testing ABAP code through natural language or DSL automation.456MIT

@ui5/mcp-serverofficial
AlicenseNot gradedqualityAmaintenanceEnables AI agents to assist with UI5 application development by providing tools for project scaffolding, API reference lookup, code analysis, and validation.108,86499Apache 2.0- AlicenseAqualityAmaintenanceAn offline MCP server for SAP ABAP that provides static analysis, ABAP Cloud readiness checks, and RAP scaffolding using abaplint, enabling AI agents to analyze and generate ABAP code without a live SAP system.138202MIT
- FlicenseAqualityCmaintenanceEnables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.424-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/abap2UI5/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server