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.
Files changed (29) hide show
  1. sap_datasphere_mcp-0.1.0/.env.example +22 -0
  2. sap_datasphere_mcp-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  3. sap_datasphere_mcp-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +25 -0
  4. sap_datasphere_mcp-0.1.0/.github/workflows/ci.yml +72 -0
  5. sap_datasphere_mcp-0.1.0/.github/workflows/release.yml +43 -0
  6. sap_datasphere_mcp-0.1.0/.gitignore +105 -0
  7. sap_datasphere_mcp-0.1.0/.pypirc +13 -0
  8. sap_datasphere_mcp-0.1.0/CHANGELOG.md +40 -0
  9. sap_datasphere_mcp-0.1.0/LICENSE +21 -0
  10. sap_datasphere_mcp-0.1.0/PKG-INFO +162 -0
  11. sap_datasphere_mcp-0.1.0/PUBLISHING_CHECKLIST.md +88 -0
  12. sap_datasphere_mcp-0.1.0/README.md +127 -0
  13. sap_datasphere_mcp-0.1.0/SETUP.md +201 -0
  14. sap_datasphere_mcp-0.1.0/examples/basic_usage.py +79 -0
  15. sap_datasphere_mcp-0.1.0/publish.py +290 -0
  16. sap_datasphere_mcp-0.1.0/pyproject.toml +102 -0
  17. sap_datasphere_mcp-0.1.0/quick_test.py +100 -0
  18. sap_datasphere_mcp-0.1.0/requirements-dev.txt +22 -0
  19. sap_datasphere_mcp-0.1.0/requirements.txt +9 -0
  20. sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/__init__.py +13 -0
  21. sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/__main__.py +9 -0
  22. sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/auth.py +91 -0
  23. sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/client.py +319 -0
  24. sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/models.py +94 -0
  25. sap_datasphere_mcp-0.1.0/sap_datasphere_mcp/server.py +433 -0
  26. sap_datasphere_mcp-0.1.0/setup_credentials.py +123 -0
  27. sap_datasphere_mcp-0.1.0/test_with_real_credentials.py +99 -0
  28. sap_datasphere_mcp-0.1.0/tests/__init__.py +1 -0
  29. 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