Reqly
FreeNot checkedAPI client with an MCP server. Your agent builds collections from your codebase, runs requests, writes e2e flows, and exports them to GitHub Actions CI automati
About
API client with an MCP server. Your agent builds collections from your codebase, runs requests, writes e2e flows, and exports them to GitHub Actions CI automatically. Category: Developer Tools
README
██████╗ ███████╗ ██████╗ ██╗ ██╗ ██╗ ██╔══██╗██╔════╝██╔═══██╗██║ ╚██╗ ██╔╝ ██████╔╝█████╗ ██║ ██║██║ ╚████╔╝ ██╔══██╗██╔══╝ ██║▄▄ ██║██║ ╚██╔╝ ██║ ██║███████╗╚██████╔╝███████╗██║ ╚═╝ ╚═╝╚══════╝ ╚══▀▀═╝ ╚══════╝╚═╝
API testing app built for AI agents
From collections to CI test in one agent session.
plain YAML · local-first · MCP server · CLI & Web UI · auto-capture · flows · REST · GraphQL · gRPC
Install · How it works · MCP Tools · Flows · FAQ · Releases
Your agent reads your codebase, builds the collection, writes the assertions, exports the GitHub Actions workflow, and ships it to CI. You never touch it.
npm install -g getreqly
reqly setup

