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 →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

cap-decisions

Adds a decisions service to a CAP Node.js application that answers typed questions about one text or JSON state through an HTTP decision endpoint.

Adds a decisions required service to a CAP Node.js application: cds.connect.to('decisions') returns a client whose decide() call sends one text or JSON state and a map of named choice, score and noul questions to an HTTP endpoint that speaks the Jev protocol, and gets one typed answer per question back with its probabilities and a confidence value. Which endpoint that is comes from a kind under cds.requires.decisions, one per provider: TypeSafe System One, SubQ Snap, the clef model on Cloudflare Workers AI, a Laya server, or any Jev-compatible URL under the generic kind. cds add decisions writes that choice into a CAP profile. In TypeScript the choice labels are inferred from the criteria keys, so the selected label is typed as a union of those keys and a handler map that misses one does not compile. In the development and test profiles an application without an explicit kind gets decisions-mock, which answers in-process from fixtures without a server, a token or network access, and npx cap-decisions-mock serves the same answers over HTTP. The package serves no service of its own: it creates no OData endpoint and produces no text, and the action that calls decide(), with the @requires that protects it, belongs to the application.

Facts

LicenceMIT

Where it sits

Lives in
Provides
LLM integrationCAPLLM integrationcapabilityCalling a language model from application code with the tenant, destination and credential handling already solved instead using an SDK call with a hand-rolled key.Service integrationCAPService integrationcapabilityUsing a service that runs somewhere else as if it were one of your own: its API imported into the model, a proxy that turns a local query into the remote protocol, and a mock that stands in for it on a laptop. Distinct from [destinations](capability:destinations), which is how the address and the credentials are found, and from [replication](capability:replication), which is holding the data locally.
Add-on to
@sap/cds@sap/cdsartifactThe CAP Node.js runtime, which compiles the CDS model, serves the services declared in it, answers generic requests before any handler runs, and loads every cds-plugin.
Flavors
Node.jsfrom its runtime
Requires
@sap/cds^9 || ^10@sap/cdsartifactThe framework it extends: CAP loads the package's cds-plugin.js and adds the decisions required service, which the application reaches with cds.connect.to('decisions'). The peer range is ^9 || ^10.
Optional
@sap/cds-dk@sap/cds-dkartifactThe cds add decisions facet runs inside CAP's cds add command, so it needs the development kit; the package itself does not depend on it.@sap-cloud-sdk/connectivity@sap-cloud-sdk/connectivityartifactResolving the named destination: the optional peer package is installed in the CAP application, and the plugin calls its getDestination().SAP Destination serviceSAP Destination serviceartifactHolds the full POST endpoint and the static Authorization header for the provider, so neither is in the application's configuration. The entry is a NoAuthentication destination with a URL.headers.Authorization property; other destination authentication flows are outside the integration's scope.TypeSafe System OneTypeSafe System Oneoutside the atlasThe endpoint the kind posts to, https://api.typesafe.ai/v1/systemone, with the jev-latest model and a token the kind requires.

Who is behind it

Hendrik NeumannHendrik NeumannPersonMaintains this
In the atlas: maintains 1
@hendrik77
maintainer

Before choosing this

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.
  • § 1 License. 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.
  • § 2 Intellectual 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.
  • § 3 Artificial Intelligence Training. The agreement prohibits use of the covered materials and customer applications for training artificial-intelligence models or systems.
SAP Developer License Agreement 3.2 CAP →

Also, from LLM integration§ 3: Calling a model for inference is not automatically AI training. Section 3 matters when the covered material or application participates in training, model development, refinement or the text-and-data-mining uses it names.

PracticalFunctional boundary

CAP Java is outside it: the plugin is written for CAP Node.js applications, and cds add decisions prints a message and writes nothing in a Java project. A decision needs an answer, so the service cannot be queued: a truthy queued, outboxed or outbox setting fails with INVALID_CONFIG, which rules out handing a call to the outbox. The package is not yet on npm, so it is installed from a GitHub release archive, and the subclass hooks, the HTTP mock server, the cds add facet and the provider test kit are marked experimental.

What it declares

Every artifact

Type
CDS plugin
Origin
Independently maintained
Runtime
Node.js

As a CDS plugin

Declared for
^9 || ^10
Type declarations
declared
Distributed through
does not say

For LLM integration

Models it reaches
Other providers

For service integration

Protocols
http

Connections9

