mcp4odata
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp4odatalist the latest sales orders for customer 10100001"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp4odata
An MCP (Model Context Protocol) server that exposes SAP S/4HANA OData services as tools for LLMs. Deployed on SAP Cloud Foundry (BTP).
Overview
LLM / MCP Client
│ Bearer token (XSUAA)
▼
mcp4odata (CF app)
│ SAP Cloud SDK → BTP Destination Service
▼
SAP S/4HANA (CE_SALESORDER_0001, OData v4)Inbound auth: XSUAA Bearer token validation via
@sap/xssecOutbound connectivity: SAP Cloud SDK
executeHttpRequest()with BTP Destination ServiceTwo MCP transports: Streamable HTTP (MCP 2025-11-25) and SSE fallback (MCP 2024-11-05)
Tools
salesorder_get_list
Retrieves a list of S/4HANA sales order headers.
Parameter | Type | Required | Description |
| string | No | Filter by customer number, e.g. |
| string | No | Filter by sales org, e.g. |
| integer | No | Max results, 1–100 (default: 20) |
Returns: array of sales order headers — order number, type, sold-to party, total net amount, currency, requested delivery date.
salesorder_create
Creates a new S/4HANA sales order with one or more line items (deep-insert POST).
Header fields
Parameter | Type | Required | Description |
| string | Yes | Order type, e.g. |
| string | Yes | Sales org, e.g. |
| string | Yes | Distribution channel, e.g. |
| string | Yes | Division, e.g. |
| string | Yes | Customer number, e.g. |
| string | No | ISO currency, e.g. |
| string | No | Customer PO number |
| string | No | Delivery date, |
Item fields (at least one item required)
Parameter | Type | Required | Description |
| string | Yes | Product number, e.g. |
| string | Yes | Quantity as a string, e.g. |
| string | Yes | SAP unit of measure, e.g. |
| string | No | Delivering plant, e.g. |
| string | No | Item category, e.g. |
| string | No | Line item description (defaults to material description) |
Returns: created sales order header including the generated order number.
Endpoints
Endpoint | Auth | Description |
| Bearer (XSUAA) | Streamable HTTP transport — MCP 2025-11-25 |
| Bearer (XSUAA) | SSE transport — MCP 2024-11-05 |
| Bearer (XSUAA) | SSE message posting |
| None | Health check (used by CF) |
Local Development
Prerequisites
Node.js 20+
SAP BTP subaccount with XSUAA and Destination service instances
Setup
npm install
cp .env.example .env
# Fill in VCAP_SERVICES with your XSUAA and Destination credentials.env structure (see .env.example for the full template):
VCAP_SERVICES='{ "xsuaa": [...], "destination": [...] }'
S4_DESTINATION_NAME=S4HANA_SALESORDER
PORT=3000Run
npm run dev # tsx watch mode
npm run build # compile TypeScript → dist/Test with MCP Inspector
Point the inspector at http://localhost:3000/mcp with a valid XSUAA Bearer token.
BTP Destination Configuration
Create an HTTP destination in the BTP cockpit with:
Field | Value |
Name |
|
Type | HTTP |
URL | Your S/4HANA base URL |
Authentication | OAuth2ClientCredentials |
Token Service URL | XSUAA token endpoint for S/4HANA |
The SAP Cloud SDK reads the Destination service binding from VCAP_SERVICES, fetches the destination, and injects the Authorization header automatically.
Cloud Foundry Deployment
Prerequisites
brew install cloudfoundry/tap/cf-cli@8
cf login -a https://api.cf.<region>.hana.ondemand.com
cf target -o <org> -s <space>Create required service instances
cf create-service xsuaa application xsuaa-mcp4odata -c xsuaa-config.json
cf create-service destination lite destination-mcp4odataDeploy
npm run build
cf push
cf logs mcp4odata --recentUseful CF commands
cf env mcp4odata # inspect bound service credentials
cf set-env mcp4odata S4_DESTINATION_NAME # override env variable
cf restage mcp4odata # restage after env changesProject Structure
src/
├── server.ts # Express app, MCP transports, route setup
├── auth/
│ └── middleware.ts # XsuaaTokenVerifier — inbound Bearer token validation
├── odata/
│ └── client.ts # getSalesOrders(), createSalesOrder() via SAP Cloud SDK
└── tools/
├── get-sales-orders.ts # salesorder_get_list tool
└── create-sales-order.ts # salesorder_create tool
manifest.yml # CF deployment manifest
.env.example # Local dev environment templateTech Stack
Layer | Technology |
MCP Framework |
|
OData HTTP |
|
Destination resolution |
|
Inbound auth |
|
Web server | Express 5 |
Language | TypeScript (Node.js 20+) |
Deployment | SAP Cloud Foundry |
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/horsemanjackyliu/mcp4odata'
If you have feedback or need assistance with the MCP directory API, please join our Discord server