Stresix
Load test your app on a real server from your agent. Get p95, errors and what ran out first.
Should I use this
Quality & Safety
Findings (1)
- LOWin list_github_repos
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"stresix": {
"url": "https://stresix.com/mcp"
}
}
}Remote endpoints
https://stresix.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (14)
🟡start_load_test(target, port, paths, requests, branch, ...)
Load tests the user's app on a real cloud server and returns a run id. The target is a public or connected GitHub repository URL, or a Docker image. Lite is free once per person (500 users, 4 minutes). Standard (2,500 users, 10 minutes) costs 1 credit and Massive (10,000 users, 15 minutes) costs 3. A paid run is only started with confirm_spend set to true, and only after the user has agreed to the price. Without a tier it uses the free Lite run when the account still has it.
Input Schema
{
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "GitHub repository URL (https://github.com/owner/repo) or a Docker image (nginx:1.27, ghcr.io/owner/app:tag)."
},
"port": {
"type": "integer",
"minimum": 1,
"maximum": 65535,
"description": "The port the app listens on inside its container. Read it from the code or use inspect_target. Stresix tries 80, 3000, 5000, 8000 and 8080 when it is left out."
},
"paths": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"description": "GET paths the simulated users rotate through, for example [\"/\", \"/api/products\", \"/search?q=shoes\"]. Pick pages that hit the database. Defaults to [\"/\"]. Use requests instead for other methods, headers or bodies."
},
"requests": {
"type": "array",
"maxItems": 10,
"description": "Full requests the simulated users rotate through, in place of paths. Each one is independent (no multi-step flows). Headers such as Authorization are stored encrypted and wiped after the run. Use a test account token, never a production secret. {{vu}} (the simulated user's number) and {{iteration}} (that user's request count) can go in a path, header value or body and are filled in per request, for example to give each user its own id.",
"items": {
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"GET",
"POST",
"PUT",
"PATCH",
"DELETE",
"HEAD"
],
"description": "Defaults to GET."
},
"path": {
"type": "string",
"description": "Path on the app, starting with /, with any query string."
},
"headers": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Up to 20 headers. Host, Content-Length and a few others are set by Stresix."
},
"body": {
"description": "Request body up to 16 KB: a string, or a JSON object or array (sent as application/json). Not allowed on GET or HEAD."
}
},
"required": [
"path"
],
"additionalProperties": false
}
},
"branch": {
"type": "string",
"description": "Repository branch to build. The default branch when left out."
},
"tier": {
"type": "string",
"enum": [
"lite",
"standard",
"massive"
],
"description": "Run size. Leave it out to use the free Lite run when available."
},
"env": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"description": "Environment variables the app needs to boot, such as NODE_ENV or a test database URL. Stored encrypted and wiped after the run. Never send production secrets."
},
"current_server": {
"type": "object",
"description": "The server the user runs the app on today, if any. The report then says whether that server is enough instead of recommending a size. Can also be set after the run with set_current_server.",
"properties": {
"vcpu": {
"type": "number",
"minimum": 0.25,
"maximum": 256
},
"ram_gb": {
"type": "number",
"minimum": 0.25,
"maximum": 2048
},
"label": {
"type": "string",
"description": "A name for it, like \"Hetzner CX22\" or \"DigitalOcean 2 GB droplet\"."
}
},
"required": [
"vcpu",
"ram_gb"
],
"additionalProperties": false
},
"confirm_spend": {
"type": "boolean",
"description": "Set to true only after the user agreed to spend credits on this run."
}
},
"required": [
"target"
],
"additionalProperties": false
}🟢get_test_status(test_id)
Where a run stands: building, starting servers, running (with live users, requests per second, p95 latency and error rate) or finished.
Input Schema
{
"type": "object",
"properties": {
"test_id": {
"type": "string",
"description": "The run id start_load_test or list_load_tests returned. The latest run when left out."
}
},
"additionalProperties": false
}🟢get_test_report(test_id)
The full report of a finished run: the verdict, users held, requests per second, p95 latency and errors at each load level, what ran out first, CPU, busiest thread and memory on the server and per service, connections to the database and other dependencies, what the responses were, and which server size to pick or whether the user's own server is enough.
Input Schema
{
"type": "object",
"properties": {
"test_id": {
"type": "string",
"description": "The run id start_load_test or list_load_tests returned. The latest run when left out."
}
},
"additionalProperties": false
}🟢get_test_timeline(test_id, points)
How a run moved over time: users, requests per second, p95 latency and error rate, averaged into a fixed number of points. Works while a run is going and after it ends.
Input Schema
{
"type": "object",
"properties": {
"test_id": {
"type": "string",
"description": "The run id start_load_test or list_load_tests returned. The latest run when left out."
},
"points": {
"type": "integer",
"minimum": 5,
"maximum": 120,
"description": "How many points to return. Defaults to 30."
}
},
"additionalProperties": false
}🟢list_load_tests(limit, status)
The account's runs, newest first: id, status, size, target, requests, when it ran and why it failed if it did.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "How many to return. Defaults to 10."
},
"status": {
"type": "string",
"enum": [
"all",
"active",
"finished"
],
"description": "active: waiting or running. finished: completed, failed or stopped. Defaults to all."
}
},
"additionalProperties": false
}🔴stop_load_test(test_id)
Stops a run that is waiting or running and deletes its servers. A run stopped before its servers were up uses no credit. A run stopped while the load is going is not refunded, and its report covers what was measured until then. Ask the user first.
Input Schema
{
"type": "object",
"properties": {
"test_id": {
"type": "string",
"description": "The run to stop."
}
},
"required": [
"test_id"
],
"additionalProperties": false
}🔴delete_load_test(test_id)
Deletes a run and its report and measurements for good. A running run has to be stopped first. Ask the user first.
Input Schema
{
"type": "object",
"properties": {
"test_id": {
"type": "string",
"description": "The run to delete."
}
},
"required": [
"test_id"
],
"additionalProperties": false
}🟡set_current_server(test_id, vcpu, ram_gb, label, recommend)
Tells a run which server the user already hosts the app on, so the report says whether that server is enough, how close to the limit it would be and what to change. Or set recommend to true to go back to a recommended size. The report is recomputed from the stored measurements, no new run needed.
Input Schema
{
"type": "object",
"properties": {
"test_id": {
"type": "string",
"description": "The run id start_load_test or list_load_tests returned. The latest run when left out."
},
"vcpu": {
"type": "number",
"minimum": 0.25,
"maximum": 256,
"description": "vCPU count of the user's server."
},
"ram_gb": {
"type": "number",
"minimum": 0.25,
"maximum": 2048,
"description": "Memory of the user's server in GB."
},
"label": {
"type": "string",
"description": "A name for it, like \"Hetzner CX22\"."
},
"recommend": {
"type": "boolean",
"description": "Set to true to drop the user's server and get a recommended size again."
}
},
"additionalProperties": false
}🟡send_feedback(test_id, helpful, message)
Tells Stresix whether a finished run's report was useful, with an optional note. Only send what the user actually said. Sending again replaces the earlier answer.
Input Schema
{
"type": "object",
"properties": {
"test_id": {
"type": "string",
"description": "The run id start_load_test or list_load_tests returned. The latest run when left out."
},
"helpful": {
"type": "boolean",
"description": "Whether the user found the report useful."
},
"message": {
"type": "string",
"description": "The user's note, up to 2,000 characters."
}
},
"required": [
"helpful"
],
"additionalProperties": false
}🟢inspect_target(target, branch)
Reads a repository before testing it: the port it listens on, the environment variables the code reads, the framework, whether it needs a database, and its branches. For a Docker image it only checks the reference. Use it before start_load_test.
Input Schema
{
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "GitHub repository URL or Docker image."
},
"branch": {
"type": "string",
"description": "Branch to read. The default branch when left out."
}
},
"required": [
"target"
],
"additionalProperties": false
}🟢list_github_repos
The GitHub repositories the user gave Stresix access to, including private ones. Public repositories work without connecting GitHub.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢get_account
The account's credits, whether the free Lite run is still available, whether GitHub is connected, what each run size costs and the credit packs on sale.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}⚪buy_credits(pack)
Makes a checkout link for a credit pack: Starter is 5 credits for $10, Pro is 25 credits for $40. Nothing is charged by this tool. The user opens the link and pays in their browser, and the credits arrive a minute later. Only call it when the user asked to buy credits.
Input Schema
{
"type": "object",
"properties": {
"pack": {
"type": "string",
"enum": [
"starter",
"pro"
],
"description": "starter: 5 credits for $10. pro: 25 credits for $40."
}
},
"required": [
"pack"
],
"additionalProperties": false
}⚪redeem_code(code)
Adds the credits of a promo code to the account. Only use a code the user gave you.
Input Schema
{
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "The promo code."
}
},
"required": [
"code"
],
"additionalProperties": false
}Community
Evidence