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
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม 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": "ใส่ค่าของคุณ",
"SAP_AUTH_TYPE": "ใส่ค่าของคุณ",
"SAP_CLIENT": "ใส่ค่าของคุณ",
"SAP_USERNAME": "ใส่ค่าของคุณ",
"SAP_PASSWORD": "ใส่ค่าของคุณ",
"SAP_MCP_DEMO": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add guniweb-sap --env SAP_BASE_URL='ใส่ค่าของคุณ' --env SAP_AUTH_TYPE='ใส่ค่าของคุณ' --env SAP_CLIENT='ใส่ค่าของคุณ' --env SAP_USERNAME='ใส่ค่าของคุณ' --env SAP_PASSWORD='ใส่ค่าของคุณ' --env SAP_MCP_DEMO='ใส่ค่าของคุณ' -- 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": "ใส่ค่าของคุณ",
"SAP_AUTH_TYPE": "ใส่ค่าของคุณ",
"SAP_CLIENT": "ใส่ค่าของคุณ",
"SAP_USERNAME": "ใส่ค่าของคุณ",
"SAP_PASSWORD": "ใส่ค่าของคุณ",
"SAP_MCP_DEMO": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"guniweb-sap": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"guniweb-sap-mcp"
],
"env": {
"SAP_BASE_URL": "ใส่ค่าของคุณ",
"SAP_AUTH_TYPE": "ใส่ค่าของคุณ",
"SAP_CLIENT": "ใส่ค่าของคุณ",
"SAP_USERNAME": "ใส่ค่าของคุณ",
"SAP_PASSWORD": "ใส่ค่าของคุณ",
"SAP_MCP_DEMO": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
SAP_AUTH_TYPE envSAP_CLIENT envSAP_USERNAME envSAP_MCP_DEMO envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub guniweb ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: SAP_BASE_URL, SAP_PASSWORD
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.10.0) เข้า registry 22 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Claude Checkpoint MCP
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
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.
MCP server that checkpoints Claude Code session context to survive crashes and token limits
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ 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
ตัดมาแค่ช่วงต้น อ่านต่อใน repo