odata-mcp-proxy
Provides tools for querying, managing, and monitoring SAP backends via OData APIs, including full CRUD operations, filtering, and navigation property traversal for SAP Cloud Integration and other SAP systems.
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., "@odata-mcp-proxyList all integration flows"
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.
OData MCP Proxy
A config-driven MCP (Model Context Protocol) server that exposes OData and REST APIs as MCP tools. This enables AI assistants such as Claude to query, manage, and monitor SAP backends through natural language.
The server runs on SAP BTP Cloud Foundry and uses BTP Destinations for secure, token-managed connectivity to OData APIs.
Features
32 OData entity sets across 6 API categories, automatically registered as MCP tools
Full CRUD support -- list, get, create, update, and delete operations where the API permits
OData V2 query capabilities --
$filter,$select,$expand,$orderby,$top,$skip, and$inlinecountNavigation property traversal -- dedicated tools for related entities (e.g., iFlow configurations, message attachments, error details)
Category-based filtering -- enable only the API categories you need via configuration
Dual transport modes -- Streamable HTTP for BTP deployment, stdio for local Claude Desktop use
Automatic OAuth token management -- tokens are refreshed transparently via the BTP Destination Service
Related MCP server: SAP ADT MCP Server
Architecture
Claude / AI Assistant
|
| MCP Protocol (stdio or HTTP)
v
OData MCP Proxy
|
| OData V2 + JSON
v
OData Client
|
| OAuth2 (via BTP Destination Service)
v
BTP Destination
|
v
SAP Cloud Integration
OData Admin APIsThe server resolves a BTP Destination at startup to obtain the Cloud Integration tenant URL and OAuth2 credentials. On each API call, the destination is re-resolved to ensure tokens remain valid. The OData client translates MCP tool invocations into OData V2 HTTP requests and returns structured JSON results to the AI assistant.
Prerequisites
Node.js 20+ (18+ minimum, 20+ recommended)
SAP BTP account with a Cloud Foundry environment
SAP Integration Suite tenant (Cloud Integration capability)
BTP Destination configured to point to your Cloud Integration tenant's OData API with OAuth2 authentication
Cloud Foundry CLI (
cf) and MBT Build Tool (mbt) for BTP deployment
Quick Start (Local Development)
1. Clone and install
git clone <repository-url>
cd odata-mcp-proxy
npm install2. Configure environment
cp .env.example .envEdit .env and set at minimum:
SAP_DESTINATION_NAME=your_ci_destination_name
MCP_TRANSPORT=stdioNote: For local development with stdio transport, you must have BTP Destination Service credentials available in your environment (e.g., via
VCAP_SERVICESor adefault-env.jsonfile).
3. Build and run
npm run build
npm run start:stdioOr use the development watcher:
npm run dev4. Connect from Claude Desktop
Add the server to your Claude Desktop MCP configuration (claude_desktop_config.json):
{
"mcpServers": {
"odata-mcp-proxy": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/odata-mcp-proxy",
"env": {
"SAP_DESTINATION_NAME": "your_ci_destination_name",
"MCP_TRANSPORT": "stdio"
}
}
}
}Using as an npm Package
You can consume odata-mcp-proxy as a dependency in your own project -- similar to how the SAP Application Router works. No TypeScript compilation or build step required.
1. Create your project
mkdir my-mcp-server
cd my-mcp-server
npm init -y
npm install odata-mcp-proxy2. Add a start script
In your package.json:
{
"scripts": {
"start": "odata-mcp-proxy"
},
"dependencies": {
"odata-mcp-proxy": "^1.0.0"
}
}3. Add your API config
Create an api-config.json in your project root. The CLI automatically picks it up from the working directory. See the bundled config files for the full format.
{
"server": {
"name": "my-mcp-server",
"version": "1.0.0",
"description": "My custom MCP server"
},
"apis": [
{
"name": "my-api",
"destination": "MY_DESTINATION",
"pathPrefix": "/api/v1",
"csrfProtected": true,
"entitySets": [
{
"entitySet": "Products",
"description": "product entities",
"category": "master-data",
"keys": [{ "name": "Id", "type": "string" }],
"operations": { "list": true, "get": true, "create": false, "update": false, "delete": false }
}
]
}
]
}You can also use a custom filename with the --config flag:
odata-mcp-proxy --config my-custom-config.jsonOr set it via environment variable:
API_CONFIG_FILE=my-custom-config.json npm startIf no config file is found in the working directory, the bundled defaults (SAP Cloud Integration APIs) are used.
4. Configure credentials
For local development, create a .env file or default-env.json with your destination credentials. The env var prefix is derived from the destination field in your config -- uppercase it and replace non-alphanumeric characters with _.
For example, destination "MY_DESTINATION" maps to:
MY_DESTINATION_BASE_URL=https://my-api.example.com
MY_DESTINATION_TOKEN_URL=https://auth.example.com/oauth/token
MY_DESTINATION_CLIENT_ID=...
MY_DESTINATION_CLIENT_SECRET=...On BTP, use the Destination Service instead (credentials are resolved automatically via VCAP_SERVICES).
5. Project structure
A complete consumer project looks like this:
my-mcp-server/
├── package.json # start script + dependency
├── api-config.json # your API configuration
├── default-env.json # local BTP credentials (gitignored)
├── .env # local env overrides (gitignored)
├── mta.yaml # BTP deployment descriptor
└── xs-security.json # XSUAA config (if using OAuth)Deploying to BTP as a consumer project
Since there is no build step, the mta.yaml is straightforward -- just like the SAP Application Router:
_schema-version: "3.1"
ID: my-mcp-server
version: 1.0.0
parameters:
enable-parallel-deployments: true
modules:
- name: my-mcp-server
type: nodejs
path: .
parameters:
memory: 512M
disk-quota: 1G
buildpack: nodejs_buildpack
health-check-type: http
health-check-http-endpoint: /health
command: npm start
build-parameters:
builder: npm
ignore:
- .git/
- .env
- default-env.json
requires:
- name: my-destination
- name: my-connectivity
- name: my-xsuaa
resources:
- name: my-destination
type: org.cloudfoundry.managed-service
parameters:
service: destination
service-plan: lite
- name: my-connectivity
type: org.cloudfoundry.managed-service
parameters:
service: connectivity
service-plan: lite
- name: my-xsuaa
type: org.cloudfoundry.managed-service
parameters:
service: xsuaa
service-plan: application
path: xs-security.jsonThe key difference from a standalone deployment: builder: npm is all you need. MBT runs npm install --production, which installs the pre-built odata-mcp-proxy package from the registry. No TypeScript, no custom build commands.
Deploy with:
mbt build && cf deploy mta_archives/my-mcp-server_1.0.0.mtarBTP Deployment (Standalone)
When working with the source repository directly (not as an npm dependency), the project includes its own mta.yaml for deployment to SAP BTP Cloud Foundry. The MTA provisions the required service instances (Destination, Connectivity, XSUAA) and deploys the server as a Node.js application using HTTP transport.
npm run build:btp # Build the MTA archive
npm run deploy:btp # Deploy to Cloud FoundryFor detailed deployment instructions, destination configuration, and XSUAA setup, see docs/DEPLOYMENT.md.
Configuration
All configuration is managed through environment variables. The server validates configuration at startup using Zod and fails fast on invalid values.
Variable | Required | Default | Description |
| Yes | -- | BTP Destination name pointing to your Cloud Integration tenant |
| No |
| Transport mode: |
| No |
| HTTP server port (only used when |
| No |
| Logging level: |
| No |
| HTTP request timeout in milliseconds |
| No |
| Comma-separated list of API categories to enable (see below) |
API Categories
Use ENABLED_API_CATEGORIES to restrict which tool groups are registered:
Category | Description |
| Integration packages, iFlows, value/message mappings, script collections, custom tags, deploy status |
| Message processing logs, ID mappings, idempotent repository |
| Data stores, variables, number ranges, message stores, JMS brokers and queues |
| System log files and log file archives |
| Keystores, certificates, SSH keys, credentials, OAuth2 clients, secure parameters, access policies |
| Partners, string/binary parameters, alternative partners, authorized users |
Set to all (the default) to enable every category.
Available Tools
Tools are dynamically generated from entity set definitions. Each entity set produces up to five tools (_list, _get, _create, _update, _delete) plus navigation property tools, depending on what the OData API supports.
Integration Content
Tool | Operations |
| list, get, create, update, delete |
| list, get, create, update, delete + Resources, Configurations |
| list, get |
| list, get, create, update, delete + ValMapSchema |
| list, get, create, update, delete |
| list, get, create, update, delete |
| list, get, create, update, delete |
| list, get |
Message Processing Logs
Tool | Operations |
| list, get + Attachments, ErrorInformations, AdapterAttributes, CustomHeaderProperties, MessageStoreEntries |
| list |
| list |
Message Stores
Tool | Operations |
| list, get, delete |
| list, get |
| list, get |
| list, get |
| list, get |
| list |
Log Files
Tool | Operations |
| list, get |
| list, get |
Security Content
Tool | Operations |
| list, get, delete |
| list, get |
| list, get |
| list, get, create, update, delete |
| list, get, create, update, delete |
| list, get, create, update, delete |
| list, get, create, update, delete |
| list, get, create, update, delete + ArtifactReferences |
Partner Directory
Tool | Operations |
| list, get, create, update, delete |
| list, get, create, update, delete |
| list, get, create, update, delete |
| list, get, create, update, delete |
| list, get, create, update, delete |
Tool Naming Convention
Tools follow the pattern {EntitySet}_{operation}:
IntegrationPackages_list
IntegrationPackages_get
IntegrationPackages_create
IntegrationDesigntimeArtifacts_Configurations_list
MessageProcessingLogs_ErrorInformations_listOData Query Parameters
All _list tools accept standard OData V2 query options:
$filter-- e.g.,"Status eq 'FAILED'"$select-- e.g.,"Id,Name,Status"$expand-- e.g.,"Configurations"$orderby-- e.g.,"Name asc"$top-- e.g.,10$skip-- e.g.,20
Transport Modes
HTTP (Streamable HTTP)
Used for BTP Cloud Foundry deployment. The server exposes an /mcp endpoint supporting the MCP Streamable HTTP transport with session management, plus a /health endpoint for CF health checks.
MCP_TRANSPORT=http PORT=4004 npm startstdio
Used for local development and direct integration with Claude Desktop. Communication happens over standard input/output streams.
MCP_TRANSPORT=stdio npm startTech Stack
Runtime: Node.js 20+ with ES Modules
Language: TypeScript 5.7+
MCP SDK:
@modelcontextprotocol/sdk1.17+SAP Cloud SDK:
@sap-cloud-sdk/connectivityand@sap-cloud-sdk/http-client4.x for destination resolution and HTTP callsValidation: Zod for configuration and input validation
HTTP Framework: Express 4.x (HTTP transport only)
Logging: Winston
License
MIT
This server cannot be installed
Maintenance
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
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/lemaiwo/odata-mcp-proxy'
If you have feedback or need assistance with the MCP directory API, please join our Discord server