Koskamo

JMeter Docs MCP

An MCP server that connects AI agents to Apache JMeter documentation, providing grounded answers with source links for building test plans, troubleshooting runs, and learning best practices without requiring an API key.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

JMeter Docs MCP logo, by QAInsightsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by QAInsights
You need:No API key needed
MCP endpoint (Streamable HTTP)
https://docs.jmeter.ai/api/mcp
Vendor documentation

What its tools do

16 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

16 of 16 have a description · 0 of 16 declare behavior hints · 16 of 16 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Get help building test plans
  • Troubleshoot JMeter runs
  • Learn best practices
  • Connect AI agents to JMeter docs

Source and maintenance

Community listingRegistry 1.4.0
Maintenance checked

Protocol and capabilities

Server
jmeter-docs 1.6.0
MCP protocol negotiated in check
2025-11-25
Tools
16 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

You have access to the Apache JMeter community documentation at https://docs.jmeter.ai and built-in JMeter diagnostic/calculation tools. Use search_jmeter_docs to find documentation pages, and get_jmeter_page to read pages in full. Use convert_curl_or_har_to_jmx to convert one or more cURL commands or HAR JSON traces into valid Apache JMeter .jmx test plan XML (supporting GET, POST, PUT, DELETE, PATCH, and RFC 9838 QUERY methods). Use convert_openapi_to_jmx to turn an OpenAPI 3.x or Swagger 2.0 spec (JSON or YAML) into a JMeter .jmx test plan. Use lint_jmx_snippet to validate JMX test plan snippets against performance best practices and inventory their structure. Use lint_groovy_script to check a JSR223 Groovy script for JMeter-specific pitfalls and unavailable bindings, and to generate the JSR223 element XML. Use calculate_workload_model to compute Little's Law concurrency, pacing, ramp-up, and JVM heap sizing. Use plan_distributed_testing to configure Master-Worker RMI ports, user.properties, firewall rules, and Docker manifests. Use tune_linux_os to generate sysctl.conf, limits.conf, and systemd tuning parameters for high-concurrency injectors. Use lookup_jmeter_property, get_jsr223_recipe, and lookup_error_playbook for precise configuration and troubleshooting guidance. Use triage_errors to batch-map a run's distinct failure signatures (sampler | response code | response message) to error playbooks before reading them with get_jmeter_page. Use lookup_component and lookup_function for the dedicated reference page of a specific test plan component (e.g. "HTTP Request") or built-in function (e.g. "__time"). Use get_correlation_sandbox to fetch practice JMX test plans (CSRF/Cookie, JWT Bearer, ASP.NET ViewState, HTTP 429 Chaos) and live target endpoints. Always cite the docs.jmeter.ai URL you used when answering.

Tools

16 advertised

search_jmeter_docs — Search JMeter documentation
Advertised by the server during the last successful anonymous check.

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.

search_jmeter_docs input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Search query, e.g. \"how to correlate dynamic values\" or \"thread group ramp up\""
    }
  }
}
get_jmeter_page — Read a JMeter documentation page
Advertised by the server during the last successful anonymous check.

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

get_jmeter_page input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "minLength": 1,
      "description": "Page URL or path, e.g. https://docs.jmeter.ai/user-manual/functions/ or user-manual/functions"
    }
  }
}
lint_jmx_snippet — Lint JMX Test Plan Snippet
Advertised by the server during the last successful anonymous check.

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.

lint_jmx_snippet input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "jmxContent"
  ],
  "properties": {
    "jmxContent": {
      "type": "string",
      "maxLength": 1000000,
      "minLength": 1,
      "description": "JMX XML string or test plan snippet to analyze (max 1MB)."
    }
  }
}
calculate_workload_model — Calculate Workload Model & Little's Law Sizing
Advertised by the server during the last successful anonymous check.

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.

