GutjahrAI/sap-odata-mcp-server
If you are the rightful owner of sap-odata-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
A Model Context Protocol (MCP) server designed to integrate SAP systems with AI assistants using OData REST APIs.
sap_connect
Connect to SAP OData service.
sap_get_services
Get list of available OData services with intelligent discovery.
sap_get_service_metadata
Get metadata for a specific OData service.
sap_query_entity_set
Query an OData entity set with filtering, sorting, and pagination.
sap_get_entity
Get a specific entity by its key values.
sap_create_entity
Create a new entity in an entity set.
sap_update_entity
Update an existing entity.
sap_delete_entity
Delete an entity.
sap_call_function
Call an OData function import.
sap_connection_status
Check current SAP OData connection status.
sap_disconnect
Disconnect from SAP OData service.
SAP OData MCP Server
A Model Context Protocol (MCP) server for integrating SAP systems with AI assistants like Claude using OData REST APIs. This server provides tools for connecting to SAP OData services, querying entity sets, executing CRUD operations, and calling OData functions.
Features
- SAP OData Connectivity: Connect to SAP systems via OData REST APIs
- Smart Connection Handling: Properly handles SAP OData URL structures and 404 responses
- Service Discovery: Automatically discover available OData services via catalog or common service testing
- Entity Set Queries: Query any OData entity set with filtering, sorting, and pagination
- CRUD Operations: Create, Read, Update, and Delete operations on OData entities
- Function Imports: Execute OData function imports and custom functions
- CSRF Token Handling: Automatic CSRF token management for secure operations
- Modular Architecture: Clean, maintainable TypeScript codebase with separation of concerns
Prerequisites
- Node.js 18+
- SAP system with OData services enabled
- Network access to SAP OData endpoints
- SAP user credentials with appropriate authorizations
ā ļø Advantage: No SAP RFC SDK installation required! Uses standard HTTP/REST APIs.
Installation
Quick Setup
- Create the project:
mkdir sap-odata-mcp-server
cd sap-odata-mcp-server
mkdir src
-
Copy the source files from the artifacts to your
src/
directory:src/index.ts
- Entry pointsrc/server.ts
- MCP server setupsrc/handlers.ts
- Request handlerssrc/odata-client.ts
- SAP OData clientsrc/tool-definitions.ts
- Tool definitionssrc/types.ts
- TypeScript types
-
Copy configuration files:
package.json
- Dependencies and scriptstsconfig.json
- TypeScript configuration.env.example
- Environment variables template
-
Install dependencies:
npm install
- Configure environment:
cp .env.example .env
# Edit .env with your SAP details
- Build the project:
npm run build
Configuration
Environment Variables
Create a .env
file with your SAP system details:
# Required SAP OData Configuration
SAP_ODATA_BASE_URL=https://your-sap-host:8000/sap/opu/odata/sap/
SAP_USERNAME=your-sap-username
SAP_PASSWORD=your-sap-password
# Optional Configuration
SAP_CLIENT=100
SAP_TIMEOUT=30000
SAP_VALIDATE_SSL=false # for development with self-signed certificates
SAP_ENABLE_CSRF=true
Claude Desktop Integration
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"sap-odata": {
"command": "node",
"args": ["/full/path/to/your/sap-odata-mcp-server/dist/index.js"],
"env": {
"SAP_ODATA_BASE_URL": "https://your-sap-host:8000/sap/opu/odata/sap/",
"SAP_USERNAME": "your-username",
"SAP_PASSWORD": "your-password",
"SAP_CLIENT": "100",
"SAP_VALIDATE_SSL": "false"
}
}
}
}
Available Tools
1. sap_connect
Connect to SAP OData service.
Parameters:
baseUrl
(required): SAP OData service base URLusername
(required): SAP usernamepassword
(required): SAP passwordclient
(optional): SAP client numbertimeout
(optional): Request timeout in milliseconds (default: 30000)validateSSL
(optional): Validate SSL certificates (default: true)enableCSRF
(optional): Enable CSRF token handling (default: true)
2. sap_get_services
Get list of available OData services with intelligent discovery.
3. sap_get_service_metadata
Get metadata for a specific OData service.
Parameters:
serviceName
(required): Name of the OData service
4. sap_query_entity_set
Query an OData entity set with filtering, sorting, and pagination.
Parameters:
serviceName
(required): Name of the OData serviceentitySet
(required): Name of the entity setselect
(optional): Array of fields to selectfilter
(optional): OData filter expressionorderby
(optional): OData orderby expressiontop
(optional): Number of records to returnskip
(optional): Number of records to skipexpand
(optional): Navigation properties to expand
5. sap_get_entity
Get a specific entity by its key values.
Parameters:
serviceName
(required): Name of the OData serviceentitySet
(required): Name of the entity setkeyValues
(required): Object with key-value pairs for entity keys
6. sap_create_entity
Create a new entity in an entity set.
7. sap_update_entity
Update an existing entity.
8. sap_delete_entity
Delete an entity.
9. sap_call_function
Call an OData function import.
10. sap_connection_status
Check current SAP OData connection status.
11. sap_disconnect
Disconnect from SAP OData service.
Usage Examples
Getting Started with Claude
Once configured, you can interact with SAP using natural language in Claude:
Connect to SAP:
Connect to SAP OData service at https://sap-host:8000/sap/opu/odata/sap/ using username DEVELOPER and password mypassword
Discover Available Services:
Get list of available OData services
Get Service Information:
Get metadata for service GWSAMPLE_BASIC
Query Data:
Query BusinessPartnerSet from GWSAMPLE_BASIC, select BusinessPartnerID and CompanyName, top 10
Advanced Filtering:
Query SalesOrderSet from ZSD_SALES_SRV, filter by CreationDate ge datetime'2024-01-01T00:00:00', order by CreationDate desc, top 20
Get Specific Records:
Get entity from MaterialSet in ZMM_MATERIAL_SRV with key Material = '000000000000000001'
Create New Records:
Create entity in CustomerSet with data: {"CustomerNumber": "1000", "CustomerName": "Test Customer", "Country": "US"}
OData Query Examples
Filtering:
$filter=MaterialType eq 'FERT' and CreationDate ge datetime'2024-01-01T00:00:00'
Selecting Fields:
$select=Material,MaterialDescription,MaterialType,BaseUnit
Sorting:
$orderby=CreationDate desc,Material asc
Pagination:
$top=50&$skip=100
Expanding Navigation Properties:
$expand=MaterialPlantData,MaterialSalesData
SAP System Requirements
Required SAP Components
- SAP NetWeaver 7.0 or higher
- SAP Gateway component activated
- OData services enabled and configured
Required SAP Authorizations
The SAP user needs these authorization objects:
- S_SERVICE: Service authorization for OData endpoints
- S_ICF: Internet Communication Framework authorization
- S_TCODE: Transaction authorization for BAPIs (if using function imports)
Activating OData Services
- Transaction SICF: Activate ICF services at
/sap/opu/odata
- Transaction /IWFND/MAINT_SERVICE: Manage and activate OData services
- Transaction /IWFND/GW_CLIENT: Test OData service calls
Architecture
Modular Design
src/
āāā index.ts # Entry point - starts the server
āāā server.ts # MCP server setup and request routing
āāā handlers.ts # Business logic for each tool
āāā odata-client.ts # SAP OData HTTP client
āāā tool-definitions.ts # MCP tool schemas
āāā types.ts # TypeScript type definitions
Key Features
- Smart Connection Testing: Handles SAP's URL structure where base URLs return 404
- Service Discovery: Multiple methods to find available OData services
- Error Handling: Comprehensive error handling with helpful messages
- Type Safety: Full TypeScript support with proper interfaces
- CSRF Protection: Automatic CSRF token management for write operations
Troubleshooting
Common Issues
Connection Refused (Network Error)
- Verify SAP system is running and accessible
- Check hostname/port in SAP_ODATA_BASE_URL
- Verify firewall settings allow HTTP/HTTPS traffic
401 Unauthorized
- Check SAP_USERNAME and SAP_PASSWORD
- Verify user account is not locked
- Ensure user has S_SERVICE authorization
403 Forbidden
- Check user has required SAP authorizations
- Verify S_ICF authorization for OData paths
- Contact SAP administrator for permission review
404 Not Found
- This is normal for SAP OData base URLs without service names
- Verify OData services are activated (SICF transaction)
- Use service discovery to find available services
SSL Certificate Errors
- Set
SAP_VALIDATE_SSL=false
for development - Install proper certificates for production
- Check certificate chain and expiration
Debug Mode
Enable detailed logging:
DEBUG=axios npm start
SAP System Verification
- Test OData URL in browser: Navigate to your SAP OData URL
- Check service activation: Transaction SICF ā
/sap/opu/odata
- Verify gateway services: Transaction /IWFND/MAINT_SERVICE
- Test with gateway client: Transaction /IWFND/GW_CLIENT
Security Best Practices
Production Deployment
- Use HTTPS for all SAP OData connections
- Store credentials securely - never hardcode passwords
- Create dedicated service users with minimal required permissions
- Enable CSRF protection for write operations
- Implement proper authorization in SAP for OData services
- Monitor access logs and set up alerting
- Regular security audits of user permissions
Network Security
- Use VPN or private networks for SAP access
- Implement IP restrictions where possible
- Enable SAP Gateway security features
- Use proper certificate management
Common SAP OData Services
Standard SAP Services
- GWSAMPLE_BASIC - Basic sample service for testing
- GWDEMO - Comprehensive demo service
- RMTSAMPLEFLIGHT - Flight booking demo
Business Services
- API_MATERIAL_SRV - Material Management
- API_BUSINESS_PARTNER - Business Partner Management
- API_SALES_ORDER_SRV - Sales Order Management
- API_PURCHASEORDER_PROCESS_SRV - Purchase Order Processing
Entity Sets by Module
- MM (Materials Management): MaterialSet, MaterialPlantDataSet
- SD (Sales & Distribution): SalesOrderSet, CustomerSet, PricingConditionSet
- FI (Financial Accounting): GeneralLedgerEntrySet, AccountingDocumentSet
- HR (Human Resources): EmployeeSet, OrganizationalUnitSet
Development
Available Scripts
# Build TypeScript
npm run build
# Start production server
npm start
# Development mode with auto-reload
npm run dev
# Code quality
npm run lint
npm run format
Adding New Features
- Add tool definition in
tool-definitions.ts
- Implement handler in
handlers.ts
- Add route in
server.ts
switch statement - Update types in
types.ts
if needed - Build and test
Contributing
- Fork the repository
- Create a feature branch
- Make your changes with proper TypeScript types
- Test with a real SAP system
- Submit a pull request
License
MIT License - see LICENSE file for details.