MCP serverMCP servertypeExposes tools to a coding agent over MCP.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

odata_mcp

The Python original: reads an OData v2 service's metadata and generates MCP tools from it, with the SAP-specific conversions the raw protocol leaves to you.

Tools generated from metadata rather than hand-written, with full CRUD, the standard query parameters, and function imports. What distinguishes it is the accumulated handling of what SAP OData actually returns: /Date(milliseconds)/ converted to ISO 8601, Edm.Decimal fields converted to strings so precision survives, base64 and standard GUIDs converted both ways, response size limiting with selective field retrieval, and pagination hints that suggest the next call's parameters. Basic, cookie and OAuth 2.0 authentication with CSRF handling; stdio or HTTP/SSE.

Facts

Last pushLicenceMIT

Where it sits

Lives in
Provides
Agent access to your systemsABAPBTPAgent access to your systemscapabilityGiving an AI agent access to the business data, configuration or operations of systems you run through an MCP server. [Serving your application over MCP](capability:mcp-servers) exposes your own service contract; system access reaches the systems behind it, and one implementation may do both. Development assistance belongs to [agent access to your code](capability:agent-code-access).
Serves

Who is behind it

Alice V.Alice V.PersonMaintains this
In the atlas: maintains 6, contributes to 12
@oisee
maintainerZafar IqbalPersonContributes to this
In the atlas: contributes to 1
@ziqbal
1 contributor

Before choosing this

Conditions

PracticalFunctional boundary

OData v2 only, and untouched since August 2025 — the same author's Go port is where v4 support and the tool-explosion work went.

PolicySAP API Policy 4.2026a§ 1.1, 1.2, 2.2.2from Agent access to your systemsAn MCP server uses SAP APIs to supply tools, resources or data to an agent.
  • § 1.1 Published APIs. Published APIs are made available for the documented purposes identified by SAP, including integration, extensions and data exchange.
  • § 1.2 Non-Published APIs. Customer and third-party applications must not access non-published APIs except where documentation permits it or SAP otherwise authorizes it.
  • § 2.2.2 AI call sequences and data extraction. Outside SAP-endorsed architectures, data services or expressly identified pathways, the policy prohibits specified agentic API use and systematic or large-scale extraction.

MCP does not replace the API's documented-use boundary. Check that every endpoint is published for the intended use and whether the policy's AI-call or extraction provisions apply to the design.

SAP API Policy 4.2026a →

What it declares

Every artifact

Type
MCP server
Origin
Independently maintained

As an MCP server

Transport
stdioHTTPSSE
Authentication
user and passwordOAuth / OIDC
Read-only
nostates it is not
Guardrails
2 quoted from README show all
  • Creating read-only MCP endpoints for users

  • The HTTP/SSE transport does not include authentication.

Connections3

Where odata_mcp runsodata_mcp — README, checked 2026-09-11: “STDIO (default) and HTTP/SSE for web-based clients”stdio or HTTP or SSEYour MCP client, actorYour MCP clientodata_mcp, moduleodata_mcp
SAPnot SAP's, or the project's ownstated in the document

README

quoted from oisee/odata_mcp under MIT, read
oisee/odata_mcp/README.mdOn GitHub

OData MCP Wrapper

A bridge between OData v2 services and the Model Context Protocol (MCP), dynamically generating MCP tools based on OData metadata.

Overview

The OData MCP Wrapper enables seamless integration between OData v2 services and the MCP (MCP). It automatically analyzes OData service metadata and generates corresponding MCP tools, allowing AI agents to interact with OData services through a standardized interface.

