@mariodefe/sap-datasphere-mcp
Forty-five tools across a Datasphere tenant — discovery, metadata, analytics, ETL extraction, database users, lineage and column profiling — with config-driven PII masking applied before anything reaches the model.
The broad Datasphere server, and the one the Datasphere pluginSAP Datasphere Plugin for ClaudeEighteen Datasphere skills over a bundled 45-tool MCP server — exploration, view and analytic-model design, BW Bridge migration, security architecture and catalog governance.independent, btp is built on. It goes past reading into extraction and administration: ETL data extraction, database user management, data lineage analysis and column-level profiling alongside the discovery and metadata tools. The masking is the part worth noting — it is configuration rather than a filter bolted on afterwards, and the stated intent is that sensitive fields never reach the LLM at all. Published to both PyPI and npm, with a version split that says which MCP spec each line implements: 2.x on the 2026-07-28 stateless spec, 1.x in maintenance.
Facts
Where it sits
Who is behind it
In the atlas: maintains 3, contributes to 3@MarioDeFelipemaintainerHARSHIT TIWARIContributes to this
In the atlas: contributes to 1@24f3001311Abhinav JawadekarContributes to this
In the atlas: contributes to 1@abhjawactions-userContributes to this
In the atlas: contributes to 2@actions-userAdam RounsvilleContributes to this
In the atlas: contributes to 1@adamrounsvilleadityaContributes to this
In the atlas: contributes to 1@adiaddalexa-perlovContributes to this
In the atlas: contributes to 1@alexa-perlovAmazon GitHub AutomationContributes to this
In the atlas: contributes to 1@amazon-autoAnil NadimintiContributes to this
In the atlas: contributes to 1@aniloncloudArijit MaityContributes to this
In the atlas: contributes to 1@arijitmaityArne WoutersContributes to this
In the atlas: contributes to 1@arnewouters146 contributors
Before choosing this
Conditions
PracticalFunctional boundary
It writes and it administers — ETL extraction and database user management are not read operations, and the same connection that profiles a column can move data out of the tenant. Masking is only as good as the configuration naming the fields, so an unlisted sensitive column is an unmasked one.
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
Connections
Read-only MCP server for exploring SAP Datasphere
Giving an AI agent access to the systems you run over MCP
Measures, dimensions and hierarchies an analytical client reads
Finding what data exists, what it promises and where it came from
Getting data into an analytical store and keeping it current
Forty SAP development plugins for coding agents
Eighteen Datasphere skills over a bundled MCP server
Download
Install
npm add @mariodefe/sap-datasphere-mcpDerived from the package name. No recipe recorded; the README has the configuration.
README
quoted from MarioDeFelipe/sap-datasphere-mcp under MIT, read🚀 SAP Datasphere MCP Server
Production-ready Model Context Protocol (MCP) server that enables AI assistants to seamlessly interact with SAP Datasphere environments for real tenant data discovery, metadata exploration, analytics operations, ETL data extraction, database user management, data lineage analysis, and column-level data profiling — with built-in config-driven PII masking so sensitive fields never reach the LLM.
📦 Which version do I install?
| Package | MCP Python SDK | Status |
|---|---|---|
| 2.x (current) | mcp>=2.0,<3 | Active development. Implements the 2026-07-28 stateless spec. |
| 1.x | mcp>=1.28,<2 | Maintenance only — security and critical fixes. |
pip install sap-datasphere-mcp gives you 2.x. The 2.x server is dual-era: it answers both the modern server/discover handshake and the legacy initialize one, so 2025-era clients keep working without changes.
Stay on 1.x only if your environment cannot install SDK 2.x:
pip install 'sap-datasphere-mcp<2'
🆕 What's New (v2.0.1 — MCP SDK v2 / stateless spec)
- Ported to MCP Python SDK 2.0.0 and the 2026-07-28 stateless specification. Handlers moved from the removed decorator API to
Server(on_*=…)constructor kwargs. The dependency floor is nowmcp>=2.0,<3— this is why the package major changed. - Dual-era by default — modern and legacy clients are both served from the same process; no configuration needed.
- Response cache hints (
ttlMs/cacheScope, SEP-2549) ontools/list,prompts/listandresources/list, sourced fromCacheManagerso the protocol hint and the internal cache cannot drift. Hints are sent to modern clients only, as the spec requires.tools/listis deterministically ordered. - Per-asset capability discovery — Datasphere capability varies per asset, not per tenant.
$countis now decided by reading the asset's ownCapabilities.CountRestrictionsannotation rather than a blanket rule, and a lineage-gated filter verdict is remembered per asset instead of being rediscovered on every call. - Every 1.7.0 protection forward-ported, verified by the same test suite running green on both SDK lines. See
CHANGELOG_v2.0.1.md.
🆕 What's New (v1.7.0 — input validation hardening)
- Every tool with inputs now has validation rules — 12 tools shipped without any, including
query_relational_entityandsmart_query. Coverage is 45/45 tools, 145/150 inputs. - Path identifiers are constrained and percent-encoded.
space_id/asset_id/entity_name/object_idare interpolated into URL paths; they now reject traversal-shaped values and pass throughquote()as a backstop. - Two silent-no-op bugs fixed — the validator registry had drifted so two tools' rules never ran, and
allowed_valueswas ignored onSTRINGrules (which also leftget_catalog_metadata.endpoint_typeunenforced). - A CI guard now fails if a tool ships without validation rules. See
CHANGELOG_v1.7.0.md.
🆕 What's New (v1.6.0 — partial text matching in $filter)
startswith/endswith/containsare now supported in$filteron the Consumption API, so an agent can match on partial values instead of first listing distinct ones. Example:startswith(Product,'TV') and Country eq 'US'.- Filtering is case-sensitive —
'us'does not match'US'. Verified against a live tenant; there is no server-side workaround, astolower()is not in the supported function list. $filteris now validated before it is sent. Unknown fields, non-text columns, and unsupported functions are rejected with a message the model can act on rather than an opaque400. Values containing a single quote are refused outright — the API has no escape form for them.- Federated assets degrade gracefully — an asset whose lineage includes non-replicated sources supports only
eq/and/or/(); that failure is now mapped to a message suggesting an equality retry. - See
CHANGELOG_v1.6.0.mdfor the full tenant-probe results.
🆕 What's New (v1.3.0 — lean tool profile)
- Leaner agent-facing tool surface — the server now advertises 39 tools by default (down from 49) by hiding redundant/overlapping metadata-discovery tools and developer diagnostics. Tool handlers are unchanged; only what's advertised to the MCP client is filtered, which improves LLM tool-selection accuracy. Controlled by two env vars:
DATASPHERE_TOOL_PROFILE—lean(default) orfull(advertise everything)DATASPHERE_EXPOSE_DIAGNOSTICS—false(default) ortrue(advertise thetest_phase*diagnostic tools)
🆕 What's New (v1.2.1 — wave 2026.10)
get_asset_variablestool — surfaces input parameters/variables and filter capability annotations declared in OData$metadata. Use it to discover what variables a parameterised view or analytic model expects before querying.- Variables & filters parsing —
parse_odata_metadata_xml_fullreturns{columns, variables, filters}in one call; the legacyparse_odata_metadata_xmlis preserved as a back-compat wrapper. - Aligns with SAP Datasphere wave 2026.10 (May 6, 2026). All calls use the current
/api/v1/datasphere/consumption/...path; the supersededdwcform was removed from the codebase in v1.6.0.
🚀 Quick Start
Option 1: Install via npm (Recommended for Node.js/Claude Desktop)
# Install globally
npm install -g @mariodefe/sap-datasphere-mcp
# Run the server
npx @mariodefe/sap-datasphere-mcp
Option 2: Install via PyPI (Python)
# Install from PyPI
pip install sap-datasphere-mcp
# Run the server
sap-datasphere-mcp
See Getting Started Guide for complete setup instructions.
✨ What's New in v1.5.0
🩹 OData V4 annotation parsing for consumption $metadata — Datasphere's consumption APIs return OData 4.0, where semantic info (Common.Label, Analytics.Dimension, Analytics.measure, units, hierarchies) lives in <Annotation Term="…"> elements rather than legacy sap:* attributes. The metadata tools now read both forms, restoring previously-empty label, dimensions, and measures on get_relational_metadata / get_analytical_metadata / get_analytical_model. The V2 attribute path is kept as a fallback for older sources. See CHANGELOG_v1.5.0.md.
What's New in v1.4.0
🔏 Config-driven PII / Sensitive-Field Masking — a fail-closed masking layer now runs inside the MCP response pipeline. Sensitive columns are redacted, dropped, hashed, or tokenised before the data ever reaches the LLM, based on a YAML/JSON policy file you control. No prompt can bypass it.
Highlights
- ✅
DATASPHERE_PII_POLICY— point at a YAML or JSON policy file to activate masking; leave it unset for zero behaviour change. - ✅ Five masking actions —
redact(***),drop(column removed),hash(SHA-256, deterministic — safe for GROUP BY),partial:N(keep last N chars),tokenize(stableTKN_xxxxsurrogate). - ✅ Fail-closed — if the policy file is configured but can't be parsed, the server refuses to start. It never silently falls back to serving raw data.
- ✅ Allowlist mode — lock an asset to an explicit column whitelist; everything else is dropped before column rules even run.
- ✅ Value-pattern scanning — secondary regex net catches PII in free-text columns (email, IBAN, SSN, phone) with no explicit column rule required.
- ✅ Audit log — every tool call emits a structured log line with
space,asset,masked_fields, andmode— SIEM / EU-AI-Act ready. Raw values are never logged. - ✅
audit_onlymode — log what would be masked without changing the data; use during policy rollout to validate coverage before enforcing. - ✅ Hooked into all 5 data tools —
smart_query,query_relational_entity,query_analytical_data,get_space_assets,analyze_column_distribution.
✨ What's New in v1.1.0
🌐 Streamable HTTP Transport — the server now speaks MCP over HTTP as well as stdio, so you can run it as a long-lived service (Docker, ECS, App Runner, behind a reverse proxy) and point multiple clients at the same instance.
Highlights
- ✅ New
--transport httpflag — serves MCP Streamable HTTP (spec 2025-03-26) at/mcp, replacing the legacy SSE dual-endpoint dance with a single HTTP route. - ✅ Backward compatible —
stdiois still the default; existing Claude Desktop / Claude Code configs keep working with zero changes. - ✅ Optional bearer-token auth — enable via
--auth-tokenorMCP_HTTP_AUTH_TOKEN. The server warns if bound to a non-loopback interface without one. - ✅
/healthendpoint — plain JSON liveness probe for load balancers and uptime checks. - ✅ Fixed async entry point — new
main_sync()wrapsasyncio.run(main())so the console script works reliably on macOS and Linux.
Usage
# stdio (default, unchanged)
sap-datasphere-mcp
# Streamable HTTP on http://127.0.0.1:8080/mcp
sap-datasphere-mcp --transport http --port 8080
# Exposed on LAN with bearer-token auth
MCP_HTTP_AUTH_TOKEN=$(openssl rand -hex 32) \
sap-datasphere-mcp --transport http --host 0.0.0.0 --port 8080
# Via env vars only (great for Docker / ECS)
MCP_TRANSPORT=http MCP_HTTP_PORT=8080 \
MCP_HTTP_AUTH_TOKEN=$MY_TOKEN \
sap-datasphere-mcp
Install with HTTP extras
pip install 'sap-datasphere-mcp[http]' # adds starlette + uvicorn
# or
uv tool install 'sap-datasphere-mcp[http]' --python 3.12
Client call example
curl -N -X POST http://127.0.0.1:8080/mcp/ \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize",
"params":{"protocolVersion":"2025-03-26",
"capabilities":{},
"clientInfo":{"name":"curl","version":"0"}}}'
CLI / env reference
| Flag | Env var | Default | Purpose |
|---|---|---|---|
--transport | MCP_TRANSPORT | stdio | stdio or http |
--host | MCP_HTTP_HOST | 127.0.0.1 | Bind address in HTTP mode |
--port | MCP_HTTP_PORT | 8080 | Bind port in HTTP mode |
--path | MCP_HTTP_PATH | /mcp | URL path for the MCP endpoint |
--auth-token | MCP_HTTP_AUTH_TOKEN | (none) | Require Authorization: Bearer <token> |
See PR #31 for implementation details.
✨ What's New in v1.0.9
Enhanced Aggregation & Improved Logging - Production-ready smart query enhancements:
v1.0.9 - Smart Query Enhancements:
-
✅ Simple Aggregation Support - Queries like
SELECT COUNT(*) FROM tablenow work correctly- Support for aggregations without GROUP BY (returns single row)
- Enhanced regex to handle ORDER BY in GROUP BY queries
- Both simple and grouped aggregations fully supported
-
✅ Enhanced Asset Detection - Multi-strategy search reduces false warnings
- Exact name match + contains match for case-insensitive searches
- Graceful fallback for catalog API limitations
- Better handling of schema-prefixed views
-
✅ Improved Logging - Better user experience with clearer messages
- Info emoji (ℹ️) instead of warning emoji (⚠️) for non-critical messages
- More accurate descriptions ("not in catalog search" vs "not found")
- Actionable suggestions only when queries likely to fail
v1.0.8 - Critical Hotfix:
- ✅ Fixed aggregation fallback bug - Client-side aggregation now works in both primary and fallback paths
v1.0.7 - Smart Query Production Enhancements:
- ✅ Client-side aggregation for GROUP BY queries
- ✅ Asset capability detection
- ✅ Fuzzy table name matching
- ✅ LIMIT pushdown optimization
Result: 39 tools advertised by default (49 with diagnostics enabled) with a production-ready smart query engine supporting all SQL patterns
See CHANGELOG_v1.0.9.md for complete details.
📊 Current Status
🎉 45 TOOLS AVAILABLE - 44 with real data (98%) | Phases 1-5.1 Complete + Smart Query Engine
- ✅ Real data integration - all non-diagnostic tools read live tenant data
- ✅ OAuth 2.0 Authentication - Enterprise-grade security with automatic token refresh
- ✅ 100% Foundation Tools - All authentication, connection, and user tools working perfectly
- ✅ 100% Catalog Tools - Complete asset discovery and metadata exploration
- ✅ 100% Search Tools - Client-side search workarounds for catalog and repository
- ✅ 100% Database User Management - All 5 tools using real SAP Datasphere CLI
- ✅ 100% ETL Tools - All 4 Phase 5.1 tools with enterprise-grade data extraction (up to 50K records)
- ✅ NEW: Data Lineage & Quality - Column search and distribution analysis tools
- 🟡 1 diagnostic tool - Endpoint testing utility (intentionally mock mode)
📚 Complete Documentation
New! Comprehensive production-ready documentation:
| Guide | Description | Time to Read |
|---|---|---|
| 📖 Getting Started Guide | 10-minute quick start with examples | 10 min |
| 📋 Tools Catalog | Complete reference for all 44 tools | 30 min |
| 🔧 API Reference | Technical API docs with Python/cURL examples | 45 min |
| 🚀 Deployment Guide | Production deployment (Docker, K8s, PyPI) | 20 min |
| 🐛 Troubleshooting | Common issues and solutions | 15 min |
Quick Links:
- 🆕 What's New - Latest features and improvements
- ⚡ Quick Start - Get running in 5 minutes
- 📊 Query Examples - What data you can query and how
- 🛠️ All Tools - Complete tool list
- 🔒 Security - OAuth 2.0 and authorization
📊 Query Examples & Available Data
The server provides access to 37+ data assets including sales, products, HR, financial, and time dimension data. See QUERY_EXAMPLES.md for complete examples and documentation.
Available Data Assets
- Sales Data: Detailed orders and analytics (All For Bikes, eBike 100, etc.)
- Product Catalog: Forklifts (288-$699), specifications
- HR Analytics: Headcount, job classifications, locations
- Financial Data: Transaction details and GL accounts
- Time Dimensions: Calendar data from 1900-present
Quick Examples
Sales orders (Relational):
query_relational_entity(
space_id="SAP_CONTENT",
asset_id="SAP_SC_SALES_V_SalesOrders",
entity_name="SAP_SC_SALES_V_SalesOrders",
select="SALESORDERID,COMPANYNAME,GROSSAMOUNT,CURRENCY",
top=5
)
Product information (Relational):
query_relational_entity(
space_id="SAP_CONTENT",
asset_id="SAP_SC_FI_V_ProductsDim",
entity_name="SAP_SC_FI_V_ProductsDim",
select="PRODUCTID,MEDIUM_DESCR,PRICE,CURRENCY",
top=5
)
Sales analytics (Analytical):
query_analytical_data(
space_id="SAP_CONTENT",
asset_id="SAP_SC_SALES_AM_SalesOrders",
entity_set="SAP_SC_SALES_AM_SalesOrders",
select="COMPANYNAME,GROSSAMOUNT",
orderby="GROSSAMOUNT desc",
top=8
)
Performance: 1-5 second response times, up to 50K records per batch.
See QUERY_EXAMPLES.md for 37+ data assets, 5 detailed examples, and best practices.
🌟 Key Highlights
- 🎯 45 MCP Tools: Comprehensive SAP Datasphere operations via Model Context Protocol
- 🔐 OAuth 2.0: Production-ready authentication with automatic token refresh
- 🔏 Built-in PII Masking: Config-driven, fail-closed masking layer — sensitive fields never reach the LLM
- ✅ Real Data Access: 44 tools (98%) accessing actual tenant data - spaces, assets, users, metadata
- 🚀 API Integration: 44 tools (98%) with real data integration via API and CLI
- 🧠 Smart Query Engine: Production-ready SQL support with client-side aggregation for all query types
- 🔍 Asset Discovery: 36+ real assets discovered (HR, Finance, Sales, Time dimensions)
- 📊 Data Querying: Execute OData queries and ETL extraction through natural language on real data
- 🧬 Data Lineage: Find assets by column name for impact analysis and lineage tracking
- 📈 Data Quality: Statistical column analysis with null rates, percentiles, and outlier detection
- 👥 User Management: Create, update, and manage database users with real API
- 🧠 AI Integration: Claude Desktop, Cursor IDE, and other MCP-compatible assistants
- 🏆 100% Foundation & Catalog Tools: All core discovery tools fully functional
- 📦 Production Ready: Docker, Kubernetes, PyPI + npm packaging available
🛠️ Complete Tool Catalog (39 advertised by default, 49 with diagnostics)
🏆 Real Data Success Summary
| Category | Total Tools | Real Data | Success Rate |
|---|---|---|---|
| Foundation Tools | 5 | 5 ✅ | 100% |
| Catalog Tools | 4 | 4 ✅ | 100% |
| Space Discovery | 3 | 3 ✅ | 100% |
| Search Tools | 2 | 2 ✅ | 100% (client-side workarounds) |
| Data Discovery & Quality | 2 | 2 ✅ | 100% (v1.0.3 - lineage & profiling) |
| Database User Management | 5 | 5 ✅ | 100% (SAP CLI integration) |
| Metadata Tools | 4 | 4 ✅ | 100% |
| Analytical Consumption Tools | 4 | 4 ✅ | 100% (OData analytical queries) |
| Additional Tools | 5 | 5 ✅ | 100% (connections, tasks, marketplace, etc.) |
| Relational Query Tool | 1 | 1 ✅ | 100% (SQL to OData conversion) |
| Smart Query Engine | 1 | 1 ✅ | 100% (v1.0.9 - all SQL patterns supported) |
| ETL-Optimized Relational Tools | 4 | 4 ✅ | 100% (Phase 5.1 - up to 50K records) |
| Diagnostic Tools | 3 | 0 🟡 | Mock Mode (endpoint testing utilities) |
| Repository Tools (legacy) | 2 | 0 ❌ | 0% (deprecated - use Catalog instead) |
| TOTAL | 45 | 44 (98%) | 98% Coverage |
🔐 Foundation Tools (5 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
test_connection | ✅ Real Data | Test OAuth connection and get health status |
get_current_user | ✅ Real Data | Get authenticated user information from JWT token |
get_tenant_info | ✅ Real Data | Get SAP Datasphere tenant configuration |
get_available_scopes | ✅ Real Data | List OAuth2 scopes from token |
list_spaces | ✅ Real Data | List all accessible spaces (DEVAULT_SPACE, SAP_CONTENT) |
Example queries:
"Test the connection to SAP Datasphere"
"Who am I? Show my user information"
"What tenant am I connected to?"
"What OAuth scopes do I have?"
"List all SAP Datasphere spaces"
Real Data Examples:
- Real tenant: your-tenant.eu20.hcs.cloud.sap
- Real spaces: DEVAULT_SPACE, SAP_CONTENT
- Real user info from OAuth JWT token
- Real OAuth scopes (typically 3+ scopes)
🔍 Space Discovery Tools (3 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
get_space_info | ✅ Real Data | Get detailed information about a specific space |
get_table_schema | ✅ Real Data | Get column definitions and data types for tables |
search_tables | ✅ Real Data | Search for tables and views by keyword (client-side filtering) |
Example queries:
"Show me details about the SAP_CONTENT space"
"Get the schema for FINANCIAL_TRANSACTIONS table"
"Search for tables containing 'customer'"
Real Data Examples:
- Real space metadata from API
- Real table schemas (when tables exist in space)
- search_tables uses client-side filtering workaround (API doesn't support OData filters)
📦 Catalog & Asset Tools (4 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
list_catalog_assets | ✅ Real Data | Browse all catalog assets across spaces (36+ assets found!) |
get_asset_details | ✅ Real Data | Get comprehensive asset metadata and schema |
get_asset_by_compound_key | ✅ Real Data | Retrieve asset by space and name |
get_space_assets | ✅ Real Data | List all assets within a specific space |
Example queries:
"List all catalog assets in the system"
"Get details for asset SAP_SC_FI_AM_FINTRANSACTIONS"
"Show me all assets in the SAP_CONTENT space"
"Get asset by compound key: space=SAP_CONTENT, id=SAP_SC_HR_V_Divisions"
Real Assets Discovered (36+ real assets):
- HR Assets: SAP_SC_HR_V_Divisions, SAP_SC_HR_V_JobClass, SAP_SC_HR_V_Location, SAP_SC_HR_V_Job
- Finance Assets: SAP_SC_FI_V_ProductsDim, SAP_SC_FI_AM_FINTRANSACTIONS
- Time & Sales Models: Multiple analytical models with real metadata URLs
- All assets include real metadata URLs pointing to your tenant
🔎 Search Tools (2 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
search_catalog | ✅ Real Data | Search catalog assets by query (client-side workaround) |
search_repository | ✅ Real Data | Search repository objects with filters (client-side workaround) |
Example queries:
"Search catalog for 'sales'"
"Find repository objects containing 'customer'"
"Search for analytical models in SAP_CONTENT"
Real Data Examples:
- Client-side search across name, label, businessName, and description fields
- Support for facets (objectType, spaceId aggregation)
- Support for filters (object_types, space_id)
- Support for why_found tracking (shows which fields matched)
- Pagination and total_matches reporting
Implementation:
Both tools use client-side search workarounds since /api/v1/datasphere/consumption/catalog/search endpoint returns 404 Not Found. They fetch all assets from /catalog/assets and filter client-side.
🔬 Data Discovery & Quality Tools (2 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
find_assets_by_column | ✅ Real Data | Find all assets containing a specific column name for data lineage |
analyze_column_distribution | ✅ Real Data | Statistical analysis of column data distribution and quality profiling |
Example queries:
"Which tables contain CUSTOMER_ID column?"
"Find all assets with SALES_AMOUNT"
"Analyze the distribution of ORDER_TOTAL column"
"What's the data quality of CUSTOMER_AGE field?"
"Profile the PRICE column for outliers"
Real Data Examples:
- Data Lineage: Cross-space column search, impact analysis before schema changes
- Quality Profiling: Null rates, distinct values, percentiles, outlier detection (IQR method)
- Use Cases: Data discovery, schema relationship mapping, data quality assessment, pre-analytics profiling
Implementation: Both tools introduced in v1.0.3 provide advanced data discovery and quality capabilities:
find_assets_by_column: Searches across multiple spaces, case-insensitive by default, up to 200 resultsanalyze_column_distribution: Analyzes up to 10,000 records, automatic type detection, percentile analysis
📊 Metadata Tools (4 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
get_catalog_metadata | ✅ Real Data | Retrieve CSDL metadata schema for catalog service |
get_analytical_metadata | ✅ Real Data | Get analytical model metadata with pre-flight checks |
get_relational_metadata | ✅ Real Data | Get relational schema with SQL type mappings |
list_analytical_datasets | ✅ Real Data | List analytical datasets (fixed query parameters) |
Example queries:
"Get the catalog metadata schema"
"Retrieve analytical metadata for SAP_SC_FI_AM_FINTRANSACTIONS"
"Get relational schema for CUSTOMER_DATA table"
"List analytical datasets"
Status: All 4 tools return real data with proper error handling and capability checks.
👥 Database User Management Tools (5 tools) - 100% Real Data ✅
| Tool | Status | Description | Requires Consent |
|---|---|---|---|
list_database_users | ✅ Real Data | List all database users (SAP CLI) | No |
create_database_user | ✅ Real Data | Create new database user (SAP CLI) | Yes (ADMIN) |
update_database_user | ✅ Real Data | Update user permissions (SAP CLI) | Yes (ADMIN) |
delete_database_user | ✅ Real Data | Delete database user (SAP CLI) | Yes (ADMIN) |
reset_database_user_password | ✅ Real Data | Reset user password (SAP CLI) | Yes (SENSITIVE) |
Example queries:
"List all database users in SAP_CONTENT space"
"Create a new database user named ETL_USER"
"Update permissions for DB_USER_001"
"Delete database user TEST_USER"
"Reset password for DB_USER_001"
Status: All 5 tools use real SAP Datasphere CLI integration with subprocess execution, temporary file handling, and comprehensive error handling.
Consent Management: High-risk operations (create, update, delete, reset password) require user consent on first use. Consent is cached for 60 minutes.
🔧 API Syntax Fixes (4 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
search_tables | ✅ Real Data | Search tables/views (client-side filtering) |
get_deployed_objects | ✅ Real Data | List deployed objects (removed unsupported filters) |
list_analytical_datasets | ✅ Real Data | List datasets (fixed query parameters) |
get_analytical_metadata | ✅ Real Data | Get metadata (pre-flight capability checks) |
Status: All 4 tools fixed during Phase 2 - removed unsupported OData filters and added client-side workarounds.
🔧 HTML Response Fixes (2 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
get_task_status | ✅ Real Data | Graceful error handling for HTML responses |
browse_marketplace | ✅ Real Data | Professional degradation for UI-only endpoints |
Status: Both tools fixed during Phase 3 - added content-type validation and helpful error messages when endpoints return HTML instead of JSON.
📈 Analytical Consumption Tools (4 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
get_analytical_model | ✅ Real Data | Get OData service document and analytical model metadata |
get_analytical_service_document | ✅ Real Data | Get service capabilities, entity sets, and navigation properties |
list_analytical_datasets | ✅ Real Data | List all analytical datasets and entity sets for a model |
query_analytical_data | ✅ Real Data | Execute OData analytical queries with filter, top |
Example queries:
"Get analytical model for SAP_SC_FI_AM_FINTRANSACTIONS"
"Show me the service document for SAP_SC_HR_V_Divisions"
"List all datasets in the analytical model"
"Query analytical data from SAP_SC_FI_AM_FINTRANSACTIONS with filters"
Real Data Features:
- OData v4.0 analytical consumption API (/api/v1/datasphere/consumption/analytical)
- Full metadata discovery (service documents, entity sets, properties)
- Advanced filtering with select, skip, $orderby
- Aggregation support with $apply (groupby, aggregate functions)
- Real tenant data from your SAP Datasphere instance
Status: All 4 analytical consumption tools fully operational with real SAP Datasphere data!
🔌 Additional Tools (5 tools) - 100% Real Data ✅
| Tool | Status | Description |
|---|---|---|
list_connections | ✅ Real Data | List all configured connections (HANA, S/4HANA, etc.) |
get_task_status | ✅ Real Data | Monitor task execution status and progress |
browse_marketplace | ✅ Real Data | Browse Data Marketplace assets and packages |
get_consumption_metadata | ✅ Real Data | Get consumption layer metadata (CSDL schema) |
get_deployed_objects | ✅ Real Data | List all deployed objects in a space |
Example queries:
"List all connections in the system"
"Check the status of task 12345"
"Browse the Data Marketplace"
"Get consumption metadata schema"
"Show deployed objects in SAP_CONTENT"
Status: All additional tools provide essential system management capabilities with full real data support.
🧪 Diagnostic Tools (3 tools) - Endpoint Testing Utilities
| Tool | Status | Description |
|---|---|---|
test_analytical_endpoints | 🧪 Diagnostic | Test analytical/query API endpoint availability |
test_phase67_endpoints | 🧪 Diagnostic | Test Phase 6 & 7 endpoint availability (KPI, monitoring, users) |
test_phase8_endpoints | 🧪 Diagnostic | Test Phase 8 endpoint availability (data sharing, AI features) |
Purpose: These diagnostic tools help verify which SAP Datasphere API endpoints are available in your specific tenant configuration. They return structured reports with:
- HTTP status codes for each endpoint
- Error messages and troubleshooting guidance
- Recommendations for workarounds or alternative tools
Status: Diagnostic tools intentionally use mock/test mode to validate endpoint availability without modifying data.
🗂️ Repository Tools (2 tools) - Deprecated (Use Catalog Instead)
| Tool | Status | Description |
|---|---|---|
list_repository_objects | ⚠️ Deprecated | List repository objects (use list_catalog_assets instead) |
get_object_definition | ⚠️ Deprecated | Get object definition (use get_asset_details instead) |
Recommendation: These legacy repository tools are deprecated. Use the modern Catalog Tools instead:
- Replace
list_repository_objects→list_catalog_assetsorsearch_catalog - Replace
get_object_definition→get_asset_details
Status: Catalog Tools provide superior functionality with full real data support.
🔐 Relational Query Tool (1 tool) - 100% Real Data ✅
| Tool | Status | Description | Requires Consent |
|---|---|---|---|
execute_query | ✅ Real Data | Execute SQL queries on Datasphere tables/views with SQL→OData conversion | Yes (WRITE) |
Example queries:
"Execute query: SELECT * FROM SAP_SC_FI_AM_FINTRANSACTIONS LIMIT 10"
"Query: SELECT customer_id, amount FROM SALES_ORDERS WHERE status = 'COMPLETED' LIMIT 50"
"Get data: SELECT * FROM SAP_SC_HR_V_Divisions"
Real Data Features:
- SQL to OData Conversion: Automatically converts SQL queries to OData API calls
- Relational Consumption API:
/api/v1/datasphere/consumption/relational/{space_id}/{view_name} - Supported SQL Syntax:
SELECT *orSELECT column1, column2→ OData$selectWHERE conditions→ OData$filter(basic conversion)LIMIT N→ OData$top
- Query Safety: Max 1000 rows, 60-second timeout
- Error Handling: Helpful messages for table not found, parse errors, permission issues
SQL Conversion Examples:
SELECT * FROM CUSTOMERS WHERE country = 'USA' LIMIT 10
→ GET /relational/SPACE/CUSTOMERS?$filter=country eq 'USA'&$top=10
SELECT customer_id, name FROM ORDERS LIMIT 20
→ GET /relational/SPACE/ORDERS?$select=customer_id,name&$top=20
Limitations:
- No JOINs (OData single-table queries only)
- Basic WHERE clause conversion (simple comparisons work)
- No GROUP BY, ORDER BY (future enhancement)
- Table/view names are case-sensitive
Status: ✅ Fully functional with real SAP Datasphere data! Tested and confirmed working.
🧠 Smart Query Engine (1 tool) - 100% Real Data ✅ NEW v1.0.9!
| Tool | Status | Description | Requires Consent |
|---|---|---|---|
smart_query | ✅ Real Data | Intelligent SQL query router with client-side aggregation and multi-tier fallback | No (READ) |
Example queries:
"Query: SELECT * FROM SAP_SC_FI_V_ProductsDim LIMIT 5"
"Get product counts by category: SELECT PRODUCTCATEGORYID, COUNT(*) FROM SAP_SC_FI_V_ProductsDim GROUP BY PRODUCTCATEGORYID"
"Simple aggregation: SELECT COUNT(*), AVG(PRICE) FROM SAP_SC_FI_V_ProductsDim"
"Analytics with sorting: SELECT CATEGORY, COUNT(*), AVG(PRICE) FROM Products GROUP BY CATEGORY ORDER BY COUNT(*) DESC"
Real Data Features:
- Intelligent Routing: Automatically chooses between analytical and relational endpoints based on query type and asset capabilities
- Client-Side Aggregation: Full support for SQL aggregations when API doesn't support them
- Simple aggregations:
SELECT COUNT(*) FROM table(returns single row) - GROUP BY aggregations:
SELECT category, COUNT(*) FROM table GROUP BY category - All aggregate functions: COUNT, SUM, AVG, MIN, MAX
- Simple aggregations:
- Asset Capability Detection: Multi-strategy search to verify asset support before query execution
- Enhanced Error Messages: Fuzzy table name matching with actionable suggestions
- LIMIT Pushdown: Automatically converts SQL LIMIT to OData $top for optimal performance
- Multi-Tier Fallback: Primary (analytical) → Fallback (relational + aggregation) → Helpful error
Query Types Supported:
-- Simple queries
SELECT * FROM table LIMIT 10
-- Simple aggregations (NEW in v1.0.9)
SELECT COUNT(*) FROM table
SELECT COUNT(*), AVG(price), MAX(price) FROM table
-- GROUP BY aggregations
SELECT category, COUNT(*), AVG(price) FROM table GROUP BY category
-- Complex queries with ORDER BY
SELECT category, COUNT(*) as cnt FROM table GROUP BY category ORDER BY cnt DESC LIMIT 5
Performance:
- Response Times: 500ms - 2s depending on data volume
- Batch Size: Up to 50,000 records per query
- Optimization: LIMIT pushdown reduces data transfer by up to 95%
Status: ✅ Production-ready with comprehensive SQL support! All common query patterns working flawlessly (v1.0.7-v1.0.9 enhancements).
🏭 ETL-Optimized Relational Tools (4 tools) - 100% Real Data ✅ NEW Phase 5.1!
| Tool | Status | Description | Requires Consent |
|---|---|---|---|
list_relational_entities | ✅ Real Data | List all available relational entities (tables/views) within an asset for ETL operations | No (READ) |
get_relational_entity_metadata | ✅ Real Data | Get entity metadata with SQL type mappings (OData→SQL) for data warehouse loading | No (READ) |
query_relational_entity | ✅ Real Data | Execute OData queries with large batch processing (up to 50,000 records) for ETL extraction | No (READ) |
get_relational_odata_service | ✅ Real Data | Get OData service document with ETL planning capabilities and query optimization guidance | No (READ) |
Example queries:
"List all relational entities in SAP_CONTENT space for asset SAP_SC_SALES_V_Fact_Sales"
"Get entity metadata with SQL types for SAP_CONTENT/SAP_SC_SALES_V_Fact_Sales"
"Query relational entity from SAP_CONTENT, asset SAP_SC_SALES_V_Fact_Sales, entity Results, limit 1000"
"Get OData service document for SAP_CONTENT/SAP_SC_SALES_V_Fact_Sales with ETL capabilities"
Real Data Features:
- Large Batch Processing: Extract up to 50,000 records per query (vs 1,000 for execute_query)
- SQL Type Mapping: Automatic OData to SQL type conversion (NVARCHAR, BIGINT, DECIMAL, DATE, etc.)
- ETL Planning: Service discovery, entity enumeration, batch size recommendations
- Performance Optimization: Incremental extraction, parallel loading, pagination strategies
- Production Quality: Sub-second response times with real production data
ETL Use Cases:
- Data Warehouse Loading: Extract large datasets with proper SQL types for target databases
- Incremental Extraction: Use
$filterwith date columns for delta loads - Parallel Extraction: Use
$skipwith multiple concurrent requests for high-volume data - Schema Discovery: Get complete metadata with column types, precision, scale before ETL jobs
Advanced Query Capabilities:
OData Parameters Supported:
- $filter: Complex filtering expressions (e.g., "amount gt 1000 and status eq 'ACTIVE'")
- $select: Column projection (e.g., "customer_id,amount,date")
- $top/$skip: Pagination (up to 50K per batch)
- $orderby: Sorting (e.g., "amount desc, date asc")
SQL Type Mapping Examples:
Edm.String → NVARCHAR(MAX)
Edm.Int32 → INT
Edm.Int64 → BIGINT
Edm.Decimal → DECIMAL(18,2)
Edm.Double → DOUBLE
Edm.Date → DATE
Edm.DateTime → TIMESTAMP
Edm.Boolean → BOOLEAN
Endpoint Pattern:
GET /api/v1/datasphere/consumption/relational/{space}/{asset} → List entities
GET /api/v1/datasphere/consumption/relational/{space}/{asset}/$metadata → Get metadata
GET /api/v1/datasphere/consumption/relational/{space}/{asset}/{entity} → Query data
Status: ✅ All 4 tools fully functional with enterprise-grade ETL capabilities! Tested with real production sales data, achieving sub-second performance with large result sets.
🚀 Quick Start
Prerequisites
Python 3.10+
SAP Datasphere account with OAuth 2.0 configured
Technical User with appropriate permissions
Installation
# 1. Clone the repository
git clone https://github.com/MarioDeFelipe/sap-datasphere-mcp.git
cd sap-datasphere-mcp
# 2. Install dependencies
pip install -r requirements.txt
# 3. Configure OAuth credentials
cp .env.example .env
# Edit .env with your SAP Datasphere OAuth credentials
# 4. Start MCP Server
python sap_datasphere_mcp_server.py
Configuration
Create a .env file with your SAP Datasphere credentials:
# SAP Datasphere Connection
DATASPHERE_BASE_URL=https://your-tenant.eu10.hcs.cloud.sap
DATASPHERE_TENANT_ID=your-tenant-id
# OAuth 2.0 Credentials (Technical User)
DATASPHERE_CLIENT_ID=your-client-id
DATASPHERE_CLIENT_SECRET=your-client-secret
DATASPHERE_TOKEN_URL=https://your-tenant.authentication.eu10.hana.ondemand.com/oauth/token
# Optional: Mock Data Mode (for testing without real credentials)
USE_MOCK_DATA=false
⚠️ Important: Never commit your .env file to version control!
📖 Need help with OAuth setup? See the complete guide: OAuth Setup Guide
🤖 AI Assistant Integration
Claude Desktop
Option 1: Using npm (Recommended)
Add to your claude_desktop_config.json:
{
"mcpServers": {
"sap-datasphere": {
"command": "npx",
"args": ["@mariodefe/sap-datasphere-mcp"],
"env": {
"DATASPHERE_BASE_URL": "https://your-tenant.eu20.hcs.cloud.sap",
"DATASPHERE_CLIENT_ID": "your-client-id",
"DATASPHERE_CLIENT_SECRET": "your-client-secret",
"DATASPHERE_TOKEN_URL": "https://your-tenant.authentication.eu20.hana.ondemand.com/oauth/token"
}
}
}
}
Option 2: Using Python directly
{
"mcpServers": {
"sap-datasphere": {
"command": "python",
"args": ["-m", "sap_datasphere_mcp_server"],
"env": {
"DATASPHERE_BASE_URL": "https://your-tenant.eu20.hcs.cloud.sap",
"DATASPHERE_CLIENT_ID": "your-client-id",
"DATASPHERE_CLIENT_SECRET": "your-client-secret",
"DATASPHERE_TOKEN_URL": "https://your-tenant.authentication.eu20.hana.ondemand.com/oauth/token"
}
}
}
}
Location:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Example Natural Language Queries
Once configured, ask your AI assistant:
Space & Discovery:
"List all SAP Datasphere spaces"
"Show me the schema for the CUSTOMERS table"
"Search for tables containing 'sales' in SAP_CONTENT"
Metadata Exploration:
"Get the analytical metadata for REVENUE_ANALYSIS"
"Show me the catalog metadata schema"
"Get relational schema for FINANCIAL_TRANSACTIONS"
Analytical Queries:
"Query financial data where Amount > 1000"
"Get analytical model for SALES_ANALYTICS.REVENUE_ANALYSIS"
"Execute aggregation: group by Currency and sum Amount"
User Management:
"List all database users"
"Create a new database user named ETL_READER"
"Update permissions for user DB_USER_001"
Repository Objects:
"Get the complete definition for SAP_SC_FI_AM_FINTRANSACTIONS"
"Show me all assets in SAP_CONTENT space"
"Get repository search metadata"
🔒 Security Features
OAuth 2.0 Authentication
- ✅ Client Credentials Flow: Secure Technical User authentication
- ✅ Automatic Token Refresh: Tokens refreshed 60 seconds before expiration
- ✅ Encrypted Storage: Tokens encrypted in memory using Fernet encryption
- ✅ No Credentials in Code: All secrets loaded from environment variables
- ✅ Retry Logic: Exponential backoff for transient failures
Authorization & Consent
- ✅ Permission Levels: READ, WRITE, ADMIN, SENSITIVE
- ✅ User Consent: Interactive prompts for high-risk operations
- ✅ Audit Logging: Complete operation audit trails
- ✅ Input Validation: SQL injection prevention with 15+ attack patterns
- ✅ Data Filtering: Automatic PII and credential redaction
Security Best Practices
- 🔐 Environment-based Configuration: No hardcoded credentials
- 🔒 HTTPS/TLS: All communications encrypted
- 📝 Comprehensive Logging: Detailed security audit trails
- 🔑 Token Management: Automatic refresh and secure rotation
- 🛡️ SQL Sanitization: Read-only queries, injection prevention
🔏 PII / Sensitive-Field Masking
The server ships a config-driven, fail-closed PII masking layer that runs
inside the MCP response pipeline. Every data-returning tool
(smart_query, query_relational_entity, query_analytical_data,
get_space_assets, analyze_column_distribution) funnels results through
apply_masking() before the data reaches the LLM client.
Defense-in-depth note. The authoritative access control remains upstream (SAP Datasphere Data Access Controls / not granting the technical user access to PII tables). This layer is the enforced, auditable net on top — no prompt can bypass it.
Configuration
| Environment Variable | Values | Default | Purpose |
|---|---|---|---|
DATASPHERE_PII_POLICY | path to YAML or JSON | (unset) | Policy file path. When unset masking is fully disabled — backwards-compatible default. |
DATASPHERE_PII_MODE | enforce | audit_only | off | enforce (when policy present) | audit_only logs what would be masked but passes data through; off disables. |
DATASPHERE_PII_SALT | secret string | (empty) | Salt for deterministic hash / tokenize actions. Treat as a secret — never log. |
# .env
DATASPHERE_PII_POLICY=/etc/datasphere/pii_policy.yaml
DATASPHERE_PII_MODE=enforce
DATASPHERE_PII_SALT=my-very-secret-salt
Fail-closed behaviour
If DATASPHERE_PII_POLICY is set but the file is missing or unparseable,
the server raises a RuntimeError at startup and refuses to start. It never
silently falls back to serving raw data with a broken policy.
Policy file schema
See the bundled pii_policy.yaml for a full annotated
example. Key concepts:
mode: enforce # overridden by DATASPHERE_PII_MODE if set
default_action: redact # applied to value-pattern matches and unknown actions
rules:
# Most-specific match wins: asset-level > space-level > global > glob pattern
- space: ZDCS_08
asset: ZR_SAP_CUSTOMER
columns:
EMAIL: redact # → "***"
PHONE: partial:4 # keep last 4 chars → "******1234"
TAXID: hash # sha256(salt:value) — deterministic, supports grouping
SSN: drop # column removed from every returned row entirely
- space: "*" # applies to every space
columns:
"*IBAN*": tokenize # glob match on column name → "TKN_<8hex>"
allowlist:
enabled: true
assets:
ZDCS_08.ZR_OTC_CUST_MONTH: [CUSTOMER, MONTH, REVENUE] # ONLY these cols returned
patterns:
email: '[A-Za-z0-9._%+\-]+@[A-Za-z0-9.\-]+\.[A-Za-z]{2,}'
iban: '\b[A-Z]{2}\d{2}[A-Z0-9]{10,30}\b'
Masking actions
| Action | Result | Deterministic? |
|---|---|---|
redact | "***" | N/A |
drop | column removed from row | N/A |
hash | sha256(salt:value) hex string | ✅ — safe for GROUP BY / JOIN |
partial:N | last N chars kept, rest replaced with * | N/A |
tokenize | "TKN_<first8 of hash>" stable surrogate | ✅ |
Precedence
- Allowlist (strongest): if enabled for an asset, all non-listed columns are dropped before rules run.
- Column rules: most-specific match wins (asset > space > global; exact > glob).
- Value patterns: scanned on remaining string values; match →
default_action.
Audit log
Every tool call emits a structured log line at INFO level:
[pii_masking] space=ZDCS_08 asset=ZR_SAP_CUSTOMER rows=42
masked_fields=['EMAIL', 'PHONE', 'SSN'] mode=enforce
Raw masked values are never logged. This provides SIEM / EU-AI-Act evidence that masking fired on every call.
The MCP response also includes a masked_fields key listing which columns were
touched, so the LLM client can see what was withheld.
📊 Architecture
System Architecture
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ AI Assistant │◄──►│ MCP Server │◄──►│ SAP Datasphere │
│ (Claude, Cursor)│ │ 32 Tools │ │ (OAuth 2.0) │
│ │ │ Authorization │ │ │
│ │ │ Caching │ │ │
│ │ │ Telemetry │ │ │
└─────────────────┘ └──────────────────┘ └─────────────────┘
Core Components
Authentication Layer:
auth/oauth_handler.py- Token management and refreshauth/datasphere_auth_connector.py- Authenticated API connectorauth/authorization.py- Permission-based authorizationauth/consent_manager.py- User consent tracking
Security Layer:
auth/input_validator.py- Input validation frameworkauth/sql_sanitizer.py- SQL injection preventionauth/data_filter.py- PII and credential redaction
Performance Layer:
cache_manager.py- Intelligent caching with TTLtelemetry.py- Request tracking and metrics
MCP Server:
sap_datasphere_mcp_server.py- Main server (39 tools advertised, 49 with diagnostics)
🚀 Production Deployment
Quick Deployment Options
Docker (Recommended):
# Build and run
docker build -t sap-datasphere-mcp:latest .
docker run -d --name sap-mcp --env-file .env sap-datasphere-mcp:latest
# Using Docker Compose
docker-compose up -d
PyPI Package (Coming Soon):
pip install sap-datasphere-mcp
sap-datasphere-mcp
Kubernetes:
# Create secrets
kubectl create secret generic sap-mcp-secrets \
--from-literal=DATASPHERE_CLIENT_ID='...' \
--from-literal=DATASPHERE_CLIENT_SECRET='...'
# Deploy
kubectl apply -f k8s/deployment.yaml
kubectl scale deployment sap-mcp-server --replicas=5
Manual:
git clone https://github.com/MarioDeFelipe/sap-datasphere-mcp.git
cd sap-datasphere-mcp
pip install -r requirements.txt
cp .env.example .env # Edit with your credentials
python sap_datasphere_mcp_server.py
📖 See DEPLOYMENT.md for complete production deployment guide
📈 Performance Characteristics
Response Times
- ⚡ Metadata Queries: Sub-100ms (cached)
- ⚡ Catalog Queries: 100-500ms
- ⚡ OData Queries: 500-2000ms (depends on data volume)
- ⚡ Token Refresh: Automatic, transparent to user
Caching Strategy
- 📊 Spaces: 1 hour TTL
- 📦 Assets: 30 minutes TTL
- 🔍 Metadata: 15 minutes TTL
- 👥 Users: 5 minutes TTL
- 🔄 LRU Eviction: Automatic cleanup of old entries
Scalability
- 🔄 Concurrent Requests: Multiple simultaneous MCP operations
- 🛡️ Error Recovery: Automatic retry with exponential backoff
- 📊 Connection Pooling: Efficient resource management
🧪 Testing
Run Tests
# Test MCP server startup
python test_mcp_server_startup.py
# Test authorization coverage
python test_authorization_coverage.py
# Test input validation
python test_validation.py
# Test with MCP Inspector
npx @modelcontextprotocol/inspector python sap_datasphere_mcp_server.py
Test Results
Current suite: run pytest for the live number. The counts below are a
point-in-time record from the v1.0.x era and are kept for history only.
- ✅ 42/42 tools registered (as of v1.0.9) - All tools properly defined
- ✅ 42/42 tools authorized (as of v1.0.9) - Authorization permissions configured
- ✅ 41/42 tools working (as of v1.0.9) - 98% success rate
📁 Project Structure
sap-datasphere-mcp/
├── 📁 auth/ # Authentication & Security
│ ├── oauth_handler.py # OAuth 2.0 token management
│ ├── datasphere_auth_connector.py # Authenticated API connector
│ ├── authorization.py # Permission-based authorization
│ ├── consent_manager.py # User consent tracking
│ ├── input_validator.py # Input validation framework
│ ├── sql_sanitizer.py # SQL injection prevention
│ └── data_filter.py # PII and credential redaction
├── 📁 config/ # Configuration management
│ └── settings.py # Environment-based settings
├── 📁 docs/ # Documentation
│ ├── OAUTH_SETUP.md # OAuth setup guide
│ ├── TROUBLESHOOTING_CLAUDE_DESKTOP.md
│ └── OAUTH_IMPLEMENTATION_STATUS.md
├── 📄 sap_datasphere_mcp_server.py # Main MCP server (39 lean / 49 full)
├── 📄 odata_v4_annotations.py # OData V4 CSDL annotation reader (V2 fallback)
├── 📄 odata_filter.py # $filter parsing, validation, capability gating
├── 📄 asset_capability.py # Per-asset countability / filter profile
├── 📄 pii_masking.py # Config-driven PII masking (fail-closed)
├── 📄 error_helpers.py # Actionable error construction
├── 📄 tool_descriptions.py # Tool text and visibility profiles
├── 📄 cache_manager.py # Intelligent caching
├── 📄 telemetry.py # Monitoring and metrics
├── 📄 mock_data.py # Mock data for testing
├── 📄 pii_policy.yaml # Masking policy (editable)
├── 📄 .env.example # Configuration template
├── 📄 requirements.txt # Python dependencies
├── 📄 README.md # This file
└── 📄 ULTIMATE_TEST_RESULTS.md # Comprehensive test results
🙏 Acknowledgments
This MCP server was built with significant contributions from:
Amazon Kiro
Provided comprehensive specifications, architectural steering, and development guidance that shaped the MCP server's design and implementation.
Claude Code
AI-powered development assistant that contributed to:
Phase 1: Security & Authentication
- OAuth 2.0 implementation with automatic token refresh
- Permission-based authorization (READ, WRITE, ADMIN, SENSITIVE)
- User consent flows for high-risk operations
- Input validation and SQL sanitization
- Sensitive data filtering and PII redaction
Phase 2: UX & AI Interaction
- Enhanced tool descriptions with examples
- Intelligent error messages with recovery suggestions
- Parameter validation with clear format requirements
Phase 3: Performance & Monitoring
- Intelligent caching with category-based TTL
- Comprehensive telemetry and metrics
- Performance optimization (up to 95% faster for cached queries)
Phase 4: Repository & Analytics
- Repository object discovery tools
- Analytical model access and OData query support
- Metadata extraction and schema discovery
Mock Data Remediation Journey:
- Phase 1: Database User Management (5/5 tools) - SAP CLI integration ✅
- Phase 2: API Syntax Fixes (4/4 tools) - OData filter workarounds ✅
- Phase 3: HTML Response Fixes (2/2 tools) - Graceful degradation ✅
- Phase 4: Search Workarounds (2/2 tools) - Client-side search ✅
- Achievement: From 42.9% → 80% real data integration! 🎯
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
📞 Support
- 📚 Documentation: See
/docsfolder for detailed guides - 🐛 Issues: GitHub Issues
- 💬 Discussions: GitHub Discussions
- 📖 SAP Datasphere: Official Documentation
- 🤖 MCP Protocol: Model Context Protocol
🎯 Roadmap
Completed ✅
- OAuth 2.0 authentication with automatic token refresh
- 35 MCP tools implementation
- 🎯 TARGET ACHIEVED: 80% real data integration (28/35 tools)
- Authorization and consent management
- Input validation and SQL sanitization
- Intelligent caching and telemetry
- Phase 1: Database User Management (5/5 tools) - SAP CLI integration
- Phase 2: API Syntax Fixes (4/4 tools) - OData filter workarounds
- Phase 3: HTML Response Fixes (2/2 tools) - Graceful degradation
- Phase 4: Search Workarounds (2/2 tools) - Client-side search
- Comprehensive testing with real SAP Datasphere tenant
- 36+ real assets discovered (HR, Finance, Sales, Time dimensions)
- 100% Foundation, Catalog, Search, Metadata & User Management Tools
Future Enhancements 🔮
- Analytical tools real data integration (requires tenant configuration)
- Enhanced query execution capabilities
- Additional permission scopes for restricted endpoints
- Vector database integration for semantic search
- Real-time event streaming
- Advanced schema visualization
- Multi-tenant support
- Machine learning integration
History
Features 17, Other 43
Notes
🚀 Major Platform Vision Evolution
Comprehensive SAP-to-AWS Integration Platform
- NEW: Platform vision expanded from metadata sync to full SAP-to-AWS integration platform
- NEW: Multi-pattern integration support (Federation, Replication, Direct Query)
- NEW: AI-powered integration agent for SAP Datasphere expertise
- NEW: Comprehensive asset discovery and cataloging with business context
- NEW: RAG-powered metadata chatbot for intelligent data discovery
Intelligent Data Replication with AWS Glue ETL
- NEW: AWS Glue ETL-based replication replacing Lambda approach for better performance
- NEW: Apache Iceberg integration with S3 Tables for ACID transactions
- NEW: Dynamic Glue ETL script generation for SAP Datasphere OData extraction
- NEW: Real-time monitoring and validation system with cost tracking
- NEW: Intelligent partitioning strategies and schema evolution support
Web Dashboard Enhancements
- ENHANCED: Port configuration updated from 8000 to 8001 for DOG environment
- ENHANCED: Connection testing interface with real SAP Datasphere and AWS Glue validation
- ENHANCED: Features page with comprehensive capability overview
- ENHANCED: Connection page with OAuth configuration and testing
- ENHANCED: Real-time asset discovery showing 57 live assets from AWS Glue
RAG-Powered Metadata Chatbot System
- NEW: Vector database integration for semantic metadata search
- NEW: Automated metadata ingestion pipeline from all SAP APIs
- NEW: Natural language interface for fundamental data questions
- NEW: Real-time synchronization between APIs and vector database
- NEW: Business context preservation in conversational format
🔧 Technical Improvements
Architecture Updates
- IMPROVED: Three-environment architecture clarification (DOG with live connections)
- IMPROVED: Design document updated to reflect AWS Glue ETL approach
- IMPROVED: Requirements expanded to include platform vision and RAG capabilities
- IMPROVED: Task structure reorganized with 9 new major task categories (16-24)
Connection and Authentication
- FIXED: Port mismatch issues between frontend and backend (8000 vs 8001)
- ENHANCED: Health check endpoint for connection validation
- ENHANCED: Client secret handling for "FROM_BACKEND" placeholder
- ENHANCED: Connection testing with comprehensive validation results
Web Dashboard Functionality
- ADDED: Missing navigation links for Features and Connection pages
- ADDED: API endpoints for connection testing and configuration management
- ADDED: Real-time connection validation with detailed test results
- ADDED: Comprehensive feature overview with development timeline
📊 Platform Capabilities Added
Asset Discovery and Cataloging
- NEW: Unified asset discovery engine with business context
- NEW: Integration pattern recommendation engine
- NEW: Asset cataloging and classification system
- NEW: Performance and cost impact analysis
AI-Powered Integration Agent
- NEW: SAP Datasphere integration expert knowledge base
- NEW: Replication flow design assistance
- NEW: Manual guidance system for API limitations
- NEW: Agent learning and improvement system
Multi-Pattern Integration Support
- NEW: Federation pattern for real-time queries
- NEW: Direct Query pattern for on-demand access
- NEW: Hybrid pattern orchestration
- NEW: Pattern governance and monitoring
Enterprise Governance and Monitoring
- NEW: Unified governance framework
- NEW: Comprehensive monitoring and alerting
- NEW: Data lineage and impact analysis
- NEW: Enterprise reporting and analytics
🎯 Business Value Delivered
Intelligent Data Discovery
- ACHIEVED: Natural language search across all Datasphere assets
- ACHIEVED: Business terminology mapping to technical names
- ACHIEVED: Contextual recommendations and explanations
- ACHIEVED: Multi-turn conversations with memory
Real-time Knowledge Management
- ACHIEVED: 15-minute sync between APIs and vector database
- ACHIEVED: Live integration status monitoring
- ACHIEVED: Automatic embedding updates on metadata changes
- ACHIEVED: Consistent data across all sources
Enterprise-Grade Capabilities
- ACHIEVED: Governance policy explanations and compliance guidance
- ACHIEVED: Data classification and sensitivity management
- ACHIEVED: Impact analysis for data movement decisions
- ACHIEVED: Automated compliance checking assistance
Features 36, Performance 4, Docs 4, Other 4
Notes
🚀 Major Features Added
Model Context Protocol (MCP) Server
- NEW: Complete MCP server implementation for AI assistant integration
- NEW: Support for Claude Desktop, Cursor IDE, and other MCP-compatible AI tools
- NEW: Six comprehensive MCP tools for metadata operations:
search_metadata- Unified search across SAP and AWSdiscover_spaces- OAuth-enabled space discoveryget_asset_details- Detailed asset information with schemaget_sync_status- Synchronization monitoringexplore_data_lineage- Data relationship tracingtrigger_sync- AI-controlled sync operations
Three-Environment Architecture
- NEW: Dog Environment (Development) - FastAPI web dashboard on port 8001
- NEW: Wolf Environment (Testing) - FastAPI application on port 5000
- NEW: Bear Environment (Production) - AWS Lambda serverless deployment
- NEW: Environment-specific configuration and security controls
Intelligent Data Replication
- NEW: User-controlled selective data replication to AWS S3 Tables
- NEW: Apache Iceberg integration with ACID transactions
- NEW: AWS Glue ETL jobs for scalable Spark-based processing
- NEW: Real-time progress monitoring with WebSocket updates
- NEW: Comprehensive data validation and quality checks
Enhanced Metadata Discovery
- NEW: CSDL metadata extraction from SAP Datasphere OData services
- NEW: Business context preservation with rich annotations
- NEW: Multi-language support for global deployments
- NEW: Hierarchical relationship tracking for analytical models
🔧 Enhanced Components
OAuth 2.0 Authentication
- ENHANCED: Full OAuth Authorization Code Flow implementation
- ENHANCED: Automatic token refresh and secure storage
- ENHANCED: Environment-specific OAuth callback handling
- ENHANCED: Browser-based authentication for enhanced API access
AWS Integration
- ENHANCED: S3 Tables integration with Apache Iceberg format
- ENHANCED: Glue Data Catalog with rich business metadata
- ENHANCED: Automated ETL job creation and management
- ENHANCED: Advanced tagging and classification strategies
Web Dashboard
- ENHANCED: Multi-environment deployment support
- ENHANCED: Real-time replication monitoring interface
- ENHANCED: Asset selection and configuration UI
- ENHANCED: Live progress tracking with detailed logs
📊 Production Achievements
Real Data Integration
- ACHIEVED: Successfully replicated SAP_SC_FI_T_Products (2.5M records)
- ACHIEVED: Integrated 14 real assets across multiple spaces
- ACHIEVED: Production-tested with 197K+ record datasets
- ACHIEVED: End-to-end validation with business data
Performance Metrics
- ACHIEVED: Sub-100ms MCP response times for AI queries
- ACHIEVED: 10+ concurrent MCP requests supported
- ACHIEVED: 2.5M record replication via Glue ETL jobs
- ACHIEVED: 99.9% uptime with auto-recovery capabilities
🛠️ Technical Improvements
Code Quality
- IMPROVED: Comprehensive error handling and retry logic
- IMPROVED: Structured logging with audit trails
- IMPROVED: Type hints and Pydantic model validation
- IMPROVED: Modular architecture with clear separation of concerns
Testing & Validation
- ADDED: Comprehensive MCP server test suite
- ADDED: OAuth authentication validation tests
- ADDED: Real API integration tests
- ADDED: End-to-end replication validation
Documentation
- ADDED: Complete MCP Server setup guide
- ADDED: AI assistant integration examples
- ADDED: Comprehensive API documentation
- ADDED: Troubleshooting and performance guides
Features 12, Other 8
Notes
🔄 Metadata Synchronization Platform
Core Synchronization Engine
- NEW: Priority-based job scheduling (Critical, High, Medium, Low)
- NEW: Multi-threaded job processing with resource management
- NEW: Conflict resolution strategies for schema and naming conflicts
- NEW: Incremental synchronization with change detection
Enhanced Connectors
- NEW: SAP Datasphere connector with OAuth 2.0 support
- NEW: AWS Glue connector with IAM authentication
- NEW: Business context preservation across systems
- NEW: Advanced asset mapping and transformation rules
Web Dashboard
- NEW: Real-time monitoring interface with WebSocket support
- NEW: Job management and asset catalog
- NEW: System health monitoring and metrics
- NEW: Bootstrap 5 responsive UI design
📈 Business Intelligence Features
Asset Management
- NEW: Comprehensive asset discovery and cataloging
- NEW: Business metadata integration and preservation
- NEW: Data lineage tracking and visualization
- NEW: Automated classification and tagging
Analytics Integration
- NEW: AWS Glue Data Catalog optimization for analytics
- NEW: Business-friendly naming conventions
- NEW: Hierarchical relationship preservation
- NEW: Multi-language business label support
Features 4, Other 7
Notes
🎯 Initial Release
Foundation Components
- NEW: Basic SAP Datasphere API integration
- NEW: AWS Glue Data Catalog connectivity
- NEW: Simple metadata synchronization
- NEW: Configuration management system
Core Features
- NEW: Space and asset discovery
- NEW: Basic schema mapping
- NEW: Simple web interface
- NEW: Logging and error handling
Authentication
- NEW: SAP Datasphere API token authentication
- NEW: AWS IAM role-based access
- NEW: Basic credential management
Others providing
- mcp-sap-datasphere-servermcp-sap-datasphere-serverThe read-only Datasphere server: explore spaces, list assets, preview rows, profile columns and summarise analytical models — and nothing that changes anything, by design.independent, btpRead-only MCP server for exploring SAP Datasphere
- mcp-integration-suitemcp-integration-suiteAn experimental Node MCP server covering the general CPI functions of the Integration Suite, which its author recommends running alongside the TPM server for Trading Partner Management.independent, btpMCP server for the general Integration Suite functionsfrom BTP/BAIP
- mcp-is-tpmmcp-is-tpmA Java MCP server for Trading Partner Management in the Integration Suite, where trading partners, their agreements and their B2B configuration live, paired by its author with the general server.independent, btpJava MCP server for Integration Suite Trading Partner Managementfrom BTP/BAIP
- @abap2ui5/mcp-server@abap2ui5/mcp-serverAn MCP server that puts the abap2UI5 development loop on the machine an agent runs on: check the view the ABAP builds, photograph it, deploy the class into a sandbox, boot the app headless and read the errors.community org, abapMCP server for the abap2UI5 check, deploy and run loopfrom ABAP
- abap2UI5 for VS Codeabap2UI5 for VS CodeA VS Code extension for abap2UI5 apps: F9 starts the app class in a preview beside the source, Ctrl+F3 activates the class and reloads it, and the abap2UI5 linter runs in the editor while you type.community org, abapVS Code extension to preview, activate and lint abap2UI5 appsfrom ABAP
- SF-MCPSF-MCPSixty-two purpose-built tools over SAP SuccessFactors' OData APIs — employee data, permissions, compliance reports and HR administration, asked for in plain language.independent, successfactorsMCP server with 62 tools over SAP SuccessFactors OData APIsfrom SAP SuccessFactors
- hybris-mcp-litehybris-mcp-liteA read-only MCP server that answers questions about a local SAP Commerce Cloud instance by calling HAC, so types, beans, configuration, cronjobs, logs and FlexibleSearch come back in the editor.independent, commerceRead-only MCP server over a local SAP Commerce Cloud's HACfrom SAP Commerce
- calmcpcalmcpAn MCP server in front of the SAP Cloud ALM APIs: four read tools over tasks, projects, features, documents, tests and analytics, run over stdio locally or Streamable HTTP on Cloud Foundry.independent, btpMCP server with read tools over the SAP Cloud ALM APIsfrom BTP/BAIP
- CostingGeek/sap-mcpCostingGeek/sap-mcpA Python server that fetches sales orders from SAP's business data graph and hands them to Claude Desktop — the only entry here pointed at that API rather than at one system's own services.independent, btpPython MCP server fetching sales orders from SAP's business data graphfrom BTP/BAIP
- mcp-sap-focusedrunmcp-sap-focusedrunSAP Focused Run's Landscape Management Database as MCP tools — hosts, systems, databases, cloud tenants, technical instances, ABAP clients, software components and product versions.independent, btpMCP tools over SAP Focused Run's Landscape Management Databasefrom BTP/BAIP
- abapsmithabapsmithAn MCP server that lets an LLM develop in ABAP on a live system over ADT, with writes off by default and every mutation recorded in a local journal that can undo it.independent, abapABAP MCP server over ADT with a local journal that can undo writesfrom ABAP
- cloud-alm-itsm-mcpcloud-alm-itsm-mcpQueries installations through SAP Cloud ALM's ITSM API — filtered by system type or customer number, with OAuth token handling and caching done for you.independent, btpMCP server querying installations via the SAP Cloud ALM ITSM APIfrom BTP/BAIP
- hana-mcp-serverhana-mcp-serverSchema discovery and guard-railed SQL against SAP HANA and HANA Cloud, with an optional layer of business metadata so an agent reads a coded column the way the business does.independent, btpMCP server for schema discovery and guarded SQL on SAP HANAfrom BTP/BAIP
- sap_analytics_cloud_mcpsap_analytics_cloud_mcpThe SAP Analytics Cloud REST API as ninety tools across eleven service areas — content, data import and export, user management, transport, scheduling and translation.independent, btpMCP server for the SAP Analytics Cloud REST APIfrom BTP/BAIP
- mcp-sap-cpimcp-sap-cpiThe runtime half of Cloud Integration: failed messages with their full processing logs and traces, artifact deployment, security material, and a health summary.independent, btpMCP server for Cloud Integration runtime: messages, logs, deploymentfrom BTP/BAIP
- AI Core MCP ServerAI Core MCP ServerAn MCP server that exposes SAP AI Core's APIs as tools, defined entirely in one JSON config file for a proxy, so deployments, configurations and scenarios are managed through an assistant.independent, btpSAP AI Core APIs as MCP tools from one JSON config filefrom BTP/BAIP
- BTP CF MCP ServerBTP CF MCP ServerThe Cloud Foundry V3 API on SAP BTP as MCP tools — apps, orgs, spaces, services, routes and quotas — declared in one JSON config file and run by odata-mcp-proxy.independent, btpCloud Foundry V3 API on SAP BTP as MCP toolsfrom BTP/BAIP
- BTP MCP ServerBTP MCP ServerBTP Core Services as MCP tools, and the only server in this corner that renders dashboards inside the chat — a subaccount overview with drill-down, a geomap of data-centre locations, consumption and users.independent, btpBTP Core Services as MCP tools with in-chat dashboardsfrom BTP/BAIP
- btp-sap-odata-to-mcp-serverbtp-sap-odata-to-mcp-serverExposes every OData service on an S/4HANA or ECC system as MCP tools, in three discovery levels so a large catalogue does not have to be loaded at once.independent, btpExposes S/4HANA or ECC OData services as MCP toolsfrom BTP/BAIP
- CI MCP ServerCI MCP ServerAn MCP server that exposes SAP Cloud Integration's OData APIs as tools, defined entirely in one JSON config file, so an assistant works integration content, logs and configurations in natural language.independent, btpSAP Cloud Integration OData APIs as MCP toolsfrom BTP/BAIP
- odata-mcp-proxyodata-mcp-proxyA config-driven proxy that turns OData and REST endpoints into MCP tools from a JSON file — no code — and runs on BTP Cloud Foundry against BTP Destinations.independent, btpConfig-driven proxy turning OData and REST endpoints into MCP toolsfrom BTP/BAIP
- sap-pi-mcp-serversap-pi-mcp-serverThe only entry pointed at SAP PI and PO rather than at Cloud Integration — monitoring and Integration Directory metadata from the middleware that came before.independent, btpMCP server for SAP PI and PO monitoring and directory metadatafrom BTP/BAIP
- sap-bdc-mcp-serversap-bdc-mcp-serverAn MCP server over SAP's BDC Connect SDK that creates, validates, publishes and deletes Databricks Delta shares as data products in SAP Business Data Cloud.independent, btpMCP server managing Delta shares in SAP Business Data Cloudfrom BTP/BAIP
- midasol/sap-mcp-servermidasol/sap-mcp-serverA Python MCP server for SAP Gateway with four read-only tools that authenticate, query, fetch one entity and list services, and one of the few here that publishes its test results.independent, btpPython MCP server for SAP Gateway OData operationsfrom BTP/BAIP
- odata_mcp_goodata_mcp_goA Go binary that bridges any OData v2 or v4 service to MCP — and can collapse the whole service into one tool when the generated tool list is too large to be usable.independent, btpGo binary bridging any OData v2 or v4 service to MCPfrom BTP/BAIP
- odata_mcpodata_mcpThe 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.independent, btpPython bridge generating MCP tools from OData v2 metadatafrom BTP/BAIP
- sap-bdc-mcpsap-bdc-mcpDiscovery and contract tooling for SAP Business Data Cloud — ORD discovery, CSN contract checks and non-executing share planning — behind redaction, policy gates and bounded output.independent, btpMCP tooling for SAP Business Data Cloud discovery and contractsfrom BTP/BAIP
- mcp-sap-datasphere-servermcp-sap-datasphere-serverThe read-only Datasphere server: explore spaces, list assets, preview rows, profile columns and summarise analytical models — and nothing that changes anything, by design.independent, btpRead-only MCP server for exploring SAP Dataspherefrom BTP/BAIP
- sap-mcp-serversap-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.independent, abapReads 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.from ABAP
- cap-mcp-bridgecap-mcp-bridgePoints at a running CAP or OData V4 service, reads its $metadata, and turns what it finds into MCP tools — list, describe, query with validated filters, expand, and invoke functions and actions.independent, capMCP server generating tools from a CAP or OData V4 service's metadatafrom CAP
- MCP Server for SAP BTP AdministrationMCP Server for SAP BTP AdministrationSAP-hosted MCP endpoint that exposes BTP account administration — accounts, security, services and connectivity — as tools an AI client discovers and calls on your behalf.sap official, btpSAP-hosted MCP endpoint for BTP account administrationfrom BTP/BAIP
- SAP LeanIX MCP ServerSAP LeanIX MCP ServerHosted MCP endpoint onto an SAP LeanIX instance, exposing selected enterprise-architecture APIs as tools — fact sheets, applications, completeness and custom reports.sap official, btpHosted MCP endpoint onto an SAP LeanIX instancefrom BTP/BAIP
- SAP-samples/hana-cli-claude-pluginSAP-samples/hana-cli-claude-pluginA Claude Code plugin that registers the MCP server of hana-cli, so Claude Code can work on SAP HANA Cloud and on-premise SAP HANA databases.sap official, btpClaude Code plugin registering hana-cli's MCP serverfrom BTP/BAIP
- SAP-samples/hana-developer-cli-tool-exampleSAP-samples/hana-developer-cli-tool-exampleA developer-centric command line for SAP HANA, built for local development outside SAP tooling and connecting to a local, cloud or remote HANA instance the same way.sap official, btpDeveloper-centric command line for SAP HANAfrom BTP/BAIP
- Skybuffer AI MCP serverSkybuffer AI MCP serverAn ABAP add-on that serves SAP business data, transactions and development context as MCP tools from an ICF node inside SAP ECC and S/4HANA, each call running as the signed-in user under PFCG authorization checks.independent, abapABAP add-on serving business data and transactions as MCP toolsfrom ABAP
- sap-security-mcpsap-security-mcpAn entirely read-only security analysis surface: nineteen tools, five resources and eight prompts for audits, SOX and segregation-of-duties review, behind OAuth 2.0 with PKCE. The vendor hosts an endpoint, and the README documents running it yourself.independent, abapRead-only security analysis MCP server for SAP audits and SoD reviewfrom ABAP
- cpi-mcp-servercpi-mcp-serverA Go server over Cloud Integration's design-time content — integration packages and integration flows, listed and searched by id, version, name, vendor or mode.independent, btpGo MCP server over Cloud Integration packages and integration flowsfrom BTP/BAIP
- KlystronKlystronAn MCP server written in ABAP that runs inside the application server behind an ICF service and exposes typed tools for ABAP development, quality, transports, customizing, roles, Basis operations and integration, with a client-side plugin of SAP skills.independent, abapMCP server in ABAP inside the application server, with agent skillsfrom ABAP
- pyrfc-mcppyrfc-mcpAn MCP server for calling an SAP system's RFC-enabled function modules from an agent, built so that discovering a function does not authorise calling it: a read or a write is denied unless the function name matches an allowlist the server is configured with.independent, abapMCP server calling RFC-enabled function modules behind an allowlistfrom ABAP
- SAP Analytics CloudSAP Analytics CloudSAP's SaaS front end for analytics: business intelligence, planning and predictive in one product, and the place a Datasphere analytic model is meant to end up being read.sap official, btpSaaS for business intelligence, planning and predictive analyticsfrom BTP/BAIP
- SAP DatasphereSAP DatasphereSAP's cloud data warehouse: spaces, modelled views and analytic models over data brought in or federated from source systems, with the business context carried along rather than rebuilt.sap official, btpCloud data warehouse with spaces, views and analytic modelsfrom BTP/BAIP
- bw-modeling-mcpbw-modeling-mcpReads, creates and modifies BW/4HANA modelling objects through the same internal APIs Eclipse BWMT and the BW/4HANA Cockpit use — and can run centrally on BTP with each caller reaching BW as themselves.independent, btpMCP server for BW/4HANA modelling objectsfrom BTP/BAIP
- sap_analytics_cloud_mcpsap_analytics_cloud_mcpThe SAP Analytics Cloud REST API as ninety tools across eleven service areas — content, data import and export, user management, transport, scheduling and translation.independent, btpMCP server for the SAP Analytics Cloud REST APIfrom BTP/BAIP
- MBT Logical Object ListerMBT Logical Object ListerAn app that reads the object model of an SAP BW, SAP BPC or SAP BW/4HANA system and displays its metadata, deployed into that system with the MBT Installer rather than abapGit.independent, abapMetadata viewer for SAP BW, SAP BPC and SAP BW/4HANA object modelsfrom ABAP
- SAP Datasphere Plugin for ClaudeSAP Datasphere Plugin for ClaudeEighteen Datasphere skills over a bundled 45-tool MCP server — exploration, view and analytic-model design, BW Bridge migration, security architecture and catalog governance.independent, btpEighteen Datasphere skills over a bundled MCP serverfrom BTP/BAIP
- SAP Analytics CloudSAP Analytics CloudSAP's SaaS front end for analytics: business intelligence, planning and predictive in one product, and the place a Datasphere analytic model is meant to end up being read.sap official, btpSaaS for business intelligence, planning and predictive analyticsfrom BTP/BAIP
- SAP DatasphereSAP DatasphereSAP's cloud data warehouse: spaces, modelled views and analytic models over data brought in or federated from source systems, with the business context carried along rather than rebuilt.sap official, btpCloud data warehouse with spaces, views and analytic modelsfrom BTP/BAIP
- ERPLERPLA DuckDB extension that reads SAP ERP tables, CDS views and BW queries from SQL over RFC, BICS and ODP, and can mount an SAP system as a DuckDB catalog to join against other data.independent, abapDuckDB extension reading SAP ERP tables, CDS views and BW queriesfrom ABAP
- bw-modeling-mcpbw-modeling-mcpReads, creates and modifies BW/4HANA modelling objects through the same internal APIs Eclipse BWMT and the BW/4HANA Cockpit use — and can run centrally on BTP with each caller reaching BW as themselves.independent, btpMCP server for BW/4HANA modelling objectsfrom BTP/BAIP
- sap_analytics_cloud_mcpsap_analytics_cloud_mcpThe SAP Analytics Cloud REST API as ninety tools across eleven service areas — content, data import and export, user management, transport, scheduling and translation.independent, btpMCP server for the SAP Analytics Cloud REST APIfrom BTP/BAIP
- pawelwiejkut/bw_remove_characterspawelwiejkut/bw_remove_charactersAn ABAP class for a BW transformation's end routine that strips the characters an InfoObject cannot accept, checked against transaction RSKC, before they cause an activation error.independent, abapABAP class stripping invalid characters in BW end routinesfrom ABAP
- pawelwiejkut/bw_trfn_pocketknifepawelwiejkut/bw_trfn_pocketknifeA framework that handles SAP BW transformation start routines from a customisation table with its own maintenance view, instead of a routine class written per transformation.independent, abapFramework for BW transformation start routines from a tablefrom ABAP
- dbt-sap-hana-clouddbt-sap-hana-cloudA dbt adapter, installed as a Python package beside dbt-core, that lets a dbt project target SAP HANA Cloud as its warehouse through a profile in profiles.yml.sap official, btpdbt adapter targeting SAP HANA Cloud as its warehousefrom BTP/BAIP
- SAP Business Data CloudSAP Business Data CloudSAP's umbrella over the data estate: installed intelligent content and data products, a governed catalog they are published through, and a path out to SAP Databricks.sap official, btpData products, a governed catalog and a path to SAP Databricksfrom BTP/BAIP
- SAP DatasphereSAP DatasphereSAP's cloud data warehouse: spaces, modelled views and analytic models over data brought in or federated from source systems, with the business context carried along rather than rebuilt.sap official, btpCloud data warehouse with spaces, views and analytic modelsfrom BTP/BAIP
- SAP Datasphere Plugin for ClaudeSAP Datasphere Plugin for ClaudeEighteen Datasphere skills over a bundled 45-tool MCP server — exploration, view and analytic-model design, BW Bridge migration, security architecture and catalog governance.independent, btpEighteen Datasphere skills over a bundled MCP serverfrom BTP/BAIP
- sap-bdc-mcp-serversap-bdc-mcp-serverAn MCP server over SAP's BDC Connect SDK that creates, validates, publishes and deletes Databricks Delta shares as data products in SAP Business Data Cloud.independent, btpMCP server managing Delta shares in SAP Business Data Cloudfrom BTP/BAIP
- sap-bdc-mcpsap-bdc-mcpDiscovery and contract tooling for SAP Business Data Cloud — ORD discovery, CSN contract checks and non-executing share planning — behind redaction, policy gates and bounded output.independent, btpMCP tooling for SAP Business Data Cloud discovery and contractsfrom BTP/BAIP
- mcp-sap-datasphere-servermcp-sap-datasphere-serverThe read-only Datasphere server: explore spaces, list assets, preview rows, profile columns and summarise analytical models — and nothing that changes anything, by design.independent, btpRead-only MCP server for exploring SAP Dataspherefrom BTP/BAIP
Details
Sources
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
Contributors
Show 122 more
History in the atlas
- 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.
- Triaged out of data/crawled/mcp-candidates.json, the sap-ai-mcp-servers sweep. Filed on the BTP door: Datasphere, Analytics Cloud, Business Data Cloud, BW/4HANA and HANA Cloud are BTP services, and the atlas has no data-and-analytics door — an open question recorded in docs/NEIGHBOURS.md rather than settled by a placement. Written from the repository's own README.
- capability:analytic-modelling was named the same day. Until then this artifact answered only "is an MCP server", which said what it is and not what it is for.
- capability:warehouse-loading was named the same day. Until then this artifact answered only "is an MCP server", which said what it is and not what it is for.
- capability:data-cataloguing was named the same day. Until then this artifact answered only "is an MCP server", which said what it is and not what it is for.
- First seen.
For your agent
- Ref
artifact:mariodefelipe-sap-datasphere-mcp- JSON
- /artifacts/mariodefelipe-sap-datasphere-mcp.json
- MCP
- Connecting an agent