Skip to content

adityachilka1/mcp-devtools

mcp-devtools

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.

npm license ci stars contributors

Inspect · Profile · Replay · Diff

demo


Why

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.

Install

npm install -g @adityachilka/mcp-devtools
# or
pnpm add -g @adityachilka/mcp-devtools

Quick start — proxy mode (recommended)

mcp-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 7456

Then 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.

Quick start — embed mode

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.

Quick start — record mode

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.

Quick start — profile mode

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 .

Quick start — summary mode

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.yaml

You 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.

Quick start — serve mode (replay)

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 methods

Point your client at this command exactly like it would a real MCP server. Identical recorded sessions become deterministic fixtures for CI.

Quick start — tail mode

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 exit

Output 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.

Features

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

Architecture

┌────────────────┐   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.

Integration guides

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.

Roadmap

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

Contributing

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.

Acknowledgements

Built by @adityachilka1. Inspired by Chrome DevTools, React DevTools, and the official MCP Inspector.

License

MIT © 2026 Aditya Chilka.

About

Chrome DevTools for the Model Context Protocol. Inspect, profile, replay, and diff every MCP call your agent makes.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors