SmartBear MCP Server
OFFICIAL SERVEROne MCP server for SmartBear's BugSnag, Swagger, PactFlow, Zephyr, QMetry, Reflect and other QA tools
Run, inspect and debug Testkube test workflows, executions, logs and artifacts from an MCP client
Official · Testkube Go Remote (hosted) · Streamable HTTPLocal · stdio TestingDevOps and monitoring
65 popularity score ★ 1.7k ⇣ 20k pulls
Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
claude mcp add --transport http testkube https://api.testkube.io/organizations/<ORGANIZATION_ID>/environments/<ENVIRONMENT_ID>/mcp{ "servers": { "testkube": { "type": "http", "url": "https://api.testkube.io/organizations/<ORGANIZATION_ID>/environments/<ENVIRONMENT_ID>/mcp" } } }{
"mcpServers": {
"testkube": {
"url": "https://api.testkube.io/organizations/<ORGANIZATION_ID>/environments/<ENVIRONMENT_ID>/mcp"
}
}
}https://api.testkube.io/organizations/<ORGANIZATION_ID>/environments/<ENVIRONMENT_ID>/mcpOpens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs TK_ACCESS_TOKEN, TK_ORG_ID, TK_ENV_ID. Replace each <NAME> with your value.
claude mcp add testkube -e TK_ACCESS_TOKEN=<TK_ACCESS_TOKEN> -e TK_ORG_ID=<TK_ORG_ID> -e TK_ENV_ID=<TK_ENV_ID> -- docker run --rm -i -e TK_ACCESS_TOKEN -e TK_ORG_ID -e TK_ENV_ID kubeshop/mcp-server:2.15.0{
"mcpServers": {
"testkube": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"TK_ACCESS_TOKEN",
"-e",
"TK_ORG_ID",
"-e",
"TK_ENV_ID",
"kubeshop/mcp-server:2.15.0"
],
"env": {
"TK_ACCESS_TOKEN": "<TK_ACCESS_TOKEN>",
"TK_ORG_ID": "<TK_ORG_ID>",
"TK_ENV_ID": "<TK_ENV_ID>"
}
}
}
}{
"mcpServers": {
"testkube": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"TK_ACCESS_TOKEN",
"-e",
"TK_ORG_ID",
"-e",
"TK_ENV_ID",
"kubeshop/mcp-server:2.15.0"
],
"env": {
"TK_ACCESS_TOKEN": "<TK_ACCESS_TOKEN>",
"TK_ORG_ID": "<TK_ORG_ID>",
"TK_ENV_ID": "<TK_ENV_ID>"
}
}
}
}{
"servers": {
"testkube": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"TK_ACCESS_TOKEN",
"-e",
"TK_ORG_ID",
"-e",
"TK_ENV_ID",
"kubeshop/mcp-server:2.15.0"
],
"env": {
"TK_ACCESS_TOKEN": "<TK_ACCESS_TOKEN>",
"TK_ORG_ID": "<TK_ORG_ID>",
"TK_ENV_ID": "<TK_ENV_ID>"
}
}
}
}[mcp_servers.testkube]
command = "docker"
args = ["run", "--rm", "-i", "-e", "TK_ACCESS_TOKEN", "-e", "TK_ORG_ID", "-e", "TK_ENV_ID", "kubeshop/mcp-server:2.15.0"]
[mcp_servers.testkube.env]
TK_ACCESS_TOKEN = "<TK_ACCESS_TOKEN>"
TK_ORG_ID = "<TK_ORG_ID>"
TK_ENV_ID = "<TK_ENV_ID>"gemini mcp add --scope user -e TK_ACCESS_TOKEN=<TK_ACCESS_TOKEN> -e TK_ORG_ID=<TK_ORG_ID> -e TK_ENV_ID=<TK_ENV_ID> testkube docker -- run --rm -i -e TK_ACCESS_TOKEN -e TK_ORG_ID -e TK_ENV_ID kubeshop/mcp-server:2.15.0TK_ACCESS_TOKEN secret |
Required: Testkube API token, or a user access token for the board tools. The server exits without it. |
|---|---|
TK_ORG_ID |
Required: Organization ID (tkcorg_…). |
TK_ENV_ID |
Required: Environment ID (tkcenv_…). |
TK_CONTROL_PLANE_URL |
Optional: API address, set it for on-prem. |
TK_DASHBOARD_URL |
Optional: Dashboard address used in links. Derived from the control plane URL (api. becomes app.) when unset. |
TK_MCP_SHTTP_AUTH_TOKEN secret |
Optional: Bearer token clients must send to the HTTP transport. Required for shttp, must differ from TK_ACCESS_TOKEN. |
In a container, a setting goes in with -e NAME=value after docker run.
Testkube is Kubeshop's platform for running tests as workflows inside Kubernetes. Its MCP server ships in the Testkube CLI and works against one Testkube environment at a time. From a client you can list, create, update and start TestWorkflows and workflow templates. You can follow executions, wait for them to finish, abort or retag them, and pull their logs and artifacts.
For debugging there are per-execution resource metrics, resource history over many runs, and JSONPath queries over workflow definitions and execution records. It also serves the YAML schemas for workflows and execution data and builds links into the Testkube dashboard. The insight tools read the performance and test series Testkube collects for the current environment.
Insights board tools arrived in 2.15.0. They list, create, edit, render and delete boards and the reports on them. Boards belong to the organization, not to one environment. The code refuses them for API tokens (boards.go), so they only work with a signed-in user: the hosted endpoint with your own account, or the CLI after `testkube login`. With the Docker image they work only if TK_ACCESS_TOKEN holds a user access token.
You can use it three ways. There is a hosted endpoint on the Testkube Control Plane, which the makers recommend. There is `testkube mcp serve` in the CLI, and there is the kubeshop/mcp-server Docker image, which starts in environment-variable mode. Both local ways speak stdio by default, or streamable HTTP with `--transport=shttp`.
The overview lists 39 tools. The server registers 43 in pkg/mcp/server.go, because the docs still leave out the four insight tools. query_workflows and query_executions are added only when the control plane answers on the endpoints they need, so an older on-prem control plane may show fewer.
| To run it yourself | Docker |
|---|---|
| Runs on | macOS, Windows, Linux |
| Testkube | Free tierTestkube Cloud or a self-hosted Enterprise control plane, with an organization and environment |
For the Docker way, create an API token under Organization Settings → API Tokens with roles that cover what you want to do, and note the org ID (tkcorg_…) and environment ID (tkcenv_…). The board tools need a user access token instead of an API token. The hosted endpoint needs no install. On self-hosted installs an admin must first set MCP_ENABLED in Helm and turn the endpoint on for each environment. In Claude Code you finish sign-in through /mcp → Authenticate.
Works on one organization and environment per server; to reach another environment you run or register a second one. The Docker setup page and the Docker Hub entry both give the image as kubeshop/testkube-mcp-server, which has no published tags, so their snippets fail to pull. The working image is kubeshop/mcp-server (the one the MCP registry entry names). Its ENTRYPOINT already runs `mcp serve`, so the trailing `mcp serve` in the docs is not needed. The overview's list of 30 tools leaves out the four insight tools added by 2.14.0. On self-hosted Testkube the hosted endpoint is off by default.
Suits teams that already run tests on Testkube and want an assistant to start workflows, wait for results and dig into failed runs through logs, artifacts and resource metrics. It can create and update workflows, abort runs and delete boards, so a token with a narrow role is the cautious choice. Pick the hosted endpoint for per-user OAuth with nothing to install, and for the board tools, which need a user session. The Docker image fits CI jobs or machines that use an API token. It does nothing without a Testkube account and drives only tests defined in Testkube.
30 only read, 11 change things, 2 can delete or overwrite. A ? marks an optional parameter.
list_workflowsget_workflowget_workflow_definitionget_workflow_metricscreate_workflow changesupdate_workflow changesrun_workflow changeslist_workflowtemplatesget_workflowtemplate_definitioncreate_workflowtemplate changesupdate_workflowtemplate changeslist_agentslist_executionsget_execution_infoget_workflow_execution_metricsget_workflow_resource_historyfetch_execution_logslookup_execution_idwait_for_executionsabort_workflow_execution changesupdate_execution_tags changeslist_artifactsread_artifactquery_workflowsquery_executionsget_workflow_schemaget_execution_schemabuild_dashboard_urllist_labelslist_resource_groupslist_insight_seriesworkflow?: stringsource?: stringmetricKey?: stringidentityFilters?: stringq?: stringpage?: stringpageSize?: stringlist_insight_metric_keysworkflow?: stringsource?: stringidentityFilters?: stringq?: stringpage?: stringpageSize?: stringget_insight_metric_seriesmeasure?: stringseriesId?: stringaggregate?: stringsegment?: stringworkflow?: stringidentityFilters?: stringstatus?: stringtagFilter?: stringstartDate?: stringendDate?: stringmaxSamples?: numberlist_insight_executionsmeasure?: stringidentityFilters?: stringworkflow?: stringstatus?: stringtagFilter?: stringstartDate?: stringendDate?: stringpage?: stringpageSize?: stringlist_boardsname?: stringvisibility?: stringfavorite?: stringpage?: numberpageSize?: numberget_boardboard: stringcreate_board changesname: stringdescription?: stringslug?: stringprivate?: booleanupdate_board changesboard: stringname?: stringdescription?: stringslug?: stringprivate?: booleanlayout?: objectadd_board_report changesboard: stringkind: enumname: stringdescription?: stringparams?: objectfilters?: objectupdate_board_report changesboard: stringreportId: stringname?: stringdescription?: stringkind?: stringparams?: objectfilters?: objectreplaceParams?: booleanremove_board_report deletesboard: stringreportId: stringdelete_board deletesboard: stringrender_boardboard: stringreportId?: stringscope?: enumtimeZone?: stringmaxSamples?: number