tambora-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.
- tambora_mcp-0.1.0/.github/workflows/publish.yml +38 -0
- tambora_mcp-0.1.0/.gitignore +25 -0
- tambora_mcp-0.1.0/.mcp.json +17 -0
- tambora_mcp-0.1.0/CLAUDE.md +116 -0
- tambora_mcp-0.1.0/LICENSE +21 -0
- tambora_mcp-0.1.0/PKG-INFO +261 -0
- tambora_mcp-0.1.0/README.md +238 -0
- tambora_mcp-0.1.0/docs/architecture-diagram.md +100 -0
- tambora_mcp-0.1.0/docs/installation-guide.md +159 -0
- tambora_mcp-0.1.0/docs/usage-guide.md +347 -0
- tambora_mcp-0.1.0/pyproject.toml +46 -0
- tambora_mcp-0.1.0/tambora_mcp/__init__.py +11 -0
- tambora_mcp-0.1.0/tambora_mcp/__main__.py +3 -0
- tambora_mcp-0.1.0/tambora_mcp/_version.py +24 -0
- tambora_mcp-0.1.0/tambora_mcp/client.py +577 -0
- tambora_mcp-0.1.0/tambora_mcp/creator.py +130 -0
- tambora_mcp-0.1.0/tambora_mcp/server.py +652 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build-and-publish:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
environment: pypi
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
id-token: write
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 0
|
|
19
|
+
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
|
|
24
|
+
# No test step yet: this repo has no tests/ suite. Add a `pytest`
|
|
25
|
+
# step here before build once one exists.
|
|
26
|
+
|
|
27
|
+
- name: Build
|
|
28
|
+
run: |
|
|
29
|
+
pip install hatch
|
|
30
|
+
hatch build
|
|
31
|
+
|
|
32
|
+
- name: Check package metadata
|
|
33
|
+
run: |
|
|
34
|
+
pip install twine
|
|
35
|
+
twine check dist/*
|
|
36
|
+
|
|
37
|
+
- name: Publish to PyPI
|
|
38
|
+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
dist/
|
|
6
|
+
build/
|
|
7
|
+
.eggs/
|
|
8
|
+
tambora_mcp/_version.py
|
|
9
|
+
|
|
10
|
+
# Virtual environments
|
|
11
|
+
venv/
|
|
12
|
+
.venv/
|
|
13
|
+
env/
|
|
14
|
+
|
|
15
|
+
# Environment / secrets
|
|
16
|
+
.env
|
|
17
|
+
*.env
|
|
18
|
+
|
|
19
|
+
# IDE
|
|
20
|
+
.idea/
|
|
21
|
+
.vscode/
|
|
22
|
+
*.swp
|
|
23
|
+
|
|
24
|
+
# OS
|
|
25
|
+
.DS_Store
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"tambora": {
|
|
4
|
+
"command": "python3",
|
|
5
|
+
"args": [
|
|
6
|
+
"-m",
|
|
7
|
+
"tambora_mcp"
|
|
8
|
+
],
|
|
9
|
+
"cwd": "/Users/jesus.palomino/Documents/GitHub/tambora-mcp",
|
|
10
|
+
"env": {
|
|
11
|
+
"TAMBORA_BASE_URL": "http://localhost:8000",
|
|
12
|
+
"TAMBORA_API_KEY": "vnsGEJS6v0DWaOHFtK3-qJtEimLFJej5M16y2seLrpc",
|
|
13
|
+
"TAMBORA_PROJECT_KEY": "MPP"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
`tambora-mcp` is a [FastMCP](https://github.com/jlowin/fastmcp) server that exposes Tambora test-case management operations as native MCP tools, allowing Claude to create test cases and manage test runs without generating and executing scripts manually.
|
|
8
|
+
|
|
9
|
+
## Commands
|
|
10
|
+
|
|
11
|
+
**Install for development:**
|
|
12
|
+
```bash
|
|
13
|
+
pip install -e .
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Run the server:**
|
|
17
|
+
```bash
|
|
18
|
+
tambora-mcp
|
|
19
|
+
# or
|
|
20
|
+
python -m tambora_mcp
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Build the package:**
|
|
24
|
+
```bash
|
|
25
|
+
pip install hatch
|
|
26
|
+
hatch build
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Release a new version:**
|
|
30
|
+
```bash
|
|
31
|
+
git tag v0.6.0
|
|
32
|
+
git push origin v0.6.0
|
|
33
|
+
```
|
|
34
|
+
Pushing a `v*` tag triggers `.github/workflows/publish.yml`, which builds and publishes to PyPI via Trusted Publishing (OIDC — no stored tokens). The version is resolved automatically from the git tag via `hatch-vcs`; never bump a version string in `pyproject.toml`/`__init__.py` by hand, and never run `twine upload` manually.
|
|
35
|
+
|
|
36
|
+
## Architecture
|
|
37
|
+
|
|
38
|
+
The package has two distinct layers:
|
|
39
|
+
|
|
40
|
+
### `TamboraClient` (`client.py`)
|
|
41
|
+
Low-level HTTP client for the Tambora REST API. Key behaviors:
|
|
42
|
+
- All public methods are safe — they catch all network/HTTP errors and return `None`/`False` instead of raising.
|
|
43
|
+
- Retries: `MAX_RETRIES=2` with `RETRY_BACKOFF=1s` exponential backoff.
|
|
44
|
+
- **Critical**: POST requests that time out abort immediately and do NOT retry (`_last_post_timeout` flag), to prevent duplicate creation in Tambora.
|
|
45
|
+
- Bulk create falls back to individual creates on failure, but **not** on timeout.
|
|
46
|
+
- `gherkin_to_prosemirror()` converts Gherkin text into the ProseMirror document schema expected by the Tambora API.
|
|
47
|
+
- Auth uses the `http-api-token` header.
|
|
48
|
+
|
|
49
|
+
**Field mappings:**
|
|
50
|
+
- Severity → Priority: `critical→Critical`, `normal→Low`, `minor→Trivial`
|
|
51
|
+
- Status: `passed→Passed`, `failed→Failed`, `skipped→Skipped`, `error→Blocked`
|
|
52
|
+
|
|
53
|
+
### `TamboraCreator` (`creator.py`)
|
|
54
|
+
High-level adapter used at test-generation time (not during test execution). Bridges the MCP tool interface to `TamboraClient`. Normalizes the `gherkin`/`severity`/`is_automated` fields from MCP inputs into the `description`/`priority`/`automation_status` fields expected by the client.
|
|
55
|
+
|
|
56
|
+
### `server.py`
|
|
57
|
+
FastMCP server wiring. Reads configuration from environment variables at startup and instantiates a module-level `_creator` (TamboraCreator) and `_client` (TamboraClient). Exposes MCP tools: `check_connectivity`, `create_test_case`, `create_test_cases`, `edit_test_case`, `list_test_cases`, `create_test_run`, `edit_test_run`, `assign_test_cases`, `add_test_run_results`, `complete_test_run`, `create_test_run_from_suite`, `list_suites`, `add_test_cases_to_suite`.
|
|
58
|
+
|
|
59
|
+
**Hierarchy model:** `module` (top-level, `is_module: true`) → `suite` (child, has `parent_id`). Use `module`/`suite` params, not `feature`/`story`.
|
|
60
|
+
|
|
61
|
+
## Configuration
|
|
62
|
+
|
|
63
|
+
All configuration is via environment variables:
|
|
64
|
+
|
|
65
|
+
| Variable | Description |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `TAMBORA_BASE_URL` | Tambora instance URL (e.g. `https://your-instance.tambora.com`) |
|
|
68
|
+
| `TAMBORA_API_KEY` | API key for authentication (project is derived from the token on the backend) |
|
|
69
|
+
|
|
70
|
+
## MCP Registration
|
|
71
|
+
|
|
72
|
+
Register in `.mcp.json`. Recommended — no install step, via `uvx` (package is published on PyPI as `tambora-mcp`):
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"mcpServers": {
|
|
76
|
+
"tambora": {
|
|
77
|
+
"command": "uvx",
|
|
78
|
+
"args": ["tambora-mcp@latest"],
|
|
79
|
+
"env": {
|
|
80
|
+
"TAMBORA_BASE_URL": "https://your-instance.tambora.com",
|
|
81
|
+
"TAMBORA_API_KEY": "your-api-key"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Alternative, if `tambora-mcp` was installed persistently via `pip install tambora-mcp`:
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"mcpServers": {
|
|
92
|
+
"tambora": {
|
|
93
|
+
"command": "tambora-mcp",
|
|
94
|
+
"env": {
|
|
95
|
+
"TAMBORA_BASE_URL": "https://your-instance.tambora.com",
|
|
96
|
+
"TAMBORA_API_KEY": "your-api-key"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## API Endpoints Used
|
|
104
|
+
|
|
105
|
+
- `GET /api/v1/health` — connectivity check
|
|
106
|
+
- `POST /api/v1/testcase/external-create` — single test case
|
|
107
|
+
- `POST /api/v1/testcase/external-bulk-create` — bulk test cases
|
|
108
|
+
- `PATCH /api/v1/testcase/{code}/external-edit` — edit existing test case *(backend needed)*
|
|
109
|
+
- `GET /api/v1/testcase/external-list` — list test cases by project/feature/story/labels
|
|
110
|
+
- `GET /api/v1/suite/external-list` — list suites for the project
|
|
111
|
+
- `POST /api/v1/suite/external-add-test-cases` — add test cases to a suite
|
|
112
|
+
- `POST /api/v1/test-runs/external-create` — create test run
|
|
113
|
+
- `PATCH /api/v1/testrun/{code}/external-edit` — edit test run
|
|
114
|
+
- `POST /api/v1/testrun/{code}/external-assign` — assign test case codes to a run
|
|
115
|
+
- `POST /api/v1/testrun/{code}/external-results` — add results
|
|
116
|
+
- `PUT /api/v1/testrun/{code}/external-complete` — complete test run
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Koombea
|
|
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,261 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tambora-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: MCP server for Tambora test case management
|
|
5
|
+
Project-URL: Homepage, https://github.com/koombea/tambora-mcp
|
|
6
|
+
Project-URL: Repository, https://github.com/koombea/tambora-mcp
|
|
7
|
+
Author-email: Koombea <jesus.palomino@koombea.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Software Development :: Testing
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Requires-Dist: fastmcp
|
|
21
|
+
Requires-Dist: requests>=2.28.0
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# tambora-mcp
|
|
25
|
+
|
|
26
|
+
MCP server that exposes [Tambora](https://tambora.io) test case management operations as native tools for Claude. Allows Claude to create test cases, manage test runs, and list existing tests without generating and executing scripts manually.
|
|
27
|
+
|
|
28
|
+
## Requirements
|
|
29
|
+
|
|
30
|
+
- Python 3.10+
|
|
31
|
+
- A running Tambora instance with API access
|
|
32
|
+
- Claude Code (claude.ai/code) or any MCP-compatible client
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Installation
|
|
37
|
+
|
|
38
|
+
### Option A — No install, via `uvx` (recommended)
|
|
39
|
+
|
|
40
|
+
If you have [uv](https://docs.astral.sh/uv/) installed, you don't need to install anything up front — point your MCP client at `uvx tambora-mcp@latest` (see [MCP Setup](#mcp-setup-in-claude-code) below). The `@latest` suffix matters: without it, `uvx` resolves the version once and reuses that cached environment on later runs instead of re-checking PyPI.
|
|
41
|
+
|
|
42
|
+
### Option B — Persistent install from PyPI
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pip install tambora-mcp
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
To install a specific version:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pip install tambora-mcp==0.6.0
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Option C — Local development (contributors/maintainers)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
git clone https://github.com/koombea/tambora-mcp.git
|
|
58
|
+
cd tambora-mcp
|
|
59
|
+
pip install -e .
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Verify installation
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
tambora-mcp --help
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## MCP Setup in Claude Code
|
|
71
|
+
|
|
72
|
+
### 1. Locate or create your `.mcp.json`
|
|
73
|
+
|
|
74
|
+
The `.mcp.json` file lives at the root of your project (project-level) or at `~/.claude/mcp.json` (global).
|
|
75
|
+
|
|
76
|
+
### 2. Add the tambora server
|
|
77
|
+
|
|
78
|
+
Recommended — no install step, via `uvx`:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"mcpServers": {
|
|
83
|
+
"tambora": {
|
|
84
|
+
"command": "uvx",
|
|
85
|
+
"args": ["tambora-mcp@latest"],
|
|
86
|
+
"env": {
|
|
87
|
+
"TAMBORA_BASE_URL": "https://your-instance.tambora.com",
|
|
88
|
+
"TAMBORA_API_KEY": "your-api-key"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Alternative — if you already did a persistent `pip install tambora-mcp`:
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"mcpServers": {
|
|
100
|
+
"tambora": {
|
|
101
|
+
"command": "tambora-mcp",
|
|
102
|
+
"env": {
|
|
103
|
+
"TAMBORA_BASE_URL": "https://your-instance.tambora.com",
|
|
104
|
+
"TAMBORA_API_KEY": "your-api-key"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
| Variable | Description |
|
|
112
|
+
|---|---|
|
|
113
|
+
| `TAMBORA_BASE_URL` | Base URL of your Tambora instance |
|
|
114
|
+
| `TAMBORA_API_KEY` | API key for authentication (project is derived from the token) |
|
|
115
|
+
|
|
116
|
+
### 3. Restart Claude Code
|
|
117
|
+
|
|
118
|
+
After saving `.mcp.json`, restart Claude Code so it picks up the new MCP server. You can verify it loaded correctly by asking Claude:
|
|
119
|
+
|
|
120
|
+
> "Check connectivity to Tambora"
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## Available MCP Tools
|
|
125
|
+
|
|
126
|
+
### Test Cases
|
|
127
|
+
|
|
128
|
+
| Tool | Description |
|
|
129
|
+
|---|---|
|
|
130
|
+
| `check_connectivity` | Verify the Tambora API is reachable |
|
|
131
|
+
| `create_test_case` | Create a single BDD test case |
|
|
132
|
+
| `create_test_cases` | Bulk-create test cases from a list |
|
|
133
|
+
| `edit_test_case` | Edit an existing test case (title, gherkin, severity, module, suite, labels) |
|
|
134
|
+
| `list_test_cases` | List test cases filtered by module, suite, or labels |
|
|
135
|
+
|
|
136
|
+
### Suites
|
|
137
|
+
|
|
138
|
+
| Tool | Description |
|
|
139
|
+
|---|---|
|
|
140
|
+
| `list_suites` | List all suites (modules and their children) in the project |
|
|
141
|
+
| `add_test_cases_to_suite` | Add test cases to an existing suite by name or UUID |
|
|
142
|
+
|
|
143
|
+
### Test Runs
|
|
144
|
+
|
|
145
|
+
| Tool | Description |
|
|
146
|
+
|---|---|
|
|
147
|
+
| `create_test_run` | Create a new test run |
|
|
148
|
+
| `edit_test_run` | Edit an existing test run (name, description, or status) |
|
|
149
|
+
| `complete_test_run` | Mark a test run as completed |
|
|
150
|
+
| `list_test_run_cases` | List all test cases assigned to a specific test run (by code or name) |
|
|
151
|
+
|
|
152
|
+
> **Note:** `assign_test_cases`, `add_test_run_results`, and `create_test_run_from_suite` require a backend endpoint not yet available. They will be enabled in a future release.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Usage Examples
|
|
157
|
+
|
|
158
|
+
Once the MCP server is registered, Claude can interact with Tambora conversationally:
|
|
159
|
+
|
|
160
|
+
> "Check connectivity to Tambora"
|
|
161
|
+
|
|
162
|
+
> "Create a test case for the login flow with Given/When/Then steps under the Authentication module"
|
|
163
|
+
|
|
164
|
+
> "Bulk-create 3 test cases for the Sign Up suite"
|
|
165
|
+
|
|
166
|
+
> "List all test cases in the Authentication module, Login suite"
|
|
167
|
+
|
|
168
|
+
> "Edit TC-MPP-42 and mark it as manual"
|
|
169
|
+
|
|
170
|
+
> "List all suites in the project"
|
|
171
|
+
|
|
172
|
+
> "Add TC-MPP-42 and TC-MPP-43 to the Login suite"
|
|
173
|
+
|
|
174
|
+
> "Create a test run called 'Regression v1.2.0' and mark it as In Progress"
|
|
175
|
+
|
|
176
|
+
> "Complete test run TR-MPP-14"
|
|
177
|
+
|
|
178
|
+
### End-to-end workflow example
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
1. Read requirements from a Jira ticket or spec
|
|
182
|
+
2. Bulk-create BDD test cases in the appropriate module and suite
|
|
183
|
+
3. Add the test cases to the relevant suite with add_test_cases_to_suite
|
|
184
|
+
4. Create a Test Run with a descriptive name
|
|
185
|
+
5. Complete the Test Run once execution is done
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Releasing a New Version (for maintainers)
|
|
191
|
+
|
|
192
|
+
Versioning is automatic — the package version is derived from the git tag at build time, so there's nothing to bump in source. To cut a release:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
git tag v0.6.0
|
|
196
|
+
git push origin v0.6.0
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Pushing the tag triggers `.github/workflows/publish.yml`, which builds the package and publishes it to PyPI. Watch the run under the repo's **Actions** tab, then confirm the new version is live at [pypi.org/project/tambora-mcp](https://pypi.org/project/tambora-mcp/). Users on `uvx tambora-mcp@latest` pick up the new version automatically; persistent installs upgrade with `pip install --upgrade tambora-mcp`.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## Architecture
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
tambora_mcp/
|
|
207
|
+
├── server.py # FastMCP server, tool definitions, env config
|
|
208
|
+
├── client.py # Low-level HTTP client for the Tambora REST API
|
|
209
|
+
├── creator.py # High-level adapter used at test-generation time
|
|
210
|
+
└── __main__.py # Entry point for python -m tambora_mcp
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
- **`TamboraClient`** — handles HTTP, retries, and error handling. POST timeouts abort immediately and do not retry to prevent duplicate creation.
|
|
214
|
+
- **`TamboraCreator`** — normalizes MCP input fields (`gherkin`, `severity`, `is_automated`) into the API schema (`description`, `priority`, `automation_status`).
|
|
215
|
+
- **`server.py`** — wires everything together via FastMCP and reads configuration from environment variables at startup.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Changelog
|
|
220
|
+
|
|
221
|
+
### v0.5.0
|
|
222
|
+
|
|
223
|
+
- **New tool**: `list_test_run_cases` — list all test cases assigned to a test run, filterable by code or name. Each result includes code, summary, description, suite, severity, automation status, and tags.
|
|
224
|
+
- **New filters for `list_test_cases`**: `code` (look up a specific test case), `created_after`, and `created_before` (ISO 8601 date range filtering).
|
|
225
|
+
- **Tags on creation**: `create_test_case` now accepts a `tags` parameter that is sent to the API on creation. No extra edit call required.
|
|
226
|
+
- **Rename**: `labels` parameter renamed to `tags` across `create_test_case`, `list_test_cases`, `creator.py`, and `client.py` for consistency with Tambora's terminology.
|
|
227
|
+
- **Fix**: `create_test_case` now defaults `is_automated` to `false` instead of `true`.
|
|
228
|
+
|
|
229
|
+
### v0.4.0
|
|
230
|
+
|
|
231
|
+
- **Breaking change**: `feature`/`story` parameters renamed to `module`/`suite` across all tools to match Tambora's hierarchy model (Module → Suite).
|
|
232
|
+
- **New tools**: `edit_test_case`, `list_suites`, `add_test_cases_to_suite`.
|
|
233
|
+
- **Fix**: corrected suite API endpoint paths (`/suites/` → `/suite/`).
|
|
234
|
+
- **Fix**: `edit_test_case` response now correctly reads the nested `data.data` envelope from the API.
|
|
235
|
+
- **Fix**: `assign_test_cases` and `add_test_cases_to_suite` now accept `test_case_codes` as a JSON string for reliable MCP client compatibility.
|
|
236
|
+
|
|
237
|
+
### v0.3.1
|
|
238
|
+
|
|
239
|
+
- **Fix**: `create_test_case` and `bulk_create_test_cases` no longer receive `project_key` from `TamboraCreator`.
|
|
240
|
+
|
|
241
|
+
### v0.3.0
|
|
242
|
+
|
|
243
|
+
- **New tool**: `edit_test_run`.
|
|
244
|
+
- **Fix**: corrected test run API endpoint paths (`test-runs` → `testrun`).
|
|
245
|
+
- **Fix**: `create_test_run` now sends `status` with a default of `"Pending"`.
|
|
246
|
+
- **Fix**: `create_test_cases` and `add_test_run_results` now accept list parameters as JSON strings.
|
|
247
|
+
- **Fix**: `complete_test_run` response now correctly reads the `status` field.
|
|
248
|
+
|
|
249
|
+
### v0.2.0
|
|
250
|
+
|
|
251
|
+
- Added `list_test_cases`, `create_test_run`, `create_test_run_from_suite`, `assign_test_cases`, `add_test_run_results`, `complete_test_run` tools.
|
|
252
|
+
|
|
253
|
+
### v0.1.0
|
|
254
|
+
|
|
255
|
+
- Initial release with `check_connectivity`, `create_test_case`, `create_test_cases`.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## License
|
|
260
|
+
|
|
261
|
+
MIT
|