Native macOS developer tools for the Model Context Protocol.
Chrome DevTools for MCP. Intercept, inspect, and debug every JSON-RPC message between your AI client and MCP servers.
Features · Getting Started · How It Works · Documentation · Contributing · License
The official MCP Inspector can't observe real traffic between Claude/Cursor and your servers — it acts as its own synthetic client. This is the #1 developer pain point when building MCP servers.
Conduit fixes this. It sits as a transparent proxy in the actual data path between AI clients (Claude Desktop, Claude Code, Cursor, Windsurf) and MCP servers, capturing every JSON-RPC message — requests, responses, notifications, errors — and gives you a real-time timeline, performance charts, breakpoints, and a playground to drive any server by hand.
- Auto-discovery of MCP servers from Claude Desktop, Claude Code, Cursor, and Windsurf configs
- Start / Stop / Restart stdio servers with live stderr streaming
- Toggle proxy per server — rewrites the client config, keeps a backup in
~/.conduit/backups/ - Config editor with Monaco, live validation, and profiles for switching between server sets
- Live timeline of intercepted JSON-RPC traffic with virtualized scrolling
- Session management — pin, rename, export/import (
.conduitfiles), and diff sessions side-by-side - Filters — by session, server, method, direction, full-text search, errors-only
- Method color coding —
tools/*,resources/*,prompts/*,notifications/*,initialize, … - Detail pane with Monaco-rendered JSON and request/response duration for matched pairs
- Performance charts — per-tool latency with p50/p95/p99 markers (session-scoped or global)
- Breakpoints — pause any matching JSON-RPC frame, inspect and edit the payload, then forward, modify, or drop
- Map Local — automatically replace matching responses with canned payloads from disk
- Graceful degradation — if Conduit is closed, the shim falls back to transparent passthrough
- Browse tools, resources, and prompts from any discovered server
- Invoke tools with an auto-generated form derived from the
inputSchema - Read resources and run prompts with their declared arguments
- Supports both stdio and HTTP/SSE transports
- Menu bar tray icon with Show / Traffic / Servers / Playground / Quit
- Command palette (
⌘K) with fuzzy-filtered actions - Section shortcuts
⌘1/⌘2/⌘3, refresh all queries with⌘R
Grab the latest .dmg from the Releases page.
Note: The app is not yet code-signed. macOS will show a "damaged" or "unidentified developer" warning. To fix this, run after mounting the DMG:
xattr -cr /Applications/Conduit.app
Prerequisites: macOS 13+, Rust 1.80+, Node 20+
# Clone the repository
git clone https://github.com/SegfaultSorcerer/conduit.git
cd conduit
# Install frontend dependencies
npm install
# Build the shim binary (required before enabling proxy)
cargo build -p conduit-shim
# Launch the app in development mode
cargo tauri devThe first build compiles the full Rust dependency tree (tokio, rusqlite, tauri, etc.) and takes a few minutes. Subsequent builds are incremental.
- Launch Conduit
- Open the Servers tab — your MCP servers are auto-discovered within seconds
- Click Proxy off on any server to enable interception
- Restart the AI client so it picks up the rewritten config
- Use the AI client normally — switch to the Traffic tab to see the live JSON-RPC stream
- Click Proxy on to restore the original config when you're done
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ AI Client │────▶│ conduit-shim │────▶│ MCP Server │
│ (Claude, etc)│◀────│ (stdio) │◀────│ │
└──────────────┘ └──────┬───────┘ └──────────────┘
│ IPC
┌──────▼───────┐
│ Conduit │
│ (inspect, │
│ breakpoint,│
│ record) │
└──────────────┘
Stdio servers: enable_proxy rewrites the client config to launch conduit-shim instead of the real server binary. The shim spawns the real server, pipes stdin/stdout through, and sends a copy of every frame to Conduit over a Unix socket (/tmp/conduit.sock). If Conduit isn't running, the shim works as a transparent passthrough — the MCP connection is never broken.
HTTP/SSE servers: An axum reverse proxy intercepts requests and SSE streams, applying the same inspection and breakpoint logic.
cargo tauri dev # Run the app (Rust backend + Vite dev server)
cargo test -p conduit -- --test-threads=1 # Run Rust tests
npm run lint # Lint frontend (Biome)
npm run format # Format frontend (Biome)
cargo check --workspace # Check all Rust crates| Layer | Choice |
|---|---|
| Desktop framework | Tauri 2.10+ |
| Backend | Rust 1.80+ with tokio |
| Frontend | React 19 + TypeScript 5 + Vite |
| Styling | Tailwind CSS 4 |
| State management | zustand |
| Data fetching | @tanstack/react-query |
| Virtualized lists | react-virtuoso |
| Code/JSON editor | @monaco-editor/react |
| Database | SQLite via rusqlite (bundled) |
| Linting/formatting | Biome |
See CLAUDE.md for architecture details and coding conventions, and docs/PROJECT_PLAN.md for the full roadmap.
Contributions welcome! See CONTRIBUTING.md for guidelines.
This project is dual-licensed under either of
at your option.