Claude Code 接国产模型不能识图?一个 MCP 让纯文本模型也能看图

0 阅读6分钟

我给纯文本模型装了双「眼睛」:纯文本大模型也能看图了

起因:一个让人抓狂的 400 报错

自从用上 Claude Code,我的 coding 效率确实起飞了。但有个坎一直过不去--

像 GLM、DeepSeek 这类纯文本模型,在 Claude Code 里有个致命问题:

你截个 bug 图、贴个设计稿,想问它"这报错咋整""这页面照着还原一下",结果直接 400 Bad Request

原因很简单:这些模型压根不支持图片输入,Claude Code 把图片塞进请求里,上游直接拒收。

workaround 也不是没有:自己先把图丢给豆包/GLM-4V 识一遍,把文字描述复制回来,再喂给 Claude Code。能用,但每次都这么搞,人是会疯的

于是我花了个周末写了 image-vision-mcp,一个让 Claude Code 拥有图像识别能力的 MCP server。一行 npx 接入,Ctrl+V 直接贴图,纯文本模型也能"看图说话"。

它能干什么

项目里其实是两个能力,可以单独用,也能组合用。

能力一:MCP 识图工具(默认)

给 Claude Code 装一个 vision_describe_image 工具,支持本地文件路径网络图片 URL 两种输入。装完之后,对 Claude 说:

识别这张图:C:/Users/me/screenshot.png
描述一下这张网络图片:https://example.com/chart.png
按设计图还原规格解析:C:/Users/me/design.png
分析这个测试截图里的可见问题:C:/Users/me/bug.png

Claude 会自动调用识图工具。

能力二:HTTP 图片拦截代理(高级玩法,重点)

这才是真正解决痛点的部分。

你在 Claude Code 和上游 LLM 之间架一层本地代理(监听 127.0.0.1:8787)。当请求里带图片时,代理会:

  1. 拦截请求中的图片;
  2. 调一个视觉模型(豆包、Kimi、GLM-4V、Qwen-VL 任选)把图片转成文字描述;
  3. 把图片替换成描述文字,再转发给上游纯文本模型。

对上游模型来说,它收到的永远都是纯文本——400 报错?不存在的。

┌───────────────────────────────────────────────────────────┐
│ Claude Code                                                │
│   ├─ 调用 MCP 工具 vision_describe_image -> 视觉模型 API    │
│   └─ 发送消息(含图片)-> http://127.0.0.1:8787 (本代理)    │
│                            ↓                               │
│                  代理拦截图片 -> 调视觉模型识别 -> 替换为文字 │
│                            ↓                               │
│                  转发纯文本请求 -> 上游 LLM API(如 GLM)    │
└───────────────────────────────────────────────────────────┘

装好代理之后,体验是这样的:

在输入框里 Ctrl+V 粘贴图片,随手打一句"这图里有啥问题",回车。

不用先说"识别图片",不用关心关键词——贴就完事了

最让我得意的一个设计:自动分类识图

写这个工具的过程中,我发现一个事:不同类型的图,你其实想要的信息完全不一样。

  • 设计稿 -> 你想要的是能直接还原的 HTML/CSS 规格、token、布局;
  • 原型图/线框图 -> 你想要的是页面结构、交互逻辑的理解;
  • bug 截图 -> 你想要的是异常信息、报错堆栈的定位分析;
  • 普通图片 -> 老老实实描述内容就行。

所以我在 vision_describe_image 里内置了一个 auto 自动分类模式:视觉模型先判断这张图属于哪一类,再用对应的提示词模板输出结构化结果——而且是专门为纯文本大模型"能看懂、能接着干活"优化的结构。

四种模式可以显式指定:

mode适用场景
auto(默认)自动判断,省心
design_rebuild设计图还原成代码规格
prototype_understanding原型图/线框图结构理解
bug_screenshot测试/异常截图分析
general普通图片描述

代理模式下也一样:哪怕你不写"还原/原型/bug"这些关键词,视觉模型也会先自动分类,再把对应的分析结果连同你的问题一起发给上游。

接入只要 1 分钟

Step 1:配 MCP server

编辑 ~/.claude.json(以火山方舟豆包为例,换成 Kimi / 智谱 / 通义都行,改下三个变量就好):

{
  "mcpServers": {
    "vision-mcp": {
      "command": "npx",
      "args": ["-y", "image-vision-mcp"],
      "env": {
        "VISION_API_KEY": "你的火山方舟-api-key",
        "VISION_BASE_URL": "https://ark.cn-beijing.volces.com/api/v3",
        "VISION_MODEL": "doubao-seed-2-1-turbo-260628"
      }
    }
  }
}

到这一步,MCP 识图工具已经能用了。想用代理粘贴图,再加 Step 2。

Step 2:让 Claude Code 走代理

编辑 ~/.claude/settings.json

{
  "env": {
    "UPSTREAM_BASE_URL": "https://你的上游-llm-api-地址",
    "ANTHROPIC_BASE_URL": "http://127.0.0.1:8787",
    "ANTHROPIC_AUTH_TOKEN": "你的上游-llm-api-token"
  }
}

重启 Claude Code,Ctrl+V 贴图,搞定。

支持的视觉模型(凡是 OpenAI 兼容 /chat/completions 端点、支持 image_url + base64 的都行):

平台模型示例
火山方舟(豆包)doubao-seed-2-1-turbo-260628
月之暗面 Kimikimi-k2.6
智谱glm-4v-plus / glm-4.5v
阿里百炼qwen-vl-max / qwen2.5-vl-72b-instruct
硅基流动Qwen/Qwen2-VL-72B-Instruct
OpenAIgpt-4o / gpt-4o-mini

小贴士:火山方舟上目前只有豆包系列支持视觉输入,GLM/DeepSeek 在方舟上是纯文本。要用 GLM-4V / Qwen-VL,走对应平台或硅基流动。

几个值得说说的工程细节

写完才发现,真正费功夫的不是"能跑通",而是这些边角:

  • 防 SSRF:默认拒绝访问内网/私有网络图片 URL,想放开得显式设 ALLOW_PRIVATE_NETWORK_IMAGES=1。一个本地代理不防这点,迟早出事。
  • max_tokens 按模式分配 + 截断自动升级:不同识图模式输出长度差异很大,设计图还原可能很长。按模式分配 token 预算,输出被截断时自动升档重试,避免设计稿还原到一半断了。

我平时的用法

  • 看报错:测试跑挂了截个图丢进去,"分析下这个测试截图里的可见问题",比复制日志快;
  • 还原设计稿:Figma 截图直接贴,"按设计图还原规格解析",输出能直接拿去改的 HTML+token;
  • 看原型图:产品给的原型线框图,"理解下这个页面的结构和交互";
  • 读图表:年报里的数据图、监控大盘截图,"分析下图表数据"。

本质上就是把 Claude Code 从"只能读字"变成"也能看图",而且不挑后端模型——你继续用国产文本模型,识图这事儿交给专门的视觉模型。

写在最后

项目开源在 github.com/staticdeng/…,MIT 协议,npx -y image-vision-mcp 即用。架构上预留了扩展点,任何 OpenAI 兼容的视觉模型都能接,欢迎提 issue 和 PR。

如果你也在用 Claude Code + 国产模型,被"不能贴图"折磨过,不妨试一下。觉得有用的话,给个 ⭐ 是对我最大的鼓励 :)