---
title: "MCP Server"
description: "Connect AI agents to Apache JMeter docs over MCP: search guides, lint JMX test plans, calculate workload sizing, and plan distributed clusters."
url: https://docs.jmeter.ai/mcp/
lastUpdated: 2026-10-01
source: docs.jmeter.ai
---

# MCP Server

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)

[Add to VS Code](vscode:mcp/install?%7B%22name%22%3A%22jmeter-docs%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fdocs.jmeter.ai%2Fapi%2Fmcp%22%7D)[Add to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=jmeter-docs&config=eyJ1cmwiOiJodHRwczovL2RvY3Muam1ldGVyLmFpL2FwaS9tY3AifQ%3D%3D)

**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

| 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

Search the full documentation: user manual, topic guides, error playbooks, release notes, and interactive tool pages. Returns ranked pages with URLs and snippets.

```json
{ "query": "correlation dynamic values" }
```

### get_jmeter_page

Read one page in full markdown. Accepts the complete URL or a bare path like `topics/api-load-testing`.

```json
{ "url": "topics/api-load-testing" }
```

### 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.

```json
{
  "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

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.

```json
{
  "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

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.

```json
{ "jmxContent": "<HTTPSamplerProxy testclass=\"HTTPSamplerProxy\" ...>" }
```

### 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.

```json
{ "targetRps": 500, "avgResponseTimeMs": 250, "safetyFactor": 1.25 }
```

### 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.

```json
{
  "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

Generate Linux kernel (`sysctl.conf`), file descriptor (`limits.conf`), `systemd`, and Docker/K8s configurations tuned for high-concurrency JMeter load testing.

```json
{
  "concurrency": 25000,
  "ramGb": 32,
  "trafficType": "http_churn",
  "targetDistro": "ubuntu_debian",
  "role": "injector"
}
```

### lookup_jmeter_property

Search or inspect curated JMeter tuning properties (HTTP client pool, distributed testing RMI ports, InfluxDB backend listener, result formatting, engine settings).

```json
{ "query": "httpclient4.idletimeout" }
```

### 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).

```json
{ "query": "jwt" }
```

### 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.

```json
{
  "code": "vars.put('elapsed', prev.getTime().toString())",
  "elementType": "JSR223PostProcessor",
  "includeJmxElement": true
}
```

### 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.

```json
{ "query": "bindexception" }
```

### 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.

```json
{
  "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

Find the dedicated reference page for one JMeter test plan component and return its full markdown (properties, defaults, related guides).

```json
{ "name": "HTTP Request" }
```

### lookup_function

Find the dedicated reference page for one built-in JMeter function and return its full markdown (syntax, parameters, examples).

```json
{ "name": "__time" }
```

## Connect your agent

### Claude Code

```bash
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

Add this to your MCP configuration file:

```json
{
  "mcpServers": {
    "jmeter-docs": {
      "url": "https://docs.jmeter.ai/api/mcp"
    }
  }
}
```

### Verify with curl

```bash
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?

- **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](/topics/jmeter-for-beginners/).
