LABSCO SUMMARY
Start with --shadow: nothing is blocked while the audit database fills up.
That ordering is the whole adoption story — run for a few days, read the shadow report to see which calls enforcement would have stopped, and only then drop the flag. What it produces afterwards is a receipt rather than a log line, which matters precisely when the person asking does not trust your logs.
What it is
A governance layer for autonomous actions. Run it as a proxy in front of an MCP server and every tools/call is classified, scored and recorded before it reaches the upstream; allowed calls forward transparently, blocked ones return an MCP error.
What you get
- A proxy in front of any MCP server, with an audit database of every call
- Shadow mode — everything classified, scored and recorded, nothing blocked
- A shadow report showing what enforcement would have done before you enable it
- A verifiable receipt for each governed action, checkable by someone who does not trust your logs
- Starter policies for common MCP servers, so enforcement begins from a ready-made perimeter
- A Python decorator for governing your own functions, not only tool calls
- An HTTP API and a first-party TypeScript client for non-Python agents
Requirements
pip install vaara gives you the CLI, the MCP proxy and the server; brew installs the macOS CLI and menu-bar app, and npm install @vaara/client the TypeScript client. Run vaara-mcp-proxy with --upstream pointing at the server you want to front and --db for the audit database, then point your client at the proxy instead of the upstream.
Setup effort
One command — uvx --from vaara vaara-mcp-proxy --upstream npx --upstream-arg -y --upstream-arg @sap/mdk-mcp-server --db ./mcp_audit.db --shadow
USE CASES
01
Finding out what your agents are actually calling
Front the server in shadow mode and read the trail instead of guessing.
02
Stopping a tool call before it reaches the server
Drop shadow mode; disallowed calls come back to the client as an MCP error.
03
Answering an auditor after an incident
Hand over receipts that someone outside your organization can check themselves.
04
Governing your own code, not just MCP tools
Decorate the function that moves money and it goes through the same pipeline.
BEFORE YOU INSTALL
What to know first
Requires
- Python 3.10+
- uvx on PATH
- The MCP server you want to put Vaara in front of — the published example fronts @sap/mdk-mcp-server, launched with npx
INSTALLATION
Connect your client
Add the block to your client, or run the command directly.
Server setup
Configuration file
JSON
{
"mcpServers": {
"vaara": {
"command": "uvx",
"args": [
"--from",
"vaara",
"vaara-mcp-proxy",
"--upstream",
"npx",
"--upstream-arg",
"-y",
"--upstream-arg",
"@sap/mdk-mcp-server",
"--db",
"./mcp_audit.db",
"--shadow"
]
}
}
}@sap/mdk-mcp-server is the README's example upstream; yours is the MCP server you want Vaara in front of — the proxy will not start without an --upstream. --shadow classifies, scores and records every call without blocking; after a few days, vaara trail shadow-report --db ./mcp_audit.db shows what enforcement would have done, and dropping the flag enforces. ./mcp_audit.db is relative to the folder your client starts the process in, so give --db a full path.
uvx
TERMINAL
uvx --from vaara vaara-mcp-proxy --upstream npx --upstream-arg -y --upstream-arg @sap/mdk-mcp-server --db ./mcp_audit.db --shadow