在用 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。加上这行就好了。如果你也遇到了同样的问题,希望这篇能帮你少走弯路。


Comments NOTHING