Chrome DevTools for the Model Context Protocol.
Stop tailing logs. See every tool call your agent makes, why it failed, how long it took, and what it cost — all in a local browser window.
Inspect · Profile · Replay · Diff
You're building an MCP server (or just running one) and something is off — the wrong tool fires, a call takes 14 seconds, your agent loops, your token bill triples overnight. Today's options: console.log, the official MCP Inspector (CLI-only, single-server), or grep through 40 MB of JSON-RPC logs.
mcp-devtools is the local-first inspector and profiler that should have shipped with the protocol. Point any MCP client at it instead of your real server, and watch every request and response stream into a browser UI you can search, filter, replay, and diff.
npm install -g @adityachilka/mcp-devtools
# or
pnpm add -g @adityachilka/mcp-devtoolsmcp-devtools sits between your client (Claude Desktop, Cowork, Cursor, your own agent) and your real MCP server. Zero changes to the server.
mcp-devtools proxy \
--upstream "node ./my-mcp-server.js" \
--port 7456Then point your client at http://localhost:7456. Open http://localhost:7456/inspect in your browser.
You get:
- Timeline — every
initialize,tools/list,tools/call,resources/read, and notification in chronological order. - Tool view — for any
tools/call, the inputs (with schema validation), the response, the latency, and the LLM-attributed token cost. - Schema explorer — live view of the server's declared tools, resources, and prompts.
- Replay — click any past call, edit the arguments, hit run. Re-hits the upstream and shows the diff against the original response.
- Time travel — scrub a slider to see the protocol state at any point in the session.
Already have a Node/TypeScript MCP server? Add five lines.
import { createServer } from "@modelcontextprotocol/sdk/server";
import { devtools } from "mcp-devtools/embed";
const server = createServer({ name: "my-server", version: "1.0.0" });
// ... register your tools ...
devtools.attach(server, { port: 7456 });The DevTools UI is now available at http://localhost:7456/inspect whenever your server is running.
Record a session and share the trace file with a teammate or in a bug report.
mcp-devtools record --upstream "node ./my-mcp-server.js" --out session.mcptrace
mcp-devtools open session.mcptrace # opens the UI on the recorded trace.mcptrace files are gzipped JSONL — diffable, grep-able, and small.
Recorded a session and want to know where the time went? profile reports per-method p50/p95/p99 latency and the slowest individual calls — Chrome DevTools Performance tab, for MCP.
mcp-devtools profile session.mcptrace
mcp-devtools profile session.mcptrace --json | jq .profile answers "where did the time go?" — summary answers "what happened?" in one screen. Combines the headline profile numbers with an error breakdown and (optionally) a cost estimate, so you can triage a recorded session without flipping between subcommands.
mcp-devtools summary session.mcptrace
mcp-devtools summary session.mcptrace --json | jq .
mcp-devtools summary session.mcptrace --model gpt-4o-mini
mcp-devtools summary session.mcptrace --model claude-sonnet-4-6 --pricing-file ./my-prices.yamlYou get:
- Total frames, wall clock, paired requests, and global error count.
- Top methods by call count with
count / p95 / errorRate(right-aligned, tabular). - Top-3 slowest individual calls.
- USD cost block when
--model <id>is passed — identical math to the inspector UI.
Develop and test MCP clients offline. serve --replay reads a .mcptrace and impersonates the upstream server over stdio: matching requests get the recorded response (with the client's id substituted in), unknown methods get a clean -32601 so the client sees a protocol-level failure instead of a hang.
mcp-devtools serve --replay session.mcptrace # strict (default)
mcp-devtools serve --replay session.mcptrace --no-strict # canned { result: {} } for unknown methodsPoint your client at this command exactly like it would a real MCP server. Identical recorded sessions become deterministic fixtures for CI.
Recording a long session in one terminal and want to watch frames stream in from another, without opening the inspector? tail is tail -f for .mcptrace: one tidy line per frame, with a latency hint when a response pairs against a request you've already seen.
# Terminal A
mcp-devtools record --upstream "node ./my-mcp-server.js" --out session.mcptrace
# Terminal B
mcp-devtools tail session.mcptrace # read from start, then follow
mcp-devtools tail session.mcptrace --from-end # only show new frames from here on
mcp-devtools tail session.mcptrace --no-follow # print existing frames and exitOutput looks like:
14:32:11.482 → initialize#1
14:32:11.491 ← #1 (9ms)
14:32:11.503 → tools/list#2
14:32:11.518 ← #2 (15ms)
Where → is the direction arrow and #1 is the JSON-RPC id of the response that paired with the earlier request.
→ is client→server, ← is server→client. Truncations and rotations are handled — if the file shrinks under us, tail reopens from byte zero.
| Live request/response timeline | Schema visualizer (tools, resources, prompts) |
| Per-tool latency histograms | Token attribution (per call, per session) |
| Error grouping and stack traces | Replay any call with modified args |
| Time-travel slider | Diff between two recorded sessions |
| Works with stdio AND streamable HTTP | Browser-only — no telemetry, nothing leaves your machine |
Export .mcptrace files |
Open-source, MIT, self-hostable |
┌────────────────┐ stdio/http ┌──────────────────┐ stdio/http ┌─────────────────┐
│ MCP client │ ────────────────▶│ mcp-devtools │ ──────────────▶│ upstream MCP │
│ (Claude, etc.) │ │ proxy + UI │ │ server │
└────────────────┘ ◀────────────────└──────────────────┘ ◀──────────────└─────────────────┘
│
▼
┌──────────────────┐
│ local browser │
│ http://:7456 │
└──────────────────┘
Single binary. No daemon. No cloud. No login.
Step-by-step setup for popular MCP clients:
All three follow the same wrapper pattern — point your client at mcp-devtools proxy instead of your real server, and the inspector picks up everything.
See ROADMAP.md for the full picture. The short version:
- v0.1 — stdio proxy, recorder, embed API, browser UI
- v0.1.x —
--quiet, color-coded timeline, signed binaries, Bun support - v0.2 — streamable HTTP transport, replay with diff, schema explorer
- v0.3 — OpenTelemetry export, VS Code extension, cost dashboard
We love contributions — see CONTRIBUTING.md. Good first issues are labeled good-first-issue. Open an issue or start a Discussion before anything ambitious — Discord server coming soon.
Built by @adityachilka1. Inspired by Chrome DevTools, React DevTools, and the official MCP Inspector.
MIT © 2026 Aditya Chilka.
