{"name":"io.github.guniweb/guniweb-sap-mcp","slug":"guniweb-sap-mcp","title":"GuniWeb SAP MCP","description":"SAP S/4HANA and ECC: OData V2/V4, IDoc and RFC/BAPI for n8n and other MCP clients","url":"https://mcp.market/server/guniweb-sap-mcp","rating":null,"grade":"B","score":82,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":39,"stars":3,"forks":0,"downloads_week":979,"last_push_at":"2026-10-15T21:20:17.000Z","license":"ISC"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/guniweb/guniweb-sap-mcp","website":"https://github.com/guniweb/guniweb-sap-mcp#readme","version":"0.10.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"guniweb-sap-mcp","version":"0.10.0","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Base URL of the SAP system, including any path segment in front of /sap/opu/odata (e.g. https://s4.example.com or https://gateway.example.com/prefix)","isRequired":true,"name":"SAP_BASE_URL"},{"description":"Authentication type: basic, oauth2, apikey, ias, xsuaa, btp-principal, saml-bearer","default":"basic","name":"SAP_AUTH_TYPE"},{"description":"SAP client (Mandant). Appended to every request — a client-dependent Gateway answers 401 without it","default":"100","name":"SAP_CLIENT"},{"description":"SAP user for basic authentication","name":"SAP_USERNAME"},{"description":"Password for basic authentication","isSecret":true,"name":"SAP_PASSWORD"},{"description":"Set to true to start a built-in mock S/4HANA instead of connecting to a real system. No SAP_* configuration needed — for trying the server out","default":"false","name":"SAP_MCP_DEMO"}]}],"tools":[{"name":"sap_bapi_call","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_bapi_commit","description":"Call BAPI_TRANSACTION_COMMIT on the SAME stateful connection used by a prior sap_bapi_call. Releases the session afterwards. When to use: - After one or more sap_bapi_call invocations that returned hasErrors=false When NOT to use: - If the prior sap_bapi_call returned hasErrors=true (commit would persist a faulty state \\u2014 implicit rollback by letting the session idle is safer) - For non-BAPI R","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_batch","description":"Execute multiple OData operations in a single batch request. Supports V2 (multipart/mixed) and V4 (JSON) batch formats automatically. Write operations sharing a changesetId run as one transaction (all succeed or all fail); in V2 a write without changesetId gets a changeset of its own. Returns per-operation status in the order of the operations -- individual failures are always reported, never hidd","write_action":true,"price_micros":0,"input_schema":null},{"name":"sap_create","description":"Create a new entity in SAP. Pass entity data as a JSON string in the data parameter. Use sap_get_metadata with entityType first to discover required fields.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sap_delete","description":"Delete an entity from SAP. Provide the entity key. ETag handling is automatic.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sap_discover_services","description":"Discover all available OData services on the connected SAP system. Returns categorized services with search, category filtering, and pagination. Use this as the first step to explore what APIs are available before using sap_list_services or sap_get_metadata. **When to use:** - You need to find which SAP services are available on this system - You want to search services by name, domain, or version","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_enable_tools","description":"Activate additional tool tiers for this session. Currently active: …. …","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_function","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_get_metadata","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_idoc_discover","description":"Discover available IDoc types and segment structures from SAP. Returns IDoc type definitions with segment hierarchy and field metadata.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_idoc_list_received","description":"List IDocs received via webhook. Returns recently received IDocs from the in-memory store.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_idoc_send","description":"Send an IDoc to SAP via HTTP/XML. Auto-constructs EDI_DC40 control record. Validates against segment metadata before sending -- blocks on validation failure.","write_action":true,"price_micros":0,"input_schema":null},{"name":"sap_idoc_status","description":"Query IDoc processing status in SAP. Returns status code with human-readable description (50=received, 53=processed, 51=error).","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_list_services","description":"Discover available entity sets in a specific SAP OData service. Requires a full OData service path \\u2014 NOT a base URL. Common SAP OData services: /sap/opu/odata/sap/API_BUSINESS_PARTNER, /sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV, /sap/opu/odata/sap/API_SALES_ORDER_SRV. Use test-connection first to verify SAP connectivity. **When to use:** - You need the raw list of OData services at a base U","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_media_download","description":"Holt die Rohbytes einer SAP-Media-Entity \\xFCber den $value-Pfad, z. B. den Inhalt eines Anhangs. Die Bytes kommen als resource/blob zur\\xFCck, nicht als base64-Zeichenkette im JSON; dazu Dateiname, Content-Type und Gr\\xF6\\xDFe als Text. **Wann nicht:** f\\xFCr die Metadaten eines Anhangs (Name, Gr\\xF6\\xDFe, Anleger) reicht sap_read auf dieselbe Entit\\xE4t.","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_media_upload","description":"L\\xE4dt eine Datei als Rohbytes in eine SAP-Media-Entity, z. B. einen Anhang in AttachmentContentSet (API_CV_ATTACHMENT_SRV). Der Dateiname geht als Slug-Kopfzeile hinaus, die Bytes in den Rumpf, die Antwort kommt als JSON. **Kopfzeilen:** objektbezogene Angaben wie BusinessObjectTypeName (Kundenauftrag: BUS2032), LinkedSAPObjectKey (zehnstellig mit f\\xFChrenden Nullen) und DocumentInfoRecordDocTy","write_action":true,"price_micros":0,"input_schema":null},{"name":"sap_nl_query","description":"Execute a structured OData query generated from natural language. Accepts structured filters (field/operator/value) and converts them to the correct OData V2 or V4 filter syntax automatically. Read-only: only performs queries, never creates, updates, or deletes data. **When to use:** - You have a natural language question about SAP data - You know the service URL and entity set (from sap://routing","write_action":true,"price_micros":0,"input_schema":null},{"name":"sap_query","description":"Query SAP entities with filter, sort, pagination. Returns matching entities with count. Per D-03: each query option is a separate typed parameter. **When to use:** - You have an exact OData $filter string ready - You know the service URL and entity set - You need fine-grained control over $select, $expand, $orderby, $top, $skip **When NOT to use:** - You have a natural language question (use sap_n","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_read","description":"Read a single entity or entity collection from SAP. Use key parameter for single entity, omit for collection. Supports $select and $expand. **When to use:** - You have a specific entity key and want one record - You need to read a single entity by its primary key **When NOT to use:** - You want to list/filter multiple entities (use sap_query) - You don't know the entity key (query first, then read","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_rfc_call","description":"Invoke any RFC-enabled function module on the SAP backend. When to use: - Custom Z_* function modules (no BAPI commit needed) - Read-only RFC calls (RFC_READ_TABLE, etc.) When NOT to use: - For BAPIs that need transactional commit -> use sap_bapi_call + sap_bapi_commit instead - sap_rfc_call is STATELESS: it CANNOT participate in BAPI commit transactions. If you need BAPI_TRANSACTION_COMMIT after ","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_rfc_metadata","description":"Retrieve the IMPORT/EXPORT/CHANGING/TABLES/EXCEPTIONS interface of an RFC-enabled function module (via RFC_GET_FUNCTION_INTERFACE). When to use: - Before calling an unfamiliar RFC/BAPI to understand its parameters - To discover required vs optional fields, ABAP types (EXID), and DDIC references When NOT to use: - To search for function modules by name pattern -> use sap_rfc_search_functions Return","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_rfc_search_functions","description":"Search for function modules by name pattern via RFC_FUNCTION_SEARCH. When to use: - Discover BAPIs/FMs by partial name (e.g. \"BAPI_USER_*\", \"Z_*\") When NOT to use: - To inspect the interface of a known function module -> use sap_rfc_metadata Wildcards (SAP-native, NOT glob): - `*` matches any sequence of characters - `+` matches a single character Patterns are case-folded to uppercase. Default lim","write_action":false,"price_micros":0,"input_schema":null},{"name":"sap_update","description":"Update an existing SAP entity. Provide the entity key and the fields to update as JSON strings. ETag handling is automatic.","write_action":true,"price_micros":0,"input_schema":null},{"name":"test-connection","description":"Diagnose the connection to the configured SAP system stage by stage: DNS \\u2192 TLS (including certificate chain) \\u2192 authentication \\u2192 client (Mandant) \\u2192 service catalog. Reports the FIRST failing stage with a concrete next step, so a 401 no longer leaves you guessing between certificate, user and client. **When to use:** - Any SAP tool fails and you need to know which layer is at fau","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":82,"grade":"B","scanned_at":"2026-10-15T21:47:57.421Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-15T21:47:57.498Z","components":{"code":{"score":25,"max":25,"notes":["3 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"guniweb-sap-mcp","version":"0.10.0","found":true,"license":"ISC","hasInstallScripts":false,"dependencyCount":10,"publishedAt":"2026-10-15T21:20:08.672Z","repositoryUrl":"git+https://github.com/guniweb/guniweb-sap-mcp.git","weeklyDownloads":979}],"repo":{"found":true,"owner":"guniweb","repo":"guniweb-sap-mcp","archived":false,"pushedAt":"2026-10-15T21:20:17Z","stars":3,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/317446355?v=4","ownerCreatedAt":"2026-08-16T00:51:27Z","license":"ISC"},"icon":{"url":null,"source":"none"},"presence":{"stars":3,"forks":0,"downloadsWeek":979,"license":"ISC","lastPushAt":"2026-10-15T21:20:17.000Z","score":39}}}},"grade_history":[],"reviews":[]}