The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Artillery MCP listing page.
Richer drop-in MCP server for Artillery 2.x — exposes the full artillery run
and artillery run-fargate flag surface, parses raw text output (artillery-output.txt),
returns every counter/rate/summary Artillery produces (not just http.*), and
optionally adds a config-driven project launcher and counter-grouping for your
custom counters.
The upstream @jch1887/artillery-mcp-server
was a solid start but missed several flags our team needed day-to-day. This package is
a MIT-licensed fork with broader coverage. See Credits.
| Feature | upstream | this package |
|---|---|---|
run_test_from_file flags | path + output only | + --record/--key/--tags/--name/--note/-t/-e/--scenario-name/-v/--overrides/-p/--dotenv/-k/--count/-s |
AWS Fargate (run-fargate) | ❌ | ✅ full flag set |
parse_results counters | http.* only | ALL counters + rates + nested summaries |
Parse raw stdout (artillery-output.txt) | ❌ | ✅ read_artillery_output tool |
| HTML report generation | passes invalid --report flag | ✅ separate artillery report call |
Standalone JSON → HTML (run_report) | ❌ | ✅ |
--dry-run validation | broken (flag doesn't exist in 2.x) | ✅ client-side YAML structural check |
| Opt-in project launcher | ❌ | ✅ run_project_lt (when config present) |
| Opt-in counter grouping | ❌ | ✅ counterBreakdown (when config present) |
init scaffolder | ❌ | ✅ npx @kosiakmd/artillery-mcp init |
Shipped SKILL.md template | ❌ | ✅ agent-oriented guidance |
| Docker image | ❌ | ✅ multi-arch (Docker Hub + GHCR) |
| MCP Registry listing | ❌ | ✅ io.github.kosiakMD/artillery-mcp |
serverVersion accuracy | hardcoded | ✅ read from package.json at runtime |
| Tests | 122 | 163 |
Scaffolds two files (skipped if they already exist, use --force to overwrite):
.artillery-mcp.config.json — starter template with commented fields.ai/skills/artillery-mcp/SKILL.md — agent-oriented guidance (when to call which tool, common patterns, gotchas)After editing the config with your real flows/paths, register the MCP in your agent and restart the session:
Runs out of the box — no config file needed. Works as an MCP server over stdio for Claude Code, Claude Desktop, Cursor, and any MCP-compatible client.
Claude Code / Cursor — register as an MCP server in your client config:
Claude Code CLI:
Prerequisites: Node.js ≥ 20; Artillery CLI on PATH (npm i -g artillery).
Multi-arch image — linux/amd64 and linux/arm64, Artillery CLI preinstalled. ~500 MB (Chromium/Playwright browsers skipped — see below). Published to both Docker Hub and GitHub Container Registry from the same build; identical digests.
Run (mount your project as /workspace):
--init ensures the Node process gets reaped on stdin close. Mount /workspace read-write if you want save_config tools to persist to /workspace/saved-configs/; read-only is fine otherwise (the save-config family will simply return errors when called).
MCP client config (Claude Desktop / Cursor) — point the MCP at docker instead of npx:
Playwright engine? If you use engine: playwright in your Artillery scripts, extend the base image with Chromium:
Image tags:
latest — most recent releasev0.1.1, v0.1, v0 — pinned by semver (patch / minor / major)| Var | Purpose | Default |
|---|---|---|
ARTILLERY_BIN | Path to artillery binary | auto-detected via which artillery |
ARTILLERY_WORKDIR | Working directory for runs | cwd |
ARTILLERY_TIMEOUT_MS | Max duration of a single run | 1800000 (30 min) |
ARTILLERY_MAX_OUTPUT_MB | Cap on captured stdout/stderr | 10 |
ARTILLERY_ALLOW_QUICK | Enable quick_test tool | true |
ARTILLERY_CLOUD_API_KEY | Used when a tool is called with record: true | — |
ARTILLERY_MCP_CONFIG | Absolute path to project config (opt-in) | — |
DEBUG | artillery:mcp:* for verbose logs | — |
Run tests
run_test_from_file — full-flag artillery run wrapper (see flag surface above).run_test_inline — same but takes YAML text, writes to a tmp file.quick_test — artillery quick <url> with rate/count/duration/method/headers/body.run_fargate — artillery run-fargate with --region, --cluster, --cpu, --memory, --launch-type, --spot, --subnet-ids, --security-group-ids, --task-role-name, --task-ephemeral-storage, --container-dns-servers, --max-duration, --packages, --secret, --no-assign-public-ip + all run-shared flags.run_preset_test — smoke / baseline / soak / spike presets against a URL.run_saved_config — re-run a saved config by name.Parse + inspect results
parse_results — reads an Artillery JSON report; returns summary + allCounters + allRates + allSummaries + scenarios + metadata.read_artillery_output — reads a raw Artillery stdout dump (e.g. artillery-output.txt saved from CI), returns rawText (with tail-truncation), summaryBlock, counters, rates, metrics (nested percentiles).run_report — converts an existing JSON results file to HTML via artillery report. Use when you have JSON from CI artifacts and want shareable HTML without re-running.compare_results — diff two Artillery JSON results for regression detection.Saved configs
save_config / list_configs / get_config / delete_config — persistent named Artillery configs.Interactive builder
wizard_start / wizard_step / wizard_finalize — interactive test builder.Meta
list_capabilities — versions of Artillery/Node/this server, configured paths, limits.run_project_lt)Activated when a .artillery-mcp.config.json file is discovered. Gives you
one-liner invocations instead of writing full artillery run ... flag lists.
Discovery precedence:
ARTILLERY_MCP_CONFIG env var (absolute path)ARTILLERY_WORKDIR / cwd looking for .artillery-mcp.config.jsonConfig (.artillery-mcp.config.json):
Call:
Effective command:
Optional fields:
tagTemplates — {flow}, {env}, plus any caller-supplied templateVars (e.g. {round})outputDir — relative to project root; if missing, outputs land at project rootdefaultTags — merged before templatesenvironments — if empty, any environment name is acceptedOverride on the call side: name, note, extraTags, outputJson, reportHtml,
variables, overrides, record: false, validateOnly, extraArgs, templateVars.
counterBreakdown)When you emit custom counters via events.emit('counter', 'shop.step.add_item.happy', 1),
Artillery aggregates them into aggregate.counters. This server returns ALL of
them in allCounters. Add counterGroups to your config to also get a
pre-bucketed counterBreakdown in parse_results and read_artillery_output
responses — ideal for CI pass/fail views and semantic grouping.
Config:
Example response (parse_results):
Rules:
prefix (optional) — counters not starting with this string are ignoredbuckets — ordered; first match winsdefault: true — catches everything that didn't matchWithout counterGroups, the counterBreakdown field is simply absent from responses.
artillery CLI.eval / Function / dynamic imports.package-lock.json (committed).npm --provenance (SLSA attestation).artillery-mcp init scaffolder + shipped SKILL.md agent-guidance templateskills/docker search discoverability)run_report tool (JSON → HTML via artillery report); listed in MCP Official Registry (io.github.kosiakMD/artillery-mcp)list_recent_runs, get_run_details(runUrl), compare_to_baseline(runUrl). Requires reverse-engineering the artilleryio REST API or partnering with Artillery.io..artillery-mcp.config.json through zod with human-readable error messages ("expected 'flows' to be object, got null at line 3"). Fail-fast with pointer to README..artillery-mcp.config.yml using a tiny bundled YAML parser (keeping deps light).kosiakmd/artillery-mcp:latest-playwright with Chromium preinstalled for users with engine: playwright scripts. Separate tag to keep base image small.run_lambda, run_aci for parity with run_fargate.run_project_lt matrix mode — {"matrix": {"flow": ["free","paid"], "env": ["staging","prod"]}} → 4 runs in parallel.counterGroups / defaultTags / environments per flow instead of global..artillery-mcp.config.json.run_report variant — return extracted summary text alongside the HTML path, so AI agents can skip loading the file.read_artillery_output, run_fargate, and full flag surface patches back to @jch1887/artillery-mcp-server as PRs; if merged, this fork becomes a thin config-plugin layer on top.Issues / feature requests / PRs welcome: github.com/kosiakMD/artillery-mcp/issues.
Issues and feature requests welcome: github.com/kosiakMD/artillery-mcp/issues.
Forked from jch1887/artillery-mcp-server (MIT). See NOTICE for the list of additions and modifications.
MIT — see LICENSE. Both the upstream and this fork's copyright notices must be preserved in substantial portions of the software.