自托管 · 开源 · MCP 协议

为 AI 编程工具装上
联网搜索 + AI 问答与深度研究

linkseek 是一个开源自托管的远程 MCP 服务,通过 HTTP 为 Claude Code、Cursor 等 AI 工具提供「联网搜索」「网页正文获取」「AI 搜索问答」和「深度研究」能力,慢工具支持异步脱手执行,内置多 LLM Provider,配套网页端管理后台。

开始使用 自部署 查看源码

功能

9 个 MCP 工具

遵循 Model Context Protocol 标准,兼容所有支持 MCP 的 AI 编程工具。基础 4 个开箱即用;AI 问答增强 3 个与深度研究 1 个需在后台配置 LLM Provider 后自动启用;get_result 常驻,用于查询异步任务。

搜索 / 抓取

web_search
联网搜索关键词,返回结构化结果(标题、URL、摘要)。支持按分类、引擎、时间、语言过滤,结果按相关性 + 来源权威性排序,自动去重。若部署者在后台配置了商业兜底引擎(默认关闭),降级链全空时自动兜底,也可用 provider='cloud' 直打商业引擎。
参数:query maxResults timeRange language categories engines preferred_sites provider
web_fetch
获取网页正文并转为 Markdown,自动去噪(去除导航/广告/页脚),内置 SSRF 防护。
参数:url
web_search_and_fetch
搜索 + 批量抓取正文一步到位,并行获取前 N 个结果页面。遇到 403/429/SPA 空正文自动降级浏览器渲染。传 defer: true 可脱手异步执行。
参数:query fetchCount searchMaxResults timeRange language categories engines preferred_sites defer
web_fetch_render
无头浏览器(stealth 模式)渲染获取 JS 动态页面(SPA),再转 Markdown。可绕过基础 WAF / 反爬指纹拦截。渲染耗时较长,传 defer: true 可脱手异步执行。
参数:url defer

AI 问答增强 需配置 LLM Provider

web_search_answer
一次调用完成「搜索 + 抓取 + AI 分析」。综合多个来源页面内容,针对你的问题给出精简回答并标注来源编号,自动追加引用 URL 列表。传 defer: true 可脱手异步执行。
参数:query prompt model fetchCount searchMaxResults timeRange language categories engines preferred_sites defer
web_fetch_answer
获取指定 URL 正文,用 AI 针对你的问题直接给答案(而非返回原始 Markdown)。自动检测 WAF 挑战页并降级浏览器渲染。传 defer: true 可脱手异步执行。
参数:url prompt model defer
list_models
列出后台已启用的 AI 模型(Provider),含名称、协议、模型名。AI 工具可在 web_search_answer / web_fetch_answer 的 model 参数中切换。
参数:无

异步任务 get_result 常驻 · web_research 需 LLM Provider

web_research
深度研究一个中等复杂度的问题:服务端自主跑完整流水线——问题改写 → 多轮迭代搜索 → LLM 筛选来源 → 抓取正文(自动过 WAF)→ 长文分块蒸馏 → 充分性判断 → 综合回答(附来源列表)。纯异步:提交即返回 taskId,standard 档约 1-3 分钟。
参数:question depth(fast/standard/deep) model
get_result
查询异步任务的进度与结果:排队 / 执行中返回当前阶段进度(如「抓取中 2/5」),完成返回与同步版格式一致的内容。配合 defer: true 或 web_research 使用,结果保留 60 分钟。
参数:taskId

核心特性

使用方法

接入 AI 编程工具

linkseek 遵循标准 MCP Streamable HTTP 协议,配置一次即可永久生效。

关于公开实例:本站 https://linkseek.honlnk.com 是作者的个人部署,仅供自用和演示。 如果你希望使用 linkseek,推荐 自行部署(开源免费,5 分钟搞定)。 如需申请本站的测试 Key,可在 GitHub Issues 联系作者。

一键接入:把这段话复制给你的 AI

现在的 AI 编程工具(ZCode / Claude Code / Cursor 等)都能自己完成配置。把下面这段话原样复制给它即可:它会先向你要实例地址和 API Key(不知道怎么获取也没关系,它会告诉你三条途径),然后自动完成 MCP 配置和技能安装:

请帮我接入 linkseek——自托管的联网搜索/网页抓取 MCP 服务,并安装它的配套使用技能。

