Skip to main content
ClaudeWave
guniweb avatar
guniweb

guniweb-sap-mcp

Ver en GitHub

SAP S/4HANA & ECC MCP Server for n8n — OData V2/V4, IDoc, RFC/BAPI. Docs, releases, issues. Free to use: npm i -g guniweb-sap-mcp

MCP ServersRegistry oficial1 estrellas0 forksDockerfileISCActualizado today
ClaudeWave Trust Score
95/100
Verified
Passed
  • Open-source license (ISC)
  • Actively maintained (<30d)
  • Clear description
  • Topics declared
  • Documented (README)
Last scanned: 9/8/2026
Install in Claude Code / Claude Desktop
Method: NPX · guniweb-sap-mcp
Claude Code CLI
claude mcp add guniweb-sap-mcp -- npx -y guniweb-sap-mcp
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "guniweb-sap-mcp": {
      "command": "npx",
      "args": ["-y", "guniweb-sap-mcp"],
      "env": {
        "SAP_BASE_URL": "<sap_base_url>",
        "SAP_USERNAME": "<sap_username>",
        "SAP_PASSWORD": "<sap_password>"
      }
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
Detected environment variables
SAP_BASE_URLSAP_USERNAMESAP_PASSWORD
Casos de uso

Resumen de MCP Servers

# GuniWeb SAP S/4HANA & ECC MCP Server

Designed for n8n, usable from any MCP host. Free to use — built and maintained by [GuniWeb](https://guniweb.de).

Connect n8n workflows to SAP S/4HANA and ECC via OData V2, V4, IDocs, and RFC/BAPI using the Model Context Protocol (MCP). Made for **AI-assisted, human-governed workflows**: the workflow author decides which SAP APIs are called and in what order; the LLM extracts, maps and fills in parameters. Writes are off by default and switched on explicitly, per server and per token.

```mermaid
graph LR
    n8n["n8n workflow<br/>AI-assisted, human-governed"] -->|MCP Protocol| MCP["guniweb-sap-mcp<br/>22 Tools &bull; 8 Auth Types"]
    MCP -->|"OData V2/V4<br/>IDoc XML<br/>RFC/BAPI"| SAP["SAP S/4HANA & ECC"]
    MCP -->|"OAuth2 / JWT"| BTP["SAP BTP"]
    BTP --> SAP

    style n8n fill:#4a90d9,color:#fff,stroke:#3a7bc8
    style MCP fill:#2d2d2d,color:#fff,stroke:#555
    style SAP fill:#1a6fb5,color:#fff,stroke:#0f5a9d
    style BTP fill:#e8a317,color:#fff,stroke:#c88d14
```

## Features

### OData & IDoc
- **OData V2 + V4 CRUD** -- Read, query, create, update, delete with auto version detection
- **Deep Insert** -- Create parent + child entities in one request
- **Function Imports (V2) & Actions/Functions (V4)** -- Trigger SAP business logic
- **Batch Operations** -- Multiple operations in a single `$batch` request
- **NL-to-OData Query** -- Natural language queries converted to structured OData filters
- **IDoc Send & Receive** -- HTTP/XML based, no RFC dependency

### Discovery & Intelligence
- **Service Discovery** -- Auto-discover OData services with 16 business domain categories
- **Progressive Metadata** -- Service catalog -> entity sets -> properties -> query
- **Smart Query Routing** -- Domain-based routing resources for LLM tool selection
- **Decision-Tree Tool Descriptions** -- "When to use / When NOT to use" blocks guide LLMs

### Governed tool visibility
- **4-Tier Tool Registry** -- Core / OData / IDoc / RFC tiers with on-demand activation
- **`sap_enable_tools`** -- LLMs activate additional tool tiers at runtime, within the limits you set
- **Read-only by default (since 0.2.2)** -- write tools require `--allow-write`
- **Per-token policy (0.3.0)** -- `readOnly` and tool-tier ceilings per Bearer token, only ever more restrictive
- **IDoc / RFC auto-disable** -- tools hidden when the corresponding configuration is missing
- **MCP Annotations** -- readOnlyHint, destructiveHint, idempotentHint on all 22 tools

### Authentication (8 Types)

```mermaid
graph TB
    subgraph Technical["Technical User Auth"]
        basic["basic<br/><i>Direct S/4HANA</i>"]
        userbasic["user-basic<br/><i>Personal SAP login per request</i>"]
        oauth2["oauth2<br/><i>BTP Client Credentials</i>"]
        apikey["apikey<br/><i>Sandbox / Testing</i>"]
    end
    subgraph Enterprise["Enterprise Auth (OIDC)"]
        ias["ias<br/><i>SAP IAS Token</i>"]
        xsuaa["xsuaa<br/><i>SAP XSUAA Token</i>"]
    end
    subgraph Principal["Principal Propagation<br/><i>End-user identity forwarded to SAP</i>"]
        btp["btp-principal<br/><i>JWT Bearer Exchange<br/>via Destination Service</i>"]
        saml["saml-bearer<br/><i>SAML 2.0 Assertion<br/>+ RSA-SHA256 Signing</i>"]
    end

    style Technical fill:#2a5f8f,color:#fff,stroke:#1a4f7f
    style Enterprise fill:#5b8c5a,color:#fff,stroke:#4b7c4a
    style Principal fill:#8b5e3c,color:#fff,stroke:#7b4e2c
```

### Infrastructure
- **Three Transport Modes** -- stdio, Streamable HTTP, SSE
- **Named destinations (0.3.0)** -- one server, several SAP systems; a Bearer token per n8n credential selects the system and its permissions. Static API key still supported
- **Docker Ready** -- Docker Compose for n8n + SAP MCP sidecar
- **Zero telemetry** -- the server talks to the SAP/BTP endpoints you configure and to nothing else. No usage statistics, no update checks, no crash reports
- **1267 Tests** -- Unit, integration, E2E with CI/CD via GitHub Actions

## Quick Start

### Try it without an SAP system: `--demo`

No SAP system at hand? Start the server against a built-in mock S/4HANA and try every tool from n8n or any MCP client:

```bash
npx guniweb-sap-mcp --demo                                   # stdio — n8n MCP Client in command mode
npx guniweb-sap-mcp --demo --transport http --port 8808      # HTTP — n8n MCP Client with URL http://localhost:8808/mcp
npx guniweb-sap-mcp --demo --allow-write                     # also try sap_create / sap_update / sap_delete / sap_batch
```

The demo starts an in-memory OData V2 gateway on localhost (three services with real SAP field names — `API_BUSINESS_PARTNER`, `API_SALES_ORDER_SRV`, `API_PRODUCT_SRV`; ~20 business partners, 15 sales orders with items, 10 products) and points the server at it. It behaves like a Gateway where it matters: catalog discovery, `$metadata`, `$filter`/`$expand`/paging, CSRF tokens, ETags, deep insert, function imports, `$batch` with changesets, SAP-style error payloads. Sample data only — nothing is real, nothing leaves your machine, and changes are gone when the process ends. Also `SAP_MCP_DEMO=true` (e.g. in Docker). A workflow you build against the demo runs against a real system after you replace `--demo` with your `SAP_*` configuration.

### 1. Install

```bash
npm install -g guniweb-sap-mcp
```

Or [run it as a container](#run-as-a-container): `docker run --rm -p 8808:8808 -e SAP_MCP_DEMO=true ghcr.io/guniweb/guniweb-sap-mcp:latest`

### 2. Configure

```bash
export SAP_BASE_URL=https://your-sap-system.example.com
export SAP_AUTH_TYPE=basic
export SAP_USERNAME=your-user
export SAP_PASSWORD=your-password
export SAP_CLIENT=100   # do not omit: without it a client-dependent Gateway
                        # answers 401 "Anmeldung fehlgeschlagen", which looks
                        # like a wrong password but is not one
```

### 3. Run

```bash
# stdio (default) -- for n8n MCP Client in command mode
guniweb-sap-mcp

# HTTP -- for n8n MCP Client in URL mode or Docker
guniweb-sap-mcp --transport http --port 8808

# With tool tier control
guniweb-sap-mcp --transport http --port 8808 --tiers core,odata
guniweb-sap-mcp --transport http --port 8808 --allow-write   # writes are OFF by default

# Production: authenticate the MCP endpoint AND the inbound IDoc webhook
guniweb-sap-mcp --transport http --port 8808 --api-key <mcp-key> --webhook-secret <idoc-secret>
```

### Run as a container

```bash
# Look around first — mock S/4HANA inside the container, no SAP system needed
docker run --rm -p 8808:8808 -e SAP_MCP_DEMO=true ghcr.io/guniweb/guniweb-sap-mcp:latest

# Against a real system (pin the version in production)
docker run -d --name sap-mcp -p 8808:8808 --env-file .env \
  ghcr.io/guniweb/guniweb-sap-mcp:<version>

# Flags go straight to the server — writes stay off unless you say so
docker run -d -p 8808:8808 --env-file .env \
  ghcr.io/guniweb/guniweb-sap-mcp:<version> --allow-write
```

The image is built **from the published npm package**, not from a second build path — what runs in the container is the artifact you would have installed with `npm install`, so the two cannot drift apart. HTTP transport on port 8808 is the default inside the image (`SAP_MCP_TRANSPORT` / `SAP_MCP_PORT`); it runs as a non-root user, answers a health check on `/healthz`, and is published for `linux/amd64` and `linux/arm64` with build provenance.

Not included: **RFC/BAPI**. That path needs the SAP NW RFC SDK, which SAP licenses to customers only and which therefore cannot ship in a public image. Everything else — OData V2/V4, IDoc over HTTP/XML — works. For RFC, install the SDK on the host and run the server from npm ([Setup for SAP ECC](#setup-for-sap-ecc)).

A `docker-compose.yml` that puts n8n next to the server is in the repository.

#### Production hardening

| Variable / Flag               | Default        | Description                                                                                     |
|-------------------------------|----------------|-------------------------------------------------------------------------------------------------|
| `--tool-timeout` / `SAP_MCP_TOOL_TIMEOUT` | `30` (seconds) | Time budget for a **whole tool call**, however many SAP requests it makes. On expiry the client gets a valid MCP response with `truncated: true` and a plain-language reason — never a hanging connection. Paginated reads return the pages fetched so far. `0` disables the budget (logged as a warning at startup) |
| `SAP_HTTP_TIMEOUT_MS`         | `30000`        | Timeout for a **single** outbound SAP request (ms). Hanging gateways fail fast with a structured `TIMEOUT` error instead of stalling the n8n agent. Capped by whatever is left of the tool budget above |
| `--cache-dir` / `SAP_CACHE_DIR` | _(unset = in-memory only)_ | Persist the catalog and metadata caches to disk so a restart does not refetch them. Without it every restart re-reads the full catalog — on a system with 1222 services that is the cold start that breaks client timeouts. n8n evicts its own client entry on a transport error, so restarts are not rare |
| `SAP_CA_CERT` | _(unset)_ | Path to the root CA that signs your SAP certificate — the documented way past a corporate PKI. Mirrored into `NODE_EXTRA_CA_CERTS`. Prefer this over `SAP_TLS_VERIFY=false`, which disables the check rather than solving it |
| `--concurrency` / `SAP_CONCURRENCY` | `5` | Upper bound on simultaneous SAP requests where several are unavoidable |
| `--allow-write` / `SAP_MCP_ALLOW_WRITE` | _(unset = read-only)_ | **Since 0.2.2 the server is read-only by default.** `sap_create`, `sap_update`, `sap_delete`, `sap_function` and `sap_idoc_send` are not registered at all until you set this — a tool an agent cannot see is a tool it cannot call by accident. `--read-only` is still accepted and now simply describes the default |
| `SAP_JWT_ISSUER` | _(unset = no verification)_ | Issuer whose JWKS is used to verify incoming user tokens. Without it
bapiidocmcpmcp-servermodel-context-protocoln8nodatarfcs4hanasapsap-ecc

Lo que la gente pregunta sobre guniweb-sap-mcp

¿Qué es guniweb/guniweb-sap-mcp?

+

guniweb/guniweb-sap-mcp es mcp servers para el ecosistema de Claude AI. SAP S/4HANA & ECC MCP Server for n8n — OData V2/V4, IDoc, RFC/BAPI. Docs, releases, issues. Free to use: npm i -g guniweb-sap-mcp Tiene 1 estrellas en GitHub y su última actualización registrada es del 2026-09-07.

¿Cómo se instala guniweb-sap-mcp?

+

Puedes instalar guniweb-sap-mcp clonando el repositorio (https://github.com/guniweb/guniweb-sap-mcp) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.

¿Es seguro usar guniweb/guniweb-sap-mcp?

+

Nuestro agente de seguridad ha analizado guniweb/guniweb-sap-mcp y le ha asignado un Trust Score de 95/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.

¿Quién mantiene guniweb/guniweb-sap-mcp?

+

guniweb/guniweb-sap-mcp es mantenido por guniweb. La última actividad registrada en GitHub es del 2026-09-07, con 0 issues abiertos.

¿Hay alternativas a guniweb-sap-mcp?

+

Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.

Despliega guniweb-sap-mcp en tu cloud

Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.

¿Mantienes este repo? Añade un badge a tu README

Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.

Featured on ClaudeWave: guniweb/guniweb-sap-mcp
[![Featured on ClaudeWave](https://claudewave.com/api/badge/guniweb-guniweb-sap-mcp)](https://claudewave.com/repo/guniweb-guniweb-sap-mcp)
<a href="https://claudewave.com/repo/guniweb-guniweb-sap-mcp"><img src="https://claudewave.com/api/badge/guniweb-guniweb-sap-mcp" alt="Featured on ClaudeWave: guniweb/guniweb-sap-mcp" width="320" height="64" /></a>

Más MCP Servers

Alternativas a guniweb-sap-mcp