reqable-mcp
Click on "Install 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.
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 installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Wanghaibo10/Reqable-Mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server