Skip to content

Commit b5eba3d

Browse files
committed
fix(docker): MCP路由绕过Basic认证以支持MCP Inspector连接
修复问题: - Docker部署启用ACCESS_PASSWORD后,/mcp路由继承了Basic认证配置 - 导致MCP Inspector连接时返回401错误 技术方案: - 在nginx.conf的/mcp location中添加auth_basic off指令 - MCP协议本身不支持HTTP Basic认证,需要明确禁用 - Web应用路由的访问控制保持不变 文档更新: - 在MCP服务器用户文档中添加故障排除说明 - 包含中英文文档和mkdocs文档 关联issue: #169
1 parent 22a1e4a commit b5eba3d

File tree

4 files changed

+94
-6
lines changed

4 files changed

+94
-6
lines changed

docker/nginx.conf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ server {
2828

2929
# MCP服务器代理
3030
location /mcp {
31+
# 禁用Basic认证,MCP服务器无需Web访问认证
32+
auth_basic off;
33+
3134
proxy_pass http://localhost:3000;
3235
proxy_http_version 1.1;
3336
proxy_set_header Upgrade $http_upgrade;

docs/user/mcp-server.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,25 @@ echo $VITE_OPENAI_API_KEY
183183
MCP_DEFAULT_MODEL_PROVIDER=openai # 不是 OpenAI
184184
```
185185

186-
#### 4. Claude Desktop 连接失败
186+
#### 4. Docker 部署时 401 认证错误
187+
188+
**问题**: 使用 Docker 部署并启用了 `ACCESS_PASSWORD` 后,MCP Inspector 连接失败,返回 401 错误
189+
190+
**原因**: Docker 部署启用密码保护后,Nginx 会对所有路由启用 Basic 认证,包括 `/mcp` 路由
191+
192+
**解决方案**:
193+
- **已修复(v1.4.0+)**`/mcp` 路由已配置为绕过 Basic 认证
194+
- **旧版本临时方案**
195+
1. 不设置 `ACCESS_PASSWORD` 环境变量
196+
2. 或使用网络隔离(如仅在内网使用)
197+
3. 或直接暴露 3000 端口:`docker run -p 3000:3000 ...`
198+
199+
**技术说明**:
200+
- MCP 协议本身不支持 HTTP Basic 认证
201+
- 新版本在 `docker/nginx.conf` 中为 `/mcp` 路由添加了 `auth_basic off;`
202+
- Web 应用访问仍然受密码保护
203+
204+
#### 5. Claude Desktop 连接失败
187205

188206
**解决步骤**
189207
1. 确认 MCP 服务器正在运行

docs/user/mcp-server_en.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,25 @@ echo $VITE_OPENAI_API_KEY
183183
MCP_DEFAULT_MODEL_PROVIDER=openai # not OpenAI
184184
```
185185

186-
#### 4. Claude Desktop Connection Failure
186+
#### 4. Docker Deployment 401 Authentication Error
187+
188+
**Issue**: After enabling `ACCESS_PASSWORD` in Docker deployment, MCP Inspector connection fails with 401 error
189+
190+
**Cause**: When password protection is enabled in Docker deployment, Nginx enables Basic authentication for all routes, including the `/mcp` route
191+
192+
**Solutions**:
193+
- **Fixed (v1.4.0+)**: The `/mcp` route is now configured to bypass Basic authentication
194+
- **Workarounds for older versions**:
195+
1. Don't set the `ACCESS_PASSWORD` environment variable
196+
2. Use network isolation (e.g., internal network only)
197+
3. Expose port 3000 directly: `docker run -p 3000:3000 ...`
198+
199+
**Technical Details**:
200+
- The MCP protocol itself doesn't support HTTP Basic authentication
201+
- The new version adds `auth_basic off;` for the `/mcp` route in `docker/nginx.conf`
202+
- Web application access remains password-protected
203+
204+
#### 5. Claude Desktop Connection Failure
187205

188206
**Solution Steps**:
189207
1. Confirm MCP server is running

mkdocs/docs/zh/user/mcp-server.md

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,57 @@ npx @modelcontextprotocol/inspector
137137

138138
### 常见问题
139139

140-
- 端口占用:更换端口或停止占用进程
141-
- API 密钥无效:检查是否配置了至少一个有效密钥
142-
- 模型提供商不匹配:校验 `MCP_DEFAULT_MODEL_PROVIDER`
143-
- Claude Desktop 连接失败:检查服务运行状态、URL、防火墙与日志
140+
#### 端口占用
141+
更换端口或停止占用进程
142+
143+
```bash
144+
# Windows 查看端口占用
145+
netstat -ano | findstr :3000
146+
147+
# 更换端口
148+
MCP_HTTP_PORT=3001 pnpm mcp:dev
149+
```
150+
151+
#### API 密钥无效
152+
检查是否配置了至少一个有效密钥
153+
154+
```bash
155+
# 确保至少配置一个有效的 API 密钥
156+
echo $VITE_OPENAI_API_KEY
157+
```
158+
159+
#### 模型提供商不匹配
160+
校验 `MCP_DEFAULT_MODEL_PROVIDER`
161+
162+
```bash
163+
# 确保提供商名称正确
164+
MCP_DEFAULT_MODEL_PROVIDER=openai # 不是 OpenAI
165+
```
166+
167+
#### Docker 部署时 401 认证错误
168+
169+
**问题**: 使用 Docker 部署并启用了 `ACCESS_PASSWORD` 后,MCP Inspector 连接失败,返回 401 错误
170+
171+
**原因**: Docker 部署启用密码保护后,Nginx 会对所有路由启用 Basic 认证,包括 `/mcp` 路由
172+
173+
**解决方案**:
174+
- **已修复(v1.4.0+)**`/mcp` 路由已配置为绕过 Basic 认证
175+
- **旧版本临时方案**
176+
1. 不设置 `ACCESS_PASSWORD` 环境变量
177+
2. 或使用网络隔离(如仅在内网使用)
178+
3. 或直接暴露 3000 端口:`docker run -p 3000:3000 ...`
179+
180+
**技术说明**:
181+
- MCP 协议本身不支持 HTTP Basic 认证
182+
- 新版本在 `docker/nginx.conf` 中为 `/mcp` 路由添加了 `auth_basic off;`
183+
- Web 应用访问仍然受密码保护
184+
185+
#### Claude Desktop 连接失败
186+
检查服务运行状态、URL、防火墙与日志
187+
188+
**解决步骤**
189+
1. 确认 MCP 服务器正在运行
190+
2. 检查 URL 是否正确
191+
3. 确认防火墙设置
192+
4. 查看 Claude Desktop 日志
144193

0 commit comments

Comments
 (0)