# MCP proxy

> Register the shipped MCP server with the agent that already calls your tools. Every advertised tool is classified on connect.

Reading time: 7 min. Source: https://www.voidagent.tech/docs/mcp-proxy

> Built and shipped. The MCP server, with the VOID tool ready to register with the agents that call tools. Register the MCP server and the VOID tool with the agent that already calls your tools.

The proxy terminates the MCP transport, classifies every advertised tool on connect, and forwards a call only after policy allows it. Your agent points at VOID instead of the upstream server, and nothing else changes.

## Configure

```void.config.toml
[proxy]
listen = "127.0.0.1:8787"
upstream = ["mcp://stripe", "mcp://hubspot", "mcp://gmail"]

[policy]
file = "./void.policy.ts"
budget.irreversible = 2

[ledger]
sink = "s3://acme-void-ledger"
sign = true
```

## Run

```shell
$ void proxy --config void.config.toml
  + listening on 127.0.0.1:8787
  + upstream stripe    12 tools, 9 with inverses
  + upstream hubspot   17 tools, 16 with inverses
  + upstream gmail      8 tools, 5 with inverses
  ! 7 tools classified R3, budget applies
```

## Point your agent at it

```client.json
{
  "mcpServers": {
    "void": { "url": "http://127.0.0.1:8787" }
  }
}
```

- Streaming tool responses pass through without buffering the whole payload.
- Tool discovery classifies on connect, so classes exist before the first call.
- A vetoed call returns a structured refusal the agent can reason about, not a transport error.

---

This document is the markdown form of https://www.voidagent.tech/docs/mcp-proxy, published for agents that read
text rather than a rendered page. It is generated from the same data the page
renders, so the two cannot disagree.

