depu-img-mcp
by luyufan498
README.md
# depu-img-mcp
图像理解 MCP 服务器 —— 让不支持图像的文本模型通过 MCP 把图片 + prompt 转发给视觉模型,返回描述文本。自身不做推理,是协议适配与转发层。
## 特性
- **MCP v2**(`MCPServer` + Streamable HTTP,2026-07-28 规范),同时支持 stdio / SSE
- **Docker 部署**(多阶段构建 + docker-compose)
- **多后端 provider**:任意 OpenAI 兼容端点(LiteLLM 网关 / vLLM / OpenAI / DashScope / 智谱 / OpenRouter / Ollama …)
- **双层 prompt 注入**:全局 `base_vision_prompt` + per-call `prompt` + `task_type` 路由(auto/general/ocr/ui/debug/describe)
- **安全**:magic byte 校验、大小限制、SSRF 防护、路径白名单
- **轻量 Web 后台**(`/admin`):查看配置 + 在线测试图片
- 配置双源:环境变量覆盖 `config.toml`,密钥支持 `${ENV}` 插值
## 快速开始
```bash
# 1. 准备 .env(至少填 ADMIN_TOKEN 和视觉后端 API key)
cp .env.example .env
# 编辑 .env 填入 API key
# 2. Docker 启动(首次会自动生成 ./conf/config.toml 默认配置)
docker compose up -d
# 3. 访问后台改配置(或直接编辑 ./conf/config.toml 后重启)
open http://localhost:8080/admin
# MCP 端点:http://localhost:8080/mcp
```
> 首次启动无需预先准备 `config.toml`:容器挂载 `./conf/` 目录,若里面没有配置文件,会自动从内置模板生成一份。之后可在 `/admin` 后台在线编辑,或直接改 `./conf/config.toml` 后 `docker compose restart`。
## 本地运行(开发)
```bash
uv sync
uv run python -m depu_img_mcp # 默认 streamable-http
MCP_TRANSPORT=stdio uv run python -m depu_img_mcp # stdio 模式给 Claude Desktop 等
```
## MCP 工具
### `image_understand`
```python
image_understand(
image: str, # http(s) URL 或 data:image/...;base64,... URI(内联 base64)。不支持本地文件路径(Docker 部署,容器看不到客户端文件系统)
prompt: str = "", # 用户问题;空则给出通用描述(物体、文字/OCR、布局、颜色等)
) -> str
```
> **provider / model 由后台 admin 统一配置**,客户端不能指定。这用于企业内网服务,后端路由由运维通过 `/admin` 后台决定。
只有一个工具。客户端传图 + prompt,服务器用后台配置的默认 provider 及其 model 进行视觉理解,返回文本描述。
## 配置示例
```toml
[[providers]]
name = "default"
type = "openai-compat"
base_url = "https://gateway.ai.depu.school/v1"
api_key = "${DEPU_GATEWAY_API_KEY}"
model = "Kimi-K2.7-Code"
auth_header = "bearer"
```
## 客户端配置(Claude Desktop 示例)
stdio 模式:
```json
{
"mcpServers": {
"depu-img": {
"command": "python",
"args": ["-m", "depu_img_mcp"],
"env": { "MCP_TRANSPORT": "stdio", "DEPU_GATEWAY_API_KEY": "sk-..." }
}
}
}
```
HTTP 模式(支持远程 MCP 的客户端):
```json
{
"mcpServers": {
"depu-img": { "url": "http://localhost:8080/mcp" }
}
}
```
## License
MIT
TDQS
A4.9/5.0
Scored across 1 tool
Disambiguation5/5
Only one tool exists, so there is no possibility of confusion or overlapping purposes.
Naming Consistency5/5
A single tool name is trivially consistent; there are no conflicting naming conventions to assess.
Tool Count3/5
One tool for image understanding is thin but acceptable for a single-purpose server; it sits at the low end of the typical range.
Completeness5/5
The tool provides comprehensive image understanding (description, OCR, layout, colors) and accepts both URLs and base64, covering the full domain without obvious gaps.
Maintenance
ActivityStale
ResponsivenessNo issues