Skip to main content
Glama
SAP OData MCP Server

SAP OData MCP Server

by GutjahrAI

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

Related MCP server: sap-mcp-simulation

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

  1. Create the project:

mkdir sap-odata-mcp-server
cd sap-odata-mcp-server
mkdir src
  1. Copy the source files from the artifacts to your src/ directory:

    • src/index.ts - Entry point

    • src/server.ts - MCP server setup

    • src/handlers.ts - Request handlers

    • src/odata-client.ts - SAP OData client

    • src/tool-definitions.ts - Tool definitions

    • src/types.ts - TypeScript types

  2. Copy configuration files:

    • package.json - Dependencies and scripts

    • tsconfig.json - TypeScript configuration

    • .env.example - Environment variables template

  3. Install dependencies:

npm install
  1. Configure environment:

cp .env.example .env
# Edit .env with your SAP details
  1. 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 URL

  • username (required): SAP username

  • password (required): SAP password

  • client (optional): SAP client number

  • timeout (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 service

  • entitySet (required): Name of the entity set

  • select (optional): Array of fields to select

  • filter (optional): OData filter expression

  • orderby (optional): OData orderby expression

  • top (optional): Number of records to return

  • skip (optional): Number of records to skip

  • expand (optional): Navigation properties to expand

5. sap_get_entity

Get a specific entity by its key values.

Parameters:

  • serviceName (required): Name of the OData service

  • entitySet (required): Name of the entity set

  • keyValues (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

  1. Transaction SICF: Activate ICF services at /sap/opu/odata

  2. Transaction /IWFND/MAINT_SERVICE: Manage and activate OData services

  3. 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

  1. Test OData URL in browser: Navigate to your SAP OData URL

  2. Check service activation: Transaction SICF → /sap/opu/odata

  3. Verify gateway services: Transaction /IWFND/MAINT_SERVICE

  4. 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

  1. Add tool definition in tool-definitions.ts

  2. Implement handler in handlers.ts

  3. Add route in server.ts switch statement

  4. Update types in types.ts if needed

  5. Build and test

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes with proper TypeScript types

  4. Test with a real SAP system

  5. Submit a pull request

License

MIT License - see LICENSE file for details.

Available Tools

11 tools
sap_call_functionC

Call an OData function import

Inputs: serviceName (required), functionName (required), parameters.

sap_connectC

Connect to SAP OData service

Inputs: baseUrl (required), username (required), password (required), client, +3 more.

sap_connection_statusB

Check SAP OData connection status and get connection info

Inputs: no named parameters.

sap_create_entityC

Create a new entity in an entity set

Inputs: serviceName (required), entitySet (required), data (required).

sap_delete_entityC

Delete an entity

Inputs: serviceName (required), entitySet (required), keyValues (required).

sap_disconnectA

Disconnect from SAP OData service

Inputs: no named parameters.

sap_get_entityC

Get a specific entity by its key values

Inputs: serviceName (required), entitySet (required), keyValues (required).

sap_get_service_metadataC

Get metadata for a specific OData service

Inputs: serviceName (required).

sap_get_servicesB

Get list of available OData services

Inputs: no named parameters.

sap_query_entity_setC

Query an OData entity set with filtering, sorting, and pagination

Inputs: serviceName (required), entitySet (required), select, filter, +4 more.

sap_update_entityC

Update an existing entity

Inputs: serviceName (required), entitySet (required), keyValues (required), data (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 11 tools

    Disambiguation5/5

    Every tool has a clearly distinct purpose with no ambiguity. Each tool targets a specific OData operation (e.g., connect, query, create, update, delete) or metadata retrieval, making it easy for an agent to select the right tool without confusion.

    Naming Consistency5/5

    Tool names follow a consistent 'sap_verb_noun' pattern throughout, using snake_case uniformly. This predictable naming scheme enhances readability and makes the tool set easy to navigate and understand.

    Tool Count5/5

    With 11 tools, the server is well-scoped for SAP OData operations. Each tool earns its place by covering essential CRUD operations, connection management, and metadata retrieval, providing a comprehensive yet manageable surface for the domain.

    Completeness5/5

    The tool set offers complete CRUD/lifecycle coverage for SAP OData, including connection handling, entity management, and metadata access. There are no obvious gaps, ensuring agents can perform all core workflows without dead ends.

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      A
      quality
      D
      maintenance
      Enables interaction with SAP S/4HANA systems via OData, allowing service discovery, metadata exploration, field value retrieval, and CRUD operations through natural language.
      4
      5
      -
    • A
      license
      A
      quality
      D
      maintenance
      Enables AI agents to read, write, activate, and transport ABAP code in SAP systems via ABAP ADT REST API, without needing SAP GUI.
      24
      576 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI assistants and n8n workflows to interact with SAP S/4HANA and ECC systems via OData, IDoc, and RFC/BAPI, with governed read-only-by-default access and multiple authentication types.
      3
      ISC