Key Features
  • Modular Architecture: Split into focused modules for maintainability
  • Enhanced Error Handling: Comprehensive OData error parsing and propagation
  • Smart Tool Naming: Service-aware tool naming preserving original names
  • Automatic Tool Generation: Creates MCP tools from OData metadata
  • Full CRUD Support: Create, Read, Update, Delete operations for entity sets
  • Query Capabilities: Standard OData query parameters (filter, select, expand, orderby, etc.)
  • Function Import Support: Handles OData function imports
  • Authentication: Basic auth, cookie-based auth, and OAuth 2.0 with CSRF token management (OAuth newly added!)
  • GUID Optimization: Automatic base64 ↔ standard GUID conversion
  • Response Optimization: Size limiting and selective field retrieval
  • Legacy Date Support: Automatic conversion between SAP /Date(milliseconds)/ and ISO 8601
  • Decimal Field Handling: Automatic numeric to string conversion for Edm.Decimal fields
  • Pagination Hints: Suggested next call parameters for easy pagination
  • Flexible Response Control: Options for metadata inclusion and error verbosity
  • Multiple Transport Options: STDIO (default) and HTTP/SSE for web-based clients
  • Read-Only Modes: Options to hide modifying operations for safer exploration
  • Service-Specific Hints: Implementation guidance for known problematic services
  • MCP Protocol Tracing: Debug logging for troubleshooting client issues

Installation

Prerequisites
Installation Steps
  1. Clone the repository:

    git clone https://github.com/oisee/odata_mcp.git
    cd odata_mcp
  2. Install dependencies:

    pip install -r requirements.txt

Configuration

Environment Variables

Create a .env file in the project directory:

# OData service URL (required)
ODATA_SERVICE_URL=https://your-odata-service.com/odata/
ODATA_URL=https://your-odata-service.com/odata/  # Alternative

# Basic Authentication (if required)
ODATA_USERNAME=your_username
ODATA_USER=your_username  # Alternative
ODATA_PASSWORD=your_password
ODATA_PASS=your_password  # Alternative

# Cookie Authentication (alternative to basic auth)
ODATA_COOKIE_FILE=/path/to/cookie.txt
ODATA_COOKIE_STRING="session=abc123; token=xyz789"

# OAuth 2.0 Authentication (alternative to basic/cookie auth)
OAUTH_CLIENT_ID=your-oauth-client-id
OAUTH_CLIENT_SECRET=your-oauth-client-secret  
OAUTH_TOKEN_URL=https://login.microsoftonline.com/tenant-id/oauth2/v2.0/token
OAUTH_SCOPE=https://graph.microsoft.com/.default  # Optional

Usage

Command Line Options
OptionDescriptionDefault
--serviceOData service URL (overrides positional arg and env var)-
-u, --userUsername for basic authentication-
-p, --passwordPassword for basic authentication-
--cookie-filePath to cookie file (Netscape format)-
--cookie-stringCookie string (key1=val1; key2=val2)-
--oauth-client-idOAuth 2.0 Client ID-
--oauth-client-secretOAuth 2.0 Client Secret-
--oauth-token-urlOAuth 2.0 Token Endpoint URL-
--oauth-scopeOAuth 2.0 Scope-
--oauth-tenantAzure AD Tenant ID for Microsoft Graphcommon
-v, --verbose, --debugEnable verbose output to stderrFalse
--tool-prefixCustom prefix for tool names-
--tool-postfixCustom postfix for tool names_for_<service_id>
--no-postfixUse prefix instead of postfixFalse
--tool-shrinkUse shortened tool namesFalse
--entitiesComma-separated entities (supports wildcards with *)All entities
--functionsComma-separated functions (supports wildcards with *)All functions
--sort-toolsSort tools alphabeticallyTrue
--no-sort-toolsDisable alphabetical sorting of tools-
--pagination-hintsAdd suggested_next_call in pagination responsesFalse
--legacy-datesConvert /Date(ms)/ to/from ISO 8601True
--no-legacy-datesDisable legacy date format conversion-
--verbose-errorsInclude detailed error messagesFalse
--response-metadataInclude __metadata blocks in responsesFalse
--max-response-sizeMaximum response size in bytes5242880 (5MB)
--max-itemsMaximum items per response100
--tracePrint all tools and exit (debugging)False
--trace-mcpEnable detailed MCP protocol trace loggingFalse
--read-only, -roHide all modifying operations (create, update, delete, functions)False
--read-only-but-functions, -robfHide create, update, delete but allow functionsFalse
--enableEnable only specific operation types (see Operation Type Filtering)-
--disableDisable specific operation types (see Operation Type Filtering)-
--hints-filePath to hints JSON filehints.json
--hintDirect hint JSON or text to inject-
--info-tool-nameCustom name for the service info toolodata_service_info
--transportTransport type: 'stdio' or 'http' (SSE)stdio
--http-addrHTTP server address (with --transport http):8080
Service Info Tool

