Local MCP
A local MCP server runs on each person's computer. The Willow gateway does not start the process. Use it when the server can only work on the device: it reads local files, talks to a desktop app, or listens on localhost.
Willow still decides who can use the server and which tools are enabled, and it still records the call. The @mcp-s/mcp client on the machine starts the server, asks the gateway for its configuration, and reports each tool call back.
A Command (stdio) server is not a local MCP by itself. With Local MCP off, the gateway starts that command. Turn Local MCP on only when the process has to run on the user's machine.
Turn it on
While adding a custom server, open Advanced and turn on Local MCP only. The same switch is under Advanced Options when you add a server from the MCP registry.
On a server that already exists, open it and go to Settings > Proxy Configuration > Local MCP.
Publish the server and assign it to a group the same way you would any other MCP server. A draft server stays hidden from users.
What changes
| On the gateway | Local MCP | |
|---|---|---|
| Where the process runs | On the Willow gateway | On each user's machine, via npx -y @mcp-s/mcp |
| How users connect | Streamable HTTP, or STDIO | STDIO only |
| Configuration | Stays on the gateway. Vault secrets are resolved there. | The resolved configuration, including vault secrets, is sent to the client. |
| Gateway checks | Rate limits, conditions, and guards run on the call | Those checks are skipped. The tool call flow marks them bypassed. |
| Tool list | Willow lists tools from the upstream server | The client discovers tools on the device and syncs them. Tools you already disabled stay disabled. |
| Resources and prompts | Proxied when those toggles are on | Not proxied |
A tool call sent to a local server over HTTP fails. The gateway tells the client to use STDIO.
What users see
In the portal the server is marked Local. The MCP Servers list can be filtered to Local Only. Use opens the connect dialog with STDIO only. Streamable HTTP and the Willow CLI option are not offered for that server.
The dialog fills in a config that starts the Willow client and points it at this server. It runs npx -y @mcp-s/mcp with three environment variables:
| Variable | Value |
|---|---|
ORG | Your organization slug. The client puts this on every audit record. |
BASE_URL | Your gateway. |
MCP | This server's slug. |
Copy the block from the dialog rather than writing it by hand. The user's machine needs Node.js, because the client is started with npx, plus whatever the server itself needs locally (the desktop app running, the files present, localhost reachable).
See Local MCP servers for the end-user steps.
Security
The resolved MCP configuration is sent to the client. Vault placeholders and API keys in that configuration are filled in before it leaves the gateway, so those values exist on the user's machine. Gateway rate limits, conditions, and guards do not run on the tool call. Treat a local MCP like code you are willing to run on every machine that can connect to it.
Group membership still decides who receives the server, and the tool list the client syncs still drops tools you have disabled.
AI Discovery
A server connected through @mcp-s/mcp is a managed server. The scan agent recognizes that runner, so it does not count the connection as a shadow MCP. When a policy rewrites an unmanaged server onto a local MCP, the config it writes on the device is that same STDIO runner, including when the original server was HTTP.