Skip to main content

tambora-mcp

MCP server that exposes Tambora 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.

Requirements

  • Python 3.10+
  • A running Tambora instance with API access
  • Claude Code (claude.ai/code) or any MCP-compatible client

Installation

If you have uv installed, you don't need to install anything up front — point your MCP client at uvx tambora-mcp@latest (see MCP Setup 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.

Option B — Persistent install from PyPI

pip install tambora-mcp

To install a specific version:

pip install tambora-mcp==0.6.0

Option C — Local development (contributors/maintainers)

git clone https://github.com/koombea/tambora-mcp.git
cd tambora-mcp
pip install -e .

Verify installation

tambora-mcp --help

MCP Setup in Claude Code

1. Locate or create your .mcp.json

The .mcp.json file lives at the root of your project (project-level) or at ~/.claude/mcp.json (global).

2. Add the tambora server

Recommended — no install step, via uvx:

{
  "mcpServers": {
    "tambora": {
      "command": "uvx",
      "args": ["tambora-mcp@latest"],
      "env": {
        "TAMBORA_API_KEY": "your-api-key"
      }
    }
  }
}

Alternative — if you already did a persistent pip install tambora-mcp:

{
  "mcpServers": {
    "tambora": {
      "command": "tambora-mcp",
      "env": {
        "TAMBORA_API_KEY": "your-api-key"
      }
    }
  }
}
Variable Description
TAMBORA_API_KEY API key for authentication. A single key can access multiple projects — call check_connectivity to list them, then pass the desired project's abbreviation as project_key on every other tool call
TAMBORA_BASE_URL Optional. Base URL of your Tambora instance. Defaults to https://admin.tambora.koombea.io — only set this to point at a different instance

3. Restart Claude Code

After saving .mcp.json, restart Claude Code so it picks up the new MCP server. You can verify it loaded correctly by asking Claude:

"Check connectivity to Tambora"


Available MCP Tools

Every tool below except check_connectivity requires a project_key argument (the project's abbreviation, e.g. "KAN", from check_connectivity's projects list).

Test Cases

Tool Description
check_connectivity Verify the Tambora API is reachable and list the projects the API key can access
create_test_case Create a single BDD test case. Optionally links Jira issues via linked_issues, sets taxonomy fields (test_type, test_subtype, test_level, design_technique, test_category) and a free-text compliance_risk note, and targets a suite by module/suite name or, for suites nested more than 2 levels deep, by suite_id/suite_path
create_test_cases Bulk-create test cases from a list (transactional — one failure rolls back the whole batch), each optionally linking Jira issues, setting taxonomy fields and compliance_risk, and targeting a suite the same way as create_test_case
edit_test_case Edit an existing test case (title, gherkin, severity, module/suite/suite_id/suite_path, labels, taxonomy fields, compliance_risk). Cannot change linked_issues — that requires the Tambora UI
list_test_cases List test cases filtered by module, suite, labels, or jira_key (linked Jira issue)

Suites

The suite tree can be arbitrarily deep (not just a flat module → suite pair). When a module/suite name given to create_test_case/create_test_cases/edit_test_case already exists elsewhere in the project's tree at a different position, the call is rejected instead of silently creating a duplicate/orphan node — pass suite_id/suite_path to target a nested suite unambiguously.

Tool Description
list_suites List all suites (modules and their children) in the project
create_suite Create a single suite — a top-level module or a nested child under an existing parent_id
delete_suite Delete an empty orphan suite (refuses if it, or its subtree with cascade, has any test cases) — for cleaning up orphans left behind by ambiguous placement
add_test_cases_to_suite Add test cases to an existing suite by name or UUID

Test Runs

Tool Description
create_test_run Create a new test run
edit_test_run Edit an existing test run (name, description, or status)
assign_test_cases Assign test cases to a test run without recording an execution result
add_test_run_results Record execution results (passed/failed/skipped/blocked) for test cases in a test run
complete_test_run Mark a test run as completed
create_test_run_from_suite Create a test run pre-populated with all test cases from a module/suite
list_test_run_cases List all test cases assigned to a specific test run (by code or name)

Documents