cap-decisions connectionscap-decisionsPROVIDES→ provides2provides stated Calls a decision model over HTTP from a CAP handler with the endpoint and the credentials kept in CAP's configuration: the kind carries the URL, the `modelId` that is sent as `model` and the request limits, the token comes from a secret source or from a BTP destination, and the plugin does the timeout, the retries on 429, 502, 503, 504 and 529, and the error codes. What comes back is one typed answer per named question: a choice label with a probability per key, a score with its legend, or the probability that a yes/no answer is true. There is no text to parse. hendrik77/cap-decisions — README, opening: https://github.com/hendrik77/cap-decisions hendrik77/cap-decisions — README, credentials: https://github.com/hendrik77/cap-decisions hendrik77/cap-decisions — README, retries: https://github.com/hendrik77/cap-decisionsLLM integrationprovides stated Puts a remote decision endpoint behind a CAP service: the kind holds its URL and limits, `cds.connect.to('decisions')` checks the configuration and rejects an invalid one with `INVALID_CONFIG`, and `decide()` sends an internal CAP `decide` event that an application can hang `before` and `after` handlers on. For work off the network it ships a mock: `decisions-mock` is the kind an application without an explicit one gets in the `development` and `test` profiles, answering in-process from fixtures in `test/data/decisions.json`, with `latencyMs` and `fail` to simulate a slow or failing provider, and `npx cap-decisions-mock` serves the same answers over HTTP so retries, timeouts and tokens are exercised too. hendrik77/cap-decisions — README, the decide event: https://github.com/hendrik77/cap-decisions hendrik77/cap-decisions — README, local development: https://github.com/hendrik77/cap-decisions hendrik77/cap-decisions — README, HTTP mock server: https://github.com/hendrik77/cap-decisionsService integrationNEEDS→ connects to2connects to stated If: `credentials.destination` is set. Reads the destination's URL and static headers to reach the provider: the plugin resolves it when the service is created and again for each call, and a destination that is not found, or that carries a bad URL or bad headers, fails the connection. hendrik77/cap-decisions — README, destination resolution: https://github.com/hendrik77/cap-decisions hendrik77/cap-decisions — README, destination failures: https://github.com/hendrik77/cap-decisionsSAP Destination serviceifconnects to stated If: The `decisions-typesafe` kind is selected. Posts the state and the questions to `https://api.typesafe.ai/v1/systemone` with `jev-latest` as the model and a bearer token, and reads the typed answers back. hendrik77/cap-decisions — README, kinds table: https://github.com/hendrik77/cap-decisions hendrik77/cap-decisions — README, the Jev protocol: https://github.com/hendrik77/cap-decisionsTypeSafe System Oneif→ needs1needs stated The framework it extends: CAP loads the package's `cds-plugin.js` and adds the `decisions` required service, which the application reaches with `cds.connect.to('decisions')`. The peer range is `^9 || ^10`. hendrik77/cap-decisions — README, requirements: https://github.com/hendrik77/cap-decisions hendrik77/cap-decisions — README, plugin loading: https://github.com/hendrik77/cap-decisions@sap/cds→ optionally needs4optionally needs stated If: `credentials.destination` names a Destination service entry instead of a `url` and a `token`. Resolving the named destination: the optional peer package is installed in the CAP application, and the plugin calls its `getDestination()`. hendrik77/cap-decisions — README, destinations: https://github.com/hendrik77/cap-decisions@sap-cloud-sdk/connectivityifoptionally needs stated If: `cds add decisions` is used to write the configuration; without it the same entries are written by hand. The `cds add decisions` facet runs inside CAP's `cds add` command, so it needs the development kit; the package itself does not depend on it. hendrik77/cap-decisions — README, cds add: https://github.com/hendrik77/cap-decisions hendrik77/cap-decisions — README, by hand: https://github.com/hendrik77/cap-decisions@sap/cds-dkifoptionally needs stated If: `credentials.destination` is set instead of `url` and `token`. Holds the full POST endpoint and the static `Authorization` header for the provider, so neither is in the application's configuration. The entry is a `NoAuthentication` destination with a `URL.headers.Authorization` property; other destination authentication flows are outside the integration's scope. hendrik77/cap-decisions — README, destinations: https://github.com/hendrik77/cap-decisions hendrik77/cap-decisions — README, destination scope: https://github.com/hendrik77/cap-decisionsSAP Destination serviceifoptionally needs stated If: The `decisions-typesafe` kind is selected. The endpoint the kind posts to, `https://api.typesafe.ai/v1/systemone`, with the `jev-latest` model and a token the kind requires. hendrik77/cap-decisions — README, kinds table: https://github.com/hendrik77/cap-decisionsTypeSafe System Oneif

Where it sits in your app