The wrapper automatically creates a service info tool that provides comprehensive metadata about the OData service:

  • Default name: odata_service_info (with service-specific postfix)
  • Alias: readme (automatically created for better discoverability)
  • Custom name: Use --info-tool-name to specify a custom name

This tool is marked as the RECOMMENDED STARTING POINT and provides:

  • Service URL and description
  • Available entity sets and their operations
  • Entity types with properties and relationships
  • Function imports with parameters
  • Implementation hints and known issues
  • List of all registered MCP tools

Example:

# Default naming (creates both odata_service_info and readme aliases)
python odata_mcp.py --service https://example.com/odata/

# Custom naming (no readme alias)
python odata_mcp.py --service https://example.com/odata/ --info-tool-name get_started
Read-Only Modes

The wrapper supports read-only modes for safer exploration of OData services:

  • --read-only (-ro): Hides all modifying operations (create, update, delete, and function imports)
  • --read-only-but-functions (-robf): Hides create, update, and delete operations but still allows function imports

These modes are mutually exclusive and useful when:

  • Exploring unfamiliar OData services
  • Preventing accidental data modifications
  • Creating read-only MCP endpoints for users
Operation Type Filtering

The wrapper supports fine-grained control over which operation types are generated using --enable and --disable flags. This helps reduce tool count for services with many entities.

Operation Types
  • C: Create operations
  • S: Search operations
  • F: Filter operations (includes count)
  • G: Get (retrieve single entity) operations
  • U: Update operations
  • D: Delete operations
  • A: Actions/Function imports
  • R: Read operations (expands to S, F, and G)
Examples
# Enable only read operations (search, filter, get)
python odata_mcp.py --service https://example.com/odata/ --enable "R"

# Enable only filter and get operations
python odata_mcp.py --service https://example.com/odata/ --enable "FG"

# Disable create, update, and delete operations
python odata_mcp.py --service https://example.com/odata/ --disable "CUD"

# Disable actions/function imports
python odata_mcp.py --service https://example.com/odata/ --disable "A"

Notes:

  • Operation codes are case-insensitive
  • --enable and --disable are mutually exclusive
  • The special R code in --enable expands to S, F, and G operations
  • This filtering is more flexible than --read-only modes as it allows specific operation combinations
Service-Specific Hints

The wrapper includes a flexible hint system to provide guidance for services with known issues or special requirements:

# Use default hints.json from script directory
python odata_mcp.py https://my-service.com/odata/

# Use custom hints file
python odata_mcp.py --hints-file /path/to/custom-hints.json https://my-service.com/odata/

# Inject hint directly from command line
python odata_mcp.py --hint "Remember to use \$expand for complex queries" https://my-service.com/odata/

# Combine file and CLI hints (CLI has higher priority)
python odata_mcp.py --hints-file custom.json --hint '{"notes":["Override note"]}' https://my-service.com/odata/

Hints are matched by URL patterns and appear in the odata_service_info tool response under implementation_hints.

Default hints are provided for:

  • SAP OData Services: General SAP-specific issues and workarounds
  • SAP PO Tracking Service (SRA020_PO_TRACKING_SRV): Specific guidance for purchase order tracking
  • Northwind Demo Services: Identifies public demo services
Hint File Structure

The hints.json file follows this structure:

