Skip to content

Releases: MimoJanra/TestOpsMCP

v2.0.3

01 Jun 12:08

Choose a tag to compare

What's Changed

  • No changes

Full Changelog: v2.0.2...v2.0.3

Docker Image

docker pull ghcr.io/mimojanra/testopsmcp:v2.0.3
docker pull ghcr.io/mimojanra/testopsmcp:latest

Platforms: linux/amd64, linux/arm64 · Setup guide

v2.0.2

01 Jun 10:29

Choose a tag to compare

What's Changed

  • No changes

Full Changelog: v2.0.1...v2.0.2

Docker Image

docker pull ghcr.io/mimojanra/testopsmcp:v2.0.2
docker pull ghcr.io/mimojanra/testopsmcp:latest

Platforms: linux/amd64, linux/arm64 · Setup guide

v2.0.1

01 Jun 08:53

Choose a tag to compare

What's Changed

  • No changes

Full Changelog: v2.0.0...v2.0.1

Docker Image

docker pull ghcr.io/mimojanra/testopsmcp:v2.0.1
docker pull ghcr.io/mimojanra/testopsmcp:latest

Platforms: linux/amd64, linux/arm64 · Setup guide

v2.0.0

31 May 13:44

Choose a tag to compare

[2.0.0] - 2026-05-31 - MCP Protocol Improvements

Added

Generic Typed Handlers

  • All 104+ tool handlers now use a Typed[T] generic wrapper that auto-deserializes JSON input — eliminates ~200 manual json.Unmarshal calls.
  • Handler signatures changed from (ctx, json.RawMessage) to (ctx, TypedArgs) — cleaner and type-safe.

slog Integration

  • internal/core.Logger now wraps log/slog with slog.NewJSONHandler. Same public API, standard Go logging internals.

Middleware Chain + Panic Recovery

  • New internal/mcp/middleware.go with composable middlewareFunc chain.
  • Panic recovery middleware (first in chain): catches handler panics, logs stack trace, returns {code: -32603} instead of crashing the server.
  • Audit logging extracted to its own middleware; dispatch() simplified to a single call.

MCP Protocol 2025-11-25

  • ProtocolVersion bumped to "2025-11-25".
  • Version negotiation in initialize: server accepts client's requested version if in supported list (2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25).
  • New logging and elicitation capability fields in ServerCapabilities.

Cursor-Based Pagination

  • tools/list, resources/list, prompts/list now support cursor-based pagination (page size 50).
  • Response includes nextCursor when more pages exist. Tools list sorted alphabetically for stable cursors.

Async Task System

  • New internal/tasks package: Task struct with status lifecycle (working/succeeded/failed/cancelled), in-memory Store with context-based cancellation.
  • Three new tools: get_task_status, list_running_tasks, cancel_task.
  • Long-running operations now return {task_id, message} immediately and complete in the background: run_allure_launch, copy_launch, merge_launches, bulk_run_test_cases_new_launch, bulk_run_test_cases_existing_launch, bulk_clone_test_cases.

Completion (Argument Autocompletion)

  • New completion/complete JSON-RPC method.
  • Registry has a Complete(promptName, argName, partial) method — returns up to 10 suggestions.
  • project_id arguments complete against live Allure project list when API is configured.

Elicitation (Confirmation Dialogs)

  • Server can ask the user to confirm destructive operations via elicitation/create notification.
  • session.ElicitFunc context key lets handlers call into the elicitation round-trip.
  • Applied to: delete_test_case and bulk_delete_test_cases — user must accept before deletion proceeds.
  • Route: notifications/elicitation/complete delivers user's answer back to the server.

Resource Subscriptions

  • resources/subscribe and resources/unsubscribe JSON-RPC methods are now handled.
  • Server.PublishResource(uri) sends notifications/resources/updated to all subscribed sessions.
  • Launch dashboard widget auto-starts a 10-second polling watcher when subscribed via ui://widgets/launch-dashboard?launch_id=N.
  • Server advertises resources.subscribe = true in capabilities.

Sampling (Server → LLM via Client)

  • Server can request LLM inference through the client via sampling/createMessage.
  • session.SamplingFunc context key exposes this to handlers.
  • New analyze_launch_failures tool: fetches failed test results and asks Claude to identify root causes and suggest fixes. Gracefully degrades if sampling is unavailable.

