PackagePackagetypeA library you install and call yourself.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

cds-agents

Turns 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.

Where an MCP plugin exposes a service over a protocol, this hands the same surface to LangChain and LangGraph in process, as typed tools. The README draws the line as producer against consumer: @cap-js/mcp is a plugin you must own the application to add and redeploy, while this is a client library pointed at something already running, so the service it wraps can be another team's or an S/4HANA endpoint. CAPToolkit generates the tools and is the README's production default, CAPAgent is a ready-made ReAct agent it scopes to demos and small apps, and ODataExecutor is the OData V4 client underneath, with structured errors, a timeout and a dry run. How much of a service becomes callable is a toolStrategy of minimal, crud, actions or full rather than all of it, on the README's own argument that a service with a hundred entities can expose over four hundred tools and that this is expensive for the model to discover. Its install line names zod, @langchain/core and @langchain/openai alongside the package, so the framework is the host and CAP is the capability being wrapped.

Facts

Latestv1.1.2ReleasedLast pushLicenceMIT

Where it sits

Lives in
Provides
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.Tool governanceCAPTool governancecapabilityControlling what an agent may call, with which authorisations, and leaving an audit trail of what it did. The authorisation question that MCP exposure raises but does not answer.
Flavors
Node.jsfrom its runtime
Requires
@sap/cds≥ 7.0.0@sap/cdsartifactThe peer range, as published.

Who is behind it

NAGARJUN DASNAGARJUN DASPersonMaintains this
In the atlas: maintains 2, contributes to 2
@Nagarjundas1994-AiAgents
maintainer

Before choosing this

Conditions

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.2 AI 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.

SAP API Policy 4.2026a →

What it declares

Every artifact

Type
Package
Origin
Independently maintained
Runtime
Node.js

As a package

Declared for
>=7.0.0
Where it runs
does not say
Distributed through
does not say

For agent tooling

What it brings
Tools for another frameworkLoop in application code
Agent framework
LangChainLangGraph
Protocols
OData V4

Tasks this contributes to1Beta

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, JavaCovers, under conditionstool layer for a framework, and a ready-made agent
What it does

Comes at the outcome from outside the application. CAPToolkit generates the tools a LangChain or LangGraph agent calls from a CAP service's model, and CAPAgent is a ready-made ReAct agent over them. Because it is a client library pointed at a service that is already running, the service answering the question need not be one the project owns — the README draws that line against @cap-js/mcp, which requires owning the application and redeploying it.

Conditions

A Node.js host installs the library with zod, @langchain/core and a model package, as its install line names.; It is pointed at a running OData V4 service: ODataExecutor is the client underneath.; The agent loop is the project's own, unless CAPAgent is used, which the README scopes to demos and small apps.

Remaining work

Choose a tool strategy of minimal, crud, actions or full, which is where the README's four-hundred-tool argument bites, and build the loop, the prompt and the conversation's state, none of which this library carries.

All options on the Agent tooling page →

Connections2

Install

npm add cds-agents

Derived from the package name. No recipe recorded; the README has the configuration.

README

quoted from Nagarjundas1994-AiAgents/cds-agents under MIT, read
Nagarjundas1994-AiAgents/cds-agents/packages/cds-agents/README.mdOn GitHub
cds-agents logo

cds-agents

The SAP CAP-native tool layer for agentic applications.

Turn any SAP CAP service into governed AI capabilities for LangChain, LangGraph, MCP, and enterprise agents.

npm version License: MIT CI TypeScript


import { CAPToolkit } from 'cds-agents';

const toolkit = new CAPToolkit({
  service: 'StudentService',
  baseUrl: 'http://localhost:4004',
  toolStrategy: 'minimal',   // describe + query — not 400 CRUD tools
  allowDelete: false,
});

const tools = await toolkit.getTools();

What is cds-agents?

cds-agents is the capability layer between SAP CAP and AI agents.

