P
punkpeye/mcp-proxy
HTTP and SSE proxy for MCP servers that speak stdio
View on GitHub ↗Link checked 2026-11-12 · HTTP 200 · opens the vendor's own site
Install & config
- Copy the command above
- Paste it as one entry under
mcpServersinclaude_desktop_config.json— local servers take command + args (example: clients) - Restart your client
Client config (built from the install command this repo gives)
{
"mcpServers": {
"punkpeye-mcp-proxy": {
"command": "npx",
"args": ["mcp-proxy"]
}
}
}Parsed from the README we fetched on 2026-11-04; we have not executed it.
command/args come from the install command the repository states. When it is ambiguous, the project README wins.
VS Code (.vscode/mcp.json - the key is servers)
{
"servers": {
"punkpeye-mcp-proxy": {
"command": "npx",
"args": ["mcp-proxy"]
}
}
}Same server, but VS Code keeps it under <code>servers</code>.
Claude Code (command line)
claude mcp add --transport stdio punkpeye-mcp-proxy -- npx mcp-proxy
Claude Code does not read a config file; add the server with this command.
Key names differ by client: Clients & CLI
- Source
- collected from the abordage/awesome-mcp list · type: MCP server
- Harvest history
- first seen 2026-11-05 · last seen 2026-11-14 · seen 10× · listed by 10 sources
- Score
- score 1,003 · 10 sources · mcp
- Install
npx mcp-proxy
FAQ (answers come from our records)
How do I install it?
The repository provides this install command:
npx mcp-proxy. It comes from the repository itself; we cannot guarantee it runs as-is in your client.Who is it for?
We filed it under these tags: MCP 服务. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
first catalogued 2026-11-05;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.
# MCP Proxy
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
A TypeScript streamable HTTP and SSE proxy for MCP servers that use stdio transport.
> [!NOTE]
> CORS is enabled by default with configurable options. See CORS Configuration for details.
> [!NOTE]
> For the inverse — giving a stdio-only client access to a remote MCP server, including the interactive OAuth flow — see mcp-remote.
> [!NOTE]
> MCP Proxy is what FastMCP uses to enable streamable HTTP and SSE.
## Protocol revisions
MCP Proxy serves protocol revision 2026-07-28 and the 2025-era revisions
(2024-10-07 through 2025-11-25) from the same endpoint. Every POST to the
streamable HTTP endpoint is classified by its own content — the 2026-07-28
revision puts a meta envelope on every request, and requests without one are
served by the 2025-era session machinery — so old and new clients share one URL
and neither has to know the other exists.
| | 2025-era clients | 2026-07-28 clients |
| /mcp (streamable) | yes, sessionful | yes, per-request |
| /sse (HTTP+SSE) | yes | n/a — no SSE transport exists |
| stdio (startStdioServer) | yes | not yet — see below |
| Change notifications | unsolicited | subscriptions/listen stream |
Progress notifications and cancellation cross the proxy in both eras: a
forwarded call carries the caller's abort signal, and relayed progress is
re-tagged with the token the caller sent.
Use --no-modern to serve only 2025-era clients; a 2026-07-28 client is then
answered by the 2025-era machinery, which does not recognise its request. The
modern leg lives on the streamable HTTP endpoint, so it is also absent when that
endpoint is disabled (--server sse, or streamEndpoint: null).
The upstream connection — the server MCP Proxy spawns — negotiates its own
revision independently, so any combination works. It uses the 2025 initialize
handshake by default; pass --upstreamProtocol auto to probe with
server/discover first (needed to front a 2026-07-28 server) or
--upstreamProtocol modern to require it.
bash
# front a 2026-07-28 stdio server, serving both eras downstream
npx mcp-proxy --upstreamProtocol auto -- my-modern-mcp-server
### What does not cross the proxy
These are consequences of one design decision — the proxy multiplexes every
downstream connection onto a single upstream connection — and are called out
rather than half-solved.
Anything that asks the client for input (elicitation, sampling, roots).
A 2025-era server pushes its request out of band, carrying nothing that says
which caller it belongs to, so relaying it means guessing whose screen to put
the prompt on. A 2026-07-28 upstream is not ambiguous that way — the request
comes back as the inputrequired result of the call the proxy forwarded —
so that direction is a question of scope, not correlation. Not implemented
yet.
Log messages, on both sides of a 2026-07-28 connection. That revision
carries logs per request: the client asks in a request's meta, the server
answers on that request's stream. The proxy can do neither half — downstream
it has no per-request log callback and its notification handlers are passed
nothing to attribute a log to; upstream it cannot ask for logs at all, so a
2026-07-28 server's per-request logging never fires. 2025-era clients still
> [!NOTE]
> CORS is enabled by default with configurable options. See CORS Configuration for details.
> [!NOTE]
> For the inverse — giving a stdio-only client access to a remote MCP server, including the interactive OAuth flow — see mcp-remote.
> [!NOTE]
> MCP Proxy is what FastMCP uses to enable streamable HTTP and SSE.
## Protocol revisions
MCP Proxy serves protocol revision 2026-07-28 and the 2025-era revisions
(2024-10-07 through 2025-11-25) from the same endpoint. Every POST to the
streamable HTTP endpoint is classified by its own content — the 2026-07-28
revision puts a meta envelope on every request, and requests without one are
served by the 2025-era session machinery — so old and new clients share one URL
and neither has to know the other exists.
| | 2025-era clients | 2026-07-28 clients |
| /mcp (streamable) | yes, sessionful | yes, per-request |
| /sse (HTTP+SSE) | yes | n/a — no SSE transport exists |
| stdio (startStdioServer) | yes | not yet — see below |
| Change notifications | unsolicited | subscriptions/listen stream |
Progress notifications and cancellation cross the proxy in both eras: a
forwarded call carries the caller's abort signal, and relayed progress is
re-tagged with the token the caller sent.
Use --no-modern to serve only 2025-era clients; a 2026-07-28 client is then
answered by the 2025-era machinery, which does not recognise its request. The
modern leg lives on the streamable HTTP endpoint, so it is also absent when that
endpoint is disabled (--server sse, or streamEndpoint: null).
The upstream connection — the server MCP Proxy spawns — negotiates its own
revision independently, so any combination works. It uses the 2025 initialize
handshake by default; pass --upstreamProtocol auto to probe with
server/discover first (needed to front a 2026-07-28 server) or
--upstreamProtocol modern to require it.
bash
# front a 2026-07-28 stdio server, serving both eras downstream
npx mcp-proxy --upstreamProtocol auto -- my-modern-mcp-server
### What does not cross the proxy
These are consequences of one design decision — the proxy multiplexes every
downstream connection onto a single upstream connection — and are called out
rather than half-solved.
Anything that asks the client for input (elicitation, sampling, roots).
A 2025-era server pushes its request out of band, carrying nothing that says
which caller it belongs to, so relaying it means guessing whose screen to put
the prompt on. A 2026-07-28 upstream is not ambiguous that way — the request
comes back as the inputrequired result of the call the proxy forwarded —
so that direction is a question of scope, not correlation. Not implemented
yet.
Log messages, on both sides of a 2026-07-28 connection. That revision
carries logs per request: the client asks in a request's meta, the server
answers on that request's stream. The proxy can do neither half — downstream
it has no per-request log callback and its notification handlers are passed
nothing to attribute a log to; upstream it cannot ask for logs at all, so a
2026-07-28 server's per-request logging never fires. 2025-era clients still
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/punkpeye-mcp-proxy/)
- Source
- awesome · https://github.com/punkpeye/mcp-proxy
- Browse by field
- MCP servers
- Listed by
- 10 independent sources
- added
- today
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.