{
  "version": "1.0",
  "hints": [
    {
      "pattern": "*/sap/opu/odata/*",
      "priority": 10,
      "service_type": "SAP OData Service",
      "known_issues": [...],
      "workarounds": [...],
      "field_hints": {
        "FieldName": {
          "type": "Edm.String",
          "format": "Expected format",
          "example": "12345"
        }
      },
      "examples": [
        {
          "description": "Example description",
          "query": "filter_EntitySet with $filter=...",
          "note": "Additional note"
        }
      ],
      "notes": [...]
    }
  ]
}

Patterns support wildcards (* and ?) and are matched against the service URL. Multiple hints can match; they are merged by priority (higher values override).

MCP Protocol Tracing

Use --trace-mcp to enable detailed protocol debugging. This creates a log file with all MCP messages:

  • Linux/WSL: /tmp/mcp_trace_*.log
  • Windows: %TEMP%\mcp_trace_*.log

Useful for diagnosing client compatibility issues.

OAuth 2.0 Authentication

The OData MCP wrapper supports OAuth 2.0 authentication for modern, secure access to protected OData services. This feature addresses GitHub Discussion #9 requesting OIDC authentication support.

Supported OAuth Flows
  • Client Credentials Flow: Server-to-server authentication (recommended)
  • Automatic Token Refresh: Tokens are automatically refreshed when expired
  • Multiple Providers: Microsoft Graph, SAP, and custom OAuth providers
Configuration
Environment Variables
# OAuth 2.0 credentials
OAUTH_CLIENT_ID=your-application-client-id
OAUTH_CLIENT_SECRET=your-application-client-secret
OAUTH_TOKEN_URL=https://login.microsoftonline.com/tenant-id/oauth2/v2.0/token
OAUTH_SCOPE=https://graph.microsoft.com/.default  # Optional
Command Line Arguments
python odata_mcp.py --oauth-client-id CLIENT_ID \
                    --oauth-client-secret CLIENT_SECRET \
                    --oauth-token-url TOKEN_URL \
                    --oauth-scope SCOPE \
                    --service SERVICE_URL
Microsoft Graph Integration

The wrapper includes built-in support for Microsoft Graph API:

# Automatic Graph configuration (detects graph.microsoft.com)
python odata_mcp.py --service https://graph.microsoft.com/v1.0/ \
                    --oauth-client-id YOUR_CLIENT_ID \
                    --oauth-client-secret YOUR_CLIENT_SECRET \
                    --oauth-tenant YOUR_TENANT_ID

# Or use environment variables
export OAUTH_CLIENT_ID="your-client-id"
export OAUTH_CLIENT_SECRET="your-client-secret"  
python odata_mcp.py --service https://graph.microsoft.com/v1.0/ \
                    --oauth-tenant YOUR_TENANT_ID
Setting Up OAuth with Microsoft Graph
  1. Register Application in Azure Portal:

    • Go to Azure Portal → Azure Active Directory → App registrations
    • Click "New registration"
    • Set application name and supported account types
    • No redirect URI needed for client credentials flow
  2. Configure API Permissions:

    • Go to "API permissions" → Add permission → Microsoft Graph → Application permissions
    • Add required permissions (e.g., User.Read.All, Group.Read.All)
    • Grant admin consent for permissions
  3. Get Credentials:

    • Client ID: Found in app overview page
    • Client Secret: Create in "Certificates & secrets" → New client secret
    • Tenant ID: Found in app overview or Azure AD overview
  4. Test Connection:

    python test_oauth.py  # Use the provided test script
SAP OAuth Configuration

For SAP systems with OIDC enabled:

python odata_mcp.py --service https://your-sap-system.com:8443/sap/opu/odata/sap/YOUR_SERVICE/ \
                    --oauth-client-id YOUR_SAP_CLIENT_ID \
                    --oauth-client-secret YOUR_SAP_CLIENT_SECRET \
                    --oauth-token-url https://your-sap-system.com:8443/sap/bc/sec/oauth2/token \
                    --oauth-scope "odata_read odata_write"
