MIQA MCP
An MCP server that connects your AI assistant to MIQA. Ask about test runs in plain English, pull results and sample metadata, and create component versions or kick off tests — without leaving your editor or terminal.
Works with Claude Code, Cursor, and any other MCP client that speaks stdio.
Requirements
- uv (
brew install uvorcurl -LsSf https://astral.sh/uv/install.sh | sh) - A MIQA server URL and API key
Quickstart
There is nothing to install — uvx downloads and runs the server on demand.
Claude Code
claude mcp add miqa-mcp \
--scope user \
-e MIQA_SERVER_URL=yourco.miqa.io \
-e MIQA_API_KEY=your-key-here \
-- uvx --refresh miqa-mcp
Confirm it registered with claude mcp list, and remove it with claude mcp remove miqa-mcp.
Use --scope user to make it available everywhere, or drop it to register for the
current project only.
Test a local checkout with Claude Code
Use this flow to test an unpublished branch. From the local miqa-mcp checkout, install
the locked dependencies:
uv sync
Register the local executable using its absolute path and pass the credentials after the executable:
claude mcp add -s local miqa-mcp-local \
/absolute/path/to/miqa-mcp/.venv/bin/miqa-mcp \
-e MIQA_SERVER_URL=yourco.miqa.io \
-e MIQA_API_KEY=your-key-here
claude mcp get miqa-mcp-local
If miqa-mcp-local is already registered, remove it first with
claude mcp remove miqa-mcp-local.
Restart Claude Code after registering the server. GitHub SSH access is required when the
lockfile pins miqatools to a private Git commit.
Cursor, Claude Desktop, and other MCP clients
Add this to your client's MCP config file (~/.cursor/mcp.json for Cursor,
claude_desktop_config.json for Claude Desktop):
{
"mcpServers": {
"miqa-mcp": {
"command": "uvx",
"args": ["--refresh", "miqa-mcp"],
"env": {
"MIQA_SERVER_URL": "yourco.miqa.io",
"MIQA_API_KEY": "your-key-here"
}
}
}
}
Restart the client afterwards so it picks up the new server.
Configuration
| Variable | Required | Description |
|---|---|---|
MIQA_SERVER_URL |
Yes | Your MIQA hostname or API base URL, e.g. yourco.miqa.io. Also used to build browser links back into MIQA. |
MIQA_API_KEY |
Yes | Your MIQA API key. |
The server uses MIQA_SERVER_URL for both REST and MCP. Supported API tools are
discovered from the deployment's /mcp endpoint and added with an api_ prefix. The
same MIQA_API_KEY authenticates both connections.
When the deployment reports docs_url, its documentation MCP tools are available with
a docs_ prefix. docs_url contains the unlisted-share credential, so no separate
authentication header is sent to the documentation MCP.
Example prompts
Once the server is connected, talk to your assistant normally:
Investigating a run
- "Show me the test chain runs for version
bcftools:1.4.1." - "What failed in run 48210? Summarize the assertions that didn't pass."
- "Pull the full report for run 48210 and group the failures by sample."
- "Which sample files went into run 48210, and where did they come from?"
- "What was the execution environment for run 48210?"
Comparing and tracking versions
- "List the last 20 versions of component 512 and tell me which ones are one-offs."
- "Has anything run through trigger
abc123in the last week? Show me the outcomes." - "Compare the results of the two most recent runs for version
bcftools:1.4.1."
Making changes
- "For trigger
abc123, create a new component version using docker imagemyrepo/aligner:2.3.0— show me the diff first." - "Update the main command on trigger
abc123to add--threads 8and preview the change." - "Create version
v2.3.0-rc1from base version 8891, then run it through triggerabc123."
Write operations always preview first and wait for your confirmation — see Safety model.
Tools
Read-only
| Tool | What it does |
|---|---|
find_test_chain_runs_by_version |
Finds test chain runs for a version name, newest first. |
find_test_chain_runs_by_chain_name |
Finds test chain runs by their parent test chain name, newest first. |
list_test_triggers |
Lists every trigger with its last successful run date, to resolve a name to an ID. |
get_test_chain_run |
Returns details for a single run. |
get_test_chain_run_results |
Returns the assertion and result summary table. |
get_test_chain_run_report |
Returns the sample-centric structured report. |
get_test_chain_run_sample_metadata |
Returns sample names, datasource IDs, and original sources. |
get_test_chain_run_environment |
Returns the captured test and execution environment. |
get_test_trigger_template_json |
Returns the components, templates, and edit capabilities a trigger reaches. |
list_component_versions |
Lists a component's versions, newest first. |
list_test_chain_runs_for_trigger |
Lists the runs actually created by a trigger, newest first. |
list_test_chain_runs |
Lists the newest runs across all chains and triggers, unfiltered or filtered by an optional version field and value. |
Writes
| Tool | What it does |
|---|---|
create_component_version |
Creates a new component version from a base version. |
run_test_trigger |
Runs a trigger against one existing component version. |
Most read tools accept an optional sample (datasource) ID to narrow the response to a single sample. A few tools depend on server-side feature flags and may be unavailable on older MIQA deployments.
Safety model
Both write tools are preview-first. They run as a dry run unless you explicitly opt in, so an assistant can never change or launch something on your behalf by accident.
create_component_version — By default nothing is persisted: it returns a
validation verdict and a diff of the version it would create. Your assistant shows
you that diff and needs your explicit go-ahead before applying it. Applying saves the
new version; it never starts a test run. After a successful apply you get a link to the
resource in MIQA, and the assistant will offer to preview a run for you. Its optional
is_oneoff flag marks the created ComponentVersion so it is excluded from "latest
version" base resolution for future creates — it does not select a base version or
start any run.
run_test_trigger — Also preview-only by default. Applying creates a one-off
workflow version and starts the configured test chain. It accepts one component version
override and one unambiguous baseline state machine, and it does not poll the resulting
run — ask for the run status separately.
These two "one-off" concepts are unrelated: create_component_version's is_oneoff
marks a ComponentVersion row, while run_test_trigger's one-off is a StateMachine/workflow
created for that single run. Applying run_test_trigger never changes a ComponentVersion's
is_oneoff flag.
Troubleshooting
| Symptom | Fix |
|---|---|
| Server doesn't appear in the client | Confirm uvx is on your PATH and restart the client. Claude Code users can check with claude mcp get miqa-mcp. |
| Authentication or 401 errors | Re-check MIQA_API_KEY and that MIQA_SERVER_URL points at the right MIQA instance. |
| A tool reports it is unavailable | That endpoint is gated by a feature flag or missing on your MIQA version. For reports, fall back to get_test_chain_run_results. |
| Stale behavior after an upgrade | --refresh makes uvx re-resolve the package; drop any version pin to move to the latest. |
Release files for miqa-mcp 0.2.20
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| miqa_mcp-0.2.20.tar.gz | 233.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| miqa_mcp-0.2.20-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 258.7 kB
Release files / miqa_mcp-0.2.20.tar.gz
| Download URL | miqa_mcp-0.2.20.tar.gz |
|---|---|
| Size | 233.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d1e34d7a7e3ad3693e787d976905f90f9a119da622c0609bacace6293903d661
|
|
BLAKE2b-256 checksum How to use checksums |
62a25f697bd00ea30f4789e1e53bce6ea7ae80a41b1f64ffb71a0a905e4c2c65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|
Release files / miqa_mcp-0.2.20-py3-none-any.whl
| Download URL | miqa_mcp-0.2.20-py3-none-any.whl |
|---|---|
| Size | 25.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3ea0c60682557bbcf456d1c3e5340f6607777da3244898e2437c6af578e5803c
|
|
BLAKE2b-256 checksum How to use checksums |
f4e3e3df3c70a262e1a536ad86fcdd86ac7f38a719a7e5a64469d5131639be24
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.16
|