openqa-mcp

openqa-mcp

Enables interaction with openQA instances through the REST API, offering read tools for jobs, machines, and test suites, as well as mutating tools like restart and cancel with optional authentication.

Category
Visit Server

README

openqa-mcp

An MCP server that exposes curated, typed tools over the openQA REST API. It is built on fastmcp 3.x and the openqa-async transport client.

Read tools work anonymously; mutating tools require API credentials and return 403 without them.

Install

uv sync

This installs the package and its dependencies into a project virtualenv and exposes the openqa-mcp console script.

Configuration

The server reads its configuration from environment variables, falling back to the openQA client config file for credentials.

Environment variables

Variable Default Purpose
OPENQA_SERVER openqa-async default openQA host (e.g. openqa.opensuse.org).
OPENQA_API_KEY (unset) API key; overrides the config file when set.
OPENQA_API_SECRET (unset) API secret; overrides the config file when set.
OPENQA_VERIFY true TLS verification: true/false, or a path to a CA bundle.

OPENQA_API_KEY and OPENQA_API_SECRET only take effect when both are set; a partial pair is ignored so the client is never half-configured.

Config file

If the env credentials are not set, openqa-async loads them from ~/.config/openqa/client.conf (or /etc/openqa/client.conf). Generate a key/secret from the API keys page of your openQA instance and add a section keyed by the host:

[openqa.opensuse.org]
key = YOUR_API_KEY
secret = YOUR_API_SECRET

Without any credentials the server is GET-only (read tools succeed, mutating tools get 403).

Tools

Read tools

Tool Description
list_jobs List jobs matching the given filters.
list_jobs_overview List a condensed jobs overview matching the given filters.
get_job Get full details for a single job.
get_job_comments List comments on a job.
list_machines List configured worker machines.
list_test_suites List configured test suites.
list_products List configured products (mediums).
find_jobs_by_setting Find jobs whose setting key equals list_value.
get_job_details Get a single job with full test-module/step details.
get_job_status Get a lightweight job status (id, state, result, blocked_by_id).
list_job_groups List job groups.
get_job_group Get a single job group.
list_job_group_jobs List jobs belonging to a job group.
get_job_group_build_results Get aggregated build results for a job group.
list_parent_groups List parent job groups.
get_parent_group Get a single parent job group.
list_assets List assets known to the system.
get_asset Get a single asset by id.
list_workers List registered worker instances.
list_bugs List tracked bugs referenced by jobs.
search Full-text search across jobs, groups, and test modules.
whoami Return the identity associated with the current credentials.
get_scheduled_product Get a scheduled product (result of a prior ISO trigger).
get_iso_job_stats Get job statistics for scheduled products.
list_group_comments List comments on a job group.
list_parent_group_comments List comments on a parent job group.

list_jobs and list_jobs_overview accept the same optional filters: state, result, distri, version, build, test, arch, machine, groupid, group, latest, limit, page, ids. Unset filters are dropped from the request.

Mutating tools (require credentials)

Tool Description
restart_jobs Restart each of the given jobs.
cancel_job Cancel a running or scheduled job.
add_job_comment Add a comment to a job.
trigger_isos Trigger ISO test scheduling for a product.
delete_job Delete a job.
duplicate_job Duplicate (clone) a job.
set_job_priority Set the priority of a job.
restart_jobs_bulk Restart several jobs in one bulk request.
cancel_jobs Cancel all jobs matching the given filters.
add_group_comment Add a comment to a job group.
add_parent_group_comment Add a comment to a parent job group.
update_job_comment Update an existing job comment.
delete_job_comment Delete a job comment.
create_bug Create a tracked bug reference.
cancel_scheduled_product Cancel a scheduled product / ISO by name.

Mutating tools carry the mutating tag so MCP clients can gate them behind confirmation. To drop them entirely, start the server in read-only mode with --readonly (or OPENQA_READONLY=true): the mutating tools are never registered, so clients see only the read tools.

Running

stdio (default)

Most local MCP clients spawn the server over stdio. Wire it in with:

uv run openqa-mcp

Example MCP client configuration:

{
  "mcpServers": {
    "openqa": {
      "command": "uv",
      "args": ["run", "openqa-mcp"],
      "env": {
        "OPENQA_SERVER": "openqa.opensuse.org"
      }
    }
  }
}

HTTP (optional)

For remote or shared deployments, run over HTTP with --http:

uv run openqa-mcp --http --server 127.0.0.1 --port 8000

The server can also be launched as a module:

uv run python -m openqa_mcp --http --port 8000
Flag Default Purpose
--http off Serve over HTTP instead of stdio.
--stdio on Serve over stdio; overrides OPENQA_MCP_TRANSPORT=http.
--server 127.0.0.1 HTTP bind host.
--port 8000 HTTP bind port.
--readonly off Unregister all mutating tools (read-only server).

Flags override the environment, which supplies the defaults:

Variable Default Purpose
OPENQA_MCP_TRANSPORT stdio Set to http to serve over HTTP.
OPENQA_MCP_HOST 127.0.0.1 Default HTTP bind host.
OPENQA_MCP_PORT 8000 Default HTTP bind port.
OPENQA_READONLY false Set truthy (1/true/yes/on) to disable mutating tools.

Press Ctrl-C to stop; the server shuts down cleanly and closes its client.

Development

uv run pytest        # run the test suite
uv run ruff check .  # lint

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured