jmeter-mcp-server
jmeter-mcp-server
Сервер MCP на stdio для создания, сопровождения, запуска и чтения отчётов тест-планов Apache JMeter — без открытия GUI.
Подключите к этому серверу MCP-совместимый клиент (Claude Code, Claude Desktop и т.д.) — и он сможет собирать тест-план элемент за элементом, запускать в фоне настоящий прогон JMeter без GUI и считывать агрегированную статистику по задержкам/ошибкам — всё через типизированные вызовы инструментов, а не через клики по дереву JMeter.
Почему именно MCP-сервер для этого
LLM уже может написать .jmx-файл с нуля — это просто XML. Проблема в том, что
формат .jmx от JMeter — это структура hashTree с множеством хрупких деталей,
в которых легко незаметно ошибиться: точные пары guiclass/testclass для
каждого элемента, имена свойств, которые не всегда совпадают с подписью в GUI
(ThreadGroup.num_threads — это stringProp, а не intProp; типы совпадения
утверждений — это целочисленная битовая маска), и строгое соответствие
родителя и потомка между каждым элементом и его соседним <hashTree>. Ничто из
этого не проверяется автоматически — слегка неверная битовая маска всё равно
даёт валидный, загружаемый XML, который просто тихо делает не то (утверждение,
которое никогда не срабатывает, слушатель без вывода). Заново восстанавливать
всё это по памяти при каждом запросе — значит снова рисковать теми же ошибками.
Этот сервер кодирует это знание ровно один раз — в сериализаторе, проверенном на реальной установке JMeter, — и предоставляет его в виде типизированных инструментов. Конкретные преимущества, которые из этого вытекают:
Корректность за счёт фиксированного проверенного пути кода. Каждый вызов
add_http_samplerпроходит через один и тот же проверенный сериализатор, а не через LLM, который каждый раз заново генерирует XML по памяти с риском отклонения или незаметно неверного свойства.Дёшевые инкрементальные правки. Тест-план хранится в виде небольшого JSON-дерева со стабильными идентификаторами узлов. Добавление ещё одного утверждения — это один вызов инструмента со ссылкой на
parentId, а не чтение и переписывание всего.jmx-файла, чтобы понять, куда вставить изменение. В быстром сравнении бок о бок на плане из 6 элементов JSON-дерево составило ~280 токенов против ~1,580 токенов у эквивалентного.jmx-XML (в котором повторяются парыguiclass/testclassи полный блокsaveConfigдля каждого слушателя) — и этот разрыв только растёт по мере роста плана, потому что правка JSON-дерева стоит один маленький вызов инструмента независимо от того, насколько большим уже стал весь план.Агрегированные результаты, а не сырые сэмплы.
get_execution_reportразбирает вывод JTL и возвращает вычисленную статистику (количество, процент ошибок, среднее/мин/макс/медиана, p90/p95/p99, пропускная способность, KB/s) — а не выгрузку каждой строки сэмплов, чтобы клиент усреднял их вручную.Настоящая асинхронная модель выполнения.
execute_test_planзапускает JMeter в фоне и немедленно возвращаетexecutionId;get_execution_status/get_execution_reportопрашивают его. Длительные нагрузочные тесты ничего не блокируют в ожидании одного запроса/ответа.
Сгенерированный .jmx соответствует тому же формату, который пишет сам JMeter,
так что его в любой момент можно открыть в обычном GUI JMeter, если вы хотите
посмотреть на него визуально или передать тому, кто предпочитает UI.
Related MCP server: JMeter MCP Server
Как представлен тест-план
Каждый план хранится в виде JSON-дерева ({id, type, props, children[]}), а не
в виде XML-текста. Все инструменты авторинга изменяют это дерево, добавляя
дочерний узел под указанный parentId, а в реальный .jmx-файл дерево
сериализуется только в момент выполнения. Именно это делает инкрементальные
правки дешёвыми и хранит все тонкости XML-схемы в одном месте
(src/jmx/serializer.ts), а не размазанными по каждому инструменту.
Инструменты
Авторинг (каждый возвращает id нового узла, используемый как parentId
для того, что вы добавите под ним следующим):
Инструмент | Добавляет |
| Корневой узел |
| Thread Group (виртуальные пользователи) |
| Сэмплер HTTP Request |
| Пост-процессор JSON Extractor |
| HTTP Header Manager |
| Response Assertion |
| Слушатель Aggregate Report |
| Слушатель Summary Report |
Просмотр:
Инструмент | Назначение |
| Список всех планов в рабочей области |
| Полное дерево элементов плана, включая |
Выполнение и отчёты (асинхронно — запуск происходит в фоне):
Инструмент | Назначение |
| Сериализует в |
|
|
| Отправляет |
| Агрегированная статистика (по меткам + общая), полученная из JTL-вывода запуска |
Пример рабочего процесса
create_test_plan → { planId, rootNodeId }
add_thread_group (parentId: rootNodeId) → { nodeId: threadGroupId }
add_http_sampler (parentId: threadGroupId) → { nodeId: samplerId }
add_response_assertion (parentId: samplerId)
add_aggregate_report_listener (parentId: threadGroupId)
execute_test_plan (planId) → { executionId }
get_execution_status (executionId) ← poll until "completed"
get_execution_report (executionId) → aggregated latency/error statsПредварительные требования
Node.js 18+
JMeter, установленный локально, с переменной окружения
JMETER_HOME, указывающей на каталог установки (тот, который содержитbin/jmeter). На macOS через Homebrewbrew install jmeterпомещает его в/opt/homebrew/opt/jmeter/libexec.
Добавление этого сервера в Claude Code
Через npx (рекомендуется — опубликовано в npm)
Клонирование и сборка не требуются; npx загружает и запускает опубликованную
версию на лету:
claude mcp add jmeter \
-e JMETER_HOME=/opt/homebrew/opt/jmeter/libexec \
-- npx -y jmeter-mcp-serverПодставьте путь JMETER_HOME туда, где на вашей машине установлен JMeter. При
желании задайте также JMETER_MCP_WORKSPACE (см. ниже), если хотите хранить
планы и результаты выполнения не в месте по умолчанию.
Область действия по умолчанию — local (только этот каталог проекта). Чтобы
сделать сервер доступным во всех проектах, добавьте -s user:
claude mcp add jmeter -s user \
-e JMETER_HOME=/opt/homebrew/opt/jmeter/libexec \
-- npx -y jmeter-mcp-serverПроверьте, что он зарегистрировался и отвечает:
claude mcp listИз локального клона (разработка)
Если вы работаете с кодом этого репозитория, а не с опубликованным пакетом,
укажите напрямую собранный dist/index.js:
npm install
npm run build
claude mcp add jmeter \
-e JMETER_HOME=/opt/homebrew/opt/jmeter/libexec \
-- node /absolute/path/to/jmeter-mcp-server/dist/index.jsClaude Desktop
Добавьте это в ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"jmeter": {
"command": "npx",
"args": ["-y", "jmeter-mcp-server"],
"env": {
"JMETER_HOME": "/opt/homebrew/opt/jmeter/libexec"
}
}
}
}Примечание: в отличие от приложения, запущенного из терминала, Claude Desktop
не наследует переменные окружения, экспортированные в вашем профиле
оболочки (.zshrc и т.д.), — только действительно общесистемные. Всегда
задавайте JMETER_HOME явно в блоке env выше, а не полагайтесь на то, что он
уже «установлен на вашей машине».
Переменные окружения
Переменная | Обязательная | Назначение |
| Да | Каталог установки JMeter (должен содержать |
| Нет | Где хранятся планы и результаты выполнения. По умолчанию — |
Структура рабочей области
<workspace>/
plans/<planId>/plan.json # JSON tree — source of truth for a plan
executions/<executionId>/
generated.jmx # serialized at execute_test_plan time
aggregate-report.jtl # output of the Aggregate Report listener, if present
summary-report.jtl # output of the Summary Report listener, if present
jmeter.log
meta.json # execution status, pid, timestamps, exit codeОбъём версии v1
Пока не поддерживается (кандидаты на будущий релиз): редактирование/удаление
существующих элементов, импорт .jmx, созданного извне, генерация
HTML-отчёта-дашборда (-e -o), другие типы сэмплеров/утверждений/экстракторов,
CSV Data Set Config, распределённое выполнение.
Лицензия
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseCqualityDmaintenanceA Model Context Protocol server that enables executing and interacting with JMeter tests through MCP-compatible clients like Claude Desktop, Cursor, and Windsurf.2
- FlicenseCqualityDmaintenanceA Model Context Protocol server that enables execution of JMeter performance tests through AI assistants and MCP-compatible clients like Claude, Cursor, and Windsurf.2
- FlicenseAqualityDmaintenanceEnables the execution and analysis of JMeter performance tests through MCP-compatible clients. It provides tools for running tests in non-GUI mode, identifying performance bottlenecks, and generating comprehensive insights and visualizations from result files.6
- FlicenseNot gradedqualityCmaintenanceIntegrates Apache JMeter with AI assistants to run and manage load tests through natural language. It enables users to execute test plans, parse results, inspect test structures, and compare performance metrics across different runs.
Related MCP Connectors
JSON tools MCP.
MEOK MCP Test MCP — golden-file + schema-drift + tool-failure tests for any MCP server. Drop-in
Maven Central MCP — Java/JVM artifact registry
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/juliodelimas/jmeter-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server