MCPScope
Charles Proxy for AI tool calls. A local-first proxy that sits between an MCP client (Claude Desktop, or any agent) and its MCP servers, passively records every JSON-RPC message to SQLite, and shows a live terminal UI.
pip install mcpscope-cli
Why
- Watch your REAL agent, live. The MCP Inspector and similar tools are test harnesses: they are the client, poking your server by hand. MCPScope records what a running agent — Claude Desktop mid-conversation — actually does.
- History that outlives the session. Inspector history is React state; gone on reload. MCPScope stores every call from every session in local SQLite, so you can answer "what did my agent do last Tuesday?"
- Local-first, zero cloud, zero signup. Nothing leaves your machine. Free forever for single-user use.
Quickstart 1 — attach to Claude Desktop
mcpscope attach filesystem # or any server name from your Claude Desktop config
# restart Claude Desktop, use it normally, then:
mcpscope ui --follow # watch calls stream in live
mcpscope detach # undo (config backup is made automatically)
attach rewrites that server's entry in claude_desktop_config.json (after
backing it up) so Claude Desktop launches the server through the proxy. The
agent and the server themselves are never modified.
Quickstart 2 — wrap any stdio MCP server
Wherever a client config says command: npx -y some-mcp-server, prefix it:
mcpscope run -- npx -y @modelcontextprotocol/server-filesystem ~/notes
stdin/stdout pass through byte-for-byte; a copy of each frame is parsed and recorded. The server's stderr also passes through untouched.
Quickstart 3 — proxy a remote (HTTP) MCP server
mcpscope run --http https://example.com/mcp --port 6280
# point your agent at http://127.0.0.1:6280/mcp instead of the upstream
Streamable HTTP (the current MCP remote transport) is forwarded verbatim,
including SSE streams; request/response/SSE payloads are teed into the same
store. Add --ui to get the TUI in the same terminal.
Browsing history
mcpscope sessions # every recorded session, with call/error counts
mcpscope calls <session-id> # one session's calls (--json for full frames)
mcpscope ui # TUI: arrows to inspect, / to filter, f to follow
Recordings live in ~/.mcpscope/mcpscope.db (override with --db or
$MCPSCOPE_DB). It's plain SQLite — query it with anything.
What it is / what it is not
It is a passive observer for agents you run: a flight recorder for MCP traffic, with persistent history and a live UI.
It is not a test harness. It never calls your server on its own, never modifies messages, and has no "send request" button — that's the official MCP Inspector, which is great at what it does. Run both.
Guarantees the design enforces:
- Pass-through is sacred: bytes are forwarded verbatim; parsing happens on a copy, for logging only. Malformed or unknown messages are never dropped, altered, or reordered — they're recorded raw.
- Recording never blocks the proxy path (write-behind queue; under extreme pressure it drops log entries, counted, never traffic).
- Protocol-churn insurance: messages are interpreted, never gated. New spec revisions flow through untouched.
License
Apache-2.0.
Metadata
Release files for mcpscope-cli 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcpscope_cli-0.1.0.tar.gz | 1.2 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcpscope_cli-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.2 MB
Release files / mcpscope_cli-0.1.0.tar.gz
| Download URL | mcpscope_cli-0.1.0.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d27201e17bb39c6950489a0519936894b9d1064811d8a123a67921663d2f5222
|
|
BLAKE2b-256 checksum How to use checksums |
60824743f9c3099e2963e921fb7c7b0a25aba4d292107cde41cbffe16e90f895
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mcpscope_cli-0.1.0-py3-none-any.whl
| Download URL | mcpscope_cli-0.1.0-py3-none-any.whl |
|---|---|
| Size | 27.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a834a131beb5bb7ebad452b1943eb2aedb6f5d8a59db78174c9f4c07466ee492
|
|
BLAKE2b-256 checksum How to use checksums |
a89c031825e146be60d643ea3df8714efc28008ba02aae71a3a480776f3005b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|