From 60bf11739478aad7485b9a46f3f381494f4a2fdf Mon Sep 17 00:00:00 2001 From: Florian Vogt Date: Thu, 18 Sep 2025 14:54:59 +0200 Subject: [PATCH 1/4] ci: Enable publish to mcp registry --- .github/workflows/release-please.yml | 7 +++ package.json | 1 + release-please-config.json | 9 +++- server.json | 64 ++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 server.json diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index ac42b08..1421861 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -54,3 +54,10 @@ jobs: mv package.json.bak package.json - name: Publish to npm run: npm publish --access public + - name: Install MCP Publisher + run: | + curl -L "https://github.com/modelcontextprotocol/registry/releases/download/v1.0.0/mcp-publisher_1.0.0_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher + - name: Login to MCP Registry + run: ./mcp-publisher login github-oidc + - name: Publish to MCP Registry + run: ./mcp-publisher publish diff --git a/package.json b/package.json index 691e30a..4f7aa6c 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "bin": { "ui5mcp": "bin/ui5mcp.js" }, + "mcpName": "io.github.UI5/mcp-server", "type": "module", "scripts": { "start": "tsx src/cli.ts", diff --git a/release-please-config.json b/release-please-config.json index ba621df..4010b4b 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -63,6 +63,13 @@ "hidden": true } ] - } + }, + "extra-files": [ + { + "type": "json", + "path": "server.json", + "jsonpath": "$..version" + } + ] } } diff --git a/server.json b/server.json new file mode 100644 index 0000000..e421434 --- /dev/null +++ b/server.json @@ -0,0 +1,64 @@ +{ + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "name": "io.github.UI5/mcp-server", + "description": "A MCP server for UI5", + "status": "active", + "repository": { + "url": "https://github.com/UI5/mcp-server", + "source": "github" + }, + "version": "0.1.1", + "packages": [ + { + "registry_type": "npm", + "registry_base_url": "https://registry.npmjs.org", + "identifier": "@ui5/mcp-server", + "version": "0.1.1", + "transport": { + "type": "stdio" + }, + "environment_variables": [ + { + "default": "localhost, services.odata.org", + "description": "A comma-separated list of domains that are allowed to be used in the 'oDataV4Url' parameter of the 'create_ui5_app' tool, for example: 'localhost, example.com, sub.example.com'. Set to an empty string to allow any domains. For wildcard subdomains, prefix the domain with a dot: '.example.com'. This will match 'www.example.com' but not 'example.com'.", + "is_required": false, + "format": "string", + "is_secret": false, + "name": "UI5_MCP_SERVER_ALLOWED_ODATA_DOMAINS" + }, + { + "default": "false", + "description": "Set to any value to disable structured content in the MCP server responses.", + "is_required": false, + "format": "boolean", + "is_secret": false, + "name": "UI5_MCP_SERVER_RESPONSE_NO_STRUCTURED_CONTENT" + }, + { + "default": "false", + "description": "Set to any value to disable resources in the MCP server responses, see https://modelcontextprotocol.io/specification/2025-06-18/server/resource. This is useful for clients that do not support resources, see https://modelcontextprotocol.io/clients, such as Cursor or the Gemini CLI.", + "is_required": false, + "format": "string", + "is_secret": false, + "name": "UI5_MCP_SERVER_RESPONSE_NO_RESOURCES" + }, + { + "default": "info", + "description": "Internal log level, see https://sap.github.io/ui5-tooling/stable/pages/Troubleshooting/#changing-the-log-level): 'silent', 'error', 'warn', 'info', 'perf', 'verbose' or 'silly'", + "is_required": false, + "format": "string", + "is_secret": false, + "name": "UI5_LOG_LVL" + }, + { + "default": "The '.ui5' directory in the user's home directory", + "description": "Directory where the MCP server stores its data, such as cached API references.", + "is_required": false, + "format": "string", + "is_secret": false, + "name": "UI5_DATA_DIR" + } + ] + } + ] +} From 2fab47f553d1ec2cf5cbbebb86ec82de87c6f869 Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Tue, 18 Nov 2025 14:48:43 +0100 Subject: [PATCH 2/4] ci: Add separate MCP registry publish workflow --- .github/workflows/publish-mcp-registry.yml | 50 ++++++++++++++++++++++ .github/workflows/release-please.yml | 12 +++--- 2 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/publish-mcp-registry.yml diff --git a/.github/workflows/publish-mcp-registry.yml b/.github/workflows/publish-mcp-registry.yml new file mode 100644 index 0000000..4307490 --- /dev/null +++ b/.github/workflows/publish-mcp-registry.yml @@ -0,0 +1,50 @@ +name: Publish to MCP Registry + +env: + # Releases: https://github.com/modelcontextprotocol/registry/releases + DEFAULT_MCP_PUBLISHER_VERSION: 'v1.3.10' + +on: + # Allow this workflow to be called from other workflows + workflow_call: + # Allow manual triggering + workflow_dispatch: + inputs: + mcp_publisher_version: + description: 'MCP Publisher version to use' + required: false + type: string + default: '${{ env.DEFAULT_MCP_PUBLISHER_VERSION }}' + dry_run: + description: 'Run in dry-run mode (install and login only, no publishing)' + required: false + type: boolean + default: true + # Trigger dry-run on changes to this workflow file + pull_request: + paths: + - '.github/workflows/publish-mcp-registry.yml' + branches: + - main + +permissions: + id-token: write # Required for login via github-oidc + contents: read + +jobs: + publish-mcp-registry: + runs-on: ubuntu-24.04 + steps: + - name: Checkout + uses: actions/checkout@v5 + - name: Install MCP Publisher + run: | + MCP_PUBLISHER_VERSION="${{ inputs.mcp_publisher_version || env.DEFAULT_MCP_PUBLISHER_VERSION }}" + MCP_PUBLISHER_OS_ARCH="$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')" + MCP_PUBLISHER_DOWNLOAD_URL="https://github.com/modelcontextprotocol/registry/releases/download/${MCP_PUBLISHER_VERSION}/mcp-publisher_${MCP_PUBLISHER_OS_ARCH}.tar.gz" + curl -L "${MCP_PUBLISHER_DOWNLOAD_URL}" | tar xz mcp-publisher + - name: Login to MCP Registry + run: ./mcp-publisher login github-oidc + - name: Publish to MCP Registry + if: ${{ inputs.dry_run != true && github.event_name != 'pull_request' }} + run: ./mcp-publisher publish diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 1421861..dd073a8 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -54,10 +54,8 @@ jobs: mv package.json.bak package.json - name: Publish to npm run: npm publish --access public - - name: Install MCP Publisher - run: | - curl -L "https://github.com/modelcontextprotocol/registry/releases/download/v1.0.0/mcp-publisher_1.0.0_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher - - name: Login to MCP Registry - run: ./mcp-publisher login github-oidc - - name: Publish to MCP Registry - run: ./mcp-publisher publish + + publish-mcp-registry: + needs: [pull-request, publish-package] + if: ${{needs.pull-request.outputs.releases_created && toJson(fromJson(needs.pull-request.outputs.paths_released)) != '[]'}} + uses: ./.github/workflows/publish-mcp-registry.yml From be8903b6ddcd963fda00defcb96bfa1b28a5a723 Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Tue, 18 Nov 2025 15:28:43 +0100 Subject: [PATCH 3/4] ci: Adjust server.json to latest spec version --- README.md | 2 +- server.json | 35 +++++++++++++++++------------------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index af39d6e..d2b8c30 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,7 @@ The UI5 MCP server can be configured using the following environment variables. * Description: Set to any value to disable [resources](https://modelcontextprotocol.io/specification/2025-06-18/server/resources) in the MCP server responses. This is useful for [clients that do not support resources](https://modelcontextprotocol.io/clients), such as Cursor or the Gemini CLI. * **`UI5_LOG_LVL`**: * Default Value: `info` - * Description: Internal [log level](https://sap.github.io/ui5-tooling/stable/pages/Troubleshooting/#changing-the-log-level): `silent`, `error`, `warn`, `info`, `perf`, `verbose`, `silly` + * Description: Internal [log level](https://ui5.github.io/cli/stable/pages/Troubleshooting/#changing-the-log-level): `silent`, `error`, `warn`, `info`, `perf`, `verbose`, `silly` * **`UI5_DATA_DIR`**: * Default Value: The `.ui5` directory in the user's home directory * Description: Directory where the MCP server stores its data, such as cached API references diff --git a/server.json b/server.json index e421434..97b6f5d 100644 --- a/server.json +++ b/server.json @@ -1,61 +1,60 @@ { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-07-09/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json", "name": "io.github.UI5/mcp-server", "description": "A MCP server for UI5", - "status": "active", "repository": { "url": "https://github.com/UI5/mcp-server", "source": "github" }, - "version": "0.1.1", + "version": "0.1.3", "packages": [ { - "registry_type": "npm", - "registry_base_url": "https://registry.npmjs.org", + "registryType": "npm", + "registryBaseUrl": "https://registry.npmjs.org", "identifier": "@ui5/mcp-server", - "version": "0.1.1", + "version": "0.1.3", "transport": { "type": "stdio" }, - "environment_variables": [ + "environmentVariables": [ { "default": "localhost, services.odata.org", "description": "A comma-separated list of domains that are allowed to be used in the 'oDataV4Url' parameter of the 'create_ui5_app' tool, for example: 'localhost, example.com, sub.example.com'. Set to an empty string to allow any domains. For wildcard subdomains, prefix the domain with a dot: '.example.com'. This will match 'www.example.com' but not 'example.com'.", - "is_required": false, + "isRequired": false, "format": "string", - "is_secret": false, + "isSecret": false, "name": "UI5_MCP_SERVER_ALLOWED_ODATA_DOMAINS" }, { "default": "false", "description": "Set to any value to disable structured content in the MCP server responses.", - "is_required": false, + "isRequired": false, "format": "boolean", - "is_secret": false, + "isSecret": false, "name": "UI5_MCP_SERVER_RESPONSE_NO_STRUCTURED_CONTENT" }, { "default": "false", "description": "Set to any value to disable resources in the MCP server responses, see https://modelcontextprotocol.io/specification/2025-06-18/server/resource. This is useful for clients that do not support resources, see https://modelcontextprotocol.io/clients, such as Cursor or the Gemini CLI.", - "is_required": false, + "isRequired": false, "format": "string", - "is_secret": false, + "isSecret": false, "name": "UI5_MCP_SERVER_RESPONSE_NO_RESOURCES" }, { "default": "info", - "description": "Internal log level, see https://sap.github.io/ui5-tooling/stable/pages/Troubleshooting/#changing-the-log-level): 'silent', 'error', 'warn', 'info', 'perf', 'verbose' or 'silly'", - "is_required": false, + "description": "Internal log level (https://ui5.github.io/cli/stable/pages/Troubleshooting/#changing-the-log-level): 'silent', 'error', 'warn', 'info', 'perf', 'verbose' or 'silly'", + "isRequired": false, "format": "string", - "is_secret": false, + "isSecret": false, "name": "UI5_LOG_LVL" }, { "default": "The '.ui5' directory in the user's home directory", "description": "Directory where the MCP server stores its data, such as cached API references.", - "is_required": false, + "isRequired": false, "format": "string", - "is_secret": false, + "isSecret": false, "name": "UI5_DATA_DIR" } ] From f8c8ead9e157619298e1a1fec853d431ce550528 Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Tue, 18 Nov 2025 16:36:45 +0100 Subject: [PATCH 4/4] docs: Update project description --- README.md | 2 +- package.json | 2 +- server.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d2b8c30..33f3292 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # UI5 MCP Server -A [Model Context Protocol](https://modelcontextprotocol.io/) server for UI5 development. +A [Model Context Protocol](https://modelcontextprotocol.io/) server for UI5 application development. [![OpenUI5 Community Slack (#tooling channel)](https://img.shields.io/badge/slack-join-44cc11.svg)](https://ui5-slack-invite.cfapps.eu10.hana.ondemand.com/) [![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.1%20adopted-ff69b4.svg)](https://github.com/UI5/mcp-server?tab=coc-ov-file#readme) diff --git a/package.json b/package.json index 4f7aa6c..c61ef05 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@ui5/mcp-server", "version": "0.1.3", - "description": "A MCP server for UI5", + "description": "MCP server for UI5 application development", "author": { "name": "SAP SE", "email": "openui5@sap.com", diff --git a/server.json b/server.json index 97b6f5d..fd72082 100644 --- a/server.json +++ b/server.json @@ -1,7 +1,7 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json", "name": "io.github.UI5/mcp-server", - "description": "A MCP server for UI5", + "description": "MCP server for UI5 application development", "repository": { "url": "https://github.com/UI5/mcp-server", "source": "github"