calculate_workload_model input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "targetRps",
    "avgResponseTimeMs"
  ],
  "properties": {
    "targetRps": {
      "type": "number",
      "description": "Target throughput in requests / transactions per second (RPS/TPS).",
      "exclusiveMinimum": 0
    },
    "thinkTimeMs": {
      "type": "number",
      "minimum": 0,
      "description": "Think time / user pause between requests in milliseconds (default: 0)."
    },
    "safetyFactor": {
      "type": "number",
      "minimum": 1,
      "description": "Headroom safety buffer multiplier (default: 1.25 = 25% buffer)."
    },
    "avgResponseTimeMs": {
      "type": "number",
      "description": "Expected average response time in milliseconds.",
      "exclusiveMinimum": 0
    },
    "testDurationMinutes": {
      "type": "number",
      "description": "Steady-state test duration in minutes (default: 10).",
      "exclusiveMinimum": 0
    }
  }
}
lookup_jmeter_property — Lookup JMeter Tuning Property
Advertised by the server during the last successful anonymous check.

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

lookup_jmeter_property input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Property name or keyword to search (e.g. \"ssl\", \"timeout\", \"jtl\", \"influxdb\")."
    }
  }
}
get_jsr223_recipe — Get Verified JSR223 Groovy Recipe
Advertised by the server during the last successful anonymous check.

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

get_jsr223_recipe input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "query": {
      "type": "string",
      "description": "Filter by keyword or topic (e.g. \"jwt\", \"hmac\", \"header\", \"json\", \"csv\", \"logging\"). If omitted, returns all recipes."
    }
  }
}
lint_groovy_script — Lint JMeter Groovy (JSR223) Script
Advertised by the server during the last successful anonymous check.

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.

lint_groovy_script input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "code"
  ],
  "properties": {
    "code": {
      "type": "string",
      "maxLength": 200000,
      "minLength": 1,
      "description": "Groovy script source."
    },
    "name": {
      "type": "string",
      "maxLength": 120,
      "description": "testname for the generated JMX element (default: element label)."
    },
    "parameters": {
      "type": "string",
      "maxLength": 2000,
      "description": "Space-separated parameters available through Parameters and args."
    },
    "elementType": {
      "enum": [
        "JSR223Sampler",
        "JSR223PreProcessor",
        "JSR223PostProcessor",
        "JSR223Assertion",
        "JSR223Timer",
        "JSR223Listener"
      ],
      "type": "string",
      "description": "(default: JSR223PostProcessor)"
    },
    "includeJmxElement": {
      "type": "boolean",
      "description": "Also return the JSR223 element XML with compilation caching enabled (default: true)."
    }
  }
}
lookup_error_playbook — Lookup Error & Exception Diagnostic Playbook
Advertised by the server during the last successful anonymous check.

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

lookup_error_playbook input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "description": "Error message, exception name, or status (e.g. \"bindexception\", \"heap\", \"timeout\", \"401\")."
    },
    "classifierApiKey": {
      "type": "string",
      "description": "Your own classifier.dev API key for the semantic fallback (anonymous quota is shared); never logged."
    }
  }
}
triage_errors — Triage a Batch of JMeter Error Signatures
Advertised by the server during the last successful anonymous check.

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

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

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.

lookup_component input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Component name, exact or partial (e.g. \"HTTP Request\", \"JSON Extractor\", \"CSV Data Set\")."
    }
  }
}
lookup_function — Lookup JMeter Function Reference Page
Advertised by the server during the last successful anonymous check.

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.

lookup_function input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "name"
  ],
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Function name, with or without leading underscores (e.g. \"__time\", \"time\", \"__RandomString\")."
    }
  }
}
plan_distributed_testing — Plan Distributed Testing Ports & Firewall Rules
Advertised by the server during the last successful anonymous check.

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

