Skip to main content
The mcp-tap CLI binary sits between any MCP client and server over stdio, transparently intercepting JSON-RPC messages without modifying them.

Usage

mcp-tap --api-key tap_abc123 -- npx -y @modelcontextprotocol/server-github
mcp-tap --api-key tap_abc123 --endpoint https://custom.endpoint/api/v1/events -- python my_server.py
With AARM receipt signing:
mcp-tap --api-key tap_abc123 --signing-key ./private-key.pem -- node server.js

CLI flags

FlagRequiredDescription
--api-key <key>YesProject API key
--endpoint <url>NoCustom event ingestion endpoint
--signing-key <path>NoPath to Ed25519 private key PEM for AARM signing
Everything after -- is treated as the MCP server command.

How it works

1

Spawn

Spawns the MCP server as a child process.
2

Forward

Forwards stdin from the client to the server, stdout from the server to the client.
3

Parse

Parses JSON-RPC messages on both pipes.
4

Emit tool events

For tools/call requests: records the request, matches it with the response, and emits a tool_call event with source: "mcp_proxy".
5

Emit lifecycle events

For other MCP lifecycle methods (e.g., initialize, tools/list): emits an mcp_lifecycle event.

Python module

The proxy also works as a Python module:
python -m mcp_tap --api-key tap_abc123 -- python my_server.py