Reqable MCP Server
# Reqable MCP Server
  
Reqable MCP Server exposes local Reqable capture traffic to MCP clients (Windsurf/Cursor/Claude/Codex).
Default architecture is local-only:
1. Reqable posts HAR(JSON) to `http://127.0.0.1:18765/report`.
2. Optional incremental WebSocket events can be posted to `http://127.0.0.1:18765/ws/events`.
3. `reqable-mcp` normalizes and stores requests/messages in local SQLite.
4. MCP tools query local data only (no cloud relay by default).
Docs: [English](README.md) | [中文](README_CN.md)
## Features
- Local-first, privacy-first ingest path.
- Real-time ingest via Reqable Report Server.
- HAR file import fallback for missed sessions.
- HTTP request query/search/domain stats/API analysis.
- WebSocket session/message parsing for HAR entries carrying message-frame extensions.
- Cross-platform runtime (macOS / Linux / Windows with Python 3.10+).
## Prerequisites
1. Install and open Reqable.
2. Configure Reqable Report Server to post to `http://127.0.0.1:18765/report`.
3. Ensure Node.js (for `npx`) and `uv` (for `uvx`) are available.
## Installation
### Run via npx (recommended)
```bash
npx -y reqable-mcp@latest
```
### Local development
```bash
uv run reqable-mcp
```
## MCP Client Configuration
```json
{
"mcpServers": {
"reqable": {
"command": "npx",
"args": ["-y", "reqable-mcp@latest"]
}
}
}
```
## Reqable Report Server Setup
Use these values in Reqable "Add Report Server":
1. Name: `reqable-mcp-local`
2. Match rule: `*` (or your target domains)
3. Server URL: `http://127.0.0.1:18765/report`
4. Compression: `None` (or keep consistent with your receiver)
After saving, generate traffic and call `ingest_status` to verify incoming payload count.
Important note: `reqable-mcp` still uses HTTP-only ingest transport (no native `ws://` listener), but now supports two HTTP ingest paths: `/report` for HAR/session payload and `/ws/events` for incremental WebSocket events. WebSocket capture works when Reqable payload includes frame data (for example `_webSocketMessages` or event frame objects). Raw entry JSON and raw message JSON are preserved and exposed by WebSocket tools. HAR export/import remains the fallback when live pushes miss frames.
## Available Tools
- `ingest_status`: ingest server state and counters
- `import_har`: import HAR from file path
- `list_requests`: list recent HTTP/WebSocket handshake requests with filters
- `get_request`: fetch request details by ID (`full` includes `raw_entry`)
- `search_requests`: keyword search in HTTP URL/body/raw uploaded entry (`raw` / `raw_entry`)
- `list_websocket_sessions`: list captured WebSocket sessions
- `list_active_websocket_sessions`: list recently active WebSocket sessions by latest captured frames
- `get_websocket_session`: fetch WebSocket session details and messages by ID (including `raw_entry` and message `raw`)
- `tail_websocket_messages`: incremental fetch by `request_id` + `after_seq` cursor
- `search_websocket_messages`: precise WebSocket message search by keyword, direction, type, opcode, close code, domain, and request ID
- `analyze_websocket_session`: summarize directions, message types, JSON shapes, and close events for a session
- `export_websocket_session_raw`: export the raw uploaded WebSocket entry and raw frame list
- `health_report`: ingest status + WebSocket data quality report
- `repair_websocket_messages`: backfill missing fields from raw frames (supports dry-run)
- `get_domains`: domain-level request statistics
- `analyze_api`: infer API shapes for a domain
- `generate_code`: generate sample client code from captured HTTP request
## Environment Variables
| Variable | Description | Default |
|---|---|---|
| `REQABLE_INGEST_HOST` | Report receiver host | `127.0.0.1` |
| `REQABLE_INGEST_PORT` | Report receiver port | `18765` |
| `REQABLE_INGEST_PATH` | Report receiver path | `/report` |
| `REQABLE_WS_EVENTS_PATH` | Incremental WebSocket event receiver path | `/ws/events` |
| `REQABLE_DATA_DIR` | Local data directory | platform app data dir |
| `REQABLE_DB_PATH` | SQLite file path | `${REQABLE_DATA_DIR}/requests.db` |
| `REQABLE_MAX_BODY_SIZE` | Max persisted body bytes per request/message | `102400` |
| `REQABLE_MAX_REPORT_SIZE` | Max accepted report payload bytes | `10485760` |
| `REQABLE_MAX_IMPORT_FILE_SIZE` | Max HAR import file bytes | `104857600` |
| `REQABLE_RETENTION_DAYS` | Local retention window | `7` |
| `REQABLE_INGEST_TOKEN` | Optional local auth token | unset |
## Privacy and Data Retention
- Data stays on local machine in default mode.
- Retention cleanup is applied to local DB records, including WebSocket messages.
- If ingest server is offline, Reqable failed report push is not retried.
## License
MIT
TDQS
Scored across 17 tools
Most tools have distinct purposes targeting specific resources like HTTP requests, WebSocket sessions, or data operations, with clear boundaries. However, some overlap exists between list_websocket_sessions and list_active_websocket_sessions, which could cause confusion in selection without careful reading of descriptions.
Tool names follow a highly consistent snake_case pattern with clear verb_noun structures throughout, such as analyze_api, get_request, list_requests, and search_websocket_messages. There are no deviations in naming conventions, making the set predictable and readable.
With 17 tools, the count is slightly high but reasonable for the server's scope in API and WebSocket analysis, covering ingestion, querying, and data management. It feels comprehensive without being overly bloated, though it borders on the heavy side for typical MCP servers.
The tool set provides complete coverage for the domain of API and WebSocket analysis, including ingestion (import_har, ingest_status), querying (list_requests, search_requests), detailed access (get_request, get_websocket_session), analysis (analyze_api, analyze_websocket_session), and data management (export, repair, tail). No obvious gaps are present, supporting full lifecycle workflows.