Skip to main content

MCP server for Allure TestOps — projects, launches, test cases, test results

Project description

allure-testops-mcp

PyPI Python License: MIT Tests

MCP server for Allure TestOps. Lets an LLM agent (Claude Code, Cursor, OpenCode, etc.) query projects, launches, test cases and test results through the Allure REST API.

Python, FastMCP, stdio transport.

Works with any Allure TestOps instance — SaaS qameta.io or self-hosted / on-prem. Designed with corporate networks in mind: configurable proxy bypass, optional SSL-verify toggle, API-token auth.

Design highlights

  • Tool annotations — every read tool is marked readOnlyHint: True / openWorldHint: True. The 6 default tools are read-only; MCP clients won't ask for confirmation. Optional write tools are gated behind ALLURE_ENABLE_WRITE (see below) and carry the appropriate destructiveHint annotations.
  • Structured output on every tool — each tool declares a TypedDict return type, so FastMCP auto-generates an outputSchema and every result carries both structuredContent (typed payload) and a pre-rendered markdown text block.
  • Structured errors — auth, 404, 403, 429, 5xx, missing-env errors converted to actionable messages (e.g. "Authentication failed — verify ALLURE_TOKEN has API scope").
  • Pydantic input validation — every argument has typed constraints (ranges, lengths, literals) auto-exposed as JSON Schema.
  • Pagination — list tools return a pagination block with page, total, has_more, next_page.
  • Progress reporting via MCP Context — tools that make multiple API calls (allure_get_project_statistics, allure_search_failed_tests) and allure_list_test_cases emit ctx.report_progress + ctx.info events so compatible clients can render progress bars and step labels.

Features

6 tools covering everyday Allure TestOps workflows:

Discovery

  • allure_list_projects — all projects with ID, name, abbreviation
  • allure_get_project_statistics — TC count, automation rate, last launch summary

Launches & results

  • allure_list_launches — recent launches with pass/fail stats
  • allure_get_test_results — test results in a launch (filter by status)
  • allure_search_failed_tests — FAILED/BROKEN tests in last or specified launch

Test cases

  • allure_list_test_cases — test cases with automated/manual filter (each result also carries its layer, e.g. UNIT / API / E2E)

Write — opt-in (set ALLURE_ENABLE_WRITE=true to register these)

  • allure_create_test_case — create a new test case in a project
  • allure_update_test_case — partial update (only the fields you pass are changed)
  • allure_delete_test_case — permanent delete; carries destructiveHint: True and requires an explicit confirm=true flag

Installation

Requires Python 3.10+.

# via uvx (recommended)
uvx --from allure-testops-mcp allure-testops-mcp

# or via pipx
pipx install allure-testops-mcp

Configuration

Short version — claude mcp add:

claude mcp add allure -s project \
  --env ALLURE_URL=https://allure.example.com \
  --env ALLURE_TOKEN=your-api-token \
  --env ALLURE_SSL_VERIFY=true \
  -- uvx --from allure-testops-mcp allure-testops-mcp

Or in ~/.claude.json / project .mcp.json:

{
  "mcpServers": {
    "allure": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "allure-testops-mcp", "allure-testops-mcp"],
      "env": {
        "ALLURE_URL": "https://allure.example.com",
        "ALLURE_TOKEN": "${ALLURE_TOKEN}",
        "ALLURE_SSL_VERIFY": "true"
      }
    }
  }
}

See .env.example for a template of all supported environment variables.

Check:

claude mcp list
# allure: uvx --from allure-testops-mcp allure-testops-mcp - ✓ Connected

Environment variables

