n8n / any remote client → wigolo
config reference: point self-hosted n8n (or any remote MCP/REST client) at wigolo serve
Config reference. Nothing to run here — this page shows how to point a self-hosted n8n (or any remote MCP or REST client) at a
wigolo serveinstance. Every endpoint shown was verified against wigolo 0.2.0.
One wigolo serve process exposes three surfaces at once:
| Surface | URL | Speaks |
|---|---|---|
| MCP (streamable HTTP) | http://HOST:3477/mcp | MCP clients: n8n MCP Client node, agent frameworks |
| MCP (legacy SSE) | http://HOST:3477/sse (+ /messages) | older MCP clients |
| REST | http://HOST:3477/v1/{tool} | anything that can POST JSON |
Plus GET /health (open), GET /v1/tools and GET /openapi.json (token-gated
when a token is set).
1. Start the server
# reachable from other machines/containers -> a token is REQUIRED
WIGOLO_API_TOKEN=wigolo-demo-token npx wigolo serve --port 3477 --host 0.0.0.0wigolo is fail-closed here: binding a non-loopback host refuses to start
without a token (set WIGOLO_API_TOKEN, or point WIGOLO_API_TOKEN_FILE at
a docker/systemd secret). There is an explicit --allow-unauthenticated opt-out
for isolated networks — prefer the token.
Running n8n in docker on the same machine? --host 0.0.0.0 plus
http://host.docker.internal:3477 from inside the container is the usual pair.
2. Point n8n at it
MCP way (n8n >= 1.88, AI Agent + MCP Client Tool node):
- Endpoint:
http://YOUR-WIGOLO-HOST:3477/mcp - Server Transport: HTTP Streamable (pick SSE and the
/sseURL only for older builds) - Authentication: Bearer →
wigolo-demo-token
Your agent then sees all ten wigolo tools (search, fetch, crawl,
cache, extract, find_similar, research, agent, diff, watch) and
calls them like any other MCP tool.
Host-header rule (MCP endpoints only). As a DNS-rebinding guard,
/mcpand/sseaccept only requests whoseHostis loopback or exactly the--hostvalue the daemon was started with — anything else is a403 host_not_allowed, even with a valid token. Two clean setups:
- Bind the address clients will use.
--host 192.168.1.20and point n8n athttp://192.168.1.20:3477/mcp— Host matches, done. (A0.0.0.0bind does not whitelist your LAN IP.)- Front it with a proxy/tunnel that rewrites
Hostto127.0.0.1while forwarding to the daemon — the usual pattern for DNS names and public tunnels.The REST surface (
/v1/*) is not Host-gated — the bearer token is its gate — so the HTTP Request node path below works from anywhere as-is.
REST way (plain HTTP Request node): import
workflow.json — a manual trigger wired to an HTTP Request
node that POSTs /v1/search with the Authorization: Bearer header. Swap the
URL/token, replace the trigger with whatever starts your flow, and branch on
the JSON that comes back.
3. The same call, without n8n
Everything the workflow does is one curl — this is what "any remote client" means in practice:
curl -s -X POST http://YOUR-WIGOLO-HOST:3477/v1/search \
-H 'Authorization: Bearer wigolo-demo-token' \
-H 'Content-Type: application/json' \
-d '{"query": "typescript satisfies operator", "max_results": 3, "include_content": false}'And the MCP handshake, if you're wiring a custom MCP client (verified
response: "serverInfo": {"name": "wigolo", "version": "0.2.0"}):
curl -s -X POST http://YOUR-WIGOLO-HOST:3477/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'Authorization: Bearer wigolo-demo-token' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"my-client","version":"0.0.1"}}}'Notes for remote setups
- Browser requests are rejected on purpose. The MCP transport refuses any
request carrying an
Originheader (and non-allowlistedHostvalues), so a web page can't probe your daemon. Server-side clients only. - Tool timeouts:
crawl,research, andagentcan legitimately run minutes. Raise your n8n HTTP node timeout accordingly (the per-route server deadlines are inGET /openapi.json). - TLS / public exposure: put your usual reverse proxy or tunnel in front;
wigolo itself serves plain HTTP. For the MCP endpoints, have the proxy
rewrite
Hostto a loopback value (see the Host-header rule above); REST only needs the bearer token forwarded. - Want the full endpoint walk-through with live output? See rest-curl.