Connect AI agents to Apache JMeter docs over MCP: search guides, lint JMX test plans, calculate workload sizing, and plan distributed clusters.
Point Claude Code, Qwen Code, Cursor, or any MCP client at https://docs.jmeter.ai/api/mcp and your agent answers JMeter questions grounded in this documentation, with a source link for every answer. Free, no API key, no signup. The on-site Ask AI chat uses these same tools in-process.
Endpoint: https://docs.jmeter.ai/api/mcp (Streamable HTTP, stateless)
Fair use: 120 requests/min per IP. Exceeding it returns HTTP 429 with a Retry-After header โ well-behaved clients back off automatically.
Available tools
Section titled โAvailable toolsโ| Tool | Category | Description |
|---|---|---|
search_jmeter_docs | Knowledge | BM25 semantic search across documentation, user manual, and guides |
get_jmeter_page | Knowledge | Fetch full markdown text of any documentation page |
convert_curl_or_har_to_jmx | Generator | Convert cURL commands and HAR files to valid JMX XML (GET, POST, QUERY, etc.) |
convert_openapi_to_jmx | Generator | Convert OpenAPI 3.x or Swagger 2.0 JSON/YAML into a JMeter test plan |
lint_jmx_snippet | Diagnostics | Scan JMX XML for anti-patterns and return a structural inventory |
calculate_workload_model | Calculator | Littleโs Law concurrency, pacing, ramp-up schedules, and JVM heap sizing |
plan_distributed_testing | Topology | Pinned RMI ports, user.properties, firewall rules, and Docker manifests |
tune_linux_os | System | Linux sysctl.conf, limits.conf, systemd, and Docker tuning parameters |
lookup_jmeter_property | Reference | Search curated tuning properties with defaults and config locations |
get_jsr223_recipe | Code | Production Groovy recipes (JWT decoding, HMAC signing, dynamic headers) |
lint_groovy_script | Code | Review JSR223 Groovy pitfalls and generate ready-to-paste element XML |
lookup_error_playbook | Diagnostics | Instant remediation and OS/JVM fixes for common runtime exceptions |
triage_errors | Diagnostics | Batch-map a runโs distinct failure signatures to error playbooks |
lookup_component | Reference | Dedicated reference page for one JMeter component (properties, defaults, related guides) |
lookup_function | Reference | Dedicated reference page for one built-in JMeter function (syntax, parameters, examples) |
search_jmeter_docs
Section titled โsearch_jmeter_docsโSearch the full documentation: user manual, topic guides, error playbooks, release notes, and interactive tool pages. Returns ranked pages with URLs and snippets.
{ "query": "correlation dynamic values" }get_jmeter_page
Section titled โget_jmeter_pageโRead one page in full markdown. Accepts the complete URL or a bare path like topics/api-load-testing.
{ "url": "topics/api-load-testing" }convert_curl_or_har_to_jmx
Section titled โconvert_curl_or_har_to_jmxโConvert one or more cURL commands or HAR (HTTP Archive 1.2) JSON files into a schema-valid, ready-to-run Apache JMeter 5.6.3 .jmx XML test plan. Supports all standard HTTP verbs plus RFC 9838 QUERY method with body payloads, Bearer token extraction, and timeouts.
{ "input": "curl -X QUERY https://api.example.com/v1/search -H 'Content-Type: application/json' -H 'Authorization: Bearer my-jwt' -d '{\"query\":\"loadtest\"}'", "threads": 50, "rampUpSeconds": 10, "parameterizeHost": true, "parameterizeAuth": true}convert_openapi_to_jmx
Section titled โconvert_openapi_to_jmxโConvert an OpenAPI 3.0/3.1 or Swagger 2.0 document in JSON or YAML into a ready-to-run JMeter 5.6.3 test plan. The tool samples request bodies from schemas, turns path and security values into JMeter variables, and supports method, tag, server, and deprecated-operation filters.
{ "input": "{\"openapi\":\"3.0.3\",\"info\":{\"title\":\"Orders API\",\"version\":\"1\"},\"servers\":[{\"url\":\"https://api.example.com\"}],\"paths\":{\"/orders\":{\"get\":{\"responses\":{\"200\":{\"description\":\"OK\"}}}}}}", "threads": 25, "tags": ["orders"]}lint_jmx_snippet
Section titled โlint_jmx_snippetโValidate a JMX XML snippet or test plan configuration up to 1 MB against performance best practices and anti-patterns (active GUI listeners, legacy BeanShell, uncompiled JSR223, missing timeouts, zero ramp-up). The response also includes a structure inventory with thread groups, sampler/listener/assertion counts, common config elements, plugin classes, and the JMeter version.
{ "jmxContent": "<HTTPSamplerProxy testclass=\"HTTPSamplerProxy\" ...>" }calculate_workload_model
Section titled โcalculate_workload_modelโCompute required thread concurrency, pacing delays, ramp-up schedules, and JVM heap recommendations based on target RPS/TPS and SLA response times using Littleโs Law.
{ "targetRps": 500, "avgResponseTimeMs": 250, "safetyFactor": 1.25 }plan_distributed_testing
Section titled โplan_distributed_testingโGenerate Master-Worker RMI port assignments, user.properties, CLI commands, firewall/security group rules, and Docker Compose manifests for distributed load testing.
{ "controllerIp": "10.0.0.5", "workerIps": "10.0.1.10, 10.0.1.11, 10.0.1.12", "serverPort": 1099, "serverRmiLocalPort": 50000, "clientRmiLocalPort": 60000}tune_linux_os
Section titled โtune_linux_osโGenerate Linux kernel (sysctl.conf), file descriptor (limits.conf), systemd, and Docker/K8s configurations tuned for high-concurrency JMeter load testing.
{ "concurrency": 25000, "ramGb": 32, "trafficType": "http_churn", "targetDistro": "ubuntu_debian", "role": "injector"}lookup_jmeter_property
Section titled โlookup_jmeter_propertyโSearch or inspect curated JMeter tuning properties (HTTP client pool, distributed testing RMI ports, InfluxDB backend listener, result formatting, engine settings).
{ "query": "httpclient4.idletimeout" }get_jsr223_recipe
Section titled โget_jsr223_recipeโFetch production-ready, performant Groovy scripts for JMeter JSR223 elements (JWT decoding & expiry, HMAC-SHA256 signing, dynamic header injection, nested JSON parsing, thread-safe CSV logging).
{ "query": "jwt" }lint_groovy_script
Section titled โlint_groovy_scriptโStatically review a user-provided Groovy script for JMeter-specific performance pitfalls and bindings unavailable to the selected JSR223 element. By default, the response also contains compilation-cached JSR223 element XML ready to paste into a test plan.
{ "code": "vars.put('elapsed', prev.getTime().toString())", "elementType": "JSR223PostProcessor", "includeJmxElement": true}lookup_error_playbook
Section titled โlookup_error_playbookโGet instant root cause analysis, OS/JVM tuning parameters, and step-by-step remediation for common JMeter and JVM exceptions (BindException, SocketTimeoutException, OutOfMemoryError, NoHttpResponseException, etc.). When keyword matching misses, the query is classified semantically against all error playbooks via classifier.dev (public keyless calls are not stored); pass classifierApiKey to use your own classifier.dev quota.
{ "query": "bindexception" }triage_errors
Section titled โtriage_errorsโBatch-triage a runโs distinct failure signatures (ideally sampler | response code | response message rows) into the matching error playbooks with per-playbook sample counts and share. Error text is sent to classifier.dev for zero-shot classification โ public keyless calls are not stored, and obvious secrets (Bearer tokens, passwords, JWTs) are redacted before sending.
{ "errors": [ { "text": "Checkout | Non HTTP response code: java.net.SocketTimeoutException | Read timed out", "count": 1240 }, { "text": "Login | 401 | Unauthorized", "count": 87 } ], "minConfidence": 0.7}lookup_component
Section titled โlookup_componentโFind the dedicated reference page for one JMeter test plan component and return its full markdown (properties, defaults, related guides).
{ "name": "HTTP Request" }lookup_function
Section titled โlookup_functionโFind the dedicated reference page for one built-in JMeter function and return its full markdown (syntax, parameters, examples).
{ "name": "__time" }Connect your agent
Section titled โConnect your agentโClaude Code
Section titled โClaude Codeโclaude mcp add jmeter-docs https://docs.jmeter.ai/api/mcp --transport http --scope user--scope user registers the server for all your projects, no matter which folder you run the command from. Restart Claude Code after adding it, then verify with /mcp.
Qwen Code, Cursor, and other MCP clients
Section titled โQwen Code, Cursor, and other MCP clientsโAdd this to your MCP configuration file:
{ "mcpServers": { "jmeter-docs": { "url": "https://docs.jmeter.ai/api/mcp" } }}Verify with curl
Section titled โVerify with curlโ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" } } }'Why connect the docs?
Section titled โWhy connect the docs?โ- Grounded answers. Responses come from the actual JMeter documentation, not from stale model memory.
- Verifiable sources. Every result carries the docs.jmeter.ai URL so you can check the advice.
- Always current. The index rebuilds when the docs sync from apache/jmeter, so agents see new releases automatically.
- Zero cost. Hosted on the community docs site with no rate-limited API key to manage.
Prefer a chat interface? Use the Ask AI button on any page, or start with the JMeter for Beginners guide.