Charles Proxy for AI tool calls — a local-first MCP proxy that records what your real agent actually does.
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcpscope_cli-0.1.0.tar.gz.
File metadata
- Download URL: mcpscope_cli-0.1.0.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d27201e17bb39c6950489a0519936894b9d1064811d8a123a67921663d2f5222
|
|
| MD5 |
59259f340ee8837524a8020876052d14
|
|
| BLAKE2b-256 |
60824743f9c3099e2963e921fb7c7b0a25aba4d292107cde41cbffe16e90f895
|
File details
Details for the file mcpscope_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcpscope_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 27.8 kB
- Tags: Python 3
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a834a131beb5bb7ebad452b1943eb2aedb6f5d8a59db78174c9f4c07466ee492
|
|
| MD5 |
1dc102b3395b2533275a0a3940a32369
|
|
| BLAKE2b-256 |
a89c031825e146be60d643ea3df8714efc28008ba02aae71a3a480776f3005b1
|