Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.mshegolev/allure-testops-mcp

PYPI · ALLURE-TESTOPS-MCP

Allure TestOps MCP — projects, launches, test cases, test results via REST API.

Available components

0 this week 93 Trust /100

Last scanned (3 hours ago)

Scores higher than 97% of PyPI servers

Category Testing and QA

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 0 of 31 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to mshegolev/allure-testops-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 6 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability67
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 3627 tokens (~279/item across 13 items; 13 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 13 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Nov 26 0
    • Security disclosure: unverified → fail ▼ functional
  • 2 Nov 26 0
    • Stability: 0.97 → pass security
    • Security disclosure: fail → unverified ▼ functional
  • 1 Nov 26 0
    • Stability: pass → 0.97 functional
  • 29 Oct 26 0
    • Stability: pass → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Security disclosure: unverified → fail ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Package version: 0.9.3 → 0.9.5 functional
    • Package version: 0.9.3 → 0.9.4 functional
  • 28 Oct 26 0
    • Security disclosure: fail → unverified ▼ functional
  • 26 Oct 26 0
    • Stability: 0.97 → pass security
  • 25 Oct 26 0
    • Stability: pass → 0.97 functional
  • 24 Oct 26 0
    • Security disclosure: unverified → fail ▼ functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/allure-testops-mcp@0.9.5

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo mshegolev/allure-testops-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/mshegolev/allure-testops-mcp/.github/workflows/publish.yml@refs/tags/v0.9.5
Rekor log index 3576503242
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:b6bb3016074f65b069122acd32220ee9014b7860cf8a359061ad92e1d6d0def7

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 31 packages
Packages resolved 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 13 exposed · ~3,627 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
allure_get_project_statistics ~355

Get summary statistics for an Allure project. Returns TC count, automation rate, and the last closed launch's pass/fail breakdown. Performs 3-4 API calls — progress is reported via MCP Context (visible as progress updates in compatible clients). Args: project_id: Allure project ID (see ``allure_list_projects``). ctx: MCP Context injected by FastMCP (used for progress reporting; never supplied by the agent directly). Returns: dict with keys: - ``project_id`` (int) - ``total_test_cases`` (int) - ``automated_test_cases`` (int) - ``manual_test_cases`` (int) - ``automation_rate_pct`` (float) - ``last_launch_id`` (int | None): latest *closed* launch - ``last_launch_name`` (str | None) - ``last_launch_passed`` / ``last_launch_failed`` / ``last_launch_broken`` (int) - ``last_launch_total`` (int) - ``recent_launches_count`` (int): launches examined to find the latest closed one Examples: - "How automated is project 63?" -> ``project_id=63``, read ``automation_rate_pct`` - "What was the last passing run for project 175?" -> read ``last_launch_passed`` Don't use when: - You need per-test detail (use ``allure_get_test_results``). - You need the full launch history (use ``allure_list_launches``).

NameTypeReqDescription
project_idintegeryesAllure project ID (discover via allure_list_projects).
NameTypeReqDescription
automated_test_casesintegeryes–
automation_rate_pctnumberyes–
last_launch_brokenintegeryes–
last_launch_failedintegeryes–
last_launch_id–yes–
last_launch_name–yes–
last_launch_passedintegeryes–
last_launch_totalintegeryes–
manual_test_casesintegeryes–
project_idintegeryes–
recent_launches_countintegeryes–
total_test_casesintegeryes–

No examples provided.

allure_get_test_case ~296

Get one test case's full detail — fields, status/layer, tags, and steps. Unlike ``allure_list_test_cases`` (summaries), this returns the body of a single test case: description, precondition, expected result, and the manual scenario steps (flattened with a ``depth`` marker). Use it to read or review the actual content of a test case. Scenario steps are loaded from ``GET /testcase/{id}/scenario`` (nested tree). If that returns no steps, falls back to ``GET /testcase/{id}/step`` (normalized ``root`` + ``scenarioSteps`` map used by some Allure versions). Returns: dict with ``id``, ``name``, ``project_id``, ``automated``, ``description``, ``precondition``, ``expected_result``, ``status``, ``layer``, ``tags`` and ``steps`` (each: ``depth``, ``keyword``, ``name``, ``expected_result``). ``steps`` is empty when ``include_scenario`` is false or the case has none.

NameTypeReqDescription
include_scenarioboolean–Also fetch manual scenario steps. Tries GET /scenario first; if empty, falls back to GET /step (one or two extra calls).
test_case_idintegeryesAllure test-case ID.
NameTypeReqDescription
automatedbooleanyes–
created_bystringyes–
descriptionstringyes–
expected_resultstringyes–
idintegeryes–
last_modified_bystringyes–
layerstringyes–
namestringyes–
preconditionstringyes–
project_idintegeryes–
statusstringyes–
stepsarrayyes–
tagsarrayyes–

No examples provided.

allure_get_test_case_custom_fields ~115

List the custom-field values set on a test case. Returns each value flattened to ``field_id`` / ``field_name`` (the custom field) and ``value_id`` / ``value_name`` (the chosen value) — e.g. field "Priority" → value "High". These are not included in ``allure_get_test_case``; fetch them here when you need a test case's custom-field assignments.

NameTypeReqDescription
test_case_idintegeryesAllure test-case ID.
NameTypeReqDescription
countintegeryes–
custom_fieldsarrayyes–
test_case_idintegeryes–

No examples provided.

allure_get_test_results ~365

Get individual test results inside a launch, optionally filtered by status. The Allure server may ignore the ``status`` query parameter and return mixed-status pages. When ``status`` is set, this tool enforces the filter client-side (case-insensitive comparison) so the returned ``results`` always contain only rows matching the requested status. Args: launch_id: Allure launch ID (from ``allure_list_launches``). status: Filter — ``PASSED`` / ``FAILED`` / ``BROKEN`` / ``SKIPPED``. ``None`` returns all. page: 0-based page index. size: Items per page (1-200; default 50). Returns: dict with keys: - ``launch_id`` (int) - ``count`` (int): number of results after client-side status filter - ``pagination`` (dict) - ``results`` (list): each with ``id`` / ``name`` / ``status`` / ``duration_ms`` / ``error`` (first 300 chars of ``statusMessage``) Examples: - "FAILED tests in launch 12345" -> ``launch_id=12345, status="FAILED"`` - "All results in launch X, second page" -> ``launch_id=X, page=1`` Don't use when: - You want only FAILED+BROKEN (``allure_search_failed_tests`` does both in one call).

NameTypeReqDescription
launch_idintegeryesAllure launch ID.
pageinteger–0-based page.
sizeinteger–Items per page (1-200).
status––Filter by status. None returns all statuses.
NameTypeReqDescription
countintegeryes–
launch_idintegeryes–
pagination–yes–
resultsarrayyes–

No examples provided.

allure_list_categories ~251

List the defect categories configured for a project. Categories are the named, coloured buckets shown on the project's *Categories* settings page (``name`` / ``color`` / ``description``). They are inert on their own — the regex rules that auto-assign failures live in ``allure_list_category_matchers``. Args: project_id: Allure project ID. page: 0-based page index. size: Items per page (1-500). Returns: dict with keys: - ``project_id`` (int) - ``count`` (int): items in this response - ``pagination`` (dict) - ``categories`` (list): each ``id`` / ``name`` / ``color`` / ``description`` Examples: - "What defect categories does project 175 have?" -> ``project_id=175`` Don't use when: - You want the regex automation rules (use ``allure_list_category_matchers``).

NameTypeReqDescription
pageinteger–0-based page.
project_idintegeryesAllure project ID.
sizeinteger–Items per page (1-500).
NameTypeReqDescription
categoriesarrayyes–
countintegeryes–
pagination–yes–
project_idintegeryes–

No examples provided.

allure_list_category_matchers ~270

List the regex automation rules (matchers) for a project. Each matcher carries a ``message_regex`` / ``trace_regex`` (Java regex) and the ``category_id`` / ``category_name`` it feeds. This is the project's *automation schema* — what makes failing results land in a category automatically at result-ingest time. Args: project_id: Allure project ID. page: 0-based page index. size: Items per page (1-500). Returns: dict with keys: - ``project_id`` (int) - ``count`` (int) - ``pagination`` (dict) - ``matchers`` (list): each ``id`` / ``name`` / ``message_regex`` / ``trace_regex`` / ``category_id`` / ``category_name`` Examples: - "Show the auto-classification rules for project 175" -> ``project_id=175`` Don't use when: - You only need the bucket names/colours (use ``allure_list_categories``).

NameTypeReqDescription
pageinteger–0-based page.
project_idintegeryesAllure project ID.
sizeinteger–Items per page (1-500).
NameTypeReqDescription
countintegeryes–
matchersarrayyes–
pagination–yes–
project_idintegeryes–

No examples provided.

allure_list_custom_fields ~114

List the custom fields defined on a project (its schema). Returns each field's ``field_id``, ``name``, ``single_select`` and ``required``. Use it to discover which custom fields a project has before reading a test case's values with ``allure_get_test_case_custom_fields``. Built-in metadata fields (Epic/Feature/Story/Component/Suite) use negative ids; project-specific custom fields use positive ids.

NameTypeReqDescription
project_idintegeryesAllure project ID.
NameTypeReqDescription
countintegeryes–
custom_fieldsarrayyes–
project_idintegeryes–

No examples provided.

allure_list_launches ~345

List recent launches for a project, newest first. Each launch carries a pass/fail/broken/skipped breakdown from Allure's ``statistic`` field. Pagination info is returned in the ``pagination`` block (use ``next_page`` to continue). Args: project_id: Allure project ID. page: 0-based page index. size: Items per page (1-100; 20 is usually enough for triage). Returns: dict with keys: - ``project_id`` (int) - ``count`` (int): items in this response - ``pagination`` (dict): ``page`` / ``size`` / ``total`` / ``total_pages`` / ``has_more`` / ``next_page`` - ``launches`` (list): each with ``id`` / ``name`` / ``status`` / ``created_date`` / ``passed`` / ``failed`` / ``broken`` / ``skipped`` / ``total`` Examples: - "Last 10 launches for project 63" -> ``project_id=63, size=10`` - "Older launches beyond page 1" -> repeat with ``page=1`` Don't use when: - You need test results inside a launch (``allure_get_test_results``). - You need just the latest FAILED/BROKEN tests (``allure_search_failed_tests``).

NameTypeReqDescription
pageinteger–0-based page.
project_idintegeryesAllure project ID.
sizeinteger–Items per page (1-100).
NameTypeReqDescription
countintegeryes–
launchesarrayyes–
pagination–yes–
project_idintegeryes–

No examples provided.

allure_list_layers ~110

List the test layers defined in a project (id, name). Use this to discover valid layer names/ids before setting a layer on ``allure_create_test_case`` / ``allure_update_test_case``. Built-in layers use negative ids (e.g. API Tests = -3). Returns: dict with ``project_id``, ``count`` and ``layers`` (each: ``id``, ``name``).

NameTypeReqDescription
project_idintegeryesAllure project ID.
NameTypeReqDescription
countintegeryes–
layersarrayyes–
project_idintegeryes–

No examples provided.

allure_list_projects ~181

List all projects in the Allure TestOps instance. Use this first to discover which project IDs exist — all other tools take a ``project_id`` that you can look up here. Returns: dict with keys: - ``count`` (int): number of projects in this response - ``projects`` (list): each item has ``id``, ``name``, ``abbreviation`` Examples: - "Which projects exist in Allure?" -> default call, take the names/ids - "Find project by abbreviation" -> iterate ``projects`` and match Don't use when: - You already know the project id (skip discovery, go straight to the target tool).

NameTypeReqDescription
pageinteger–0-based page number.
sizeinteger–Items per page (1-500).
NameTypeReqDescription
countintegeryes–
projectsarrayyes–

No examples provided.

allure_list_statuses ~118

List the test-case statuses defined in a project (id, name, color). Use this to discover valid status names/ids before setting a status on ``allure_create_test_case`` / ``allure_update_test_case``. Built-in statuses use negative ids (e.g. Draft = -1). Returns: dict with ``project_id``, ``count`` and ``statuses`` (each: ``id``, ``name``, ``color``).

NameTypeReqDescription
project_idintegeryesAllure project ID.
NameTypeReqDescription
countintegeryes–
project_idintegeryes–
statusesarrayyes–

No examples provided.

allure_list_test_cases ~810

List test cases for a project with optional automation and ownership filters. Each TC carries ``id``, ``name``, ``automated``, ``status``, ``layer`` (e.g. ``UNIT``, ``API``, ``E2E``), the ``createdBy`` / ``lastModifiedBy`` audit usernames, and a flat list of tag names. **Caveat:** the audit fields and ``tags`` are only populated when ``owner`` is set, because Allure's plain ``/testcase`` endpoint returns a compact projection that omits them — the ``owner`` path uses ``__search`` which returns the full projection. Args: project_id: Allure project ID. ctx: MCP Context (auto-injected by FastMCP for progress reporting). automated: ``True`` — only automated, ``False`` — only manual, ``None`` — both. owner: Optional Allure username. When set, the response is narrowed to TCs where ``createdBy = owner OR lastModifiedBy = owner`` (case-sensitive, exact match), enforced **server-side** via Allure's RQL ``__search`` endpoint. The username must match ``[A-Za-z0-9._@-]+`` — anything else is rejected at the MCP input layer (Pydantic ``pattern``) to prevent RQL injection. **Why "creator/modifier" and not "owner".** Allure TestOps does not expose a separate ``owner`` field in RQL on most deployments — the closest stable proxy for "TCs I touched" is the union of ``createdBy`` and ``lastModifiedBy``. **Trade-off when ``owner`` is set.** ``__search`` does not accept the ``automated`` query parameter, so an ``automated`` filter combined with ``owner`` is applied **client-side after the page is fetched**. ``pagination`` then reflects the raw owner-filtered set, not the further automation-filtered view — a fetched page of 50 may shrink. Raise ``size`` (max 200) or iterate ``page`` for full coverage. page: 0-based page index. size: Items per page (1-200; default 50). Returns: dict with keys: - ``project_id`` (int)…

NameTypeReqDescription
automated––True: only automated. False: only manual. None: both.
owner––Allure username — narrows the result to TCs where the user is the creator OR the last modifier. Applied server-side via Allure RQL (see docstring).
pageinteger–0-based page.
project_idintegeryesAllure project ID.
sizeinteger–Items per page (1-200).
NameTypeReqDescription
countintegeryes–
pagination–yes–
project_idintegeryes–
test_casesarrayyes–

No examples provided.

allure_search_failed_tests ~297

Find FAILED and BROKEN tests in the most recent (or given) launch. Useful for triage: _"what's broken in the latest run"_ without listing every test. Performs up to 3 API calls; progress reported via MCP Context. Args: project_id: Allure project ID. launch_id: Specific launch ID. If ``None``, the latest launch is used. limit: Max failures per status (so up to ``2 * limit`` total). ctx: MCP Context (auto-injected). Returns: dict with keys: - ``launch_id`` (int): the resolved launch (latest if not passed in) - ``failed_count`` (int) - ``results`` (list): ``id`` / ``name`` / ``status`` / ``duration_ms`` / ``error`` Examples: - "What's failing in project 63 right now?" -> ``project_id=63`` - "Failures in launch 98765" -> ``project_id=N, launch_id=98765`` Don't use when: - You need PASSED tests too (use ``allure_get_test_results`` without status filter).

NameTypeReqDescription
launch_id––Specific launch ID. If omitted, uses the most recent launch.
limitinteger–Max failures to return per status.
project_idintegeryesAllure project ID.
NameTypeReqDescription
failed_countintegeryes–
launch_idintegeryes–
reason–yes–
resultsarrayyes–

No examples provided.

Install

How do I install the io.github.mshegolev/allure-testops-mcp server?

io.github.mshegolev/allure-testops-mcp runs locally as a PyPI package, launched with uvx allure-testops-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · allure-testops-mcp

# add to Claude Code
claude mcp add mshegolev-allure-testops-mcp -- uvx allure-testops-mcp
Common questions

What is the io.github.mshegolev/allure-testops-mcp server?

io.github.mshegolev/allure-testops-mcp is listed in the public MCP registry as io.github.mshegolev/allure-testops-mcp. Allure TestOps MCP, projects, launches, test cases, test results via REST API. This page covers its PyPI package (allure-testops-mcp).

Is the io.github.mshegolev/allure-testops-mcp server safe to use?

io.github.mshegolev/allure-testops-mcp scores 93 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.mshegolev/allure-testops-mcp server expose?

io.github.mshegolev/allure-testops-mcp exposes 13 tools: allure_list_projects, allure_get_project_statistics, allure_list_launches, allure_get_test_results, allure_search_failed_tests, and 8 more. Their descriptions and schemas cost roughly 3,627 tokens of context every time the server is loaded.

Is the io.github.mshegolev/allure-testops-mcp server still maintained?

io.github.mshegolev/allure-testops-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.mshegolev/allure-testops-mcp server under?

io.github.mshegolev/allure-testops-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.