loading…
Search for a command to run...
loading…
Integrates Apache JMeter with AI assistants to run and manage load tests through natural language. It enables users to execute test plans, parse results, inspec
Integrates 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.
An MCP (Model Context Protocol) server that integrates Apache JMeter with AI assistants like Claude Code. Run load tests, parse results, inspect test plans, and compare performance — all through natural language.
git clone https://github.com/chung-ta1/jmeter-mcp.git
cd jmeter-mcp
npm install
npm run build
Set the JMETER_HOME environment variable to your JMeter installation path:
export JMETER_HOME=/usr/local/opt/jmeter
Or create a .env file in the project root (see .env.example):
JMETER_HOME=/usr/local/opt/jmeter
There are three ways to register this MCP server with Claude Code:
claude mcp add jmeter -e JMETER_HOME=/usr/local/opt/jmeter -- node /absolute/path/to/jmeter-mcp/dist/index.js
This adds the server to your project-level config (.claude/mcp.json). To add it globally (available in all projects):
claude mcp add --scope user jmeter -e JMETER_HOME=/usr/local/opt/jmeter -- node /absolute/path/to/jmeter-mcp/dist/index.js
Add to ~/.claude.json (global) or .claude/mcp.json (project-level):
{
"mcpServers": {
"jmeter": {
"command": "node",
"args": ["/absolute/path/to/jmeter-mcp/dist/index.js"],
"env": {
"JMETER_HOME": "/usr/local/opt/jmeter"
}
}
}
}
Run the /mcp slash command inside a Claude Code session, then follow the prompts to add a new stdio server.
After adding, restart Claude Code and run:
claude mcp list
You should see jmeter listed with status connected. Then ask Claude things like:
JMETER_HOME=/usr/local/opt/jmeter node dist/index.js
The server communicates over stdio using the MCP protocol.
| Tool | Description |
|---|---|
run_test_plan |
Execute a .jmx test plan in non-GUI mode and return a results summary |
get_test_results |
Parse and summarize a .jtl or .csv results file |
list_test_plans |
Find all .jmx files in a directory (optionally recursive) |
inspect_test_plan |
Parse a .jmx file and return its structure (thread groups, samplers, assertions) |
compare_results |
Compare two result files and show performance metric differences |
Run a test plan with custom parameters:
{
"tool": "run_test_plan",
"arguments": {
"testPlanPath": "/home/user/tests/api-load-test.jmx",
"threads": 100,
"duration": 60,
"rampUp": 10,
"properties": {
"server": "api.example.com",
"port": "8080"
}
}
}
Get detailed test results:
{
"tool": "get_test_results",
"arguments": {
"resultsPath": "/tmp/jmeter-results-1234567890.jtl",
"detailed": true
}
}
Compare two test runs:
{
"tool": "compare_results",
"arguments": {
"baselinePath": "/tmp/baseline-results.jtl",
"currentPath": "/tmp/current-results.jtl"
}
}
| Library | Version | Purpose |
|---|---|---|
| TypeScript | ^5.7 | Language — strict mode, ES2022 target, ESM modules |
| @modelcontextprotocol/sdk | ^1.12 | MCP server SDK — McpServer high-level API with stdio transport |
| Zod | ^3.24 | Schema validation for MCP tool parameters |
| csv-parse | ^5.6 | Parse JMeter .jtl / .csv result files |
| fast-xml-parser | ^4.5 | Parse JMeter .jmx test plan XML files |
| dotenv | ^17.3 | Load environment variables from .env files |
| Vitest | ^4.0 | Test framework (dev dependency) |
npm run dev # Watch mode — recompiles on changes
npm run build # One-time TypeScript compilation
npm test # Run all tests
npx vitest run src/test/services/JMeterService.test.ts # Run a single test file
src/
├── index.ts # Entry point: config → server → stdio transport
├── server.ts # McpServer creation + tool registration wiring
├── config.ts # Environment config loader (JMETER_HOME)
├── types/index.ts # Shared interfaces (JtlRecord, OverallStats, AppConfig)
├── tools/
│ ├── testPlan.ts # run_test_plan, list_test_plans, inspect_test_plan
│ └── results.ts # get_test_results, compare_results
├── services/
│ └── JMeterService.ts # Business logic: CLI execution, JTL/XML parsing
├── utils/
│ └── stats.ts # percentile(), diffPercent() helpers
└── test/
├── config.test.ts
└── services/
└── JMeterService.test.ts
MIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"jmeter-mcp": {
"command": "npx",
"args": []
}
}
}