Testing OAuth Setup

Use the provided test script to verify OAuth configuration:

# Test with your credentials
export OAUTH_CLIENT_ID="your-client-id"
export OAUTH_CLIENT_SECRET="your-client-secret"
python test_oauth.py

# Skip Graph API tests if you don't have Graph permissions
python test_oauth.py --skip-graph
Troubleshooting OAuth

Common Issues:

  1. Token acquisition failed:

    • Verify client ID and secret are correct
    • Check token URL is accessible
    • Ensure proper scope configuration
  2. Insufficient permissions:

    • Verify API permissions in Azure Portal
    • Ensure admin consent is granted
    • Check scope matches required permissions
  3. Token expired errors:

    • Tokens are automatically refreshed, but check network connectivity
    • Verify token URL and refresh token support

Debug Mode:

python odata_mcp.py --oauth-client-id CLIENT_ID \
                    --oauth-client-secret CLIENT_SECRET \
                    --service SERVICE_URL \
                    --verbose  # Shows OAuth token acquisition logs
Command Line Examples
# Using environment variables
python odata_mcp.py

# Using command line arguments (basic auth)
python odata_mcp.py --service https://your-service.com/odata/ \
                    --user USERNAME \
                    --password PASSWORD \
                    --verbose

# Using cookie authentication
python odata_mcp.py --service https://your-service.com/odata/ \
                    --cookie-file cookie.txt \
                    --verbose

# Using OAuth 2.0 authentication
python odata_mcp.py --service https://your-service.com/odata/ \
                    --oauth-client-id YOUR_CLIENT_ID \
                    --oauth-client-secret YOUR_CLIENT_SECRET \
                    --oauth-token-url https://login.microsoftonline.com/tenant/oauth2/v2.0/token \
                    --verbose

# Microsoft Graph with OAuth (simplified)
python odata_mcp.py --service https://graph.microsoft.com/v1.0/ \
                    --oauth-client-id YOUR_CLIENT_ID \
                    --oauth-client-secret YOUR_CLIENT_SECRET \
                    --oauth-tenant YOUR_TENANT_ID \
                    --verbose

# Additional options
python odata_mcp.py --tool-prefix myprefix \
                    --tool-postfix myservice \
                    --no-postfix

# Generate tools only for specific entities
python odata_mcp.py --service https://your-service.com/odata/ \
                    --entities "Products,Categories,Orders" \
                    --verbose

# Use wildcards in entity filtering
python odata_mcp.py --service https://your-service.com/odata/ \
                    --entities "Product*,Order*,Customer" \
                    --verbose

# Control tool sorting (default is alphabetical)
python odata_mcp.py --service https://your-service.com/odata/ \
                    --no-sort-tools \
                    --verbose

# Enable pagination hints for easier navigation
python odata_mcp.py --service https://your-service.com/odata/ \
                    --pagination-hints \
                    --verbose

# SAP-specific options for legacy systems
python odata_mcp.py --service https://sap-service.com/odata/ \
                    --legacy-dates \
                    --response-metadata \
                    --verbose-errors

# Debug mode - show all tools without starting server
python odata_mcp.py --service https://your-service.com/odata/ \
                    --trace

# Run with HTTP/SSE transport for web clients
python odata_mcp.py --service https://your-service.com/odata/ \
                    --transport http \
                    --http-addr :8080

# HTTP transport on specific interface
python odata_mcp.py --service https://your-service.com/odata/ \
                    --transport http \
                    --http-addr 127.0.0.1:3000

# Read-only mode - hide all modifying operations
python odata_mcp.py --service https://your-service.com/odata/ \
                    --read-only \
                    --verbose

# Read-only but allow functions
python odata_mcp.py --service https://your-service.com/odata/ \
                    --read-only-but-functions \
                    --verbose

# Enable MCP protocol trace logging for debugging
python odata_mcp.py --service https://your-service.com/odata/ \
                    --trace-mcp \
                    --verbose
