Skip to main content

A plunger Plunger

Unclog your API.

Your AI agent calls the API. Plunger shows you what it actually sent and what came back.

An HTTP client built for AI agents. An MCP server and a command line that send requests safely (a secret never reaches the output, an undefined variable is refused), return only the values the agent asked for, and write every change to a tamper-evident log, plus a small native window to see and check what the agent did.
Make the request. See the JSON. Move on.

CI status Latest release Downloads MIT license Platform: Windows 10 and 11 MCP server Built with Rust GitHub stars

Get it from the Microsoft Store  ·  Windows zip (about 3.6 MB, no installer, not code-signed)  ·  Linux (command line and MCP server tested; the window is not yet)  ·  MIT license

Pasting a curl command into Plunger, importing it and sending it; the JSON response appears as a collapsible tree

Sending a request from Plunger's window, then an AI agent calling the API over MCP: each call appears live in the history tagged MCP, the token it saved stays hidden, and Authorization: Bearer {{token}} keeps its placeholder.
The real app: every request an agent sends appears in your window, tagged MCP, with secrets kept hidden. Setup and details.

Why?

Sometimes you don't need another platform. You just need to see what the API returned.

AI can write the code. AI can build the pipeline. We still look at the diff before we push. We still look at the logs when something feels wrong. And we still look at the JSON when an API doesn't do what we expected.

Seeing is believing. Plunger is for the moment between "I think it works" and "I can see it works."

A plunger
We wanted a plunger. So we made one.

What is Plunger?

A small desktop app that sends an HTTP request and shows you what came back.

  • Request: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS. Params, headers and a Bearer token field.
  • Body: JSON, form-urlencoded, raw text, or multipart form-data with real file uploads.
  • Response: status, time and size, the headers, and the body as a collapsible JSON tree. Copy it or save it to a file.
  • Variables: {{name}} anywhere in the request, plus {{$uuid}}, {{$timestamp}}, {{$randomInt}} and {{$env:NAME}} for reading an OS environment variable at send time. A request with an undefined variable is refused, never sent with the placeholder in it.
  • Import and export: paste a curl command (bash or Windows cmd, including -F uploads) or a PowerShell Invoke-WebRequest / Invoke-RestMethod command, such as DevTools' Copy as cURL or Copy as PowerShell; or open a HAR file. Copy any request back out as curl (bash), curl (Windows cmd), PowerShell or a JavaScript fetch call with Ctrl+Shift+C or File > Export request, shown with syntax highlighting.
  • Keep what matters: local history, named saved requests (Ctrl+S) and tabs (Ctrl+T).
  • Local HTTPS: skip certificate checks for a self-signed dev server, with a warning that stays visible while it's on.
  • Behind a proxy: Plunger uses your system proxy settings and the HTTP_PROXY, HTTPS_PROXY and NO_PROXY environment variables.
  • Find it again: the sidebar filter searches your whole history and saved requests by URL, method, name or status; right-click a value in a JSON response to copy its path or value.

It's a native program, not a web page, so it reaches whatever your machine can reach: localhost, a dev box on your network, an API that sends no CORS headers.

For AI agents

See the JSON, even when an AI sent the request.

Plunger is built to be driven safely by AI agents, not just clicked by people. The same plunger.exe is also a command-line API client and an MCP server, so an agent like Claude Code sends requests through Plunger's engine instead of running curl. No account, no cloud, no telemetry: now safe for your agents too.

One exe. Human GUI, agent CLI, agent MCP. The same safety guarantees in every mode.

{
  "mcpServers": {
    "plunger": { "command": "C:\\Tools\\plunger\\plunger.exe", "args": ["mcp"] }
  }
}

Claude Code, asked to fetch a joke through Plunger's send_request tool, calling the tool and printing the result; each call shows up live in Plunger's history on the right, tagged MCP.

Real Claude Code, using Plunger over MCP, unedited. See docs/agents.md for the setup and a look at the raw protocol traffic.

Run plunger install (or File > Set up AI agents... in the window) to register the MCP server in Claude Code, Cursor, Kiro, Codex, Windsurf, VS Code or Gemini CLI and write the always-on steering that tells the agent to use Plunger instead of curl. See docs/agents.md.