Fixed

Async Task System

  • Panic recovery in goroutinestasks.Store.Run() wraps every background goroutine in recover(). A panic marks the task Failed and logs the stack trace; the server and other sessions remain unaffected.
  • Session token lost in async contextStore.Create() now accepts parentCtx and uses context.WithoutCancel to propagate session ID (and all other context values) without inheriting the request's cancellation signal. Async operations (run_allure_launch, copy_launch, merge_launches, bulk_run_*, bulk_clone_test_cases) now correctly resolve per-user Allure tokens in multi-user deployments.
  • Data race in task readsStore.Get() and Store.List() now return struct copies under RLock instead of raw pointers; taskToMap no longer races against concurrent Update writes.
  • Async task timeouttaskCtx carries a 30-minute hard deadline via context.WithTimeout; hung Allure calls can no longer leak goroutines and memory indefinitely.
  • Task store memory leak — Added background janitor (StartJanitor) that purges succeeded/failed/cancelled tasks older than 1 hour; runs every 5 minutes.

MCP Protocol — Elicitation & Sampling

  • Standard JSON-RPC response routingelicitation/create is now sent as a proper JSON-RPC request (with id); sampling/createMessage already had an id. Both now receive the client's standard JSON-RPC response {id, result} routed through a new handleJSONRPCResponse dispatcher, keyed by the request ID. The previous non-standard methods notifications/elicitation/complete and sampling/createMessage/response are removed. Compatible with Claude Desktop and any spec-compliant MCP client.
  • Silent deletion on stdiodelete_test_case and bulk_delete_test_cases on the stdio transport previously bypassed the confirmation guard (no ElicitFunc in context → the if ok block was skipped, and data was deleted silently). Now they return an error: "deletion requires user confirmation but no interactive session is available". Also, transport errors from elicit() are now returned as errors instead of being masked as a user cancellation.

Resource Subscriptions

  • Push notifications never arrivedhandleResourcesSubscribe was passing the HTTP request context to OnSubscribe → StartLaunchWatch → watchLaunch. The request's r.Context() was cancelled when the POST /messages handler returned (202 Accepted), so the watcher exited before the first 10-second tick. Now sess.ctx (session lifetime) is used — the watcher runs until the client disconnects.

Other

  • Unstable paginationresources/list and prompts/list now sort by URI and name respectively before slicing, matching tools/list behaviour. Previously, cursor-based pagination over Go maps produced non-deterministic results.
  • Completion hits Allure on every keystrokeComplete now maintains a 30-second in-process cache of project/launch ID lists fetched with a 5-second timeout derived from the request context. Completion is gated on ref.type == "ref/prompt" to avoid unintended Allure calls from resources with identically-named arguments.
  • UTF-8 truncation in analysisanalyzeLaunchFailures truncated error messages and stack traces by byte index (msg[:300]), which split multi-byte runes (Cyrillic, CJK, emoji). Now uses truncateRunes which truncates at rune boundary.

Changed

  • Tool count: 100 → 104 (added get_task_status, list_running_tasks, cancel_task, analyze_launch_failures).
  • initialize response now includes logging capability.
  • resources.subscribe is now true in initialize capabilities.

Docker Image

docker pull ghcr.io/mimojanra/testopsmcp:v2.0.0
docker pull ghcr.io/mimojanra/testopsmcp:latest

Platforms: linux/amd64, linux/arm64 · Setup guide

v1.9.0

31 May 11:56

Choose a tag to compare

[1.9.0] - 2026-05-31 - MCP Prompts & Resources

Added

MCP Prompts

  • analyze-test-failures — prompt template that instructs Claude to retrieve launch details, list failed/broken results, group by error pattern, and surface critical issues. Argument: launch_id (required), project_id (optional).
  • launch-report-summary — prompt template that instructs Claude to generate a concise executive summary (pass rate, counts, duration, environment, top failures). Argument: launch_id (required), project_id (optional).
  • Server now advertises prompts capability in the MCP initialize response.
  • prompts/list and prompts/get JSON-RPC methods are fully handled.

MCP Resources

  • allure://docs/quickstart — static Markdown resource listing tool groups, prompt templates, and quick-start steps. Available even when no Allure token is configured; clients can attach it as context.