Variable Required Description
ALLURE_URL yes Allure TestOps URL (e.g. https://allure.example.com)
ALLURE_TOKEN yes API token from Allure TestOps (Profile → API tokens)
ALLURE_SSL_VERIFY no true/false. Set to false for self-signed corp certs. Default: true.
ALLURE_ENABLE_WRITE no true/false. When true, registers the three write tools (allure_create_test_case / allure_update_test_case / allure_delete_test_case). Default: false — read-only server.

Example usage

In Claude Code:

  • "List all Allure projects"
  • "Show last 10 launches for project 63"
  • "Failed tests in the last launch for project 175"
  • "Automation rate for project 842"
  • "Test results in launch 12345 with status FAILED"

Security considerations

  • API token is read from ALLURE_TOKEN env var — never passed on the command line and never written to logs.
  • Secrets are not echoed back in tool responses (no stat.request_headers dumps, no session.auth reflection).
  • Self-signed SSL is opt-in via ALLURE_SSL_VERIFY=false — the default is true. Disabling verification on a public network is a security risk; only use for trusted corporate instances.
  • Proxy discovery is disabled (session.trust_env = False) — the MCP deliberately ignores HTTP_PROXY/HTTPS_PROXY env vars so the session cannot be silently routed through an unintended proxy. If your Allure instance is reachable only via proxy, run the MCP in an environment where requests can resolve directly.
  • Write operations are opt-in — without ALLURE_ENABLE_WRITE=true the server registers only the 6 read-only tools and cannot create, modify, or delete anything, even if the API token has write scope. When the flag is set, the three write tools register; allure_delete_test_case carries destructiveHint: True so compliant MCP clients ask for per-call confirmation, and the tool itself requires an explicit confirm=true argument as a belt-and-braces guard.
  • Input validation via Pydantic — every tool argument is typed and bounded (IDs must be ≥ 1, pagination capped at 200-500).

Rate limits

Allure TestOps enforces per-instance rate limits (typically ~60 requests / minute for API tokens). On HTTP 429 the MCP returns an actionable error suggesting you:

  • Wait 30-60 seconds before retrying.
  • Reduce the size parameter (default 50 for test results, 200 for projects).
  • Paginate with smaller page sizes.

Two tools perform multiple API calls internally:

  • allure_get_project_statistics — 3 calls (TC counts + launches + launch statistic).
  • allure_search_failed_tests — 2-3 calls (latest launch resolve + FAILED + BROKEN).

Both use MCP Context to report per-step progress; allure_list_test_cases also emits a single progress event. Monitor the progress stream in compatible clients.

Development

git clone https://github.com/mshegolev/allure-testops-mcp.git
cd allure-testops-mcp
pip install -e '.[dev]'
pytest

Run the server directly (stdio transport, waits on stdin for MCP messages):

ALLURE_URL=... ALLURE_TOKEN=... allure-testops-mcp

License

MIT © Mikhail Shchegolev

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

allure_testops_mcp-0.3.0.tar.gz (38.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

allure_testops_mcp-0.3.0-py3-none-any.whl (26.4 kB view details)

Uploaded Python 3

File details

Details for the file allure_testops_mcp-0.3.0.tar.gz.

File metadata

  • Download URL: allure_testops_mcp-0.3.0.tar.gz
  • Upload date:
  • Size: 38.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for allure_testops_mcp-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4b54ad7bea01eb39703c0a10a691515fe92494f41f5219ccbbde9a75fd0de5df
MD5 c86aa6367cb2f5b8b618627ad091d46e
BLAKE2b-256 43f3347a24518b80b36e60020bd22e1af27b51366e396658cec55ff0b8230a3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for allure_testops_mcp-0.3.0.tar.gz:

Publisher: publish.yml on mshegolev/allure-testops-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file allure_testops_mcp-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for allure_testops_mcp-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 96c99fccfc7bea5f32af560ac0444203535b55ab5fd28e3c0b0985e1d1f0b5de
MD5 81bf6465efab9fb53a702cea2ba95222
BLAKE2b-256 c0ddc285507c9c3914d797845bc4a78b4269eeed4c3bdc7072858c74b22c2843

See more details on using hashes here.

Provenance

The following attestation bundles were made for allure_testops_mcp-0.3.0-py3-none-any.whl:

Publisher: publish.yml on mshegolev/allure-testops-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page