searxng-mcp服务配置后报错403解决

发布于 17 小时前 建站笔记 664 字 预计阅读时间: 3 分钟


AI 摘要

解锁SearXNG与AI搜索引擎的完美融合,揭秘403错误背后的真相!只需一行配置,让你的AI搜索体验飞升!
内容纲要

在用 Claude Desktop / Cline 接入 SearXNG 作为 AI 搜索引擎时,明明 SSE 连接正常,搜索却一直报 403 Forbidden。原因是默认配置没开 JSON。

背景

SearXNG 是一个开源的元搜索引擎,可以把 Google、Bing、DuckDuckGo 等十几个搜索引擎的结果聚合在一起。近年来随着 AI Agent 工具链的发展,越来越多的人想把 SearXNG 接入 MCP(Model Context Protocol),让 Claude Desktop、Cline、Cursor 等 AI 客户端直接调用网络搜索能力。

流程很美好:

AI 客户端 → SSE 连接 → SearXNG MCP Server → 请求 JSON 搜索 → 聚合结果 → 返回给 AI

但实际操作时,很多人(包括我)在最后一步卡住了——搜索请求返回 403。

问题现象

配置好 SearXNG 和 MCP 客户端后,测试连接:

# SSE 端点可达,返回 200
curl -I http://localhost:8080/sse
# HTTP/1.1 200 OK
# Content-Type: text/event-stream; charset=utf-8

SSE 连接通道完全正常。但一执行搜索,MCP 客户端就报错:

🚫 SearXNG server Error (403): Authentication required or IP blocked

错误信息很具有误导性——让人以为是 IP 被封或缺了什么认证 token,实际上都不是。

根因

翻了 SearXNG 的文档和 GitHub issues,最终找到原因:

SearXNG 默认配置下,search.formats 只有 html,不支持 json 格式。

而 MCP Server 在搜索时请求的是 JSON 格式的结果。SearXNG 发现你请求了一个它不支持的格式,直接拒绝——返回 403。

就这么简单。

解决方案

编辑 SearXNG 的 settings.yml,在 search.formats 下加一行 json

# /etc/searxng/settings.yml(或你自定义的配置路径)
search:
  formats:
    - html
    - json    # ← 加上这一行

保存,重启 SearXNG,搞定。

Docker 部署的完整操作

# 1. 启动 SearXNG 容器
docker run -d --name searxng -p 8080:8080 searxng/searxng

# 2. 把容器内的配置文件拷出来
docker cp searxng:/etc/searxng/settings.yml ./settings.yml

# 3. 编辑 settings.yml,在 search.formats 下添加 json(如上)

# 4. 把改好的配置文件拷回容器
docker cp ./settings.yml searxng:/etc/searxng/settings.yml

# 5. 重启容器
docker restart searxng

总共 5 条命令,不到一分钟。

验证

curl "http://localhost:8080/search?q=hello&format=json" | head -c 300

看到类似这样的 JSON 输出,就说明修好了:

{"query": "hello", "number_of_results": 4210000, "results": [{"title": "Hello...", ...}]}

总结

整个问题就是一行配置的事:

search:
  formats:
    - html
    - json    # 就这一行

SearXNG 默认只开 HTML 格式,MCP 需要 JSON 格式,两边对不上就报 403。加上这行就好了。如果你也遇到了同样的问题,希望这篇能帮你少走弯路。