SAP Released Objects Server
README.md
# ROSA — Released Objects Search Assistant
[](https://www.npmjs.com/package/@rosa-mcp/server)
[](https://github.com/ClementRingot/ROSA/pkgs/container/rosa)
[](https://github.com/ClementRingot/ROSA/actions/workflows/ci.yml)
[](https://github.com/ClementRingot/ROSA/actions/workflows/release.yml)
[](https://www.npmjs.com/package/@rosa-mcp/server)
[](./LICENSE)
[](https://modelcontextprotocol.io/)
**ROSA gives AI agents real-time knowledge of which SAP objects are released for
ABAP Cloud / Clean Core — and what to use instead when they're not.**
It plugs into the [SAP Cloudification Repository](https://github.com/SAP/abap-atc-cr-cv-s4hc)
(the official source of truth) and exposes it **two ways**, sharing the same
business logic — no feature gap between them:
| Access mode | Protocol | Use case |
| --- | --- | --- |
| **MCP Server** | [Model Context Protocol](https://modelcontextprotocol.io/) on `POST /mcp` | AI agents with native MCP support (Claude Desktop, Claude Code, Cline, Cursor…) |
| **REST API** | `GET` endpoints on `/api/*` returning JSON | LLM skills, scripts, CI pipelines — anything that speaks HTTP |
> Ask *"Is table MARA available in ABAP Cloud?"* and the agent instantly knows:
> **no — use `I_PRODUCT` instead.**
## Quick start
> **The previously hosted public instance (on Railway) has been retired** — it
> was too costly to keep running. There is **no default public URL** anymore.
> Everything else still works: run ROSA via `npx`, a native executable, Docker,
> any Node host, or SAP BTP — see the deployment options below.
The quickest path is **npx** — no install, runs in stdio mode (what MCP clients
expect). Add this to your client config (Claude Code `.mcp.json`, Claude Desktop
`claude_desktop_config.json`, or Cursor `~/.cursor/mcp.json`):
```json
{
"mcpServers": {
"rosa": {
"command": "npx",
"args": ["-y", "@rosa-mcp/server"]
}
}
}
```
Already running ROSA somewhere (self-hosted / your own server)? Point your client
at its URL instead:
```json
{
"mcpServers": {
"rosa": {
"type": "url",
"url": "https://<your-instance>/mcp"
}
}
}
```
### REST API
All endpoints are `GET`, return JSON, and support CORS (replace `<your-instance>`
with your own host):
```bash
curl "https://<your-instance>/api/search?query=purchase+order"
curl "https://<your-instance>/api/object?object_type=TABL&object_name=MARA"
curl "https://<your-instance>/api/compliance?object_names=MARA,BSEG,I_PRODUCT"
```
For LLM-skill usage, the full API reference is available as a skill you point at
your instance:
- [`skills/rosa-global/SKILL.md`](./skills/rosa-global/SKILL.md) — copy it and replace the `{{ROSA_BASE_URL}}` placeholder with your instance URL.
- [`skills/sap-released-objects/SKILL.md`](./skills/sap-released-objects/SKILL.md) — **obsolete** (was wired to the retired hosted instance); kept for reference only.
---
## Self-hosted / alternative deployments
| I want to… | Use | One-liner |
| --- | --- | --- |
| Run locally via npx (stdio) | **npm** | `npx -y @rosa-mcp/server` |
| Run without Node.js installed | **Native executable** | download from [Releases](https://github.com/ClementRingot/ROSA/releases/latest) |
| Run as a server / self-host | **Docker** | `docker run -p 3001:3001 ghcr.io/clementringot/rosa` |
| Deploy on a generic Node host | **Node PaaS** | Railway / Render / Fly.io — set `TRANSPORT=http` |
| Deploy on SAP BTP Cloud Foundry | **MTA** or **npm wrapper** | see [DEPLOYMENT](./docs/DEPLOYMENT.md#sap-btp-cloud-foundry-two-paths) |
| Deploy on classic Cloud Foundry | **`cf push`** | see [cloud-foundry-classic](./docs/cloud-foundry-classic.md) |
Full details for every option: **[docs/DEPLOYMENT.md](./docs/DEPLOYMENT.md)**.
### Local MCP (stdio mode)
```json
{
"mcpServers": {
"rosa": {
"command": "npx",
"args": ["-y", "@rosa-mcp/server"]
}
}
}
```
## Features
- **Search SAP objects** — classes, CDS views, tables, data elements, BDEFs…
- **Filter by Clean Core Level** (A / B / C / D) — the model replacing the 3-tier
system since August 2025.
- **Find successors** for deprecated or non-released objects.
- **Clean Core compliance check** for a list of objects (with compliance rate).
- **Statistics** — counts by level, type, and application component.
- **Smart search** — multi-token scoring (`"purchase order"` → `I_PURCHASEORDER`).
- **Multi-system** — S/4HANA Cloud Public, BTP ABAP Environment, Private Cloud,
On-Premise; PCE versions discovered dynamically.
Data is fetched from SAP's public GitHub repository at runtime and cached in
memory for 24h — no SAP system connection required.
### Clean Core Level Concept
| Level | Meaning | Upgrade safety |
| --- | --- | --- |
| **A** | Released APIs (ABAP Cloud) | ✅ Upgrade-safe |
| **B** | Classic APIs | ⚠️ Upgrade-stable |
| **C** | Internal / unclassified | 🟡 Manageable risk |
| **D** | noAPI (not recommended) | 🔴 High risk |
## MCP tools & REST endpoints
Each MCP tool on `POST /mcp` has an identical REST counterpart under `/api`:
| MCP tool | REST endpoint | Purpose |
| --- | --- | --- |
| `sap_search_objects` | `GET /api/search` | Search objects, ranked by relevance, with filters |
| `sap_get_object_details` | `GET /api/object` | Full details + Clean Core assessment for one object |
| `sap_find_successor` | `GET /api/successor` | Successor(s) of a deprecated / non-released object |
| `sap_check_clean_core_compliance` | `GET /api/compliance` | Compliance rate for a list of objects |
| `sap_list_versions` | `GET /api/versions` | Available S/4HANA PCE versions |
| `sap_list_object_types` | `GET /api/types` | TADIR object types with per-level counts |
| `sap_get_statistics` | `GET /api/statistics` | Repository statistics |
Parameters and response shapes are documented in
[`skills/sap-released-objects/SKILL.md`](./skills/sap-released-objects/SKILL.md).
## Server modes & authentication
ROSA runs over **stdio** (default; local MCP clients) or **HTTP** (`--http` /
`TRANSPORT=http`; remote/self-hosted). On HTTP it auto-detects four
authentication modes from the environment — **public**, **OIDC / OAuth 2.1**,
**XSUAA** (SAP BTP), and **API keys** — with no rebuild:
| Mode | Trigger |
| --- | --- |
| Public | no auth env vars |
| OIDC / OAuth 2.1 | `OAUTH_ISSUER` + `OAUTH_AUDIENCE` |
| XSUAA | `VCAP_SERVICES` xsuaa binding (SAP BTP) |
| API keys | `API_KEYS` (alongside any mode) |
How transports, auth auto-detection, the auth × deployment matrix, and the
system diagram work: **[docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md)**.
## Usage examples
```
You: "Is table MARA available in ABAP Cloud?"
Agent: → sap_get_object_details(TABL, MARA) → "deprecated; successor I_PRODUCT"
You: "My code uses BSEG, MARA, CL_GUI_ALV_GRID. Is it Clean Core?"
Agent: → sap_check_clean_core_compliance(...) → "Compliance rate: 0%"
You: "What's available for sending emails on BTP?"
Agent: → sap_search_objects(query="send email", system_type="btp")
```
## Documentation
| Doc | For |
| --- | --- |
| [ARCHITECTURE.md](./docs/ARCHITECTURE.md) | Transports, auth modes, system diagram, MCP tools |
| [DEPLOYMENT.md](./docs/DEPLOYMENT.md) | Every deployment option + config reference + troubleshooting |
| [cloud-foundry-classic.md](./docs/cloud-foundry-classic.md) | Classic (non-BTP) Cloud Foundry |
| [RELEASE.md](./docs/RELEASE.md) | Release train & pipeline (maintainers) |
| [CONTRIBUTING.md](./CONTRIBUTING.md) | Dev setup, tests, commit convention |
| [CHANGELOG.md](./CHANGELOG.md) | Notable changes |
## Contributing & releases
PRs welcome — see [CONTRIBUTING.md](./CONTRIBUTING.md). This repo uses
[Conventional Commits](https://www.conventionalcommits.org/); releases are cut by
an automated [release train](./docs/RELEASE.md) that publishes the npm package,
the multi-arch Docker image, and native executables from a single tag.
## License
[MIT](./LICENSE)
TDQS
A4.4/5.0
Scored across 7 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: listing versions, searching objects, getting details, finding successors, listing types, statistics, and compliance checking. No overlap.
Naming Consistency5/5
All tool names follow a consistent 'sap_verb_noun' pattern (e.g., sap_list_versions, sap_search_objects). No deviations.
Tool Count5/5
7 tools is an appropriate number for this domain, covering key operations without being excessive or insufficient.
Completeness5/5
The tool surface covers the full lifecycle of exploring and assessing SAP released objects: version discovery, search, detail, successor, types, statistics, and compliance. No obvious gaps.
Maintenance
ActivityMaintained
ResponsivenessNo issues