image-vision-mcp 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -58
- package/dist/constants.js +2 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +6 -10
- package/dist/index.js.map +1 -1
- package/dist/proxy/imageProxy.js +324 -59
- package/dist/proxy/imageProxy.js.map +1 -1
- package/dist/schemas.d.ts +0 -11
- package/dist/schemas.js +0 -13
- package/dist/schemas.js.map +1 -1
- package/dist/services/vision.d.ts +10 -0
- package/dist/services/vision.js +160 -0
- package/dist/services/vision.js.map +1 -0
- package/dist/tools/describeImage.js +12 -12
- package/dist/tools/describeImage.js.map +1 -1
- package/dist/types.d.ts +10 -10
- package/package.json +3 -4
- package/dist/services/clipboard.d.ts +0 -16
- package/dist/services/clipboard.js +0 -196
- package/dist/services/clipboard.js.map +0 -1
- package/dist/services/moonshot.d.ts +0 -9
- package/dist/services/moonshot.js +0 -71
- package/dist/services/moonshot.js.map +0 -1
- package/dist/tools/describeClipboard.d.ts +0 -2
- package/dist/tools/describeClipboard.js +0 -121
- package/dist/tools/describeClipboard.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vision MCP Server
|
|
2
2
|
|
|
3
|
-
为 Claude Code 提供图像识别能力的 MCP server,附带 HTTP 图片拦截代理,让纯文本模型(如 GLM
|
|
3
|
+
为 Claude Code 提供图像识别能力的 MCP server,附带 HTTP 图片拦截代理,让纯文本模型(如 GLM)也能接受图片输入。支持任意 OpenAI 兼容的视觉模型(火山方舟豆包、Kimi、智谱 GLM-4V、通义 Qwen-VL、OpenAI GPT-4o 等)。
|
|
4
4
|
|
|
5
5
|
## 功能特性
|
|
6
6
|
|
|
@@ -8,48 +8,62 @@
|
|
|
8
8
|
|
|
9
9
|
### 1. MCP 工具(默认)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
支持两种图片来源:
|
|
12
12
|
|
|
13
13
|
| 工具 | 输入 | 示例 |
|
|
14
14
|
|------|------|------|
|
|
15
|
-
| `
|
|
16
|
-
| `
|
|
17
|
-
| `kimi_describe_clipboard` | 系统剪贴板图片(直接 `Ctrl+C` 复制,无需先保存为文件) | - |
|
|
15
|
+
| `vision_describe_image` | 本地图片文件 | `C:/Users/me/screenshot.png` |
|
|
16
|
+
| `vision_describe_image` | 网络图片 URL | `https://example.com/img.png` |
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
通过视觉模型识别图片,支持本地文件路径与 http(s):// 图片 URL。
|
|
20
19
|
|
|
21
20
|
### 2. HTTP 图片拦截代理(可选)
|
|
22
21
|
- 用户在 Claude Code 中直接 `Ctrl+V` 粘贴图片即可
|
|
23
22
|
- 在 Claude Code 和上游 LLM API 之间做代理
|
|
24
|
-
-
|
|
23
|
+
- 自动拦截请求中的图片,调视觉模型识别后替换为文字描述
|
|
25
24
|
- 让纯文本模型(如 GLM)也能正常处理图片输入,不再 400 报错
|
|
26
25
|
|
|
26
|
+
## 支持的视觉模型
|
|
27
|
+
|
|
28
|
+
只要视觉模型提供 OpenAI 兼容的 `/chat/completions` 端点、且支持 `image_url` + base64 图片输入,均可接入。下表给出代表性示例(模型 ID 以各平台官方文档为准):
|
|
29
|
+
|
|
30
|
+
| 平台 | 模型示例(`VISION_MODEL`) | `VISION_BASE_URL` | 申请入口 |
|
|
31
|
+
|------|----------------------------|-------------------|----------|
|
|
32
|
+
| 火山方舟(豆包) | `doubao-seed-2-1-turbo-260628` / `doubao-seed-2-1-pro-260628` / `doubao-seed-evolving` | `https://ark.cn-beijing.volces.com/api/v3` | console.volcengine.com/ark |
|
|
33
|
+
| 月之暗面 Kimi | `kimi-k2.6` | `https://api.moonshot.cn/v1` | platform.moonshot.cn |
|
|
34
|
+
| 智谱 | `glm-4v-plus` / `glm-4.5v` | `https://open.bigmodel.cn/api/paas/v4` | open.bigmodel.cn |
|
|
35
|
+
| 阿里百炼 | `qwen-vl-max` / `qwen2.5-vl-72b-instruct` | `https://dashscope.aliyuncs.com/compatible-mode/v1` | bailian.console.aliyun.com |
|
|
36
|
+
| 硅基流动 | `Qwen/Qwen2-VL-72B-Instruct` 等 | `https://api.siliconflow.cn/v1` | siliconflow.cn |
|
|
37
|
+
| OpenAI | `gpt-4o` / `gpt-4o-mini` | `https://api.openai.com/v1` | platform.openai.com |
|
|
38
|
+
|
|
39
|
+
> 注:火山方舟上目前只有豆包系列支持视觉输入,GLM / DeepSeek 在方舟上均为纯文本。若要用 GLM-4V / Qwen-VL 等非豆包视觉模型,请走对应平台或硅基流动。
|
|
40
|
+
|
|
27
41
|
## 工作原理
|
|
28
42
|
|
|
29
43
|
```
|
|
30
44
|
┌─────────────────────────────────────────────────────────────────┐
|
|
31
45
|
│ Claude Code │
|
|
32
|
-
│ ├─ 调用 MCP 工具
|
|
33
|
-
│ └─
|
|
46
|
+
│ ├─ 调用 MCP 工具 vision_describe_image -> 视觉模型 API │
|
|
47
|
+
│ └─ 发送消息(含图片)-> http://127.0.0.1:8787 (本代理) │
|
|
34
48
|
│ ↓ │
|
|
35
|
-
│ 代理拦截图片
|
|
49
|
+
│ 代理拦截图片 -> 调视觉模型识别 -> 替换为文字 │
|
|
36
50
|
│ ↓ │
|
|
37
|
-
│ 转发纯文本请求
|
|
51
|
+
│ 转发纯文本请求 -> 上游 LLM API(如 GLM) │
|
|
38
52
|
└─────────────────────────────────────────────────────────────────┘
|
|
39
53
|
```
|
|
40
54
|
|
|
41
|
-
MCP
|
|
55
|
+
MCP 工具和代理共享同一进程、同一份视觉模型配置,启动 MCP server 时代理自动起来。
|
|
42
56
|
|
|
43
57
|
## 前置条件
|
|
44
58
|
|
|
45
59
|
- Node.js >= 18
|
|
46
|
-
-
|
|
60
|
+
- 视觉模型 API Key(见上表,任选一家申请)
|
|
47
61
|
|
|
48
62
|
## 配置
|
|
49
63
|
|
|
50
64
|
### 1. 基础配置(启用 MCP 工具)
|
|
51
65
|
|
|
52
|
-
编辑 `~/.claude.json`,加入 MCP server
|
|
66
|
+
编辑 `~/.claude.json`,加入 MCP server 配置,默认支持本地文件 / URL 识图。以火山方舟豆包为例:
|
|
53
67
|
|
|
54
68
|
```json
|
|
55
69
|
{
|
|
@@ -58,23 +72,42 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
|
|
|
58
72
|
"command": "npx",
|
|
59
73
|
"args": ["-y", "image-vision-mcp"],
|
|
60
74
|
"env": {
|
|
61
|
-
"
|
|
62
|
-
"
|
|
75
|
+
"VISION_API_KEY": "你的火山方舟-api-key",
|
|
76
|
+
"VISION_BASE_URL": "https://ark.cn-beijing.volces.com/api/v3",
|
|
77
|
+
"VISION_MODEL": "doubao-seed-2-1-turbo-260628"
|
|
63
78
|
}
|
|
64
79
|
}
|
|
65
80
|
}
|
|
66
81
|
}
|
|
67
82
|
```
|
|
68
83
|
|
|
69
|
-
|
|
84
|
+
改用 Kimi 示例:
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"mcpServers": {
|
|
89
|
+
"vision-mcp": {
|
|
90
|
+
"command": "npx",
|
|
91
|
+
"args": ["-y", "image-vision-mcp"],
|
|
92
|
+
"env": {
|
|
93
|
+
"VISION_API_KEY": "sk-你的-kimi-api-key",
|
|
94
|
+
"VISION_BASE_URL": "https://api.moonshot.cn/v1",
|
|
95
|
+
"VISION_MODEL": "kimi-k2.6"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
重启 Claude Code 后,对 Claude 说"识别 C:/xxx.png",Claude 会自动调用识图工具。
|
|
70
103
|
|
|
71
104
|
### 2. 高级配置(启用图片代理,可选)
|
|
72
105
|
|
|
73
|
-
**什么时候需要**:你用 GLM 等纯文本模型,想在 Claude Code 里直接 `Ctrl+V` 粘贴图片(不用先说"识别图片"
|
|
106
|
+
**什么时候需要**:你用 GLM 等纯文本模型,想在 Claude Code 里直接 `Ctrl+V` 粘贴图片(不用先说"识别图片")。代理会自动拦截图片,调视觉模型识别后转发给上游模型。
|
|
74
107
|
|
|
75
108
|
| 用法 | 怎么识图 |
|
|
76
109
|
|------|----------|
|
|
77
|
-
| 只用 MCP 工具(默认) |
|
|
110
|
+
| 只用 MCP 工具(默认) | 对 Claude 说"识别 C:/xxx.png"或网络图片 URL |
|
|
78
111
|
| 启用图片代理 | 直接 `Ctrl+V` 粘贴图片到 Claude |
|
|
79
112
|
|
|
80
113
|
#### 配置步骤
|
|
@@ -88,9 +121,9 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
|
|
|
88
121
|
"command": "npx",
|
|
89
122
|
"args": ["-y", "image-vision-mcp"],
|
|
90
123
|
"env": {
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
124
|
+
"VISION_API_KEY": "你的视觉模型-api-key",
|
|
125
|
+
"VISION_BASE_URL": "https://ark.cn-beijing.volces.com/api/v3",
|
|
126
|
+
"VISION_MODEL": "doubao-seed-2-1-turbo-260628"
|
|
94
127
|
}
|
|
95
128
|
}
|
|
96
129
|
}
|
|
@@ -102,6 +135,7 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
|
|
|
102
135
|
```json
|
|
103
136
|
{
|
|
104
137
|
"env": {
|
|
138
|
+
"UPSTREAM_BASE_URL": "https://你的上游-llm-api-地址",
|
|
105
139
|
"ANTHROPIC_BASE_URL": "http://127.0.0.1:8787",
|
|
106
140
|
"ANTHROPIC_AUTH_TOKEN": "你的上游-llm-api-token"
|
|
107
141
|
}
|
|
@@ -110,7 +144,7 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
|
|
|
110
144
|
|
|
111
145
|
> 两处 `env` 作用不同:
|
|
112
146
|
> - `~/.claude/settings.json` 的 `env`:Claude Code 自身读取(走代理 + 上游认证)
|
|
113
|
-
> - `~/.claude.json` 里 `mcpServers.vision-mcp.env`:MCP server
|
|
147
|
+
> - `~/.claude.json` 里 `mcpServers.vision-mcp.env`:MCP server 进程读取(视觉模型 key + 上游纯文本模型请求地址)
|
|
114
148
|
|
|
115
149
|
**第 3 步**:重启 Claude Code,直接 `Ctrl+V` 粘贴图片即可。
|
|
116
150
|
|
|
@@ -129,10 +163,10 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
|
|
|
129
163
|
|---------|------|--------|------|
|
|
130
164
|
| `UPSTREAM_BASE_URL` | 是 | - | 上游 LLM API 地址,未设则代理不启动(MCP 工具仍可用) |
|
|
131
165
|
| `UPSTREAM_AUTH_TOKEN` | 否 | 取自 `ANTHROPIC_AUTH_TOKEN` | 上游认证 token |
|
|
132
|
-
| `
|
|
133
|
-
| `
|
|
134
|
-
| `
|
|
135
|
-
| `IMAGE_DESC_PROMPT` | 否 | 内置中文提示词 |
|
|
166
|
+
| `VISION_API_KEY` | 是 | - | 视觉模型 API key(MCP 工具与代理共用) |
|
|
167
|
+
| `VISION_BASE_URL` | 是 | - | 视觉模型 API 端点(见支持的平台表) |
|
|
168
|
+
| `VISION_MODEL` | 是 | - | 视觉模型 ID(见支持的平台表) |
|
|
169
|
+
| `IMAGE_DESC_PROMPT` | 否 | 内置中文提示词 | 代理识别图片时发给视觉模型的提示词 |
|
|
136
170
|
| `ALLOW_PRIVATE_NETWORK_IMAGES` | 否 | - | 设为 `1` 或 `true` 允许访问内网图片 URL(默认拒绝,防 SSRF) |
|
|
137
171
|
|
|
138
172
|
|
|
@@ -144,9 +178,6 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
|
|
|
144
178
|
|
|
145
179
|
对 Claude 说:
|
|
146
180
|
|
|
147
|
-
```
|
|
148
|
-
识别剪贴板里的图片(先 Ctrl+C 复制一张图)
|
|
149
|
-
```
|
|
150
181
|
```
|
|
151
182
|
识别这张图:C:/Users/me/screenshot.png
|
|
152
183
|
```
|
|
@@ -154,7 +185,7 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
|
|
|
154
185
|
描述一下这张网络图片:https://example.com/chart.png
|
|
155
186
|
```
|
|
156
187
|
|
|
157
|
-
Claude 会自动调用 `
|
|
188
|
+
Claude 会自动调用 `vision_describe_image` 工具。
|
|
158
189
|
|
|
159
190
|
### 用代理粘贴图片(配置代理后)
|
|
160
191
|
|
|
@@ -168,7 +199,7 @@ Claude 会自动调用 `kimi_describe_clipboard` 或 `kimi_describe_image` 工
|
|
|
168
199
|
|
|
169
200
|
## 工具参数
|
|
170
201
|
|
|
171
|
-
### `
|
|
202
|
+
### `vision_describe_image`
|
|
172
203
|
|
|
173
204
|
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
|
174
205
|
|------|------|------|------|------|
|
|
@@ -176,17 +207,10 @@ Claude 会自动调用 `kimi_describe_clipboard` 或 `kimi_describe_image` 工
|
|
|
176
207
|
| `prompt` | string | 否 | "请详细描述这张图片的内容。" | 识图指令,最长 4000 字符 |
|
|
177
208
|
| `max_tokens` | number | 否 | 2048 | 返回描述的最大 token 数,1-8192 |
|
|
178
209
|
|
|
179
|
-
### `kimi_describe_clipboard`
|
|
180
|
-
|
|
181
|
-
| 参数 | 类型 | 必填 | 默认 | 说明 |
|
|
182
|
-
|------|------|------|------|------|
|
|
183
|
-
| `prompt` | string | 否 | "请详细描述这张图片的内容。" | 识图指令,最长 4000 字符 |
|
|
184
|
-
| `max_tokens` | number | 否 | 2048 | 返回描述的最大 token 数,1-8192 |
|
|
185
|
-
|
|
186
210
|
## 限制
|
|
187
211
|
|
|
188
|
-
- 图片大小上限 20MB(URL
|
|
189
|
-
- 请求超时 60s
|
|
212
|
+
- 图片大小上限 20MB(URL 下载与本地文件读取均适用)
|
|
213
|
+
- 请求超时 60s(视觉模型 API)、30s(图片下载)
|
|
190
214
|
- 输出文本超过 25000 字符会截断
|
|
191
215
|
- 支持格式:JPEG / JPG / PNG / GIF / WebP / BMP
|
|
192
216
|
|
|
@@ -194,37 +218,27 @@ Claude 会自动调用 `kimi_describe_clipboard` 或 `kimi_describe_image` 工
|
|
|
194
218
|
|
|
195
219
|
| 错误 | 解决方案 |
|
|
196
220
|
|------|----------|
|
|
197
|
-
| `
|
|
198
|
-
|
|
|
199
|
-
|
|
|
200
|
-
|
|
|
221
|
+
| `VISION_API_KEY 环境变量未设置` | 检查 MCP 配置的 `env.VISION_API_KEY` |
|
|
222
|
+
| `视觉模型 API 鉴权失败 (401)` | API key 错误或失效 |
|
|
223
|
+
| `视觉模型 API 模型不存在 (404)` | 模型名错误(检查 `VISION_MODEL` 是否与 `VISION_BASE_URL` 对应平台匹配) |
|
|
224
|
+
| `视觉模型 API 限流 (429)` | 请求过于频繁,稍后重试 |
|
|
201
225
|
| `无法访问本地文件` | 路径错误或无权限 |
|
|
202
226
|
| `下载图片失败` | URL 无法访问或超时 |
|
|
203
|
-
| `剪贴板中没有图片` | 先复制一张图片到剪贴板 |
|
|
204
227
|
| `listen EADDRINUSE 127.0.0.1:8787` | 端口被占用,改 `ANTHROPIC_BASE_URL` 里的端口或关掉占用进程 |
|
|
205
228
|
| 代理启动失败但 MCP 工具可用 | 不影响 MCP 工具功能,仅代理不可用 |
|
|
229
|
+
| 改了配置不生效 | 代理是独立常驻进程,需 kill 旧代理进程后重启 Claude Code 会话 |
|
|
206
230
|
|
|
207
231
|
## 开发
|
|
208
232
|
|
|
209
233
|
```bash
|
|
210
234
|
npm run dev # 开发模式(tsx watch,热重载)
|
|
211
|
-
npm run build # 编译 TypeScript
|
|
235
|
+
npm run build # 编译 TypeScript -> dist/
|
|
212
236
|
npm run clean # 清理构建产物
|
|
213
237
|
```
|
|
214
238
|
|
|
215
|
-
## 跨平台剪贴板支持
|
|
216
|
-
|
|
217
|
-
`kimi_describe_clipboard` 工具的剪贴板读取策略:
|
|
218
|
-
|
|
219
|
-
| 平台 | 优先方案 | 回退方案 |
|
|
220
|
-
|------|----------|----------|
|
|
221
|
-
| Windows | PowerShell + System.Windows.Forms | - |
|
|
222
|
-
| macOS | `pngpaste`(`brew install pngpaste`) | `osascript` |
|
|
223
|
-
| Linux | `xclip` | `xsel`(`sudo apt install xclip`) |
|
|
224
|
-
|
|
225
239
|
## 贡献
|
|
226
240
|
|
|
227
|
-
欢迎提 issue 和 PR
|
|
241
|
+
欢迎提 issue 和 PR。支持任意 OpenAI 兼容的视觉模型,架构上已预留扩展点。
|
|
228
242
|
|
|
229
243
|
## License
|
|
230
244
|
|
package/dist/constants.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export const API_BASE_URL = process.env.
|
|
2
|
-
export const DEFAULT_MODEL = process.env.
|
|
1
|
+
export const API_BASE_URL = process.env.VISION_BASE_URL?.replace(/\/+$/, "") || "";
|
|
2
|
+
export const DEFAULT_MODEL = process.env.VISION_MODEL || "";
|
|
3
3
|
export const CHARACTER_LIMIT = 25000;
|
|
4
4
|
export const REQUEST_TIMEOUT_MS = 60000;
|
|
5
5
|
export const IMAGE_DOWNLOAD_TIMEOUT_MS = 30000;
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AACnF,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAE7D,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;CACX,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG,eAAe,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -6,15 +6,13 @@
|
|
|
6
6
|
* 使用 stdio 传输,供 Claude Code 本地调用。
|
|
7
7
|
*
|
|
8
8
|
* 同时启动 HTTP 图片拦截代理:拦截 Claude Code 发往上游 API 的图片请求,
|
|
9
|
-
*
|
|
9
|
+
* 调用视觉模型识别后替换为文字描述,避免 GLM 等纯文本模型 400 报错。
|
|
10
10
|
* 配置 ANTHROPIC_BASE_URL=http://127.0.0.1:8787 即可启用。
|
|
11
11
|
*/
|
|
12
12
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
13
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
14
14
|
import { registerDescribeImageTool } from "./tools/describeImage.js";
|
|
15
|
-
import { registerDescribeClipboardTool } from "./tools/describeClipboard.js";
|
|
16
15
|
import { ensureImageProxyRunning } from "./proxy/imageProxy.js";
|
|
17
|
-
import { cleanupOldTempImages } from "./services/clipboard.js";
|
|
18
16
|
function getRequiredEnv(name, hint) {
|
|
19
17
|
const value = process.env[name]?.trim();
|
|
20
18
|
if (!value) {
|
|
@@ -26,11 +24,10 @@ function getRequiredEnv(name, hint) {
|
|
|
26
24
|
}
|
|
27
25
|
async function main() {
|
|
28
26
|
// 0. fail-fast 校验必需的环境变量
|
|
29
|
-
const apiKey = getRequiredEnv("
|
|
30
|
-
getRequiredEnv("
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// 2. 按需拉起独立常驻的 HTTP 图片拦截代理(与 MCP 进程解耦:
|
|
27
|
+
const apiKey = getRequiredEnv("VISION_API_KEY", "请在 MCP 配置的 env 里设置 VISION_API_KEY");
|
|
28
|
+
getRequiredEnv("VISION_BASE_URL", "请在 MCP 配置的 env 里设置 VISION_BASE_URL(如 https://ark.cn-beijing.volces.com/api/v3)");
|
|
29
|
+
getRequiredEnv("VISION_MODEL", "请在 MCP 配置的 env 里设置 VISION_MODEL(视觉模型 ID,如 doubao-seed-2-1-turbo-260628)");
|
|
30
|
+
// 1. 按需拉起独立常驻的 HTTP 图片拦截代理(与 MCP 进程解耦:
|
|
34
31
|
// 代理脱离任何会话独立运行,关掉任意窗口都不影响它)
|
|
35
32
|
try {
|
|
36
33
|
await ensureImageProxyRunning();
|
|
@@ -38,13 +35,12 @@ async function main() {
|
|
|
38
35
|
catch (err) {
|
|
39
36
|
console.error("[vision-mcp] 代理拉起失败(不影响 MCP 功能):", err);
|
|
40
37
|
}
|
|
41
|
-
//
|
|
38
|
+
// 2. 启动 MCP 服务器
|
|
42
39
|
const server = new McpServer({
|
|
43
40
|
name: "vision-mcp-server",
|
|
44
41
|
version: "1.0.0",
|
|
45
42
|
});
|
|
46
43
|
registerDescribeImageTool(server, () => apiKey);
|
|
47
|
-
registerDescribeClipboardTool(server, () => apiKey);
|
|
48
44
|
const transport = new StdioServerTransport();
|
|
49
45
|
await server.connect(transport);
|
|
50
46
|
console.error("[vision-mcp] server running via stdio");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,SAAS,cAAc,CAAC,IAAY,EAAE,IAAY;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,IAAI,UAAU,CAAC,CAAC;QAClD,OAAO,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,yBAAyB;IACzB,MAAM,MAAM,GAAG,cAAc,CAC3B,gBAAgB,EAChB,mCAAmC,CACpC,CAAC;IACF,cAAc,CACZ,iBAAiB,EACjB,gFAAgF,CACjF,CAAC;IACF,cAAc,CACZ,cAAc,EACd,yEAAyE,CAC1E,CAAC;IAEF,uCAAuC;IACvC,+BAA+B;IAC/B,IAAI,CAAC;QACH,MAAM,uBAAuB,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;IAED,gBAAgB;IAChB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,yBAAyB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAEhD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACzD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|