Docker Image

docker pull ghcr.io/mimojanra/testopsmcp:v1.9.0
docker pull ghcr.io/mimojanra/testopsmcp:latest

Platforms: linux/amd64, linux/arm64 · Setup guide

v1.8.1

30 May 11:06

Choose a tag to compare

What's Changed

  • No changes

Full Changelog: v1.8.0...v1.8.1

Docker Image

docker pull ghcr.io/mimojanra/testopsmcp:v1.8.1
docker pull ghcr.io/mimojanra/testopsmcp:latest

Platforms: linux/amd64, linux/arm64 · Setup guide

v1.8.0

30 May 09:47

Choose a tag to compare

[1.8.0] - 2026-05-30 - Multi-User Auth & Audit Log

Added

Multi-User Authentication

  • MCP_AUTH_TOKENS environment variable — configure named user tokens in name:token,... format (e.g. alice:abc123,bob:xyz789). Each user authenticates with their own bearer token; requests are attributed to the user by name in logs and audit records.
  • Backward-compatible — existing MCP_AUTH_TOKEN (single token) still works and is treated as user "default".
  • Startup log now shows the configured user count instead of a boolean auth flag.

Audit Log

  • Daily JSONL audit files written to a configurable directory (AUDIT_LOG_PATH, default audit/).
  • Each entry records: timestamp, user, session_id, remote_addr, method, tool (for tools/call), status (ok/error), duration_ms.
  • Automatic retention — files older than AUDIT_RETENTION_DAYS days (default 30) are deleted nightly.
  • Docker Compose mounts ./audit as a host volume so logs survive container restarts.
  • Audit logger is disabled gracefully (warning logged) if the directory cannot be created.

New Environment Variables

Variable Default Description
MCP_AUTH_TOKENS Named user tokens: alice:tok1,bob:tok2
AUDIT_LOG_PATH audit Directory for daily audit JSONL files
AUDIT_RETENTION_DAYS 30 Days to keep audit files

Fixed

GitHub Actions — Docker Release

  • Added QEMU setup step (docker/setup-qemu-action@v3) required for multi-platform (linux/amd64, linux/arm64) builds — previously the multi-arch build was silently skipped.
  • Added platforms: linux/amd64,linux/arm64 to build-push-action.
  • Added type=raw,value=latest tag so the :latest image is correctly pushed on tag releases.
  • Fixed publish-release step using --notes-append instead of --notes-file (which was overwriting the full release body).
  • Pinned action versions to stable releases (actions/checkout@v4, docker/setup-buildx-action@v3, docker/login-action@v3, docker/metadata-action@v5).

Changed

  • docker-compose.yml — removed duplicated environment keys that were already covered by env_file; added AUDIT_LOG_PATH and AUDIT_RETENTION_DAYS with defaults; added ./audit:/app/audit volume mount.

v1.7.1 - MCP Compliance Fixes & Model Expansions

29 May 10:21

Choose a tag to compare

What's Fixed

MCP Protocol Compliance

  • Tool annotations missing on 3 toolsconfigure_allure_token, search_testops_operations, and execute_testops_operation were registered after the annotation loop and sent null annotations to Claude. All three now receive correct readOnlyHint/destructiveHint values.
  • execute_testops_operation marked destructiveHint: true — can execute any API operation including DELETE/PUT.
  • CORS headersMcp-Session-Id and X-Allure-Token added to Access-Control-Allow-Headers; DELETE added to Access-Control-Allow-Methods. Cross-origin preflight requests now work correctly.
  • Streamable HTTP Content-Type validation — POST /mcp rejects non-JSON Content-Type with 415 Unsupported Media Type per MCP spec 2025-03-26.
  • GetLaunchStatistics response parsing — the API returns [{"status","count"}] array, not a single object. Launch Dashboard widget now shows correct pass/fail/broken counts.
  • ClientCapabilities parsingInitializeRequest.Capabilities was struct{}, silently discarding elicitation, sampling, and roots flags.

Data Models

  • LaunchCreateRequest expanded with AutoClose, External, Issues, Links, Tags
  • LaunchResponse enriched with UUID, timestamps, and full nested fields
  • StatisticsResponse + new StatisticItem DTO for the array statistics endpoint
  • New DTOs: CategoryDto, TestLayerDto, JobRunDto, IdAndNameOnlyDto, IntegrationTypeDto, RoleDto, StatusDto, WorkflowRowDto, CustomFieldValueWithCfDto