Docspace is a separate folder/document tree per project, independent of the suite/test-case tree. Document content is Markdown (converted to/from ProseMirror JSON server-side). Unlike every other tool, only list_documents/create_document take project_key — every other document tool takes a node_id (folder or document UUID) and resolves the project from it directly.

Tool Description
list_documents List the root-level folders and documents in a project's docspace tree
create_document Create a folder or a document (optionally with initial Markdown content)
retrieve_document Fetch a folder or document by id, including a document's Markdown content
edit_document Rename, move, re-describe, or edit a document's Markdown content (creates a new version)
delete_document Delete a folder or document (deleting a folder cascades unconditionally to every descendant)
upload_document_image Upload an image (max 10 MB) and attach it to a document, returning a presigned URL to reference in a follow-up edit_document call
list_document_versions List a document's version history, newest first, paginated
get_document_version Fetch one version's full Markdown content
restore_document_version Restore a previous version's content as a new current version

Usage Examples

Once the MCP server is registered, Claude can interact with Tambora conversationally:

"Check connectivity to Tambora"

"Create a test case for the login flow with Given/When/Then steps under the Authentication module"

"Bulk-create 3 test cases for the Sign Up suite"

"List all test cases in the Authentication module, Login suite"

"Edit TC-MPP-42 and mark it as manual"

"List all suites in the project"

"Create a nested suite called 'Contraseña' under the Mi Cineco suite"

"Delete the empty orphan suite with id d4f18d44-..."

"Add TC-MPP-42 and TC-MPP-43 to the Login suite"

"Create a test run called 'Regression v1.2.0' and mark it as In Progress"

"Complete test run TR-MPP-14"

"Create a folder called 'Specs' in the docspace"

"Create a document called 'Onboarding' with some Markdown content under the Specs folder"

"List the documents in the project and show me the version history of DOC-MPP-1"

End-to-end workflow example

1. Read requirements from a Jira ticket or spec
2. Bulk-create BDD test cases in the appropriate module and suite
3. Add the test cases to the relevant suite with add_test_cases_to_suite
4. Create a Test Run with a descriptive name
5. Complete the Test Run once execution is done

Releasing a New Version (for maintainers)

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:

git tag v0.6.0
git push origin v0.6.0

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. Users on uvx tambora-mcp@latest pick up the new version automatically; persistent installs upgrade with pip install --upgrade tambora-mcp.


Architecture

tambora_mcp/
├── server.py     # FastMCP server, tool definitions, env config
├── client.py     # Low-level HTTP client for the Tambora REST API
├── creator.py    # High-level adapter used at test-generation time
└── __main__.py   # Entry point for python -m tambora_mcp
  • TamboraClient — handles HTTP, retries, and error handling. POST timeouts abort immediately and do not retry to prevent duplicate creation.
  • TamboraCreator — normalizes MCP input fields (gherkin, severity, is_automated) into the API schema (description, priority, automation_status).
  • server.py — wires everything together via FastMCP and reads configuration from environment variables at startup.

Changelog

