.-----.
| 🔴 |
| 🟡 |
| 🟢 |
'-----'
greenlight
greenlight
See what your MCP server is actually doing.
A transparent stdio proxy for the Model Context Protocol. Point it at your real server command instead of running that command directly, and it relays every byte exactly as before -- while recording every JSON-RPC message to a structured log you can watch live or replay.
Right now, if an MCP integration isn't working, you're debugging blind: no visibility into what got sent, what came back, or why a call failed. Greenlight exists to fix that.
Install
pip install -e .
(Not yet published to PyPI as greenlight-mcp -- install from source for now.)
Use it
Wherever you'd normally configure a server command, wrap it:
greenlight run -- npx -y @some/mcp-server
instead of
npx -y @some/mcp-server
Every message that passes through gets logged to ./sessions/. Watch it:
greenlight tail # replay the most recent session
greenlight tail -f # follow a session that's still running
greenlight tail path/to/log.jsonl
Trace output is colorized by status: green for a clean success, yellow
for a slow-but-fine call, red for anything that actually failed --
including MCP tool-level failures (result.isError), not just
transport-level JSON-RPC errors, which are a different thing and easy to
miss if you only check for the obvious one. See notes/day1.md for why
that distinction mattered enough to write a whole note about it.
How it works
greenlight run spawns your real server as a subprocess and sits
between it and the real MCP client, relaying stdin/stdout on two
threads. Every line is parsed as JSON-RPC, correlated by request id
(so a response knows its own method name and latency), and written to a
JSONL file. The one rule the whole thing depends on: nothing but the
child process's actual bytes ever reaches Greenlight's own stdout --
logging and UI output only ever go to stderr or to disk. A single stray
print to stdout would corrupt the protocol stream the real client is
parsing.
Status
-
greenlight run-- transparent proxy, validated end-to-end against a real MCP server (not a mock) -
greenlight tail-- live trace viewer, both static replay and genuine live-follow (verified separately, not assumed) - Windows PATH resolution for
npx-style commands - Tested against a real npx-launched server (so far only validated against a Python fixture server)
- HTTP/SSE transport (stdio only for now -- covers the common local MCP server case)
- Published to PyPI
Notes
notes/ is a running engineering log, not a cleaned-up
retrospective -- what broke, how it was found, why the fix is what it is.
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 greenlight_mcp-0.1.0.tar.gz.
File metadata
- Download URL: greenlight_mcp-0.1.0.tar.gz
- Upload date:
- Size: 13.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2507acf955488877c24602326ff0bfbf81136029f5e5ffc91ef8ea6897beed5d
|
|
| MD5 |
628783abfb83fde39ec4aed2bd221ca7
|
|
| BLAKE2b-256 |
68c4ae01f3b1ef686c3e125d5f78a0bebac18475f5cf6a23a0a01c1dec239c7b
|
File details
Details for the file greenlight_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: greenlight_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f031f6f174dc6f0f9b8f8a61794d730af4f8eb751ace976bf8cfdc72411d02ff
|
|
| MD5 |
59ab296f6043883b790ebbd19d08c792
|
|
| BLAKE2b-256 |
1161464664ca2917dca5dc95ace0f5f0b19bd6855388483be84d3c87f73f53f8
|