{"_id":"@abap2ui5/mcp-server","_rev":"2-db755d74588a9488ab2439aeb97a8ccf","name":"@abap2ui5/mcp-server","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@abap2ui5/mcp-server","version":"0.1.0","keywords":["abap2ui5","abap","ui5","mcp","model-context-protocol","sap"],"license":"MIT","_id":"@abap2ui5/mcp-server@0.1.0","maintainers":[{"name":"oblomov-dev","email":"oblomov-dev@outlook.com"}],"homepage":"https://github.com/abap2UI5/mcp-server#readme","bugs":{"url":"https://github.com/abap2UI5/mcp-server/issues"},"bin":{"abap2ui5-mcp":"server.mjs"},"dist":{"shasum":"a027d4c2b8c027a77e9eac7fe8e43de0809c0252","tarball":"https://registry.npmjs.org/@abap2ui5/mcp-server/-/mcp-server-0.1.0.tgz","fileCount":13,"integrity":"sha512-aiTCgXK4izQ4pO5UrQT7oNwWcMaXNtPwniPf30M4XJke8B1lBSXOVN9pcRt8uDF3ksPdMFQNyzxjGzpjl3gO1A==","signatures":[{"sig":"MEUCIQCg+AYp8YOYrcrUZog5DzH8fTY1jDU1vkQsGjY7MEeMZAIgJMuVeBaArN/l9vUscxDRwwuMb+gkOCTP3u2E5BVAh0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":132193},"type":"module","engines":{"node":">=22"},"gitHead":"82f62675fc75cdbffd305902fd0988c9392f7684","scripts":{"test":"node --test \"test/*.test.mjs\"","start":"node server.mjs"},"_npmUser":{"name":"oblomov-dev","email":"oblomov-dev@outlook.com"},"repository":{"url":"git+https://github.com/abap2UI5/mcp-server.git","type":"git"},"_npmVersion":"10.9.7","description":"MCP server for abap2UI5: capability queries, view validation, deploy, headless run + screenshot — the AI agent dev loop, no SAP system needed.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"playwright":"^1.61.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mcp-server_0.1.0_1787052237966_0.11689154758909814","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@abap2ui5/mcp-server","version":"0.1.1","description":"MCP server for abap2UI5: capability queries, view validation, deploy, headless run + screenshot — the AI agent dev loop, no SAP system needed.","type":"module","bin":{"abap2ui5-mcp":"server.mjs"},"scripts":{"start":"node server.mjs","check":"npm test","test":"node --test \"test/*.test.mjs\""},"repository":{"type":"git","url":"git+https://github.com/abap2UI5/mcp-server.git"},"license":"MIT","bugs":{"url":"https://github.com/abap2UI5/mcp-server/issues"},"homepage":"https://github.com/abap2UI5/mcp-server#readme","dependencies":{"@modelcontextprotocol/sdk":"^1.30.0","playwright":"^1.61.1"},"engines":{"node":">=22"},"publishConfig":{"access":"public"},"keywords":["abap2ui5","abap","ui5","mcp","model-context-protocol","sap"],"gitHead":"c3530e617b00cf2130224ae20858ed4f107c1579","_id":"@abap2ui5/mcp-server@0.1.1","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-QCMg777IVUiZJBjFxJKP88m0IdK9Ivc4PMoM/WkwcnD42bm2Me/4D9FQyA17xhzTOaoJCNGBlcfVnkDW8qpAJg==","shasum":"548726a0845decdce4fe33b0a1e7022322ca8d15","tarball":"https://registry.npmjs.org/@abap2ui5/mcp-server/-/mcp-server-0.1.1.tgz","fileCount":20,"unpackedSize":201271,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abap2ui5%2fmcp-server@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIClCZgFAp3wCjyjbi8+HOyujr9po+j/h05or+TTSewFZAiAbzSOLYCWIdcxTAdW0q0q8cCbvg4zclFjd/pLOyIB47w=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:419ac979-3d7c-4884-afbb-bf28e3c15f1f"}},"directories":{},"maintainers":[{"name":"oblomov-dev","email":"oblomov-dev@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-server_0.1.1_1788159264901_0.7355774567818449"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-18T11:23:57.814Z","modified":"2026-08-31T06:54:25.419Z","0.1.0":"2026-08-18T11:23:58.110Z","0.1.1":"2026-08-31T06:54:25.049Z"},"bugs":{"url":"https://github.com/abap2UI5/mcp-server/issues"},"license":"MIT","homepage":"https://github.com/abap2UI5/mcp-server#readme","keywords":["abap2ui5","abap","ui5","mcp","model-context-protocol","sap"],"repository":{"type":"git","url":"git+https://github.com/abap2UI5/mcp-server.git"},"description":"MCP server for abap2UI5: capability queries, view validation, deploy, headless run + screenshot — the AI agent dev loop, no SAP system needed.","maintainers":[{"name":"oblomov-dev","email":"oblomov-dev@outlook.com"}],"readme":"# mcp-server\n\n**The MCP server for abap2UI5** — gives any AI coding agent (Claude Code,\nCursor, VS Code Copilot, or any MCP client) the full abap2UI5 development\nloop, without an SAP system:\n\n```\nexamples -> app_guide -> validate_view + screenshot_view -> deploy_app -> build_backend -> run_app -> pitfalls\n(has somebody  (how an app  (SECONDS, no system:        (write ABAP,  (transpile      (boot headless,  (what a green\n built it       is built)    is the view legal,          lint)         to Node)        errors +         run still\n already?)                   and what does it LOOK like)                               SCREENSHOT)      does not prove)\n```\n\nThe agent writes an ABAP class, validates the view **and looks at a picture of\nit** in seconds, deploys it, boots it in a real browser and looks at the\nrunning app — then iterates. Everything runs locally on infrastructure that\nalready guards the abap2UI5 ecosystem in CI: the abaplint transpiler +\nopen-abap runtime, the framework's express shim, the\n[samples-controls](https://github.com/abap2UI5/samples-controls) build and boot\ngates, and the [linter](https://github.com/abap2UI5/linter) validation core.\n\n## Documentation\n\n**→ [The MCP server, in full](https://abap2ui5.github.io/docs/advanced/mcp_server.html)**\n— what MCP means here, the three setup levels and what each one buys, how to\nregister the server with your client, every tool with what the agent gets from\nit, and the loop they are meant to be used in.\n\n**→ [Building with AI](https://abap2ui5.github.io/docs/get_started/ai.html)** —\nthe whole AI setup in rising order of effort. This server is the top rung; the\ncheaper ones matter first.\n\n## Quick start\n\nLevel 1 — `validate_view` and `screenshot_view`, the two tools most work\nhappens at (~3 MB, a minute):\n\n```sh\ngit clone https://github.com/abap2UI5/linter        # AI_VIEW_CHECK_HOME\ncd linter && npm ci\n```\n\nThe server itself is on npm, so it needs no checkout. Register it with Claude\nCode:\n\n```sh\nclaude mcp add abap2ui5 -- npx --yes @abap2ui5/mcp-server\n```\n\n(The install is ~45 MB, 19 MB of it a Playwright driver only `run_app` uses —\npaid on the first start, cached after. From a checkout instead:\n`git clone https://github.com/abap2UI5/mcp-server && cd mcp-server && npm ci`,\nthen `claude mcp add abap2ui5 -- node /path/to/mcp-server/server.mjs`.)\n\nCursor, VS Code and Claude Desktop take the standard stdio shape — the\n[documentation](https://abap2ui5.github.io/docs/advanced/mcp_server.html#registering-it-with-your-client)\nhas the JSON, and the two further levels (the sample catalogues and deploying,\nthen the headless build-and-boot loop). A tool whose prerequisites are missing\nanswers with a message naming what it needs; the server starts either way.\n\nThe [abap2UI5 VS Code extension](https://github.com/abap2UI5/vscode-extension)\nregisters this server for you, and adds a second one of its own for the tools\nthat need a real SAP system.\n\n## Tools\n\nEvery tool reads live from a sibling checkout, and each one needs a specific\nsibling — there is no \"optional\" repository, only tools you do or do not use.\nThe **Needs** column says which checkout a tool is dead without: the linter\nalone carries `validate_view` and `screenshot_view` (the fast loop, where most\niterations happen), the framework checkout carries the guide, the pitfalls and\nthe backend, and the corpus carries almost everything else. A tool whose\ncheckout is missing answers with the clone command and env var that fix it.\n\n| Tool | What it does | Needs |\n|---|---|---|\n| `capabilities` | Whether abap2UI5 can express a UI5 feature at all, from the verified capability map | samples-controls |\n| `app_guide` | How to build an app, live from the framework checkout | abap2UI5 |\n| `api_reference` | The client API (`z2ui5_if_client`) with its ABAP-Doc: methods, parameters, defaults, the `cs_*` constants | abap2UI5 |\n| `scaffold_app` | The files a new project starts from, live from app-template; `{ class: … }` renames throughout, sidecar `CLSNAME` included | app-template |\n| `examples` | 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 |\n| `docs_search` | Full-text search over the documentation site's pages: page, heading, snippet and the published URL | docs |\n| `generation_rules` | The rulebook for porting a UI5 demo-kit sample into samples-controls | samples-controls |\n| `pitfalls` | The defects a green run does not catch: `{ area: \"abap\" }` and `{ area: \"view\" }` | abap2UI5 |\n| `scope_of` | In/out-of-scope verdict for a UI5 control | samples-controls + an OpenUI5 checkout |\n| `validate_view` | The linter's gates in seconds, judged by your project's own `abap2ui5lint.jsonc` | linter |\n| `screenshot_view` | See the view in seconds — no build, no backend | linter |\n| `deploy_app` | Write the class + abapGit sidecar into the gitignored sandbox, then abaplint it | samples-controls |\n| `build_backend` | Rebuild the transpiled Node backend; incremental after the first full build | samples-controls + abap2UI5 |\n| `run_app` | Boot an app headless: status, real page errors, and a **screenshot** | samples-controls + abap2UI5 |\n| `backend` | `status` / `start` / `stop` / `restart` of the local express backend | abap2UI5 (start/restart; status and stop always work) |\n| `remove_app` | Delete a dev app from the sandbox, or list the deployed ones | samples-controls |\n\n`examples` degrades per catalogue instead of failing: it searches the\ncheckouts it finds and names the ones it could not, so a thinner answer never\nreads as \"nobody has built this\". It reads each repository's committed\n`catalogue.json` where the checkout has one — which is what carries a control\nport's verification status (checked over reviewed over generated, used to\nbreak ranking ties), the learning-path stage, and what a stack sample needs\nfrom the system — and falls back to parsing `SAMPLES.md` on a checkout from\nbefore that file existed. `screenshot_view` and `run_app` answer the\nsame question at three orders of magnitude apart: the first photographs the\nreconstructed **view** with no backend, the second the **running app** after a\nbuild. Most iterations should end at the first.\n\n## Resources\n\nThe knowledge documents behind those tools are also MCP **resources**, for\nclients that surface them (context pickers, attach-a-document UIs) and for\nagents that want a document whole instead of sliced. Same live reads from the\nsame sibling checkouts: listing is free (no checkout needed), reading a\nresource whose checkout is missing answers with the same actionable error the\ntool gives.\n\n| Resource | Content | Needs |\n|---|---|---|\n| `abap2ui5://guide` | The app-building guide, whole (`app_guide` slices it) | abap2UI5 |\n| `abap2ui5://guide/{chapter}` | One guide chapter, by number or heading keyword (a resource template) | abap2UI5 |\n| `abap2ui5://api` | The client API summary — every `z2ui5_if_client` method, constant group and type, one line each | abap2UI5 |\n| `abap2ui5://pitfalls/abap` | abap-check — the ABAP defects a green CI does not catch | abap2UI5 |\n| `abap2ui5://pitfalls/view` | ui5-check — the view defects a green CI does not catch | abap2UI5 |\n| `abap2ui5://capabilities` | CAPABILITIES.md — the verified capability map | samples-controls |\n| `abap2ui5://generation-rules` | The rulebook for porting a UI5 demo-kit sample | samples-controls |\n\n## Prompts\n\nTwo prompts — one per job this server serves — put an agent straight into the\nloop instead of leaving it to reconstruct the order from sixteen tool\ndescriptions. Each renders an orchestration script over the tools above and\nduplicates none of their content:\n\n- **`build-an-abap2ui5-app`** (argument: `task`, what the app should do) —\n  orient with `examples`/`capabilities`, learn the shape from `app_guide`,\n  write the class, iterate through `validate_view`/`screenshot_view` in\n  seconds, prove it with `deploy_app` → `build_backend` → `run_app`, close\n  with `pitfalls`.\n- **`port-a-ui5-sample`** (argument: `sample`, the demo-kit sample) — the\n  corpus job: `generation_rules` as the brief, `scope_of` and `capabilities`\n  before writing, neighbouring ports from `examples`, then the same\n  validate/screenshot/deploy/run loop.\n\n## Notes\n\n- **Dev sandbox:** deployed apps land in the samples-controls checkout's\n  gitignored `src/zz_dev/` — nothing an agent deploys can leak into a commit.\n- **Port:** the backend listens on 3000 (`A2UI5_MCP_PORT` overrides).\n- **Timeouts:** every spawned child is killed (whole process tree) when it\n  exceeds its limit — lint/scope 5 min, build 30 min by default;\n  `A2UI5_MCP_LINT_TIMEOUT_MS`, `A2UI5_MCP_SCOPE_TIMEOUT_MS` and\n  `A2UI5_MCP_BUILD_TIMEOUT_MS` override (values in ms).\n- **UI5 sources** are served from the samples-controls checkout's `@openui5`\n  packages, so booting needs no network. The built theme CSS is not in those\n  packages — with network access it loads from the CDN (styled screenshots);\n  without, apps render unstyled but structurally complete. `A2UI5_MCP_OFFLINE=1`\n  forces the hermetic behaviour.\n- **Chromium:** uses the Playwright-managed browser; if absent, falls back to a\n  system chromium (`A2UI5_MCP_CHROMIUM` overrides the executable path).\n- **Screenshots:** `run_app` writes its PNG to\n  `<tmp>/abap2ui5-mcp-screenshots/<class>.png` and returns the path beside the\n  image — deliberately not into the install directory, which is inside\n  `node_modules` when you install from npm. `A2UI5_MCP_SCREENSHOT_DIR` puts them\n  somewhere you keep.\n- **`scope_of` needs an OpenUI5 checkout** as well as the corpus: it reads the\n  JSDoc from `OPENUI5_SRC`, or from `../fork-openui5` beside the\n  **samples-controls** checkout when that variable is unset.\n- **If you set this up earlier:** the corpus repository was `ai-demokit`, then\n  `abap2UI5-api`, and is `samples-controls` today. Nothing needs changing — an\n  existing checkout is still found under any of the three directory names, and\n  `AI_DEMOKIT_HOME` is still read alongside `SAMPLES_CONTROLS_HOME`.\n- **Real-system deployment** stays what it is today: abapGit. This server is\n  the inner dev loop; the real-system half lives in the\n  [VS Code extension](https://github.com/abap2UI5/vscode-extension), whose own\n  MCP server exposes it as `run_app_on_system`. Both servers are registered in\n  the same editor window, which is why that tool is not called `run_app`.\n\n## Working on this repository\n\n```sh\nnpm ci\nnpm test\n```\n\n`AGENTS.md` carries the conventions, `CONTRIBUTING.md` and `RELEASING.md` the\nrest of the workflow.\n","readmeFilename":"README.md"}