It reads your CDS / CSN model and exposes a governed set of tools — not a pile of generated HTTP wrappers. Governance is enforced in the executor, so a denied call never leaves your process.

                 cds-agents
                     │
       ┌─────────────┼─────────────┐
       ▼             ▼             ▼
  CDS Introspection  Tool Layer    Runtime
       │             │             │
       ▼             ▼             ▼
     CSN/CDS     LangChain      OData V4
                    Tools       Executor
       │
       └──────────────┬──────────────┘
                      ▼
               Agent Framework
            LangGraph / MCP / custom

Two modes, one model:

ModeClassUse when
Tool layerCAPToolkitYou want raw tools for LangGraph or a custom agent
Ready-made agentCAPAgentYou want a ReAct loop against one CAP service right now

CAPToolkit is the product. CAPAgent is the convenience wrapper.

This is not a multi-agent orchestrator. For supervisors, branching, or human-in-the-loop graphs, generate tools with CAPToolkit and compose them in LangGraph.


Why?

Integrating LLMs with enterprise CAP services usually means hand-written tools, hallucinated OData, and an ungoverned CRUD surface.

Without cds-agentsWith cds-agents
One LangChain tool per entity operationA capability map with minimal / crud / actions / full strategies
Manual Zod schemas that drift from CDSCDS types mapped to Zod automatically
Raw HTTP to ODataODataExecutor with auth, timeout, dry-run, structured errors
Hundreds of tools on a large serviceToken-efficient describe + query
Framework lock-inOne CAP model → multiple AI protocols

30-second quick start

npm install cds-agents zod @langchain/core @langchain/openai
import { CAPAgent } from 'cds-agents';

const agent = new CAPAgent({
  service: 'StudentService',
  baseUrl: 'http://localhost:4004',
  model: 'gpt-4o',
  toolStrategy: 'minimal',
});

const answer = await agent.invoke(
  'Put all students below 2.0 GPA on academic probation'
);

Prerequisites: Node.js 18+, a running CAP OData V4 service, and an LLM key (OPENAI_API_KEY, ANTHROPIC_API_KEY, or GOOGLE_API_KEY).

Provider packages are optional peer dependencies — install only the one you use (@langchain/openai, @langchain/anthropic, or @langchain/google-genai).


Architecture

Tool generation and agent execution are separate on purpose.

                 CDS / CSN
                     │
                     ▼
              CAP Introspection
                     │
                     ▼
             Capability registry
                     │
          ┌──────────┴──────────┐
          ▼                     ▼
    LangChain tools      Policy enforcement
          │                     │
          ▼                     ▼
      LangGraph            OData executor
      / CAPAgent                │
          │                     │
          └──────────┬──────────┘
                     ▼
                CAP runtime
                     │
                     ▼
                OData / CQL
  1. Model loader introspects entities, actions, and functions from CDS/CSN.
  2. Capability map decides what the service may expose, given toolStrategy, policy, and the model's own annotations.
  3. Tool adapters turn that map into LangChain tools.
  4. OData executor performs the CAP calls, refusing anything the map does not permit.

Nothing runs until the first getTools(), getCapabilityMap(), or invoke().


CAPToolkit

The recommended production entry point. You get tools; you own the agent.

import { CAPToolkit } from 'cds-agents';
import { createReactAgent } from '@langchain/langgraph/prebuilt';
import { ChatOpenAI } from '@langchain/openai';

const toolkit = new CAPToolkit({
  service: 'StudentService',
  baseUrl: 'http://localhost:4004',
  toolStrategy: 'minimal',
  allowDelete: false,
});

const cdsTools = await toolkit.getTools();
const map = await toolkit.getCapabilityMap();

const agent = createReactAgent({
  llm: new ChatOpenAI({ model: 'gpt-4o' }),
  tools: [...cdsTools, myCalculatorTool],
});
Tool strategies

