Model Context Protocol server

Your agent should read the request, not your description of it.

Charlotte captures the HTTPS your app actually sent, then exposes it to your coding agent over MCP. Claude Code, Claude Desktop, VS Code and Cursor can search a whole session, open any request and response, replay it, and change the traffic — without you pasting a single header into a chat window.

Loopback only · Role-scoped tokens · Write tools off by default · No cloud inference

A 401 debugged by an agent reading the real request. 56s, no sound.
Claude Code Claude Desktop VS Code & Copilot Cursor Any MCP client

The problem it solves

Debugging a failing request with an AI agent usually means copying a cURL command out of devtools, pasting it into a chat window, and hoping you grabbed the right header. The agent reasons about your description of the traffic. If the description is wrong — and the reason the request is failing is usually that something is not what you think it is — the answer is wrong too.

Charlotte removes the copying step. It sits as a proxy on your own machine, decrypts HTTPS from any client you point at it, and serves the captured flows to your agent as structured data. The agent reads the actual bytes.

Everything stays local. The MCP server binds to 127.0.0.1 and is never exposed to the network. Charlotte has no backend, no account and no telemetry — there is no server to send your traffic to.

1. Install Charlotte

The MCP server is built into the desktop app and starts with it. There is no separate package to install.

  • Windows 10 1903+ / Windows 11 — get Charlotte.Pro from the Microsoft Store. Free for 14 days with every feature unlocked, then one payment, owned forever.
  • macOS — coming soon. The macOS app shares the same capture engine and MCP server.

Or from a terminal, if you would rather not open the Store app:

winget install --id 9PD5RZKFCM19 --source msstore

In the app, open Settings → AI agents (MCP server) and turn on Expose captured traffic to agents. The server starts on port 8765 by default.

2. Connect your agent

Claude Code

Charlotte speaks streamable HTTP, so a single command is enough:

claude mcp add --transport http charlotte http://127.0.0.1:8765/ \
  --header "Authorization: Bearer YOUR_TOKEN"

On Windows (version 1.0.12 and later) the server requires an access token, so that no other program on your PC can read your traffic just because the server is running. Charlotte's Settings → AI agents screen shows the token with a copy button — paste it in place of YOUR_TOKEN above.

Add --scope user to make it available in every project rather than just the current one. Check it connected with claude mcp list.

Claude Desktop, Cursor, and other stdio clients

Clients that launch the server as a subprocess use Charlotte's stdio bridge, which relays JSON-RPC to the running app and streams live capture events back. The bridge reads the access token itself, so there is nothing extra to configure here.

Windows. The executable lives under a versioned WindowsApps path, so don't type it by hand — Charlotte's Settings → AI agents screen shows the exact command with a copy button. It looks like this:

{
  "mcpServers": {
    "charlotte": {
      "command": "C:\\Program Files\\WindowsApps\\...\\Charlotte.exe",
      "args": ["--mcp-stdio", "--mcp-port", "8765"]
    }
  }
}

macOS.

{
  "mcpServers": {
    "charlotte": {
      "command": "/Applications/Charlotte.app/Contents/MacOS/Charlotte",
      "args": ["--mcp-stdio", "--mcp-port", "8765"]
    }
  }
}

Live capture stream

Anything that can read Server-Sent Events can watch capture happen in real time, including streaming LLM responses arriving token by token:

curl -N -H "Authorization: Bearer YOUR_TOKEN" http://127.0.0.1:8765/events

Filter with ?events=flow_chunk,flow_completed. Passwords, tokens and cookies are redacted by default.

3. What your agent can do

Read tools — always available

  • list_flows — page through captured requests with their status, host and timing.
  • get_flow — open one request and response in full, with the decoded body.
  • search_flows — a real query language across the session.
  • stats — totals, hosts and status-code breakdown.
  • audit_session — Charlotte's own security and privacy audit, returned as Markdown.

Write tools — off until you enable them

  • replay_flow — re-send a captured request, with or without changes.
  • create_rewrite — add a rule that rewrites headers, bodies or status codes.
  • create_map_local — serve a request from a file on disk.
  • set_breakpoint — pause matching traffic so it can be edited in flight.
