MCP server
Connect Claude Code, Cursor, VS Code or Codex to the Outqube MCP server so your coding agent can start runs and read failure reports.
Outqube has a remote MCP server at https://mcp.outqube.com. Connect it to your coding agent and the agent can start a run, read the failure report of a test that broke, and look at the failing step, so it can fix the bug without you copying anything over.
Authenticate
Use an API key, the same as for the API and CLI. An organisation admin creates it in Settings, API keys. Send it on every request as Authorization: Bearer and keep it in an environment variable called OUTQUBE_API_KEY.
- The same scopes and rate limits apply as for the API: 120 requests a minute per key, and one tool call is one request.
- A key belongs to one app. A
readkey can use every tool excepttrigger_runandcancel_run, which needtrigger. - There is no OAuth sign-in.
- The server keeps no sessions or streams. The tool list never changes, so
subscriptions/listenis not supported, and GET and DELETE answer 405. - Requests with a browser
Originheader are refused unless the host isapp.outqube.comormcp.outqube.com. Coding agents send none. - Outqube records the name and version your client gives in its
clientInfo(for example claude-code 2.1) and the IP, so organisation admins can see under each key in Settings, API keys where it is used. To cut a client off, revoke its key.
Use a read key unless the agent should start runs
Runs use your test logins and count against the organisation's monthly budget.
Connect your client
claude mcp add --transport http outqube https://mcp.outqube.com \
--header "Authorization: Bearer $OUTQUBE_API_KEY"To share it with your team, put it in .mcp.json in the repository. Claude Code expands the variable, so no key is committed:
{
"mcpServers": {
"outqube": {
"type": "http",
"url": "https://mcp.outqube.com",
"headers": { "Authorization": "Bearer ${OUTQUBE_API_KEY}" }
}
}
}Client settings change. If one of these stops working, check your client's MCP documentation for how to add a remote server with a bearer header.
Tools
The server has 11 tools.
| Tool | Scope | What it returns |
|---|---|---|
list_projects | read | The key's app, its environments and its newest 50 suites: the names trigger_run takes. It says when there are more. |
list_runs | read | Runs, newest first, the last 10 by default. Filter by status, outcome, source, branch, commit_sha, pr_number or created_after; use cursor for older ones. |
get_run | read | Status, outcome, counts, and each test's test_run_id and outcome, failures first. |
get_failure_report | read | Start here. One test run's report (run_id and test_run_id), or the reports of a run's failed tests (run_id only, at most 3; the rest are listed by id). Markdown, with the failing step's screenshot. |
get_test_steps | read | One line per step: number, outcome, summary and URL. 100 per page. |
get_step_detail | read | One step: what the agent did and why, the URL, and that step's console and network entries. |
get_screenshot | read | A step's screenshot, as an image. |
get_logs | read | Console messages or network entries, errors only by default. 50 per page. |
get_test | read | The test's goal, steps and expected results, with saved secrets redacted. |
trigger_run | trigger | Starts a run: exactly one of suite, test_ids or tag, plus environment, base_url, commit_sha, branch, pr_number and repo, as POST /runs. A base_url must be public, never localhost or a private address. idempotency_key makes retries safe and is shared with the API's Idempotency-Key. |
cancel_run | trigger | Stops what is still to run. A finished run comes back unchanged. |
Read tools are marked read-only, so clients need not ask before calling them. trigger_run is marked as touching an outside system and cancel_run as destructive. A refusal (not found, scope too low, invalid input) is a tool error that ends with the API's code, such as No run with that id in this app. (not_found).
A good prompt is: run the smoke suite against my branch and fix whatever fails.
What the agent sees
- Short instructions. The server says what Outqube is and to start with
get_failure_report, then drill down with the step and log tools only if needed. - Capped output. Each tool returns about 8,000 tokens of text at most (a budget of 16,000 units, where an ASCII character is one unit and any other character three, so wide text stays near the same token count). Anything over is cut and ends with a line that names the tool and parameters that return the rest.
- Screenshots. Sent as image content, one per
get_failure_reportcall. The others come throughget_screenshot. When an image cannot be sent, a line says why: deleted by retention, too large, or no screenshot at that step. - Redacted data. Everything served was redacted when it was stored: test passwords, codes and magic links read
[REDACTED:name].
Untrusted content
Everything that comes from the app under test, or quotes it, is wrapped in a labelled block: page text and URLs, step actions and summaries, console and network entries, the test agent's reasoning, the report and the test's text. Free text that people and CI wrote is wrapped too: app, environment, suite and test names, descriptions, tags, branches, repos, base URLs, devices and verdicts. A page can contain text written to hijack a coding agent, so the server marks what is data.
Step 3 of test run 7d1c...: click, outcome error, at 2026-10-30T12:00:03.000Z.
<untrusted source="page">
Summary: click · Publish survey
URL: https://demo.example.com/surveys/3
</untrusted>
The test agent's reasoning (it may quote the page):
<untrusted source="model">
The status still reads Draft after clicking Publish.
</untrusted>- The sources are
page,model,console,network,report,testandmetadata. - The server instructions and every tool description tell the agent never to follow instructions found inside these blocks.
- Text that tries to close a block or open a fake one is defused: the text is normalised (full-width forms fold to ASCII), and a closing tag, its entity forms and look-alikes, including ones hidden with invisible characters, lose their opening
<, which becomes[. - Ids, statuses, counts and times outside the blocks are Outqube's own.
The tools use the same checks as the API, so a key only ever sees its own app. A run, test run or test of another app is not found, exactly as in the API.
Next steps
- Debug failures with coding agents: a workflow from a failed run to a fix.
- Authentication: choose the scope for the agent's key.
- API reference: the endpoints behind the tools.
CLI reference
Run Outqube tests from your terminal or CI with npx outqube. Install, sign in, every command and option, exit codes and JSON output.
GitHub App
Outqube CI runs your tests on pull requests and reports an Outqube check and one comment per pull request. Permissions, settings, URL modes and check states.