A service with 100 entities can generate 400+ CRUD tools. That burns context and hurts tool selection.

toolStrategy: 'minimal' | 'crud' | 'actions' | 'full'
StrategyToolsWhen to use
minimaldescribe, queryLarge models, production defaults, MCP-shaped clients
crudread_* / create_* / update_* / delete_*Small services that want explicit entity tools
actionsbound + unbound actions/functionsSide-effect operations only
fullCRUD + actionsBackward-compatible default
const toolkit = new CAPToolkit({
  service: 'StudentService',
  baseUrl: 'http://localhost:4004',
  toolStrategy: 'minimal',
});

Minimal mode

  • describe — returns the capability map (or one entity)
  • query — structured read: { entity, filter, select, orderBy, top, skip }
await query.invoke({
  entity: 'Students',
  filter: { gpa: { lt: 2.0 }, status: 'active' },
  select: ['ID', 'firstName', 'gpa'],
  orderBy: ['gpa asc'],
  top: 10,
});
// → $filter=gpa lt 2 and status eq 'active'

Raw OData is still accepted: filter: "gpa lt 2.0".

Governance

Policy is enforced at the executor, not just at tool generation. Withholding a tool only hides an operation from the model; anything holding the executor could still perform it. A denied call is refused before any HTTP request and comes back as a 403 ODataError.

new CAPToolkit({
  service: 'StudentService',
  baseUrl: 'http://localhost:4004',
  allowCreate: true,
  allowUpdate: true,
  allowDelete: false,
});

Your CDS model wins. Config can take permissions away; it can never grant them. These annotations are honoured during both generation and execution:

AnnotationEffect
@readonlyread only — no create/update/delete tools, writes refused
@insertonlycreate only — not queryable, absent from query
@Capabilities.DeleteRestrictions.Deletable: falseno delete (same for Insert/Update/Read)
// A @readonly projection stays read-only no matter what the config asks for.
const map = await toolkit.getCapabilityMap();
map.entities.find((e) => e.name === 'Reports')?.operations; // ['read']

getCapabilityMap() is the audit surface: what it advertises is exactly what the executor permits — both are derived from the same object, so they cannot drift.

Entity scoping still works: tools: ['Students', 'Courses'] or exclude: ['AuditLogs']. Excluded entities are refused at the executor too, not merely un-tooled.


MCP, and SAP's official packages

If you own the CAP app and want MCP, use @cap-js/mcp. It's official, at 1.4.3, and converged on the same describe + query shape used here. Building a competing MCP server was on our roadmap; it has been dropped.

The split is producer vs consumer:

@cap-js/mcpcds-agents
Runsinside the CAP app (plugin)inside your agent (library)
Needs to own / redeploy the serviceyesno
Governance authored byservice owner, for everyoneagent author, for this agent
Several servicesone server eachone tool array

Use cds-agents when you're the consumer: the service is S/4HANA or a partner endpoint you can't add plugins to, your agent needs tighter limits than the service's own annotations, or one agent spans several services.

@sap-ai-sdk/langchain is the model side (SAP GenAI Hub); this is the tool side. They compose:

import { AzureOpenAiChatClient } from '@sap-ai-sdk/langchain';

createReactAgent({
  llm: new AzureOpenAiChatClient({ modelName: 'gpt-4o' }),
  tools: await toolkit.getTools(),
});

Full comparison: docs/sap-ecosystem.md.


CAPAgent

A ready-made LangGraph ReAct agent for demos and small apps.

const agent = new CAPAgent({
  service: 'StudentService',
  baseUrl: 'http://localhost:4004',
  model: 'gpt-4o',
  toolStrategy: 'minimal',
  auth: { type: 'basic', user: 'alice', pass: 'admin' },
});

const answer = await agent.invoke('List students with GPA below 2.0');

for await (const event of agent.stream('Show enrollment statistics')) {
  if (event.type === 'tool_call') console.log(event.content);
  if (event.type === 'final') console.log(event.content);
}

