Goku

general MCP Server

Goku is an HTTP load testing application written in Rust

Verified
generalgeneral
4 views145 stars6 forksMIT

Why This Matters

Discovered via github-topic:mcp-server and last synced 4mo ago.

Verified
Source
github-topic:mcp-server
Stars
145
Last synced
4mo ago
Install
Check source

Install

Install instructions not detected yet

Check the source repository for the latest setup steps.

View source instructions
13
Tools
0
Resources
0
Prompts
Standard I/O
Transport

Available Tools (13)

Parameter

Type

http2

boolean

target

string

ramp_up

number

body

string

json

csv> Output format [default: text] --output-file <PATH> Write results to file instead of stdout --results-log <PATH> Write per-request CSV log (timestamp, status, latency) --live-stats <seconds> Print live stats every N seconds during the test --insecure Accept invalid/self-signed TLS certificates --auth-bearer <TOKEN> Set Authorization: Bearer <TOKEN> header --auth-basic <USER:PASS> Set Authorization: Basic <base64> header --pool-idle-timeout <seconds> Connection pool idle timeout [default: 90] --disable-keepalive Disable HTTP keep-alive / connection reuse -h, --help Print help -V, --version Print version Subcommands: compare <BASELINE> <CANDIDATE> Compare two JSON result files and show a diff table ``` --- ### Flag reference #### `--target` `-t` Specifies the HTTP method and URL. Defaults to `GET` if no method is provided. ``` goku --target "GET http://localhost:3000/" goku --target "POST http://localhost:3000/api" goku --target http://localhost:3000 # implicit GET ``` #### `--request-body` `-r` Optional Path to a file whose contents will be sent as the request body. #### `--clients` `-c` Number of concurrent workers. Defaults to `1`. #### `--iterations` `-i` Total number of requests to perform across all workers. Defaults to `1`. Cannot be used together with `--duration`. #### `--duration` `-d` Run the test for a fixed number of seconds instead of a fixed request count. #### `--headers` Optional Add one or more request headers. Repeatable. Format: `Name:Value`. ``` goku --headers Content-Type:application/json --headers X-Api-Key:secret ... ``` #### `--http2` Optional Force HTTP/2 prior knowledge (skips HTTP/1.1 upgrade negotiation). #### `--ramp-up` Optional Spread the start of workers over N seconds to simulate a gradual traffic spike. #### `--rps` Optional Limit the total requests per second across all clients. Useful for constant-rate load profiles (similar to Vegeta). ``` goku -c 10 -i 10000 --rps 200 --target http://localhost:3000 ``` #### `--output` Optional Output format. Valid values: `text` (default), `json`, `csv`. #### `--output-file` Optional Write results to a file instead of stdout. Works with any `--output` format. ``` goku -c 50 -i 1000 --output json --output-file results.json --target http://localhost:3000 ``` #### `--results-log` Optional Write a per-request CSV log with columns `timestamp_ms,num_client,execution,status,latency_ms`. ``` goku -c 50 -i 1000 --results-log requests.csv --target http://localhost:3000 ``` #### `--live-stats` Optional Print partial metrics (requests, RPS, p50, p95) to stderr every N seconds while the test runs. ``` goku -c 50 --duration 60 --live-stats 5 --target http://localhost:3000 [live] requests=1250 rps=250.0 p50=45ms p95=120ms ``` #### `--insecure` Optional Accept invalid or self-signed TLS certificates. **Off by default.** #### `--auth-bearer` Optional Inject an `Authorization: Bearer <TOKEN>` header automatically. ``` goku --auth-bearer "eyJhbGci..." --target http://api.example.com ``` #### `--auth-basic` Optional Inject an `Authorization: Basic <base64>` header from `user:password` credentials. ``` goku --auth-basic "admin:secret" --target http://api.example.com ``` #### `--pool-idle-timeout` Optional Idle timeout for pooled connections in seconds. Defaults to `90`. #### `--disable-keepalive` Optional Disable HTTP keep-alive and connection reuse entirely. #### `--scenario` Optional Path to a YAML scenario file. When used, all other flags (except `--output`) are ignored and settings are read from the file. #### `compare` Subcommand Compare two benchmark JSON result files and show a colored diff table: ``` goku compare before.json after.json ``` --- ### Scenario file format ```yaml target: POST http://localhost:3000/ clients: 50 requests: 1000 duration: 60 # alternative to requests http2: true ramp_up: 5 rps: 500 # optional rate limit output: json insecure: false live_stats: 10 # print live stats every 10s pool_idle_timeout: 30 disable_keepalive: false headers: - key: "Content-Type" value: "application/json" - key: "X-Api-Key" value: "secret" body: '{"firstName": "Terry", "lastName": "Medhurst", "age": 50}' # Optional: built-in authentication auth: type: bearer token: "my-token" # Optional: write results to a file output_file: results.json results_log: requests.csv ``` #### Multi-step scenarios Run multiple endpoints sequentially per worker: ```yaml clients: 20 duration: 60 steps: - target: "GET http://api.example.com/users" - target: "POST http://api.example.com/orders" body: '{"item": "widget", "qty": 1}' headers: - key: "Content-Type" value: "application/json" - target: "GET http://api.example.com/orders/latest" ``` Each worker executes all steps in order, repeating the sequence for the duration of the test. #### Variable templating Use dynamic placeholders in URLs and bodies:

clients

number

timeout_ms

number

requests

number

duration_secs

number

rps

number

headers

string[]

insecure

boolean