feat: Add ADP specific tools#4670
Open
nikmace wants to merge 103 commits into
Open
Conversation
…CP tools Promotes generate-fiori-ui-application, generate-fiori-ui-application-cap, fetch-service-metadata to dedicated top-level tools (generate_fiori_app_odata, generate_fiori_app_cap, download_odata_service_metadata, list_sap_systems), removing them from the 3-step list/get_details/execute workflow. Reduces round-trips for generation workflows from 3 calls to 1. Updates list_functionality description to reflect its focused scope on app-modification operations only.
Adds tests for list_sap_systems, download_odata_service_metadata, generate_fiori_app_odata and generate_fiori_app_cap to meet 80% coverage threshold.
🦋 Changeset detectedLatest commit: f1e6cae The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
…romotion - Remove duplicate DownloadODataServiceMetadataInput type from input.ts (defined once in types/index.ts) - Add FETCH_SERVICE_METADATA_ID and GENERATE_FIORI_UI_APPLICATION_ID constants to constant.ts - Use constants instead of string literals in download-odata-service-metadata.ts and generate-fiori-app-odata.ts - Add generatorConfigOData.parse() and generatorConfigCAP.parse() for early Zod validation in generator tools - Remove no-op required:[] from list_sap_systems input schema - Update tests to mock Zod schemas and assert parse is called before execute
* origin/main: (77 commits) chore: apply latest changesets feat(create): add flp embedded mode (#4641) chore: apply latest changesets fix: When we get the service uri from the ui5.yaml > adp > target object we use the context to determine whether to use the destination in the target or the url. (#4667) chore: apply latest changesets feat(`ui5-application-inquirer`): Adds default name pattern (#4698) chore: apply latest changesets fix: update guidance for fiori extension development (#4696) chore: apply latest changesets Feat: add sap-description-column-label ESLint rule (#4542) chore: adjust AGENTS.md (#4703) chore: apply latest changesets feat(project-access): add method `getUsedEntitiesFromManifest` returning used entitySets (V4) by page and views from manifest.json (#4697) chore: apply latest changesets feat(ui5-test-writer): Generate tests for Actions on the Object Page (#4632) chore: apply latest changesets fix(deploy-tooling): skip ATO prefix enforcement for on-premise systems (#4687) chore: apply latest changesets chore: bump used versions in adaptation project for Cloud Foundry (#4685) chore: apply latest changesets ...
heimwege
reviewed
May 29, 2026
| @@ -0,0 +1,362 @@ | |||
| --- | |||
Contributor
There was a problem hiding this comment.
General:
- please prefix skills with
sap-fiori-*because they we prefer to have our skills grouped when installed locally or globally (all installed skills will be in a flat list in.agents/skills) - please add author (
sap-fiori-tools) and version (0.0.1?) to the frontmatter of each skill - Please make sure the skill is self-contained. This skill seems to have an installed fiori-mcp as prerequisite but does not mention it (including instructions how to install or where to find instructions how to install). This will cause issues if the skill has been found e.g. on skills.sh and was installed using cli command
npx skills add <skill url>w/o having the fiori-mcp installed.
Contributor
Author
There was a problem hiding this comment.
Fixed for this skill. Note that sap-fiori-add-visual-filter, sap-fiori-analytical-chart, and sap-fiori-opa5-test-development have the same gap — they reference fiori-mcp tools without installation instructions.
…lures - Resolve merge conflicts in server.ts, tools/index.ts, types/index.ts, and functionalities/functionalities.ts, merging .js ESM extensions from main with new tools (listSapSystems, downloadODataServiceMetadata, generateFioriAppOData, generateFioriAppCap, DownloadODataServiceMetadataInput) from HEAD - Add .js extensions to imports in new tool files (download-odata-service-metadata, generate-fiori-app-cap, generate-fiori-app-odata, list-sap-systems) - Remove unused imports from functionalities.ts to fix lint errors - Update tests to use jest.unstable_mockModule (ESM-compatible) pattern for new tool test files (list-sap-systems, download-odata-service-metadata, generate-fiori-app-odata, generate-fiori-app-cap) - Update server.test.ts to add new mock functions for new tools - Update list-functionalities.test.ts to include generate-fiori-ui-application-cap functionality and update snapshot
…oring Add explicit .js file extensions to all relative imports throughout src/ and test/ to comply with Node16/NodeNext module resolution requirements. Also includes additional refactoring changes accumulated on this branch.
* origin/main: fix(fiori-mcp-server): download ONNX model at runtime to reduce tgz below npm 100 MB limit (#4782) chore: apply latest changesets
* origin/main: fix(fiori-mcp-server): switch to onnxruntime-web (WASM) to reduce tgz to ~9 MB (#4784) chore: apply latest changesets feat(eslint-plugin-fiori-tools): lint flex change files (#4706) Converting the ADP int test to ESM (#4764) chore(workflows): apply OSPO GitHub hardening controls (OIDC + environments) (#4763) chore: apply latest changesets fix(fiori-mcp-server): exclude Windows GPU DLLs to reduce tgz below npm publish limit (#4783) chore: apply latest changesets
- Add GeneratorConfigOData/GeneratorConfigCAP to ToolArgs union in server.ts - Update README with new top-level tools and corrected list_functionality description - Wrap fetch-service-metadata execute handler in try/catch to return structured error responses instead of throwing (fixes #4652) - Update tests to assert structured error responses instead of rejects.toThrow
…names Rename promoted tools to match their underlying functionality IDs: - download_odata_service_metadata → fetch-service-metadata - generate_fiori_app_odata → generate-fiori-ui-application - generate_fiori_app_cap → generate-fiori-ui-application-cap
…efactor_fiori_mcp_tools
…en-adaptation-editor, and parser fixes - generate-adaptation-project: validation errors, success path, runCmd failure, password stripping, getDefaultProjectName off-by-one cases - open-adaptation-editor: spawn error, timeout, missing PID, success path - parser: language-tagged fence inside block, Path marker inside block, unclosed EOF
…om/SAP/open-ux-tools into feat/unified-flex-flow-for-adp-mcp
…daptation-project test
…om/SAP/open-ux-tools into feat/unified-flex-flow-for-adp-mcp
…-step, knowledge-base, processor - server.ts: add generate_adaptation_project, open_adaptation_editor, adp_controller_extension call-tool tests - knowledge-base.ts: add test for existingFiles branch (lines 142-147) - processor.ts: add test for non-PathTraversal write error (lines 55-59) - run-rta-workflow-step/index.ts: new test suite covering all 7 steps, session management, unknown step, and FrontendActionError propagation
…om/SAP/open-ux-tools into feat/unified-flex-flow-for-adp-mcp
…extracting helpers
…ty by extracting helpers
…aptation-editor.ts
…ler and playwright-bridge
…om/SAP/open-ux-tools into feat/unified-flex-flow-for-adp-mcp
…riant, playwright-bridge edge cases
… in open-adaptation-editor
…fields, null variant, playwright edge cases
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



feat(fiori-mcp-server): Add ADP-Specific MCP Tools
New Features
✨ Introduces three new top-level MCP tools for SAP Fiori Adaptation Projects (ADP) in the
fiori-mcp-serverpackage:generate_adaptation_project— Scaffolds a new SAP Fiori adaptation project by invoking the@sap-ux/adpYeoman generator with configurable options (system, application, namespace, title, credentials, etc.).open_adaptation_editor— Spawns the adaptation editor server (npx fiori run /test/adaptation-editor.html) in the background, extracts the editor URL and process ID from its output, and returns instructions on how to stop the process.adp_controller_extension— Processes AI-generated controller extension code and XML fragments for adaptation projects using a progressive disclosure pattern: the first call (withoutaiResponse) returns detailed generation rules and existing project context; a subsequent call withaiResponsewrites the generated files to disk.Changes
constant.ts: Added constants for the three new tool IDs (GENERATE_ADAPTATION_PROJECT_ID,ADP_CONTROLLER_EXTENSION_FUNCTIONALITY_ID,OPEN_ADAPTATION_EDITOR_ID).tools/generate-adaptation-project.ts: New tool that invokes@sap-ux/adpvianpx yowith a JSON configuration. Includes a default project name helper to avoid directory collisions.tools/open-adaptation-editor.ts: New tool that spawns the adaptation editor process, monitors stdout for the server URL and editor path, detects the listening port cross-platform (Windows/Mac/Linux), and returns kill commands.tools/adp-controller-extension/index.ts: New tool implementing progressive disclosure — returns a rich knowledge base and project context on first call, then extracts and writes code files from an AI-generated markdown response on subsequent calls. Skips.changefiles and validates file paths are within the project boundary.tools/adp-controller-extension/utils.ts: Utility functions for parsing AI markdown responses (file extraction), detecting adaptation projects, readingmanifest.appdescr_variant, scanning existing project files (webapp/changes), and path helpers.tools/index.ts: Exports the three new tools and registers them in the tools list with full descriptions andinputSchemadefinitions. Also updates thelist_sap_systemsdescription to referencegenerate_adaptation_project.types/input.ts: Added Zod schemas (GenerateAdaptationProjectInputSchema,OpenAdaptationEditorInputSchema,AdpControllerExtensionInputSchema) and their inferred TypeScript types.types/index.ts: Exports the three new input types.server.ts: Wires the new tools into the MCP server'sCallToolhandler and updates the unknown-tool error message.package.json/tsconfig.json: Added@sap-ux/adp-toolingas a workspace dependency and TypeScript project reference.test/unit/server.test.ts: Updated tool list assertions and unknown-tool error message snapshots to include the three new tools.pnpm-lock.yaml: Updated lock file with new@sap-ux/adp-toolingdependency and minor transitive dependency version resolutions..changeset/fiori-mcp-server-adp-tools.md: Changeset entry marking this as aminorrelease.PR Bot Information
Version:
1.20.47b309b5cb-fd08-42c1-bb56-06353159ac6aanthropic--claude-4.6-sonnetpull_request.opened