Ide Relay MCP
The missing human checkpoint for AI coding agents. Give your AI agent a "pause & ask" button โ review, correct, or enrich every step before it runs.
Ask AI about Ide Relay MCP
Powered by Claude ยท Grounded in docs
I know everything about Ide Relay MCP. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Relay
The missing human checkpoint for AI coding agents.
Give your AI agent a "pause & ask" button โ review, correct, or enrich every step before it runs.
Author: andeya ยท andeyalee@outlook.com
Relay beside your IDE โ the agent pauses, you review & answer, it continues. All in one tools/call.
Why Relay?
AI coding agents are powerful โ but blindly autonomous agents are risky and wasteful. Without a checkpoint, agents go on tangents, make mistakes that cascade into multiple correction rounds, and burn through your precious plan quota on wasted requests.
Relay adds a human-in-the-loop (HITL) checkpoint to any MCP-capable agent. The agent calls one tool โ relay_interactive_feedback โ and blocks until you submit your Answer (text, images, files). The result returns on the same JSON-RPC round trip. You catch issues early, guide accurately, and make every request count โ no cloud dashboards, no extra SaaS, just a native desktop window beside your IDE.
Key advantages
| Works with any MCP IDE | First-class support for Cursor, Claude Code, Windsurf, and a generic mode for others. |
| 100% local | All data stays on your machine โ loopback HTTP only, zero telemetry, no phone-home. |
| One resident GUI | A single persistent window (not a popup per request) with multi-tab session management. |
| No ARG_MAX limits | retell travels as HTTP JSON body (up to 16 MiB), not shell argv. |
| Session continuity | relay_mcp_session_id links turns into coherent sessions with MM-DD HH:mm:ss tab labels. |
| Rich feedback | Text, screenshots, file attachments โ everything the agent needs in one round trip. |
| Save your plan quota | Catch mistakes early and guide precisely โ no more wasted correction rounds burning through premium requests. |
Multi-IDE support
Launch Relay and pick your IDE. Each mode unlocks IDE-specific features โ one-click MCP injection, tailored rule prompts, and (for Cursor) real-time usage monitoring.
Click a card to enter that IDE mode โ all settings, CLI commands, and MCP config adapt automatically.
| IDE | MCP injection | Rule prompts | Usage monitoring |
|---|---|---|---|
| Cursor | โ | โ | โ |
| Claude Code | โ | โ | โ |
| Windsurf | โ | โ | โ |
| Other | manual | โ | โ |
Quick start
1. Install โ Grab the latest release (macOS, Linux, Windows) or build from source.
macOS โ Gatekeeper / quarantine: CI-built .app bundles are not Apple-notarized (that requires a paid Developer ID certificate). Downloads from the browser get the com.apple.quarantine attribute, which can trigger โcanโt be openedโ or โdamagedโ warnings. Without a paid cert there is no fully automatic fix for all users; options are:
- Recommended: In Finder, Control-click (or right-click) the app โ Open and confirm once (stores an exception for that app).
- CLI (one-time): clear quarantine after copying the app to
Applications(adjust the path if yours differs):
xattr -dr com.apple.quarantine "/Applications/Relay.app"
2. Launch & choose IDE โ Run relay and click your IDE card, or go directly:
relay gui-cursor # Cursor mode
relay gui-claudecode # Claude Code mode
relay gui-windsurf # Windsurf mode
3. Wire MCP โ Point your IDE at the Relay binary. Example for Cursor:
{
"mcpServers": {
"relay-mcp": {
"command": "/path/to/relay",
"args": ["mcp-cursor"],
"autoApprove": ["relay_interactive_feedback"]
}
}
}
Cursor uses
.cursor/mcp.json(per-repo, merged with~/.cursor/mcp.json). For WSL agent + Windowsrelay.exe, add--exe_in_wsl:["mcp-cursor", "--exe_in_wsl"]. See docs/HTTP_IPC.md for details.
Or use Settings โ Environment & MCP inside Relay for one-click setup and to copy the MCP JSON directly:
Settings โ Environment & MCP โ PATH detection, one-click MCP injection, copy JSON, pause MCP.
4. Install rule prompts โ Go to Settings โ Rule prompts and install with one click. This teaches the agent to call relay_interactive_feedback every turn and maintain relay_mcp_session_id.
Settings โ Rule prompts โ one-click install into your IDE's rule configuration.
Cursor rule file โ One-click install writes relay-interactive-feedback.mdc under user ~/.cursor/rules/ (Windows: %USERPROFILE%\.cursor\rules\). That path is separate from a repoโs .cursor/rules/; copy or symlink there if you only use project rules.
Agent still skips relay_interactive_feedback? Ensure MCP server relay-mcp is enabled; approve the tool when prompted (or set "autoApprove": ["relay_interactive_feedback"]); reload Cursor after editing the rule file on disk. Rule files guide the model โ they are not hard guarantees.
Relay human-in-the-loop (end-to-end)
After Quick start steps 2โ4, each turn follows this path (transport detail: docs/HTTP_IPC.md; vocabulary: docs/TERMINOLOGY.md):
sequenceDiagram
participant Agent
participant Mcp as relay_mcp-ide
participant Http as GUI_HTTP_127.0.0.1
participant You
Agent->>Mcp: tools/call relay_interactive_feedback (retell, session, commands/skillsโฆ)
Mcp->>Http: POST /v1/feedback โ request_id
Http->>You: tab shows retell
You->>Http: Answer / dismiss / idle cutoff
Http-->>Mcp: GET โฆ/wait โ JSON result
Mcp-->>Agent: same tools/call response
- MCP runs โ The IDE launches
relay mcp-<cli_id>(stdio), e.g.mcp-cursor. The matching GUI isrelay gui-<cli_id>(often already open). - Agent calls the tool โ Non-empty
retell. New session: omitrelay_mcp_session_id(or empty) and sendcommandsandskills(each may be[]only if the host truly exposes nothing). Continue: pass therelay_mcp_session_idfrom the previous result. - MCP reaches the GUI โ Reads
gui_endpoint_<cli_id>.jsonin your Configuration & paths directory (e.g.gui_endpoint_cursor.json), or spawnsrelay gui-<cli_id>and waits โค ~45 s. ThenPOST /v1/feedbackand blocks onGET /v1/feedback/wait/:iduntil the tab completes. - You interact โ Submit Answer, attach files, dismiss, or let the ~60 min idle cleanup return empty
human(same as dismiss from the agentโs perspective). - Same JSON-RPC returns โ Body includes
relay_mcp_session_id,human,cmd_skill_count, optionalattachments. The next turn must send thatrelay_mcp_session_idunless starting a new tab.
Rules vs MCP: Step 4โs rule prompt install writes relay-interactive-feedback.mdc under user ~/.cursor/rules/ (Cursor only). Rules encourage the loop; relay-mcp in MCP settings executes it.
Architecture
flowchart LR
IDE[IDE / Agent] -->|stdio JSON-RPC| MCP["relay mcp-{ide}"]
MCP -->|read or spawn| GUI["relay gui-{ide}"]
MCP <-->|127.0.0.1 Bearer| HTTP[Tauri HTTP API]
HTTP <--> UI[Vue tabs]
UI --- User((You))
MCP -->|JSON result| IDE
relay mcp-{ide}โ Stdio MCP server (clap). Handlesinitialize,tools/list,tools/call. Concurrent human rounds on one connection. Optional auto-reply rules.relay/relay gui-<cli_id>โ Tauri app + HTTP on127.0.0.1:0. Writesgui_endpoint_<cli_id>.json(e.g.gui_endpoint_cursor.json) with{ port, token, pid }; cleans up on exit.- Bridge โ MCP reads the endpoint file; if missing, spawns
gui-{ide}and polls up to ~45 s. ThenPOST /v1/feedbackโGET /v1/feedback/wait/:id. The wait resolves on submit, dismiss, supersede, or ~60 min idle.
MCP tool: relay_interactive_feedback
| Argument | Required | Meaning |
|---|---|---|
retell | yes (non-empty) | This turn's user-visible assistant reply, verbatim. |
relay_mcp_session_id | if you have one | Continue the same session; returned in the JSON result. |
commands | new tab: required | Array of IDE commands for slash-completion. [] only if the host truly has none. |
skills | same as commands | Array of IDE skills. Same merge/dedupe rules. |
Pause MCP (Settings): sentinel <<<RELAY_MCP_PAUSED>>> โ do not call again until resumed.
Slash completion โ commands and skills populate the palette with optional category badges.
Features at a glance
- Multi-tab hub โ Each request opens or refreshes a tab.
relay_mcp_session_idmerges streams. Labels show MM-DD HH:mm:ss with turn-status color indicators. - Rich composer โ Enter to submit, Shift+Enter for newline, โ/Ctrl+Enter to submit & close. Paste images, attach files โ they appear as
attachmentsin the tool result. - Cursor Usage monitoring โ Auto-detect your Cursor token (cross-platform decryption), view plan quotas, request history, and predicted quota exhaustion in a live popover.
- Auto-reply โ
auto_reply_oneshot.txt/auto_reply_loop.txtfor instant0|replyresponses without opening the UI. - Local storage โ
feedback_log.txt,qa_archive/<session_id>.jsonl, configurable attachment retention (default 30 days). - CLI โ
relay feedback --retell "โฆ"prints JSON on stdout;--timeoutfor CI/automation.
Settings โ Cache โ attachment + log usage, open folder, auto-clean.
CLI reference
| Command | Role |
|---|---|
relay | Open IDE selection page |
relay gui-cursor | Launch GUI in Cursor mode |
relay gui-claudecode | Launch GUI in Claude Code mode |
relay gui-windsurf | Launch GUI in Windsurf mode |
relay mcp-cursor | MCP stdio server for Cursor (what the IDE runs) |
relay mcp-claudecode | MCP stdio server for Claude Code |
relay mcp-windsurf | MCP stdio server for Windsurf |
relay feedback --retell "โฆ" | Terminal tryout; --timeout, --relay-mcp-session-id |
Only one GUI process per IDE mode is allowed; bare relay (no mode) can run multiple instances.
Configuration & paths
Data lives under your OS application-data directory (directories::ProjectDirs โ config_dir()):
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/com.relay.relay-mcp/ |
| Linux | ~/.config/relay-mcp/ |
| Windows | %APPDATA%\relay\relay-mcp\config\ |
Key files: feedback_log.txt, qa_archive/*.jsonl, ui_locale.json, gui_endpoint_<cli_id>.json (e.g. gui_endpoint_cursor.json), relay_gui_<cli_id>_alive.marker, mcp_pause.json, attachment_retention.json, auto_reply_*.txt, legacy gui_endpoint.json when applicable.
Build
npm install
npm run build # Vite frontend
cargo build --manifest-path src-tauri/Cargo.toml --release
npm run tauri build # installers / .app / etc.
Develop:
npm run lint && npm run typecheck
npm run tauri:dev
Icons (from src-tauri/icons/source/relay-icon.svg):
npm run icons:build
CI: lint, typecheck, Vite, cargo fmt, clippy -D warnings, cargo test โ see docs/RELEASING.md.
Documentation
| Doc | Content |
|---|---|
| docs/HTTP_IPC.md | HTTP API, timeouts, WSL path rewrite |
| docs/RELAY_MCP_SESSION_ID.md | Session ID & tab labels |
| docs/TERMINOLOGY.md | Vocabulary + binaries / endpoint files |
| docs/RELEASING.md | Releases & CI |
Privacy
Data stays on device. All answers, logs, attachments, and settings are written only under your OS user paths. The GUI and MCP process communicate over 127.0.0.1 โ nothing leaves your machine.
No telemetry. Relay ships no analytics SDKs, crash reporters, or remote instrumentation. Local files like feedback_log.txt may contain sensitive content โ handle them accordingly.
Acknowledgements
Inspired by interactive-feedback-mcp. Relay replaces per-request subprocess UIs with a resident GUI and a Bearer-authenticated local HTTP layer.
