
Claude Desktop 和 Claude Code 这类 MCP 客户端最让人头疼的一点是模型本身不能直接“看”图片。把截图丢给 Claude它只会回复一句“我无法读取这张图片”。mcp-vision 解决的正是这个问题它把 Qwen-VL 视觉大模型封装成一个标准 MCP 工具Claude 收到剪贴板图片或上传的图片文件后通过这个工具把图像交给 Qwen-VL 识别拿到文字描述后再组织自然语言回答。简单说它就是给 Claude 补上一双“眼睛”。这个项目最有价值的三个点一是完全走 MCP 标准协议Claude Desktop、Claude Code 都能直接挂载二是支持读取系统剪贴板里的截图不用先保存成文件再上传三是后端视觉模型可以切换既能走 Qwen-VL 在线 API也可以改成本地部署的视觉模型。本文会带你在“另一台电脑”上完整复刻这套识图 MCP 工具覆盖原理拆解、环境准备、配置文件、功能测试、接口调用和排错清单。只要有一台能跑 Python 的电脑加上一个 Qwen-VL 的 API Key就能跑通。如果你平时主要用 Claude 处理截图、产品稿、代码报错图、PDF 转图片这些“要看图才能回答”的任务这篇文章可以直接收藏。下面按从零部署的顺序来写每一步都会说明操作方式和判断标准。1. mcp-vision 核心能力速览能力项说明项目定位让 Claude 通过 MCP 协议获得图像理解能力核心组件MCP Server Qwen-VL 视觉模型后端图片输入方式剪贴板截图读取、本地图片文件上传后端视觉模型Qwen-VL 系列可切换在线 API 或本地部署模型客户端兼容Claude Desktop、Claude Code以及所有支持 MCP 的客户端启动方式Python 进程运行 MCP Server通过 stdio 或 TCP 与客户端通信是否支持 API支持MCP 工具调用本质就是接口调用是否支持批量任务可以在业务系统里循环调用视觉接口实现批量识图推荐使用方式API 模式最简单本地模型模式更利于数据私密性适合读者使用 Claude 但需要视觉能力的开发者、内容运营、自动化脚本开发者从能力边界看mcp-vision 不是一个“重新发明视觉模型”的项目而是把现成的 Qwen-VL 能力和 Claude 的推理能力串起来。它的技术含量集中在 MCP Server 的封装、剪贴板图片的读取以及返回结果的格式化上。理解这一点后面排查问题会轻松很多。2. 适用场景与使用边界2.1 适合谁经常需要让 Claude 识别截图、流程图、UI 设计稿、数据报表的人。在 Claude Code 里写自动化脚本希望脚本能处理“图像输入”的开发者。想把视觉能力接入内部知识库或工单系统用 Qwen-VL 做图像理解再用 Claude 做文案组织的团队。需要批量识图的场景比如批量处理表格截图、批量审核模板图片、批量提取图片中的文字信息。2.2 不适合什么场景对图像精度要求极高的文档 OCR建议直接使用专业的 OCR 引擎视觉大模型在复杂表格、生僻字场景下还不够稳。需要实时视频流理解的任务这类项目走的是视频采样抽帧不是单张图片识别。完全离线、内外网物理隔离且不允许调用任何第三方 API 的环境需要改成纯本地模型方案。2.3 合规与隐私边界这里必须提醒一次。图片内容非常敏感剪贴板截图可能包含账号信息、聊天记录、商业合同、代码密钥等。把图片发送给第三方视觉模型服务前先确认数据是否有外发限制。企业内部数据建议优先用私有化部署的视觉模型不把图片送到外部接口。所有涉及人脸、产品设计稿、未公开素材的识别都要先确认有合法授权。不要让 MCP 工具处理未经授权的数据也不要拿这套能力去生成或识别违法违规内容。合规风险大于技术风险。3. mcp-vision 工作原理拆解3.1 MCP 协议在中间扮演什么角色MCP 全称 Model Context Protocol是 Anthropic 提出的一套模型上下文协议。它解决的问题是Claude 这类模型不能直接操作外部工具那就定义一套标准协议让外部工具以 Server 形式注册进来Claude 作为 Client 按需调用。mcp-vision 在这个架构里就是一个 MCP Server它对外暴露“识图”这一个或多个工具。Claude 收到用户图片后根据模型判断是否要调用这个工具然后把图片路径或剪贴板图片内容作为参数传过去。Server 端调用 Qwen-VL 接口返回文字描述给 ClaudeClaude 再基于这些描述组织最终回答。这个过程用户感知不到表现为“我贴了图片Claude 居然能回答了”。但从技术链路看实际是“Claude → MCP Server → Qwen-VL → 文字描述 → Claude”。知道这条链路排错顺序就清楚了。3.2 剪贴板图片怎么变成视觉模型的输入这是 mcp-vision 比较关键的功能点。剪贴板里的截图并不是一个文件路径而是一块内存数据。MCP Server 需要调用操作系统的剪贴板接口把图片数据取出来临时保存为 PNG 或 JPEG 文件再交给视觉模型处理。三个平台的处理方式不同Windows可以通过 Python 的 PIL 配合剪贴板读取接口把截图转成图片对象保存。macOS剪贴板权限受系统控制终端或 Claude 客户端需要先在“系统设置 → 隐私与安全性 → 屏幕录制/辅助功能”里授权否则截图读不出来。Linux桌面环境不同X11 和 Wayland 的剪贴板命令不一样。X11 可以用 xclipWayland 需要用 wl-paste读取失败时先看桌面环境是哪个。如果 MCP Server 连剪贴板都读不到优先排查系统权限再排查代码实现。3.3 Qwen-VL 后端的两种接入方式方式 A在线 API。通过阿里云百炼平台申请 DashScope API Key调用 qwen-vl-max、qwen-vl-plus 或当前可用的视觉模型。优点是部署简单不需要 GPU按量付费延迟稳定。方式 B本地部署。用 Ollama、vLLM 等推理框架部署 Qwen-VL 系列的本地模型MCP Server 通过 OpenAI 兼容接口访问。优点是数据不出内网隐私可控缺点是消费级显卡跑较大模型时显存压力明显需要自己评估。从项目标题来看mcp-vision 默认走的是“调用 Qwen-VL 视觉大模型”这个方向在线 API 最适合首次部署。本地部署可以作为进阶优化但不建议第一天就折腾。4. 环境准备与前置条件在“其他电脑”上复刻本质上是把一套 Python 项目、配置文件和 Claude 客户端配置原样迁移过去。下面这些条件先确认好。检查项要求说明操作系统Windows 10/11、macOS、Linux 均可剪贴板读取方式不同Python建议 3.10 及以上MCP 生态对新版本支持更好Claude 客户端Claude Desktop 或 Claude Code二选一Qwen-VL API Key在阿里云百炼控制台申请配置到环境变量网络能访问 Qwen-VL 接口如果走本地模型则不需要外网磁盘空间项目本身很小几百 MB 足够本地模型另算显卡走 API 模式不需要 GPU本地模型模式需要按模型规格评估显存这里特别说明一点如果走在线 API显卡驱动、CUDA 这些都和你没关系一套能跑 Python 的电脑就够了。这也是“在其他电脑上复刻”最省心的路径。只有当你选择本地部署 Qwen-VL 模型时才需要关注 GPU 型号、显存大小和 CUDA 版本。常见做法是先用 API 模式跑通全流程之后再决定要不要换成本地模型。5. 部署启动在其他电脑上复刻 mcp-vision这一节按照“新电脑从零搭建”的顺序写。核心操作是拷贝项目 → 创建虚拟环境 → 安装依赖 → 配置 API Key → 注册到 Claude → 重启客户端。下面所有命令中的路径、端口、模型名都要按你实际项目的 README 替换。5.1 拷贝项目并安装依赖先从原电脑把 mcp-vision 项目目录完整拷贝到新电脑或者从代码仓库重新拉取。然后创建虚拟环境并安装依赖。# 进入项目目录路径按实际调整 cd /path/to/mcp-vision # 创建虚拟环境 python -m venv .venv # 激活虚拟环境 # Windows .venv\Scripts\activate # macOS / Linux source .venv/bin/activate # 安装依赖 pip install -r requirements.txt如果安装依赖时网络不稳定可以换成国内镜像源pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple5.2 配置环境变量项目通常通过环境变量管理 API Key 和模型参数。把下面这段保存为.env文件放在项目根目录字段名按项目 README 调整DASHSCOPE_API_KEYsk-你的百炼APIKey VISION_MODELqwen-vl-max MCP_TRANSPORTstdio # 如果走本地模型则需要配置本地推理服务地址 # VISION_BASE_URLhttp://127.0.0.1:8000/v1 # VISION_MODELQwen2.5-VL-7B-Instruct注意.env文件不要提交到 Git 仓库避免 API Key 泄露。老电脑上如果已经有.env直接复制过来即可。5.3 注册到 Claude DesktopClaude Desktop 的 MCP Server 配置位于claude_desktop_config.json。Windows 通常在%APPDATA%\Claude\claude_desktop_config.jsonmacOS 通常在~/Library/Application Support/Claude/claude_desktop_config.json在配置文件的mcpServers字段里新增一项{ mcpServers: { mcp-vision: { command: python, args: [ /绝对路径/mcp-vision/mcp_server.py ], env: { DASHSCOPE_API_KEY: sk-你的百炼APIKey, VISION_MODEL: qwen-vl-max } } } }如果你的 Python 是虚拟环境里的命令路径要写成虚拟环境内的 Python 绝对路径比如command: /绝对路径/mcp-vision/.venv/bin/python改完配置后完全退出 Claude Desktop重新打开。如果配置生效对话框下方会出现一个锤子图标里面有 mcp-vision 注册的工具。5.4 注册到 Claude Code如果使用的是 Claude Code 命令行工具注册方式更简单不需要手写 JSON。在项目目录或全局执行claude mcp add mcp-vision -- python /绝对路径/mcp-vision/mcp_server.py查看已注册的 MCP Serverclaude mcp list测试工具是否可用claude mcp test mcp-vision注册完成后你在 Claude Code 对话里发送图片路径或截图内容模型会自动判断是否调用 mcp-vision 工具。这种方式适合写脚本和自动化流程。5.5 启动前自检清单Python 版本是否满足要求。虚拟环境是否成功激活依赖是否装完。.env文件是否存在API Key 是否有效。MCP Server 脚本路径是否写错有没有多余空格。JSON 文件格式是否正确有没有尾逗号。Claude Desktop 是否已经完全退出并重新打开。如果走 TCP 模式确认端口没有被占用。6. 功能测试与效果验证配置完成后不做一次完整的端到端测试很难判断是环境问题还是代码问题。下面给出一套通用的验证流程。6.1 测试 1剪贴板识图测试目的验证 MCP Server 能读取系统剪贴板中的截图并把识别结果回传给 Claude。操作步骤在任意软件中复制一张截图到剪贴板。比如微信截图、系统截图工具确保剪贴板里真的存的是图片不是文件路径。打开 Claude Desktop输入一句“看剪贴板里的图告诉我里面是什么内容”。观察 Claude 是否调用 mcp-vision 工具。预期结果Claude 返回图片的文字描述。比如截图里有一段报错日志它会告诉你“图中显示 Python 报错 module not found”。判断标准Claude 没有回复“无法读取图片”。工具调用记录里有 mcp-vision 的输入和输出。返回的描述与图片内容基本一致。失败时排查剪贴板里没有图片重新截图再试。macOS 系统没有授权剪贴板读取权限。MCP Server 日志报错按错误信息定位。6.2 测试 2上传图片识别测试目的验证 MCP Server 能处理本地图片文件的路径输入。操作步骤准备一张本地测试图建议先用内容明确的图比如一张带文字的产品海报、一页书扫描图。在 Claude 对话里输入“识别这个文件 /path/to/test.png把里面的文字整理出来”。观察工具调用结果。预期结果Claude 能准确说出图片中的核心信息。如果图片里是表格或文字应能按可读格式输出。判断标准图片路径能被 MCP Server 正常读取。返回内容不是空值。Claude 能基于识别结果继续回答追问。失败时排查文件路径是否有权限读取。MCP Server 是否支持该图片格式。通常建议用 PNG、JPEG先不要用 WEBP 或超大分辨率图。图片太大导致接口超时先压缩再测试。6.3 测试 3连续追问与多轮对话测试目的验证识别结果是否能作为上下文参与后续对话。操作步骤第一次问“图里有什么”得到描述后不换会话继续问“里面提到的那个接口地址是什么”。看 Claude 是否能基于上一轮识别的文字结果回答。预期结果Claude 能引用第一轮识别内容回答第二轮问题不需要重新上传图片。判断标准多轮对话中识别结果没有被丢失。这里有一个很容易忽略的点Claude 每轮调用 MCP 工具都是独立的能连续追问是因为它把第一轮返回的文字描述放进了上下文。所以 MCP Server 的返回内容质量直接决定后续对话质量。返回字段如果只有一句“这是一张截图”那后面什么都问不出来。6.4 功能过载测试基础测试通过后再测试几个边界场景高分辨率截图识别剪贴板里大截图是否能完成识别。多图连续识别同一会话里连续发多张图是否会出现上下文被图片描述刷爆的问题。并发会话测试多个 Claude 窗口同时调用 MCP Server是否有锁冲突。超长文本返回图片里包含大量文字时MCP Server 返回内容是否被截断。这些测试不需要一次全跑完但建议把结果记录成表格方便后续调优。7. 接口 API 与批量任务扩展mcp-vision 作为 MCP Server每一步识别本质上都是一次接口调用。先验证 Qwen-VL 接口本身能不能通再考虑批量和业务集成。7.1 直接验证 Qwen-VL API这一步很重要如果你发现 Claude 调用失败但 Qwen-VL API 能直接返回结果那问题大概率出在 MCP 配置层如果 API 本身就不通就要先解决 API Key、网络或模型名问题。以下用 OpenAI 兼容模式调用 Qwen-VL 接口示例代码可以直接保存成test_vision.pyimport base64 import os import requests # 读取图片并转 base64 def encode_image(image_path): with open(image_path, rb) as f: return base64.b64encode(f.read()).decode(utf-8) image_path test.png base64_image encode_image(image_path) api_key os.environ.get(DASHSCOPE_API_KEY) url https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions payload { model: qwen-vl-max, messages: [ { role: user, content: [ {type: image_url, image_url: {url: fdata:image/png;base64,{base64_image}}}, {type: text, text: 请描述这张图片的内容} ] } ] } headers { Authorization: fBearer {api_key}, Content-Type: application/json } response requests.post(url, jsonpayload, headersheaders, timeout120) print(response.json())运行DASHSCOPE_API_KEYsk-你的Key python test_vision.py如果这一步能返回带有识别结果的 JSON说明模型侧没问题。返回的内容通常是choices[0].message.content里的文字。7.2 在业务系统里实现批量识图MCP 工具适合单次人机交互批量任务建议绕过 MCP直接在业务代码里循环调用视觉接口。下面是一个批量脚本的思路import base64 import json import os import time import requests from pathlib import Path INPUT_DIR ./images OUTPUT_FILE ./results.jsonl API_KEY os.environ.get(DASHSCOPE_API_KEY) def encode_image(image_path: str) - str: with open(image_path, rb) as f: return base64.b64encode(f.read()).decode(utf-8) def recognize(image_path: str) - str: data { model: qwen-vl-max, messages: [ { role: user, content: [ {type: image_url, image_url: {url: data:image/png;base64, encode_image(image_path)}}, {type: text, text: 提取图片中的文字并整理成 markdown} ] } ] } resp requests.post( https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions, jsondata, headers{Authorization: fBearer {API_KEY}}, timeout120, ) resp.raise_for_status() return resp.json()[choices][0][message][content] # 简单失败重试 def recognize_with_retry(image_path, retries3): for i in range(retries): try: return recognize(image_path) except Exception as e: print(f[retry {i1}] {image_path} failed: {e}) time.sleep(2) return None for img_path in sorted(Path(INPUT_DIR).glob(*.*)): result recognize_with_retry(str(img_path)) record {image: str(img_path), result: result} with open(OUTPUT_FILE, a, encodingutf-8) as f: f.write(json.dumps(record, ensure_asciiFalse) \n) print(done:, img_path)批量任务的工程化注意点单张失败不要中断整个批次记录错误继续处理下一条。控制并发数避免打爆接口限流。可以先串行跑一个小批次评估耗时再加并发。输出结果建议使用 JSONL 格式一行为一条记录方便断点续跑。记录处理耗时方便发现哪些图片反复失败或超时。涉及大量图片时先统计图片大小过大的图片先压缩再调用。7.3 限流和费用控制在线 API 是按调用量和图片大小计费的批量处理前先算成本。一个比较简单的方法先把图片压缩到 1280px 以内的 JPEG能大幅减少请求体积和费用。API 响应里的usage字段记录了 token 消耗批量任务跑完后汇总一下能看出单张图片的平均成本。8. 资源占用与性能观察8.1 API 模式的资源占用mcp-vision 走在线 API 时本机只跑一个 Python 进程资源占用很小。剪贴板截图会临时落盘磁盘占用通常只有几 MB。内存占用取决于项目实现几百 MB 以内是正常的。CPU 几乎没有压力因为推理发生在云端。所以如果你的电脑配置一般第一次部署完全不用纠结显卡。先把流程跑通再考虑更重的本地方案。8.2 本地模型模式的资源占用如果换成本地部署 Qwen-VL 系列模型资源占用就完全取决于你选择的模型规格2B/4B 级别的小模型消费级显卡有一定机会跑起来具体显存占用以推理框架显示为准。7B 级别建议至少准备 12GB 以上显存实际占用取决于量化方式和推理框架。更大模型建议用多卡或者纯 CPU 大内存方案但推理速度会明显下降。实际占用需要以本机测试为准不要只看模型参数文件大小。部署时可以先用 vLLM 或 Ollama 启动模型再观察显存占用和首 token 延迟。如果显存不足优先尝试 4bit 量化版本。8.3 影响性能的关键因素按优先级排序网络延迟API 模式下图片上传和结果返回都在网络上延迟占比最高。图片大小原图越大编码越慢、传输越慢、API 计费越高建议压缩。模型规格qwen-vl-max 和 qwen-vl-plus 的响应速度和精度不同按实际场景选。MCP Server 代码质量临时文件清理是否及时、日志是否落盘影响长时间运行稳定性。并发调用量多个会话同时调用时本地 Python 进程是否线程安全。观察指标建议用这三个首 token 延迟、单张图片整体耗时、API 返回的 token 消耗。记录几次后就能判断当前配置是否够用。9. 常见问题与排查方法问题现象可能原因排查方式解决方案Claude Desktop 看不到 mcp-vision 工具JSON 配置路径写错、未重启打开claude_desktop_config.json检查语法和绝对路径修改配置后完全退出并重开 Claude Desktop剪贴板图片识别为空剪贴板里没有图片数据或系统未授权剪贴板读取先手动粘贴图片确认剪贴板可用再检查系统隐私授权macOS 里给终端/Claude 授权Linux 检查 xclip 或 wl-pasteAPI 返回 401 或 InvalidApiKeyAPI Key 缺失、写错、已过期在终端里 echo 环境变量确认是否为空重新申请 Key更新.env文件API 返回模型不存在模型名对应错误或已下线登录百炼平台查看当前视觉模型列表修改VISION_MODEL为可用的模型名Claude 说“我看不到图片”MCP 工具调用失败或返回内容为空查看 MCP Server 日志确认 Qwen-VL 接口是否正常返回先用第 7.1 节脚本单独测接口再排查 MCP 配置端口冲突TCP 模式上次进程未退出或端口被其他服务占用Windows 用netstat -anomacOS/Linux 用lsof -i :端口号杀掉残留进程或修改配置换端口依赖安装失败Python 版本不满足、网络问题查看 pip 错误信息确认 Python 版本升级 Python使用国内镜像源安装识别结果乱码或内容截断终端编码问题或返回内容超长确认终端使用 UTF-8查看返回 JSON 的完整内容设置 PYTHONIOENCODINGutf-8分块处理长文本本地模型推理很慢显存不足导致模型多次换入换出观察模型加载时的显存占用换小模型或用量化版本降低并发批量任务卡住不动单张图片超时或接口限流加上超时参数查看是否在单张图上卡住加失败重试和超时控制先跑小批次验证排查时建议先看 MCP Server 的启动日志和处理日志。把标准输出和错误输出重定向到文件能省下大量猜测时间。启动命令可以改成python mcp_server.py mcp.log 21这样工具调用失败时能在日志里看到是剪贴板读取失败、API 超时还是模型返回异常。10. 最佳实践、使用建议与下一步扩展到这里mcp-vision 已经在“另一台电脑”上跑通了。最后分享几个工程化使用建议。第一次部署先跑最小链路。用在线 API 模式、一张测试图、一次剪贴板识别确认“Claude → MCP Server → Qwen-VL → Claude”这条链路稳定后再去改本地模型、批量任务这些进阶功能。把所有配置集中管理。.env、claude_desktop_config.json、模型版本号都记录到一个SETUP.md里换电脑部署时直接照着操作不需要重新摸索。这也是“在其他电脑上复刻”最容易被忽略的一点项目代码能拷贝但环境配置和依赖版本如果不记录等于重新踩一遍坑。图片先压缩再识别。剪贴板截图默认分辨率很高甚至可能是 4K 屏截图这些图片直接请求 API 会拉高延迟和费用。建议在 MCP Server 里统一做一次尺寸压缩和 JPEG 转换视觉模型识别小图完全够用。本地模型是隐私场景的下一步扩展方向。如果你的使用场景涉及客户数据、未上线产品截图等敏感信息可以开始评估本地部署 Qwen-VL 系列模型。建议先用 2B/4B 级别的小模型验证效果满足需求再考虑更大的模型。不需要一步到位上大模型。接口层可以继续做业务集成。mcp-vision 跑通后你可以在工单系统、内容审核、截图自动化测试这些场景里接入视觉识别能力。批量识图脚本已经可以直接参考第 7 节的示例按自己的目录结构替换即可。最后重复一遍合规重点确认你有权处理这些图片别把敏感数据随手丢给外部 API涉及人脸、版权内容、商业素材时先取得授权。识别结果用于自动化处理前先人工抽检一轮效果再放开到全量批次。