Model strings resolve the provider: gpt-* / o<n>-* → OpenAI, claude-* → Anthropic, gemini-* → Google.

For any other provider, pass a constructed chat model instead of a string — it is used as-is:

import { AzureOpenAiChatClient } from '@sap-ai-sdk/langchain';

new CAPAgent({
  service: 'StudentService',
  baseUrl: 'http://localhost:4004',
  model: new AzureOpenAiChatClient({ modelName: 'gpt-4o' }), // SAP Generative AI Hub
});

For production graphs, prefer CAPToolkit.


ODataExecutor

Low-level OData V4 client. Used by generated tools; usable without an LLM.

import { ODataExecutor } from 'cds-agents';

const executor = new ODataExecutor({
  baseUrl: 'http://localhost:4004',
  servicePath: 'StudentService',
  auth: { type: 'bearer', token: process.env.CAP_TOKEN! },
  timeoutMs: 15_000,
});

await executor.read('Students', { $filter: 'gpa lt 2.0', $top: 10 });
await executor.create('Students', { firstName: 'John', lastName: 'Doe' });
await executor.callUnboundAction('enrollStudent', { studentId, courseId });

Failed calls return a structured object the model can act on:

{
  "type": "ODataError",
  "status": 403,
  "service": "StudentService",
  "entity": "Students",
  "operation": "update",
  "message": "Insufficient privileges"
}

Security

Local demos often use Basic auth. That is not an enterprise default.

auth: { type: 'none' }
auth: { type: 'basic', user, pass }
auth: { type: 'bearer', token }

Bearer is the path to XSUAA / IAS / principal propagation: obtain a token from your IdP and pass it through. Native oauth2 / xsuaa / ias providers and annotation-aware @requires / @restrict tool generation are on the roadmap.

Always disable deletes in production unless you have a human-in-the-loop policy:

{ allowDelete: false, dryRun: process.env.NODE_ENV !== 'production' }

dryRun: true logs the OData request and executes nothing.


Examples

University demo
demo-app/
├── db/schema.cds              Students, Courses, Enrollments
├── srv/student-service.cds    actions + functions
└── chat.mjs                   CLI ReAct agent
cd demo-app && npm install && cds watch     # terminal 1
export OPENAI_API_KEY=sk-...
node chat.mjs                               # terminal 2

Prompts:

  • List all students with GPA below 2.0
  • Create a course called Machine Learning, code ML101, 4 credits, CS
  • Put all students with GPA below 2.0 on academic probation
  • Enroll Alice Johnson in Database Systems for Spring 2024
  • Show enrollment statistics
Custom LangGraph
const hr = new CAPToolkit({ service: 'HRService', baseUrl, toolStrategy: 'minimal' });
const fin = new CAPToolkit({ service: 'FinanceService', baseUrl, toolStrategy: 'minimal' });

const graph = new StateGraph(MessagesAnnotation)
  .addNode('hr', createReactAgent({ llm, tools: await hr.getTools() }))
  .addNode('finance', createReactAgent({ llm, tools: await fin.getTools() }));

Advanced usage

NeedHow
Pre-loaded CSNcdsModel: compiledCsn (skips cds.load())
CDS pathcdsFile: './srv/student-service.cds'
Inspect capabilitiesawait toolkit.getCapabilityMap()
Governed CAP calls without a toolawait toolkit.getExecutor()
Hide entitiesexclude: ['AuditLogs']
Custom system promptsystemPrompt on CAPAgent
Structured query (no LLM)toODataFilter({ gpa: { lt: 2 } })

CDS → Zod mapping: String → z.string(), UUID → z.string().uuid(), Integer → z.number().int(), associations → foreign-key strings.


API reference

