multimodal-mcp

multimodal-mcp

Gives any MCP client (OpenCode, Claude Code, Claude Desktop, Cursor, etc.) the ability to process images by automatically converting them to text descriptions using a vision model, so that text-only LLMs can handle image-based queries.

Category
访问服务器

README

multimodal-mcp

给任意 MCP 客户端配上一双"眼睛",让纯文本主模型也能处理图片。

核心设计:MCP 只把图片转成文字,不做推理。推理由你当前会话选的主模型完成(glm-5.2 / deepseek / qwen / 任何模型)。

工作原理

一个工具 describe_image,根据 image 参数自动判断图片来源:

image 参数 行为
系统剪贴板读图(截图后说"看下我的截图")
http(s):// 下载
data:image/...;base64,... 提取 base64
/path/to/file 读本地文件
raw base64 直接用

返回结构化文字描述(OCR + 图表数据 + UI 细节),主模型基于描述自己推理。

另一个工具 multimodal_config_status 自检三个 vision 变量是否配齐(不打印 key)。

"剪贴板"路径解决客户端拦截粘贴图片的问题:截图后不粘贴到聊天框,打字说"看下我的截图",工具直接读剪贴板。跨平台跨客户端。

系统依赖

仅"剪贴板"路径需要:

平台 命令 安装
macOS pngpaste brew install pngpaste
Linux xclip apt install xclip
Windows PowerShell 内置

URL / data URI / 文件路径 / base64 四种路径无依赖。

安装与配置

需要 Python ≥ 3.10(仅 local 模式);uvx 模式只需 uv

凭据

三个环境变量,写进客户端 MCP 配置的凭据字段:

变量 含义
VISION_BASE_URL 视觉模型 API 地址,到 /v1 为止(不带 /chat/completions/responses,代码按 style 自动拼)
VISION_API_KEY API key
VISION_MODEL 模型名(qwen3.7-plus / gpt-4o / llava:13b / gpt-5.4 等)
VISION_API_STYLE API 风格:chat(默认,/chat/completions)或 responses(GPT-5 等新模型,/responses

主推理模型不在这里配——它是你客户端会话里选的那个。

各客户端的凭据字段名不一样:opencode 叫 environment,Claude / Cursor / Codex 叫 envinstall.py 会自动用对的字段名。

方式 A:一键脚本(推荐)

在仓库目录里运行,自动检测已装客户端并写入配置 + 规则文件,幂等可重复跑:

python install.py              # 交互式
python install.py --yes        # 跳过确认

# 带凭据,一条命令配齐
python install.py \
  --base-url https://dashscope.aliyuncs.com/compatible-mode/v1 \
  --api-key sk-xxxxx \
  --model qwen3.7-plus

# 强制 uvx / local 模式
python install.py --mode uvx --repo git+https://github.com/believe3344/multimodal-mcp
python install.py --mode local

跑完重启客户端即可。--api-key 会进 shell 历史,介意就跑完手动填。

方式 B:手动配置

不用 install.py,按下面格式写进各客户端配置。两种运行模式:

  • uvx(不用 clone):command 跑 uvx --from git+URL multimodal-mcp
  • local(clone + venv):command 跑 venv 里的 python + server.py

opencode~/.config/opencode/opencode.json)— command 是数组,凭据字段叫 environment

{
  "mcp": {
    "multimodal": {
      "type": "local",
      "command": ["uvx", "--from", "git+https://github.com/believe3344/multimodal-mcp", "multimodal-mcp"],
      "environment": {
        "VISION_BASE_URL": "https://dashscope.aliyuncs.com/compatible-mode/v1",
        "VISION_API_KEY": "sk-xxxxx",
        "VISION_MODEL": "qwen3.7-plus"
      }
    }
  }
}

Claude Code / Desktop / Cursor~/.claude.json / ~/Library/Application Support/Claude/claude_desktop_config.json / ~/.cursor/mcp.json)— command 字符串 + args 数组,凭据字段叫 env

{
  "mcpServers": {
    "multimodal": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/believe3344/multimodal-mcp", "multimodal-mcp"],
      "env": {
        "VISION_BASE_URL": "https://dashscope.aliyuncs.com/compatible-mode/v1",
        "VISION_API_KEY": "sk-xxxxx",
        "VISION_MODEL": "qwen3.7-plus"
      }
    }
  }
}

Codex CLI~/.codex/config.toml)— TOML,env 是 inline table:

[mcp_servers.multimodal]
command = "uvx"
args = ["--from", "git+https://github.com/believe3344/multimodal-mcp", "multimodal-mcp"]
env = { VISION_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1", VISION_API_KEY = "sk-xxxxx", VISION_MODEL = "qwen3.7-plus" }

local 模式:把上面 uvx 的 command/args 换成 venv python + server.py 绝对路径,凭据字段不变(opencode 仍 environment,其他仍 env)。command 必须是 venv 里的 python,否则缺 mcp / httpx 依赖。准备 venv:

cd /path/to/multimodal-mcp
uv venv --python 3.11 && source .venv/bin/activate
uv pip install -r requirements.txt

Windsurf / Cline:MCP 配置走各自 UI(Settings > MCP),格式同上。

规则文件

install.py 会自动把"何时调 describe_image"的规则写进各客户端规则文件(opencode AGENTS.md / Claude CLAUDE.md / Cursor .mdc / Codex AGENTS.md / Windsurf .windsurfrules / Cline .clinerules)。手动配置时需自行添加,模板见 RULES.md

测试

重启客户端后:

  1. multimodal_config_status,确认三个变量都 set
  2. describe_imageimage 留空(读剪贴板)或传 URL

或用 MCP Inspector 独立测试(不依赖客户端,需先在 shell export VISION_* 三个变量):

npx @modelcontextprotocol/inspector .venv/bin/python server.py

使用示例

截图

[用户] Cmd+Shift+4 截图,然后说"看下我的截图"
[agent] describe_image(image=None) → 读剪贴板 → 文字描述 → 回答

图片 URL

[用户] 描述这张图:https://example.com/chart.png
[agent] describe_image(image="https://...") → 下载 → 描述 → 回答

本地文件

[用户] 看 /tmp/screenshot.png 里的表格
[agent] describe_image(image="/tmp/screenshot.png") → 读文件 → 描述 → 回答

粘贴附件(占位符)

客户端把粘贴的图片替换成 [Image 1] 占位符时,agent 按规则会调 describe_imageimage 留空读剪贴板(图片还在剪贴板里)。

故障排查

现象 排查
Missing API key 凭据字段里三个 VISION_* 没填齐(opencode 是 environment 不是 env
GPT-5 系列超时 / 404 VISION_API_STYLE=responses(走 /responses,默认是 /chat/completions
HTTP 401 Key 错或没开通该模型
HTTP 404 BaseURL 不是 /v1 结尾,或 style 选错
描述模糊 detailhigh,或自定义 instruction
agent 不自动调 检查客户端是否加载 MCP、规则文件是否被读取

限制

  • 每次调用一次视觉模型往返,延迟取决于该模型。
  • 视觉模型描述什么,主模型就只看什么。极小细节可能丢失——用 instruction 写具体。
  • 走 stdio;远程多人共用可改 streamable_http

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选