Why not just let the agent run curl?

  1. Undefined-variable safety. Plunger refuses to send a request with an undefined {{variable}}. curl will happily send the placeholder text.
  2. Credential isolation. The agent writes {{token}} and never sees the value. Secrets you've chosen to remember are kept in Windows Credential Manager and filled in by Plunger; if a server echoes one back, it comes back as [redacted:token].
  3. Shared human and agent history. You testing in the window and an agent testing from the command line read and write the same saved requests and history.
  4. Structured, typed output. Status, timing, size, headers and the parsed JSON body come back as separate fields, not text the agent has to pick apart.
  5. A local audit trail. Every agent request lands in the history you see in the window, tagged MCP or CLI, as it happens. curl leaves no record unless you build the logging yourself.

Tools: send_request, import_curl, list_saved_requests, get_history, list_variables, export_curl. From a terminal: plunger send "Saved request name", plunger send --url ..., plunger history. Setup, every tool and option, exit codes and the fine print are in docs/agents.md.

Workflows

When one response feeds the next request (log in, then use the token; look up an id, then act on it), save the steps as a workflow. An agent runs it in one call (run_workflow, or plunger workflow run), and you see it as a flow in the window: a card per step on a rail of connected dots, the values a step hands on written on the connector, and every step lit up as it runs.

The workflow window running two steps against a local issue tracker: transitions finishes with 200 and hands transition_id to the second step, move to Done returns 204, and the run ends with all 2 steps passed

Step 1 looks up the id of the "Done" transition and keeps it for this run only; step 2 uses it. Steps can expect several statuses, be skipped or stop the run on a condition. Details in docs/agents.md.

Small by design

Built in Rust with egui because we wanted a small, fast, native application. No webview, no bundled browser: one exe of about 7 MB, which is also a command-line client and an MCP server for AI agents.

No account to create. No cloud to sync to. The only network traffic is the requests that get sent, by you or by an agent you've connected: no analytics, no telemetry, no update checks. History and saved requests live in one local folder, %APPDATA%\Plunger\data. Bearer tokens and secret variables are never written to a file unless you tick "remember", which keeps them in Windows Credential Manager. Credential-looking headers are blanked before history is saved. Details are in the privacy policy.

Open source

Plunger is MIT licensed. Read it, build it, change it.

A few promises, so you know what you're picking up:

  • It will never require an account.
  • It will never add telemetry.
  • Existing features will never move behind a paywall.

Screenshots

Plunger with saved requests grouped into folders, workflows and history in the sidebar (each tagged CLI or MCP when an agent sent it), the variables the open request uses under the URL, and a JSON response
Saved requests in groups, workflows and history on the left; the variables a request uses sit under its URL.
A multipart form-data request with a text field and a file field, and the server's echo of the upload
Multipart uploads with real files.
The Variables window: values shared by every request, the command line and agents, with who set each one
Variables are shared by every request and agent; secrets are masked and kept off disk.
A request refused because {{base}} and {{token}} are not defined
Undefined variables stop the request instead of leaking a placeholder.
The Import a curl command dialog with a pasted curl command
Paste a curl command; it becomes a request.
The Options tab with TLS certificate verification skipped and a visible warning
Local HTTPS with self-signed certificates.
Plunger in the light theme
Light theme too.

Install

Microsoft Store (signed by Microsoft, no warning, updates itself; it can trail the newest release by a few days): get it here, or

winget install 9P7WRKLN6WHR --source msstore

Scoop:

scoop bucket add metamug https://github.com/metamug/scoop-bucket
scoop install plunger

pip / uv (Windows, Linux, macOS), from 0.5.1:

pip install plunger-cli       # puts a `plunger` command on your PATH
pipx install plunger-cli      # same, in its own environment (use this if pip says "externally-managed-environment")
uvx plunger-cli mcp           # or run the MCP server without installing anything

macOS (11 or later, Apple Silicon and Intel), Homebrew:

brew install --cask metamug/tap/plunger     # Plunger.app, and a `plunger` command on your PATH

Or download Plunger-<version>-macos.dmg from the releases page, open it and drag Plunger to Applications. The first time, right-click the app and choose Open (it is not signed with an Apple Developer ID yet; see docs/packaging-macos.md). pip install plunger-cli also works on a Mac.

Zip:

  1. Download plunger-windows.zip and unzip it anywhere.
  2. Run plunger.exe.

Windows 10 or 11, 64-bit. The zip isn't code-signed yet, so Windows may say "Windows protected your PC": click More info, then Run anyway. Or build it yourself.

