Documentation
README
Vibe Hacking
A Caido MCP plugin that exposes a clean, safe, and well‑documented tool surface for agents. It standardizes tool schemas, descriptions, and behaviors across requests, replay, filters, scopes, tamper rules, and WebSocket history.
Highlights
- MCP‑native: exposes an MCP server over Streamable HTTP inside Caido.
- Tool governance: group tools into safe/unsafe buckets and control them with
auto,confirm, ordisabledmodes. - Clear UX: user‑friendly tool names in the UI (no SDK internals).
- History-first output: request and WebSocket tools use stable list/get envelopes, Caido-native filters, field projection, and bounded body serialization.

Install
- Build the plugin in this repo.
- Load it in Caido as a local plugin.
If you already have a dev flow, just build and load as usual.
Compatibility
- Caido: v0.55.1+
Usage
- Open the plugin page in Caido.
- Use the Tools section to set each group to
auto,confirm, ordisabled. - Call tools from your agent and rely on consistent JSON outputs.
API Control
The plugin exposes a localhost-only control endpoint at http://127.0.0.1:<port>/control.
When MCP also listens on a local host, both endpoints share one server. When MCP listens on
another interface, control stays local on the same port.
curl -sS -X POST "$CONTROL_URL" \
-H "content-type: application/json" \
-d '{"method":"setMcpServerEnabled","params":{"enabled":true}}'
Control requests are accepted only when the TCP peer is loopback, for example 127.0.0.1
or ::1. If MCP is bound to 0.0.0.0, the control route is still served by that listener,
but non-loopback peers receive 403.
Supported methods: getMcpServerSettings, setMcpServerEnabled,
updateMcpServerConfig, getToolGroupPermissionModes, setToolGroupPermissionMode,
and setAllToolGroupPermissionModes.
Tooling Notes
- Some tools accept arrays even when the name is singular — this is intentional to support batch operations while keeping UI labels simple.
- Broad history discovery should start with
list_requests/list_websocket_messagesand tightfields; exact follow-up should useget_requests_by_ids/get_websocket_messages_by_ids. list_requestsuses native Caido cursor pagination; feedpage_info.end_cursor/start_cursorback ascursor.list_requests.filteris a raw HTTPQL string for method, host, status, port, time, path, raw, and row constraints.- HTTP body output uses
{ encoding, size, text|base64, omitted_reason }. Raw request/response bytes are returned only when requested throughfields. list_requests.serialization.include_body=falseby default for broad discovery; set it totrueor request body/raw paths explicitly throughfields.- Sitemap tools expose Caido's deduplicated Sitemap tree; use
list_sitemap_roots/list_sitemap_descendantsfor tree discovery andlist_sitemap_entry_requestsfor cursor-paginated requests attached to one entry. - Sitemap entry lists use offset pagination and return
has_more/next_offset; they do not expose unusable GraphQL cursors. - Sitemap entry lists use
request_limit=0by default, which returns request counts without samples; setrequest_limit>0when projectingrequests.items.*. - Nested Sitemap
requestsinclude onlycountand optional sampleditems; uselist_sitemap_entry_requestsfor request pagination cursors. list_sitemap_entry_requestsreturns concrete HTTP history-shaped items and supports the sameserialization,regex_excerpt,fields, andexclude_fieldscontrols aslist_requests.fieldsandexclude_fieldsproject item payloads while preserving envelopes such aspage_info,items,requested,found, andresults.
Core Tool Catalog
Request history:
list_requestsget_requests_by_idsmatch_requestssend_requestscheck_requests_scopesummarize_request_cookiessummarize_request_auth_headers
WebSocket/SSE:
list_websocket_streamsget_websocket_streams_by_idslist_websocket_messagesget_websocket_messages_by_idsget_websocket_message_edits_by_ids
Sitemap:
list_sitemap_rootslist_sitemap_descendantsget_sitemap_entries_by_idslist_sitemap_entry_requests
Environment:
list_environmentsget_environmentget_environment_contextcreate_environmentupdate_environmentdelete_environmentselect_environmentget_environment_variablelist_environment_variablesset_environment_variable
Other existing groups cover Replay, Tamper rules, scopes, findings, hosted files, project/runtime info, and HTTPQL help.
Example request discovery:
{
"limit": 50,
"filter": "req.host.eq:\"example.com\" AND req.method.eq:\"POST\" AND (resp.code.eq:200 OR resp.code.eq:401)",
"fields": ["cursor", "id", "time", "request.method", "request.url", "response.status_code"]
}
Development
pnpm install
pnpm build
Watch mode:
pnpm watch
License
MIT