CAPToolkit / CAPAgent config
PropertyTypeDefaultDescription
servicestringrequiredCDS service name
baseUrlstringrequiredRunning CAP service URL
modelstring | BaseChatModelrequired on CAPAgentLLM id (gpt-*, o<n>-*, claude-*, gemini-*) or a constructed chat model for any other provider
odataPathstringderived from CDSOverride the service route (proxy, custom mount)
toolStrategy'minimal' | 'crud' | 'actions' | 'full''full'Tool surface
allowCreate / allowUpdate / allowDeletebooleantrueDestructive-operation policy
tools'auto' | string[]'auto'Entity allow-list
excludestring[][]Entity deny-list
authAuthConfig{ type: 'none' }none / basic / bearer
timeoutMsnumber30000OData HTTP timeout
dryRunbooleanfalseLog requests, do not execute
cdsFile / cdsModelpath or CSN'./'Model source
Generated CRUD tools (crud / full)
ToolHTTP
read_{Entity}GET
create_{Entity}POST
update_{Entity}PATCH
delete_{Entity}DELETE
action_{name} / function_{name}POST / GET

Current limitations

LimitationNotes
Local CDS/CSN requiredLoaded via cds.load() or cdsModel. Building the model from a live $metadata endpoint is the next feature — until then, "works against services you don't own" needs their CSN.
Single service per toolkitCompose multiple toolkits for multi-service agents.
No MCP serverDeliberate — use @cap-js/mcp.
No $batchOne HTTP request per tool call.
Authnone / basic / bearer only — XSUAA/IAS helpers are planned.
CAPAgent is single-turnManage conversation history yourself.

Roadmap

  1. Now — capability map, tool strategies, enforced governance, CI, docs
  2. Core — richer query planning, dry-run explain, @restrict / @requires
  3. Consumer-side — build the model from a live $metadata endpoint, so services you don't own need no CDS sources and no @sap/cds
  4. Enterprise — OAuth / XSUAA / IAS, tenant context, tracing, approvals
  5. DX — npx cds-agents inspect|doctor

Full plan: docs/ROADMAP.md


Contributing

git clone https://github.com/Nagarjundas1994-AiAgents/cds-agents.git
cd cds-agents
pnpm install
pnpm test
pnpm build

Public identity is cds-agents (npm). This GitHub repository is still named cds-agents; the published package and docs use cds-agents. See CONTRIBUTING.md.

Released under the MIT License.
© Nagarjun Das

MIT, read

History

Latest

v1.1.2

Features 1, Changed 2, Fixes 2

Notes
Added
  • model accepts a constructed chat model, not only a name string. The provider shorthand was a closed allowlist that rejected anything unrecognised, so a new model prefix or an unsupported provider had no way in. Passing an instance covers SAP Generative AI Hub (@sap-ai-sdk/langchain), Bedrock, Ollama, and any future model.
Fixed
  • OpenAI detection accepted only o1- / o3-; any other o<n>- reasoning model fell through to "Unknown model". Now o<n>- generally.
  • Unknown-model errors now name the instance escape hatch instead of a dead end.