plan_distributed_testing input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "workerIps"
  ],
  "properties": {
    "mode": {
      "enum": [
        "StrippedBatch",
        "Statistical",
        "Batch",
        "Standard"
      ],
      "type": "string",
      "description": "Sample transmission mode (default: \"StrippedBatch\")."
    },
    "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\")."
    },
    "disableSsl": {
      "type": "boolean",
      "description": "Disable RMI SSL (default: false). Only for isolated labs."
    },
    "serverPort": {
      "type": "integer",
      "maximum": 65535,
      "minimum": 1024,
      "description": "RMI registry port on workers (default: 1099)."
    },
    "environment": {
      "enum": [
        "aws",
        "azure",
        "gcp",
        "linux",
        "docker",
        "k8s"
      ],
      "type": "string",
      "description": "Target infrastructure environment for firewall/CLI rules (default: \"aws\")."
    },
    "controllerIp": {
      "type": "string",
      "description": "Controller / Master node IP or hostname (default: \"10.0.0.5\")."
    },
    "clientRmiLocalPort": {
      "type": "integer",
      "maximum": 65535,
      "minimum": 1024,
      "description": "Pinned controller callback port (default: 60000)."
    },
    "serverRmiLocalPort": {
      "type": "integer",
      "maximum": 65535,
      "minimum": 1024,
      "description": "Pinned worker engine port (default: 50000)."
    }
  }
}
tune_linux_os — Linux Kernel & OS Tuning for Load Injectors
Advertised by the server during the last successful anonymous check.

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

tune_linux_os input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "role": {
      "enum": [
        "injector",
        "target_sut"
      ],
      "type": "string",
      "description": "Machine role: \"injector\" (JMeter client) or \"target_sut\" (default: \"injector\")."
    },
    "ramGb": {
      "type": "integer",
      "maximum": 512,
      "minimum": 2,
      "description": "Host machine RAM in GB for TCP buffer sizing (default: 16)."
    },
    "concurrency": {
      "type": "integer",
      "maximum": 500000,
      "minimum": 100,
      "description": "Target concurrent connections/threads (default: 10000)."
    },
    "trafficType": {
      "enum": [
        "http_churn",
        "http_keepalive",
        "streaming_ws_grpc"
      ],
      "type": "string",
      "description": "Traffic profile (default: \"http_churn\")."
    },
    "targetDistro": {
      "enum": [
        "ubuntu_debian",
        "rhel_rocky",
        "amazon_linux",
        "docker_k8s"
      ],
      "type": "string",
      "description": "Linux distro or container target (default: \"ubuntu_debian\")."
    }
  }
}
convert_curl_or_har_to_jmx — Convert cURL or HAR to JMeter JMX Test Plan
Advertised by the server during the last successful anonymous check.

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.

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

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.

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

Generate a ready-to-run Apache JMeter 5.6.3 .jmx practice test plan (either "solved" with Boundary/JSON/Header extractors or "challenge" with broken hardcoded tokens) targeting the live docs.jmeter.ai/api/sandbox endpoints or local localhost:8787 server.

get_correlation_sandbox input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "mode": {
      "enum": [
        "solved",
        "challenge"
      ],
      "type": "string",
      "description": "\"solved\" returns a working correlated .jmx plan; \"challenge\" returns a broken plan with hardcoded recorded tokens for debugging practice. Default: \"solved\"."
    },
    "flowId": {
      "enum": [
        "flow1",
        "flow2",
        "flow3",
        "flow4"
      ],
      "type": "string",
      "description": "Practice flow: \"flow1\" (CSRF + Cookie), \"flow2\" (JWT Bearer + Order chain), \"flow3\" (ASP.NET __VIEWSTATE + Header ticket), or \"flow4\" (HTTP 429 & JSON Assertion chaos). Default: \"flow1\"."
    },
    "target": {
      "enum": [
        "edge",
        "local"
      ],
      "type": "string",
      "description": "\"edge\" targets https://docs.jmeter.ai/api/sandbox (1-thread debug); \"local\" targets http://localhost:8787/api/sandbox (high-RPS). Default: \"edge\"."
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1163 ms
95th percentile latency
1163 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1163 ms · metadata changed · 16 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http jmeter-docs-mcp https://docs.jmeter.ai/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add jmeter-docs-mcp --url https://docs.jmeter.ai/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable jmeter-docs-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "jmeter-docs-mcp": {
      "url": "https://docs.jmeter.ai/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "jmeter-docs-mcp": {
      "type": "streamableHttp",
      "url": "https://docs.jmeter.ai/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start jmeter-docs-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "jmeter-docs-mcp": {
      "type": "http",
      "url": "https://docs.jmeter.ai/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http jmeter-docs-mcp https://docs.jmeter.ai/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://docs.jmeter.ai/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "jmeter-docs-mcp": {
      "serverUrl": "https://docs.jmeter.ai/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like JMeter Docs MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.