CDS pluginCDS plugintypeInstalls into a CAP project and extends the runtime. CAP loads it through cds.requires or the plugin hook.See every one →What this type is →by SAPby SAPoriginPublished by SAP itself. A visible facet, never an input to a reading — a dormant official plugin reads exactly like a dormant independent one.See every one →
@cap-js/agents
SAP's own CDS plugin for building agents inside a CAP service, wired to audit logging and telemetry through peer dependencies rather than leaving observability to the author.
@agent on a service definition is the whole setup: the plugin generates MCP tools from that service's entities and actions, runs a ReAct loop over them and serves the result over A2A, with LangChain or Pi as the harness underneath. An AGENTS.md next to the service definition takes over from that generated agent — its frontmatter populates the agent card and its body is the system prompt — and SKILL.md files under a skills folder carry one workflow each, so what the agent is gets written in Markdown instead of in handlers. Around that sit the parts an application would otherwise build itself: @agent.hitl holds an action in A2A's input-required state until a person approves it, short-term memory goes to the connected primary database so a conversation survives a restart, quotas cap concurrent tasks, tasks per hour, tool calls and tokens per tenant and per user, and audit events and OpenTelemetry metrics appear when @cap-js/audit-logging@cap-js/audit-loggingcds-pluginIntegration with the SAP Audit Log service, so operations on personal data are recorded in the form an auditor expects without the application writing the entries.sap official, cap and @cap-js/telemetry@cap-js/telemetrycds-pluginAutomatic OpenTelemetry instrumentation for CAP Node.js services and their database calls, exported as traces and metrics to the console, SAP Cloud Logging, Dynatrace, Jaeger or an OTLP endpoint.sap official, cap are installed. An @agent-ified service imported from another CAP project is reached as a subagent over A2A, so one agent can delegate to others. In the development profile the plugin fetches model credentials from a local Claude Code or OpenCode installation; the aicore kind, which is the default for production and hybrid, connects to SAP AI CoreSAP AI CoreserviceSAP's AI service on BTP: the runtime for AI assets, and through the Generative AI Hub inside it the access to foundation models, the orchestration service with its templating, masking, filtering and grounding modules, the Prompt Registry and Document Grounding.sap official, btp.
Agent toolingCAPAgent toolingcapabilityBuilding an agent into your own application — the tools it may call, the state it keeps between turns, and the framework it runs in. Distinct from MCP servers, which expose an application to somebody else's agent, and from agent guidance, which is knowledge handed to a coding agent.
@sap/cds≥ 9@sap/cdsartifactThe peer range, as published.
Optional
SAP AI CoreSAP AI CoreartifactThe model the agent calls on each turn of its loop, reached through an SAP AI Core service instance.llm provider
Who is behind it
SAP Cloud Application Programming ModelSAP Cloud Application Programming ModelOrganisationMaintains this In the atlas: maintains 34@cap-jsmaintainerJohannes VogtPersonContributes to this In the atlas: maintains 1, contributes to 28, wrote 10@AkatuoroAnjanPersonContributes to this In the atlas: contributes to 7@anjan-poonachaDaniel HutzelPersonContributes to this In the atlas: contributes to 32, wrote 3@danjoaGuilherme DellagustinPersonContributes to this In the atlas: contributes to 27@dellagustin-sapJulian BreukschPersonContributes to this In the atlas: contributes to 3@ignipaeJohannes VogelPersonContributes to this In the atlas: contributes to 25@johannes-vogelLisa Julia NebelPersonContributes to this In the atlas: contributes to 15@lisajuliamadankumarpichamuthuPersonContributes to this In the atlas: contributes to 2@madankumarpichamuthuMaximilian EckertPersonContributes to this In the atlas: contributes to 4@maxieckert-sapMarten SchiwekPersonContributes to this In the atlas: contributes to 16@schiwekM15 contributors
Before choosing this
crawled
Conditions
LicenceSAP Developer License Agreement 3.2 CAP§ 1, 2, 3A cds-plugin is used with SAP CAP materials, or an artifact is explicitly identified as a CAP plugin or application.
Derived: the instrument's applicability matches this artifact, checked
§ 1License. Productive customer applications are limited to SAP BTP or another SAP-licensed platform, and mass extraction to a non-SAP product is restricted except where solely required for SAP interoperability.
§ 2Intellectual Property. The agreement retains SAP's rights in the covered materials and limits making APIs, tools or software available to third parties, while preserving ownership of customer applications subject to SAP's underlying rights.
§ 3Artificial Intelligence Training. The agreement prohibits use of the covered materials and customer applications for training artificial-intelligence models or systems.
Not as a gateway or proxy for SAP Application APIs: capire's guide states that CAP-level agents are intended only for exposing custom CAP application services and are not an SAP-endorsed architecture or pathway for agentic access to those APIs, and sends the reader to the SAP Architecture Center for the endorsed routes. Not as the screen a user of the application talks to, either — the chat preview in the generic index.html page is marked experimental and for local development.
PolicySAP API Policy 4.2026a§ 2.2.2from Agent toolingAn agent built into an application reaches SAP Application APIs, whether directly or through tools generated from a service that proxies them.
§ 2.2.2AI call sequences and data extraction. Outside SAP-endorsed architectures, data services or expressly identified pathways, the policy prohibits specified agentic API use and systematic or large-scale extraction.
capire's own guide states that CAP-level agents are intended only for exposing custom CAP application services, and names section 2.2.2 for the agentic-access provisions. Check which endpoints the agent's tools end up calling, and consult SAP's reference architectures for the endorsed routes.
stated by its maintainer“Approval before an action: Annotate a CDS action with `@agent.hitl` to require human approval before the agent may execute it.” CAP-level Agents, Using @agent.hitl — capire,
What it brings
Agent served from the service
stated by its maintainer“The @cap-js/agents plugin allows to easily create enterprise grade CAP-level agents, served via the A2A protocol out-of-the-box.” CAP-level Agents, abstract — capire,
Agent framework
LangChainPi
stated by its maintainer“The plugin uses state-of-the-art agent harness frameworks like LangChain or Pi internally.” CAP-level Agents, abstract — capire,
Protocols
A2AMCP
stated by its maintainer“the plugin auto-generates MCP tools from the service's entities and actions, creates a ReAct loop, and serves it via A2A protocol” CAP-level Agents — capire,
Where state is kept
In the application database
stated by its maintainer“The CAP-based agent harness provides short-term memory out-of-the-box via the connected primary database” CAP-level Agents, Persistence — capire,
Answer a user's question inside the applicationSomeone using the application asks in plain words and the application answers from its own services, with the agent running inside the deployed application rather than in the asker's own AI client.Node.js, JavaCoversagent harness in the service
What it does
@agent on the service definition is the whole setup: the plugin generates MCP tools from that service's entities and actions, runs a ReAct loop over them and serves the result over A2A. capire's own walk shows the two halves of this outcome — asked to list books the agent calls the generated describe and query tools, and asked to order one it calls the service's action through the call tool. An AGENTS.md next to the service definition replaces the generated agent with one built from the directory, which is the route to take when the answer has to follow written instructions rather than whatever the model infers from the model.
Remaining work
Decide which service the agent is put on and what its projection exposes, since the tools come from that model. Configure a model: the development profile reads credentials from a local Claude Code or OpenCode installation, and production and hybrid use the aicore kind against SAP AI Core. Where the answer has to be deterministic, the AGENTS.md and the skill files are the project's to write.
Give the agent a chat screen in the applicationA user of the application opens a screen in it and talks to the agent there, instead of reaching it from a separate AI client or over HTTP by hand.Covers, under conditionsthe preview the plugin itself serves
What it does
The plugin puts a chat preview in the generic index.html page, next to each A2A endpoint, and capire's walk uses it to ask the bookshop agent to list books and to order one. capire marks it Alpha in the heading and calls it rudimentary and experimental in the sentence under it.
Conditions
Local development: capire states the preview can be used in local development, and marks it experimental.
Remaining work
A screen for anyone other than the developer running cds watch is the project's own, or another option's. Nothing retrieved says the preview is served outside the development profile.
Keep a conversation after the server restartsA conversation with the agent survives a restart, and a follow-up that lands on another instance carries on where the last one left off instead of starting again.Node.js, JavaCoversshort-term memory in the primary database
What it does
The harness keeps the conversation's short-term memory in the database the application is already connected to — SQLite in local development, SAP HANA in production — so conversational context and workflow checkpoints are written where the application's own data is. capire states this is what lets an agent resume a session after a server restart, and names clustered environments in the same sentence.
Remaining work
Nothing is installed for it; what remains is the deployment the claim depends on, a database the instances share rather than a local file, and a decision about how long a stored conversation is kept.
Recall a user's preference in a later conversationSomething the agent was told or worked out in one conversation is available in the next one, so a returning user does not state their preferences again.Stated not supportedagent harness in the service
What it does
capire lists agent memory across sessions among the features it says it is working on and plans to release in the near future, and its persistence section covers short-term memory only: conversational state and checkpoints in the connected primary database, for context across interactions within a session.
Remaining work
What an agent recalls from an earlier conversation is the application's own to model, write and hand back to the agent, or another option's.
Require a person's approval before the agent actsBefore the agent runs an action that changes something, the task stops and waits for a person to approve or reject it, and carries on from there.Node.js, JavaCoversthe gate itself
What it does
@agent.hitl on a CDS action is the whole declaration. When the agent decides to call that action the task pauses and moves to A2A's input-required state instead of running it, and the plugin emits an AgentInputRequired audit event when the agent asks and an AgentTaskResumed one when the approval or rejection comes back. The same mechanism carries the execution-time quota: on a timeout the graph interrupts rather than failing and asks through the gate whether to continue, with a summary of the progress so far.
Remaining work
Annotate the actions that need it, and handle the input-required state in whatever talks to the agent — the pause is served over A2A, so the approving client is the project's. Nothing here decides who may approve.
Catch a change in what the application's AI feature answersA model, prompt or schema change is caught before it ships, by sending the application's own prompts over fixtures and judging the answers that come back.Node.js, JavaStated not supportedthe agent the application serves
What it does
capire's CAP-level Agents guide lists evals-based agent testing under More to come, so the released plugin does not test the agent it builds.
Remaining work
Watch the page. A released feature would change this from a roadmap line to an answer, and nothing else in the record would move.
Run a CAP service's model calls with no SAP AI Core bindingA CAP project whose handlers call a language model starts, serves and answers on a laptop or in a pipeline where no SAP AI Core instance is bound — either from a mock, or from a model running locally.Covers, under conditionslocal LLM kinds for an agent
What it does
Gives the development profile two kinds that are not SAP AI Core: capire documents auto as the default for development, using a local Claude or OpenCode configuration, and mock as a pure mock for development that provides dummy responses when called. aicore, the production and hybrid default, is the one that needs the binding.
Conditions
The call is a CAP-level agent's: the kinds are configured under cds.requires.llm, which capire documents with this plugin; For auto, a local Claude or OpenCode configuration already exists on the machine; For mock, what comes back is a dummy response, in capire's own words
Remaining work
Install the plugin and annotate a service as an agent, which is a larger change than configuring a client. auto reads a configuration this reading did not inspect, so what it sends where is not established.
Stream a model's answer out of a CAP serviceA CAP service receives a model's answer in pieces as the model writes it, rather than one payload after the model has finished, so a chat surface can show text appearing instead of a spinner.Assessed, not knownLLM connection for a CAP-level agent
What it does
Not established either way. capire's CAP-level Agents page lists advanced streaming among the features it says are being worked on and planned for release in the near future, which says that streaming for an agent is to improve and does not say what an agent streams today; nothing read on 2026-10-15 states that it does or that it does not.
Remaining work
Read what a CAP-level agent returns on a turn today, which this reading did not establish. Until then a chat surface over an agent cannot be planned on a stream from this page alone.
Agent toolingAgent toolingcapabilityBuilding an agent into your own applicationSAP and community, unassessed
→provides
Turns a service annotated @agent into an agent served over A2A, with MCP tools generated from the service's entities and actions and a ReAct loop; an AGENTS.md beside the service definition replaces that generated agent with one built from the directory, @agent.hitl holds an action for a person's approval, and the conversation's short-term memory sits in the connected primary database.
provides Agent tooling
Functional, stated
For
Turns a service annotated @agent into an agent served over A2A, with MCP tools generated from the service's entities and actions and a ReAct loop; an AGENTS.md beside the service definition replaces that generated agent with one built from the directory, @agent.hitl holds an action for a person's approval, and the conversation's short-term memory sits in the connected primary database.
Basis
“the plugin auto-generates MCP tools from the service's entities and actions, creates a ReAct loop, and serves it via A2A protocol”CAP-level Agents — capire, checked “When present, it replaces the generic default agentification: instead of the auto-generated ReAct agent, the plugin auto-builds the agent from the directory at startup — no custom handlers required.”CAP-level Agents, Optional: AGENTS.md — capire, checked “you can define specific skills and their workflows in `SKILL.md` files within the `skills` subfolder”CAP-level Agents, Optional: SKILL.mds — capire, checked “When the agent decides to call the action, the task pauses and transitions to the A2A `input-required` state instead of running the action immediately.”CAP-level Agents, Using @agent.hitl — capire, checked “This allows agents to persist conversational context and workflow checkpoints, so that they can resume sessions seamlessly even after server restarts”CAP-level Agents, Persistence — capire, checked “The main agent coordinates these subagents, and communicates with them via A2A endpoints.”CAP-level Agents, Subagents via A2A — capire, checked “The plugin automatically enforces rate limits and resource quotas.”CAP-level Agents, Quotas — capire, checked “When `@cap-js/audit-logging` is installed, the plugin automatically emits audit log events which record agent decisions, actions, tool usage, and outcomes.”CAP-level Agents, Audit Logging — capire, checked “When `@cap-js/telemetry` is installed, the plugin automatically instruments the agent harness to emit OpenTelemetry tracing and metrics.”CAP-level Agents, Telemetry — capire, checked “CAP-level agents are intended only for exposing custom CAP application services.”CAP-level Agents, SAP API Policy — capire, checked “A rudimentary experimental chat preview is provided in the generic index.html page”CAP-level Agents, Using Chat Preview — capire, checked
stated
provides Agent tooling
Functional, stated
For
Turns a service annotated @agent into an agent served over A2A, with MCP tools generated from the service's entities and actions and a ReAct loop; an AGENTS.md beside the service definition replaces that generated agent with one built from the directory, @agent.hitl holds an action for a person's approval, and the conversation's short-term memory sits in the connected primary database.
Basis
“the plugin auto-generates MCP tools from the service's entities and actions, creates a ReAct loop, and serves it via A2A protocol”CAP-level Agents — capire, checked “When present, it replaces the generic default agentification: instead of the auto-generated ReAct agent, the plugin auto-builds the agent from the directory at startup — no custom handlers required.”CAP-level Agents, Optional: AGENTS.md — capire, checked “you can define specific skills and their workflows in `SKILL.md` files within the `skills` subfolder”CAP-level Agents, Optional: SKILL.mds — capire, checked “When the agent decides to call the action, the task pauses and transitions to the A2A `input-required` state instead of running the action immediately.”CAP-level Agents, Using @agent.hitl — capire, checked “This allows agents to persist conversational context and workflow checkpoints, so that they can resume sessions seamlessly even after server restarts”CAP-level Agents, Persistence — capire, checked “The main agent coordinates these subagents, and communicates with them via A2A endpoints.”CAP-level Agents, Subagents via A2A — capire, checked “The plugin automatically enforces rate limits and resource quotas.”CAP-level Agents, Quotas — capire, checked “When `@cap-js/audit-logging` is installed, the plugin automatically emits audit log events which record agent decisions, actions, tool usage, and outcomes.”CAP-level Agents, Audit Logging — capire, checked “When `@cap-js/telemetry` is installed, the plugin automatically instruments the agent harness to emit OpenTelemetry tracing and metrics.”CAP-level Agents, Telemetry — capire, checked “CAP-level agents are intended only for exposing custom CAP application services.”CAP-level Agents, SAP API Policy — capire, checked “A rudimentary experimental chat preview is provided in the generic index.html page”CAP-level Agents, Using Chat Preview — capire, checked
Building an agent into your own application
Technical4
cap-agent-ui5-webuicap-agent-ui5-webuicds-pluginUI5 web interface for an agent built in a CAP serviceindependent, cap
←needed by
The A2A endpoints and the @agent-annotated services this client discovers and talks to; the README pins the package to exactly 0.9.1.
needed by cap-agent-ui5-webui
Technical, derived, through inverted from its requires edge
For
The A2A endpoints and the @agent-annotated services this client discovers and talks to; the README pins the package to exactly 0.9.1.
Basis
“it serves a freestyle SAPUI5 TypeScript chat client, same-origin from your CDS server, that talks to whichever of your services carry the `@agent` annotation”lemaiwo/cap-agent-ui5-webui — README, what it serves, checked “`@cap-js/agents` is pinned to exactly `0.9.1` — it is pre-1.0, days old at the time of writing, and its own README marks areas such as connectivity and content filtering as experimental.”lemaiwo/cap-agent-ui5-webui — README, the pin, checked
derived
needed by cap-agent-ui5-webui
Technical, derived, through inverted from its requires edge
For
The A2A endpoints and the @agent-annotated services this client discovers and talks to; the README pins the package to exactly 0.9.1.
Basis
“it serves a freestyle SAPUI5 TypeScript chat client, same-origin from your CDS server, that talks to whichever of your services carry the `@agent` annotation”lemaiwo/cap-agent-ui5-webui — README, what it serves, checked “`@cap-js/agents` is pinned to exactly `0.9.1` — it is pre-1.0, days old at the time of writing, and its own README marks areas such as connectivity and content filtering as experimental.”lemaiwo/cap-agent-ui5-webui — README, the pin, checked
UI5 web interface for an agent built in a CAP service
The framework the agent itself is built in, served from the CAP application the example deploys.
needed by Reports Assistant with SAP Document Management
Technical, derived, through inverted from its requires edge
For
The framework the agent itself is built in, served from the CAP application the example deploys.
Basis
“A CAP agent that turns notes into business reports in a shared SAP Document
Management workspace. Built with `@cap-js/agents`, Deep Agents, and
[`@mi8y/cap-agents-sdm-backend`](../../packages/cap-agents-sdm-backend/README.md).”Reports Assistant with SAP Document Management — README, opening line, checked
derived
needed by Reports Assistant with SAP Document Management
Technical, derived, through inverted from its requires edge
For
The framework the agent itself is built in, served from the CAP application the example deploys.
Basis
“A CAP agent that turns notes into business reports in a shared SAP Document
Management workspace. Built with `@cap-js/agents`, Deep Agents, and
[`@mi8y/cap-agents-sdm-backend`](../../packages/cap-agents-sdm-backend/README.md).”Reports Assistant with SAP Document Management — README, opening line, checked
CAP agent writing reports into a shared SDM document workspace
SAP AI CoreSAP AI CoreserviceAI runtime on BTP with the Generative AI Hubsap official, btp
→optionally needs
if The aicore kind is configured under cds.requires.llm, which capire states is the default for the production and hybrid profiles; development defaults to auto, which reads credentials from a local Claude Code or OpenCode installation, and mock returns dummy responses
optionally needs SAP AI Core
Technical, stated
If
The aicore kind is configured under cds.requires.llm, which capire states is the default for the production and hybrid profiles; development defaults to auto, which reads credentials from a local Claude Code or OpenCode installation, and mock returns dummy responses.
For
The model the agent calls on each turn of its loop, reached through an SAP AI Core service instance.
Basis
“The default for `production` and `hybrid`, connects to SAP AI Core”CAP-level Agents, cds.requires.llm — capire, checked “The LLM used by an agent is configured via `cds.requires.llm`.”CAP-level Agents, cds.requires.llm — capire, checked
stated
optionally needs SAP AI Core
Technical, stated
If
The aicore kind is configured under cds.requires.llm, which capire states is the default for the production and hybrid profiles; development defaults to auto, which reads credentials from a local Claude Code or OpenCode installation, and mock returns dummy responses.
For
The model the agent calls on each turn of its loop, reached through an SAP AI Core service instance.
Basis
“The default for `production` and `hybrid`, connects to SAP AI Core”CAP-level Agents, cds.requires.llm — capire, checked “The LLM used by an agent is configured via `cds.requires.llm`.”CAP-level Agents, cds.requires.llm — capire, checked
AI runtime on BTP with the Generative AI Hub
Supply Chain RescueSupply Chain RescuesampleCAP and SAPUI5 demo of recovery from a supply disruptionindependent, cap
←optionally used by
if the optional recovery agent or the Recall Agent is used
optionally used by Supply Chain Rescue
Technical, derived, through inverted from its requires edge
If
the optional recovery agent or the Recall Agent is used
For
The optional agents: the recovery agent reads the current impact and proposes one of the listed routes, and pauses before anything changes.
Basis
“The agent is a CAP agent (`@cap-js/agents` 0.9.6) with a fixed tool list: it reads the same current impact and proposes **one of the listed routes**.”Kamilkov/supply-chain-rescue — README, Recovery agent (optional), checked “At the pause there is only a pending proposal with an **Agent proposal** badge.”Kamilkov/supply-chain-rescue — README, Recovery agent (optional), checked
derived
optionally used by Supply Chain Rescue
Technical, derived, through inverted from its requires edge
If
the optional recovery agent or the Recall Agent is used
For
The optional agents: the recovery agent reads the current impact and proposes one of the listed routes, and pauses before anything changes.
Basis
“The agent is a CAP agent (`@cap-js/agents` 0.9.6) with a fixed tool list: it reads the same current impact and proposes **one of the listed routes**.”Kamilkov/supply-chain-rescue — README, Recovery agent (optional), checked “At the pause there is only a pending proposal with an **Agent proposal** badge.”Kamilkov/supply-chain-rescue — README, Recovery agent (optional), checked
CAP and SAPUI5 demo of recovery from a supply disruption
Derived from the package name. No recipe recorded; the README has the configuration.
Learn more4
Readings
CAP in the age of AI #5 - agents wrap-upCAP in the age of AI #5 - agents wrap-upvideoThe agents topic closed out on what sits around the agent rather than inside it, now that the documentation has moved into capire. The chat preview's session is persisted in the database rather than kept in memory, traces go out through @cap-js/telemetry to a self-hosted MLflow under the OpenTelemetry conventions for generative AI, and the panel is explicit that @agent reuses the MCP adapter's code programmatically without serving an MCP endpoint. It ends in the xtravels sample, where a travel agent delegates to a hotel-service sub-agent and reaches a separately started flight service over MCP through the service binding CAP resolves anyway. Earlier in the hour the same agent answers from a model running on the presenter's laptop, reached as an OpenAI-compatible endpoint.published 2026-10-02DJ Adams, Johannes Vogt, Simon Engel, Stefan Rudi, Daniel Schlachter, YouTube — SAP Developers playlists
CAP in the age of AI #4 - more on agentsCAP in the age of AI #4 - more on agentsvideoAsking a human first, and telling the agent how to behave. Ordering a book through @cap-js/agents happens without a question being asked; the human-in-the-loop annotation on the action turns the same request into an approve-or-reject step, which the episode follows down to the A2A status update that stores the task in an input-required state in the database — A2A itself being JSON-RPC 2.0 over HTTP with server-sent events for the stream. The rest is instructions on disk: an agents.md in the service's own folder removes the question about how many copies to order, a skill under a skills folder is advertised by its description and read only when the agent decides the case applies, and either file makes the plugin build a deep agent instead of the plain one.published 2026-09-11DJ Adams, Johannes Vogt, YouTube — SAP Developers playlists
CAP in the age of AI #3 - from MCP to A2ACAP in the age of AI #3 - from MCP to A2AvideoThe episode that finishes @cap-js/mcp with authorisation and then crosses to agents. @requires and @restrict are the same annotations CAP already has, and the plugin reads them to filter the tool list and the describe output per user and per request, so a model is not told about entities the caller cannot reach — where the OData metadata of the same service lists every exposed entity regardless. The second half annotates a service with @agent from @cap-js/agents, which serves it over A2A with an agent card and a chat preview, runs first against a mocked response and then against SAP AI Core bound with cds bind and a hybrid profile, and reuses the MCP adapter's tools rather than defining new ones.published 2026-08-21DJ Adams, Johannes Vogt, Stefan Rudi, YouTube — SAP Developers playlists
1 more
CAP in the age of AICAP in the age of AIseriesSeven live episodes of Hands-on SAP Dev in which DJ Adams works through CAP's AI features with the people who build them, each one a screen-share against a sample project. The first three are @cap-js/mcp: the @mcp annotation on a service, the describe, query and call tools, CQL as the query format, and what authorisation takes out of the tool list. From episode three the run moves to A2A and @cap-js/agents — human approval of an action, agents.md and skills, session persistence, telemetry and sub-agents — and the last two episodes are vector embeddings in CDS, local on SQLite and native on SAP HANA Cloud.published 2026-08-07DJ Adams, Johannes Vogt, Simon Engel, Stefan Rudi, Daniel Schlachter, YouTube — SAP Developers playlists
@cap-js/agentscds-pluginSAP's own CDS plugin for building agents inside a CAP service, wired to audit logging and telemetry through peer dependencies rather than leaving observability to the author.sap official, cap
SAP AI CoreserviceSAP's AI service on BTP: the runtime for AI assets, and through the Generative AI Hub inside it the access to foundation models, the orchestration service with its templating, masking, filtering and grounding modules, the Prompt Registry and Document Grounding.sap official, btp
@cap-js/agents → SAP AI CoreDocumented only, under a conditionThe model the agent calls on each turn of its loop, reached through an SAP AI Core service instance.If The aicore kind is configured under cds.requires.llm, which capire states is the default for the production and hybrid profiles; development defaults to auto, which reads credentials from a local Claude Code or OpenCode installation, and mock returns dummy responses.
SAPnot SAP's, or the project's ownunder a condition
This project is open to feature requests/suggestions, bug reports etc. via GitHub issues. Contribution and feedback are encouraged and always welcome. For more information about how to contribute, the project structure, as well as additional contribution information, see our Contribution Guidelines.
Security / Disclosure
If you find any bug that may be a security problem, please follow the instructions found in our security policy on how to report it. Please do not create GitHub issues for security-related doubts or problems.
Code of Conduct
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone. By participating in this project, you agree to abide by its Code of Conduct at all times.
Licensing
Copyright 2026 SAP SE or an SAP affiliate company and cap-js/mcp contributors. Please see our LICENSE for copyright and license information. Detailed information including third-party components and their licensing/copyright information is available via the REUSE tool.
Tool and subagent calls are now exposed as artifact-update A2A events so any SSE consumer can observe invocations, arguments, and results; opt-in per request via userMessage.metadata["tool-status-update"]; also added to preview
Preview now shows context size and token usage
OpenAI provider support via llm kind openai
Model and model parameters are shown in evaluation runs in MLflow
Changed
Consider static assertions in tests now in "output_correctness" and "success_rate" metrics of evaluation runs
The generic call action tool is now the default, matching @cap-js/mcp; per-action tools are opt-in via cds.env.mcp.per_action_tool: true. This replaces the former cds.env.agents.per_action_tool flag (which defaulted to per-action) and resolves the conflicting defaults between @cap-js/agents and @cap-js/mcp
Fixed
@agent.hitl / @Common.IsActionCritical are now honored when actions are exposed through the generic call action tool (previously human-in-the-loop gating only took effect with per-action tools)
Human-in-the-loop edit decisions can no longer repoint the generic call action tool to a different action than the one approved
Correctly handle non @cap-js/mcp tools during PII masking
Correctly report A2A messages as failed when AI Core is configured but no AI Core credentials can be found
Correctly report input tokens for Anthropic models on AI Core. OpenTelemetry specifies that input_tokens includes cached tokens, but Anthropic did not include the cached tokens in input_tokens
Summarize on timeout prompts are now correctly shown in MLflow
Evaluation run metrics are now correctly aggregated in MLflow
Thinking steps are now correctly separated also inside a turn
Tasks are now moved into failed state on server crash to avoid quota issue on unstable servers
@agent.llm is now correctly considered for feature toggled services
SAP HANA Cloud based masking is now retried in case of HANA Cloud NLP connectivity issues
HITL tool rejections are now surfaced to the model as a deliberate user decision instead of a tool failure, so it no longer invents technical reasons (e.g. insufficient stock) for an action the user chose to reject
CAP query result fields which are marked as containing personal data will be masked for the LLM, that the LLM works with hashes
Incoming user messages are pseudonymized using SAP Data Privacy Integration service as well as HANA Cloud NLP when the respective services are enabled & cds.env.agents.masking = true
Chat preview queues messages submitted while the agent is busy
Fixed
Chat preview keeps the message field height stable when typing the first character
Correct lookup for @agent.directory and @agent.card on BTP
triggerCleanup now uses a unique outbox job name per invocation, preventing the scheduled cleanup job from being silently replaced when a fresh instance starts or the 24h throttle expires
Agent toolingAgent toolingcapabilityBuilding an agent into your own application — the tools it may call, the state it keeps between turns, and the framework it runs in. Distinct from MCP servers, which expose an application to somebody else's agent, and from agent guidance, which is knowledge handed to a coding agent.SAP and community, unassessed
a2a-plugina2a-plugincds-pluginExposes an annotated CDS service as an Agent-to-Agent protocol agent — @a2a opts the service in, @a2a.Skill declares what it offers, and an agent handler answers.independent, capExposes an annotated CDS service as an Agent-to-Agent agentfrom CAP
com.sap.cds:cds-adapter-agentcom.sap.cds:cds-adapter-agentpackageThe A2A agent adapter for CAP Java, turning an @agent-annotated Application Service into a conversational endpoint whose queries and unbound actions become tools for a configured LLM.sap official, capA2A adapter turning a CAP Java service into an LLM-backed agentfrom CAP
cap-agent-ui5-webuicap-agent-ui5-webuicds-pluginGives a CAP agent a UI5 web interface out of the box, so an agent built in the service has somewhere to be talked to without a separate frontend project.independent, capUI5 web interface for an agent built in a CAP servicefrom CAP
@mi8y/cap-agents-memory@mi8y/cap-agents-memorycds-pluginA LangGraph Store written against CDS: the facts and preferences an agent keeps between sessions are entities in the CAP database, read and written inside a request handler under its tenant.independent, capLangGraph Store keeping agent memory as CDS entitiesfrom CAP
@mi8y/cap-agents-sdm-backend@mi8y/cap-agents-sdm-backendpackageA Deep Agents filesystem backend whose files are documents in an SAP Document Management repository, so what a CAP agent reads and writes stays where people can open it too.independent, capDeep Agents filesystem over an SAP Document Management repositoryfrom CAP
@mi8y/cds-langgraph-persistence@mi8y/cds-langgraph-persistencecds-pluginA LangGraph checkpointer backed by CDS, so an agent's state survives the request that created it — durability for LangChain and LangGraph agents running inside the CAP Node.js runtime.independent, capLangGraph checkpointer backed by CDS for CAP agentsfrom CAP
cds-agentscds-agentspackageTurns a CAP service into a tool layer for agent frameworks — a CAPToolkit bound to a named service, with a tool strategy controlling how much of it becomes callable.independent, capToolkit turning a CAP service into tools for agent frameworksfrom CAP
Joule Studio, classic editionJoule Studio, classic editionserviceThe low-code capability in SAP Build for custom Joule skills and Joule agents: skills call OData APIs through BTP destinations, agents get a model, instructions, tools and MCP servers, and both deploy to Joule.sap official, btpLow-code SAP Build capability for custom Joule skills and agentsfrom BTP/BAIP
@sap/joule-studio-cli@sap/joule-studio-clicliSAP’s CLI package for both legacy Joule digital assistants and the new Joule Studio solution workflow, through the joule and jl commands.sap official, btpCLI for Joule digital assistants and Joule Studio solutionsfrom BTP/BAIP
Joule StudioJoule Studioweb-toolSAP’s managed development environment for building custom agents, applications and workflows from business intent, in six phases from intent and specification to deployment on an SAP-managed runtime.sap official, umbrellaSAP's managed environment for building custom agents and workflowsfrom Across stacks
@sap/joule-work-dev-cli-early-adopters@sap/joule-work-dev-cli-early-adoptersclijl, the pro-code CLI of the new Joule Studio: a solution is a folder with a solution.yaml and typed assets, validated, built into a zip and deployed to Joule Studio's managed runtime, with Claude Code or OpenCode wired in over MCP. Early Adopter Care.sap official, btpPro-code CLI for building and deploying Joule Studio solutionsfrom BTP/BAIP
SAP JouleSAP JouleserviceSAP's unified AI engagement layer across SAP applications: Joule Work is where a user expresses intent, Joule Assistants coordinate agents across business functions, and Joule Agents carry out the tasks, provisioned on BTP as a formation against SAP Cloud Identity Services.sap official, btpSAP's AI engagement layer across SAP applicationsfrom BTP/BAIP
@saptarishi/cds-plugin-llm@saptarishi/cds-plugin-llmcds-pluginA CAP service kind that puts eleven model providers behind one chat, stream, embed and batch interface, so which backend a service calls is a profile in package.json rather than a change to the handler.independent, capCAP service kind putting eleven model providers behind one APIfrom CAP
a paragraph on what the plugin serves and the two situations it is not for
the AGENTS.md route, the approval gate and the persisted short-term memory added, five property values and eleven sources
artifact:btp-ai-core, conditional on the aicore kind
SAP's own CDS plugin for building agents inside a CAP service, wired to audit logging and telemetry through peer dependencies rather than leaving observability to the author.