Works with: Cursor · Claude Code · Gemini CLI · VS Code (Claude extension)
The full zero-human pipeline
/goal Read my Express routes, build a collection with assertions, write an
e2e flow for login → checkout, and export it to CI - don't stop until it's green.
1. "Read my Express routes and build a collection with assertions"
→ agent calls create_collection + create_request for every endpoint
2. "Write an e2e flow for the login → checkout path"
→ agent calls create_flow + add_flow_step, runs it, all green
3. "Export it to CI"
→ agent calls export_flow_ci
→ .github/workflows/checkout-flow.yml written automatically
→ installs Reqly, runs the flow, uploads JUnit results as a build artifact
In Claude Code, /goal keeps the agent working the whole pipeline in one session instead of re-prompting at every step - Reqly's MCP tools are built to be chained that way.
No bru run wiring. No manual Actions YAML. No environment setup. One agent session, tests running in CI forever.
Reqly runs locally as a background service with two interfaces from the same engine:
- MCP server (stdio) - your agent connects once and gets the full toolkit. Zero UI, zero LLM cost on our side.
- Localhost web UI - open
localhost:4242to browse collections, watch your agent work, fire requests manually.
Collections are plain YAML in .reqly/ in your repo. Git-native, human-readable, directly writable by agents.
Table of Contents
- Installation
- How It Works
- MCP Tools
- CLI Runner
- Flows
- AWS SigV4 Auth
- Exporting Collections
- Mock Server
- Capture Inbound Requests
- Collections and Assertions
- Proof
- Why Reqly
- Recently Shipped
- Contributing
- FAQ
- Star History
- Releases
Proof (30 seconds)
Time savings on real developer workflows:
| Task | Manual (Postman/Bruno) | Reqly + Agent | Savings |
|---|---|---|---|
| Scaffold 20 REST endpoints | 45 mins | 2 mins | 95% |
| Write auth & validation tests | 25 mins | 3 mins | 88% |
| Chain Login → Checkout flow | 30 mins | 4 mins | 86% |
| Setup CI Pipeline (GitHub Actions) | 20 mins | 1 min | 95% |
| Total onboarding time | 120 mins | 10 mins | 91% |
Reqly shifts API testing from a tedious manual chore to a rapid, agent-driven workflow. Your agent writes the YAML, constructs the flows, and exports the CI configuration—all without you leaving your editor.
Why Reqly beats Postman, Insomnia, and Bruno for AI-native developers (45 seconds)
Collections are plain YAML in your repo. Every other tool stores collections in a proprietary format or database (Insomnia uses NeDB binary files, Postman locks them behind a cloud account). Reqly's .reqly/ folder travels with your code via git - readable, diffable, committable. AI agents can read and write collection files directly without any tool calls.
Git is your Enterprise RBAC. Stop paying per-user enterprise licenses just to set permissions on an API collection. Because Reqly collections are files in your repo, you automatically inherit the security policies of your Git provider. Use branch protections and CODEOWNERS to restrict who can edit production flows.
Reqly is an MCP server, not an MCP client. Insomnia recently added an MCP client so it can call external tools. Reqly goes further: it is the MCP server. Your AI agent in Cursor or Claude Code connects once and gets a full set of tools to fire requests, chain responses, run collections, and verify assertions - no UI required, no extra configuration. The desktop UI (coming soon) is a shell around the same headless engine - the MCP connection stays alive whether the window is open or closed. Other tools built GUI-first have to extract a headless runtime as an afterthought; Reqly was headless from day one.
Auto-capture, zero manual work. Reqly can capture outbound traffic from your dev server via a proxy (reqly exec npm run dev), inbound traffic via a one-line middleware, and inbound webhooks via a public tunnel - then save everything into collections automatically. No other tool does all three.
No cloud dependency. There is no Reqly cloud. Collections stay in your repo. Secrets stay in ~/.reqly/config.json on your machine. Nothing is sent to Reqly's servers - because there are no Reqly servers. No account required, no telemetry, no sync.
Democratizes testing for PMs & QA. Postman's UI is intimidating for non-developers. With Reqly, non-technical team members can just ask their AI: "Run the checkout flow and tell me if tax is calculated correctly." The AI handles the auth, formatting, and JSON payloads, then explains the response in plain English. No developer hand-holding required.
What an agent session looks like (15 seconds)
1. "Read my routes and build a collection" → agent calls create_collection + create_request for each endpoint
2. "Run the collection and check for failures" → agent calls run_collection, assertions pass/fail
3. "Write an e2e flow for the login → checkout path" → agent calls create_flow + add_flow_step, runs it
Installation (45 seconds)
Reqly runs on macOS, Linux, and Windows. Three ways in:
# 1. On any platform via npm (CLI + MCP server + web UI)
npm install -g getreqly
# 2. On macOS via Homebrew (CLI only)
brew tap RutvikPansare/reqly
brew install reqly
# 3. On macOS via Homebrew (Desktop App + CLI)
brew install --cask reqly
Or download the DMG directly from GitHub Releases - no npm, no Homebrew, no terminal required. The desktop app bundles its own copy of the Reqly server, so it is fully self-contained.
VS Code extension: install reqly.reqly from the VS Code Marketplace (works in Cursor, Windsurf, and every VS Code-compatible editor). It gives you a collection tree in the activity bar, a status bar environment switcher, Reqly: command palette commands, a "▶ Run with Reqly" CodeLens above fetch/axios/got calls in JS/TS, and schema validation with autocomplete for all .reqly/ YAML files. It talks to the same local server, so install Reqly itself first (any of the three ways above).
Connecting your AI agent:
- Desktop app users: on first launch a setup wizard appears ("Connect your AI Agent") with one-click buttons for Claude Desktop, Cursor, Windsurf, and VS Code. Each button writes that agent's MCP config for you - no JSON editing. Reachable again any time from the tray menu ("AI Agent Connections..."). If you have the CLI installed (Homebrew or npm), the wizard points agents at your CLI so
brew upgradekeeps them current; otherwise it points them at the bundled server. - CLI users: run
reqly setup
This configures Cursor, Claude Desktop, Claude Code, Gemini CLI, and Codex in one shot. To configure a specific tool only: reqly setup cursor, reqly setup claude, reqly setup gemini.
Restart your AI tool, then ask it: "list my Reqly collections".
Project directory resolution
Reqly determines which project directory to operate on based on a 4-level priority chain:
- Flag:
--project-dir(highest priority) - Environment Variable: `REQLY_PROJECT_DIR`
- Saved Config: The path set by running `reqly use
` - Current Directory: `process.cwd()`
Setup Methods by Host:
- VS Code-based editors (Cursor, Windsurf): These editors support dynamic macro interpolation. `reqly setup` configures them to pass `--project-dir ${workspaceFolder}` so Reqly dynamically follows whichever project is currently open in the editor window.
- Standalone hosts (Claude Desktop, Gemini CLI, Antigravity): These tools spawn one global MCP server process that is shared across all projects and do not interpolate macros. `reqly setup` omits the flag entirely. For these tools, you must run `reqly use
` inside your project directory to tell the global Reqly process which project to look at.
Try it in 30 seconds
No API, no agent setup needed yet. Run this in any directory:
reqly init
reqly start
Open localhost:4242 - you'll have a working collection against JSONPlaceholder with request chaining, variables, assertions, and a flow already set up. Then connect your agent and ask it to extend it.
(Note: reqly init automatically creates .reqly/ and adds its runtime state files to your .gitignore.)
The fastest way to start with your own API (60 seconds)
Don't capture traffic, don't write YAML by hand - just tell your agent to read your code:
"Read my Express routes and build a Reqly collection for every endpoint"
The agent reads your codebase and calls create_collection + create_request for each route it finds. No traffic capture needed - it already knows your API from the code.
What your agent can do (45 seconds)
Reqly is not an AI - it's an engine for your AI. Connect once, then your agent has the full toolkit.
| Capability | What it means | |
|---|---|---|
| 🗂️ | Build collections | Reads your routes, scaffolds requests, no YAML by hand |
| ⚡ | Fire and assert | Runs requests, checks status/body/latency, returns pass/fail per assertion |
| 🔗 | Chain flows | Multi-step sequences with extract, poll, and conditional branching |
| 📋 | Validate contracts | Point at an OpenAPI spec - every response checked automatically |
| 🎭 | Serve mocks | Fake a backend from saved examples, no live server needed |
| 🕵️ | Capture traffic | Proxy outbound, middleware for inbound, tunnel for webhooks |
| 📤 | Export collections | Generate OpenAPI specs, Postman files, or Markdown documentation |
View all 30+ MCP tools
📂 Workspace and Projects
| Tool | What it does |
|---|---|
get_project |
Returns the current active project directory and how it was resolved |
switch_project |
Switches the active project directory at runtime |
list_workspace_projects |
Lists all project directories in the multi-project workspace |
add_workspace_project |
Adds a project directory to the multi-project workspace |
remove_workspace_project |
Removes a project directory from the workspace |
create_workspace |
Creates a named workspace at ~/.reqly/workspaces/<name>/workspace.yaml |
link_workspace_repo |
Links a local repo into a named workspace under a stable alias |
use_workspace |
Sets the active named workspace (persisted in ~/.reqly/config.json) |
list_workspaces |
Lists all named workspaces and which one is active |
🗂️ Collections and Requests
| Tool | What it does |
|---|---|
list_collections |
Lists all collections and requests in the project |
create_collection |
Scaffolds a new collection |
create_request |
Adds a request. Supports {{variables}}, assertions, pre/post scripts, script files (preScriptFile/postScriptFile), auth, multipart bodies |
run_request |
Fires a request - returns status, body, headers, latency, assertion results, diff, contract violations |
move_request |
Moves a request from one collection to another |
run_collection |
Fires all requests in a collection sequentially |
duplicate_collection |
Duplicates an entire collection |
get_response |
Retrieves the last stored response (truncated) |
get_response_full |
Retrieves the last untruncated response |
export_collection |
Exports as Postman v2.1, OpenAPI 3.0 JSON, or Markdown API Docs |
import_collection |
Imports a Postman v2.1 or Bruno collection |
🌍 Environments and Variables
| Tool | What it does |
|---|---|
set_environment |
Changes the active environment |
create_environment |
Creates a named environment with variables |
duplicate_environment |
Duplicates an existing environment |
set_variable |
Sets a variable on an environment |
get_variables |
Lists variables for an environment (with source tags) |
delete_variable |
Removes a variable |
get_collection_variables |
Lists per-collection variables |
set_collection_variable |
Sets a per-collection variable |
delete_collection_variable |
Deletes a per-collection variable |
set_dotenv_files |
Configures which .env files are auto-loaded |
get_dotenv_files |
Lists the configured dotenv files |
get_secret |
Resolves a vault secret URI (bw://project/secret) and returns a truncated preview, never the full value |
get_secret_status |
Lists vault URIs detected in .env with per-key resolution status |
configure_secret_provider |
Stores provider credentials in ~/.reqly/config.json and re-resolves .env |
🔐 Auth
| Tool | What it does |
|---|---|
get_collection_auth |
Gets the default auth config for a collection |
set_collection_auth |
Sets Bearer / API Key / Basic / OAuth 2.0 / AWS SigV4 (awsv4) auth for all requests |
delete_collection_auth |
Removes collection-level auth |
📋 OpenAPI Contract Validation
| Tool | What it does |
|---|---|
set_collection_spec |
Points a collection at an OpenAPI spec (file path or URL) |
get_collection_spec |
Gets the spec config and load status |
delete_collection_spec |
Removes the spec from a collection |
list_spec_operations |
Lists all operations in the loaded spec |
validate_response |
Re-validates the last response without re-firing |
🔗 Flows
| Tool | What it does |
|---|---|
create_flow |
Creates a new flow |
get_flow |
Gets a flow's config and steps |
list_flows |
Lists all flows |
delete_flow |
Deletes a flow |
add_flow_step |
Appends a step (run / extract / assert / poll / conditional) |
update_flow_step |
Replaces a step in place |
delete_flow_step |
Removes a step |
run_flow |
Executes a flow and returns per-step results |
export_flow_ci |
Generates a GitHub Actions workflow and writes it to .github/workflows/ |
🕵️ Capture and Proxy
| Tool | What it does |
|---|---|
start_proxy |
Auto-captures outbound traffic into a collection |
stop_proxy |
Stops traffic interception |
get_proxy_status |
Reports whether the proxy is running, its port, and target collection |
exec_with_proxy |
Starts the proxy and runs a dev command with it injected |
install_middleware |
Returns the inbound-capture snippet for your framework |
🌐 GraphQL
| Tool | What it does |
|---|---|
introspect_graphql |
Runs full schema introspection against a GraphQL endpoint; returns structured type/field/arg summary; caches schema for the UI |
⚡ gRPC
| Tool | What it does |
|---|---|
list_grpc_services |
Discovers services from a reflection-enabled gRPC server (no .proto needed); returns { services: [{ name }], fileDescriptorCount } |
run_request and create_request both support type: grpc natively. Place proto files in .reqly/protos/. Auth profiles auto-inject into gRPC Metadata.
Recently shipped (30 seconds)
- Markdown Docs Export - generate beautiful markdown API references directly from your collections
- Flows - multi-step automation tests (run, extract, assert, poll, conditional) with data-driven support. Chains REST, GraphQL, and gRPC steps in the same flow.
- OpenAPI contract validation - point a collection at a spec; every response is checked automatically
- Multipart body editor - send
multipart/form-datawith file and text parts - Response diffing - detects what changed between runs: status, latency delta, body diff
- Mock server - serve saved examples as a real HTTP server for frontend dev and agent testing
- Pre/post scripts - per-request sandboxed JS that can read/write env vars before and after the request fires
- AWS Signature V4 auth - compute and inject
Authorization+X-Amz-Datefor REST/GraphQL; presign WebSocket URLs for AppSync, IoT Core, and API Gateway WebSocket APIs. Supports temporary STS credentials (sessionToken). - gRPC support - full BloomRPC-beating gRPC: unary RPCs, server/client/bidirectional streaming, proto-file loading with cross-file import support, server reflection (no .proto needed), auth profiles auto-inject into Metadata, JSON message scaffold auto-generated by
create_request - GraphQL workspace - dedicated editor with Headers tab, full schema introspection (with cache), Docs Explorer sidebar, a Saved Requests browser, operationName multi-op dropdown,
queryFilesupport for external.graphqlfiles, Prettify, Copy as cURL, GraphQL-aware response viewer (data/errors/extensions sections), and real-time subscription streaming via graphql-ws - cURL import - paste any cURL command; fields populate instantly
- TypeScript interface generator - infers a typed TS interface from any JSON response body
- .env integration - zero-config: if
.envexists at the project root it's loaded automatically
Flows (60 seconds)
Flows are multi-step sequences your agent builds once and CI runs forever. Each step chains into the next - extract a value from one response and inject it into the next request automatically.
flowchart LR
A(["▶ run\nFire a request"]) --> B(["⬇ extract\nPull value from response"])
B --> C(["✓ assert\nCheck the response"])
C --> D{"⎇ conditional\nBranch on result"}
D -->|"pass"| E(["▶ run\nNext request"])
D -->|"retry"| F(["↻ poll\nRepeat until condition met"])
F --> E
style A fill:#1e3a5f,stroke:#3b82f6,color:#e2e8f0
style B fill:#1e3a5f,stroke:#3b82f6,color:#e2e8f0
style C fill:#14532d,stroke:#22c55e,color:#e2e8f0
style D fill:#3b1f1f,stroke:#ef4444,color:#e2e8f0
style E fill:#1e3a5f,stroke:#3b82f6,color:#e2e8f0
style F fill:#3b2f0a,stroke:#f59e0b,color:#e2e8f0
Example: login → create post → verify it exists
# .reqly/flows/e2e-post.yaml
steps:
- type: run
request: auth/login
- type: extract
from: response.body.token
into: authToken # now available as {{authToken}}
- type: run
request: posts/create-post
- type: extract
from: response.body.id
into: postId
- type: assert
field: status
operator: eq
value: 201
- type: run
request: posts/get-post # uses {{postId}} in the URL
- type: assert
field: body
path: post.title
operator: eq
value: "Hello world"
Run it:
reqly run-flow "e2e-post"
reqly run-flow "e2e-post" --reporter json
reqly run-flow "e2e-post" --data-row '{"userId":"42"}'
Export to CI in one command:
reqly export-flow "e2e-post" --format github-actions
# Writes .github/workflows/e2e-post.yml - installs Reqly, runs the flow, uploads JUnit results
Agents can do the same via the export_flow_ci MCP tool - no manual YAML writing.
AWS Signature Version 4 (SigV4) Authentication
Reqly has built-in support for signing requests to any AWS API: API Gateway, AppSync, Bedrock, S3, IoT Core, and more. Use auth type awsv4.
REST and GraphQL - Header signing
# Per-request auth in collection YAML
name: invoke-bedrock
method: POST
url: https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-v2/invoke
auth:
type: awsv4
credentials:
accessKey: "{{env.AWS_ACCESS_KEY_ID}}"
secretKey: "{{env.AWS_SECRET_ACCESS_KEY}}"
region: us-east-1
service: bedrock
sessionToken: "{{env.AWS_SESSION_TOKEN}}" # optional - for STS temporary creds
headers:
Content-Type: application/json
body: '{"prompt": "Hello from Reqly"}'
Reqly computes and injects these headers before sending:
Authorization: AWS4-HMAC-SHA256 Credential=AKID/date/region/service/aws4_request, SignedHeaders=..., Signature=...X-Amz-Date: 20260702T163930ZX-Amz-Security-Token: <token>(only whensessionTokenis set)
Set at collection level so every request inherits it - useful for an entire AWS API collection:
"Set collection auth for my-bedrock-api to awsv4 with region us-east-1 and service bedrock"
Your agent calls set_collection_auth with type: "awsv4" and the credential fields. All requests in that collection are signed automatically.
| Credential field | Required | Example |
|---|---|---|
accessKey |
yes | AKIAIOSFODNN7EXAMPLE |
secretKey |
yes | wJalrXUtn... |
region |
yes | us-east-1, eu-west-1 |
service |
yes | execute-api, bedrock, s3, appsync, sts |
sessionToken |
no | STS session token (temporary credentials) |
WebSocket - URL presigning (AppSync, IoT Core)
Browser WebSocket APIs cannot send custom headers. Reqly presigns the connection URL instead - appending X-Amz-Algorithm, X-Amz-Date, X-Amz-Credential, and X-Amz-Signature as query parameters. The wss:// scheme is always preserved.
Via the run_realtime MCP tool:
{
"type": "websocket",
"url": "wss://abc123.appsync-realtime-api.us-east-1.amazonaws.com/graphql",
"awsAuth": {
"accessKey": "AKIAIOSFODNN7EXAMPLE",
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"service": "appsync"
},
"captureTimeout": 5
}
Best practice: use environment variables
Store credentials as environment variables in Reqly - never hardcode them in collection YAML:
# In Reqly UI or via MCP set_environment
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
AWS_SECRET_ACCESS_KEY=wJalrXUtn...
AWS_REGION=us-east-1
AWS_SESSION_TOKEN=FQoGZXIv... # if using temporary creds
Then reference with {{env.AWS_ACCESS_KEY_ID}} in your request auth block. The credentials stay in your environment config - never committed to the YAML collection files in git.
📤 Exporting Collections (30 seconds)
You are never locked into Reqly. Because your collections are plain YAML files, you always own your data. To make migration even easier, Reqly provides built-in, freeform export formats to move your collections into other tools, documentation sites, or API gateways instantly:
- 📮 Postman (
postman): Exports a standard Postman v2.1 JSON file. Perfect for importing directly into Postman, Insomnia, or other HTTP clients. - ⚙️ OpenAPI (
openapi): Generates an OpenAPI 3.0 JSON specification. Ideal for Swagger UI, generating client SDKs, or configuring API gateways. - 📖 Markdown Docs (
docs): Generates a beautiful Markdown (.md) API reference ready to be committed to your repository, wiki, or static site generator.
Via CLI:
reqly export docs my-collection
reqly export docs my-collection --output docs/api/my-collection.md
Via AI Agents:
It's as simple as asking your agent. They can automatically export your APIs by calling the export_collection MCP tool:
"Export my 'users' collection to a Postman file so I can share it with the frontend team."
Capture Inbound Requests (Middleware) (45 seconds)
If your codebase is too complex or undocumented for the AI-writes-collection workflow, install reqly-middleware to capture every request coming into your app automatically:
npm install reqly-middleware
// Express
import { reqlyMiddleware } from 'reqly-middleware'
app.use(reqlyMiddleware())
// Next.js (middleware.ts at project root)
import { reqlyNextMiddleware } from 'reqly-middleware/next'
export default reqlyNextMiddleware()
// Fastify
import { reqlyMiddlewareHook } from 'reqly-middleware'
fastify.addHook('onRequest', reqlyMiddlewareHook())
Restart your dev server and Reqly starts capturing inbound requests into the Captured collection. Local development only - it phones home to localhost:4242 and has no effect in production. Ask your agent to call install_middleware to get the exact snippet for your framework.
How collections work (30 seconds)
Collections live in .reqly/ inside your project directory as human-readable YAML files. They support variables, authentication profiles, and test assertions.
Example request YAML:
name: create-user
method: POST
url: "{{baseUrl}}/api/users"
headers:
Content-Type: application/json
body:
email: [email protected]
assertions:
- field: status
operator: eq
value: 201
- field: body
path: user.id
operator: neq
value: ""
Assertions (45 seconds)
Assertions run automatically after every request execution. Each assertion checks one thing:
| Property | Values | Notes |
|---|---|---|
field |
status | body | latency |
Required. Use field, not type. |
operator |
eq | neq | contains | lt | gt |
Required. |
value |
string, number, or boolean | Required. Expected value. |
path |
dot-notation string | Required when field is body. Path into the JSON body, e.g. user.id or data.items.0.name. |
Common mistake: writing type: "status" instead of field: "status" - this silently produces an assertion that never matches, always failing with "got undefined".
Examples:
assertions:
- field: status # HTTP status code
operator: eq
value: 200
- field: body # JSON body field at path
path: user.active
operator: eq
value: true
- field: latency # response time in ms
operator: lt
value: 2000
CLI Runner (45 seconds)
You can use Reqly in your terminal or CI/CD pipelines to run test suites.
reqly run users
Supports reporter formats and environments:
reqly run users --env prod --reporter json
reqly run users --reporter tap
reqly run users --reporter junit > results.xml
--reporter junit writes a standard JUnit XML <testsuite>/<testcase> document to stdout - redirect it to a file for your CI to pick up. Each assertion on a request becomes one <testcase>; a request with no assertions is one implicit testcase that fails only if its status is >= 500.
Running Flows
reqly run-flow "Login Flow"
reqly run-flow "Login Flow" --reporter json
reqly run-flow "Login Flow" --reporter tap
reqly run-flow "Login Flow" --reporter junit > results.xml
reqly run-flow "Signup Flow" --data-row '{"email":"[email protected]"}'
Exporting flows to CI
reqly export-flow "Login Flow" --format github-actions
Writes .github/workflows/Login Flow.yml (creates the directory if needed) that installs Reqly, starts it, runs the flow with --reporter junit > results.xml, and uploads results.xml as a build artifact on push and pull request. Add a "Start server" step before "Run flow" if the flow hits a local API.
Want your agent to re-check the API on a cadence instead of only on push? In Claude Code:
/schedule every morning at 9am, run reqly run-flow "Login Flow" --reporter junit and tell me if anything broke
Mock server
Serve saved example responses as a real HTTP server so frontend code or agents can make calls against controlled responses without a live backend:
reqly mock <collection> # default port 4243
reqly mock <collection> --port 5000
Workspace Management
You can configure Reqly to load collections from multiple project directories at once. This is perfect for microservices or monorepos where you have multiple related APIs open.
reqly workspace add <absolute_path> # Adds a project to your workspace
reqly workspace remove <absolute_path> # Removes it
reqly workspace list # Lists all configured projects and named workspaces
For microservices teams there is also a named workspace model: a workspace maps stable repo aliases (shared across teammates) to machine-local paths, stored at ~/.reqly/workspaces/<name>/workspace.yaml (never committed to any repo).
reqly workspace create checkout-team # scaffold the workspace
reqly workspace link checkout-team auth /repos/auth-svc # alias "auth" -> local path
reqly workspace link checkout-team payments /repos/pay-svc
reqly workspace use checkout-team # set active workspace
Agents can do the same via the create_workspace, link_workspace_repo, use_workspace, and list_workspaces MCP tools, and the UI has a workspace dropdown above the project list. Aliases are the foundation for cross-repo flows (repo: auth on a flow step - coming next).
On start, Reqly prints a table of all active routes (method, path, example count). Press Ctrl+C to stop.
To select a specific example per request, set the X-Reqly-Example: <name> header. Without it, the first saved example is served.
The mock server also exposes REST routes on the main server (port 4242) for UI and programmatic control:
POST /api/mock/start { collection, port? }
POST /api/mock/stop
GET /api/mock/status
Contributing (60 seconds)
Reqly is an open-source execution engine built for AI agents. We welcome contributions across the stack!
How you can help
- Engine & Protocols: Add new auth types (Digest, NTLM) or enhance the JS script sandbox with more built-in helper libraries (e.g., mock data generation).
- MCP Toolkit: Write new tools in
src/mcp/tools/(e.g., importers for Swagger 2.0 or Insomnia) to give agents more capabilities. - UI & Polish: Enhance the React frontend (
src/ui/) with themes, better syntax highlighting, or UI fixes.
Core Architectural Principle: Tool-First
Every capability must be a tool first. If it can't be called via MCP, it doesn't exist as a feature. The UI is a visual wrapper around the same tools - it never has capabilities the MCP interface lacks. Keep AI logic outside the engine; Reqly is the dumb execution layer for smart agents.
Local Setup
git clone https://github.com/RutvikPansare/Reqly.git
cd Reqly
npm install
npm run dev
Testing Standards
We use Vitest (npm test). Engine logic (src/engine/) and MCP tool contracts (src/mcp/) require strict TDD with 100% coverage. UI interactions are tested flexibly. Before submitting a PR, ensure all tests pass.
FAQ
Do I need an AI agent to use Reqly?
No. The localhost UI at
localhost:4242 works standalone - create collections, fire requests, inspect responses, all without an agent. The MCP interface is additive: when your agent is connected, it gets the same capabilities via tools. You can use both at the same time.
How is this different from Postman or Insomnia?
Three things:
- Collections are YAML files in your repo, not locked in a cloud account or proprietary binary format. They travel with your code via git, your agent can read and write them directly, and you can diff them in a PR.
- Reqly is an MCP server. Your AI agent connects to it and gets a full toolkit - fire requests, run flows, validate contracts - without opening a UI. Postman and Insomnia are UI-first; Reqly is agent-first.
- No cloud dependency, ever. No account required, no sync, no telemetry. Everything runs on your machine.
How is this different from Bruno?
Bruno is the closest comparison - it's also local, file-based, and git-native. The key difference is the agent interface. Bruno has no MCP server; your agent can't call Bruno tools to fire requests or build collections programmatically. Reqly was designed from day one so that an AI agent is the primary user, with the UI as a secondary window into the same engine.
Does Reqly send any data to the cloud?
No. Reqly is a local process. Collections stay in
.reqly/ in your repo. Your API keys stay in ~/.reqly/config.json on your machine. Nothing routes through Reqly's servers, because there are no Reqly servers.
Can I use Reqly without Cursor or Claude Code?
Yes. Any MCP-compatible client works: Cursor, Claude Code, Claude Desktop, Gemini CLI, Codex, or anything that supports the MCP stdio transport. If your agent doesn't support MCP yet, you can still use the CLI (
reqly run, reqly run-flow) and the localhost UI without any agent at all.
macOS says the desktop app "cannot be opened because the developer cannot be verified" - is this safe?
Yes. The Reqly desktop app ships unsigned for now (no Apple Developer account yet) - this is macOS Gatekeeper's standard warning for any unsigned app, not a sign of anything wrong. Right-click the app, choose Open, then Open anyway in the dialog. This is a one-time step per machine. Installing via the Homebrew cask bypasses this warning entirely.
Windows SmartScreen says "Unknown publisher" when I run the installer - is this safe?
Yes. The installer is unsigned for now (no EV certificate yet) - this is SmartScreen's standard warning for any new, low-download installer. Click More info, then Run anyway. The warning disappears automatically once the installer accumulates enough download reputation. Binaries are still signed with Sigstore/cosign for tamper-evidence even without SmartScreen trust.
The desktop window went blank / black. What happened?
The app self-recovers: a crashed renderer reloads automatically, a lost server connection shows a "Starting Reqly..." screen and reconnects the moment the server answers, and a dead server process is respawned by a built-in watchdog. If you ever see a persistent error screen, check
~/.reqly/desktop.log - every crash, failed load, and server restart is logged there with a timestamp. Attach that file when filing an issue.
Does the desktop app need the CLI installed?
No. Since T-233 the desktop app bundles its own copy of the Reqly server and runs it with the app's own runtime - no Node, npm, or Homebrew required. If you do have the CLI installed (Homebrew or npm), the app prefers it automatically (priority: Homebrew CLI, then npm CLI on PATH, then the bundled server), so your agents stay on whatever version
brew upgrade / npm update -g installs. The optional "Install CLI" button in the setup wizard symlinks the bundled server to /usr/local/bin/reqly for terminal use.
My agent is looking for collections in the wrong directory. What do I do?
This happens when your AI tool launches the Reqly process from a different working directory than your project. Fix it one of three ways:
- Cursor / most editors - run
reqly setup cursoragain from inside your project directory. The setup command writes${workspaceFolder}into the MCP config so Cursor passes the right path at launch. - Claude Desktop - run
reqly use /path/to/your/projectto set the active project globally, then restart Claude Desktop. - Manual override - set the
REQLY_PROJECT_DIRenvironment variable on the MCP server entry in your AI tool's config.
Can I use Reqly in CI without an AI agent?
Yes - that's the point of
reqly run and reqly run-flow. Your agent builds and maintains the collection locally; CI just executes it. Use --reporter junit to get JUnit XML output that GitHub Actions, GitLab CI, and Jenkins parse natively into test dashboards.reqly run my-collection --reporter junit > results.xml
Or generate the full GitHub Actions workflow automatically:
reqly export-flow "my-flow" --format github-actions
Does the middleware capture requests in production?
No - by design.
reqly-middleware phones home to localhost:4242 and is a silent no-op if Reqly isn't running. It will never capture traffic in a production environment where Reqly isn't present, and it never buffers or delays your requests (fire-and-forget, errors swallowed).
What auth types does Reqly support?
Bearer token, API Key (header or query param), Basic auth, OAuth 2.0 with PKCE, mTLS (client certificates), and AWS Signature Version 4 for AWS APIs (API Gateway, AppSync, Bedrock, S3, IoT Core). Auth can be set at the collection level (applies to all requests) or overridden per-request. Your agent can configure auth via the
set_collection_auth MCP tool - no manual YAML editing required. For AWS SigV4, pass type: "awsv4" with accessKey, secretKey, region, and service credentials.
Can I import my existing Postman or Bruno collections?
Yes. Reqly imports Postman v2.1 collections and Bruno collections out of the box:
reqly import postman-collection.json
reqly import bruno-collection/
Or via the MCP tool: your agent can call import_collection and pass the file path. Reqly also exports to Postman v2.1 and OpenAPI 3.0 if you need to go the other way.
How do environment variables work?
Reqly has three variable layers, resolved in this order:
- .env files - auto-loaded from your project root (or configured via
set_dotenv_files) - Environment variables - named sets like
dev,staging,prod, stored in.reqly/environments.yaml - Collection variables - scoped to a single collection, useful for values like
baseUrl
Use {{varName}} anywhere in a URL, header, or body. Switch environments with reqly run --env prod or via the UI dropdown.
Does Reqly support GraphQL?
Yes. The UI has a dedicated GraphQL workspace with schema introspection, syntax highlighting, and a variables panel. GraphQL requests are stored in collections the same as REST - your agent can create and run them via the same MCP tools.
Can I run Reqly on a team? How do we share collections?
Collections are plain YAML files in
.reqly/ inside your project repo. Sharing is just git - commit the folder and everyone on the team has the same collections. There's no account, no workspace invite, no cloud sync required. Secrets and API keys are stored in ~/.reqly/config.json locally on each developer's machine and are never committed.
What Node.js version does Reqly require?
Node.js 18 or later. Reqly uses native
fetch, ES modules, and the MCP SDK which all require Node 18+. Check your version with node --version.
Port 4242 is already in use. Can I change it?
Yes. Pass
--port when starting:reqly start --port 4243
Or set it in your MCP config args. The UI will open on whichever port you choose.
How do pre/post scripts work?
Each request can have a
preScript and a postScript - small sandboxed JavaScript snippets that run before and after the request fires. They have access to a reqly object with methods to read and write environment variables:// preScript - set a dynamic header before the request
reqly.setEnvVar('timestamp', Date.now().toString())
// postScript - extract a value from the response into an env var
const token = reqly.response.body.access_token
reqly.setEnvVar('authToken', token)
// You can also use reqly.setVar(key, val) / reqly.getVar(key) to store collection-scoped variables in memory
Scripts run in an isolated context with no filesystem or network access - they can only interact with Reqly's variable store and the response object.
For longer scripts, use preScriptFile / postScriptFile instead - set the value to a path relative to the collection folder (e.g. "scripts/post.js"). Reqly reads the file at run time, so you can edit it without touching the YAML. No JSON escaping required.
// create_request({ postScriptFile: "scripts/post.js", ... })
// then edit .reqly/<collection>/scripts/post.js freely
How do I stop Reqly?
reqly stop # stops the running instance
reqly status # check if an instance is running and which project it's on
reqly app # opens the running instance's UI in your browser
Or press Ctrl+C in the terminal where Reqly is running. Reqly writes a lock file at ~/.reqly/running.json to track the running instance - reqly stop reads this to find and signal the process.
Can I switch projects without restarting?
Yes. If a Reqly instance is already running, starting a new one in a different project directory hot-swaps the active project without restarting the server:
cd /path/to/other-project
reqly start
# "Switched active project to /path/to/other-project"
The new process hands off to the existing instance and exits. The MCP connection stays alive and immediately sees the new project's collections.
Is there a way to test webhooks?
Yes - use the tunnel command to expose your local server to the internet and capture incoming webhook payloads:
reqly exec --tunnel npm run dev
This starts your dev server with a public HTTPS URL. Any requests hitting that URL are proxied to your local server and saved into the Captured collection automatically.
Star History
If Reqly saved you time, a star helps other AI-native developers find it.
Install Reqly in Claude Desktop, Claude Code & Cursor
unyly install reqlyInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add reqly -- npx -y getreqlyFAQ
Is Reqly MCP free?
Yes, Reqly MCP is free — one-click install via Unyly at no cost.
Does Reqly need an API key?
No, Reqly runs without API keys or environment variables.
Is Reqly hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Reqly in Claude Desktop, Claude Code or Cursor?
Open Reqly on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Reqly with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
