sap-datasphere-mcp 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sap_datasphere_mcp-0.1.0/.env.example +22 -0
- sap_datasphere_mcp-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- sap_datasphere_mcp-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +25 -0
- sap_datasphere_mcp-0.1.0/.github/workflows/ci.yml +72 -0
- sap_datasphere_mcp-0.1.0/.github/workflows/release.yml +43 -0
- sap_datasphere_mcp-0.1.0/.gitignore +105 -0
- sap_datasphere_mcp-0.1.0/.pypirc +13 -0
- sap_datasphere_mcp-0.1.0/CHANGELOG.md +40 -0
- sap_datasphere_mcp-0.1.0/LICENSE +21 -0
- sap_datasphere_mcp-0.1.0/PKG-INFO +162 -0
- sap_datasphere_mcp-0.1.0/PUBLISHING_CHECKLIST.md +88 -0
- sap_datasphere_mcp-0.1.0/README.md +127 -0
- sap_datasphere_mcp-0.1.0/SETUP.md +201 -0
- sap_datasphere_mcp-0.1.0/examples/basic_usage.py +79 -0
- sap_datasphere_mcp-0.1.0/publish.py +290 -0
- sap_datasphere_mcp-0.1.0/pyproject.toml +102 -0
- sap_datasphere_mcp-0.1.0/quick_test.py +100 -0
- sap_datasphere_mcp-0.1.0/requirements-dev.txt +22 -0
- sap_datasphere_mcp-0.1.0/requirements.txt +9 -0
- sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/__init__.py +13 -0
- sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/__main__.py +9 -0
- sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/auth.py +91 -0
- sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/client.py +319 -0
- sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/models.py +94 -0
- sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/server.py +433 -0
- sap_datasphere_mcp-0.1.0/setup_credentials.py +123 -0
- sap_datasphere_mcp-0.1.0/test_with_real_credentials.py +99 -0
- sap_datasphere_mcp-0.1.0/tests/__init__.py +1 -0
- sap_datasphere_mcp-0.1.0/tests/test_models.py +111 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# SAP Datasphere Configuration
|
|
2
|
+
DATASPHERE_TENANT_URL=https://your-tenant-id.eu10.hcs.cloud.sap
|
|
3
|
+
DATASPHERE_TENANT_ID=your-tenant-id
|
|
4
|
+
|
|
5
|
+
# OAuth 2.0 Credentials (from SAP Datasphere Admin Console)
|
|
6
|
+
OAUTH_CLIENT_ID=sb-your-client-id!b130936|client!b3944
|
|
7
|
+
OAUTH_CLIENT_SECRET=your-client-secret
|
|
8
|
+
OAUTH_TOKEN_URL=https://your-subdomain.authentication.eu20.hana.ondemand.com/oauth/token
|
|
9
|
+
OAUTH_AUTHORIZATION_URL=https://your-subdomain.authentication.eu20.hana.ondemand.com/oauth/authorize
|
|
10
|
+
|
|
11
|
+
# Optional: Logging Configuration
|
|
12
|
+
LOG_LEVEL=INFO
|
|
13
|
+
LOG_FORMAT=json
|
|
14
|
+
|
|
15
|
+
# Optional: API Configuration
|
|
16
|
+
API_TIMEOUT=30
|
|
17
|
+
API_RETRY_COUNT=3
|
|
18
|
+
API_RATE_LIMIT=100
|
|
19
|
+
|
|
20
|
+
# Optional: Cache Configuration
|
|
21
|
+
CACHE_ENABLED=true
|
|
22
|
+
CACHE_TTL=300
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Create a report to help us improve
|
|
4
|
+
title: ''
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
**Describe the bug**
|
|
11
|
+
A clear and concise description of what the bug is.
|
|
12
|
+
|
|
13
|
+
**To Reproduce**
|
|
14
|
+
Steps to reproduce the behavior:
|
|
15
|
+
1. Configure with '...'
|
|
16
|
+
2. Run command '....'
|
|
17
|
+
3. See error
|
|
18
|
+
|
|
19
|
+
**Expected behavior**
|
|
20
|
+
A clear and concise description of what you expected to happen.
|
|
21
|
+
|
|
22
|
+
**Environment:**
|
|
23
|
+
- OS: [e.g. Windows, macOS, Linux]
|
|
24
|
+
- Python version: [e.g. 3.11]
|
|
25
|
+
- SAP Datasphere MCP version: [e.g. 0.1.0]
|
|
26
|
+
- SAP Datasphere tenant region: [e.g. eu10, us10]
|
|
27
|
+
|
|
28
|
+
**Configuration (remove sensitive data):**
|
|
29
|
+
```env
|
|
30
|
+
DATASPHERE_TENANT_URL=https://your-tenant.eu10.hcs.cloud.sap
|
|
31
|
+
# OAuth credentials removed for security
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Error logs:**
|
|
35
|
+
```
|
|
36
|
+
Paste relevant error logs here
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Additional context**
|
|
40
|
+
Add any other context about the problem here.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest an idea for this project
|
|
4
|
+
title: ''
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ''
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
**Is your feature request related to a problem? Please describe.**
|
|
11
|
+
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
|
12
|
+
|
|
13
|
+
**Describe the solution you'd like**
|
|
14
|
+
A clear and concise description of what you want to happen.
|
|
15
|
+
|
|
16
|
+
**Describe alternatives you've considered**
|
|
17
|
+
A clear and concise description of any alternative solutions or features you've considered.
|
|
18
|
+
|
|
19
|
+
**SAP Datasphere context**
|
|
20
|
+
- Which SAP Datasphere features would this integrate with?
|
|
21
|
+
- Are there specific APIs or endpoints involved?
|
|
22
|
+
- Would this require additional OAuth permissions?
|
|
23
|
+
|
|
24
|
+
**Additional context**
|
|
25
|
+
Add any other context or screenshots about the feature request here.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ main, develop ]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [ main ]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: [3.8, 3.9, "3.10", "3.11", "3.12"]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
20
|
+
uses: actions/setup-python@v4
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
run: |
|
|
26
|
+
python -m pip install --upgrade pip
|
|
27
|
+
pip install -r requirements-dev.txt
|
|
28
|
+
|
|
29
|
+
- name: Lint with ruff
|
|
30
|
+
run: |
|
|
31
|
+
ruff check .
|
|
32
|
+
ruff format --check .
|
|
33
|
+
|
|
34
|
+
- name: Type check with mypy
|
|
35
|
+
run: |
|
|
36
|
+
mypy sap_datasphere_mcp
|
|
37
|
+
|
|
38
|
+
- name: Test with pytest
|
|
39
|
+
run: |
|
|
40
|
+
pytest --cov=sap_datasphere_mcp --cov-report=xml
|
|
41
|
+
|
|
42
|
+
- name: Upload coverage to Codecov
|
|
43
|
+
uses: codecov/codecov-action@v3
|
|
44
|
+
with:
|
|
45
|
+
file: ./coverage.xml
|
|
46
|
+
fail_ci_if_error: true
|
|
47
|
+
|
|
48
|
+
build:
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
needs: test
|
|
51
|
+
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v4
|
|
54
|
+
|
|
55
|
+
- name: Set up Python
|
|
56
|
+
uses: actions/setup-python@v4
|
|
57
|
+
with:
|
|
58
|
+
python-version: "3.11"
|
|
59
|
+
|
|
60
|
+
- name: Install build dependencies
|
|
61
|
+
run: |
|
|
62
|
+
python -m pip install --upgrade pip
|
|
63
|
+
pip install build
|
|
64
|
+
|
|
65
|
+
- name: Build package
|
|
66
|
+
run: python -m build
|
|
67
|
+
|
|
68
|
+
- name: Upload artifacts
|
|
69
|
+
uses: actions/upload-artifact@v3
|
|
70
|
+
with:
|
|
71
|
+
name: dist
|
|
72
|
+
path: dist/
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: Set up Python
|
|
16
|
+
uses: actions/setup-python@v4
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.11"
|
|
19
|
+
|
|
20
|
+
- name: Install dependencies
|
|
21
|
+
run: |
|
|
22
|
+
python -m pip install --upgrade pip
|
|
23
|
+
pip install build twine
|
|
24
|
+
|
|
25
|
+
- name: Build package
|
|
26
|
+
run: python -m build
|
|
27
|
+
|
|
28
|
+
- name: Create GitHub Release
|
|
29
|
+
uses: actions/create-release@v1
|
|
30
|
+
env:
|
|
31
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
32
|
+
with:
|
|
33
|
+
tag_name: ${{ github.ref }}
|
|
34
|
+
release_name: Release ${{ github.ref }}
|
|
35
|
+
draft: false
|
|
36
|
+
prerelease: false
|
|
37
|
+
|
|
38
|
+
- name: Publish to PyPI
|
|
39
|
+
env:
|
|
40
|
+
TWINE_USERNAME: __token__
|
|
41
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
42
|
+
run: |
|
|
43
|
+
twine upload dist/*
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
share/python-wheels/
|
|
20
|
+
*.egg-info/
|
|
21
|
+
.installed.cfg
|
|
22
|
+
*.egg
|
|
23
|
+
MANIFEST
|
|
24
|
+
|
|
25
|
+
# Virtual environments
|
|
26
|
+
.env
|
|
27
|
+
.venv
|
|
28
|
+
env/
|
|
29
|
+
venv/
|
|
30
|
+
ENV/
|
|
31
|
+
env.bak/
|
|
32
|
+
venv.bak/
|
|
33
|
+
|
|
34
|
+
# IDE
|
|
35
|
+
.vscode/
|
|
36
|
+
.idea/
|
|
37
|
+
*.swp
|
|
38
|
+
*.swo
|
|
39
|
+
*~
|
|
40
|
+
|
|
41
|
+
# Testing
|
|
42
|
+
.coverage
|
|
43
|
+
.pytest_cache/
|
|
44
|
+
.tox/
|
|
45
|
+
.nox/
|
|
46
|
+
coverage.xml
|
|
47
|
+
*.cover
|
|
48
|
+
*.py,cover
|
|
49
|
+
.hypothesis/
|
|
50
|
+
htmlcov/
|
|
51
|
+
|
|
52
|
+
# Jupyter Notebook
|
|
53
|
+
.ipynb_checkpoints
|
|
54
|
+
|
|
55
|
+
# pyenv
|
|
56
|
+
.python-version
|
|
57
|
+
|
|
58
|
+
# Environments
|
|
59
|
+
.env.local
|
|
60
|
+
.env.development
|
|
61
|
+
.env.test
|
|
62
|
+
.env.production
|
|
63
|
+
|
|
64
|
+
# mypy
|
|
65
|
+
.mypy_cache/
|
|
66
|
+
.dmypy.json
|
|
67
|
+
dmypy.json
|
|
68
|
+
|
|
69
|
+
# Pyre type checker
|
|
70
|
+
.pyre/
|
|
71
|
+
|
|
72
|
+
# pytype static type analyzer
|
|
73
|
+
.pytype/
|
|
74
|
+
|
|
75
|
+
# Cython debug symbols
|
|
76
|
+
cython_debug/
|
|
77
|
+
|
|
78
|
+
# Logs
|
|
79
|
+
*.log
|
|
80
|
+
logs/
|
|
81
|
+
|
|
82
|
+
# OS
|
|
83
|
+
.DS_Store
|
|
84
|
+
.DS_Store?
|
|
85
|
+
._*
|
|
86
|
+
.Spotlight-V100
|
|
87
|
+
.Trashes
|
|
88
|
+
ehthumbs.db
|
|
89
|
+
Thumbs.db
|
|
90
|
+
|
|
91
|
+
# Credentials and secrets
|
|
92
|
+
*.pem
|
|
93
|
+
*.key
|
|
94
|
+
secrets/
|
|
95
|
+
credentials/
|
|
96
|
+
|
|
97
|
+
# Temporary files
|
|
98
|
+
tmp/
|
|
99
|
+
temp/
|
|
100
|
+
*.tmp
|
|
101
|
+
*.bak
|
|
102
|
+
|
|
103
|
+
# Documentation build
|
|
104
|
+
site/
|
|
105
|
+
docs/_build/
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
[distutils]
|
|
2
|
+
index-servers =
|
|
3
|
+
pypi
|
|
4
|
+
testpypi
|
|
5
|
+
|
|
6
|
+
[pypi]
|
|
7
|
+
username = __token__
|
|
8
|
+
password = pypi-AgEIcHlwaS5vcmcCJDc3NjljMzYyLTU0MjgtNDQ2MC05NmI1LWVkZDcxMzk1NDA5ZQACKlszLCI2ZTdkNGMxMy0zZWNhLTRlNGItOGYzNy0zOGI5M2JkNzgzZTkiXQAABiAlddL_U7QBSHAZJzbZXndHM-bUJN93VqQg5r1m6I-QQg
|
|
9
|
+
|
|
10
|
+
[testpypi]
|
|
11
|
+
repository = https://test.pypi.org/legacy/
|
|
12
|
+
username = __token__
|
|
13
|
+
password = pypi-AgEIcHlwaS5vcmcCJDc3NjljMzYyLTU0MjgtNDQ2MC05NmI1LWVkZDcxMzk1NDA5ZQACKlszLCI2ZTdkNGMxMy0zZWNhLTRlNGItOGYzNy0zOGI5M2JkNzgzZTkiXQAABiAlddL_U7QBSHAZJzbZXndHM-bUJN93VqQg5r1m6I-QQg
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the SAP Datasphere MCP Server will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Initial release of SAP Datasphere MCP Server
|
|
12
|
+
- OAuth 2.0 client credentials authentication
|
|
13
|
+
- Basic space management tools
|
|
14
|
+
- Catalog browsing capabilities
|
|
15
|
+
- Connection listing functionality
|
|
16
|
+
- API endpoint discovery
|
|
17
|
+
- Comprehensive error handling and logging
|
|
18
|
+
- Interactive setup script
|
|
19
|
+
- Example usage scripts
|
|
20
|
+
- Full test suite
|
|
21
|
+
|
|
22
|
+
### Features
|
|
23
|
+
- `test_connection` - Test OAuth connectivity
|
|
24
|
+
- `discover_endpoints` - Find available API endpoints
|
|
25
|
+
- `list_spaces` - List all Datasphere spaces
|
|
26
|
+
- `get_space_info` - Get detailed space information
|
|
27
|
+
- `list_catalog` - Browse data catalog
|
|
28
|
+
- `get_table_info` - Get table schema and metadata
|
|
29
|
+
- `list_connections` - List data source connections
|
|
30
|
+
|
|
31
|
+
## [0.1.0] - 2025-01-13
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
- Initial project structure
|
|
35
|
+
- Core MCP server implementation
|
|
36
|
+
- SAP Datasphere API client
|
|
37
|
+
- OAuth authentication module
|
|
38
|
+
- Pydantic data models
|
|
39
|
+
- Configuration management
|
|
40
|
+
- Development tooling setup
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 SAP Datasphere MCP Server
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sap-datasphere-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: SAP Datasphere MCP Server - AI-powered access to SAP Datasphere APIs
|
|
5
|
+
Project-URL: Homepage, https://github.com/MarioDeFelipe/sap-datasphere-mcp
|
|
6
|
+
Project-URL: Repository, https://github.com/MarioDeFelipe/sap-datasphere-mcp
|
|
7
|
+
Project-URL: Issues, https://github.com/MarioDeFelipe/sap-datasphere-mcp/issues
|
|
8
|
+
Author-email: Mario de Felipe <mario@ailien.studio>
|
|
9
|
+
License: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Requires-Python: >=3.8
|
|
21
|
+
Requires-Dist: httpx>=0.25.0
|
|
22
|
+
Requires-Dist: loguru>=0.7.0
|
|
23
|
+
Requires-Dist: mcp>=1.0.0
|
|
24
|
+
Requires-Dist: pydantic>=2.0.0
|
|
25
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: black>=23.0.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: mypy>=1.0.0; extra == 'dev'
|
|
29
|
+
Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
|
|
31
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
# SAP Datasphere MCP Server
|
|
37
|
+
|
|
38
|
+
A Model Context Protocol (MCP) server that provides AI assistants with seamless access to SAP Datasphere APIs, enabling intelligent data exploration, catalog browsing, and space management.
|
|
39
|
+
|
|
40
|
+
## Features
|
|
41
|
+
|
|
42
|
+
- 🔐 **OAuth 2.0 Authentication** - Secure client credentials flow
|
|
43
|
+
- 🏢 **Space Management** - List and explore Datasphere spaces
|
|
44
|
+
- 📊 **Catalog Access** - Browse data models, tables, and views
|
|
45
|
+
- 🔗 **Connection Management** - Manage data source connections
|
|
46
|
+
- 🧠 **AI-Friendly** - Structured responses optimized for AI consumption
|
|
47
|
+
- 🛡️ **Enterprise Ready** - Built for production SAP environments
|
|
48
|
+
|
|
49
|
+
## Quick Start
|
|
50
|
+
|
|
51
|
+
### Prerequisites
|
|
52
|
+
|
|
53
|
+
- Python 3.8+
|
|
54
|
+
- SAP Datasphere tenant access
|
|
55
|
+
- OAuth client credentials (Client ID & Secret)
|
|
56
|
+
|
|
57
|
+
### Installation
|
|
58
|
+
|
|
59
|
+
#### Option 1: Install from PyPI (Recommended)
|
|
60
|
+
```bash
|
|
61
|
+
pip install sap-datasphere-mcp
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
#### Option 2: Install from Source
|
|
65
|
+
```bash
|
|
66
|
+
# Clone the repository
|
|
67
|
+
git clone https://github.com/MarioDeFelipe/sap-datasphere-mcp.git
|
|
68
|
+
cd sap-datasphere-mcp
|
|
69
|
+
|
|
70
|
+
# Install dependencies
|
|
71
|
+
pip install -r requirements.txt
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
#### Configure Credentials
|
|
75
|
+
```bash
|
|
76
|
+
# Interactive setup (recommended)
|
|
77
|
+
python -m sap_datasphere_mcp.setup
|
|
78
|
+
|
|
79
|
+
# Or manually create .env file
|
|
80
|
+
cp .env.example .env
|
|
81
|
+
# Edit .env with your OAuth credentials
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Configuration
|
|
85
|
+
|
|
86
|
+
Create a `.env` file with your SAP Datasphere credentials:
|
|
87
|
+
|
|
88
|
+
```env
|
|
89
|
+
DATASPHERE_TENANT_URL=https://your-tenant.eu10.hcs.cloud.sap
|
|
90
|
+
OAUTH_CLIENT_ID=your-client-id
|
|
91
|
+
OAUTH_CLIENT_SECRET=your-client-secret
|
|
92
|
+
OAUTH_TOKEN_URL=https://your-auth.authentication.eu20.hana.ondemand.com/oauth/token
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Usage
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Run the MCP server
|
|
99
|
+
python -m sap_datasphere_mcp
|
|
100
|
+
|
|
101
|
+
# Test with MCP Inspector
|
|
102
|
+
npx @modelcontextprotocol/inspector python -m sap_datasphere_mcp
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## MCP Tools
|
|
106
|
+
|
|
107
|
+
| Tool | Description | Parameters |
|
|
108
|
+
|------|-------------|------------|
|
|
109
|
+
| `list_spaces` | List all available Datasphere spaces | None |
|
|
110
|
+
| `get_space_info` | Get detailed information about a space | `space_id` |
|
|
111
|
+
| `list_catalog` | Browse the data catalog | `space_id` (optional) |
|
|
112
|
+
| `get_table_info` | Get table schema and metadata | `space_id`, `table_name` |
|
|
113
|
+
| `list_connections` | List data source connections | `space_id` (optional) |
|
|
114
|
+
| `test_connection` | Test OAuth connectivity | None |
|
|
115
|
+
|
|
116
|
+
## Architecture
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
sap-datasphere-mcp/
|
|
120
|
+
├── sap_datasphere_mcp/
|
|
121
|
+
│ ├── __init__.py
|
|
122
|
+
│ ├── server.py # Main MCP server
|
|
123
|
+
│ ├── auth.py # OAuth authentication
|
|
124
|
+
│ ├── client.py # Datasphere API client
|
|
125
|
+
│ └── models.py # Data models
|
|
126
|
+
├── tests/
|
|
127
|
+
├── examples/
|
|
128
|
+
├── requirements.txt
|
|
129
|
+
└── README.md
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Development
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Install development dependencies
|
|
136
|
+
pip install -r requirements-dev.txt
|
|
137
|
+
|
|
138
|
+
# Run tests
|
|
139
|
+
pytest
|
|
140
|
+
|
|
141
|
+
# Format code
|
|
142
|
+
black .
|
|
143
|
+
ruff check --fix .
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Contributing
|
|
147
|
+
|
|
148
|
+
1. Fork the repository
|
|
149
|
+
2. Create a feature branch
|
|
150
|
+
3. Make your changes
|
|
151
|
+
4. Add tests
|
|
152
|
+
5. Submit a pull request
|
|
153
|
+
|
|
154
|
+
## License
|
|
155
|
+
|
|
156
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
157
|
+
|
|
158
|
+
## Support
|
|
159
|
+
|
|
160
|
+
- 📖 [Documentation](docs/)
|
|
161
|
+
- 🐛 [Issues](https://github.com/yourusername/sap-datasphere-mcp/issues)
|
|
162
|
+
- 💬 [Discussions](https://github.com/yourusername/sap-datasphere-mcp/discussions)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Publishing Checklist
|
|
2
|
+
|
|
3
|
+
## Pre-Publishing Setup
|
|
4
|
+
|
|
5
|
+
### 1. Personal Information Needed
|
|
6
|
+
- [ ] Author name
|
|
7
|
+
- [ ] Author email
|
|
8
|
+
- [ ] GitHub username
|
|
9
|
+
- [ ] Repository name preference
|
|
10
|
+
|
|
11
|
+
### 2. Account Setup
|
|
12
|
+
- [ ] GitHub account ready
|
|
13
|
+
- [ ] PyPI account created (https://pypi.org/account/register/)
|
|
14
|
+
- [ ] PyPI API token generated
|
|
15
|
+
|
|
16
|
+
### 3. Repository Preparation
|
|
17
|
+
- [ ] Update author info in pyproject.toml
|
|
18
|
+
- [ ] Update GitHub URLs in pyproject.toml
|
|
19
|
+
- [ ] Update README with correct GitHub links
|
|
20
|
+
- [ ] Remove test credentials from code
|
|
21
|
+
- [ ] Verify all files are ready
|
|
22
|
+
|
|
23
|
+
## Publishing Steps
|
|
24
|
+
|
|
25
|
+
### Phase 1: GitHub Repository
|
|
26
|
+
```bash
|
|
27
|
+
# 1. Initialize git repository
|
|
28
|
+
cd sap-datasphere-mcp
|
|
29
|
+
git init
|
|
30
|
+
git add .
|
|
31
|
+
git commit -m "Initial commit: SAP Datasphere MCP Server v0.1.0"
|
|
32
|
+
|
|
33
|
+
# 2. Create GitHub repository (via GitHub web interface)
|
|
34
|
+
# Repository name: sap-datasphere-mcp
|
|
35
|
+
# Description: SAP Datasphere MCP Server - AI-powered access to SAP Datasphere APIs
|
|
36
|
+
# Public repository
|
|
37
|
+
# Initialize with README: No (we have our own)
|
|
38
|
+
|
|
39
|
+
# 3. Connect and push
|
|
40
|
+
git remote add origin https://github.com/[USERNAME]/sap-datasphere-mcp.git
|
|
41
|
+
git branch -M main
|
|
42
|
+
git push -u origin main
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Phase 2: PyPI Publishing
|
|
46
|
+
```bash
|
|
47
|
+
# 1. Install build tools
|
|
48
|
+
pip install build twine
|
|
49
|
+
|
|
50
|
+
# 2. Build package
|
|
51
|
+
python -m build
|
|
52
|
+
|
|
53
|
+
# 3. Upload to PyPI (test first)
|
|
54
|
+
twine upload --repository testpypi dist/*
|
|
55
|
+
|
|
56
|
+
# 4. Test installation from TestPyPI
|
|
57
|
+
pip install --index-url https://test.pypi.org/simple/ sap-datasphere-mcp
|
|
58
|
+
|
|
59
|
+
# 5. Upload to production PyPI
|
|
60
|
+
twine upload dist/*
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Phase 3: Post-Publishing
|
|
64
|
+
- [ ] Test installation: `pip install sap-datasphere-mcp`
|
|
65
|
+
- [ ] Update README with installation instructions
|
|
66
|
+
- [ ] Create first GitHub release
|
|
67
|
+
- [ ] Add GitHub topics/tags
|
|
68
|
+
- [ ] Share on social media/communities
|
|
69
|
+
|
|
70
|
+
## Security Notes
|
|
71
|
+
- [ ] Remove any hardcoded credentials
|
|
72
|
+
- [ ] Add .env to .gitignore (already done)
|
|
73
|
+
- [ ] Use environment variables for sensitive data
|
|
74
|
+
- [ ] Set up GitHub secrets for CI/CD
|
|
75
|
+
|
|
76
|
+
## Quality Checks
|
|
77
|
+
- [ ] All tests pass
|
|
78
|
+
- [ ] Code is properly formatted
|
|
79
|
+
- [ ] Documentation is complete
|
|
80
|
+
- [ ] Examples work correctly
|
|
81
|
+
- [ ] License is appropriate (MIT)
|
|
82
|
+
|
|
83
|
+
## Marketing/Visibility
|
|
84
|
+
- [ ] Add to awesome-mcp lists
|
|
85
|
+
- [ ] Post on SAP Community
|
|
86
|
+
- [ ] Share on LinkedIn/Twitter
|
|
87
|
+
- [ ] Add to Model Context Protocol registry
|
|
88
|
+
- [ ] Create demo video/screenshots
|