Z.AI Vision MCP服务器代理
一个生产就绪的代理服务器,用于在Fly.io上部署Z.AI Vision MCP服务器,具有承载令牌身份验证和SSE流媒体支持。
概述
该存储库为部署Z.AI Vision MCP服务器提供了基础设施,包括:
- 承载令牌身份验证 用于安全访问
- SSE流媒体 用于实时MCP协议通信
- 健康监测 优雅的启动操作
- 结构化日志记录 用于调试和监控
- 生产准备就绪 错误处理和优雅关机
快速开始
1.安装依赖项
npm install2.设置所需的环境变量
必修的:
MCP_COMMAND-启动Z.AI Vision MCP服务器的命令(默认值:npx -y @z_ai/mcp-server)Z_AI_API_KEY-您的Z.AI API密钥(从https://z.ai/manage-apikey/apikey-list)Z_AI_MODE-人工智能服务平台(ZAI或ZHIPU)
可选(用于生产):
BEARER_TOKEN-API访问的身份验证令牌DEBUG_LOGGING-启用详细日志记录(true或1)PORT-外部端口(默认:8080)
3.配置Z.AI凭据
# Z.AI Vision MCP Server command
export MCP_COMMAND="npx -y @z_ai/mcp-server"
# Z.AI API credentials
export Z_AI_API_KEY="your_api_key_here"
export Z_AI_MODE="ZAI" # or "ZHIPU" depending on platform4.启动代理
node server.js代理将在端口8080上启动,并通过超级网关生成Z.AI Vision MCP服务器。
建筑
Client → Z.AI Vision MCP Proxy (8080) → [Upload: /tmp/mcp-uploads/] → Supergateway (8000) → Z.AI MCP Server (stdio) → Z.AI API组件详细信息
- Z.AI视觉MCP代理:具有承载身份验证、请求路由和SSE流的HTTP服务器
- 超级网关:将HTTP/SSE桥接到stdio以进行MCP协议通信
- Z.AI视觉MCP服务器:通过Z.AI平台实现视觉AI功能
- 文件上传端点:接受多部分文件上传,存储在
/tmp/mcp-uploads/,为工具调用返回serverPath - MCP资源发现:为AI代理提供能力发现
配置摘要
| 配置 | 值 | 原因 |
|---|---|---|
| MCP命令 | npx -y @z_ai/mcp-server | 推出Z.AI Vision MCP服务器 |
| Z_AI_API_键 | Secret(必填) | 通过Z.AI平台进行身份验证 |
| Z_AI_MODE | ZAI 或 ZHIPU (必填) | 选择AI服务平台 |
| bear_TOKEN | Secret(生产中需要) | 保护您部署的端点 |
| 记忆 | 512MB | 足以满足MCP服务器的工作负载(Z.AI处理繁重的处理) |
| 中央处理器 | 共享 | 成本优化(Z.AI平台处理繁重的视觉处理) |
| 并发 | 8软/10硬 | 防止资源枯竭 |
API终点
代理集成和资源发现
该服务器实现了MCP(模型上下文协议)资源发现,以帮助AI代理了解可用功能。
大图像文件上传
重要提示: Base64编码使文件大小增加了约33%(例如,8MB→ 11MB JSON有效负载),这可能会导致HTTP超时、JSON解析失败和内存问题。对于大图像,代理使用仅上传的方法:
- 文件必须通过以下方式上传
POST /upload端点优先 - 上传的文件存储在
/tmp/mcp-uploads/并引用serverPath - 使用
serverPath直接在Z.AI Vision工具调用中 - 最大文件大小: 每次上传10MB
- 支持的格式: PNG、JPEG、GIF、WebP、BMP
这种方法确保了对大型图像的可靠处理,而没有base64编码的开销和限制。
仅上传工作流
本地文件路径不会自动转换为base64。 相反,代理必须通过 POST /upload 端点优先:
- 通过上传本地图像
POST /upload端点 - 接收
serverPath作为响应(例如。,/tmp/mcp-uploads/123_abc_image.png) - 使用
serverPath直接在Z.AI Vision工具调用中 - 工具执行期间不会发生base64转换
这种方法确保了对大图像的可靠处理,并消除了base64大小的开销。
资源发现协议
服务器支持标准MCP资源发现方法:
resources/list:返回有关可用资源的元数据,包括上载端点resources/read:提供使用上传端点的详细说明tools/list:增强的响应包括Z.ai Vision工具的上传功能提示
代理工作流
sequenceDiagram
participant Agent as AI Agent (Traycer)
participant Proxy as MCP Proxy Server
participant Gateway as Supergateway
participant Vision as Z.AI Vision MCP
Note over Agent,Vision: Phase 1: Resource Discovery
Agent->>Proxy: resources/list
Proxy-->>Agent: upload://images resource
Agent->>Proxy: resources/read(upload://images)
Proxy-->>Agent: Upload endpoint details
Note over Agent,Vision: Phase 2: File Upload
Agent->>Proxy: POST /upload (file)
Proxy-->>Agent: serverPath
Note over Agent,Vision: Phase 3: Tool Discovery
Agent->>Proxy: tools/list
Proxy->>Gateway: tools/list
Gateway->>Vision: tools/list
Vision-->>Gateway: Tool definitions
Gateway-->>Proxy: Tool definitions
Proxy->>Proxy: Enhance descriptions
Proxy-->>Agent: Enhanced tool definitions
Note over Agent,Vision: Phase 4: Tool Execution
Agent->>Proxy: tools/call(serverPath)
Proxy->>Gateway: tools/call(serverPath)
Gateway->>Vision: Execute tool
Vision-->>Gateway: Result
Gateway-->>Proxy: Result
Proxy-->>Agent: Result面向代理开发人员
AI代理应实施此工作流程:
- 关于连接:查询
resources/list发现上传功能 - 读取上传详细信息:使用
resources/read随着uri: "upload://images"获取上传说明 - 上传文件:使用
POST /upload上传本地图像,接收serverPath - 使用服务器路径:通行证
serverPath直接访问Z.AI Vision工具(无需base64)
测试资源发现
测试资源发现终结点:
# Test resources/list
curl -X POST http://localhost:8080/sse \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"resources/list","id":1}'
# Test resources/read
curl -X POST http://localhost:8080/sse \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"resources/read","params":{"uri":"upload://images"},"id":2}'示例:上传和分析工作流
# Step 1: Upload local image
curl -X POST https://your-app.fly.dev/upload \
-H "Authorization: Bearer $TOKEN" \
-F "file=@/path/to/large-screenshot.png"
# Response: {"success": true, "serverPath": "/tmp/mcp-uploads/123_abc_large-screenshot.png", ...}
# Step 2: Use serverPath in tool call
curl -X POST https://your-app.fly.dev/sse \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"analyze_image","arguments":{"image_path":"/tmp/mcp-uploads/123_abc_large-screenshot.png"}},"id":3}'文件大小建议
| 图像大小 | 建议 | 原因 |
|---|---|---|
| \10MB | 不支持 | 超过上传限制 |
提示:
- 尽可能在上传前压缩图像
- 使用适当的图像格式(照片为JPEG,截图为PNG)
- 考虑调整超大图像的大小以减小文件大小
GET /sse
MCP协议通信的SSE端点(生产中需要承载令牌)
POST /sse
MCP请求的HTTP端点(生产中需要承载令牌)
GET /health
健康检查端点-返回网关状态
认证
发展模式
在以下情况下,身份验证是可选的:
NODE_ENV不是"production"FLY_APP_NAME未设置
生产模式
在以下情况下需要身份验证:
NODE_ENV是"production"FLY_APP_NAME已设置(Fly.io部署)
生成安全令牌:
TOKEN=$(openssl rand -base64 32)
echo $TOKENFly.io部署
部署说明
- 复制示例配置:
cp fly.example.toml fly.toml- 编辑fly.toml:
- 设置应用程序名称: app = "your-unique-app-name" - 选择地区: primary_region = "iad" (或离您最近)
- 创建Fly.io应用程序:
flyctl apps create your-unique-app-name- 设置所需的机密:
# Generate secure bearer token
flyctl secrets set BEARER_TOKEN="$(openssl rand -base64 32)"
# Set Z.AI credentials (get from https://z.ai/manage-apikey/apikey-list)
flyctl secrets set Z_AI_API_KEY="your_z_ai_api_key"
flyctl secrets set Z_AI_MODE="ZAI" # or "ZHIPU" depending on platform- 部署:
flyctl deploy --remote-only- 检查状态:
flyctl status- 查看日志:
flyctl logs- 测试端点:
curl -H "Authorization: Bearer YOUR_BEARER_TOKEN" \
https://your-app.fly.dev/health验证步骤
部署后:
- 检查运行状况端点:
curl https://your-app.fly.dev/health - 验证身份验证: 没有承载令牌的请求应返回401
- 测试SSE端点:
curl -H "Authorization: Bearer YOUR_TOKEN" https://your-app.fly.dev/sse - 监控日志:
flyctl logs确保Z.AI MCP服务器成功启动 - 检查资源使用情况:
flyctl status验证内存/CPU分配
架构图
sequenceDiagram
participant Client as Roo Code/Kilo Code
participant Proxy as Fly.io (Auth Proxy)
participant Gateway as Supergateway
participant ZAI as Z.AI Vision MCP Server
participant API as Z.AI API Platform
Client->>Proxy: Request with Bearer Token
Proxy->>Proxy: Validate Bearer Token
Proxy->>Gateway: Forward Request (SSE)
Gateway->>ZAI: stdio communication
ZAI->>API: Vision API Call (Z_AI_API_KEY)
API-->>ZAI: Vision Analysis Result
ZAI-->>Gateway: MCP Response
Gateway-->>Proxy: SSE Stream
Proxy-->>Client: Authenticated ResponseDocker部署
- 构建并运行:
docker build -t z-ai-vision-mcp .
docker run -p 8080:8080 \
-e MCP_COMMAND="npx -y @z_ai/mcp-server" \
-e BEARER_TOKEN="$TOKEN" \
-e Z_AI_API_KEY="your_api_key" \
-e Z_AI_MODE="ZAI" \
z-ai-vision-mcp监控与调试
结构化日志记录
所有事件都以JSON格式记录,结构如下:
{
"timestamp": "2025-01-01T00:00:00.000Z",
"level": "info",
"category": "mcp-call",
"phase": "runtime",
"message": "MCP method: tools/call",
"data": { "requestId": "abc123", "method": "tools/call" }
}调试模式
启用详细日志记录:
export DEBUG_LOGGING=true
node server.js健康监测
监控网关运行状况:
curl http://localhost:8080/health答复:
{
"status": "healthy",
"gatewayReady": true,
"gatewayExited": false,
"uptimeMs": 12345
}故障排除
常见问题
“MCP_COMMAND环境变量是必需的”
- 设置
MCP_COMMAND环境变量npx -y @z_ai/mcp-server
“生产中需要BEARER_TOKEN”
- 为生产部署生成并设置安全的承载令牌
“网关启动超时”
- 检查Z_AI_API_KEY和Z_AI_MODE是否设置正确
- 验证Z.AI API密钥是否有效
“服务不可用:MCP网关已退出”
- 检查日志中的启动错误
- 确保Z.AI凭据配置正确
调试步骤
- 检查环境变量:
env | grep -E "(MCP_COMMAND|BEARER_TOKEN|Z_AI)"- 启用调试日志记录:
export DEBUG_LOGGING=true
node server.js- 测试健康终点:
curl -v http://localhost:8080/health安全考虑
- 在生产中始终使用不记名代币 -该端点可以通过其他方式公开访问
- 定期旋转令牌 -在部署管道中实现令牌轮换
- 永远不要泄露秘密 -使用Fly.io机密或环境变量
- 监控访问日志 -警惕未经授权的访问企图
- 在生产环境中使用HTTPS -Fly.io提供自动TLS
演出
- 冷启动处理 -代理在接受请求之前等待MCP服务器启动
- SSE流媒体 -长期连接得到妥善管理,没有超时
- 请求缓冲 -HTTP请求被缓冲;SSE响应被流式传输
- 资源限制 -网关进程有50MB的缓冲区限制,以防止内存问题
代理集成问题
代理未检测到上传功能
- 验证
resources/list返回预期值upload://images资源 - 检查服务器日志中的“资源列表”条目
- 确保代理使用正确的MCP发现协议
文件转换不起作用
- 检查文件路径的格式是否正确(绝对路径或相对路径)
- 验证文件权限和可访问性
- 在服务器日志中查找“文件转换”条目
- 确保工具名称与Z.ai Vision工具(ui_to_martifact、analyze_image等)匹配
缺少增强的工具描述
- 确认原始请求是“工具/列表”
- 检查“工具增强”日志条目
- 验证响应是否包含Z.ai Vision工具
大图像上传问题
“上传失败,413有效载荷太大”
- 文件超过10MB限制
- 上传前压缩或调整图像大小
- 检查文件大小:
ls -lh /path/to/image.png
“工具调用失败,显示‘通过POST上传/先上传’”
- 您传递的是本地文件路径,而不是serverPath
- 首先通过上传文件
POST /upload - 使用返回的
serverPath在您的工具调用中
“上传成功,但工具调用找不到文件”
- 验证
serverPath与上传返回的内容完全匹配 - 检查服务器日志中的文件访问错误
- 确保文件未被清理(文件将在会话中保留)
“图像分析超时”
- 非常大的图像(8-10MB)可能需要更长的时间来处理
- 考虑将图像大小调整到2-5MB,以获得更快的结果
- 如果超时持续,请检查Z.AI API状态
许可证
麻省理工学院许可证-请随时将此脚手架用于Z.AI Vision MCP服务器部署。