No Breaking Changes

Fully backwards-compatible — existing Claude Desktop and claude.ai configurations require no changes.

Full Changelog

See CHANGELOG.md for complete details.

v1.7.0

27 May 09:18

Choose a tag to compare

[1.7.0] - 2026-05-27 - Interactive API Discovery Widgets

Added

MCP App Widgets for Search/Execute Tools

  • Action Picker Widget — interactive searchable picker for search_testops_operations results
    • Real-time filtering by operation name, description, or API path
    • HTTP method color-coding (GET green, POST blue, PUT orange, DELETE red)
    • Click to select operation and inject operation_id into chat
  • Results Display Widget — formatted result viewer for execute_testops_operation
    • Status indicator (Success/Error) with color
    • Auto-formatted JSON with proper indentation
    • Scrollable body for large API responses
    • Graceful fallback for raw text responses

Changed

  • search_testops_operations — updated to render Action Picker widget; description now mentions widget support
  • execute_testops_operation — updated to render Results Display widget; description now mentions widget support

Notes

  • All widgets support light/dark mode via host theme detection
  • Compatible with Claude Desktop and claude.ai
  • Uses ext-apps bundle for cross-platform rendering

v1.6.0 — Full Test Case API Coverage (102 tools)

26 May 14:24

Choose a tag to compare

[1.6.0] - 2026-05-26 - Full Test Case API Coverage

Added

Test case single-item operations (25 new tools)

  • get_test_case_tags / set_test_case_tags — read and replace tags on a test case
  • get_test_case_issues / set_test_case_issues — read and replace linked bug-tracker issues
  • get_test_case_examples / set_test_case_examples — parametrized data table rows (full replace)
  • list_test_case_versions / create_test_case_version / restore_test_case_version — version snapshot management
  • get_test_case_version_data / delete_test_case_version — version content and cleanup
  • get_test_case_attachments / delete_test_case_attachment — attachment listing and removal
  • search_test_cases — AQL/RQL full-text search across project test cases
  • list_deleted_test_cases — browse soft-deleted test cases
  • list_muted_test_cases — browse muted test cases
  • delete_test_case_scenario — remove the entire step scenario from a test case
  • move_test_case_step / copy_test_case_step — reposition steps within a scenario
  • get_test_case_relations / set_test_case_relations — test-case-to-test-case relations
  • get_test_case_custom_fields / update_test_case_custom_fields — custom field values via dedicated /cfv endpoint
  • get_test_case_workflow — workflow definition for a test case
  • get_test_case_keys / set_test_case_keys — integration test keys (Jira, Azure DevOps, etc.)
  • get_test_case_scenario_from_run — scenario captured from the last automated run
  • detach_test_case_automation — convert an automated test case back to manual
  • get_test_case_audit — change history / audit log
  • validate_test_case_query — validate AQL/RQL expression without executing it
  • suggest_test_cases — autocomplete suggestions by name

Bulk test-case operations (14 new tools)

  • bulk_add_test_case_members / bulk_remove_test_case_members
  • bulk_add_test_case_custom_fields / bulk_remove_test_case_custom_fields
  • bulk_add_test_case_external_links
  • bulk_add_test_case_issues / bulk_remove_test_case_issues
  • bulk_set_test_case_layer
  • bulk_move_test_cases — move test cases to another project
  • bulk_delete_test_cases — permanent bulk delete
  • bulk_run_test_cases_new_launch / bulk_run_test_cases_existing_launch
  • bulk_create_test_plan — create a test plan from selected test cases
  • bulk_mute_test_cases

Fixed

  • execute_testops_operation parameter routing — path parameters no longer leaked into the request body; unknown parameters are now collected separately
  • execute_testops_operation array bodies — new explicit body key lets callers pass any JSON value (array or object) directly as the HTTP request body

Changed

  • Total MCP tools: 57 → 102 (45 new tools, all backed by proper client methods — no OpenAPI dynamic execution fallback)
  • All new client methods added to internal/adapters/allure/client.go with typed request/response models in models.go
  • New file internal/tools/tools_testcases_extra.go for the extended single-item test case tools