Why a Coding Agent Needs an MCP for Allure TestOps When a Human Can Just Open the Browser A developer built a standalone Node.js stdio MCP server that connects coding agents to Allure TestOps, letting an agent read Android UI tests and create matching test cases directly in the TMS, or read a TestOps case and generate mocks via a separate MockServer MCP. The ten-tool server is intended to remove the human as the transport of meaning between code, the test management system, and mock tooling, and to let agents audit correspondences between test cases and automated tests. Developers on our team switched to working through coding agents fairly quickly. In my experience, development speed grew several times over, because a large share of routine work with code moved to agents. The processes around the code did not automatically get faster. Testing is where it became visible. My QA colleague was heavily loaded, and I asked her a simple question: how can I help? That question eventually became a small MCP server for Allure TestOps https://github.com/hram/allure-testops-mcp . The obvious objection: why give an agent an MCP for TestOps if a human can just open it in a browser? Because the browser was never the problem. The problem was that the developer already works through an agent, while a human still manually carries information between code, the TMS, and other tools. Before this there was no MCP integration with TestOps in our workflow, only the regular web UI. Test cases were created there, manually matched to automated tests, someone had to keep the documentation from drifting away from the code, and mocks were prepared separately. Take a simple task: there is a working UI test in the code, and a test case needs to exist in TestOps for it. Without integration: AI agent ↓ explains to the human what it found in the code ↓ human opens TestOps ↓ creates or edits the test case ↓ goes back to the agent The agent can analyze the code but stops at the TestOps boundary. From there the human is the transport between two systems. That is the spot I wanted to remove. Our Android project has a lot of UI tests, and they are structured much like tests in a TMS: Step 1 action assertions Step 2 action assertions Most of the information for a test case already exists, just in the code, not in TestOps. With the MCP connected, I can tell the agent: Create a test case based on this test. The agent reads the source UI test, parses its steps and assertions, and creates the corresponding test case in Allure TestOps. It is not inventing documentation from scratch: the source is the code of a real, existing automated test. The MCP only lets the result of that analysis land directly in the system where test documentation lives. Android UI test → AI agent → TestOps We also have an MCP for MockServer, which makes another task possible: Create a mock to verify this test case from TestOps. Now the source is the test model, not the code. The agent reads the test case from TestOps, understands the scenario, and creates one or more mocks through the other MCP: TestOps → AI agent → MockServer This is where the browser objection falls apart. If an MCP is only a way to click TestOps buttons on a human's behalf, the benefit is questionable. An agent with access to several systems solves a different problem: it carries meaning between tools, not text between windows. One place describes what to check, another needs the environment prepared for that check, and the agent sees both. ┌──────────────┐ │ AI agent │ └──────┬───────┘ │ ┌───────────┼───────────┐ ↓ ↓ ↓ Android code TestOps MockServer There is a set of test cases in TestOps and a set of UI tests in the Android project. Periodically you need to know: By hand, that means opening two systems and matching entities one by one. The agent already has the source code; with the TestOps MCP it gets the other side. Now it can be trusted with the audit itself. This is not plain CRUD over an API. The value comes from the model reading two representations of the same process and finding correspondences between them. These are the tasks I now consider the most interesting for an MCP. It's small: a standalone stdio MCP in Node.js with ten tools. You can search and read test cases, create and delete them, read and update scenarios, and work with issues and custom fields. It's set up for Cursor, Codex, and Claude. One TestOps API quirk had to be handled: scenarios can be stored in two formats, the old flat /scenario format and the tree-shaped /step format. The client handles both. Users of the MCP never see this, but without it the tool is unreliable on real data. The first implementation lived inside my own meta-agent . But the tester uses Cursor, and making her deploy my whole meta-agent just to reach TestOps made no sense. So the integration became a separate MCP server that can be connected directly to her agent. As long as a tool lives only in its author's environment, it solves the author's problem. Once a colleague can connect it to her agent, it becomes part of the team's workflow. I didn't write the MCP's code. A coding agent wrote 100% of it. My job was defining the task and checking the result, and in practice that meant: meta-agent because a different person would use it in Cursor; The code turned out to be the relatively easy part. The more an agent can do on its own, the more carefully write operations need to be treated. The current scenario update in TestOps is not atomic. It deletes the existing scenario and then creates the new steps with sequential requests: DELETE current scenario POST step 1 POST step 2 POST step 3 ... There is no rollback. If the process is interrupted between the delete and the last write, a test case could theoretically end up with a partial or empty scenario. I don't have a confirmed incident of this kind of data loss, so I won't present it as something that happened, but the risk is in the code. An MCP does not turn an external service into a safe sandbox. If an agent is allowed to change data, its tools need to be designed like a normal production client: validation, tests, clear operation semantics, and protection against partial changes where possible. The standalone version currently has six tests, and they pass. Some write operations, such as changing issues/custom fields and deleting a test case, are not covered by dedicated tests yet. I can. So can the tester. The MCP isn't there so a human never opens TestOps again. It's there so a human isn't a mandatory middleman in every operation between the agent and TestOps: code → TestOps TestOps → MockServer code ↔ TestOps Each of these can be done by hand through a browser and an IDE. But if every transition between systems needs a human, agent-driven development stops at the IDE's border. What this project changed is that the human is no longer the transport protocol between code, the TMS, and the agent, and keeps the parts that are actually theirs: defining the task and checking the result. The server is open source: hram/allure-testops-mcp https://github.com/hram/allure-testops-mcp . The full case study is on my site: https://hram.github.io/en/articles/allure-testops-mcp/ https://hram.github.io/en/articles/allure-testops-mcp/