IBP MCP Server
Provides read-only access to SAP IBP master data and key figures through SAP IBP's standard OData APIs. Supports listing and describing planning areas or master data types, reading key figure values at a chosen planning level with time ranges, filters, and paging, and reading master data records with filters and paging.
Click on "Deploy 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., "@IBP MCP ServerShow consensus demand vs statistical forecast for coffee at Auckland DC for Q1 2026."
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.
IBP MCP Server (read-only) for SAP BTP
An MCP server that lets Claude (or any MCP client) read SAP IBP master data and key figures through IBP's standard OData APIs. It runs on SAP BTP Cloud Foundry, reaches IBP through a BTP Destination, and is protected by XSUAA.
It never writes to IBP: the only HTTP method it sends is GET, and every tool is marked read-only.
What Claude gets
Tool | Purpose |
| Planning areas or master data types that IBP exposes and this server allows |
| Fields of a planning area / master data type (attributes, key figures, |
| Key figure values at a chosen planning level, with time range, filters and paging |
| Master data records with filters and paging |
Example prompt once connected: "Compare consensus demand vs statistical forecast for coffee products at the Auckland DC for Q1 2026."
Related MCP server: OData to MCP
Architecture
Claude ──HTTPS + Bearer JWT──▶ ibp-mcp-server (CF app)
│ XSUAA: validates token, requires $XSAPPNAME.Read
│ Allow-lists, input validation, row & size caps
▼
BTP Destination "IBP" (Basic auth, communication user)
▼
IBP /IBP/PLANNING_DATA_API_SRV (key figures)
/IBP/MASTER_DATA_API_SRV (master data) ← SAP_COM_0720Why these services: SAP positions PLANNING_DATA_API_SRV and MASTER_DATA_API_SRV (scenario SAP_COM_0720) for external systems; EXTRACT_ODATA_SRV is aimed at SAP Analytics Cloud. Service paths are configurable if your landscape differs.
Security model (why it is safe to put in front of a client tenant)
Read-only by construction: GET only; the IBP communication user should also hold read-only authorisation.
Two allow-lists, fail closed: IBP's Global Configuration decides what the API exposes; this server's
ALLOWED_PLANNING_AREAS/ALLOWED_MASTER_DATA_TYPESnarrow it further. Empty list = nothing allowed.No raw OData from the model: filters are structured (
field,op,value); field names must match^[A-Za-z_][A-Za-z0-9_]{0,59}$, string values are quote-escaped, control characters rejected. Injection attempts are covered by tests.Bounded results:
MAX_ROWS(default 1000, hard max 5000) andMAX_RESPONSE_CHARScap every response; paging vianextSkip.Auth required: in
xsuaamode the app refuses to start without an XSUAA binding;AUTH_MODE=noneis rejected whenNODE_ENV=production.No credential leakage: IBP credentials live only in the BTP Destination; error messages return IBP's message text, never raw responses or headers.
Rate limiting per client IP (
RATE_LIMIT_PER_MINUTE).
Get written IT/security sign-off from the client before connecting to a production tenant, and agree which planning areas and master data types may be exposed. Planning data is commercially sensitive.
1. Try it locally in 2 minutes (no IBP needed)
Requires Node.js 22+.
npm ci
npm test # 10 unit tests
npm run smoke # mock IBP + real MCP client, calls every toolRun the demo stack for Claude Code / Claude Desktop:
npm run build
npm run mock:ibp & # fictional NZ data on :4004, user demo / demo
AUTH_MODE=none \
ALLOWED_PLANNING_AREAS=SAPIBP1 \
ALLOWED_MASTER_DATA_TYPES=SAP1PRODUCT,SAP1LOCATION \
destinations='[{"name":"IBP","url":"http://localhost:4004","authentication":"BasicAuthentication","username":"demo","password":"demo"}]' \
npm start
claude mcp add --transport http ibp-demo http://localhost:8080/mcpThis is the safe portfolio demo: realistic IBP shapes, zero client data.
2. IBP setup (client tenant)
Maintain Communication Users → create a user, generate a strong password.
Communication Systems → new system, tick Inbound Only, assign the user.
Communication Arrangements → new arrangement for SAP_COM_0720, select the system. Note the service URLs shown.
Global Configuration → expose only what is needed:
FLEXQUERY/PLANNINGAREA→ e.g.SAPIBP1FLEXQUERY/RELEVANT_MDT_FOR_MD_API→ the master data types (avoid*on client systems)
Ensure the business user behind the arrangement has read access to those planning areas.
3. BTP setup (Cloud Foundry)
cf login -a https://api.cf.<region>.hana.ondemand.com
cf create-service xsuaa application ibp-mcp-xsuaa -c xs-security.json
cf create-service destination lite ibp-mcp-destinationIn the BTP cockpit → Connectivity → Destinations → New Destination:
Field | Value |
Name |
|
Type | HTTP |
URL | your IBP API host, e.g. |
Proxy Type | Internet |
Authentication | BasicAuthentication |
User / Password | communication user from step 2 |
Edit manifest.yml → set ALLOWED_PLANNING_AREAS and ALLOWED_MASTER_DATA_TYPES. Then:
npm ci && npm run build # dist/ is pushed; CF installs production deps only
cf pushAssign the IBP_MCP_Reader role collection to users who should use it (for user-based tokens).
4. Connect Claude
Get a token (client credentials, valid 1 hour):
TOKEN=$(./scripts/get-token.sh)Claude Code
claude mcp add --transport http ibp https://<app-route>/mcp --header "Authorization: Bearer $TOKEN"Claude Desktop (claude_desktop_config.json, uses the mcp-remote bridge):
{
"mcpServers": {
"ibp": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://<app-route>/mcp", "--header", "Authorization: Bearer ${IBP_TOKEN}"],
"env": { "IBP_TOKEN": "<paste token>" }
}
}
}Tokens expire after token-validity (3600 s in xs-security.json). Refresh with the script; raise the validity only if the client's security policy allows it.
Configuration
Variable | Default | Notes |
|
| BTP Destination name |
|
| |
|
| |
| (empty = none) | comma-separated, |
| (empty = none) | comma-separated, |
|
| 1–5000 |
|
| keeps tool output within model context |
|
| |
|
|
|
|
| local scope checked on every call |
|
| per client IP |
Troubleshooting
Symptom | Likely cause / fix |
| Wrong communication user/password in the Destination |
| Arrangement inactive, or planning area / MDT missing from Global Configuration |
| Name not exposed by the API; run |
| Add it to |
App crashes: |
|
| Token missing/expired; rerun |
Timeouts | Narrow |
Known limits / next steps
Your tenant's exact field names (e.g. which
PERIODID*_TSTAMPmatches the planning level) vary by configuration; the model discovers them withibp_describe_entity. Verify the first queries against a planning view in Excel.Version/scenario: add a filter on the version attribute (e.g.
VERSIONID) if you need a non-baseline version.claude.ai custom connectors need OAuth with discovery; XSUAA does not offer dynamic client registration. Supporting that is a v2 item (OAuth protected-resource metadata + pre-registered client). Claude Code and Claude Desktop work today via bearer token.
npm auditreports anode-forgeadvisory inside SAP Cloud SDK's JKS keystore support. This server uses Basic-auth destinations, so that code path is not used; upgrade@sap-cloud-sdk/*when SAP ships a fix.Delta reads and write-back are deliberately out of scope.
Disclaimer
Independent open-source project, not affiliated with or endorsed by SAP. SAP, SAP IBP and SAP BTP are trademarks of SAP SE. Demo data is fictional. Provided as-is under the MIT licence; you are responsible for security review before connecting to any IBP tenant.
Author
Rakesh Binny Dasari, SAP IBP delivery lead, Auckland. LinkedIn
This server cannot be deployed
Maintenance
Related MCP Connectors
Read-only finance and operations controls for AI agents with evidence and safe next actions.
Claude, connected to your own Oracle EPM. Each person as themselves, every call checked and logged.
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants like Claude Code to directly connect to SAP ABAP systems via the ADT REST API with read/write capabilities, featuring AI-friendly high-level tools and built-in safety measures such as read-only mode, prefix whitelisting, and automatic locking.90MIT
- AlicenseNot gradedqualityCmaintenanceTurns any OData V2 or V4 service, SAP Gateway included, into MCP tools that AI clients such as Claude, ChatGPT, Copilot, and Cursor can call without code by reading $metadata. It lets models discover entity sets and fields, then query services through built-in read-only tools.AGPL 3.0
- AlicenseAqualityCmaintenanceProvides read-only access to manufacturing plant data from Excel or SAP S/4HANA, enabling natural-language queries for OEE, downtime Pareto, late work orders, scrap, and inventory alerts. It enforces data classification, masking, row limits, and audit logging for safe Claude/MCP client access.10MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to read SAP ECC and S/4HANA data through OData and RFC/BAPI calls, with writes gated behind a human confirmation step and every call written to an audit log. No proprietary SAP NetWeaver RFC SDK is required.1MIT