Write tools stay disabled until you tick Allow AI agents to modify rules & replay requests in Settings, and every action is written to the debug log.

The query language

search_flows takes filters your agent can compose, with globs, ranges, OR and NOT:

# everything that failed
status:>=400

# one vendor's API only
host:*.stripe.com

# requests whose body mentions a token, excluding preflight
body:"token" NOT method:OPTIONS

What that looks like in practice

Point your app at Charlotte, reproduce the bug, then ask the agent in plain language:

"The login call is coming back 401. Look at the actual request
 Charlotte captured and tell me what's wrong with it."

The agent calls search_flows for status:401, opens the flow with get_flow, and reads the header you got wrong — instead of guessing from a paraphrase.

4. Give each agent exactly the access it should have

One shared admin token was fine for one agent. Running several — a coding assistant, a CI job, a teammate's client — needs a credential per agent, each scoped to what it actually does.

Named access tokens (RBAC)

Issue one token per agent from Settings → AI agents — access control, each with a role: Viewer can read and search captured flows, Editor can also replay requests and edit rules, and Admin can do everything the app's own user can. A leaked Viewer token can never modify your traffic. Revoke one agent without touching any other's.

OAuth 2.1 with PKCE

Modern MCP clients don't have to be handed a static secret at all. Turn on OAuth and a client registers itself, then you approve its role on a consent screen — no token to copy, paste, or accidentally commit. Static tokens keep working alongside it for clients that don't support OAuth yet.

Policy, on top of roles

Enforced on every tool call, regardless of which token or role made it:

  • Read-only mode — agents may inspect but never modify or replay, no matter what role their token has.
  • No-PII-replay — refuses to replay any captured flow whose body looks like it carries personal data.
  • Allow-list — deny everything a rule doesn't explicitly permit, instead of trusting roles alone.

A sandbox around replay

replay_flow runs inside a sandbox that blocks requests to cloud-metadata and link-local addresses (the class of target an SSRF attempt would reach for), rate-limits replays per credential, and offers a dry-run mode that shows exactly what would be sent without sending it.

An audit trail you can read

Every agent action — which credential, which tool, allowed or refused — is written to an attributable log, so "what did that agent actually do" has a real answer.

Plugins

Extend Charlotte with custom MCP tools and traffic analyzers. A JWT inspector and a security-headers analyzer are built in. External plugins are opt-in and load only when allow-listed in plugins.json with a matching SHA-256 — nothing loads because a folder happens to contain it.

Multi-device capture hub

Capture from several phones, VMs, and containers at once. Charlotte identifies each by its client address and shows it as its own named device with its own stats, with an optional dedicated port for a source a shared network would otherwise merge into the rest.

Security posture

  • Loopback only. The server binds to 127.0.0.1. It is not reachable from your network.
  • Role-scoped credentials. Every client presents a token — a named Viewer/Editor/Admin token or an OAuth-issued one — copied or approved from Settings. Loopback keeps the server off the network; the token keeps it scoped to the agent it was issued for. Revoke one at any time without disturbing the others.
  • Off by default. The server does not run until you turn it on.
  • Read-only by default. Nothing can change your traffic until you explicitly allow it — and the read-only policy can enforce that even for a token whose role would otherwise permit more.
  • Credentials redacted by default. Authorization and Cookie headers, credential-named body fields and JWTs are masked everywhere an agent can read them — the live stream and the fetch, list and search tools alike. You can turn that off when the token is what you are debugging.
  • Replay is sandboxed. Cloud-metadata and link-local addresses are blocked, replays are rate-limited per credential, and a dry-run mode exists for when you want to see the request without sending it.
  • Every action is attributable. An audit trail records which credential did what, and whether it was allowed.
  • No cloud inference. Charlotte's own AI analysis runs on-device. Your traffic is never sent to an AI service — ours or anyone else's.
  • Your CA key stays put. The root CA's private key is encrypted with Windows DPAPI (or the macOS Keychain) and never leaves the machine.

Charlotte is for inspecting traffic you are authorised to inspect: your own applications and devices, or systems you have permission to test.

Give your agent the real traffic

Free for 14 days with every feature unlocked. No account, no card, no sign-up.