I Built an MCP Server for JMeter Docs
In this blog post, we will see how to connect your AI coding agent, like Claude Code, Qwen Code, or Cursor, to the JMeter Docs MCP server. This is a small project I shipped on docs.jmeter.ai, and it solves a problem I k…
In this blog post, we will see how to connect your AI coding agent, like Claude Code, Qwen Code, or Cursor, to the JMeter Docs MCP server. This is a small project I shipped on docs.jmeter.ai, and it solves a problem I kept running into myself: my agent would confidently answer JMeter questions from stale training data instead of checking the actual docs. A free, hosted MCP server for JMeter documentation is available at docs.jmeter.ai, allowing AI coding agents such as Claude Code, Qwen Code, and Cursor to retrieve grounded answers from actual docs rather than relying on potentially outdated training data. The server exposes two tools: one for searching documentation and one for retrieving full pages. Connecting the server requires no API key or signup. Configuration varies slightly by client but involves pointing the MCP client at the endpoint URL. Once connected, agents search the docs, retrieve relevant pages, and cite source URLs in their responses. Table of Contents Toggle What is the JMeter Docs MCP Server It is a free, hosted MCP endpoint that sits in front of the full JMeter documentation on docs.jmeter.ai. Point any MCP client at it and your agent can search the docs and pull full pages, grounded in real content instead of guessing. The endpoint is: https://docs.jmeter.ai/api/mcp It runs over Streamable HTTP and is stateless. No API key, no signup, nothing to manage on your side. Why I Built This I run docs.jmeter.ai as a community resource, and I noticed a pattern while using coding agents for my own JMeter work. Ask an agent about correlation, distributed testing, or a specific error like a ConnectException, and it often answers from memory. Sometimes that memory is outdated or just wrong for the version you are running. I wanted a way for agents to check their answer against the actual docs before responding, the same way I would tell a junior engineer to go read the manual instead of guessing. MCP made that straightforward to wire up. Available Tools The server exposes two tools, and honestly, two is enough: search_jmeter_docs: searches the entire documentation set, including the user manual, topic guides, error playbooks, release notes, and the interactive tool pages. It returns ranked pages with URLs and snippets. { "query": "correlation dynamic values" } get_jmeter_page: reads one page in full markdown. You can pass the full URL or just a bare path. { "url": "topics/api-load-testing" } In practice, an agent will call search first to find the right page, then call get_jmeter_page to pull the full content before answering you. How to Connect Your Agent Here is how to wire it up depending on what you are using. Claude Code Run this in your terminal: claude mcp add jmeter-docs https://docs.jmeter.ai/api/mcp --transport http --scope user The --scope user flag registers the server for all your projects, not just the folder you happen to be in. Restart Claude Code after adding it, then run /mcp to verify it shows up. Qwen Code, Cursor, and Other MCP Clients Add this block to your MCP configuration file: { "mcpServers": { "jmeter-docs": { "url": "https://docs.jmeter.ai/api/mcp" } } } Verify with curl If you want to sanity check the endpoint directly before wiring it into an agent, curl works fine: curl -X POST https://docs.jmeter.ai/api/mcp \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-06-18", "capabilities": {}, "clientInfo": { "name": "curl", "version": "1.0.0" } } }' If that returns a valid JSON-RPC response, the server is up and your client should be able to talk to it too. A Quick Example Say you ask your agent something like, “how do I set up correlation for dynamic values in JMeter?” Without the MCP server connected, most agents will answer from general training knowledge. It might be close, it might be outdated, and there is no way to check. With the JMeter Docs MCP server connected, here is what actually happens behind the scenes: The agent calls search_jmeter_docs with something like { "query": "correlation dynamic values" } It gets back a ranked list of pages, including the Correlation and Dynamic Values topic guide It calls get_jmeter_page with that page’s path to pull the full content It answers you using that content, and cites the docs.jmeter.ai URL as the source That last part is the one I care about most. You get a source link, so you can go verify the advice instead of just trusting the agent blindly. Why Connect the Docs at All A few reasons I keep coming back to when I explain this to people: Grounded answers. Responses come from the actual documentation, not from whatever the model happened to memorize during training. Verifiable sources. Every result carries a docs.jmeter.ai URL, so you can double check anything that sounds off. Always current. The index rebuilds whenever the docs sync from apache/jmeter, so your agent sees new releases without you doing anything. Zero cost. It is hosted on the community docs site. No rate-limited key to babysit. If you would rather skip the agent setup entirely, there is also an Ask AI button on every page of docs.jmeter.ai that answers questions directly in the browser. Head to https://docs.jmeter.ai/mcp/ for the full reference page, including the exact tool schemas. Below is the example of a session in Claude Code after installing JMeter Docs MCP. As you noticed, it is making a call to JMeter Docs site for a grounded information. Also, at the end of the conversation, it will cite the reference so that you get the grounded info all the time. Stale answers. The agent leans on whatever it memorized during training. JMeter moves, component behavior changes, new elements get added, and none of that shows up unless the agent actually checks current docs. Hallucinated specifics. This is the big one. Ask an agent for a regex extractor pattern or a specific property name without grounding, and it will sometimes invent something plausible-sounding that does not actually exist in JMeter. You will not know until your test plan fails. No way to verify. Without a source link, you are just trusting the answer. With the MCP connected, every response points back to a docs.jmeter.ai URL, so you can go check it yourself in ten seconds. Without it, you either trust blindly or go search manually anyway, which defeats the point of asking the agent in the first place. Version drift on error playbooks. Things like ConnectException or SSLHandshakeException troubleshooting steps are pretty specific to how JMeter actually behaves. Generic model knowledge tends to give generic Java networking advice instead of JMeter-specific fixes. More manual context stuffing. If you want grounded answers without the MCP, you end up copy-pasting doc pages into the chat yourself every time. That works, but it is slower and you have to remember to do it. Inconsistent depth across topics. Well-known JMeter basics like thread groups are probably fine from memory. Newer or more obscure stuff, like the properties reference or distributed testing edge cases, is where models tend to get shakier. Wrapping Up This was a small build, but it changed how I use agents for my own JMeter and performance testing work day to day. Instead of hoping the agent remembers the right approach, it goes and checks. That is a much better default for anything technical, and honestly it is how I wish more documentation sites worked. If you try connecting your agent to it, I would love to know which client you used and whether the answers held up against what you already knew. Happy Testing! What AI agent are you using for your JMeter work these days, Claude Code, Qwen Code, Cursor, or something else? About the Author 🤖 Found this useful? Ask Perplexity about this topic | This site uses Akismet to reduce spam. Learn how your comment data is processed.