About shield
@bolyra/shield is a stdio authentication proxy that wraps MCP servers and enforces per-tool permission policies without changing server code. It verifies agent credentials, blocks replayed proofs, and emits audit receipts.
Key features
- 01Wrap an MCP server as a child process
- 02Verify credentials on tool calls
- 03Enforce per-tool permission policies
- 04Replay protection with nonce tracking
- 05Generate tool policies from discovered tools
- 06Emit audit receipts to stderr
Use cases
- 01Apply authentication to a local MCP server
- 02Restrict tool calls by permission level
- 03Create a deny-by-default policy from a server's tools
MCP support
Shield sits between an MCP client and server over stdio. It forwards initialization and tool-list requests, and verifies credentials and policies before forwarding tool calls.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project README@bolyra/shield
Stdio MCP auth proxy. Wrap any MCP server with per-tool permission enforcement, replay protection, and audit receipts. No code changes to the server.
Quick Start
npx @bolyra/shield --server "npx @modelcontextprotocol/server-filesystem /tmp" --dev
Shield spawns the target server as a child process, intercepts tools/call requests, verifies agent credentials, and enforces tool policies before forwarding.
Config
Create shield.yaml:
devMode: true
defaultDeny: true
nonce:
store: memory
maxProofAge: 300
receipts:
enabled: true
output: stderr
tools:
read_file:
requireBitmask: 1 # READ_DATA
write_file:
requireBitmask: 2 # WRITE_DATA
delete_file:
requireBitmask: 2 # WRITE_DATA
Then:
npx @bolyra/shield --server "node my-server.js" --config shield.yaml
Default Deny
By default, tools without a policy entry are allowed through (only authentication is checked). Set defaultDeny: true to reject any tools/call for tool names not listed in the tools: map.
Learn Mode
Don't write the config by hand — generate a safe starting point from the server's own tool list:
npx @bolyra/shield --learn --server "node my-server.js"
Learn mode spawns the server, performs the MCP handshake (initialize → notifications/initialized → tools/list, following pagination), then writes shield.yaml (or the --config path) with:
defaultDeny: true— anything the server adds later is rejected until you allow it- every discovered tool at
requireBitmask: 1(READ_DATA) — the least-privilege floor - a
_generatedprovenance block (source command + timestamp)
It never overwrites an existing config file, caps pagination at 50 pages, and times out after 30 seconds. The output is a starting point: review each tool and raise its requireBitmask (e.g. write_file → 2) before production use.
How It Works
Agent ←stdin/stdout→ Shield ←stdin/stdout→ MCP Server
│
verifyBundle()
checkToolPolicy()
nonceStore.markIfFresh()
emitReceipt()
initialize,tools/list,ping— forwarded without authtools/call— proof extracted fromparams._meta.bolyra, verified, policy checked, then forwarded or rejected- Receipts emitted to stderr (stdout is the MCP transport)
Permission Bitmask
| Bit | Permission |
|---|---|
| 0 | READ_DATA |
| 1 | WRITE_DATA |
| 2 | FINANCIAL_SMALL |
| 3 | FINANCIAL_MEDIUM |
| 4 | FINANCIAL_UNLIMITED |
| 5 | SIGN_ON_BEHALF |
| 6 | SUB_DELEGATE |
| 7 | ACCESS_PII |
Shield vs Gateway
| Shield | Gateway | |
|---|---|---|
| Transport | stdio | HTTP |
| Use case | Local MCP servers (Claude Desktop, Cursor) | Remote/networked MCP servers |
| How it wraps | Spawns child process | Reverse proxy |
| Proof source | params._meta.bolyra | Authorization: Bolyra <base64> header |
| Receipts | stderr | stdout/file/webhook |
Both use the same verifyBundle() and checkToolPolicy() from @bolyra/mcp.
Library Usage
import { createShield, loadShieldConfig } from '@bolyra/shield';
const config = loadShieldConfig('./shield.yaml');
const { child, stop } = createShield(config);
Links
- Gateway (HTTP) — for HTTP MCP servers
- MCP Middleware — for embedding auth in your server code
- Bolyra docs
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.