To update the zip, replace the exe. To remove it, delete the exe and %APPDATA%\Plunger.

Usage

  1. Paste a URL, or import a curl command.
  2. Press Ctrl+Enter. While a request is in flight, press Escape to cancel waiting for it.
  3. Read the response.

Press Ctrl+L to focus the URL field and select its contents.

Press Ctrl+F to search the response body: Enter and Shift+Enter (or Next / Prev) step through the matches, Esc closes the box.

With multiple request tabs, Ctrl+Tab moves to the next tab and Ctrl+Shift+Tab moves to the previous one. Cycling wraps at either end.

Build from source

rustup toolchain install stable-x86_64-pc-windows-gnu
rustup default stable-x86_64-pc-windows-gnu
# plus mingw-w64 (gcc, windres, dlltool) on PATH, e.g. from WinLibs or MSYS2

cargo build --release     # target/release/plunger.exe
cargo test

Set PLUNGER_DATA_DIR to run against a throwaway data folder instead of your real history.

Contributing

Issues and pull requests are welcome. Before adding a feature, ask: does this help someone quickly see what an API is doing? Would someone open Plunger specifically for it? If yes, it probably belongs. Accounts, sync, collaboration and platform features don't.

Run cargo test and cargo clippy --all-targets before sending a PR. Maintainers: releases are GitHub releases with plunger-windows.zip attached (push a v* tag).


We didn't want another ecosystem. We wanted a plunger. A plunger
Unclog your API.

Metadata

Release files for plunger-cli 0.7.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for plunger-cli 0.7.3
File Size Uploaded
plunger_cli-0.7.3.tar.gz 3.3 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for plunger-cli 0.7.3
File
plunger_cli-0.7.3-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
plunger_cli-0.7.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
plunger_cli-0.7.3-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
plunger_cli-0.7.3-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 24.2 MB

Release files / plunger_cli-0.7.3.tar.gz

Download URL plunger_cli-0.7.3.tar.gz
Size 3.3 MB
Tags Source
SHA-256 checksum
How to use checksums
0333db28eb061f1e943a587bd01107569a799f775099d05c0ee1761636e5ff04
BLAKE2b-256 checksum
How to use checksums
dcd60f7cdda59f51f197a9082a37f1f1b2824b6c5726a0b84234e64b54cab965
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / plunger_cli-0.7.3-py3-none-win_amd64.whl

Download URL plunger_cli-0.7.3-py3-none-win_amd64.whl
Size 5.2 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
b23ebc46f116e51d79c630a67d9e98d20772b4b7d836a95dcca4cbcbe2ca22f5
BLAKE2b-256 checksum
How to use checksums
56dfa614d44c8c592a8ba3253751b266f63045a67f66a4ad22b8421042ec8f9c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / plunger_cli-0.7.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL plunger_cli-0.7.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.0 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
9ebd710c6feaeebba767c5ec8c5ceecc9d5b6dd78b767e73dc5661d5a7c7c2b8
BLAKE2b-256 checksum
How to use checksums
eccd939c1a5db3a85b3371b093ea723fedd0d8236a55513d9c18f820d2be6338
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / plunger_cli-0.7.3-py3-none-macosx_11_0_arm64.whl

Download URL plunger_cli-0.7.3-py3-none-macosx_11_0_arm64.whl
Size 4.6 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
126eb303178b08e15ad8e4185f90bd6a382bfea06363a4370dc83b6f728e5382
BLAKE2b-256 checksum
How to use checksums
73c81a12f923524f0d13f258613942ae1bd50d33f1d8a7a38841bb12eb1f4540
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / plunger_cli-0.7.3-py3-none-macosx_10_12_x86_64.whl

Download URL plunger_cli-0.7.3-py3-none-macosx_10_12_x86_64.whl
Size 5.2 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
6d7296b68cfd293779fe6cee8e4d5f7245efa93e14e409f3bae8ea5008c125f3
BLAKE2b-256 checksum
How to use checksums
30d7e0dd799e5ddf7323f6e1d7f74065374887e9d5d4af38b257d8b81226ef80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.3 This release

5 release files

0.7.2

5 release files

0.7.1

5 release files

0.7.0

5 release files

0.6.0

5 release files

0.5.3

5 release files

0.5.2

5 release files

0.5.1

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page