第一步:确认服务信息。检查我在对话中是否已给出「实例地址 + API Key」;如果没有,停下来向我询问,并顺带告诉我获取方式(三选一):
1. 自己部署:linkseek 开源免费,服务器或本地电脑均可(官网 https://linkseek.honlnk.com/ 有 5 分钟部署指南)
2. 借用他人部署:找已部署 linkseek 的人,请他在管理后台为你创建一对 API Key
3. 体验通道:到 github.com/honlnk/linkseek 的 Issues 联系作者申请体验用 Key(体验 Key 对应的实例地址即官网 https://linkseek.honlnk.com/)
拿到实例地址和 API Key 之前不要进行后续步骤。

第二步:添加远程 MCP 服务器。名称 linkseek,Streamable HTTP 传输,URL 为实例地址,鉴权头 Authorization: Bearer 你的Key。按你所在环境的标准方式写入:
- ZCode:~/.zcode/cli/config.json 的 mcp.servers,形如 {"type":"http","url":"...","headers":{"Authorization":"Bearer ..."}},timeoutMs 建议 200000(web_research 深度研究全程 1-3 分钟)
- Claude Code:claude mcp add --transport http linkseek 实例地址 --header "Authorization: Bearer Key"
- Claude Desktop / Cursor / Continue 等:mcpServers 配置节,url 与 headers 同上

第三步:安装配套技能——只装 linkseek-usage 这一个,不要把技能仓库里的其他技能装进技能目录。
git clone --depth 1 https://github.com/honlnk/honlnk-skills /tmp/honlnk-skills
把 /tmp/honlnk-skills/skills/linkseek-usage 复制到你的技能目录(ZCode:~/.agents/skills/;Claude Code:~/.claude/skills/;其他 Agent:对应的技能发现目录),完成后删除 /tmp/honlnk-skills。
该技能承载「怎么用好这套工具」:工具选型、查询写法、空结果应对、异步任务用法。

全部完成后重载配置或重启会话,确认工具列表出现 linkseek 的 web_search / web_fetch 等工具即为接入成功,并向我报告结果。
关于那段话里的技能:来自开源仓库 honlnk/honlnk-skills——用 Agent Skills 承载「怎么用好这套工具」的使用学说(工具选型三分法、空结果诊断应对、异步任务用法),由你的 AI 按需自动加载。偏好手动配置 MCP 的话,按下面三步走即可。

1. 获取 API Key

部署后在管理后台(https://admin.你的域名/)登录,在「Key 管理」新建一个 Key。明文 Key 只显示一次,请立即保存。

2. 配置 AI 工具

在 Claude Desktop / Claude Code / Cursor / Continue 等 AI 工具的配置文件中加入:

{
  "mcpServers": {
    "linkseek": {
      "url": "https://linkseek.honlnk.com",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}
同一个 URL,两种用途:AI 工具配的 URL 就是文档页地址本身。
浏览器 GET 这个地址 → 返回文档页(你正在看的这个);AI 工具 POST + Authorization 这个地址 → 走 MCP 服务。靠 HTTP 方法和鉴权头区分,零冲突。
Bearer Token:把 YOUR_API_KEY 换成你在后台创建的 Key(形如 wf_xxxxxxxx)。

3. 验证连通性

配置完成后,在 AI 工具里直接提问需要联网的问题,例如「搜索最新的 Node.js LTS 版本」。也可以用 curl 手动测试:

curl https://linkseek.honlnk.com \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-03-26",
      "capabilities": {},
      "clientInfo": {"name": "test", "version": "1.0"}
    },
    "id": 1
  }'

成功的话会返回包含 "result" 的 JSON-RPC 响应。

工具参数速查

工具必填可选
web_searchquerymaxResults timeRange(day/month/year) language categories engines preferred_sites
web_fetchurl—
web_search_and_fetchqueryfetchCount searchMaxResults timeRange language categories engines preferred_sites defer
web_fetch_renderurldefer
web_search_answerqueryprompt model fetchCount searchMaxResults timeRange language categories engines preferred_sites defer
web_fetch_answerurl promptmodel defer
list_models——
web_researchquestiondepth(fast/standard/deep) model
get_resulttaskId—

参数说明

参数说明
query搜索关键词
url目标网页 URL(仅 http/https)
prompt想了解的问题。AI 工具会据此回答,而非返回原始正文
model指定 AI 模型,传入 list_models 返回的 Provider 名称;不传用默认
defer设为 true 脱手执行:立即返回 taskId 不阻塞等待,之后用 get_result 取结果(四个慢工具可用)
taskId异步任务 ID(task_ 开头),来自 defer: true 调用或 web_research 的返回
depth研究深度:fast(1 轮搜索 3 来源,最快)/ standard(3 轮 5 来源,默认)/ deep(5 轮 8 来源,最全面)
categories搜索分类(逗号分隔)。常用:general / it / science / news / images
engines指定搜索引擎(逗号分隔)。常用:google / bing / ddg / wikipedia
preferred_sites优先域名列表(数组,最多 10 个),如 ["github.com", "react.dev"]
maxResults最大返回结果数(1-30,默认 10)
fetchCount抓取前 N 个结果正文(1-10,默认 3)
searchMaxResults搜索结果总数(1-30,默认 10)
timeRange时间范围:day / month / year
language搜索语言偏好,如 zh-CN / en / all;不传则自动判断

启用 AI 问答增强(可选)

基础搜索 / 抓取工具开箱即用(get_result 同样常驻,服务于异步任务)。如果你还想让 AI 工具直接获得「搜索即问即答」与深度研究能力,只需在后台配置一个 LLM Provider:

  1. 登录管理后台,进入「LLM Providers」页面。
  2. 新建 Provider,选择协议(OpenAI / Anthropic / Gemini / OpenAI Responses),填入 API Key、模型名,勾选「启用」。可设其中一个为「默认」。
  3. 保存后,应用会自动注册 web_search_answer、web_fetch_answer、web_research、list_models 四个工具,AI 工具即可调用。
多模型按需切换:可配置多个 Provider(如同时接 OpenAI 和 Gemini)。AI 在调用 web_search_answer / web_fetch_answer / web_research 时可通过 model 参数指定使用哪个;不传则用默认 Provider。

异步任务:defer 脱手 + web_research 深度研究

耗时调用不必同步干等,两种用法:

之后用 get_result 查询(建议间隔 15-30 秒,不要连续刷):排队 / 执行中会返回当前阶段进度(如「抓取中 2/5」「浏览器渲染中」),完成后返回与同步版格式一致的结果。

注意:任务结果保留 60 分钟,过期需重新提交;任务存于内存,服务重启后未完成任务会丢失。并发默认每 Key 3 / 全局 10,超出自动排队,可在管理后台「任务设置」调整,保存即生效。

公开 REST API

不走 MCP 的直接调用(/v1)

为浏览器端应用(如 NovAI)准备的薄 REST 适配层,复用同一套搜索与抓取核心。只暴露搜索和抓取,AI 问答工具不在此开放。

端点请求体说明
POST /v1/searchquery 必填;可选 maxResults timeRange language categories engines preferredSites返回 { query, count, results[] };无结果时附 hint 诊断建议
POST /v1/fetchurl 必填;可选 render: "auto"返回 { finalUrl, statusCode, content, truncated, renderedBy };render:"auto" 时普通抓取命中低质量判定(WAF 挑战页/极短/低文本密度)自动升级浏览器渲染,响应 renderedBy 为 http 或 browser

两种鉴权方式

版本要求:直连需实例版本含 /v1 公开端点(2026-09-24 07bba8f 及之后)。

限流与配额规则

规则默认值环境变量
匿名·每身份每日(加权)50 次PUBLIC_API_DAILY_LIMIT
匿名·每 IP 每日总闸(加权)200 次PUBLIC_API_IP_DAILY_LIMIT
匿名·浏览器渲染加权计 2 次(普通请求计 1)PUBLIC_API_RENDER_COST
匿名·突发限流10 次/分钟/身份PUBLIC_API_BURST_PER_MINUTE
Key·突发限流(不设日配额)30 次/分钟/KeyPUBLIC_API_KEY_BURST_PER_MINUTE

按服务器本地日期重置。超限返回 429 QUOTA_EXCEEDED / 429 RATE_LIMITED,错误体为 { "error": { "code", "message" } }。

错误码速查

HTTPcode含义
400BAD_REQUEST请求参数不合法
401UNAUTHORIZED / ORIGIN_REQUIREDKey 无效;或匿名请求缺少浏览器 Origin
403ORIGIN_FORBIDDEN / FETCH_SSRF_BLOCKED来源不在白名单;或目标 URL 命中 SSRF 防护
429QUOTA_EXCEEDED / RATE_LIMITED日配额用尽 / 突发限流
502SEARCH_FAILED / FETCH_FAILED上游失败(响应含 kind、upstreamStatus 细节)
503GREENLIGHT_UNAVAILABLE服务端未配置数据库,匿名通道关闭

curl 示例

# API Key 方式
curl https://linkseek.honlnk.com/v1/search \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "Node.js LTS 版本", "maxResults": 5}'

# 匿名绿灯(浏览器场景;curl 模拟需自带白名单内的 Origin)
curl https://linkseek.honlnk.com/v1/fetch \
  -H "Content-Type: application/json" \
  -H "Origin: https://novai.example.com" \
  -H "X-NovAI-Client-Id: 550e8400-e29b-41d4-a716-446655440000" \
  -d '{"url": "https://example.com", "render": "auto"}'
部署红线:开放匿名绿灯前,确认 browserless 容器网络已隔离(不通内网、不可达云元数据端点)——渲染路径的 SSRF 防护弱于普通抓取(DNS 由容器解析),容器网络隔离是兜底。

自部署

5 分钟自部署 linkseek

基于 Docker Compose,一台带 Docker 的 Linux 服务器即可。完整的部署脚本和配置已在 GitHub 仓库。

架构一览: 公网 :443 → Nginx (HTTPS) → linkseek-app:7300 (Node)
    ├── MySQL(Key / 用量 / LLM Provider / 任务设置存储)
    ├── SearXNG(元搜索后端)
    └── Browserless(无头浏览器,web_fetch_render / 降级渲染用)

前置要求

部署步骤

  1. 克隆仓库

    git clone https://github.com/honlnk/linkseek.git
    cd linkseek
  2. 配置 DNS

    在你的域名服务商添加两条 A 记录,指向你的服务器 IP:

    记录类型主机记录记录值
    Alinkseek你的服务器 IP
    Aadmin.linkseek你的服务器 IP

    验证:dig +short linkseek.example.com 应返回服务器 IP。

  3. 申请 SSL 证书

    使用 certbot 为两个域名申请一张证书:

    sudo certbot certonly --standalone \
      -d linkseek.example.com \
      -d admin.linkseek.example.com

    证书续期由 certbot 自带的 systemd timer 自动处理。若要无感续期,需配置 --deploy-hook 在续期后重载 Nginx。

  4. 配置环境变量

    从模板复制并填入你的密钥:

    cp .env.production.example .env.production

    编辑 .env.production,替换所有 __XXX__ 占位符:

    # 生成强随机值
    openssl rand -hex 32    # MYSQL_ROOT_PASSWORD
    openssl rand -hex 16    # MYSQL_PASSWORD(DATABASE_URL 里要一致)
    openssl rand -hex 32    # SESSION_SECRET
    
    # 自定义值
    ADMIN_PASSWORD=你的强密码
    关键:DATABASE_URL 里的密码必须与 MYSQL_PASSWORD 完全一致。
  5. 放置 Nginx 网关配置

    仓库提供了双层网关的示例配置(deploy/nginx/),按需修改域名和证书路径后部署。

    如果你已有反向代理(如 Caddy、Nginx Proxy Manager),直接把 linkseek.example.com 和 admin.linkseek.example.com 都反代到 linkseek-app:7300 即可——应用层会自动按 Host 分流。

  6. 启动服务

    docker compose -f docker-compose.prod.yml up -d
    
    # 查看启动状态
    docker compose -f docker-compose.prod.yml ps
    
    # 查看 app 日志(应看到迁移成功 + 管理员账号就绪)
    docker logs linkseek-app

    数据库迁移和管理员初始化在容器启动时自动执行(幂等),无需手动跑 seed。

  7. 验证

    # 文档页应返回 HTML
    curl https://linkseek.example.com/
    
    # 健康检查
    curl https://linkseek.example.com/health
    # {"status":"ok"}
    
    # MCP 握手(先在后台建 Key)
    curl https://linkseek.example.com \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json, text/event-stream" \
      -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}'

    浏览器打开 https://admin.linkseek.example.com/,用 ADMIN_PASSWORD 登录后台,新建 Key 后即可接入 AI 工具。

境外站点抓取慢?如果你的服务器在国内,建议给 SearXNG 和 Browserless 配置出站 HTTP 代理(如 mihomo/clash)。 在 docker-compose.prod.yml 的对应服务下加 HTTP_PROXY / HTTPS_PROXY 环境变量,并在 app 的 .env 里配置 NO_PROXY 把内网域名排除掉。详见仓库 docker-compose.prod.yml 注释。

日常维护

# 更新到最新版本
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d

# 查看日志
docker compose -f docker-compose.prod.yml logs -f app

# 数据库备份
docker exec linkseek-mysql mysqldump -u linkseek -pPASSWORD linkseek > backup.sql

# 停止(保留数据)
docker compose -f docker-compose.prod.yml down