Generated Tools

The wrapper dynamically generates MCP tools for each entity set. Use --entities to limit tool generation to specific entities only (useful for large services):

  1. List/Filter: filter_EntitySetName - Query entities with filtering, sorting, pagination
  2. Count: count_EntitySetName - Get entity count with optional filtering
  3. Search: search_EntitySetName - Full-text search (if supported)
  4. Get: get_EntitySetName - Retrieve single entity by key
  5. Create: create_EntitySetName - Create new entity
  6. Update: update_EntitySetName - Update existing entity
  7. Delete: delete_EntitySetName - Delete entity
Example Usage
# List entities with filtering
await filter_ProductSet(
    filter="Price gt 20", 
    orderby="Price desc", 
    top=10
)

# Get specific entity
await get_ProductSet(ID="12345")

# Create new entity
await create_ProductSet(
    Name="New Product",
    Price=99.99,
    CategoryID="CAT001"
)

# Update entity
await update_ProductSet(
    ID="12345",
    Price=89.99
)

# Get service information
await odata_service_info()

Transport Options

The OData MCP bridge supports three transport mechanisms:

1. STDIO Transport (Default)
  • Standard input/output communication
  • Used by Claude Desktop and other MCP clients
  • No additional configuration required
2. HTTP/SSE Transport
  • HTTP server with Server-Sent Events
  • Enables web-based clients to interact with OData services
  • Endpoints:
    • GET /health - Health check
    • GET /sse - Server-Sent Events stream
    • POST /rpc - JSON-RPC endpoint
3. Streamable HTTP Transport (New)
  • Modern bidirectional HTTP transport for MCP
  • Required for Microsoft Copilot Studio integration
  • Replaces SSE transport (which will be deprecated in August 2025)
  • Single endpoint at /mcp for all communication
  • More efficient and secure than SSE
Using Streamable HTTP Transport
# Start with default port 8080 (recommended for Microsoft Copilot Studio)
python odata_mcp.py --transport streamable-http --service https://your-service.com/odata/

# Use custom port
python odata_mcp.py --transport streamable-http --http-addr localhost:3000 --service https://your-service.com/odata/

# With authentication
python odata_mcp.py --transport streamable-http -u username -p password --service https://your-service.com/odata/

The Streamable HTTP server will be available at http://localhost:8080/mcp (or your custom port).

Using HTTP/SSE Transport
# Start with default port 8080
python odata_mcp.py --transport http --service https://your-service.com/odata/

# Use custom port
python odata_mcp.py --transport http --http-addr :3000 --service https://your-service.com/odata/

# Bind to specific interface
python odata_mcp.py --transport http --http-addr 192.168.1.100:8080 --service https://your-service.com/odata/
Testing HTTP/SSE Transport
  1. Using the provided HTML client:

    # Start the server
    python odata_mcp.py --transport http --service https://services.odata.org/V2/Northwind/Northwind.svc/
    
    # Open examples/sse_client.html in a web browser
  2. Using the test script:

    ./test_http_transport.sh
  3. Using curl:

    # Test health endpoint
    curl http://localhost:8080/health
    
    # Test RPC endpoint
    curl -X POST http://localhost:8080/rpc \
      -H "Content-Type: application/json" \
      -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'

⚠️ Security Warning: The HTTP/SSE transport does not include authentication. Only use it in secure, trusted environments or behind a reverse proxy with proper authentication.

Architecture

The project uses a modular architecture for maintainability:

odata_mcp_lib/                    # Core modular library
├── __init__.py                   # Clean API exports
├── constants.py                  # OData type mappings & namespaces
├── models.py                     # Pydantic data models
├── guid_handler.py               # GUID conversion utilities
├── metadata_parser.py            # OData metadata parsing
├── client.py                     # HTTP client with error handling
├── bridge.py                     # MCP bridge implementation
├── name_shortener.py             # Tool name shortening logic
└── transport/                    # Transport implementations
    ├── __init__.py               # Transport base classes
    ├── stdio.py                  # STDIO transport
    └── http_sse.py               # HTTP/SSE transport

