尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

wigolo serve 远程接入指南:用 n8n 或其他 MCP/REST 客户端调用本地优先的搜索、抓取与研究工作流

wigolo serve 远程接入指南:用 n8n 或其他 MCP/REST 客户端调用本地优先的搜索、抓取与研究工作流 wigolo serve 远程接入指南用 n8n 或其他 MCP/REST 客户端调用本地优先的搜索、抓取与研究工作流【免费下载链接】wigoloThe go-to web for your AI coding agent — local-first search, fetch, crawl research over MCP. No API keys, no cloud, $0/query. Public beta.项目地址: https://gitcode.com/GitHub_Trending/wi/wigolo本篇指南聚焦于将自托管 n8n或任意支持 MCP 与 REST 的远程客户端接入wigolo serve守护进程系统讲解如何启动一个可被跨机器访问的 wigolo 实例、如何通过 n8n 的 MCP Client 与 HTTP Request 两种节点消费其全部工具能力以及远程部署时必须理解的认证、Host 校验与超时纪律。读完本文你将掌握一套可复制、可验证的远程客户端 → wigolo接入方案并能够基于 curl 与 MCP 握手请求完成最小化的连通性验证。本文档为配置参考Config reference本身不包含需要运行的服务代码。文中所有端点与命令均基于 wigolo 0.2.0 验证对应的完整示例可参考仓库中的 examples/n8n-remote-mcp 目录。一个wigolo serve进程同时暴露三个接口面与仅在 stdio 模式下作为单进程 MCP Server 使用的场景不同wigolo serve启动的是一个常驻 HTTP 守护进程同一端口上同时承载三种协议形态。无论你手里的是哪种客户端都可以通过同一个进程接入接口面URL协议/客户端MCPstreamable HTTPhttp://HOST:3477/mcpn8n MCP Client 节点、各类 Agent 框架MCPlegacy SSEhttp://HOST:3477/sse配合/messages较老版本的 MCP 客户端RESThttp://HOST:3477/v1/{tool}任何能 POST JSON 的程序此外还提供两个辅助端点GET /health完全开放供探活探针使用GET /v1/tools与GET /openapi.json在配置了 token 之后受 bearer token 保护前者返回全部工具与端点的发现索引后者是完整的机器可读 OpenAPI 3.1 契约可据此生成 SDK 或校验请求合法性。从源码路由可以看到这三类路径的分派逻辑集中在一个 HTTP server 内src/daemon/http-server.ts/health直接走健康探针/v1/*、/openapi.json、/compat/firecrawl*前缀统一委托给 REST 路由器/mcpPOST/GET/DELETE与/sse、/messages则分别进入 Streamable HTTP 与 SSE 两种 MCP transport。这也解释了为什么一个进程、三种面在实现上是天然成立的它们共享同一套Subsystems搜索引擎、浏览器池、抓取路由器等只是传输层不同。1. 启动一个可被其他机器访问的 serve 实例要让 n8n尤其是运行在 Docker 容器中的 n8n能够访问 wigolo必须让守护进程监听非回环地址同时配置认证 token# 可被其他机器/容器访问 - 必须配置 token WIGOLO_API_TOKENwigolo-demo-token npx wigolo serve --port 3477 --host 0.0.0.0这里的关键点是 wigolo 在此场景下是fail-closed默认拒绝的绑定非 loopback 主机时如果没有配置 token进程会直接拒绝启动。token 有两种提供方式环境变量WIGOLO_API_TOKEN直接内联环境变量WIGOLO_API_TOKEN_FILE指向一个文件路径标准的 docker/systemd secret 模式启动时读取该文件的修剪后内容作为 token文件缺失或不可读按未配置处理。这一行为在源码中有明确的实现依据src/daemon/rest/auth.ts 中的resolveApiToken()规定WIGOLO_API_TOKEN优先否则读取WIGOLO_API_TOKEN_FILE指向的文件而evaluateBindGate()则实现绑定门禁只有当绑定地址是 loopback、或者已配置 token、或者显式传入allowUnauthenticated三者之一成立时才放行启动。对于完全隔离的私有网络存在一个显式逃生口--allow-unauthenticated等价于环境变量WIGOLO_SERVE_ALLOW_UNAUTHENTICATED1。但文档与实现都明确建议优先使用 token开放模式会跳过 REST 请求的 Host 校验安全面显著收窄。如果你的 n8n 运行在与 wigolo 相同宿主机的 Docker 容器内最常见的组合是wigolo 侧--host 0.0.0.0监听所有接口n8n 容器侧http://host.docker.internal:3477指向宿主机。附带的慢速请求防护远程暴露 HTTP 服务时慢速连接slow-loris是必须考虑的问题。wigolo serve内置了两层超时保护src/daemon/http-server.ts请求超时默认 120 秒requestTimeout请求头超时默认 60 秒headersTimeout均可用环境变量覆盖WIGOLO_SERVE_REQUEST_TIMEOUT_MS180000 WIGOLO_SERVE_HEADERS_TIMEOUT_MS90000 \ npx wigolo serve --port 3477 --host 0.0.0.02. 对接 n8nMCP 方式推荐n8n 1.88如果你的 n8n 版本不低于 1.88最直接的方式是使用AI Agent 节点 MCP Client Tool 节点让 Agent 像调用本地工具一样调用 wigolo 的全部能力。在 n8n 中新建 MCP 客户端时的关键配置Endpoint端点http://YOUR-WIGOLO-HOST:3477/mcpServer Transport服务器传输HTTP Streamable仅当你的 n8n 构建版本较旧、不支持 Streamable HTTP 时才选择SSE并配合/sseURL 使用Authentication认证Bearer→ 填写wigolo-demo-token即启动时设置的WIGOLO_API_TOKEN连接建立后Agent 会看到 wigolo 的全部十个工具并可直接调用无需任何额外适配工具名能力search多引擎搜索并返回带排序、证据与摘要的结果fetch抓取单个页面返回干净 Markdowncrawl按站点地图/链接递归抓取站点cache缓存操作查询、统计、清理extract从 URL 或文本中抽取结构化数据find_similar基于本地索引查找相似内容research多轮搜索 综合生成研究报告agent自主多步调研代理diff对比两段内容的差异watch注册/查询内容变更监控任务这十个工具在 src/server.ts 的createMcpServer()中逐一注册为 MCPtools每个工具的 JSON Schema 定义在 src/server/tool-schemas.tsREST 面的/v1/{tool}路由与 MCP 注册共用同一套工具集合src/daemon/rest/router.ts 中的TOOLS集合因此两种接入方式的能力完全一致。Host-header 规则仅 MCP 端点适用这是远程接入时最容易踩的坑。作为 DNS-rebindingDNS 重绑定防护/mcp与/sse端点只接受Host头为loopbacklocalhost/127.0.0.1/[::1]或恰好等于守护进程启动时--host参数值的请求。其他任何 Host 值都会被直接拒绝为403 host_not_allowed——即使携带了有效的 token 也不例外。实现见 src/daemon/http-server.ts 的isAllowedHost()与mcpTransportRejected()注意0.0.0.0绑定并不会把你的局域网 IP 加入白名单。两种干净的配置方案直接绑定客户端将要访问的地址。例如--host 192.168.1.20然后让 n8n 指向http://192.168.1.20:3477/mcp——Host 精确匹配直接可用。用代理/隧道改写 Host。由反向代理或公网隧道把 Host 重写为127.0.0.1再转发给守护进程——这是使用域名和公网隧道的常规模式。而 REST 面/v1/*不受 Host 门控其唯一门禁就是 bearer token见 src/daemon/rest/auth.ts 的checkAuth()token 模式下直接校验 Bearer、跳过 Host 白名单因此下面要讲的 HTTP Request 节点方案可以从任意位置直连。3. 对接 n8nREST 方式普通 HTTP Request 节点如果你不想依赖 MCP 客户端节点或者 n8n 版本较旧可以直接用内置的HTTP Request 节点走 REST 面。仓库提供了现成的工作流模板 workflow.json一个 Manual Trigger手动触发器连接到 HTTP Request 节点后者以POST方法向http://YOUR-WIGOLO-HOST:3477/v1/search发送 JSON 请求体并携带两个请求头Authorization: Bearer wigolo-demo-token Content-Type: application/json请求体示例对应模板中的jsonBody{ query: typescript satisfies operator, max_results: 3, include_content: false }导入工作流后需要做的三件事把 URL 中的YOUR-WIGOLO-HOST替换为你的 wigolo 实际地址Docker 场景下通常是host.docker.internal把 token 替换为你实际设置的WIGOLO_API_TOKEN值把 Manual Trigger 替换为任何能触发流程的事件定时器、Webhook、其他节点输出并在后续节点中按返回 JSON 的字段分支处理。关于search工具请求参数可以在 src/server/tool-schemas.ts 的SEARCH_TOOL_SCHEMA中查到完整定义max_results默认 5、最大 20include_content控制是否抓取结果页全文默认 true设为 false 只取摘要成本更低max_fetches可单独控制最多对前几个结果做深度读取。注意 serve 模式下这些参数还会受资源钳制表约束见下文远程部署注意事项。4. 同一调用不经过 n8ncurl 直连验证工作流本质上只是一次 HTTP 调用。在接入 n8n 之前用 curl 先验证连通性是最快的排障手段——这也正是任意远程客户端的实际含义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}如果你要自研一个自定义 MCP 客户端可以直接用 curl 完成 MCP 握手initialize验证服务端身份信息——已确认的响应为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}}}serverInfo中的 name 与 version 在 src/server.ts 的new Server({ name: wigolo, version: SERVER_VERSION }, ...)处注册SERVER_VERSION直接读取package.json的version字段。完整的端点走读与真实输出示例包括/health、/v1/tools的jq输出以及带/不带 token 的 401/200 对比可以参考仓库中的 examples/rest-curl 示例其配套的 demo.sh 脚本会在127.0.0.1:3477启动守护进程、依次调用各端点并在退出时回收。5. 远程部署注意事项浏览器请求被刻意拒绝MCP transport 会拒绝任何携带Origin头的请求同时拒绝未在白名单内的Host值因此网页无法探测你的守护进程。这是一层额外的纵深防御浏览器发起的跨站请求天然带有Origin服务端据此一票否决。所以请务必使用服务端客户端n8n、curl、Agent 框架接入。这一检查在 token 模式下同样生效见 src/daemon/http-server.ts 的mcpTransportRejected()——Origin检查位于所有其他判断之前。工具超时crawl、research、agent 可能需要数分钟crawl、research、agent是长耗时工具合法运行时长可达分钟级。使用 n8n 时务必调高 HTTP 节点的超时设置。从 src/daemon/rest/limits.ts 的DEADLINES表可以看到每个路由的默认响应截止时间工具默认截止时间search/cache/diff/find_similar60 秒fetch/extract/watch120 秒crawl/research/agent300 秒这些值可以统一通过WIGOLO_SERVE_TIMEOUT_SCALE按比例放大单路由的精确截止时间会以maximum约束形式暴露在GET /openapi.json中。需要特别说明的是截止时间到达后返回的是 504route_timeout但底层工作并不会被取消——并发槽会一直持有到工作真正结束见 src/daemon/rest/router.ts 的runUnderSlotAndDeadline()注释以免滞留任务累积超过并发上限。TLS / 公网暴露wigolo 自身只提供纯 HTTP。公网场景下请在前面放置你惯用的反向代理或隧道对于MCP 端点/mcp、/sse让代理把Host改写为 loopback 值见上文 Host-header 规则否则会得到403 host_not_allowed对于REST 端点只需原样转发 bearer token 即可无 Host 限制。serve 模式的资源纪律REST 面REST 面在分派前还做了一系列资源约束src/daemon/rest/limits.ts请求体大小上限默认 1 MiBdiff、extract默认 5 MiB可用WIGOLO_SERVE_MAX_BODY_BYTES覆盖超限返回 413并发上限默认同时处理 16 个请求可用WIGOLO_SERVE_MAX_CONCURRENCY覆盖超限返回 429参数钳制表crawl.max_pages ≤ 200、crawl.max_depth ≤ 5、agent.max_time_ms ≤ 240000、search.query数组形式≤ 10 项钳制值同时注入 OpenAPI 文档src/daemon/rest/openapi.ts 的injectClampBounds()保证文档承诺的边界与实际强制执行的边界永不分叉。另外serve 模式下的 MCP 传输还具备会话管理Streamable HTTP 使用mcp-session-id头维护会话支持DELETE /mcp关闭会话SSE 模式则通过/messages?sessionId...回传消息。这些细节在接入自定义客户端排查 400 会话错误时值得留意。小结至此你应当掌握了三条完整的远程接入路径n8n MCP Client 节点HTTP Streamable Bearer推荐新版本 n8n、n8n HTTP Request 节点POST/v1/{tool}走 workflow.json 模板、以及任意自定义客户端curl 验证 OpenAPI 契约驱动。接入时的三个关键决策点是启动时是否配置了 tokenfail-closed 门禁、MCP 端点的 Host 是否匹配白名单、以及长耗时工具的超时是否已调高。将这几项对齐后你的 n8n 工作流就能以零 API Key、零云端依赖的方式获得搜索、抓取、爬取与研究能力。【免费下载链接】wigoloThe go-to web for your AI coding agent — local-first search, fetch, crawl research over MCP. No API keys, no cloud, $0/query. Public beta.项目地址: https://gitcode.com/GitHub_Trending/wi/wigolo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表