-
Notifications
You must be signed in to change notification settings - Fork 118
Description
环境信息
- 操作系统: Windows 11
- Node.js 版本: v24.13.1
- open-websearch 版本: 1.2.7(通过
npx open-websearch@latest) - 运行模式: stdio
- 代理: 本地代理端口 10808(同时支持 SOCKS5 和 HTTP CONNECT)
问题一:系统代理环境变量与 USE_PROXY 内置代理机制冲突
问题描述
当系统设置了 HTTP_PROXY / HTTPS_PROXY 环境变量时,即使配置了 USE_PROXY=true + PROXY_URL,axios 会同时通过两条路径走代理,导致所有请求失败(ECONNRESET、socket hang up、503)。
复现步骤
- 系统环境变量设置了
HTTP_PROXY=http://127.0.0.1:10808、HTTPS_PROXY=http://127.0.0.1:10808 - MCP 配置中设置
USE_PROXY=true、PROXY_URL=http://127.0.0.1:10808 - 调用任何工具(search、fetchWebContent、fetchGithubReadme 等)均失败
原因分析
通过查看错误日志中的请求详情,发现 axios 通过 follow-redirects 处理代理时,请求对象显示:
hostname: '127.0.0.1',
port: '10808',
protocol: 'http:',
path: 'https://example.com/'
这说明 axios 自动读取了系统的 HTTP_PROXY / HTTPS_PROXY 环境变量,走了 axios 内部的代理路径(非 CONNECT 方法),而不是通过 HttpsProxyAgent(CONNECT 方法)。两种代理机制同时生效导致冲突。
即使设置 USE_PROXY=false,只要系统有 HTTP_PROXY / HTTPS_PROXY 环境变量,axios 仍然会自动走代理,导致请求行为不可控。
临时解决方案
在 MCP 配置的 env 中显式清空系统代理变量,让 open-websearch 只走 HttpsProxyAgent:
{
"env": {
"MODE": "stdio",
"USE_PROXY": "true",
"PROXY_URL": "http://127.0.0.1:10808",
"HTTP_PROXY": "",
"HTTPS_PROXY": ""
}
}建议修复
在 open-websearch 内部的所有 axios 请求中,显式设置 proxy: false,防止 axios 自动读取系统环境变量,确保只走 HttpsProxyAgent 这一条代理路径。示例:
const requestOptions: any = {
proxy: false, // 禁止 axios 自动读取 HTTP_PROXY 等环境变量
};
if (effectiveProxyUrl) {
const proxyAgent = new HttpsProxyAgent(effectiveProxyUrl);
requestOptions.httpAgent = proxyAgent;
requestOptions.httpsAgent = proxyAgent;
}当 USE_PROXY=false 时,同样应设置 proxy: false,确保在任何环境下行为一致。
问题二:fetchWebContent 在 Windows 上存在 SSL 证书验证失败
问题描述
在 Windows 上调用 fetchWebContent 访问 HTTPS 网站时,返回错误:
unable to get local issuer certificate
其他工具(search、fetchGithubReadme、fetchJuejinArticle)在相同环境下均正常工作,唯独 fetchWebContent 出现此问题。
原因分析
Node.js 使用内置的 CA 证书库,不读取 Windows 系统证书库。fetchWebContent 访问任意 HTTPS 站点,更容易遇到证书链不完整的情况。其他工具访问的是固定域名(GitHub API、掘金 API 等),证书链完整所以没问题。
临时解决方案
设置环境变量 NODE_TLS_REJECT_UNAUTHORIZED=0 可以解决,但会降低安全性。
建议
考虑在文档中注明 Windows 用户可能需要配置 NODE_EXTRA_CA_CERTS 环境变量,或在 fetchWebContent 的请求中提供可选的忽略证书验证选项。
附加建议:README 文档补充
1. Windows 平台的 stdio 配置示例
README 中 NPX Command Line 配置示例使用 "command": "npx",但在 Windows 上需要通过 cmd /c 包装才能正常运行,建议补充 Windows 示例:
{
"mcpServers": {
"web-search": {
"command": "cmd",
"args": ["/c", "npx", "-y", "open-websearch@latest"],
"env": {
"MODE": "stdio",
"DEFAULT_SEARCH_ENGINE": "bing",
"SYSTEMROOT": "C:/Windows"
}
}
}
}2. 代理与系统环境变量冲突的说明
建议在文档的代理配置部分提醒用户:如果系统已设置 HTTP_PROXY / HTTPS_PROXY 环境变量,需要在 MCP 配置中显式清空这些变量,避免与内置代理机制冲突。