x=hub

your toolset

    build deployment
    sign in

    abap2UI5

    mcpkey · package
    io.github.abap2UI5/mcp-server · v1.0.0
    deploy just this

    abap2UI5 dev loop for AI agents: validate views, screenshot, deploy and run apps - no SAP system

    run it

    on your own machines, one way per deploy method
    generated from the record, not tested yet
    #!/usr/bin/env bash
    # abap2ui5 (io.github.abap2UI5/mcp-server), recipe baremetal (generated).
    # Generated by Hub for toolset "my-agent"; started by mcp-my-agent-abap2ui5.service.
    set -euo pipefail
    export HOST=127.0.0.1 PORT=8101
    exec npx -y supergateway@4 --stdio 'npx -y @abap2ui5/[email protected]' --outputTransport streamableHttp --stateful --host 127.0.0.1 --port 8101 --streamableHttpPath /mcp --healthEndpoint /healthz
    
    [Unit]
    Description=MCP server abap2ui5 (toolset my-agent), generated by Hub
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    Type=simple
    User=mcp
    Group=mcp
    EnvironmentFile=/etc/mcp/my-agent.env
    Environment=HOME=/var/lib/mcp/abap2ui5
    WorkingDirectory=/var/lib/mcp/abap2ui5
    ExecStart=/opt/mcp/my-agent/bin/abap2ui5.sh
    Restart=on-failure
    RestartSec=5
    NoNewPrivileges=true
    ProtectSystem=strict
    ProtectHome=true
    PrivateTmp=true
    ReadWritePaths=/var/lib/mcp/abap2ui5
    
    [Install]
    WantedBy=multi-user.target
    
    generated from the record, not tested yet
    docker run --rm -p 127.0.0.1:8101:8000 -e AI_VIEW_CHECK_HOME -e A2UI5_HOME -e SAMPLES_CONTROLS_HOME -e SAMPLES_HOME -e SAMPLES_STACK_HOME -e APP_TEMPLATE_HOME -e DOCS_HOME -e ABAP_CLOUD_GUI_HOME -e POPUPS_HOME -e OPENUI5_SRC -e A2UI5_MCP_WORKSPACE -e A2UI5_MCP_BACKEND -e A2UI5_MCP_RUNTIME_VERSION -e A2UI5_MCP_PORT -e A2UI5_MCP_UI -e A2UI5_MCP_APP_FORMAT -e A2UI5_MCP_OFFLINE -e A2UI5_MCP_REMOTE -e A2UI5_MCP_REMOTE_DIR -e A2UI5_MCP_REMOTE_TTL_MS -e A2UI5_MCP_UI5_CACHE_MB -e A2UI5_MCP_RENDER_PAGES -e A2UI5_MCP_CHROMIUM -e A2UI5_MCP_SCREENSHOT_DIR -e A2UI5_MCP_PREBUILT_URL -e A2UI5_MCP_LINT_WORKER -e A2UI5_MCP_LINT_IDLE_MS -e A2UI5_MCP_LINT_TIMEOUT_MS -e A2UI5_MCP_SCOPE_TIMEOUT_MS -e A2UI5_MCP_BUILD_TIMEOUT_MS -e A2UI5_MCP_UNIT_TIMEOUT_MS -e A2UI5_MCP_SYSTEM_URL -e A2UI5_MCP_SYSTEM_USER -e A2UI5_MCP_SYSTEM_PASSWORD -e A2UI5_MCP_SYSTEM_PASSWORD_CMD -e A2UI5_MCP_SYSTEM_INSECURE_TLS -e GITHUB_TOKEN node:22-alpine sh -c 'npx -y supergateway@4 --stdio '"'"'npx -y @abap2ui5/[email protected]'"'"' --outputTransport streamableHttp --stateful --host 0.0.0.0 --port 8000 --streamableHttpPath /mcp --healthEndpoint /healthz'
    
    generated from the record, not tested yet
    # Generated by Hub for toolset "my-agent" (2026-10-18T02:49:49+00:00).
    # Each package server runs behind a stdio->HTTP bridge and listens on localhost only.
    #   cp .env.example .env    # fill the ${VAR}s
    #   docker compose up -d && bash smoke.sh
    # Remote servers are not here: clients reach them directly (see clients/).
    name: mcp-my-agent
    services:
      abap2ui5:
        image: node:22-alpine
        command:
        - sh
        - -c
        - npx -y supergateway@4 --stdio 'npx -y @abap2ui5/[email protected]' --outputTransport streamableHttp
          --stateful --host 0.0.0.0 --port 8000 --streamableHttpPath /mcp --healthEndpoint /healthz
        ports:
        - 127.0.0.1:8101:8000
        volumes:
        - npm-cache:/root/.npm
        healthcheck:
          test:
          - CMD-SHELL
          - wget -qO- http://127.0.0.1:8000/healthz || exit 1
          interval: 30s
          timeout: 5s
          retries: 5
          start_period: 2m
        restart: unless-stopped
        environment:
          AI_VIEW_CHECK_HOME: ${AI_VIEW_CHECK_HOME}
          A2UI5_HOME: ${A2UI5_HOME}
          SAMPLES_CONTROLS_HOME: ${SAMPLES_CONTROLS_HOME}
          SAMPLES_HOME: ${SAMPLES_HOME}
          SAMPLES_STACK_HOME: ${SAMPLES_STACK_HOME}
          APP_TEMPLATE_HOME: ${APP_TEMPLATE_HOME}
          DOCS_HOME: ${DOCS_HOME}
          ABAP_CLOUD_GUI_HOME: ${ABAP_CLOUD_GUI_HOME}
          POPUPS_HOME: ${POPUPS_HOME}
          OPENUI5_SRC: ${OPENUI5_SRC}
          A2UI5_MCP_WORKSPACE: ${A2UI5_MCP_WORKSPACE}
          A2UI5_MCP_BACKEND: ${A2UI5_MCP_BACKEND}
          A2UI5_MCP_RUNTIME_VERSION: ${A2UI5_MCP_RUNTIME_VERSION}
          A2UI5_MCP_PORT: ${A2UI5_MCP_PORT}
          A2UI5_MCP_UI: ${A2UI5_MCP_UI}
          A2UI5_MCP_APP_FORMAT: ${A2UI5_MCP_APP_FORMAT}
          A2UI5_MCP_OFFLINE: ${A2UI5_MCP_OFFLINE}
          A2UI5_MCP_REMOTE: ${A2UI5_MCP_REMOTE}
          A2UI5_MCP_REMOTE_DIR: ${A2UI5_MCP_REMOTE_DIR}
          A2UI5_MCP_REMOTE_TTL_MS: ${A2UI5_MCP_REMOTE_TTL_MS}
          A2UI5_MCP_UI5_CACHE_MB: ${A2UI5_MCP_UI5_CACHE_MB}
          A2UI5_MCP_RENDER_PAGES: ${A2UI5_MCP_RENDER_PAGES}
          A2UI5_MCP_CHROMIUM: ${A2UI5_MCP_CHROMIUM}
          A2UI5_MCP_SCREENSHOT_DIR: ${A2UI5_MCP_SCREENSHOT_DIR}
          A2UI5_MCP_PREBUILT_URL: ${A2UI5_MCP_PREBUILT_URL}
          A2UI5_MCP_LINT_WORKER: ${A2UI5_MCP_LINT_WORKER}
          A2UI5_MCP_LINT_IDLE_MS: ${A2UI5_MCP_LINT_IDLE_MS}
          A2UI5_MCP_LINT_TIMEOUT_MS: ${A2UI5_MCP_LINT_TIMEOUT_MS}
          A2UI5_MCP_SCOPE_TIMEOUT_MS: ${A2UI5_MCP_SCOPE_TIMEOUT_MS}
          A2UI5_MCP_BUILD_TIMEOUT_MS: ${A2UI5_MCP_BUILD_TIMEOUT_MS}
          A2UI5_MCP_UNIT_TIMEOUT_MS: ${A2UI5_MCP_UNIT_TIMEOUT_MS}
          A2UI5_MCP_SYSTEM_URL: ${A2UI5_MCP_SYSTEM_URL}
          A2UI5_MCP_SYSTEM_USER: ${A2UI5_MCP_SYSTEM_USER}
          A2UI5_MCP_SYSTEM_PASSWORD: ${A2UI5_MCP_SYSTEM_PASSWORD}
          A2UI5_MCP_SYSTEM_PASSWORD_CMD: ${A2UI5_MCP_SYSTEM_PASSWORD_CMD}
          A2UI5_MCP_SYSTEM_INSECURE_TLS: ${A2UI5_MCP_SYSTEM_INSECURE_TLS}
          GITHUB_TOKEN: ${GITHUB_TOKEN}
    volumes:
      npm-cache: {}
      uv-cache: {}
    
    generated from the record, not tested yet
    # Generated by Hub for toolset "my-agent" (2026-10-18T02:49:49+00:00).
    #   kubectl create namespace mcp
    #   kubectl -n mcp create secret generic mcp-credentials --from-env-file=.env
    #   kubectl apply -f kubernetes.yaml
    # Services are cluster-internal: <name>.mcp.svc.cluster.local:8000/mcp. Put an ingress
    # with auth in front before exposing any of them.
    apiVersion: v1
    kind: Namespace
    metadata:
      name: mcp
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: abap2ui5
      namespace: mcp
      labels: &id001
        app: abap2ui5
    spec:
      replicas: 1
      selector:
        matchLabels: *id001
      template:
        metadata:
          labels: *id001
        spec:
          containers:
          - name: abap2ui5
            image: node:22-alpine
            ports:
            - containerPort: 8000
              name: http
            env:
            - name: AI_VIEW_CHECK_HOME
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: AI_VIEW_CHECK_HOME
            - name: A2UI5_HOME
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_HOME
            - name: SAMPLES_CONTROLS_HOME
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: SAMPLES_CONTROLS_HOME
            - name: SAMPLES_HOME
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: SAMPLES_HOME
            - name: SAMPLES_STACK_HOME
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: SAMPLES_STACK_HOME
            - name: APP_TEMPLATE_HOME
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: APP_TEMPLATE_HOME
            - name: DOCS_HOME
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: DOCS_HOME
            - name: ABAP_CLOUD_GUI_HOME
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: ABAP_CLOUD_GUI_HOME
            - name: POPUPS_HOME
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: POPUPS_HOME
            - name: OPENUI5_SRC
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: OPENUI5_SRC
            - name: A2UI5_MCP_WORKSPACE
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_WORKSPACE
            - name: A2UI5_MCP_BACKEND
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_BACKEND
            - name: A2UI5_MCP_RUNTIME_VERSION
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_RUNTIME_VERSION
            - name: A2UI5_MCP_PORT
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_PORT
            - name: A2UI5_MCP_UI
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_UI
            - name: A2UI5_MCP_APP_FORMAT
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_APP_FORMAT
            - name: A2UI5_MCP_OFFLINE
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_OFFLINE
            - name: A2UI5_MCP_REMOTE
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_REMOTE
            - name: A2UI5_MCP_REMOTE_DIR
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_REMOTE_DIR
            - name: A2UI5_MCP_REMOTE_TTL_MS
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_REMOTE_TTL_MS
            - name: A2UI5_MCP_UI5_CACHE_MB
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_UI5_CACHE_MB
            - name: A2UI5_MCP_RENDER_PAGES
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_RENDER_PAGES
            - name: A2UI5_MCP_CHROMIUM
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_CHROMIUM
            - name: A2UI5_MCP_SCREENSHOT_DIR
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_SCREENSHOT_DIR
            - name: A2UI5_MCP_PREBUILT_URL
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_PREBUILT_URL
            - name: A2UI5_MCP_LINT_WORKER
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_LINT_WORKER
            - name: A2UI5_MCP_LINT_IDLE_MS
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_LINT_IDLE_MS
            - name: A2UI5_MCP_LINT_TIMEOUT_MS
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_LINT_TIMEOUT_MS
            - name: A2UI5_MCP_SCOPE_TIMEOUT_MS
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_SCOPE_TIMEOUT_MS
            - name: A2UI5_MCP_BUILD_TIMEOUT_MS
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_BUILD_TIMEOUT_MS
            - name: A2UI5_MCP_UNIT_TIMEOUT_MS
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_UNIT_TIMEOUT_MS
            - name: A2UI5_MCP_SYSTEM_URL
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_SYSTEM_URL
            - name: A2UI5_MCP_SYSTEM_USER
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_SYSTEM_USER
            - name: A2UI5_MCP_SYSTEM_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_SYSTEM_PASSWORD
            - name: A2UI5_MCP_SYSTEM_PASSWORD_CMD
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_SYSTEM_PASSWORD_CMD
            - name: A2UI5_MCP_SYSTEM_INSECURE_TLS
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: A2UI5_MCP_SYSTEM_INSECURE_TLS
            - name: GITHUB_TOKEN
              valueFrom:
                secretKeyRef:
                  name: mcp-credentials
                  key: GITHUB_TOKEN
            command:
            - sh
            - -c
            - npx -y supergateway@4 --stdio 'npx -y @abap2ui5/[email protected]' --outputTransport streamableHttp
              --stateful --host 0.0.0.0 --port 8000 --streamableHttpPath /mcp --healthEndpoint /healthz
            readinessProbe:
              httpGet:
                path: /healthz
                port: http
              initialDelaySeconds: 10
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: abap2ui5
      namespace: mcp
    spec:
      selector:
        app: abap2ui5
      ports:
      - port: 8000
        targetPort: http
        name: http
    
    generated from the record, not tested yet
    # Generated by Hub for toolset "my-agent" (2026-10-18T02:49:49+00:00).
    # Credentials come from the Secret 'mcp-credentials' (kubectl create secret generic ... --from-env-file=.env).
    # Each server under `servers` is one Deployment + Service; the keys after it configure
    # upstream charts a worker verified.
    servers:
      abap2ui5:
        enabled: true
        replicas: 1
        port: 8000
        path: /mcp
        container:
          name: abap2ui5
          image: node:22-alpine
          ports:
          - containerPort: 8000
            name: http
          env:
          - name: AI_VIEW_CHECK_HOME
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: AI_VIEW_CHECK_HOME
          - name: A2UI5_HOME
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_HOME
          - name: SAMPLES_CONTROLS_HOME
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: SAMPLES_CONTROLS_HOME
          - name: SAMPLES_HOME
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: SAMPLES_HOME
          - name: SAMPLES_STACK_HOME
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: SAMPLES_STACK_HOME
          - name: APP_TEMPLATE_HOME
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: APP_TEMPLATE_HOME
          - name: DOCS_HOME
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: DOCS_HOME
          - name: ABAP_CLOUD_GUI_HOME
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: ABAP_CLOUD_GUI_HOME
          - name: POPUPS_HOME
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: POPUPS_HOME
          - name: OPENUI5_SRC
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: OPENUI5_SRC
          - name: A2UI5_MCP_WORKSPACE
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_WORKSPACE
          - name: A2UI5_MCP_BACKEND
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_BACKEND
          - name: A2UI5_MCP_RUNTIME_VERSION
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_RUNTIME_VERSION
          - name: A2UI5_MCP_PORT
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_PORT
          - name: A2UI5_MCP_UI
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_UI
          - name: A2UI5_MCP_APP_FORMAT
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_APP_FORMAT
          - name: A2UI5_MCP_OFFLINE
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_OFFLINE
          - name: A2UI5_MCP_REMOTE
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_REMOTE
          - name: A2UI5_MCP_REMOTE_DIR
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_REMOTE_DIR
          - name: A2UI5_MCP_REMOTE_TTL_MS
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_REMOTE_TTL_MS
          - name: A2UI5_MCP_UI5_CACHE_MB
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_UI5_CACHE_MB
          - name: A2UI5_MCP_RENDER_PAGES
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_RENDER_PAGES
          - name: A2UI5_MCP_CHROMIUM
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_CHROMIUM
          - name: A2UI5_MCP_SCREENSHOT_DIR
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_SCREENSHOT_DIR
          - name: A2UI5_MCP_PREBUILT_URL
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_PREBUILT_URL
          - name: A2UI5_MCP_LINT_WORKER
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_LINT_WORKER
          - name: A2UI5_MCP_LINT_IDLE_MS
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_LINT_IDLE_MS
          - name: A2UI5_MCP_LINT_TIMEOUT_MS
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_LINT_TIMEOUT_MS
          - name: A2UI5_MCP_SCOPE_TIMEOUT_MS
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_SCOPE_TIMEOUT_MS
          - name: A2UI5_MCP_BUILD_TIMEOUT_MS
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_BUILD_TIMEOUT_MS
          - name: A2UI5_MCP_UNIT_TIMEOUT_MS
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_UNIT_TIMEOUT_MS
          - name: A2UI5_MCP_SYSTEM_URL
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_SYSTEM_URL
          - name: A2UI5_MCP_SYSTEM_USER
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_SYSTEM_USER
          - name: A2UI5_MCP_SYSTEM_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_SYSTEM_PASSWORD
          - name: A2UI5_MCP_SYSTEM_PASSWORD_CMD
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_SYSTEM_PASSWORD_CMD
          - name: A2UI5_MCP_SYSTEM_INSECURE_TLS
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: A2UI5_MCP_SYSTEM_INSECURE_TLS
          - name: GITHUB_TOKEN
            valueFrom:
              secretKeyRef:
                name: mcp-credentials
                key: GITHUB_TOKEN
          command:
          - sh
          - -c
          - npx -y supergateway@4 --stdio 'npx -y @abap2ui5/[email protected]' --outputTransport streamableHttp
            --stateful --host 0.0.0.0 --port 8000 --streamableHttpPath /mcp --healthEndpoint /healthz
          readinessProbe:
            httpGet:
              path: /healthz
              port: http
            initialDelaySeconds: 10
    
    # helm install my-agent helm/my-agent -n mcp
    

    in the cloud

    one click: the provider's deploy form opens filled in, in your own account
    koyeb

    The form opens with CHANGE_ME for each value you supply: AI_VIEW_CHECK_HOME, A2UI5_HOME, SAMPLES_CONTROLS_HOME, SAMPLES_HOME, SAMPLES_STACK_HOME, APP_TEMPLATE_HOME, DOCS_HOME, ABAP_CLOUD_GUI_HOME, POPUPS_HOME, OPENUI5_SRC, A2UI5_MCP_WORKSPACE, A2UI5_MCP_BACKEND, A2UI5_MCP_RUNTIME_VERSION, A2UI5_MCP_PORT, A2UI5_MCP_UI, A2UI5_MCP_APP_FORMAT, A2UI5_MCP_OFFLINE, A2UI5_MCP_REMOTE, A2UI5_MCP_REMOTE_DIR, A2UI5_MCP_REMOTE_TTL_MS, A2UI5_MCP_UI5_CACHE_MB, A2UI5_MCP_RENDER_PAGES, A2UI5_MCP_CHROMIUM, A2UI5_MCP_SCREENSHOT_DIR, A2UI5_MCP_PREBUILT_URL, A2UI5_MCP_LINT_WORKER, A2UI5_MCP_LINT_IDLE_MS, A2UI5_MCP_LINT_TIMEOUT_MS, A2UI5_MCP_SCOPE_TIMEOUT_MS, A2UI5_MCP_BUILD_TIMEOUT_MS, A2UI5_MCP_UNIT_TIMEOUT_MS, A2UI5_MCP_SYSTEM_URL, A2UI5_MCP_SYSTEM_USER, A2UI5_MCP_SYSTEM_PASSWORD, A2UI5_MCP_SYSTEM_PASSWORD_CMD, A2UI5_MCP_SYSTEM_INSECURE_TLS, GITHUB_TOKEN. Fill them in before you deploy.

    Clients connect to the service's https://…koyeb.app address plus /mcp.

    azure

    A Container Apps environment with one app per server, each with HTTPS ingress and one replica. The portal asks for each value you supply as a secure parameter; the deployment's outputs list the endpoints.

    connect to it

    copy what your client needs
    npx -y @abap2ui5/[email protected]
    # env: AI_VIEW_CHECK_HOME, A2UI5_HOME, SAMPLES_CONTROLS_HOME, SAMPLES_HOME, SAMPLES_STACK_HOME, APP_TEMPLATE_HOME, DOCS_HOME, ABAP_CLOUD_GUI_HOME, POPUPS_HOME, OPENUI5_SRC, A2UI5_MCP_WORKSPACE, A2UI5_MCP_BACKEND, A2UI5_MCP_RUNTIME_VERSION, A2UI5_MCP_PORT, A2UI5_MCP_UI, A2UI5_MCP_APP_FORMAT, A2UI5_MCP_OFFLINE, A2UI5_MCP_REMOTE, A2UI5_MCP_REMOTE_DIR, A2UI5_MCP_REMOTE_TTL_MS, A2UI5_MCP_UI5_CACHE_MB, A2UI5_MCP_RENDER_PAGES, A2UI5_MCP_CHROMIUM, A2UI5_MCP_SCREENSHOT_DIR, A2UI5_MCP_PREBUILT_URL, A2UI5_MCP_LINT_WORKER, A2UI5_MCP_LINT_IDLE_MS, A2UI5_MCP_LINT_TIMEOUT_MS, A2UI5_MCP_SCOPE_TIMEOUT_MS, A2UI5_MCP_BUILD_TIMEOUT_MS, A2UI5_MCP_UNIT_TIMEOUT_MS, A2UI5_MCP_SYSTEM_URL, A2UI5_MCP_SYSTEM_USER, A2UI5_MCP_SYSTEM_PASSWORD, A2UI5_MCP_SYSTEM_PASSWORD_CMD, A2UI5_MCP_SYSTEM_INSECURE_TLS, GITHUB_TOKEN
    {
      "mcpServers": {
        "abap2ui5": {
          "command": "npx",
          "args": [
            "-y",
            "@abap2ui5/[email protected]"
          ],
          "env": {
            "AI_VIEW_CHECK_HOME": "${AI_VIEW_CHECK_HOME}",
            "A2UI5_HOME": "${A2UI5_HOME}",
            "SAMPLES_CONTROLS_HOME": "${SAMPLES_CONTROLS_HOME}",
            "SAMPLES_HOME": "${SAMPLES_HOME}",
            "SAMPLES_STACK_HOME": "${SAMPLES_STACK_HOME}",
            "APP_TEMPLATE_HOME": "${APP_TEMPLATE_HOME}",
            "DOCS_HOME": "${DOCS_HOME}",
            "ABAP_CLOUD_GUI_HOME": "${ABAP_CLOUD_GUI_HOME}",
            "POPUPS_HOME": "${POPUPS_HOME}",
            "OPENUI5_SRC": "${OPENUI5_SRC}",
            "A2UI5_MCP_WORKSPACE": "${A2UI5_MCP_WORKSPACE}",
            "A2UI5_MCP_BACKEND": "${A2UI5_MCP_BACKEND}",
            "A2UI5_MCP_RUNTIME_VERSION": "${A2UI5_MCP_RUNTIME_VERSION}",
            "A2UI5_MCP_PORT": "${A2UI5_MCP_PORT}",
            "A2UI5_MCP_UI": "${A2UI5_MCP_UI}",
            "A2UI5_MCP_APP_FORMAT": "${A2UI5_MCP_APP_FORMAT}",
            "A2UI5_MCP_OFFLINE": "${A2UI5_MCP_OFFLINE}",
            "A2UI5_MCP_REMOTE": "${A2UI5_MCP_REMOTE}",
            "A2UI5_MCP_REMOTE_DIR": "${A2UI5_MCP_REMOTE_DIR}",
            "A2UI5_MCP_REMOTE_TTL_MS": "${A2UI5_MCP_REMOTE_TTL_MS}",
            "A2UI5_MCP_UI5_CACHE_MB": "${A2UI5_MCP_UI5_CACHE_MB}",
            "A2UI5_MCP_RENDER_PAGES": "${A2UI5_MCP_RENDER_PAGES}",
            "A2UI5_MCP_CHROMIUM": "${A2UI5_MCP_CHROMIUM}",
            "A2UI5_MCP_SCREENSHOT_DIR": "${A2UI5_MCP_SCREENSHOT_DIR}",
            "A2UI5_MCP_PREBUILT_URL": "${A2UI5_MCP_PREBUILT_URL}",
            "A2UI5_MCP_LINT_WORKER": "${A2UI5_MCP_LINT_WORKER}",
            "A2UI5_MCP_LINT_IDLE_MS": "${A2UI5_MCP_LINT_IDLE_MS}",
            "A2UI5_MCP_LINT_TIMEOUT_MS": "${A2UI5_MCP_LINT_TIMEOUT_MS}",
            "A2UI5_MCP_SCOPE_TIMEOUT_MS": "${A2UI5_MCP_SCOPE_TIMEOUT_MS}",
            "A2UI5_MCP_BUILD_TIMEOUT_MS": "${A2UI5_MCP_BUILD_TIMEOUT_MS}",
            "A2UI5_MCP_UNIT_TIMEOUT_MS": "${A2UI5_MCP_UNIT_TIMEOUT_MS}",
            "A2UI5_MCP_SYSTEM_URL": "${A2UI5_MCP_SYSTEM_URL}",
            "A2UI5_MCP_SYSTEM_USER": "${A2UI5_MCP_SYSTEM_USER}",
            "A2UI5_MCP_SYSTEM_PASSWORD": "${A2UI5_MCP_SYSTEM_PASSWORD}",
            "A2UI5_MCP_SYSTEM_PASSWORD_CMD": "${A2UI5_MCP_SYSTEM_PASSWORD_CMD}",
            "A2UI5_MCP_SYSTEM_INSECURE_TLS": "${A2UI5_MCP_SYSTEM_INSECURE_TLS}",
            "GITHUB_TOKEN": "${GITHUB_TOKEN}"
          }
        }
      }
    }
    #!/usr/bin/env bash
    # Registers every server with Claude Code (run once; `claude mcp list` to check).
    set -euo pipefail
    set -a; [ -f .env ] && source .env; set +a
    claude mcp add abap2ui5 -e "AI_VIEW_CHECK_HOME=${AI_VIEW_CHECK_HOME}" -e "A2UI5_HOME=${A2UI5_HOME}" -e "SAMPLES_CONTROLS_HOME=${SAMPLES_CONTROLS_HOME}" -e "SAMPLES_HOME=${SAMPLES_HOME}" -e "SAMPLES_STACK_HOME=${SAMPLES_STACK_HOME}" -e "APP_TEMPLATE_HOME=${APP_TEMPLATE_HOME}" -e "DOCS_HOME=${DOCS_HOME}" -e "ABAP_CLOUD_GUI_HOME=${ABAP_CLOUD_GUI_HOME}" -e "POPUPS_HOME=${POPUPS_HOME}" -e "OPENUI5_SRC=${OPENUI5_SRC}" -e "A2UI5_MCP_WORKSPACE=${A2UI5_MCP_WORKSPACE}" -e "A2UI5_MCP_BACKEND=${A2UI5_MCP_BACKEND}" -e "A2UI5_MCP_RUNTIME_VERSION=${A2UI5_MCP_RUNTIME_VERSION}" -e "A2UI5_MCP_PORT=${A2UI5_MCP_PORT}" -e "A2UI5_MCP_UI=${A2UI5_MCP_UI}" -e "A2UI5_MCP_APP_FORMAT=${A2UI5_MCP_APP_FORMAT}" -e "A2UI5_MCP_OFFLINE=${A2UI5_MCP_OFFLINE}" -e "A2UI5_MCP_REMOTE=${A2UI5_MCP_REMOTE}" -e "A2UI5_MCP_REMOTE_DIR=${A2UI5_MCP_REMOTE_DIR}" -e "A2UI5_MCP_REMOTE_TTL_MS=${A2UI5_MCP_REMOTE_TTL_MS}" -e "A2UI5_MCP_UI5_CACHE_MB=${A2UI5_MCP_UI5_CACHE_MB}" -e "A2UI5_MCP_RENDER_PAGES=${A2UI5_MCP_RENDER_PAGES}" -e "A2UI5_MCP_CHROMIUM=${A2UI5_MCP_CHROMIUM}" -e "A2UI5_MCP_SCREENSHOT_DIR=${A2UI5_MCP_SCREENSHOT_DIR}" -e "A2UI5_MCP_PREBUILT_URL=${A2UI5_MCP_PREBUILT_URL}" -e "A2UI5_MCP_LINT_WORKER=${A2UI5_MCP_LINT_WORKER}" -e "A2UI5_MCP_LINT_IDLE_MS=${A2UI5_MCP_LINT_IDLE_MS}" -e "A2UI5_MCP_LINT_TIMEOUT_MS=${A2UI5_MCP_LINT_TIMEOUT_MS}" -e "A2UI5_MCP_SCOPE_TIMEOUT_MS=${A2UI5_MCP_SCOPE_TIMEOUT_MS}" -e "A2UI5_MCP_BUILD_TIMEOUT_MS=${A2UI5_MCP_BUILD_TIMEOUT_MS}" -e "A2UI5_MCP_UNIT_TIMEOUT_MS=${A2UI5_MCP_UNIT_TIMEOUT_MS}" -e "A2UI5_MCP_SYSTEM_URL=${A2UI5_MCP_SYSTEM_URL}" -e "A2UI5_MCP_SYSTEM_USER=${A2UI5_MCP_SYSTEM_USER}" -e "A2UI5_MCP_SYSTEM_PASSWORD=${A2UI5_MCP_SYSTEM_PASSWORD}" -e "A2UI5_MCP_SYSTEM_PASSWORD_CMD=${A2UI5_MCP_SYSTEM_PASSWORD_CMD}" -e "A2UI5_MCP_SYSTEM_INSECURE_TLS=${A2UI5_MCP_SYSTEM_INSECURE_TLS}" -e "GITHUB_TOKEN=${GITHUB_TOKEN}" -- npx -y @abap2ui5/[email protected]
    
    {
      "mcpServers": {
        "abap2ui5": {
          "command": "npx",
          "args": [
            "-y",
            "@abap2ui5/[email protected]"
          ],
          "env": {
            "AI_VIEW_CHECK_HOME": "${AI_VIEW_CHECK_HOME}",
            "A2UI5_HOME": "${A2UI5_HOME}",
            "SAMPLES_CONTROLS_HOME": "${SAMPLES_CONTROLS_HOME}",
            "SAMPLES_HOME": "${SAMPLES_HOME}",
            "SAMPLES_STACK_HOME": "${SAMPLES_STACK_HOME}",
            "APP_TEMPLATE_HOME": "${APP_TEMPLATE_HOME}",
            "DOCS_HOME": "${DOCS_HOME}",
            "ABAP_CLOUD_GUI_HOME": "${ABAP_CLOUD_GUI_HOME}",
            "POPUPS_HOME": "${POPUPS_HOME}",
            "OPENUI5_SRC": "${OPENUI5_SRC}",
            "A2UI5_MCP_WORKSPACE": "${A2UI5_MCP_WORKSPACE}",
            "A2UI5_MCP_BACKEND": "${A2UI5_MCP_BACKEND}",
            "A2UI5_MCP_RUNTIME_VERSION": "${A2UI5_MCP_RUNTIME_VERSION}",
            "A2UI5_MCP_PORT": "${A2UI5_MCP_PORT}",
            "A2UI5_MCP_UI": "${A2UI5_MCP_UI}",
            "A2UI5_MCP_APP_FORMAT": "${A2UI5_MCP_APP_FORMAT}",
            "A2UI5_MCP_OFFLINE": "${A2UI5_MCP_OFFLINE}",
            "A2UI5_MCP_REMOTE": "${A2UI5_MCP_REMOTE}",
            "A2UI5_MCP_REMOTE_DIR": "${A2UI5_MCP_REMOTE_DIR}",
            "A2UI5_MCP_REMOTE_TTL_MS": "${A2UI5_MCP_REMOTE_TTL_MS}",
            "A2UI5_MCP_UI5_CACHE_MB": "${A2UI5_MCP_UI5_CACHE_MB}",
            "A2UI5_MCP_RENDER_PAGES": "${A2UI5_MCP_RENDER_PAGES}",
            "A2UI5_MCP_CHROMIUM": "${A2UI5_MCP_CHROMIUM}",
            "A2UI5_MCP_SCREENSHOT_DIR": "${A2UI5_MCP_SCREENSHOT_DIR}",
            "A2UI5_MCP_PREBUILT_URL": "${A2UI5_MCP_PREBUILT_URL}",
            "A2UI5_MCP_LINT_WORKER": "${A2UI5_MCP_LINT_WORKER}",
            "A2UI5_MCP_LINT_IDLE_MS": "${A2UI5_MCP_LINT_IDLE_MS}",
            "A2UI5_MCP_LINT_TIMEOUT_MS": "${A2UI5_MCP_LINT_TIMEOUT_MS}",
            "A2UI5_MCP_SCOPE_TIMEOUT_MS": "${A2UI5_MCP_SCOPE_TIMEOUT_MS}",
            "A2UI5_MCP_BUILD_TIMEOUT_MS": "${A2UI5_MCP_BUILD_TIMEOUT_MS}",
            "A2UI5_MCP_UNIT_TIMEOUT_MS": "${A2UI5_MCP_UNIT_TIMEOUT_MS}",
            "A2UI5_MCP_SYSTEM_URL": "${A2UI5_MCP_SYSTEM_URL}",
            "A2UI5_MCP_SYSTEM_USER": "${A2UI5_MCP_SYSTEM_USER}",
            "A2UI5_MCP_SYSTEM_PASSWORD": "${A2UI5_MCP_SYSTEM_PASSWORD}",
            "A2UI5_MCP_SYSTEM_PASSWORD_CMD": "${A2UI5_MCP_SYSTEM_PASSWORD_CMD}",
            "A2UI5_MCP_SYSTEM_INSECURE_TLS": "${A2UI5_MCP_SYSTEM_INSECURE_TLS}",
            "GITHUB_TOKEN": "${GITHUB_TOKEN}"
          }
        }
      }
    }
    {
      "servers": {
        "abap2ui5": {
          "type": "stdio",
          "command": "npx",
          "args": [
            "-y",
            "@abap2ui5/[email protected]"
          ],
          "env": {
            "AI_VIEW_CHECK_HOME": "${AI_VIEW_CHECK_HOME}",
            "A2UI5_HOME": "${A2UI5_HOME}",
            "SAMPLES_CONTROLS_HOME": "${SAMPLES_CONTROLS_HOME}",
            "SAMPLES_HOME": "${SAMPLES_HOME}",
            "SAMPLES_STACK_HOME": "${SAMPLES_STACK_HOME}",
            "APP_TEMPLATE_HOME": "${APP_TEMPLATE_HOME}",
            "DOCS_HOME": "${DOCS_HOME}",
            "ABAP_CLOUD_GUI_HOME": "${ABAP_CLOUD_GUI_HOME}",
            "POPUPS_HOME": "${POPUPS_HOME}",
            "OPENUI5_SRC": "${OPENUI5_SRC}",
            "A2UI5_MCP_WORKSPACE": "${A2UI5_MCP_WORKSPACE}",
            "A2UI5_MCP_BACKEND": "${A2UI5_MCP_BACKEND}",
            "A2UI5_MCP_RUNTIME_VERSION": "${A2UI5_MCP_RUNTIME_VERSION}",
            "A2UI5_MCP_PORT": "${A2UI5_MCP_PORT}",
            "A2UI5_MCP_UI": "${A2UI5_MCP_UI}",
            "A2UI5_MCP_APP_FORMAT": "${A2UI5_MCP_APP_FORMAT}",
            "A2UI5_MCP_OFFLINE": "${A2UI5_MCP_OFFLINE}",
            "A2UI5_MCP_REMOTE": "${A2UI5_MCP_REMOTE}",
            "A2UI5_MCP_REMOTE_DIR": "${A2UI5_MCP_REMOTE_DIR}",
            "A2UI5_MCP_REMOTE_TTL_MS": "${A2UI5_MCP_REMOTE_TTL_MS}",
            "A2UI5_MCP_UI5_CACHE_MB": "${A2UI5_MCP_UI5_CACHE_MB}",
            "A2UI5_MCP_RENDER_PAGES": "${A2UI5_MCP_RENDER_PAGES}",
            "A2UI5_MCP_CHROMIUM": "${A2UI5_MCP_CHROMIUM}",
            "A2UI5_MCP_SCREENSHOT_DIR": "${A2UI5_MCP_SCREENSHOT_DIR}",
            "A2UI5_MCP_PREBUILT_URL": "${A2UI5_MCP_PREBUILT_URL}",
            "A2UI5_MCP_LINT_WORKER": "${A2UI5_MCP_LINT_WORKER}",
            "A2UI5_MCP_LINT_IDLE_MS": "${A2UI5_MCP_LINT_IDLE_MS}",
            "A2UI5_MCP_LINT_TIMEOUT_MS": "${A2UI5_MCP_LINT_TIMEOUT_MS}",
            "A2UI5_MCP_SCOPE_TIMEOUT_MS": "${A2UI5_MCP_SCOPE_TIMEOUT_MS}",
            "A2UI5_MCP_BUILD_TIMEOUT_MS": "${A2UI5_MCP_BUILD_TIMEOUT_MS}",
            "A2UI5_MCP_UNIT_TIMEOUT_MS": "${A2UI5_MCP_UNIT_TIMEOUT_MS}",
            "A2UI5_MCP_SYSTEM_URL": "${A2UI5_MCP_SYSTEM_URL}",
            "A2UI5_MCP_SYSTEM_USER": "${A2UI5_MCP_SYSTEM_USER}",
            "A2UI5_MCP_SYSTEM_PASSWORD": "${A2UI5_MCP_SYSTEM_PASSWORD}",
            "A2UI5_MCP_SYSTEM_PASSWORD_CMD": "${A2UI5_MCP_SYSTEM_PASSWORD_CMD}",
            "A2UI5_MCP_SYSTEM_INSECURE_TLS": "${A2UI5_MCP_SYSTEM_INSECURE_TLS}",
            "GITHUB_TOKEN": "${GITHUB_TOKEN}"
          }
        }
      }
    }
    name: my-agent
    target: local
    servers:
    - hub: io.github.abap2UI5/mcp-server
    
    • not probed yet: tools unpinned, ingest lists them

    tools

    Not probed yetThe tools appear once the hub or its worker has listed this entry. Running it still works: your client lists them on first start.