bridge.mcp/v1 manifest — generated by bridge generate mcp or hand-edited — you serve it with either bridge mcp serve (stdio) or bridge mcp serve-http (HTTP). Both commands load the same manifest and expose the same tools. The difference is transport: stdio for local MCP clients that launch subprocesses, HTTP for remote or browser-based clients.
Before you begin
- A
bridge.mcp/v1manifest file (Generate an MCP server) - Any environment variables referenced in the manifest set in your shell
- For DB-backed manifests:
bridge.yamlin the manifest’s directory with the named provider configured
Stdio
- reads and validates the manifest
- resolves environment variables referenced in the manifest
- for DB-backed manifests, locates
bridge.yamlin the manifest’s directory and connects to the named provider - begins serving
tools/listandtools/callrequests over stdin/stdout
HTTP
127.0.0.1:8080 by default. Startup follows the same steps as stdio: manifest validation, env var resolution, and provider connection happen before the server accepts any requests.
Endpoints
| Path | Method | Purpose |
|---|---|---|
/mcp | POST | MCP endpoint (Streamable HTTP transport) |
/healthz | GET | Liveness check — returns 200 when the server process is running |
/readyz | GET | Readiness check — returns 200 when the server can handle MCP requests |
Bind address
Change the address and port the server listens on:--bind value can also be set with the BRIDGE_MCP_BIND environment variable.
Public URL
If you are running behind a proxy or exposing the server externally, set a public URL so it appears correctly in health output and startup logs:/mcp, /healthz, and /readyz to the public URL in its output.
CORS
Requests with noOrigin header (non-browser clients) are always accepted. Browser-originated requests must have an Origin that is either a loopback address or one explicitly allowed:
--allow-origin to allow multiple origins.
Request limits
| Flag | Default | Description |
|---|---|---|
--max-header-bytes | 32768 (32 KB) | Max HTTP header bytes per request |
--max-body-bytes | 1048576 (1 MB) | Max HTTP body bytes per request |
--read-timeout-secs | 15 | Budget for reading a request off the wire |
--request-timeout-secs | global --timeout | Budget for handling a request after it is read |
BRIDGE_MCP_* environment variables.
Graceful shutdown
The server listens for SIGTERM and SIGINT. On receipt, it stops accepting new connections and waits up to--shutdown-grace-secs (default 10) for in-flight requests to complete before exiting.
Environment variables at runtime
Bridge resolves environment variables from the process environment when the server starts, not when the manifest was generated. For OpenAPI-backed manifests, set:- the variable named in
--base-url-env— the API base URL - the variable named in
--bearer-env— the bearer token, if auth is configured
bridge.yaml and expands any ${VAR_NAME} references in it.
Bridge does not load .env files. Set variables in your shell, your process manager, or your deployment environment before starting the server.
Wire into an MCP client
Claude Desktop
Theclient_snippet in bridge generate mcp output is ready to paste directly. Open your Claude Desktop config — usually at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS — and add:
Cursor
Add the samemcpServers block to your Cursor MCP settings. The command and args shape is identical.
Any HTTP MCP client
For clients that connect over HTTP rather than launching a subprocess, point them at the/mcp endpoint:
Related pages
Generate an MCP server
Generate the manifest that this page serves.
MCP manifest
See the full bridge.mcp/v1 format and what each field controls.
Commands
Full flag reference for bridge mcp serve and bridge mcp serve-http.
Bridge, MCP, and A2A
Understand where Bridge-hosted MCP servers fit in the broader agent stack.