Unreleased

  • New tools: list_documents, create_document, retrieve_document, edit_document, delete_document, upload_document_image, list_document_versions, get_document_version, restore_document_version — manage a project's docspace (folder/document) tree, independent from the suite/test-case tree. Document content is Markdown, converted to/from ProseMirror JSON server-side. Unlike other tools, the node_id-based ones don't take project_key — the project is resolved from the node id directly.
  • New field: compliance_risk — optional free-text field on create_test_case/create_test_cases/edit_test_case, passed straight through to the backend and included in list_test_cases' response. Unlike the taxonomy fields, passing "" on edit stores a literal empty string rather than clearing it to null.
  • Fix: bulk_create_test_cases's fallback to individual creates no longer triggers on a definitive 4xx rejection from the bulk endpoint (only on genuine infra failures — 5xx after retries, connection errors). The bulk endpoint is transactional; falling back there was silently creating the exact partial state (orphan suites + a stray test case) the rejection was meant to prevent.
  • Fix: suite placement / "empty suite" bug. create_test_case/create_test_cases/edit_test_case now reject (instead of silently creating a duplicate/orphan node) whenever the given module/suite name already exists elsewhere in the project's suite tree at a different position. Added suite_id/suite_path params to all three tools to target a suite at any depth unambiguously, bypassing name resolution entirely, plus create_missing to control whether a genuinely-missing suite segment gets auto-created or rejected.
  • New tools: create_suite (create a single suite anywhere in the tree) and delete_suite (delete an empty orphan suite, optionally cascading over an empty subtree) — for precisely targeting nested suites and cleaning up orphans left behind by earlier ambiguous placement.
  • Fix: edit_test_case was sending the wrong wire field names (feature/story instead of module/suite) for its module/suite params, so moving a test case's module/suite via edit silently had no effect.
  • New: Jira issue linking. create_test_case/create_test_cases accept an optional linked_issues list of Jira issue keys (e.g. ["TAM-123"]), linked to the test case(s) at creation time. Requires an active Jira integration on the project's organization. list_test_cases gained a jira_key filter, and every returned test case now includes a linked_issues array. Not supported on edit_test_case (backend limitation — that requires the internal Tambora UI/API).
  • Required project_key on every tool (except check_connectivity): the backend no longer resolves the project from the API key, since a single key can access multiple projects (see check_connectivity's projects list). Every other call must now pass project_key (the project abbreviation) explicitly. This differs from the TAMBORA_PROJECT_KEY env var tried in v0.3.1 and reverted — project_key is now a required per-call argument, not a static session value.

v0.5.0

  • 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.
  • New filters for list_test_cases: code (look up a specific test case), created_after, and created_before (ISO 8601 date range filtering).
  • Tags on creation: create_test_case now accepts a tags parameter that is sent to the API on creation. No extra edit call required.
  • Rename: labels parameter renamed to tags across create_test_case, list_test_cases, creator.py, and client.py for consistency with Tambora's terminology.
  • Fix: create_test_case now defaults is_automated to false instead of true.

v0.4.0

  • Breaking change: feature/story parameters renamed to module/suite across all tools to match Tambora's hierarchy model (Module → Suite).
  • New tools: edit_test_case, list_suites, add_test_cases_to_suite.
  • Fix: corrected suite API endpoint paths (/suites/ → /suite/).
  • Fix: edit_test_case response now correctly reads the nested data.data envelope from the API.
  • Fix: assign_test_cases and add_test_cases_to_suite now accept test_case_codes as a JSON string for reliable MCP client compatibility.

v0.3.1

  • Fix: create_test_case and bulk_create_test_cases no longer receive project_key from TamboraCreator.

v0.3.0

  • New tool: edit_test_run.
  • Fix: corrected test run API endpoint paths (test-runs → testrun).
  • Fix: create_test_run now sends status with a default of "Pending".
  • Fix: create_test_cases and add_test_run_results now accept list parameters as JSON strings.
  • Fix: complete_test_run response now correctly reads the status field.

v0.2.0

  • Added list_test_cases, create_test_run, create_test_run_from_suite, assign_test_cases, add_test_run_results, complete_test_run tools.

v0.1.0

  • Initial release with check_connectivity, create_test_case, create_test_cases.

License

MIT

Release files for tambora-mcp 3.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tambora-mcp 3.0.0
File Size Uploaded
tambora_mcp-3.0.0.tar.gz 62.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tambora-mcp 3.0.0
File Interpreter ABI Platform
tambora_mcp-3.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 95.0 kB

Release files / tambora_mcp-3.0.0.tar.gz

Download URL tambora_mcp-3.0.0.tar.gz
Size 62.3 kB
Tags Source
SHA-256 checksum
How to use checksums
fc6aa8d26279e5e8554a5f430245930e459a18792646c03f8e923a951ee7898b
BLAKE2b-256 checksum
How to use checksums
900011efe582a730e522642429c5cb56cc74627cf632244ce4a1b901f3dde64e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release files / tambora_mcp-3.0.0-py3-none-any.whl

Download URL tambora_mcp-3.0.0-py3-none-any.whl
Size 32.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5dc2ff1dbd38fe5866d60f584a16f2eccb3abec8d925d8ba3593c58d3e5ee2d7
BLAKE2b-256 checksum
How to use checksums
b99a493fbae4200e0dd39fd4e0b6c4fd46ccc90fe76c22728fcf2b057d16d564
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release history Release notifications | RSS feed

3.0.2

2 release files

3.0.1

2 release files

This release

3.0.0 This release

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.0.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page