Changed
  • createReactAgent is configured with prompt instead of the legacy messageModifier alias (superseded in LangGraph 0.2.46; still honoured, but deprecated).
  • Refreshed stale model ids in the demo and docs.
  1. v1.1.1

    Features 3, Changed 1, Fixes 2

    Notes

    Two showstoppers that made every HTTP call fail. Both were invisible because no test exercised the real CAP conventions — mocked executors only ever checked URLs they themselves constructed.

    Fixed
    • Service URL path. CAP does not mount a service under its CDS name: StudentService is served at /odata/v4/student. Requests were built as /odata/v4/StudentService/... and 404'd against every stock CAP app. Paths are now derived the way CAP mounts them (Service suffix dropped, kebab-cased, namespace ignored, @path honoured), verified against cds compile --to serviceinfo.
    • cds.load() default. The default cdsFile: './' throws MODEL_NOT_FOUND, so zero-config setup never worked. The default is now '*', CAP's whole-project model.
    Added
    • cdsServicePath() — exported, so the mount path can be inspected or reused.
    • LoadedCDSService.urlPath, and ODataExecutor's urlPath option.
    • odataPath config — override the route when a service sits behind a reverse proxy, a custom mount, or is one you do not own.
    Changed
    • Dropped the planned MCP server. @cap-js/mcp is official, at 1.4.3, and converged on the same describe + query shape. Own the CAP app? Use it. Repositioned around the consumer side instead — see docs/sap-ecosystem.md. Removes docs/mcp/.
  2. v1.1.0

    Features 11, Changed 5, Fixes 2

    Notes

    Tagged but never published to npm — superseded by 1.1.1.

    Added
    • Capability map — protocol-agnostic buildCapabilityMap() / CAPToolkit.getCapabilityMap().

    • Tool strategies — toolStrategy: 'minimal' | 'crud' | 'actions' | 'full'.

    • Minimal tools — describe + structured query instead of one CRUD tool per entity.

    • Structured query API — { gpa: { lt: 2.0 } } compiles to OData $filter.

    • Operation policy — allowCreate, allowUpdate, allowDelete.

    • Structured OData errors — { type, status, service, entity, operation, message }.

    • HTTP timeout — timeoutMs on ODataExecutor / agent config (default 30s).

    • CDS-derived policy — @readonly, @insertonly, and @Capabilities.*Restrictions.* are honoured during tool generation. Config can subtract permissions, never add them.

    • Runtime policy enforcement — ODataExecutor accepts an OperationPolicyMap and refuses denied operations with a 403 ODataError before any HTTP request. CAPToolkit and CAPAgent derive it from the capability map, so advertised and permitted cannot drift.

    • resolveEntityPolicy(), toOperationPolicy(), formatODataLiteral() exports.

    • CAPAgent.getCapabilityMap() and CAPToolkit.getExecutor() — the policy-governed OData client for CAP calls you do not want to expose to the model.

    Fixed
    • Single quotes in entity keys and function parameters are now escaped (O'Brien → 'O''Brien'), so LLM-supplied values cannot break out of an OData literal.
    • The default system prompt no longer names entities and actions excluded by tools / exclude / toolStrategy.
    Changed
    • Product positioning: CAP-native capability layer, not only “CRUD tools for LangChain”.
    • npm metadata: homepage, bugs, repository directory, MCP/sap-cap keywords.
    • Default toolStrategy remains 'full' for backward compatibility.
    • CAPAgent now builds its tools through CAPToolkit instead of duplicating the wiring.
    • generateEntityTools() omits read_* for @insertonly entities — previously always emitted.
  3. v1.0.0

    Features 8

    Notes
    Added
    • CDS → Tool Generation Engine: Auto-generates LangChain tools from CDS service definitions.
    • Schema Mapper: Maps all CDS primitive types to Zod schemas with LLM-friendly .describe() annotations.
    • OData Executor: HTTP execution layer for CRUD operations and custom actions/functions.
    • CAPAgent: High-level agent class wrapping LangGraph's createReactAgent.
    • CAPToolkit: Standalone toolkit export for custom LangGraph graphs.
    • Multi-provider support: OpenAI, Anthropic, and Google Gemini via dynamic imports.
    • Advanced features: Entity scoping (tools/exclude), dryRun mode, streaming support.
    • Demo app: University-themed CAP application with CLI chat interface.
6downloads per week, npm
Weekly downloads for cds-agents26 complete calendar weeks from 2026-04-20 to 2026-10-18; the latest total is 6.20 Apr – 26 Apr: 12327 Apr – 3 May: 34 May – 10 May: 711 May – 17 May: 518 May – 24 May: 425 May – 31 May: 51 Jun – 7 Jun: 108 Jun – 14 Jun: 315 Jun – 21 Jun: 422 Jun – 28 Jun: 629 Jun – 5 Jul: 166 Jul – 12 Jul: 313 Jul – 19 Jul: 220 Jul – 26 Jul: 227 Jul – 2 Aug: 33 Aug – 9 Aug: 310 Aug – 16 Aug: 14317 Aug – 23 Aug: 2124 Aug – 30 Aug: 1531 Aug – 6 Sept: 97 Sept – 13 Sept: 514 Sept – 20 Sept: 821 Sept – 27 Sept: 828 Sept – 4 Oct: 125 Oct – 11 Oct: 712 Oct – 18 Oct: 6

Others providing20

Agent tooling
  1. a2a-pluginExposes an annotated CDS service as an Agent-to-Agent agentfrom CAP
  2. com.sap.cds:cds-adapter-agentA2A adapter turning a CAP Java service into an LLM-backed agentfrom CAP
  3. @cap-js/agentsCDS plugin for building agents inside a CAP servicefrom CAP
  4. cap-agent-ui5-webuiUI5 web interface for an agent built in a CAP servicefrom CAP
  5. @mi8y/cap-agents-memoryLangGraph Store keeping agent memory as CDS entitiesfrom CAP
  6. @mi8y/cap-agents-sdm-backendDeep Agents filesystem over an SAP Document Management repositoryfrom CAP
  7. @mi8y/cds-langgraph-persistenceLangGraph checkpointer backed by CDS for CAP agentsfrom CAP
  8. Joule Studio, classic editionLow-code SAP Build capability for custom Joule skills and agentsfrom BTP/BAIP
  9. @sap/joule-studio-cliCLI for Joule digital assistants and Joule Studio solutionsfrom BTP/BAIP
  10. Joule StudioSAP's managed environment for building custom agents and workflowsfrom Across stacks
  11. @sap/joule-work-dev-cli-early-adoptersPro-code CLI for building and deploying Joule Studio solutionsfrom BTP/BAIP
  12. SAP JouleSAP's AI engagement layer across SAP applicationsfrom BTP/BAIP
  13. @saptarishi/cds-plugin-llmCAP service kind putting eleven model providers behind one APIfrom CAP
Tool governance
  1. a2a-pluginExposes an annotated CDS service as an Agent-to-Agent agentfrom CAP
  2. arc-mcp-hubHub on SAP BTP putting several arc-1 instances behind one loginfrom BTP/BAIP
  3. SuperClaude for SAPClaude Code plugin with an ABAP MCP server and write guardsfrom ABAP
  4. API ManagementAPI proxies with security and traffic policies and Developer Hubfrom BTP/BAIP
  5. bw-modeling-mcpMCP server for BW/4HANA modelling objectsfrom BTP/BAIP
  6. Maherd18/sap-mcp-serverPolicy-checked MCP server for ABAP development over ADTfrom ABAP
  7. SAP API Policy Evidence SkillSkill assessing API usage against the SAP API Policyfrom BTP/BAIP
  8. pyrfc-mcpMCP server calling RFC-enabled function modules behind an allowlistfrom ABAP

Details

Sources4
npm registrydiscovered here, keywords:sap-capchecked
npm registry, cds-agentsversion, releases, installschecked
packages/cds-agents/README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
runtimesnode
declared for>=7.0.0
latestv1.1.2
first release
releases and cadence2
discovered vianpm registry · keywords:sap-cap
first seen in the atlas
ecosystem and domaincap, ai-and-agents
History in the atlas3
  1. the producer-against-consumer line, the three entry points, the tool strategy and the discovery-cost argument, on a sourced edge with three property values
  2. brings: Tools for another framework and Loop in application code, harness: LangChain and LangGraph, protocols: OData V4
  3. First seen.
For your agent
Ref
artifact:nagarjundas1994-aiagents-cds-agents
JSON
/artifacts/nagarjundas1994-aiagents-cds-agents.json
MCP
Connecting an agent