odata_mcp.py                      # Main executable
examples/
├── sse_client.html               # Web-based SSE client
test_odata_mcp.py                 # Test suite
test_http_transport.sh            # HTTP transport test script
Key Components
  • MetadataParser: Fetches and parses OData $metadata XML
  • ODataClient: Manages HTTP communication and CSRF tokens
  • ODataMCPBridge: Generates MCP tools from metadata
  • GUIDHandler: Converts between base64 and standard GUID formats

Testing

Unit Tests
# Run basic unit tests
python test_odata_mcp.py

# Run with live service (requires valid OData service)
RUN_LIVE_TESTS=true python test_odata_mcp.py
OAuth Testing
# Test OAuth implementation without credentials
python test_oauth.py --skip-graph

# Run comprehensive OAuth test suite
python test_oauth_comprehensive.py

# Test with Microsoft Graph (requires Azure AD app)
export OAUTH_CLIENT_ID="your-client-id"
export OAUTH_CLIENT_SECRET="your-secret"
python test_oauth.py
Integration Testing
# Test with public Northwind service
python odata_mcp.py --service https://services.odata.org/V2/Northwind/Northwind.svc/ --trace

# Test OAuth with mock credentials (verifies flow)
python odata_mcp.py \
    --service https://graph.microsoft.com/v1.0/ \
    --oauth-client-id test-id \
    --oauth-client-secret test-secret \
    --verbose 2>&1 | grep OAuth

For complete testing documentation, see OAuth Testing Report.

Import Compatibility

from odata_mcp_lib import MetadataParser, ODataClient, ODataMCPBridge
Legacy Code (Backward Compatible)
from odata_mcp_compat import MetadataParser, ODataClient, ODataMCPBridge

TODO & Roadmap

High Priority
  • Enhanced testing suite with comprehensive coverage
  • Module-specific unit tests leveraging new architecture
  • CI/CD pipeline setup for automated testing
  • Performance benchmarking and optimization
Short-term Goals (3-6 months)
  • OData v4 support
  • Enhanced batch operations
  • Cookie-based authentication (completed)
  • OAuth 2.0 authentication (completed)
  • Response caching for performance
  • Input validation improvements
Medium-term Goals (6-12 months)
  • Schema validation for input/output data
  • Advanced query capabilities (complex filters, aggregations)
  • Navigation property enhancements
  • Custom tool generation templates
Long-term Goals (12+ months)
  • GraphQL interface layer
  • Cross-service federation
  • Advanced security features (field-level security, data masking)
  • Comprehensive monitoring and metrics
  • Horizontal scaling support
Recently Completed ✅
  • Modular Architecture: Split monolithic codebase into 7 focused modules
  • Enhanced Error Handling: Comprehensive OData error parsing
  • Smart Tool Naming: Service-aware naming preserving original names
  • Backward Compatibility: Zero breaking changes maintained
  • Code Cleanup: Removed redundant files and improved organization
  • GUID Optimization: Automatic base64 ↔ standard format conversion
  • Response Optimization: Size limiting and field selection
  • Cookie Authentication: Support for SSO/MYSAPSSO2 tokens (see COOKIE_AUTH.md)
  • Legacy Date Support: SAP /Date(milliseconds)/ format conversion
  • Decimal Field Handling: Automatic conversion for Edm.Decimal types
  • Pagination Hints: Suggested next call parameters for easy pagination
  • Enhanced Trace Mode: Comprehensive debugging output
  • Feature Parity: Matched Go implementation features
  • HTTP/SSE Transport: Web-based client support via Server-Sent Events
  • Transport Abstraction: Clean interface for multiple transport types
  • Read-Only Modes: Options to hide modifying operations (--read-only, --read-only-but-functions)
  • Service Hints: Implementation guidance for known problematic services
  • MCP Trace Logging: Protocol debugging support with --trace-mcp
  • OAuth 2.0 Authentication: Modern secure authentication with automatic token refresh

