simba-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.
- simba_mcp-0.1.0/.commitmsg +5 -0
- simba_mcp-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
- simba_mcp-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
- simba_mcp-0.1.0/.github/dependabot.yml +17 -0
- simba_mcp-0.1.0/.github/pull_request_template.md +17 -0
- simba_mcp-0.1.0/.github/workflows/ci.yml +36 -0
- simba_mcp-0.1.0/.github/workflows/publish.yml +56 -0
- simba_mcp-0.1.0/.gitignore +31 -0
- simba_mcp-0.1.0/CHANGELOG.md +17 -0
- simba_mcp-0.1.0/CODE_OF_CONDUCT.md +11 -0
- simba_mcp-0.1.0/CONTRIBUTING.md +43 -0
- simba_mcp-0.1.0/LICENSE +21 -0
- simba_mcp-0.1.0/PKG-INFO +204 -0
- simba_mcp-0.1.0/README.md +175 -0
- simba_mcp-0.1.0/SECURITY.md +17 -0
- simba_mcp-0.1.0/pyproject.toml +53 -0
- simba_mcp-0.1.0/src/simba_mcp/__init__.py +8 -0
- simba_mcp-0.1.0/src/simba_mcp/__main__.py +38 -0
- simba_mcp-0.1.0/src/simba_mcp/api_client.py +172 -0
- simba_mcp-0.1.0/src/simba_mcp/py.typed +0 -0
- simba_mcp-0.1.0/src/simba_mcp/server.py +418 -0
- simba_mcp-0.1.0/tests/__init__.py +0 -0
- simba_mcp-0.1.0/tests/test_api_client.py +295 -0
- simba_mcp-0.1.0/tests/test_server.py +68 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: Report a bug in the Simba MCP Server
|
|
4
|
+
labels: bug
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Description
|
|
8
|
+
|
|
9
|
+
<!-- A clear description of the bug. -->
|
|
10
|
+
|
|
11
|
+
## Steps to Reproduce
|
|
12
|
+
|
|
13
|
+
1.
|
|
14
|
+
2.
|
|
15
|
+
3.
|
|
16
|
+
|
|
17
|
+
## Expected Behavior
|
|
18
|
+
|
|
19
|
+
<!-- What should happen? -->
|
|
20
|
+
|
|
21
|
+
## Actual Behavior
|
|
22
|
+
|
|
23
|
+
<!-- What happens instead? Include error messages or logs if available. -->
|
|
24
|
+
|
|
25
|
+
## Environment
|
|
26
|
+
|
|
27
|
+
- **simba-mcp version:**
|
|
28
|
+
- **Python version:**
|
|
29
|
+
- **MCP client:** (Cursor / Claude Code / Claude API / other)
|
|
30
|
+
- **OS:**
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature Request
|
|
3
|
+
about: Suggest a new tool or improvement
|
|
4
|
+
labels: enhancement
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Problem
|
|
8
|
+
|
|
9
|
+
<!-- What problem does this solve? What's missing today? -->
|
|
10
|
+
|
|
11
|
+
## Proposed Solution
|
|
12
|
+
|
|
13
|
+
<!-- Describe the feature or change you'd like. -->
|
|
14
|
+
|
|
15
|
+
## Alternatives Considered
|
|
16
|
+
|
|
17
|
+
<!-- Any other approaches you've thought about. -->
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: pip
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: weekly
|
|
7
|
+
labels:
|
|
8
|
+
- dependencies
|
|
9
|
+
open-pull-requests-limit: 5
|
|
10
|
+
|
|
11
|
+
- package-ecosystem: github-actions
|
|
12
|
+
directory: "/"
|
|
13
|
+
schedule:
|
|
14
|
+
interval: weekly
|
|
15
|
+
labels:
|
|
16
|
+
- ci
|
|
17
|
+
open-pull-requests-limit: 5
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
## What does this PR do?
|
|
2
|
+
|
|
3
|
+
<!-- A brief description of the change. -->
|
|
4
|
+
|
|
5
|
+
## Why?
|
|
6
|
+
|
|
7
|
+
<!-- Why is this change needed? Link to an issue if applicable. -->
|
|
8
|
+
|
|
9
|
+
## Testing
|
|
10
|
+
|
|
11
|
+
- [ ] `pytest -v` passes
|
|
12
|
+
- [ ] `ruff check src/ tests/` passes
|
|
13
|
+
- [ ] `ruff format --check src/ tests/` passes
|
|
14
|
+
|
|
15
|
+
## Notes
|
|
16
|
+
|
|
17
|
+
<!-- Anything reviewers should know — breaking changes, migration steps, etc. -->
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
20
|
+
uses: actions/setup-python@v5
|
|
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 -e ".[dev]"
|
|
28
|
+
|
|
29
|
+
- name: Lint
|
|
30
|
+
run: ruff check src/ tests/
|
|
31
|
+
|
|
32
|
+
- name: Format check
|
|
33
|
+
run: ruff format --check src/ tests/
|
|
34
|
+
|
|
35
|
+
- name: Test
|
|
36
|
+
run: pytest -v
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
id-token: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
test:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
|
|
22
|
+
- name: Install dependencies
|
|
23
|
+
run: |
|
|
24
|
+
python -m pip install --upgrade pip
|
|
25
|
+
pip install -e ".[dev]"
|
|
26
|
+
|
|
27
|
+
- name: Lint
|
|
28
|
+
run: ruff check src/ tests/
|
|
29
|
+
|
|
30
|
+
- name: Format check
|
|
31
|
+
run: ruff format --check src/ tests/
|
|
32
|
+
|
|
33
|
+
- name: Test
|
|
34
|
+
run: pytest -v
|
|
35
|
+
|
|
36
|
+
publish:
|
|
37
|
+
needs: test
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
environment: pypi
|
|
40
|
+
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
|
|
44
|
+
- name: Set up Python
|
|
45
|
+
uses: actions/setup-python@v5
|
|
46
|
+
with:
|
|
47
|
+
python-version: "3.12"
|
|
48
|
+
|
|
49
|
+
- name: Install build tools
|
|
50
|
+
run: pip install hatchling build
|
|
51
|
+
|
|
52
|
+
- name: Build package
|
|
53
|
+
run: python -m build
|
|
54
|
+
|
|
55
|
+
- name: Publish to PyPI
|
|
56
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*$py.class
|
|
4
|
+
*.egg-info/
|
|
5
|
+
dist/
|
|
6
|
+
build/
|
|
7
|
+
.eggs/
|
|
8
|
+
*.egg
|
|
9
|
+
|
|
10
|
+
.venv/
|
|
11
|
+
venv/
|
|
12
|
+
.env
|
|
13
|
+
|
|
14
|
+
.pytest_cache/
|
|
15
|
+
.ruff_cache/
|
|
16
|
+
.mypy_cache/
|
|
17
|
+
|
|
18
|
+
# OS
|
|
19
|
+
.DS_Store
|
|
20
|
+
Thumbs.db
|
|
21
|
+
|
|
22
|
+
# IDEs
|
|
23
|
+
.idea/
|
|
24
|
+
.vscode/
|
|
25
|
+
.cursor/
|
|
26
|
+
*.swp
|
|
27
|
+
*.swo
|
|
28
|
+
*~
|
|
29
|
+
|
|
30
|
+
# Logs
|
|
31
|
+
*.log
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the Simba MCP Server will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## 0.1.0 — 2026-04-05
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- Initial release of the Simba MCP Server.
|
|
12
|
+
- 11 MCP tools: `get_data_schema`, `upload_data`, `list_models`, `create_model`, `get_model_status`, `get_model_results`, `run_optimizer`, `get_optimizer_results`, `get_scenario_template`, `run_scenario`, `get_scenario_results`.
|
|
13
|
+
- Async HTTP client (`SimbaAPIClient`) wrapping Simba API v1.
|
|
14
|
+
- Support for stdio, Streamable HTTP, and SSE transport modes.
|
|
15
|
+
- CLI entrypoint (`simba-mcp`).
|
|
16
|
+
- CI workflow (lint + test on Python 3.11/3.12/3.13).
|
|
17
|
+
- PyPI publish workflow on GitHub Release.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
This project follows the same Code of Conduct as the main Simba platform.
|
|
4
|
+
|
|
5
|
+
Please see the [Simba Code of Conduct](https://github.com/getsimba-ai/simba-mmm/blob/main/CODE_OF_CONDUCT.md) for the full text.
|
|
6
|
+
|
|
7
|
+
In summary: be respectful, be constructive, and be welcoming. Harassment, discrimination, and disruptive behavior will not be tolerated.
|
|
8
|
+
|
|
9
|
+
## Reporting
|
|
10
|
+
|
|
11
|
+
If you experience or witness unacceptable behavior, please email **conduct@getsimba.ai**.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Contributing to Simba MCP Server
|
|
2
|
+
|
|
3
|
+
Thanks for your interest in contributing! This guide covers the basics for getting set up and submitting changes.
|
|
4
|
+
|
|
5
|
+
For broader contribution guidelines across the Simba project, see the [main repo's contributing guide](https://github.com/getsimba-ai/simba-mmm/blob/main/CONTRIBUTING.md).
|
|
6
|
+
|
|
7
|
+
## Development Setup
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Clone the repo
|
|
11
|
+
git clone https://github.com/getsimba-ai/simba-mcp.git
|
|
12
|
+
cd simba-mcp
|
|
13
|
+
|
|
14
|
+
# Create a virtual environment
|
|
15
|
+
python -m venv .venv
|
|
16
|
+
source .venv/bin/activate # or .venv\Scripts\activate on Windows
|
|
17
|
+
|
|
18
|
+
# Install the package in editable mode with dev dependencies
|
|
19
|
+
pip install -e ".[dev]"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Running Tests
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
pytest -v
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Linting
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
ruff check src/ tests/
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Submitting Changes
|
|
35
|
+
|
|
36
|
+
1. Fork the repo and create a feature branch from `main`.
|
|
37
|
+
2. Make your changes — add tests for new functionality.
|
|
38
|
+
3. Ensure `pytest -v` and `ruff check src/ tests/` pass locally.
|
|
39
|
+
4. Open a pull request against `main` with a clear description of the change.
|
|
40
|
+
|
|
41
|
+
## Code Style
|
|
42
|
+
|
|
43
|
+
This project uses [Ruff](https://docs.astral.sh/ruff/) for linting, configured in `pyproject.toml` (Python 3.11+, 100-char line length). CI enforces this on every PR.
|
simba_mcp-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Simba
|
|
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.
|
simba_mcp-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: simba-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: MCP server for Simba Marketing Mix Modeling — connect AI assistants to your MMM models
|
|
5
|
+
Project-URL: Homepage, https://getsimba.ai
|
|
6
|
+
Project-URL: Repository, https://github.com/getsimba-ai/simba-mcp
|
|
7
|
+
Project-URL: Documentation, https://github.com/getsimba-ai/simba-mmm
|
|
8
|
+
Author-email: Simba <hello@getsimba.ai>
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: bayesian,marketing-mix-model,mcp,mmm,simba
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Requires-Dist: httpx>=0.27
|
|
22
|
+
Requires-Dist: mcp>=1.1.3
|
|
23
|
+
Provides-Extra: dev
|
|
24
|
+
Requires-Dist: anyio>=4.0; extra == 'dev'
|
|
25
|
+
Requires-Dist: pytest-anyio>=0.0.0; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
27
|
+
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
# Simba MCP Server
|
|
31
|
+
|
|
32
|
+
[](https://pypi.org/project/simba-mcp/)
|
|
33
|
+
[](https://github.com/getsimba-ai/simba-mcp/actions/workflows/ci.yml)
|
|
34
|
+
[](LICENSE)
|
|
35
|
+
[](https://www.python.org/downloads/)
|
|
36
|
+
|
|
37
|
+
[Simba](https://getsimba.ai) is a Bayesian Marketing Mix Modeling (MMM) platform. This [MCP server](https://modelcontextprotocol.io/) lets AI assistants interact with your Marketing Mix Models directly — upload data, build models, check results, and run budget optimizations through natural language in Claude, Cursor, or Claude Code.
|
|
38
|
+
|
|
39
|
+
## See Also
|
|
40
|
+
|
|
41
|
+
- **[getsimba.ai](https://getsimba.ai)** — the main Simba website (features, pricing, demos)
|
|
42
|
+
- **[getsimba-ai/simba-mmm](https://github.com/getsimba-ai/simba-mmm)** — platform repo with full documentation on MMM concepts, data requirements, model configuration, optimization, and scenario planning
|
|
43
|
+
|
|
44
|
+
## Installation
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
pip install simba-mcp
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Or run directly without installing:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
uvx simba-mcp
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Quick Start
|
|
57
|
+
|
|
58
|
+
### Cursor IDE
|
|
59
|
+
|
|
60
|
+
Add to your Cursor MCP settings (`.cursor/mcp.json` in the workspace or global settings):
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"mcpServers": {
|
|
65
|
+
"simba": {
|
|
66
|
+
"command": "uvx",
|
|
67
|
+
"args": ["simba-mcp"],
|
|
68
|
+
"env": {
|
|
69
|
+
"SIMBA_API_URL": "https://app.getsimba.ai",
|
|
70
|
+
"SIMBA_API_KEY": "simba_sk_..."
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Claude Code
|
|
78
|
+
|
|
79
|
+
Add to your Claude Code MCP config:
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"mcpServers": {
|
|
84
|
+
"simba": {
|
|
85
|
+
"command": "uvx",
|
|
86
|
+
"args": ["simba-mcp"],
|
|
87
|
+
"env": {
|
|
88
|
+
"SIMBA_API_URL": "https://app.getsimba.ai",
|
|
89
|
+
"SIMBA_API_KEY": "simba_sk_..."
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Claude API (MCP Connector)
|
|
97
|
+
|
|
98
|
+
Use the remote Streamable HTTP transport with the Anthropic MCP connector:
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
import anthropic
|
|
102
|
+
|
|
103
|
+
client = anthropic.Anthropic()
|
|
104
|
+
|
|
105
|
+
response = client.beta.messages.create(
|
|
106
|
+
model="claude-sonnet-4-6",
|
|
107
|
+
max_tokens=4096,
|
|
108
|
+
messages=[{"role": "user", "content": "List my Simba models"}],
|
|
109
|
+
mcp_servers=[
|
|
110
|
+
{
|
|
111
|
+
"type": "url",
|
|
112
|
+
"url": "https://app.getsimba.ai/mcp",
|
|
113
|
+
"name": "simba",
|
|
114
|
+
"authorization_token": "simba_sk_...",
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
tools=[{"type": "mcp_toolset", "mcp_server_name": "simba"}],
|
|
118
|
+
betas=["mcp-client-2025-11-20"],
|
|
119
|
+
)
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Available Tools
|
|
123
|
+
|
|
124
|
+
| Tool | Description |
|
|
125
|
+
|------|-------------|
|
|
126
|
+
| `get_data_schema` | Get the canonical CSV schema for MMM input files |
|
|
127
|
+
| `upload_data` | Upload a CSV dataset to Simba |
|
|
128
|
+
| `list_models` | List all models with their status |
|
|
129
|
+
| `create_model` | Configure and start fitting a new MMM model |
|
|
130
|
+
| `get_model_status` | Poll fitting progress for a model |
|
|
131
|
+
| `get_model_results` | Get results (ROI, contributions, response curves, diagnostics, and more) |
|
|
132
|
+
| `run_optimizer` | Run budget optimization on a completed model |
|
|
133
|
+
| `get_optimizer_results` | Get optimizer status and results |
|
|
134
|
+
| `get_scenario_template` | Generate a forward-period template for scenario planning |
|
|
135
|
+
| `run_scenario` | Run a "what-if" scenario prediction |
|
|
136
|
+
| `get_scenario_results` | Get scenario prediction results |
|
|
137
|
+
|
|
138
|
+
## Example Prompts
|
|
139
|
+
|
|
140
|
+
Try these with any connected AI assistant:
|
|
141
|
+
|
|
142
|
+
**Explore your models:**
|
|
143
|
+
> "List my Simba models and show me the channel ROI summary for the most recent complete model."
|
|
144
|
+
|
|
145
|
+
**Build a model:**
|
|
146
|
+
> "Upload this CSV data to Simba and create a new MMM model with TV, Search, and Social as media channels. Use 'revenue' as the KPI and 'date' as the date column."
|
|
147
|
+
|
|
148
|
+
**Check progress:**
|
|
149
|
+
> "What's the fitting status of model a1b2c3d4?"
|
|
150
|
+
|
|
151
|
+
**Get results:**
|
|
152
|
+
> "Show me the model diagnostics and channel contributions for model a1b2c3d4."
|
|
153
|
+
|
|
154
|
+
**Optimize budget:**
|
|
155
|
+
> "Run a budget optimization on model a1b2c3d4 with $1M total budget over 12 months. Set TV bounds to 5-40% and Search to 10-50%. Use uniform laydown weights."
|
|
156
|
+
|
|
157
|
+
**Response curves:**
|
|
158
|
+
> "Show me the response curves for model a1b2c3d4. At what spend level does TV hit diminishing returns?"
|
|
159
|
+
|
|
160
|
+
**Scenario planning:**
|
|
161
|
+
> "Get a scenario template for model a1b2c3d4 for the next 12 weeks. Then run a scenario where I increase TV by 20% and cut Search by 10%. What happens to revenue?"
|
|
162
|
+
|
|
163
|
+
**Full workflow:**
|
|
164
|
+
> "I have marketing data I want to analyze. First get the schema so I know what format is needed, then upload my data, create a model, and once it's done show me the ROI by channel."
|
|
165
|
+
|
|
166
|
+
## API Key Setup
|
|
167
|
+
|
|
168
|
+
The MCP server authenticates with the same API keys used by the Simba REST API. Create a key with the required scopes:
|
|
169
|
+
|
|
170
|
+
1. Go to **Profile > API Keys** in the Simba UI
|
|
171
|
+
2. Click **Create Key**
|
|
172
|
+
3. Set scopes: `ingest`, `read:models`, `read:results`, `create:models`, `optimize`, `scenario`
|
|
173
|
+
4. Copy the key (shown only once)
|
|
174
|
+
|
|
175
|
+
Set the key as the `SIMBA_API_KEY` environment variable in your MCP config.
|
|
176
|
+
|
|
177
|
+
## Configuration
|
|
178
|
+
|
|
179
|
+
| Environment Variable | Description | Default |
|
|
180
|
+
|---------------------|-------------|---------|
|
|
181
|
+
| `SIMBA_API_URL` | Simba API base URL | `http://localhost:5005` |
|
|
182
|
+
| `SIMBA_API_KEY` | Your Simba API key | (required) |
|
|
183
|
+
|
|
184
|
+
## Transport Modes
|
|
185
|
+
|
|
186
|
+
The server supports all MCP transport modes:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# stdio (default) — for Cursor, Claude Code
|
|
190
|
+
simba-mcp
|
|
191
|
+
|
|
192
|
+
# Streamable HTTP — for remote deployment
|
|
193
|
+
simba-mcp --transport streamable-http --port 8100
|
|
194
|
+
|
|
195
|
+
# SSE — legacy transport
|
|
196
|
+
simba-mcp --transport sse --port 8100
|
|
197
|
+
|
|
198
|
+
# Or via uvicorn directly
|
|
199
|
+
uvicorn "simba_mcp.server:create_app()" --host 0.0.0.0 --port 8100
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## License
|
|
203
|
+
|
|
204
|
+
MIT
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Simba MCP Server
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/simba-mcp/)
|
|
4
|
+
[](https://github.com/getsimba-ai/simba-mcp/actions/workflows/ci.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://www.python.org/downloads/)
|
|
7
|
+
|
|
8
|
+
[Simba](https://getsimba.ai) is a Bayesian Marketing Mix Modeling (MMM) platform. This [MCP server](https://modelcontextprotocol.io/) lets AI assistants interact with your Marketing Mix Models directly — upload data, build models, check results, and run budget optimizations through natural language in Claude, Cursor, or Claude Code.
|
|
9
|
+
|
|
10
|
+
## See Also
|
|
11
|
+
|
|
12
|
+
- **[getsimba.ai](https://getsimba.ai)** — the main Simba website (features, pricing, demos)
|
|
13
|
+
- **[getsimba-ai/simba-mmm](https://github.com/getsimba-ai/simba-mmm)** — platform repo with full documentation on MMM concepts, data requirements, model configuration, optimization, and scenario planning
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pip install simba-mcp
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Or run directly without installing:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
uvx simba-mcp
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
### Cursor IDE
|
|
30
|
+
|
|
31
|
+
Add to your Cursor MCP settings (`.cursor/mcp.json` in the workspace or global settings):
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"mcpServers": {
|
|
36
|
+
"simba": {
|
|
37
|
+
"command": "uvx",
|
|
38
|
+
"args": ["simba-mcp"],
|
|
39
|
+
"env": {
|
|
40
|
+
"SIMBA_API_URL": "https://app.getsimba.ai",
|
|
41
|
+
"SIMBA_API_KEY": "simba_sk_..."
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Claude Code
|
|
49
|
+
|
|
50
|
+
Add to your Claude Code MCP config:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"mcpServers": {
|
|
55
|
+
"simba": {
|
|
56
|
+
"command": "uvx",
|
|
57
|
+
"args": ["simba-mcp"],
|
|
58
|
+
"env": {
|
|
59
|
+
"SIMBA_API_URL": "https://app.getsimba.ai",
|
|
60
|
+
"SIMBA_API_KEY": "simba_sk_..."
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Claude API (MCP Connector)
|
|
68
|
+
|
|
69
|
+
Use the remote Streamable HTTP transport with the Anthropic MCP connector:
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
import anthropic
|
|
73
|
+
|
|
74
|
+
client = anthropic.Anthropic()
|
|
75
|
+
|
|
76
|
+
response = client.beta.messages.create(
|
|
77
|
+
model="claude-sonnet-4-6",
|
|
78
|
+
max_tokens=4096,
|
|
79
|
+
messages=[{"role": "user", "content": "List my Simba models"}],
|
|
80
|
+
mcp_servers=[
|
|
81
|
+
{
|
|
82
|
+
"type": "url",
|
|
83
|
+
"url": "https://app.getsimba.ai/mcp",
|
|
84
|
+
"name": "simba",
|
|
85
|
+
"authorization_token": "simba_sk_...",
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
tools=[{"type": "mcp_toolset", "mcp_server_name": "simba"}],
|
|
89
|
+
betas=["mcp-client-2025-11-20"],
|
|
90
|
+
)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Available Tools
|
|
94
|
+
|
|
95
|
+
| Tool | Description |
|
|
96
|
+
|------|-------------|
|
|
97
|
+
| `get_data_schema` | Get the canonical CSV schema for MMM input files |
|
|
98
|
+
| `upload_data` | Upload a CSV dataset to Simba |
|
|
99
|
+
| `list_models` | List all models with their status |
|
|
100
|
+
| `create_model` | Configure and start fitting a new MMM model |
|
|
101
|
+
| `get_model_status` | Poll fitting progress for a model |
|
|
102
|
+
| `get_model_results` | Get results (ROI, contributions, response curves, diagnostics, and more) |
|
|
103
|
+
| `run_optimizer` | Run budget optimization on a completed model |
|
|
104
|
+
| `get_optimizer_results` | Get optimizer status and results |
|
|
105
|
+
| `get_scenario_template` | Generate a forward-period template for scenario planning |
|
|
106
|
+
| `run_scenario` | Run a "what-if" scenario prediction |
|
|
107
|
+
| `get_scenario_results` | Get scenario prediction results |
|
|
108
|
+
|
|
109
|
+
## Example Prompts
|
|
110
|
+
|
|
111
|
+
Try these with any connected AI assistant:
|
|
112
|
+
|
|
113
|
+
**Explore your models:**
|
|
114
|
+
> "List my Simba models and show me the channel ROI summary for the most recent complete model."
|
|
115
|
+
|
|
116
|
+
**Build a model:**
|
|
117
|
+
> "Upload this CSV data to Simba and create a new MMM model with TV, Search, and Social as media channels. Use 'revenue' as the KPI and 'date' as the date column."
|
|
118
|
+
|
|
119
|
+
**Check progress:**
|
|
120
|
+
> "What's the fitting status of model a1b2c3d4?"
|
|
121
|
+
|
|
122
|
+
**Get results:**
|
|
123
|
+
> "Show me the model diagnostics and channel contributions for model a1b2c3d4."
|
|
124
|
+
|
|
125
|
+
**Optimize budget:**
|
|
126
|
+
> "Run a budget optimization on model a1b2c3d4 with $1M total budget over 12 months. Set TV bounds to 5-40% and Search to 10-50%. Use uniform laydown weights."
|
|
127
|
+
|
|
128
|
+
**Response curves:**
|
|
129
|
+
> "Show me the response curves for model a1b2c3d4. At what spend level does TV hit diminishing returns?"
|
|
130
|
+
|
|
131
|
+
**Scenario planning:**
|
|
132
|
+
> "Get a scenario template for model a1b2c3d4 for the next 12 weeks. Then run a scenario where I increase TV by 20% and cut Search by 10%. What happens to revenue?"
|
|
133
|
+
|
|
134
|
+
**Full workflow:**
|
|
135
|
+
> "I have marketing data I want to analyze. First get the schema so I know what format is needed, then upload my data, create a model, and once it's done show me the ROI by channel."
|
|
136
|
+
|
|
137
|
+
## API Key Setup
|
|
138
|
+
|
|
139
|
+
The MCP server authenticates with the same API keys used by the Simba REST API. Create a key with the required scopes:
|
|
140
|
+
|
|
141
|
+
1. Go to **Profile > API Keys** in the Simba UI
|
|
142
|
+
2. Click **Create Key**
|
|
143
|
+
3. Set scopes: `ingest`, `read:models`, `read:results`, `create:models`, `optimize`, `scenario`
|
|
144
|
+
4. Copy the key (shown only once)
|
|
145
|
+
|
|
146
|
+
Set the key as the `SIMBA_API_KEY` environment variable in your MCP config.
|
|
147
|
+
|
|
148
|
+
## Configuration
|
|
149
|
+
|
|
150
|
+
| Environment Variable | Description | Default |
|
|
151
|
+
|---------------------|-------------|---------|
|
|
152
|
+
| `SIMBA_API_URL` | Simba API base URL | `http://localhost:5005` |
|
|
153
|
+
| `SIMBA_API_KEY` | Your Simba API key | (required) |
|
|
154
|
+
|
|
155
|
+
## Transport Modes
|
|
156
|
+
|
|
157
|
+
The server supports all MCP transport modes:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
# stdio (default) — for Cursor, Claude Code
|
|
161
|
+
simba-mcp
|
|
162
|
+
|
|
163
|
+
# Streamable HTTP — for remote deployment
|
|
164
|
+
simba-mcp --transport streamable-http --port 8100
|
|
165
|
+
|
|
166
|
+
# SSE — legacy transport
|
|
167
|
+
simba-mcp --transport sse --port 8100
|
|
168
|
+
|
|
169
|
+
# Or via uvicorn directly
|
|
170
|
+
uvicorn "simba_mcp.server:create_app()" --host 0.0.0.0 --port 8100
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## License
|
|
174
|
+
|
|
175
|
+
MIT
|