The Python-native playground for MCP servers
Project description
mcpplay
The FastAPI /docs experience, for MCP servers.
Documentation • Getting Started • Issues
mcpplay gives you a browser-based playground for any MCP server. One command, and you get auto-generated forms, live results, and a full execution timeline.
Installation
pip install mcpplay
mcpplay demo
Your browser opens to http://localhost:8321. That's it!
Point it at your own server
mcpplay run server.py
mcpplay run --command "node server.js"
mcpplay run --command "uvx my-mcp-server"
Options
mcpplay run server.py --port 9000 # Custom port (default: 8321)
mcpplay run server.py --no-open # Don't auto-open browser
mcpplay run server.py --no-reload # Disable hot reload
mcpplay run server.py --env API_KEY=xxx # Pass env vars to server
Features
- Schema-aware forms - auto-generated from your tool's JSON Schema, with enums, nested objects, arrays, and defaults.
- Live execution - run tools and see structured results instantly.
- Persistent timeline - every call logged with inputs, outputs, and latency. Replay with one click.
- Hot reload - edit your server, mcpplay restarts it. Session and timeline preserved.
- Localhost-only - bound to
127.0.0.1with Origin validation. No remote exposure.
How It Works
Browser UI ←→ mcpplay (Python proxy) ←→ Your MCP Server
(Svelte) (uvicorn + WebSocket) (stdio)
mcpplay spawns your server as a child process, connects via stdio, and proxies everything through a WebSocket to the browser. Executions are logged to a local SQLite database.
Comparison
| mcpplay | MCP Inspector | MCPJam Inspector | |
|---|---|---|---|
| Install | pip install |
npx (Node required) |
Docker |
| Python native | ✅ | ❌ | ❌ |
| Form generation | Full JSON Schema | Basic inputs | Basic inputs |
| Hot reload | ✅ | ❌ | ❌ |
| Execution timeline | Persistent, replayable | Log | Log |
Development
git clone https://github.com/gauthierpiarrette/mcpplay
cd mcpplay
# Python backend
uv sync --dev
uv run pytest
# Frontend (Svelte)
cd frontend
npm install
npm run dev # Dev server with HMR
npm run build # Build to src/mcpplay/static/
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 mcpplay-0.1.0.tar.gz.
File metadata
- Download URL: mcpplay-0.1.0.tar.gz
- Upload date:
- Size: 469.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cbe9ddcb5742be1abe0d689fee58e5d001f30e6197bc2eba497f878e3c06a1b
|
|
| MD5 |
6b546584ad54b78fe8439b2e7a757ca3
|
|
| BLAKE2b-256 |
e7461a5af75cb8b8552644a6130092a753f32f5f2c811da33c09f89a693131f6
|
Provenance
The following attestation bundles were made for mcpplay-0.1.0.tar.gz:
Publisher:
release.yml on gauthierpiarrette/mcpplay
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcpplay-0.1.0.tar.gz -
Subject digest:
4cbe9ddcb5742be1abe0d689fee58e5d001f30e6197bc2eba497f878e3c06a1b - Sigstore transparency entry: 963026449
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/mcpplay@ff3d18618206c5da10d900fc4be3846cdc8e004f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gauthierpiarrette
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ff3d18618206c5da10d900fc4be3846cdc8e004f -
Trigger Event:
push
-
Statement type:
File details
Details for the file mcpplay-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mcpplay-0.1.0-py3-none-any.whl
- Upload date:
- Size: 83.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f44b3c8dafdb459591cc03c7ec11a7d989a5efa2d473ba8b03c5089e45ad4f6
|
|
| MD5 |
e29119a9aab18e61ed60e5a11cbb6446
|
|
| BLAKE2b-256 |
bd937b63b6b4bc5c834ffac66e0caf4d77cbf823295d785252dfd69ab5634a32
|
Provenance
The following attestation bundles were made for mcpplay-0.1.0-py3-none-any.whl:
Publisher:
release.yml on gauthierpiarrette/mcpplay
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mcpplay-0.1.0-py3-none-any.whl -
Subject digest:
2f44b3c8dafdb459591cc03c7ec11a7d989a5efa2d473ba8b03c5089e45ad4f6 - Sigstore transparency entry: 963026452
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/mcpplay@ff3d18618206c5da10d900fc4be3846cdc8e004f -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gauthierpiarrette
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ff3d18618206c5da10d900fc4be3846cdc8e004f -
Trigger Event:
push
-
Statement type: