Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
SAP S/4HANA and ECC: OData V2/V4, IDoc and RFC/BAPI for n8n and other MCP clients
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
SAP_BASE_URL, SAP_AUTH_TYPE, SAP_CLIENT, SAP_USERNAME, SAP_PASSWORD, SAP_MCP_DEMOLos valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"guniweb-sap": {
"command": "npx",
"args": [
"-y",
"guniweb-sap-mcp"
],
"env": {
"SAP_BASE_URL": "your-value",
"SAP_AUTH_TYPE": "your-value",
"SAP_CLIENT": "your-value",
"SAP_USERNAME": "your-value",
"SAP_PASSWORD": "your-value",
"SAP_MCP_DEMO": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add guniweb-sap --env SAP_BASE_URL=your-value --env SAP_AUTH_TYPE=your-value --env SAP_CLIENT=your-value --env SAP_USERNAME=your-value --env SAP_PASSWORD=your-value --env SAP_MCP_DEMO=your-value -- npx -y guniweb-sap-mcpCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"guniweb-sap": {
"command": "npx",
"args": [
"-y",
"guniweb-sap-mcp"
],
"env": {
"SAP_BASE_URL": "your-value",
"SAP_AUTH_TYPE": "your-value",
"SAP_CLIENT": "your-value",
"SAP_USERNAME": "your-value",
"SAP_PASSWORD": "your-value",
"SAP_MCP_DEMO": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"guniweb-sap": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"guniweb-sap-mcp"
],
"env": {
"SAP_BASE_URL": "your-value",
"SAP_AUTH_TYPE": "your-value",
"SAP_CLIENT": "your-value",
"SAP_USERNAME": "your-value",
"SAP_PASSWORD": "your-value",
"SAP_MCP_DEMO": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
SAP_AUTH_TYPE envSAP_CLIENT envSAP_USERNAME envSAP_MCP_DEMO envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub guniweb, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: SAP_BASE_URL, SAP_PASSWORD
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.10.0) llegó al registro hace 22 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Node.js en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, LexPact UK Contracts
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Generate UK-law contracts: NDA, service, freelance, recruiter terms of business, IR35.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Designed for n8n, usable from any MCP host. Free to use — built and maintained by GuniWeb.
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.
graph LR
n8n["n8n workflow AI-assisted, human-governed"] -->|MCP Protocol| MCP["guniweb-sap-mcp 22 Tools • 8 Auth Types"] MCP -->|"OData V2/V4 IDoc XML 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
$batch request--allow-writereadOnly and tool-tier ceilings per Bearer token, only ever more restrictivegraph TB
subgraph Technical["Technical User Auth"] basic["basic Direct S/4HANA "] userbasic["user-basic Personal SAP login per request "] oauth2["oauth2 BTP Client Credentials "] apikey["apikey Sandbox / Testing "] end subgraph Enterprise["Enterprise Auth (OIDC)"] ias["ias SAP IAS Token "] xsuaa["xsuaa SAP XSUAA Token "] end subgraph Principal["Principal Propagation End-user identity forwarded to SAP "] btp["btp-principal JWT Bearer Exchange via Destination Service "] saml["saml-bearer SAML 2.0 Assertion
style Technical fill:#2a5f8f,color:#fff,stroke:#1a4f7f style Enterprise fill:#5b8c5a,color:#fff,stroke:#4b7c4a style Principal fill:#8b5e3c,color:#fff,stroke:#7b4e2c
--demoNo SAP system at hand? Start the server against a built-in mock S/4HANA and try every tool from n8n or any MCP client:
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.
npm install -g guniweb-sap-mcp
Or run it as a container: docker run --rm -p 8808:8808 -e SAP_MCP_DEMO=true ghcr.io/guniweb/guniweb-sap-mcp:latest
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
# stdio (default) -- for n8n MCP Client in command mode
guniweb-sap-mcp
guniweb-sap-mcp --transport http --port 8808
guniweb-sap-mcp --transport http --port 8808 --tiers core,odata guniweb-sap-mcp --transport http --port 8808 --allow-write # writes are OFF by default
guniweb-sap-mcp --transport http --port 8808 --api-key --webhook-secret
# 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
docker run -d --name sap-mcp -p 8808:8808 --env-file .env \ ghcr.io/guniweb/guniweb-sap-mcp:
docker run -d -p 8808:8808 --env-file .env \ ghcr.io/guniweb/guniweb-sap-mcp: --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).
A docker-compose.yml that puts n8n next to the server is in the repository.
| 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 over a thousand 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 tokens are only decoded, and the resulting identity is marked verified: false — safe to forward to SAP (SAP verifies itself), but not safe to base a local decision on. With it, a token failing verification is rejected with 401 rather than silently downgraded to the technical user |
SAP_WEBHOOK_SECRET / --webhook-secret | _(unset = open + startup warning)_ | Shared secret for the inbound IDoc webhook. Accepts Authorization: Bearer or HTTP Basic auth whose password equals the secret (matches SAP SM59 HTTP destinations) |
SAP_WEBHOOK_HOST / --webhook-host | all interfaces | Bind address of the standalone IDoc webhook (stdio mode). Set 127.0.0.1 behind a reverse proxy |
SAP_WEBHOOK_MAX_BODY_BYTES | 10485760 (10 MB) | Reject larger IDoc payloads with 413 before they are buffered in memory |
In HTTP transport mode the /idoc route is mounted on the MCP port: with --webhook-secret it authenticates independently of --api-key (so SAP's Basic auth works while n8n uses the Bearer key); without it, it falls under --api-key if set — and is open if neither is configured (the server logs a warning at startup).
Both timeouts must stay below the smallest client limit in your setup. Typical limits: a reverse proxy such as Cloudflare aborts at 100 s (524), n8n's MCP client transport at 300 s. A budget above the smallest limit never takes effect, because the client gives up first.
Every tool call logs one line on completion, carrying a correlation id that also appears on each SAP request it triggered:
{"correlationId":"a3f19c8b2d04","tool":"sap_discover_services","outcome":"ok","durationMs":842,"sapCalls":1,"resultBytes":18422}
grep a3f19c8b2d04 then shows the full story of that one call — including how many SAP requests it produced. outcome is one of ok, error, timeout (budget expired) or `aborte
Solo se muestra el principio; lee el resto en el repo