Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
SAP S/4HANA and ECC: OData V2/V4, IDoc and RFC/BAPI for n8n and other MCP clients
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
SAP_BASE_URL, SAP_AUTH_TYPE, SAP_CLIENT, SAP_USERNAME, SAP_PASSWORD, SAP_MCP_DEMO「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、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"
}
}
}
}ターミナルでこれを実行します
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-mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
SAP_AUTH_TYPE envSAP_CLIENT envSAP_USERNAME envSAP_MCP_DEMO envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント guniweb で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:SAP_BASE_URL, SAP_PASSWORD
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.10.0)がレジストリに届いたのは22 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, LexPact UK Contracts
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
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.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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
冒頭だけを表示しています。続きはリポジトリで読めます