reqable-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@reqable-mcplist the last 5 requests to api.github.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
What it does
Reqable is a native macOS HTTP/HTTPS debugging proxy. Every request it captures lands in a local ObjectBox/LMDB database. reqable-mcp is a read-only Model Context Protocol server that hands that traffic to Claude Code so you can ask the AI things like:
"List the last 10 requests Chrome sent to
api.target.com. Tell me which fields are dynamic per request โ those are likely the encryption signature.""Wait for the next POST to
/login, then decode the JWT in the response and show its claims.""Diff request
0e65fcea-...andf06fdfd2-...to figure out what changed in the auth flow."
Reqable keeps doing what Reqable does best (mitm, GUI, breakpoints, mocks). This project just adds an AI-readable view on top of its existing data โ no replacement, no overlap.
No second proxy layer while in use. Reqable is already your system proxy when capturing. Stacking another proxy (Clash, Surge, SwitchyOmegaโฆ) on top creates a request loop that will pollute capture data and may deadlock. The daemon enforces this in three places โ see Proxy loop guard below.
Related MCP server: Reqable Capture Reader MCP Server
Features
๐ช Zero-touch on Reqable โ no config files modified, no scripts enabled, no Pro required (for the MVP feature set).
๐ Reads existing captures โ every request Reqable has already recorded is queryable, including before this tool was installed.
๐ Live updates โ a 250 ms LMDB poller streams new captures into a local SQLite cache as Reqable writes them.
๐งฐ 13 MCP tools โ query, search, wait, diff, decode, transform; full list below.
๐ก๏ธ Proxy-loop hardened โ env scrub +
scutil --proxydetection + zero HTTP-client imports anywhere in the codebase.โก Pure-Python, single process โ Claude Code spawns it, Claude Code disconnects, it goes away. No launchd, no daemon socket, no orphan state.
๐ Self-describing schema โ ObjectBox entity layout is parsed straight out of LMDB metadata; no
.fbsfiles shipped, no version pinning.
Quick start
git clone https://github.com/Wanghaibo10/Reqable-Mcp.git
cd Reqable-Mcp
./install.sh
# restart Claude Code, then in any chat:
# "Use list_recent to show me the 5 newest captures."Sanity-check from the shell at any time:
.venv/bin/reqable-mcp statusInstallation
Requirements
macOS (only platform Reqable supports today)
Python โฅ 3.10 โ
brew install python@3.13if you need itReqable installed and used at least once
Claude Code (the agent that talks to MCP servers)
One-line install
./install.shWhat it does, in order:
Picks the newest Python โฅ 3.10 on
$PATHCreates
.venv/and installs the package in editable modeCreates
~/.reqable-mcp/with0700permissions (cache, logs)Adds the server entry to
~/.claude/mcp.json
What it does not do:
Touch any file under
~/Library/Application Support/com.reqable.macosx/Install a launchd plist or any background service
Require root or
sudo
Manual install
python3.13 -m venv .venv
.venv/bin/pip install -e .
mkdir -m 700 -p ~/.reqable-mcpThen add this entry to ~/.claude/mcp.json (create the file if missing):
{
"mcpServers": {
"reqable": {
"command": "/absolute/path/to/.venv/bin/reqable-mcp",
"args": ["serve"]
}
}
}Restart Claude Code. /mcp should list reqable as connected.
Uninstall
./uninstall.shRemoves only ~/.reqable-mcp/ and the reqable entry in ~/.claude/mcp.json. Reqable's own data and configuration are untouched.
Available tools
Tool | Tier | What it does |
| query | Most recent captures, filterable by |
| query | One capture in full โ headers + body (body fetched on demand). |
| query | URL substring or regex search. |
| query | Full-text search across request/response body content. |
| query | Render a capture as a runnable |
| query | Recently captured apps (Chrome / Safari / native binaries). |
| query | Host / method / status distribution over a window. |
| query | Field-level diff between two captures (metadata + headers). |
| sync | Block until the next matching capture appears (or until timeout). |
| reverse | Detect fields that vary request-to-request โ likely tokens / signatures. |
| reverse | Decode a JWT, or extract one from a captured request's headers. |
| reverse | List Authorization / Cookie / |
| meta | Daemon + LMDB schema + sync counters (also a CLI command). |
Each tool's docstring is what Claude Code shows when it lists tools โ keep that in mind if you hack on them.
Usage examples
Once installed, just talk to Claude Code. Every interaction below is what an actual conversation looks like โ Claude calls the tool itself based on intent.
Watch what your browser is doing
You: What URLs has Chrome hit in the last 5 minutes? Group by host.
Claude (uses
list_apps_seenthenlist_recentfiltered by app): In the last 5 min Chrome made 168 requests across these hosts:www.vipdlt.com(36),outlook.live.com(23),s.c-ctrip.com(14)โฆ
Find the encryption parameter
You: I'm reverse-engineering
target-api.com. Which request fields look like they're freshly generated each call?Claude (uses
find_dynamic_fields(host="target-api.com")): Across 20 sampled requests these vary on every call โ likely signatures / nonces:
header:x-bm-sensor-data(long base64)
query:_t(millisecond timestamps)
body.requestId(UUIDs)Stable across all 20:
header:host,header:user-agent,query:appid.
Wait for the user, then analyze
You: I'm about to click "checkout" โ wait for the order POST and tell me what auth headers it carries.
Claude (uses
wait_for(host="api.shop.com", method="POST", path_pattern="/orders", timeout_seconds=120)thenextract_auth): Got it โ captureb51c72ac-โฆ. The request carriedAuthorization: Bearer eyJhbGciOiJIUzโฆ, plus four cookies:session_id,csrf,device_fp,cart_token. The Bearer is a JWT โ decoded payload hassub: 4892731,expin 14 minutes.
Reproduce a request from the shell
You: Give me a curl that reproduces the latest call to
/api/v2/quote.Claude (uses
search_url("/api/v2/quote", limit=1)โto_curl):curl --noproxy '*' -X POST \ -H 'host: api.example.com' \ -H 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6Ikpโฆ' \ -H 'content-type: application/json' \ --data-raw '{"hotelId":12345,"checkin":"2026-05-01"}' \ 'https://api.example.com/api/v2/quote'
How it works
[browser / app]
โ
โผ
[Reqable mitm proxy] (Reqable.app โ unchanged)
โ
โโโโถ [box/data.mdb] โโโ LMDB poller (250 ms, idle backoff)
โ (ObjectBox: metadata)
โ
โโโโถ [capture/{conn}-{sess}- โโโ Body source (read on demand)
{req_raw|res-raw|res-extract}-body.reqable]
โโโโโโโโโโโโโโโโ reqable-mcp serve (single process) โโโโโโโโโโโโโโโโ
โ proxy_guard env scrub + scutil --proxy detection โ
โ LmdbSource FlatBuffers parse, base64+gzip+json decode โ
โ BodySource capture/ file lookup by (conn_ts, conn_id, sid)โ
โ Database SQLite WAL + FTS5 โ metadata index only โ
โ WaitQueue threading.Event broadcast for wait_for โ
โ FastMCP stdio JSON-RPC, 13 tools registered โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ stdio
โผ
[Claude Code]Key design choices (see .spec/reqable-mcp/spec.md for full rationale):
Truth lives in Reqable. Our SQLite is a queryable cache; bodies are never copied โ they stay in
capture/*.reqable.Schema is self-describing. ObjectBox encodes its entity layout into the LMDB. We parse that, so Reqable adding fields doesn't break us.
Single process. Claude Code launches
reqable-mcp serve, the daemon lives only as long as that stdio session. Cold-start โ 250 ms.No HTTP clients anywhere. A test in CI greps the source tree to keep
requests/urllib3/aiohttp/httpxout โ they'd inherit env-driven proxy config and break the loop guard.
Proxy loop guard
Reqable as system proxy is fine.Any second proxy on top is not.
The daemon enforces this on three layers:
Layer | Mechanism |
L1 โ process env |
|
L2 โ system proxy detection |
|
L3 โ code review | The codebase contains zero imports of |
Configuration
Environment variables
Variable | Default | Effect |
|
| When |
Paths
Path | Purpose |
| SQLite metadata index (WAL mode). Safe to delete; rebuilt on next run. |
| Daemon stderr (verbosity controlled by |
| Future use; currently unused. |
| Reqable LMDB. Read-only. |
| Reqable body files. Read-only. |
CLI commands
reqable-mcp serve # MCP stdio server (Claude Code spawns this)
reqable-mcp status # Daemon snapshot as JSON, then exit
reqable-mcp install-help # Print MCP registration JSON
reqable-mcp --version
reqable-mcp --helpCompatibility
Tested | |
macOS | 14, 15 |
Reqable | 3.0.40 (April 2026) |
Python | 3.10 / 3.11 / 3.12 / 3.13 |
MCP SDK | 1.27.0 |
ObjectBox schema is parsed at runtime, so additive changes (new fields) are tolerated automatically. Breaking changes (renamed fields, new dbData envelope) require updating the projection in lmdb_source.py. The decoder is fail-safe: any individual record that won't decode is logged and skipped, never crashes the daemon.
This project does not support mitmproxy / Charles / Proxyman โ those use different storage formats and would each need their own source module.
Development
.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest # 111 tests; integration ones skip if no Reqable LMDB
.venv/bin/ruff check src/ tests/
.venv/bin/mypy src/The repository layout:
.
โโโ .spec/reqable-mcp/ # Specification: read this before changing things
โ โโโ spec.md # Requirements + design decisions + data model
โ โโโ tasks.md # Module-by-module task plan
โ โโโ checklist.md # Acceptance checklist
โโโ src/reqable_mcp/
โ โโโ proxy_guard.py # L1+L2 of the proxy guard
โ โโโ paths.py # Filesystem path resolution
โ โโโ db.py + schema.sql # SQLite cache layer
โ โโโ wait_queue.py # Broadcast wait queue (threading.Event)
โ โโโ daemon.py # Component composition
โ โโโ mcp_server.py # FastMCP stdio entry
โ โโโ __main__.py # `reqable-mcp` CLI dispatch
โ โโโ sources/
โ โ โโโ flatbuffers_reader.py # No-schema FB parser (stdlib only)
โ โ โโโ objectbox_meta.py # ObjectBox entity introspection
โ โ โโโ lmdb_source.py # 250 ms poller + decoder
โ โ โโโ body_source.py # capture/ file reader
โ โโโ tools/
โ โโโ query.py # 8 query tools
โ โโโ wait.py # wait_for
โ โโโ analysis.py # JWT / dynamic-fields / auth extraction
โโโ tests/ # 111 tests (unit + integration)
โโโ install.sh / uninstall.sh
โโโ pyproject.tomlIntegration tests use a real_lmdb_required fixture that resolves to your local Reqable LMDB if one exists; otherwise they skip cleanly. Pure-logic tests have no such requirement.
Limitations
macOS only. Reqable is macOS-only at the time of writing.
Body sometimes missing. Reqable doesn't keep every body forever โ
capture/files can be purged by Reqable. The tools surfacebody_status: "unavailable"in that case.CONNECT tunnels. TLS-handshake-only entries (no decrypted body) come through with
method=CONNECTand limited metadata.No write-back. This is a read-only view. Tagging requests, mocking, modifying โ that's Phase 2.
Roadmap
The MVP covers query, search, wait, and analysis. Two future phases extend into write-back territory:
Phase 2 โ UI annotations + traffic modification.
tag_pattern/comment_requestto highlight captures in Reqable's UI, plusmock_response/block/replace_body. Requires Reqable Pro (the script feature) and writing toconfig/capture_config'sscriptConfig. Entry condition: a week of MVP daily-use without daemon crashes, plus three concrete write-back use cases.Phase 3 โ Export + replay.
dump_body,export_har,replay_request(uid, modifications).
Acknowledgments
Reqable โ the actual hard work
Anthropic โ Model Context Protocol and Claude Code
ObjectBox โ for keeping their on-disk layout legible enough that we never had to ship an
.fbsfile
License
reqable-mcp ๆ Reqable ๆๅฐ็ HTTP/HTTPS ๆต้,้่ฟ Model Context Protocol ๅช่ฏปๅฐๆด้ฒ็ป Claude Codeใ
โ ้ถไพตๅ ฅ(ไธๆน Reqable ไปปไฝๆไปถใๆ ้ Pro)
โ 13 ไธชๅทฅๅ ท(ๆฅ่ฏข / ๆ็ดข / ็ญๅพ / ้ๅ่พ ๅฉ)
โ ้ฒไปฃ็ๅ็ฏ(่ฟ็จ็บง ENV scrub + ็ณป็ปไปฃ็ๆฃๆต + ไปฃ็ ๅฑ้ข็ฆ HTTP ๅฎขๆท็ซฏ)
โ ๅ่ฟ็จ(Claude Code ๅฏๅจๅฎ,ๅ ณ้ญๅฎ,ไป ๆญค่ๅทฒ)
ๅฎ่ฃ
: ./install.sh,็ถๅ้ๅฏ Claude Codeใ
ๅผบ็บฆๆ: Reqable ๆๅ ๆถๆฌ่บซๅฐฑๆฏ็ณป็ปไปฃ็,ๆไปฅไธ่ฆๅๅ ็ฌฌไบๅฑไปฃ็(Clash / Surge ็ญ),ๅฆๅไผๅฝขๆๅ็ฏใ
่ฏฆ็ปไธญๆ็่ฎพ่ฎกๆๆกฃ่ง .spec/reqable-mcp/spec.md(้ๆฑ + ๆถๆ + ๆฐๆฎๆจกๅ + ๅณ็ญ่ฟฝๆบฏ)ใ
This server cannot be deployed
Maintenance
Related MCP Connectors
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client โ Claude, ChatGPT, Cursor, Cline, Windsurf.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
AI-native mock API server with MCP. Create REST/SOAP mocks from Claude, Cursor, or Windsurf.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Related MCP Servers
- AlicenseBqualityCmaintenanceExposes local Reqable network capture traffic to MCP clients for real-time monitoring and analysis of HTTP requests. It enables developers to query, search, and generate code from captured traffic stored locally within a private SQLite database.1748 PyPI238MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to query, filter, and analyze local HTTP capture records and REST API test data from the Reqable tool. It provides read-only access to inspect request/response details, headers, and statistics through natural language.26-
- AlicenseNot gradedqualityDmaintenanceGives Claude Desktop read-only access to your WhatsApp chats and message history via a local MCP server.9 npm3MIT
- FlicenseAqualityDmaintenanceA read-only MCP server that exposes your iMessage data to Claude Code and Claude Desktop, with automatic contact name resolution.3-