windsurfrules — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited windsurfrules (Rules) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
给任意 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 叫env。install.py会自动用对的字段名。
在仓库目录里运行,自动检测已装客户端并写入配置 + 规则文件,幂等可重复跑:
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 历史,介意就跑完手动填。
不用 install.py,按下面格式写进各客户端配置。两种运行模式:
uvx --from git+URL multimodal-mcpserver.pyopencode(~/.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.txtWindsurf / 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。
重启客户端后:
multimodal_config_status,确认三个变量都 setdescribe_image,image 留空(读剪贴板)或传 URL或用 MCP Inspector 独立测试(不依赖客户端,需先在 shell export VISION_* 三个变量):
npx @modelcontextprotocol/inspector .venv/bin/python server.py[用户] Cmd+Shift+4 截图,然后说"看下我的截图"
[agent] describe_image(image=None) → 读剪贴板 → 文字描述 → 回答[用户] 描述这张图:https://example.com/chart.png
[agent] describe_image(image="https://...") → 下载 → 描述 → 回答[用户] 看 /tmp/screenshot.png 里的表格
[agent] describe_image(image="/tmp/screenshot.png") → 读文件 → 描述 → 回答客户端把粘贴的图片替换成 [Image 1] 占位符时,agent 按规则会调 describe_image、image 留空读剪贴板(图片还在剪贴板里)。
| 现象 | 排查 |
|---|---|
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 选错 |
| 描述模糊 | detail 设 high,或自定义 instruction |
| agent 不自动调 | 检查客户端是否加载 MCP、规则文件是否被读取 |
instruction 写具体。streamable_http。~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.