JMeter Docs

Apache JMeter community documentation, conversion tools, linters, and calculators for AI agents.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
99%
Naming quality
88%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,645Tokens (tool definitions)
~2.0 KBTypical response size
Significant attention impact (2.85% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

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

Remote endpoints

https://docs.jmeter.ai/api/mcpstreamable-http

What it can do

Tool inventory

Tools (15)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_jmeter_docs(query)

Search the Apache JMeter documentation on docs.jmeter.ai. Returns the most relevant pages with titles, URLs, and snippets. Use for any question about JMeter test plans, components, functions, properties, distributed testing, reports, or troubleshooting.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Search query, e.g. \"how to correlate dynamic values\" or \"thread group ramp up\""
    }
  },
  "required": [
    "query"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_jmeter_page(url)

Fetch the full markdown text of one docs.jmeter.ai page. Accepts the page URL (e.g. https://docs.jmeter.ai/topics/api-load-testing/) or a bare path (e.g. topics/api-load-testing).

Input Schema

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "minLength": 1,
      "description": "Page URL or path, e.g. https://docs.jmeter.ai/user-manual/functions/ or user-manual/functions"
    }
  },
  "required": [
    "url"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪lint_jmx_snippet(jmxContent)

Validate a JMeter test plan XML string or snippet against best practices and performance anti-patterns, and return a structural inventory with thread groups, sampler/listener/assertion counts, HTTP Defaults/Header/Cookie/CSV presence, plugin classes, and JMeter version.

Input Schema

{
  "type": "object",
  "properties": {
    "jmxContent": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000000,
      "description": "JMX XML string or test plan snippet to analyze (max 1MB)."
    }
  },
  "required": [
    "jmxContent"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢calculate_workload_model(targetRps, avgResponseTimeMs, thinkTimeMs, testDurationMinutes, safetyFactor)

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.

Input Schema

{
  "type": "object",
  "properties": {
    "targetRps": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Target throughput in requests / transactions per second (RPS/TPS)."
    },
    "avgResponseTimeMs": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Expected average response time in milliseconds."
    },
    "thinkTimeMs": {
      "description": "Think time / user pause between requests in milliseconds (default: 0).",
      "type": "number",
      "minimum": 0
    },
    "testDurationMinutes": {
      "description": "Steady-state test duration in minutes (default: 10).",
      "type": "number",
      "exclusiveMinimum": 0
    },
    "safetyFactor": {
      "description": "Headroom safety buffer multiplier (default: 1.25 = 25% buffer).",
      "type": "number",
      "minimum": 1
    }
  },
  "required": [
    "targetRps",
    "avgResponseTimeMs"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢lookup_jmeter_property(query)

Search or lookup curated JMeter properties (e.g. "httpclient4.idletimeout", "jmeter.save.saveservice.*", "remote_hosts", "summariser"). Returns category, defaults, and recommendations.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Property name or keyword to search (e.g. \"ssl\", \"timeout\", \"jtl\", \"influxdb\")."
    }
  },
  "required": [
    "query"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_jsr223_recipe(query)

Fetch production-ready, performant Groovy scripts for JMeter JSR223 samplers, preprocessors, and postprocessors (e.g., JWT parsing & expiration, HMAC-SHA256 signing, dynamic header injection, nested JSON array extraction, custom CSV failure logging).

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "description": "Filter by keyword or topic (e.g. \"jwt\", \"hmac\", \"header\", \"json\", \"csv\", \"logging\"). If omitted, returns all recipes.",
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢lint_groovy_script(code, elementType, name, parameters, includeJmxElement)

Statically analyze a Groovy script for a JMeter JSR223 element. Flags Thread.sleep, ${var} interpolation, System.out, BeanShell APIs, per-call Random or Pattern.compile, and bindings such as prev, SampleResult, or sampler that the selected element type does not expose; optionally returns ready-to-paste JMX element XML.

Input Schema

{
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200000,
      "description": "Groovy script source."
    },
    "elementType": {
      "description": "(default: JSR223PostProcessor)",
      "type": "string",
      "enum": [
        "JSR223Sampler",
        "JSR223PreProcessor",
        "JSR223PostProcessor",
        "JSR223Assertion",
        "JSR223Timer",
        "JSR223Listener"
      ]
    },
    "name": {
      "description": "testname for the generated JMX element (default: element label).",
      "type": "string",
      "maxLength": 120
    },
    "parameters": {
      "description": "Space-separated parameters available through Parameters and args.",
      "type": "string",
      "maxLength": 2000
    },
    "includeJmxElement": {
      "description": "Also return the JSR223 element XML with compilation caching enabled (default: true).",
      "type": "boolean"
    }
  },
  "required": [
    "code"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢lookup_error_playbook(query, classifierApiKey)

Get immediate root causes, OS/JVM config fixes, and remediation steps for common JMeter exceptions (e.g. "BindException", "SocketTimeoutException", "OutOfMemoryError", "NoHttpResponseException", "SSLHandshakeException", "401/403 after recording"). When keywords miss, unmatched text is sent to classifier.dev for zero-shot semantic matching (public keyless calls are not stored).

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Error message, exception name, or status (e.g. \"bindexception\", \"heap\", \"timeout\", \"401\")."
    },
    "classifierApiKey": {
      "description": "Your own classifier.dev API key for the semantic fallback (anonymous quota is shared); never logged.",
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪triage_errors(errors, minConfidence, tier, classifierApiKey)

Map a run's distinct failure signatures to docs.jmeter.ai error playbooks. Error text is sent to classifier.dev for zero-shot classification (public keyless calls are not stored; obvious secrets are redacted first). Prefer signatures shaped as "sampler | response code | response message".

Input Schema

{
  "type": "object",
  "properties": {
    "errors": {
      "minItems": 1,
      "maxItems": 1000,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000,
            "description": "One distinct failure signature, ideally \"sampler | response code | response message\"."
          },
          "count": {
            "description": "How many samples showed this signature (default: 1).",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "text"
        ]
      },
      "description": "Distinct error signatures to triage."
    },
    "minConfidence": {
      "description": "Confidence threshold for auto-bucketing a signature to a playbook (default: 0.7).",
      "type": "number",
      "minimum": 0,
      "maximum": 1
    },
    "tier": {
      "description": "Classifier tier (default: \"fast\"). \"smart\" re-asks only signatures below minConfidence (slower).",
      "type": "string",
      "enum": [
        "fast",
        "smart"
      ]
    },
    "classifierApiKey": {
      "description": "Your own classifier.dev API key (anonymous quota is shared); never logged.",
      "type": "string"
    }
  },
  "required": [
    "errors"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢lookup_component(name)

Find the dedicated reference page for a JMeter test plan component (e.g. "HTTP Request", "JSON Extractor", "Thread Group") and return its full markdown content with properties, defaults, and related guides.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Component name, exact or partial (e.g. \"HTTP Request\", \"JSON Extractor\", \"CSV Data Set\")."
    }
  },
  "required": [
    "name"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢lookup_function(name)

Find the dedicated reference page for a built-in JMeter function (e.g. "__time", "__Random", "__P") and return its full markdown content with syntax, parameters, and examples.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Function name, with or without leading underscores (e.g. \"__time\", \"time\", \"__RandomString\")."
    }
  },
  "required": [
    "name"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪plan_distributed_testing(controllerIp, workerIps, serverPort, serverRmiLocalPort, clientRmiLocalPort, ...)

Generate Master-Worker RMI port assignments, user.properties, CLI commands, firewall/security group rules, and Docker Compose manifests for distributed load testing.

Input Schema

{
  "type": "object",
  "properties": {
    "controllerIp": {
      "description": "Controller / Master node IP or hostname (default: \"10.0.0.5\").",
      "type": "string"
    },
    "workerIps": {
      "type": "string",
      "description": "Comma or space-separated list of worker / injector IP addresses (e.g. \"10.0.1.10, 10.0.1.11, 10.0.1.12\")."
    },
    "serverPort": {
      "description": "RMI registry port on workers (default: 1099).",
      "type": "integer",
      "minimum": 1024,
      "maximum": 65535
    },
    "serverRmiLocalPort": {
      "description": "Pinned worker engine port (default: 50000).",
      "type": "integer",
      "minimum": 1024,
      "maximum": 65535
    },
    "clientRmiLocalPort": {
      "description": "Pinned controller callback port (default: 60000).",
      "type": "integer",
      "minimum": 1024,
      "maximum": 65535
    },
    "disableSsl": {
      "description": "Disable RMI SSL (default: false). Only for isolated labs.",
      "type": "boolean"
    },
    "mode": {
      "description": "Sample transmission mode (default: \"StrippedBatch\").",
      "type": "string",
      "enum": [
        "StrippedBatch",
        "Statistical",
        "Batch",
        "Standard"
      ]
    },
    "environment": {
      "description": "Target infrastructure environment for firewall/CLI rules (default: \"aws\").",
      "type": "string",
      "enum": [
        "aws",
        "azure",
        "gcp",
        "linux",
        "docker",
        "k8s"
      ]
    }
  },
  "required": [
    "workerIps"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪tune_linux_os(concurrency, ramGb, trafficType, targetDistro, role)

Generate production sysctl.conf, limits.conf, systemd overrides, and Docker/K8s configs tuned for high-concurrency JMeter load testing (fixing ulimit nofile, BindException port exhaustion, somaxconn backlog, and JVM swappiness).

Input Schema

{
  "type": "object",
  "properties": {
    "concurrency": {
      "description": "Target concurrent connections/threads (default: 10000).",
      "type": "integer",
      "minimum": 100,
      "maximum": 500000
    },
    "ramGb": {
      "description": "Host machine RAM in GB for TCP buffer sizing (default: 16).",
      "type": "integer",
      "minimum": 2,
      "maximum": 512
    },
    "trafficType": {
      "description": "Traffic profile (default: \"http_churn\").",
      "type": "string",
      "enum": [
        "http_churn",
        "http_keepalive",
        "streaming_ws_grpc"
      ]
    },
    "targetDistro": {
      "description": "Linux distro or container target (default: \"ubuntu_debian\").",
      "type": "string",
      "enum": [
        "ubuntu_debian",
        "rhel_rocky",
        "amazon_linux",
        "docker_k8s"
      ]
    },
    "role": {
      "description": "Machine role: \"injector\" (JMeter client) or \"target_sut\" (default: \"injector\").",
      "type": "string",
      "enum": [
        "injector",
        "target_sut"
      ]
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢convert_curl_or_har_to_jmx(input, testPlanName, threads, rampUpSeconds, durationSeconds, ...)

Convert one or more cURL commands or HAR (HTTP Archive 1.2) JSON traces into a valid, production-ready Apache JMeter .jmx test plan XML with HTTP Request Defaults, Header Managers, Cookie Managers, timeouts, and assertions. Supports GET, POST, PUT, DELETE, PATCH, and RFC 9838 QUERY methods.

Input Schema

{
  "type": "object",
  "properties": {
    "input": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000000,
      "description": "cURL command string (single, multiline, or batch) or HAR 1.2 JSON text (max 1MB)."
    },
    "testPlanName": {
      "description": "Name of the JMeter Test Plan (default: \"cURL Converted Plan\").",
      "type": "string",
      "maxLength": 200
    },
    "threads": {
      "description": "Thread concurrency / virtual users (default: 1).",
      "type": "integer",
      "minimum": 1,
      "maximum": 50000
    },
    "rampUpSeconds": {
      "description": "Ramp-up time in seconds (default: 1).",
      "type": "integer",
      "minimum": 0,
      "maximum": 3600
    },
    "durationSeconds": {
      "description": "Test duration in seconds (0 = disabled, default: 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "loopCount": {
      "description": "Loop count (-1 for infinite, default: 1).",
      "type": "integer",
      "minimum": -1,
      "maximum": 1000000
    },
    "parameterizeHost": {
      "description": "Extract common host into HTTP Request Defaults and ${BASE_URL} (default: true).",
      "type": "boolean"
    },
    "parameterizeAuth": {
      "description": "Extract Bearer token into ${AUTH_TOKEN} variable (default: true).",
      "type": "boolean"
    },
    "includeAssertions": {
      "description": "Add HTTP 200/201/204 Response Code assertions (default: true).",
      "type": "boolean"
    },
    "includeCookieManager": {
      "description": "Include HTTP Cookie Manager (default: true).",
      "type": "boolean"
    },
    "filterStaticAssets": {
      "description": "Filter out images/css/fonts when parsing HAR (default: true).",
      "type": "boolean"
    }
  },
  "required": [
    "input"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
⚪convert_openapi_to_jmx(input, testPlanName, threads, rampUpSeconds, durationSeconds, ...)

Convert an OpenAPI 3.0/3.1 or Swagger 2.0 document (JSON or YAML) into a JMeter 5.6.3 .jmx test plan: servers become HTTP Request Defaults/${BASE_URL}, path parameters become User Defined Variables, request bodies are sampled from schemas, bearer/basic/apiKey security becomes ${AUTH_TOKEN}/${BASIC_AUTH}/${API_KEY}, with optional method, tag, and deprecated-operation filters.

Input Schema

{
  "type": "object",
  "properties": {
    "input": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000000,
      "description": "OpenAPI 3.x or Swagger 2.0 document as JSON or YAML text (max 1MB)."
    },
    "testPlanName": {
      "description": "Name of the JMeter Test Plan.",
      "type": "string",
      "maxLength": 200
    },
    "threads": {
      "description": "Thread concurrency / virtual users (default: 10).",
      "type": "integer",
      "minimum": 1,
      "maximum": 50000
    },
    "rampUpSeconds": {
      "description": "Ramp-up time in seconds (default: 5).",
      "type": "integer",
      "minimum": 0,
      "maximum": 3600
    },
    "durationSeconds": {
      "description": "Test duration in seconds (0 = disabled, default: 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 86400
    },
    "loopCount": {
      "description": "Loop count (-1 for infinite, default: 1).",
      "type": "integer",
      "minimum": -1,
      "maximum": 1000000
    },
    "parameterizeHost": {
      "description": "Extract the common host into HTTP Request Defaults and ${BASE_URL} (default: true).",
      "type": "boolean"
    },
    "includeAssertions": {
      "description": "Add HTTP 200/201/204 Response Code assertions (default: true).",
      "type": "boolean"
    },
    "includeCookieManager": {
      "description": "Include HTTP Cookie Manager (default: true).",
      "type": "boolean"
    },
    "includeOptionalQueryParams": {
      "description": "Include optional query parameters (default: false).",
      "type": "boolean"
    },
    "useExampleValues": {
      "description": "Substitute example/sample values into path params instead of ${var} variables (default: false).",
      "type": "boolean"
    },
    "includeDeprecated": {
      "description": "Include deprecated operations (default: false).",
      "type": "boolean"
    },
    "methods": {
      "description": "HTTP methods to include (default: GET, POST, PUT, PATCH, DELETE).",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "GET",
          "POST",
          "PUT",
          "PATCH",
          "DELETE",
          "HEAD",
          "OPTIONS",
          "TRACE"
        ]
      }
    },
    "tags": {
      "description": "Only include operations with one of these tags (\"default\" = untagged). Empty = all.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 100
      }
    },
    "serverIndex": {
      "description": "Zero-based index of the OpenAPI server to use (default: 0).",
      "type": "integer",
      "minimum": 0,
      "maximum": 50
    },
    "maxOperations": {
      "description": "Maximum number of operations to convert (default: 500).",
      "type": "integer",
      "minimum": 1,
      "maximum": 500
    }
  },
  "required": [
    "input"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded15 tools
verifiedversion not recorded10 tools
verifiedversion not recorded10 tools