Download
Your CAP applicationYour SAP BTP subaccountThird partyhendrik77/cap-decisions — README, kinds table, checked 2026-10-29: “| `decisions-typesafe` | `https://api.typesafe.ai/v1/systemone` | `jev-latest` | `true` | `choiceOptions`: 255; `scoreCriteria`: 2 to 10 |”outboundsyncif The `decisions-typesafe`kind is selectedhendrik77/cap-decisions — README, destination resolution, checked 2026-10-29: “The plugin resolves the destination with `getDestination()` when the service is created and for each call; it uses the SDK's cache.”outboundif `credentials.destination`is setdocumentedmay needif `cds add decisions` is usedto write the configuration;without it the same entries are …documentedmay needif `credentials.destination`names a Destination serviceentry instead of a `url` and a `…cap-decisions, modulecap-decisions@sap/cds-dk, module@sap/cds-dk@sap-cloud-sdk/connectivity, module@sap-cloud-sdk/conne…SAP Destination service, service instanceSAP DestinationserviceTypeSafe System One, Hosted serviceTypeSafe System OneHosted service
SAPnot SAP's, or the project's ownstated in the documentunder a condition

Others providing28

LLM integration
  1. llm_clientABAP client with one interface to chat-completion LLM APIsfrom ABAP
  2. abap-agent-runtimeABAP-native MCP endpoint that drives opted-in abap2UI5 appsfrom ABAP
  3. abap_btocs_ollamaB-Tocs ABAP SDK plugin connecting to Ollama modelsfrom ABAP
  4. SAP AI CoreAI runtime on BTP with the Generative AI Hubfrom BTP/BAIP
  5. cap-java/cds-aiBridge from CAP Java to SAP AI Core, with Fiori field recommendationsfrom CAP
  6. @cap-js/aiValue-help recommendations and SAP AI Core as a CAP servicefrom CAP
  7. cap-llm-pluginGenerative AI in CAP with fields anonymised through SAP HANAfrom CAP
  8. @geertjanklaps/cds-toon-ai-protocol-adapterProtocol adapter serving CAP data as TOON instead of JSONfrom CAP
  9. abap-sdk-nwas-xABAP client library for IBM watsonx.ai APIsfrom ABAP
  10. @jerome-benoit/sap-ai-providerVercel AI SDK provider for SAP AI Corefrom CAP
  11. ui5-cap-ai-featuresCDS plugin and UI5 controls for AI text features via SAP AI Corefrom CAP
  12. Microsoft AI SDK for SAPABAP library for calling Azure OpenAI and OpenAIfrom ABAP
  13. zllmABAP framework for chaining and orchestrating LLM callsfrom ABAP
  14. ABAP AI SDKSAP reuse library for calling large language models from ABAPfrom ABAP
  15. @sap-ai-sdk/ai-apiAI Core control plane API surface of SAP's AI SDKfrom CAP
  16. @sap-ai-sdk/coreShared internals of SAP's AI SDKfrom CAP
  17. @sap-ai-sdk/foundation-modelsClient for foundation models via SAP AI Core and Generative AI Hubfrom CAP
  18. @sap-ai-sdk/orchestrationOrchestration Service client for templating, grounding and maskingfrom CAP
  19. @sap-ai-sdk/prompt-registryClient for prompts kept in SAP's prompt registryfrom CAP
  20. @saptarishi/cds-plugin-llmCAP service kind putting eleven model providers behind one APIfrom CAP
  21. @shahid.la/cds-db-nlquery-mcpMCP server answering plain-English questions against a CDS schemafrom CAP
  22. @ui5/webcomponentsSAP's UI elements as standard custom elementsfrom UI5
  23. abap-sdk-nwasAn ABAP client library for IBM Watson's Discovery, Language Translator, Natural Language Understanding, Speech to Text, Text to Speech and Assistant services, installed through abapGit.from ABAP
Service integration
  1. com.sap.cds:cds-feature-remote-odataRemote Services for consuming OData V2 and V4 APIs in CAP Javafrom CAP
  2. capire/s4Prebuilt SAP S/4HANA integration package for CAP projectsfrom CAP
  3. cds-data-federationData federation for CAP via delegation, caching and replicationfrom CAP
  4. @sap/cds-dkCommand line client and development toolkit for CAPfrom CAP
  5. @sap/cdsCAP Node.js runtimefrom CAP

Details

Sources2
GitHub APIdiscovered here, hendrik77/cap-decisionschecked
github.com/hendrik77/cap-decisionstree, pushes, contributors, CInot read

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^9 || ^10
discovered viaGitHub API · hendrik77/cap-decisions
first seen in the atlas
ecosystem and domaincap, ai-and-agents
History in the atlas1
  1. First seen.
For your agent
Ref
artifact:hendrik77-cap-decisions
JSON
/artifacts/hendrik77-cap-decisions.json
MCP
Connecting an agent