Troubleshooting

Common Issues
  1. Connection Failures

    • Verify OData service URL and network connectivity
    • Check authentication credentials
    • Use --verbose for detailed error information
  2. Import Errors

    • Use from odata_mcp_lib import ... for new imports
    • Use from odata_mcp_compat import ... for legacy compatibility
  3. Tool Generation Issues

    • Ensure service metadata is accessible
    • Check for valid entity sets in the metadata
    • Review verbose logs for parsing errors
  4. GUID/Binary Field Issues

    • GUID fields are automatically converted from base64
    • Binary fields may be excluded by default for performance
Performance Tips
  • Use $select to limit returned fields
  • Apply $top for pagination
  • Use $filter to reduce result sets
  • Consider excluding binary fields for large datasets

Community & Discussions

Join our community discussions to:

  • Ask questions about OData MCP integration
  • Share ideas and feature requests
  • Get help with service-specific configurations
  • Connect with other developers using the wrapper

🗣️ Join the Discussion - Welcome to the community!

Additional Documentation

License

Copyright (c) 2025. All rights reserved.


Project Status: Production Ready ✅
Architecture: Modular and Maintainable ✅
Version: 1.4 (OAuth 2.0 Support)
OAuth Status: Fully Implemented & Tested ✅

MIT, read

History

Latest

v2.0.0

Features 4, Changed 2

Notes
Changed
  • Complete refactoring into modular architecture
  • Backward compatibility maintained through compatibility layer
Added
  • Transport abstraction layer
  • Name shortening utilities
  • Comprehensive test suite
  • Enhanced trace mode
  1. v1.0.0

    Features 8

    Notes
    Added
    • Initial Python implementation
    • OData v2 support
    • Dynamic tool generation
    • Basic and cookie authentication
    • SAP OData extensions
    • CRUD operations
    • Query support
    • Function imports
Declared alternative
  1. odata_mcp_goGo binary bridging any OData v2 or v4 service to MCP
Agent access to your systems
  1. @abap2ui5/mcp-serverMCP server for the abap2UI5 check, deploy and run loop
  2. abap2UI5 for VS CodeVS Code extension to preview, activate and lint abap2UI5 apps
  3. abapsmithABAP MCP server over ADT with a local journal that can undo writes
  4. btp-sap-odata-to-mcp-serverExposes S/4HANA or ECC OData services as MCP tools
  5. midasol/sap-mcp-serverPython MCP server for SAP Gateway OData operations
  6. odata_mcp_goGo binary bridging any OData v2 or v4 service to MCP
  7. sap-mcp-serverReads SAP ECC and S/4HANA for an agent over Gateway OData and RFC, with a Node bridge that speaks the RFC protocol without the proprietary SAP NetWeaver RFC SDK.
  8. Skybuffer AI MCP serverABAP add-on serving business data and transactions as MCP tools
  9. sap-security-mcpRead-only security analysis MCP server for SAP audits and SoD review
  10. KlystronMCP server in ABAP inside the application server, with agent skills
  11. pyrfc-mcpMCP server calling RFC-enabled function modules behind an allowlist

Details

Sources3
sap-ai-mcp-serversdiscovered herechecked
github.com/oisee/odata_mcptree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
discovered viasap-ai-mcp-servers
first seen in the atlas
ecosystem and domainbtp, ai-and-agents
Contributors1

From the repository’s contributor list, .

History in the atlas3
  1. The concern it answers is reaching into an SAP system from outside, split out of MCP servers on this day; the sentence on the edge is unchanged.
  2. Triaged out of data/crawled/mcp-candidates.json, the sap-ai-mcp-servers sweep. Written from the repository's own README; the catalogue is credited as where it was found and its words are not reused.
  3. First seen.
For your agent
Ref
artifact:oisee-odata-mcp
JSON
/artifacts/oisee-odata-mcp.json
MCP
Connecting an agent