CAPforge
This server provides tools for SAP CAP (Cloud Application Programming) and UI5 development, enabling AI agents to scaffold, validate, and migrate projects with compiler-based feedback.
CAP Tools:
cap_project_context– Compiles the project to CSN, returning a digest of services, entities, fields, associations, and compositions for reuse.cap_scaffold_entity– Generates a full 5-layer entity scaffold (CDS model, service projection, annotations, mock CSV, i18n) following conventions and optionally enabling Fiori draft, cuid/managed.cap_write_files– Writes or updates files in the project, creating folders as needed.cap_validate– Runscds compileto detect syntax and compilation errors.cap_lint– Runscds lintto catch best-practice violations and anti-patterns.cap_deploy_check– Deploys to a temporary SQLite DB and loads mock data to find CSV/data issues like missing columns or duplicate keys.
UI5 Tools:
cap_analyze_legacy_ui5– Inventories a legacy freestyle UI5 app (datasources, sections, columns, bound fields, value helps, actions) for migration planning.ui5_scaffold_section– Generates ObjectPage section fragments (SmartTable or SimpleForm) with handlers and i18n keys.ui5_validate_view– Ensures XML views/fragments are well-formed and event handlers exist.ui5_lint– Runs SAP'sui5lintto flag deprecated APIs, UI5 2.x readiness issues, and CSP concerns.
Additionally, a conventions://cap knowledge resource provides curated CAP/UI5 best practices and team conventions to guide development.
Provides tools for scaffolding, validating, and linting SAP CAP/CDS projects and UI5 applications, including compiling to CSN, deploying to a test SQLite database, and running official UI5 linting.
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., "@CAPforgescaffold entity SalesOrder with managed aspects"
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.
CAPforge
MCP server that makes your AI agent (Claude Code, Cursor, …) get SAP CAP/CDS right:
scaffolding that follows real conventions, plus real validation against cds compile.
The agent doesn't stop until the code compiles clean.
Website · npm · Leelo en español
It calls no LLM itself: your agent brings the model (BYOK). Zero inference cost, nothing leaves your machine.
Why
General-purpose models hallucinate CDS — annotation terms that don't exist, OData v2 syntax mixed into v4, invented fields — because there's barely any public CAP code in training data. CAPforge gives your agent the two things it's missing:
Curated, sourced knowledge — modern CAP/UI5 best practices distilled from official SAP docs (capire, OData vocabularies, reference samples), every rule with its source URL.
A real feedback loop — tools that run the actual compiler and linter and feed errors back until everything is green.
Related MCP server: @cap-js/mcp-server
Tools
Tool | What it does |
| Codebase-aware: compiles your real project to CSN and returns the existing model (services, entities, fields, associations) so the agent reuses instead of inventing |
| Generates all 5 layers of an entity following conventions: CDS model with aspects ( |
| Writes files into the project |
| Runs |
| Runs |
| Layer 3: deploys to a throwaway sqlite DB and loads the mock CSVs — catches what |
| Migration mode: inventories a legacy freestyle UI5 app (read-only) — datasources, sections, columns, bound fields, value helps, actions, i18n |
| Generates a freestyle ObjectPage section (SmartTable with p13nData, or SimpleForm) + handler stubs + i18n |
| The UI5 loop: well-formed XML + every declared event handler exists in the controller |
| Layer 3: runs SAP's official |
resource | Canonical knowledge core + your team's convention profile + migration map |
Normal flow: context → scaffold → write → validate → correct → until green.
Migration flow: analyze_legacy → context (target) → propose map (REUSED / NEW / DISCARDED) → scaffold → validate.
Requirements
Node.js 18+
@sap/cds-dkavailable (globally or in the project) forcap_validateto work.
Install & try
npm install
node test-loop.js # full-loop demo against the bundled sandboxVS Code / SAP Business Application Studio
Install the "CAPforge" extension from the VS Code Marketplace (also on Open VSX): it registers the MCP server automatically for Copilot agent mode, no mcp.json editing.
Point the capforge.conventionsPath setting to your team's private conventions. BAS note: BAS installs extensions from Open VSX, but its AI assistant does not consume MCP servers natively yet — the extension is ready for the day it does.
Claude Code / Cursor
Register in Claude Code (project .mcp.json or global config):
{
"mcpServers": {
"capforge": {
"command": "npx",
"args": ["-y", "capforge"]
}
}
}Load your team's private conventions (optional):
"env": { "CAPFORGE_CONVENTIONS": "PATH/to/team-conventions.md" }Make your agent actually use it
Registering an MCP server does not force the agent to call it: agents only invoke tools when they decide the task needs them, and for CAP they often just write CDS from memory. Two ways to fix that:
Workspace instructions (recommended). Add this to your project's agent instructions file —
.github/copilot-instructions.md(Copilot),CLAUDE.md(Claude Code) or.cursorrules(Cursor):
For every SAP CAP or UI5 task: call cap_project_context before generating and reuse existing names; scaffold with cap_scaffold_entity / ui5_scaffold_section; validate with cap_validate, cap_lint and cap_deploy_check (UI5: ui5_validate_view, ui5_lint) and correct until everything is green. Never hand-write CDS without a clean cap_validate run.The
cap_workflowprompt. CAPforge ships an MCP prompt with the same workflow: pick it from your client's prompt list (in VS Code: type/in chat) at the start of a CAP session.
You can also just ask explicitly ("scaffold this with the capforge tools and validate until clean") — but the instructions file is what makes it automatic for the whole team.
Knowledge
knowledge/— canonical core: modern CAP/UI5 best practices (aspects, compositions, drafts, authorization, Fiori annotations, i18n, tooling, migration map), anchored to official SAP docs with cited sources.conventions/— house profile: one team's style, overridable viaCAPFORGE_CONVENTIONS. Wins over the core on style conflicts.
The conventions://cap resource serves both, combined, to the agent.
Community
The roadmap is decided by the people who build CAP every day: roadmap discussion. Contributions welcome — see CONTRIBUTING.md.
License
MIT.
Available Tools
10 toolscap_analyze_legacy_ui5Migration inventory of a legacy UI5 appA
Analyzes a legacy freestyle UI5 app (manifest, XML views, controllers, i18n) in READ-ONLY mode and returns the migration inventory: OData datasources, sections, tables and columns, bound fields per model, value helps, actions and OData calls from the controllers. Use it as the starting point to migrate to modern CAP/Fiori together with cap_project_context and the conventions://cap knowledge.
| Name | Required | Description | Default |
|---|---|---|---|
| appPath | Yes | Legacy UI5 app root path (the folder containing webapp/) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the READ-ONLY behavior explicitly, which is a useful behavioral trait. However, no annotations are provided, so the description carries the full burden. It doesn't disclose what happens with invalid paths, whether concurrent calls are safe, or performance characteristics of scanning a large codebase. The READ-ONLY disclosure is valuable but the behavioral picture is incomplete.
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 run-on sentence that packs a lot of information. It front-loads the primary purpose and lists deliverables. It could be broken into shorter sentences for readability, but every phrase contributes meaningful context and there's minimal wasted text.
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 that the tool takes a single well-documented path parameter and has only one input, the description covers the essential scope well. However, there is no output schema and the tool returns a complex structured inventory (OData datasources, sections, bound fields, value helps, actions, OData calls), so the description could specify more about the return format, data shape, or any assumptions. For a complex output-producing tool with no output schema, the description could do more.
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% and there is only one parameter (appPath) with a clear description ('Legacy UI5 app root path'). The description reiterates what the schema says about appPath being the root path containing webapp/. The description adds the scope of analysis (manifest, XML views, controllers, i18n) which gives the parameter context, but since there's only one well-documented parameter, the baseline 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 clearly states the verb ('analyzes'), the resource (legacy freestyle UI5 app), the mode (READ-ONLY), and enumerates the specific inventory items returned (OData datasources, sections, tables, columns, bound fields, value helps, actions, OData calls). It distinguishes itself from siblings by focusing on analysis/inventory for migration, which is unique among the listed 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 explicitly states when to use it: 'Use it as the starting point to migrate to modern CAP/Fiori.' It also names complementary tools to use alongside (cap_project_context and conventions://cap knowledge), providing clear guidance on sequencing within the migration workflow and distinguishing its role from related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cap_deploy_checkTest deploy (cds deploy to throwaway sqlite)A
Third CAP validation layer: deploys the model to a throwaway sqlite database and loads the db/data CSVs. Catches what cds compile cannot: CSV columns that do not exist on the entity, malformed data and duplicate keys. Requires @cap-js/sqlite installed in the project. The throwaway database is deleted afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | Yes | CAP project root path with @cap-js/sqlite available |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosure. It does well: it discloses that it loads db/data CSVs, that it requires @cap-js/sqlite, and critically that the throwaway database is deleted afterwards (side effect disclosure). It does not detail error/return behavior, but for a validation tool the key side effects are well covered.
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, zero waste. Every sentence earns its place: what it does, what it catches vs compile, and the prerequisite plus cleanup behavior. Front-loaded with the verb and purpose, then layers constraints and side effects efficiently.
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-parameter validation tool with no output schema, this is quite complete. It explains the tool's role in the validation pipeline (third layer), its inputs, prerequisite, and cleanup behavior. It could mention the success/failure signaling (how the agent learns validation passed), but that may be obvious from deployment semantics.
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 description coverage is 100%, with the single projectPath parameter already documented as 'CAP project root path with @cap-js/sqlite available'. The description reinforces the requirement that @cap-js/sqlite must be present in the project but adds minimal additional meaning beyond the schema. Baseline 3 is appropriate given high schema coverage.
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 verb (deploys), the resource (model to a throwaway sqlite database), and its specific role as a 'third CAP validation layer'. It explicitly distinguishes from the sibling `cds compile` tool by stating what it catches that compile cannot (CSV column mismatches, malformed data, duplicate keys). The title 'Test deploy' reinforces the primary action.
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 implies this is a validation tool distinct from `cds compile` and the sibling `cap_validate`/'cap_lint', and it explicitly names a prerequisite (@cap-js/sqlite installed). However, it doesn't explicitly state when NOT to use it or name alternative tools as a fallback path, leaving some ambiguity around the validation layer ordering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cap_lintLint CAP (cds lint)A
Second validation layer: runs cds lint (@sap/cds eslint plugin) on the project and returns anti-patterns and best-practice warnings that cds compile does not catch. Requires @sap/cds installed in the project.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | Yes | CAP project root path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states it runs `cds lint` via the @sap/cds eslint plugin and returns anti-patterns/best-practice warnings. It also discloses the prerequisite that @sap/cds must be installed. With no annotations provided, this covers the fundamental behavior but doesn't reveal details like execution time, output format, or failure modes when the plugin is missing.
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 compact sentences with no filler. Purpose, mechanism, value, and prerequisite are all packed efficiently. Front-loaded with the core purpose and position among validation layers.
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-parameter tool with full schema coverage and no output schema, the description adequately explains the tool's purpose, mechanic, and value. It mentions what results to expect (warnings). Minor gaps: no description of what happens if @sap/cds is missing, and no guidance on severity levels of reported warnings.
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% and the single projectPath parameter is described as 'CAP project root path.' The description adds context that the tool operates on 'the project' but doesn't add beyond what the schema states. Given high coverage, baseline 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 gives a specific verb ('runs cds lint'), a clear resource (the project), and positions it as a 'second validation layer' that catches things cds compile does not. It's clear, though it doesn't explicitly contrast with sibling cap_validate or ui5_lint to sharpen differentiation.
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 clearly states when to use (after compile, as a second validation layer) and the prerequisite (@sap/cds installed). While it doesn't explicitly name alternatives or say 'use cap_validate for X instead,' the positional framing provides adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cap_project_contextCAP project context (codebase-aware)A
Compiles the real project to CSN and returns a digest of the existing model: services, entities, fields with types and keys, associations and compositions. Call it BEFORE generating code so you reuse what exists instead of inventing fields or entities.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | Yes | CAP project root path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It clearly states the tool compiles the project to CSN (implying it reads/parses the codebase) and returns a 'digest', but does not disclose whether it modifies anything, performance for large projects, or failure behavior for invalid CAP projects. The read-only nature is implied by 'returns a digest' but not stated explicitly.
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, zero waste. The first sentence lists exactly what the digest contains, the second gives an imperative usage directive. Every word earns its place.
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 one well-documented parameter, an informative output-carrying description, and no output schema, this is adequately complete. It covers what the tool does, what it returns (content of digest), and when to call it. The only minor gap is not describing error/edge cases (e.g., empty project, invalid CSN), but for a context-gathering tool this is a reasonable level of detail.
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% for the single parameter (projectPath), and the schema already describes it as 'CAP project root path'. The description doesn't add additional meaning about the parameter beyond what the schema states, landing at the baseline 3 given full schema coverage.
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 ('Compiles the real project to CSN and returns a digest') and clearly states the resource ('existing model: services, entities, fields with types and keys, associations and compositions'). It distinguishes from siblings by framing itself as the pre-generation context-gathering tool, which complements rather than overlaps with generator tools like cap_scaffold_entity.
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 states WHEN to use it ('Call it BEFORE generating code') and WHY ('so you reuse what exists instead of inventing fields or entities'). This creates a clear usage directive that no other sibling tool claims, giving the agent actionable guidance on sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cap_scaffold_entityCAP entity scaffold (all layers)A
Generates the complete scaffolding of a CAP entity following the loaded conventions: CDS model, service projection, annotations.cds (labels + UI.LineItem), mock CSV header and i18n in two languages. Returns the content so you write it with cap_write_files and validate it with cap_validate.
| Name | Required | Description | Default |
|---|---|---|---|
| draft | No | Enable Fiori draft (@odata.draft.enabled) on the service. Defaults to false. | |
| entity | Yes | Entity name in PascalCase | |
| fields | Yes | Entity fields (without the technical ID key) | |
| managed | No | Use cuid+managed aspects (UUID key + audit fields). Defaults to true. | |
| service | Yes | Name of the service that will expose it | |
| namespace | Yes | Model namespace, e.g. ACME |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the key behavioral trait that the tool only 'Returns the content' (i.e., it does not write files itself), which is critical for agents to avoid wrongly assuming side effects. It also transparently enumerates all generated artifacts, giving a clear expectation of output scope.
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?
A single dense sentence that front-loads the tool's purpose and enumerates the output artifacts without waste. Every clause adds information: what is generated, the conventions applied, and the workflow follow-through. No filler or repetition of schema details.
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 generative tool with no output schema, the description adequately communicates what will be returned (content for four artifact types) and how to proceed. It could explain return format/structure further, but given schema coverage is complete and the description names the follow-up tools, it is reasonably complete for a scaffold generator.
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 the schema thoroughly documents all 6 parameters. The description adds value by clarifying how fields map to generated output (inList -> UI.LineItem, managed -> cuid+aspects) and noting the fields array excludes the technical ID key, which reduces ambiguity beyond what the bare schema provides.
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 verb 'Generates' with a specific resource ('complete scaffolding of a CAP entity') and enumerates precisely what is produced (CDS model, service projection, annotations.cds, mock CSV, i18n). It differentiates from siblings by naming downstream tools (cap_write_files, cap_validate), showing the tool is a generator, not a writer or validator.
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 implies usage by noting the generated content should be written with cap_write_files and validated with cap_validate, effectively contextualizing the workflow. However, it doesn't explicitly state when NOT to use this tool or name alternatives like cap_analyze_legacy_ui5 or ui5_scaffold_section, leaving the exclusion boundary implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cap_validateValidate CAP (cds compile)B
The validation loop. Runs cds compile on the project and returns the errors so the agent can fix them. A clean compile means the scaffolding is valid.
| Name | Required | Description | Default |
|---|---|---|---|
| projectPath | Yes | CAP project root path with @sap/cds available |
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 that the tool runs cds compile and returns errors, and frames it as a non-mutating validation operation ('A clean compile means the scaffolding is valid'). It doesn't detail what happens to the project, whether cds compile has side effects, or what the error format looks like, but the read-only validation nature is reasonably clear.
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, tightly written, no filler. The opening 'The validation loop' sets framing, and the second sentence explains the concrete action. Every sentence serves a purpose, though slightly repetitive between the two opening sentences.
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?
With only one parameter (fully covered by schema), no output schema, and no annotations, the description is fairly complete for a simple validation tool. It explains purpose, outcome interpretation (clean compile = valid), and the fixing loop. Gaps: no mention of sibling cap_lint differentiation and no detail on error format. For a low-complexity tool with 1 well-documented param, this is adequate but not rich.
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 description coverage is 100%, so the parameter projectPath is fully documented in the schema ('CAP project root path with @sap/cds available'). The description adds the behavioral nuance that the compile requires @sap/cds availability, which the schema already notes. The description doesn't add meaning beyond the schema, so baseline 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 what the tool does: 'Runs cds compile on the project and returns the errors so the agent can fix them.' It identifies a specific verb (runs/validate), resource (CAP project/compile), and purpose (validation loop). It distinguishes from siblings like cap_scaffold_entity or cap_lint through the compile/validation purpose, though it doesn't explicitly name difference from cap_lint.
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 implies usage in a validation loop during scaffolding work ('The validation loop. Runs cds compile... so the agent can fix them'). It says a clean compile means scaffolding is valid, giving context on when it's needed. However, it doesn't explicitly say when NOT to use it or name alternative validation tools like cap_lint, which could overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cap_write_filesWrite files into the projectA
Writes one or more files into the given CAP project. Creates folders when missing.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | Files to write, path relative to projectPath | |
| projectPath | Yes | CAP project root path |
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 folders are created when missing and that multiple files can be written at once. However, it does not explain whether existing files get overwritten, whether there are any file-type restrictions, or what happens on partial failure (e.g., if one file write fails, are others rolled back?). The description is adequate but missing behavioral edge cases.
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 short, functional sentences with no filler. The first sentence states the core action and the second adds a meaningful behavioral detail. Every word earns its place.
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 file-writing tool with 100% schema coverage and no output schema, the description covers the basics: what it does, where it writes, and folder creation. However, it lacks information about overwrite behavior and error handling for a write operation, which could be significant for a tool that modifies project state. It is functional but could be more 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 description coverage is 100%, so the schema already fully describes both parameters (files: array of relPath/content objects relative to projectPath; projectPath: CAP project root). The description adds the folder-creation behavior but no additional parameter-level semantics beyond what the schema provides. Baseline 3 is appropriate given full schema coverage.
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 states a specific verb+resource ('Writes one or more files into the given CAP project') plus a useful detail about creating missing folders. It clearly distinguishes from siblings like cap_validate and cap_lint (which are analysis tools) and cap_scaffold_entity (which generates entities). However, it doesn't explicitly differentiate from other write-capable tools like ui5_scaffold_section.
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 implies usage context (writing files into a CAP project) and indicates the projectPath expectation. There is no explicit when/when-not guidance or mention of alternatives. The sibling context makes the intended use reasonably clear, but there are no explicit exclusions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui5_lintLint UI5 (@ui5/linter)A
Third UI5 validation layer: runs SAP's official ui5lint on the app and returns deprecations and anti-patterns on the road to UI5 2.x that view validation does not catch (obsolete APIs, deprecated libs, CSP). Requires @ui5/linter installed in the app and a ui5.yaml at the root.
| Name | Required | Description | Default |
|---|---|---|---|
| appPath | Yes | UI5 app root path (where ui5.yaml lives) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the dependency precondition (@ui5/linter installed, ui5.yaml present) which is genuinely useful. However, it does not describe the output format, whether it writes any files, whether it's a read-only analysis, or how it handles missing dependencies (error vs graceful degradation). For a read-oriented monitoring tool this is acceptable but not rich.
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, efficiently packed. It front-loads the core purpose, adds the differentiating capabilities, and closes with prerequisites. Every clause earns its place. Could arguably be trimmed slightly, but the 'Third UI5 validation layer' framing is valuable for sibling differentiation. No redundancy or filler.
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-parameter lint tool with no output schema, this description is reasonably complete. It names prerequisites (external dependency, yaml file), scopes its scope (UI5 2.x migration issues specifically), and notes what it does NOT cover (view validation). The main gap is describing the return format/results structure, but lint tools commonly return a report, so an agent can reasonably infer behavior. Solid for its complexity level.
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% and there's only one parameter (appPath). The description adds a small detail — that it's the 'UI5 app root path (where ui5.yaml lives)' — which slightly enriches the schema description by tying it to the yaml requirement. However, it's basically restating the schema's own wording. With single-param at full coverage, baseline 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 this is a linting tool ('runs SAP's official ui5lint') on the app, specifying exactly what it returns ('deprecations and anti-patterns'). It also distinguishes itself from sibling tools (cap_lint, ui5_validate_view) by framing itself as the 'Third UI5 validation layer' and explicitly noting it catches things 'that view validation does not catch' (obsolete APIs, deprecated libs, CSP). This provides strong differentiation from sibling lint/validation 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: it's the third layer beyond view validation, targeting UI5 2.x migration readiness. It explicitly names prerequisites ('Requires @ui5/linter installed in the app and a ui5.yaml at the root'), which helps the agent decide when this tool is usable. The contrast with 'view validation' alternatives is clear enough to guide selection among libs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui5_scaffold_sectionUI5 ObjectPage section scaffold (freestyle)A
Generates an ObjectPage section for a freestyle UI5 app following the real pattern: fragment with uxap:ObjectPageSection, SmartTable (table mode, with per-column p13nData) or SimpleForm (form mode), dotted i18n keys, handler stubs and i18n lines. Returns the content so you review it, write it with cap_write_files and validate it with ui5_validate_view.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | table = SmartTable of an association; form = SimpleForm of fields | |
| fields | Yes | Fields/columns of the section | |
| handlers | No | onXxx handlers the fragment will declare (e.g. onPressDocument) | |
| entitySet | No | OData EntitySet for SmartTable (table mode) | |
| bindingPath | No | tableBindingPath (association, e.g. toDocuments) in table mode | |
| sectionName | Yes | camelCase section name, e.g. orderItems |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It clearly states the tool is non-mutating (it 'returns the content' for review rather than writing files), and actually informs the generated code (SmartTable in table mode, SimpleForm in form mode). It names the write step as a separate tool, making the no-mutation behavior explicit. Some details like output format are implied but not stated.
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, zero waste. Every clause carries information: the pattern delivered, the mode variants, i18n handling, handler stubs, and the explicit return-then-write-then-validate workflow. Highly compressed without losing specificity.
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 scaffold generator with no output schema and no annotations, the description covers the key behaviors: what it generates, why its safety (non-mutating, returns for review) matters, and the required follow-up tools. It fully compensates for missing annotations on the mutation/safety front. The main shortfall is not explicitly describing the exact return format, though 'Returns the content' gives reasonable clarity.
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 description coverage is 100%, so the schema documents all 6 parameters well. The description adds meaning by explaining the mode semantic ('table = SmartTable of an association; form = SimpleForm of fields' is from schema, described). The description itself adds mode-to-component mapping context beyond basic schema, but most parameter semantics are carried by the schema, so baseline 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 states a specific verb ('Generates') with a precise resource ('an ObjectPage section for a freestyle UI5 app') and describes the concrete pattern delivered: fragment with uxap:ObjectPageSection, SmartTable or SimpleForm, dotted i18n keys, handler stubs, i18n lines. It clearly distinguishes from siblings like ui5_validate_view and cap_write_files by naming them explicitly as downstream steps.
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 workflow guidance: 'Returns the content so you review it, write it with cap_write_files and validate it with ui5_validate_view.' This clearly tells the agent when to use this tool (scaffold generation) and explicit next steps, implicitly distinguishing it from validation (ui5_validate_view) and writing (cap_write_files) tools in the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui5_validate_viewValidate UI5 view/fragmentB
The UI5 validation loop: checks that the XML is well-formed and that ALL declared event handlers (press, change, select...) exist in the controller. Returns the failures so the agent can fix them.
| Name | Required | Description | Default |
|---|---|---|---|
| xmlPath | Yes | Path of the .view.xml or .fragment.xml to validate | |
| controllerPath | No | Path of the controller that must implement the handlers |
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 what the tool checks (XML well-formedness and event handler existence in controller) and that it returns failures. However, it doesn't describe side effects (read-only nature), what happens on malformed paths, or failure behavior detail. For a validation/read tool this is moderate 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?
The description is a single, front-loaded sentence that states purpose, scope, and output value. It is efficient with no filler. Could arguably add sibling differentiation but is appropriately compact.
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 (validation tool, 2 params, no output schema, no annotations), the description covers the core purpose and output but omits: whether controllerPath is truly optional, the exact return structure, and how it relates to ui5_lint. For a tool meant to drive an agent fix loop, slightly more detail on output format would help.
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 both parameters (xmlPath, controllerPath) are documented. The description clarifies that xmlPath must be a .view.xml or .fragment.xml and that controllerPath must implement the handlers, which adds context beyond raw schema text. But it doesn't mention that controllerPath appears optional (not in required list), leaving ambiguity.
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 states a specific verb('validates') plus the resource ('UI5 view/fragment'), and clarifies the scope: checks XML well-formedness and all declared event handlers exist in the controller. It doesn't explicitly differentiate from siblings like ui5_lint, but the 'validation loop' terminology and event-handler focus distinguish it somewhat.
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 implies 'run this to validate UI5 views and get failures to fix,' and notes it returns failures for the agent to fix. However, it doesn't explicitly state when to use this vs ui5_lint or cap_validate, nor any exclusions. The guidance is implied rather than explicit.
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.
10 tool updates
v0.1.3- First observed
cap_analyze_legacy_ui5 - First observed
cap_deploy_check - First observed
cap_lint - First observed
cap_project_context - First observed
cap_scaffold_entity - First observed
cap_validate - First observed
cap_write_files - First observed
ui5_lint - First observed
ui5_scaffold_section - First observed
ui5_validate_view
TDQS
Most tools have clearly distinct purposes: scaffold vs write vs validate vs analyze vs lint are well-separated by phase. However, there are three validation tools (cap_validate, cap_lint, cap_deploy_check) and two UI5 tools (ui5_validate_view, ui5_lint) with overlapping boundaries that could cause misselection, though their descriptions do explain the distinct layers.
Tool names follow an extremely consistent verb_noun pattern with clear prefixes (cap_ for CAP operations, ui5_ for UI5 operations). Verbs are predictable (validate, scaffold, lint, analyze, write, deploy_check, project_context) and 'cap_' aligns with UI5 namespace separation, making the naming highly predictable.
10 tools is well-scoped for a dual-domain server covering both CAP backend and UI5 frontend migration. Each tool earns its place: scaffolding, writing, project context, three CAP validation layers, three UI5 layers, and analysis. The count balances full lifecycle coverage without bloat.
The lifecycle is well covered: read context (cap_project_context), analyze legacy (cap_analyze_legacy_ui5), scaffold (cap_scaffold_entity, ui5_scaffold_section), write (cap_write_files), and three-layer validation on both sides (compile, lint, deploy-check; view-validate, ui5lint). Minor gaps include no explicit update/delete/modify operations and no scaffolding for non-entity CAP artifacts like services or annotations beyond entities.
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
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceUnified SAP MCP server combining SAP documentation search, ABAP linting, and BTP service exploration into a single extensible ecosystem for AI assistants.MIT

@cap-js/mcp-serverofficial
AlicenseNot gradedqualityBmaintenanceMCP server for SAP CAP that enables AI-assisted development by searching CDS model definitions and CAP documentation.68,060111Apache 2.0- AlicenseNot gradedqualityAmaintenanceA CAP plugin that automatically generates MCP servers from your CAP services, transforming OData services into AI-accessible resources, tools, and prompts with minimal configuration.39761Apache 2.0
- AlicenseBqualityCmaintenanceMCP server for SAP ABAP development that enables AI assistants and code editors to interact with SAP systems via ABAP Developer Toolkit (ADT) APIs, supporting read, create, update, and delete of ABAP objects.10090MIT
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/automatizatodo/capforge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server