ReportPortal MCP server: 18 tools over test launches
What a test-reporting platform exposes to an agent, the three tools that change state, and the analytics setting that is on by default.
Last verified 1 September 2026 · from The ReportPortal repository, its release binaries and the server's own tools/list response
This page is one of 90 in a directory of monitoring and developer tools. Each page checks what an AI coding agent can get out of the tool through its MCP server, the connector that lets the agent query the tool directly.
Summary
The ReportPortal MCP server gives an agent its test-reporting data: 18 tools covering launches, test items, logs, attachments, defect types and the platform's own analysis jobs.
It is cheap to connect. The definitions cost between 4,146 and 7,999 tokens, roughly 2.1% to 4.0% of a 200,000-token window, because descriptions average 113 characters.
Both launch_delete and launch_force_finish arrive enabled. The server also carries analytics: its README documents a /metrics endpoint returning "Analytics metrics (if analytics enabled)". The switch names below were read from the binary's own --help and are not in the published documentation.
What is the ReportPortal MCP server?
It is ReportPortal's server for the Model Context Protocol. ReportPortal aggregates automated test results, so a connected agent can read failures without opening the dashboard.
The data model is launches and test items. A launch is one execution of a suite, a test item is a case or a suite inside it, and most tools take filters over one or the other.
Three tools start ReportPortal's own analysis rather than reading data: run_auto_analysis, run_unique_error_analysis and run_quality_gate. Those are jobs on the server, not queries.
ReportPortal gives an agent the history of test launches and failures. That is evidence about test execution, not about the running application. Its CI link ends at those launches, with no agent-telemetry or cost coverage.
| Part of the work | What ReportPortal has here | Can an agent reach it |
|---|---|---|
| Code, tests & review | Test results, defect types, logs, attachments | Yes. Core strength. Failures, their logs and their classification are all reachable |
| CI & release | Launches from CI runs | Partial. A launch is the record of a CI test run; there are no pipeline or deployment tools |
| Production observability | None | No metrics, logs or traces from running services |
| Agent observability & evals | None | No traces, evaluations or prompt versioning for your own agents |
| AI cost management | None | No spend data of any kind |
For an agent, ReportPortal answers what the tests did. It can find the failing item, read its log and see how it was classified. It knows nothing about the code that failed or the service in production, so it pairs with a repository connector for a fix.
What can an AI agent do with ReportPortal?
| Task | Tools | Works | Watch out for |
|---|---|---|---|
| Find the last run of a suite | get_last_launch_by_name get_launches get_launch_by_id | Yes | get_launches and get_last_launch_by_name carry near-identical descriptions |
| Find which tests failed | get_test_items_by_filter get_test_item_by_id get_test_suites_by_filter | Yes | Filters are the ReportPortal query parameters, passed through unchanged |
| Read the log behind a failure | get_test_item_logs_by_filter get_test_item_attachment_by_id | Yes | Attachments come back by ID, so the item has to be found first |
| Tell a regression from a known flake | get_test_items_history get_project_defect_types | Yes | History needs either a launch ID or a parent suite in the filter |
| Classify a failure | update_defect_type_for_test_items | Yes | This writes. It changes the defect type recorded against the items |
| Run the platform's own analysis | run_auto_analysis run_unique_error_analysis run_quality_gate | Yes | These start jobs on the ReportPortal server rather than returning a query result |
| See the code that failed | GitHub | No, separate server | ReportPortal stores the result, never the diff |
get_launches and get_last_launch_by_name ship with the same one-line description. Pin the launch by ID once found, so a later call cannot silently move to a different run.
18 tools registered, all on by default
- Launches3
get_launchesget_last_launch_by_nameget_launch_by_id- Test items4
get_test_items_by_filterget_test_item_by_idget_test_suites_by_filterget_test_items_history- Evidence2
get_test_item_logs_by_filterget_test_item_attachment_by_id- Classification1
get_project_defect_types- Analysis jobs3
run_auto_analysisrun_unique_error_analysisrun_quality_gate- Changing a launch3Write
update_launchupdate_defect_type_for_test_itemsimport_launch_from_file- Destructive2Write
launch_deletelaunch_force_finish
Groups are a reader's map; the server registers one flat list of 18, which matches the table in its own README. Counted on 24 August 2026 from the released binary.
What connecting costs before the first question
A context window is the amount of text a model can hold at once, and connecting uses some of it before the agent asks anything. Every tool the server registers sends its name, description and input schema to the model when the session starts. The tool list is charged whether or not a single tool is called.
18 tools cost between 4,146 and 7,999 tokens, about 2.1% to 4.0% of a 200,000-token window.
The schemas dominate. Descriptions average 113 characters and schemas average 885, because the filter tools pass ReportPortal's own query parameters through to the model.
| Tool set | Tools | Tokens (GPT-5.6, GPT-5.5) | Tokens (GPT-4, GPT-3.5) | Tokens (Claude Haiku 4.5 to Opus 5) | Share of a 200,000-token window |
|---|---|---|---|---|---|
| Every tool, as registered | 18 | 4,251 to 6,264 | 4,146 to 6,249 | 6,232 to 7,999 | 2.1% to 4.0% |
Encodings: GPT-5.6, GPT-5.5 o200k_base; GPT-4, GPT-3.5 cl100k_base; Claude Haiku 4.5 to Opus 5 count_tokens. Counted 24 August 2026 from tools/list on the released 1.3.3 macOS binary. It was run locally with a placeholder host and token.
Registration is static, so no ReportPortal instance answered. Figures cover name, description and input schema. The two models in column one share the o200k_base encoding, so they get one count. The spread is formatting, about 51%. Reasoning tokens are output, spent per request. This count is input, charged once at connection.
The Claude figures are measured rather than encoded. Anthropic publishes no local tokenizer. The definitions were sent to the API's count_tokens endpoint, and a no-tools baseline was subtracted. The range covers two tokenizer generations rather than two serializations. Haiku 4.5 and Opus 4.6 sit at the low end. Opus 5 and Sonnet 5 sit at the high end. The gap between them is about a third.
ReportPortal MCP server limits: where answers come back incomplete
Two limits below are about telling one launch from another; the third is about a setting that is easy to miss.
The agent says: “The suite passed.” It may have read a different run.
get_launches and get_last_launch_by_name ship with the same one-line description, and both return recent launches. An agent that picks either can answer about a run you did not mean.
Nothing in the result distinguishes the two, because both return launch records of the same shape.
Guard: Have the agent pin a launch ID with get_launch_by_id and quote it in the answer.
The agent says: “I have analyzed the failures.” It may have started a server-side job.
run_auto_analysis, run_unique_error_analysis and run_quality_gate start ReportPortal's own analysis on a launch. They act on the platform rather than returning a query result.
Guard: Require the agent to say when it started an analysis job, and on which launch.
Connecting sends analytics to Google unless you switch it off.
The binary documents --analytics-off and RP_MCP_ANALYTICS_OFF for disabling Google Analytics tracking, and a --user-id flag for analytics identification. The default is on.
Guard: Pass --analytics-off in every configuration if outbound analytics is not acceptable.
How to configure ReportPortal MCP for agents
- 1
Switch analytics off if that matters to you
The binary's
--helplists--analytics-offandRP_MCP_ANALYTICS_OFF. Neither appears in the README, so confirm against the version you install rather than trusting this page. - 2
Decide who may delete a launch
launch_deleteandlaunch_force_finishregister by default, and the API token is the only boundary. - 3
Pick the mode deliberately
In stdio mode
RP_API_TOKENis required; in HTTP mode it is ignored entirely and every request must carry its own bearer token. - 4
Set the project
--projectavoids an agent querying a project the token can see but you did not mean.
Paste this into your agent’s instructions
Two launch tools carry the same description, so an agent can answer about a different run than the one you meant. The block makes it name the launch.
When you answer using ReportPortal MCP tools, state: - The launch ID the answer came from, not just the suite name. - The filters you passed. Test-item queries take ReportPortal filter parameters and a wrong one returns a real, wrong set. - Whether you called launch_delete, launch_force_finish, update_launch or update_defect_type_for_test_items. Never state that data does not exist. State that no items matched the filters above. Write your answer in ASD-STE100 Simplified Technical English. Use short sentences with one idea in each.
Do you need the MCP server at all?
Often you do not. ReportPortal has a documented REST API, and most of these tools pass its filter parameters through unchanged. A dashboard or a script is better served by calling it directly.
The connector earns its place during a failing build, when the agent is already in the editor and the question is which test broke and why.
At 4,146 tokens the cost of keeping it connected is small, so the argument against it is rarely context.
Connect it while triaging a failure. Call the REST API for anything scheduled or repeated.
ReportPortal MCP server setup
Download the release binary for your platform from 1.3.3, or use the Docker image the README recommends. Stdio mode needs a host, a project and an API token.
HTTP mode is different. RP_API_TOKEN is ignored, and each request must carry Authorization: Bearer <token> instead.
Claude Code
Stdio mode requires the API token. --analytics-off stops the tracking the server sends by default.
claude mcp add-json "reportportal" '{"command":
"reportportal-mcp-server",
"args":["--rp-host","https://rp.internal",
"--project","my-project","--analytics-off"],
"env":{"RP_API_TOKEN":"<your-token>"}}'Cursor
In ~/.cursor/mcp.json. The API token is required in stdio mode.
{"mcpServers":{"reportportal":{
"command":"reportportal-mcp-server",
"args":["--rp-host","https://rp.internal",
"--project","my-project","--analytics-off"],
"env":{"RP_API_TOKEN":"<your-token>"}}}}Codex CLI
Codex reads TOML, so the JSON blocks above will not transfer. The token is still required.
[mcp_servers.reportportal]
command = "reportportal-mcp-server"
args = ["--rp-host", "https://rp.internal",
"--project", "my-project", "--analytics-off"]
env = { RP_API_TOKEN = "<your-token>" }Every other client
Each block below is the configuration for one client, with the file path and the key that client expects.
Claude Desktop
macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Windows %APPDATA%\Claude\claude_desktop_config.json. There is no CLI. Edit through Settings, Developer, Edit Config.
Quit and restart fully for changes to load. Paths in args must be absolute. Logs at ~/Library/Logs/Claude/mcp.log.
{"mcpServers":{"reportportal":{"command":"reportportal-mcp-server",
"args":["--rp-host","https://rp.internal","--project","my-project","--analytics-off"],
"env":{"RP_API_TOKEN":"<your-token>"}}}}Gemini CLI
~/.gemini/settings.json globally, or .gemini/settings.json per project. Key mcpServers. CLI: gemini mcp add.
{"mcpServers":{"reportportal":{"command":"reportportal-mcp-server",
"args":["--rp-host","https://rp.internal","--project","my-project","--analytics-off"],
"env":{"RP_API_TOKEN":"<your-token>"}}}}VS Code Copilot
.vscode/mcp.json per workspace, or your user profile. CLI: code --add-mcp.
{"servers":{"reportportal":{"command":"reportportal-mcp-server",
"args":["--rp-host","https://rp.internal","--project","my-project","--analytics-off"],
"env":{"RP_API_TOKEN":"<your-token>"}}}}The key is `servers`, not `mcpServers`. VS Code is the only client that uses that name, and copying a config from anywhere else fails silently.
Windsurf
~/.codeium/windsurf/mcp_config.json, which is the path Windsurf documents. Key mcpServers, the same JSON shape as Cursor, carrying the same API token.
Zed
~/.config/zed/settings.json, carrying the same API token as the blocks above.
The key is `context_servers`. Zed does not call them MCP servers in config, so searching its settings for mcp finds nothing.
Google Antigravity
~/.gemini/config/mcp_config.json globally, or .agents/mcp_config.json per project. Key mcpServers. There is no CLI. Use the /mcp overlay in the editor. Supports stdio, streamable HTTP, SSE and websocket.
{"mcpServers":{"reportportal":{"command":"reportportal-mcp-server",
"args":["--rp-host","https://rp.internal","--project","my-project","--analytics-off"],
"env":{"RP_API_TOKEN":"<your-token>"}}}}Amp (Sourcegraph)
~/.config/amp/settings.json or .amp/settings.json, carrying the same API token. The amp mcp CLI covers approve, doctor and oauth.
The key is `amp.mcpServers`, namespaced. A bare mcpServers block is ignored.
Cline
~/.cline/mcp.json per the docs. The source also reads ~/.cline/data/settings/cline_mcp_settings.json. Key mcpServers, standard JSON shape, carrying the same API token. Supports stdio, streamable HTTP and SSE.
Goose (Block)
~/.config/goose/config.yaml, carrying the same API token.
YAML, and servers are called `extensions`. Goose does not use the MCP vocabulary in config at all. Add one interactively with goose configure, or per session with goose session --with-extension.
Kiro (AWS)
.kiro/settings/mcp.json per workspace, or ~/.kiro/settings/mcp.json globally. Key mcpServers, standard JSON shape, carrying the same API token.
Warp
~/.warp/.mcp.json or .warp/.mcp.json. Key mcpServers, standard shape, carrying the same API token. Also addable through the /agent-add-mcp skill.
JetBrains Junie
.junie/mcp/mcp.json per project, or ~/.junie/mcp/mcp.json. Key mcpServers, carrying the same API token. Use /mcp in the CLI to manage.
Roo Code
.roo/mcp.json per project. The global file is mcp_settings.json, opened from the Roo Code MCP settings view with Edit Global MCP. Key mcpServers, carrying the same API token.
Continue
.continue/mcpServers/*.yaml, one file per server, carrying the same API token.
YAML, and `mcpServers` is a list, not an object. Every JSON client keys servers by name. Continue takes an array, so a converted config will not parse.
Trae
.trae/mcp.json per project, or paste into the UI under Raw Config (JSON). Key mcpServers, standard shape, carrying the same API token.
Devin
Devin has no config file to edit. Servers are added through a web form in the settings UI, and Devin's documentation states you do not need to write or paste JSON. The block below is the shape those fields describe, shown for reference. Either route uses the same API token.
HTTP mode
In HTTP mode the API token in the environment is ignored. Every request must carry its own bearer token, which is what makes the mode usable by more than one person.
MCP_MODE=http reportportal-mcp-server \
--rp-host https://rp.internal --analytics-off
# Clients send: Authorization: Bearer <token>Self-signed certificates
--insecure and --tls-ca-cert are mutually exclusive; setting both is rejected.
The API token still comes from the environment in stdio mode, so no credentials appear in the command itself.
reportportal-mcp-server --rp-host https://rp.internal \ --tls-ca-cert /etc/ssl/certs/my-ca.pem \ --project my-project --analytics-off
Read-only access, permissions and security
Two tools are destructive and arrive enabled
launch_deleteremoves a launch andlaunch_force_finishcloses one that is still running.Analytics is opt-out, not opt-in
The server documents
--analytics-offandRP_MCP_ANALYTICS_OFFto disable Google Analytics tracking, which means it is on until you do.Authentication changes with the mode
In stdio mode
RP_API_TOKENis required; in HTTP mode it is ignored and the bearer header is the only credential.One tool uploads
import_launch_from_fileaccepts inline file content and creates a launch from it, subject to the server's upload limit.
Troubleshooting
- The server exits with a usage error
--rp-hostis required, and the project flag is--projectrather than--rp-project. The binary prints the correct flag names with--help.- HTTP mode returns 401 with a valid token
- In HTTP mode
RP_API_TOKENand--tokenare ignored. The token has to travel per request in anAuthorization: Bearerheader. - The agent answered about the wrong run
get_launchesandget_last_launch_by_nameshare the same one-line description. Have the agent pin a launch ID and state it.- TLS verification fails
- Use
--tls-ca-certwith your CA file, or--insecureto skip verification. The two are mutually exclusive and setting both is rejected.
ReportPortal MCP server: Reference
| Item | Value |
|---|---|
| Status | 1.3.3, released 23 June 2026 · repository pushed 13 August 2026 |
| Adoption | 22 stars · 24 forks · 11 releases · repository created 8 April 2025 |
| License | Apache-2.0 |
| Distribution | macOS, Linux and Windows binaries on both architectures, plus Docker |
| Auth | RP_API_TOKEN in stdio mode; per-request bearer header in HTTP mode |
| Tools | 18, all on by default |
| Destructive tools | launch_delete, launch_force_finish |
| Analytics | Google Analytics, on unless --analytics-off is passed |
| Context cost | 4,146 to 7,999 tokens |
What engineers report
The repository is first-party, with 11 releases since it was created on 8 April 2025. Its own README and the tools/list capture are the evidence below.
| What was checked | What it shows |
|---|---|
| Stars | 22 |
| Last push | 13 August 2026 |
| Latest release | 1.3.3, 23 June 2026 |
| License | Apache-2.0 |
Tools returned by tools/list | 18 |
| Tools in the README table | 18, matching tools/list |
| Average description | 113 characters per tool |
| Average schema size | 885 characters per tool |
Repository facts from the GitHub API, retrieved 24 August 2026. The README's own tool table was counted on the same date and matches the released binary's tools/list response.
Should you connect an agent to ReportPortal?
Yes. Best for stdio mode with --analytics-off, a project set, and a token scoped to reading unless deletion is wanted.
- Strongest fit
- Teams running ReportPortal who want an agent to triage a failing suite without leaving the editor.
- Main advantage
- Low context cost and a direct path from a launch to the log line that failed.
- Main weakness
- Two launch tools share a description, so the agent needs a rule about pinning an ID.
- Operational risk
launch_deleteandlaunch_force_finishregister by default, with the API token as the only boundary.
From Oodle
One platform for agent traces and infrastructure
Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface, from $10 per million spans.
See agent observabilityFrequently asked questions
How many tools does the ReportPortal MCP server have?
18, all on by default. Counted from the server's own tools/list response on the released 1.3.3 binary, on 24 August 2026. The README's table lists the same 18.
What do the tool definitions cost?
Between 4,146 and 7,999 tokens, about 2.1% to 4.0% of a 200,000-token window. Schemas rather than descriptions carry the cost.
Can an agent delete a launch?
Yes. launch_delete and launch_force_finish both register by default. Scope the API token, because the server has no read-only mode.
Does it send analytics?
Yes, Google Analytics, unless --analytics-off or RP_MCP_ANALYTICS_OFF is set. There is also a --user-id flag used for analytics identification.
Why is my token ignored in HTTP mode?
By design. In HTTP mode RP_API_TOKEN and --token are ignored, and each request must carry its own Authorization: Bearer header.