image-vision-mcp 1.0.0 → 1.0.1

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 CHANGED
@@ -45,8 +45,6 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
45
45
  - Node.js >= 18
46
46
  - Moonshot API Key(在 [platform.moonshot.cn](https://platform.moonshot.cn) 申请)
47
47
 
48
- 构建产物在 `dist/index.js`。
49
-
50
48
  ## 配置
51
49
 
52
50
  ### 1. 基础配置(启用 MCP 工具)
@@ -57,8 +55,8 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
57
55
  {
58
56
  "mcpServers": {
59
57
  "vision-mcp": {
60
- "command": "node",
61
- "args": ["/absolute/path/to/vision-mcp/dist/index.js"],
58
+ "command": "npx",
59
+ "args": ["-y", "image-vision-mcp"],
62
60
  "env": {
63
61
  "MOONSHOT_API_KEY": "sk-你的-moonshot-api-key",
64
62
  "MOONSHOT_BASE_URL": "https://api.kimi.com/coding/v1"
@@ -87,8 +85,8 @@ MCP 工具和代理共享同一进程、同一份 Moonshot 配置,启动 MCP s
87
85
  {
88
86
  "mcpServers": {
89
87
  "vision-mcp": {
90
- "command": "node",
91
- "args": ["/absolute/path/to/vision-mcp/dist/index.js"],
88
+ "command": "npx",
89
+ "args": ["-y", "image-vision-mcp"],
92
90
  "env": {
93
91
  "MOONSHOT_API_KEY": "sk-你的-moonshot-key",
94
92
  "MOONSHOT_BASE_URL": "https://api.kimi.com/coding/v1",
@@ -224,25 +222,6 @@ npm run clean # 清理构建产物
224
222
  | macOS | `pngpaste`(`brew install pngpaste`) | `osascript` |
225
223
  | Linux | `xclip` | `xsel`(`sudo apt install xclip`) |
226
224
 
227
- ## 安装
228
-
229
- 发布到 npm 后,直接在 MCP 配置里用 `npx` 启动。`-y` 表示自动下载并运行 `image-vision-mcp` 包:
230
-
231
- ```json
232
- {
233
- "mcpServers": {
234
- "vision-mcp": {
235
- "command": "npx",
236
- "args": ["-y", "image-vision-mcp"],
237
- "env": {
238
- "MOONSHOT_API_KEY": "sk-你的-moonshot-api-key",
239
- "MOONSHOT_BASE_URL": "https://api.moonshot.cn/v1"
240
- }
241
- }
242
- }
243
- }
244
- ```
245
-
246
225
  ## 贡献
247
226
 
248
227
  欢迎提 issue 和 PR。当前只支持 Moonshot Kimi,后续计划扩展其他视觉模型(OpenAI、Gemini、通义千问等),架构上已预留扩展点。
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ 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
15
  import { registerDescribeClipboardTool } from "./tools/describeClipboard.js";
16
- import { startImageProxy } from "./proxy/imageProxy.js";
16
+ import { ensureImageProxyRunning } from "./proxy/imageProxy.js";
17
17
  import { cleanupOldTempImages } from "./services/clipboard.js";
18
18
  function getRequiredEnv(name, hint) {
19
19
  const value = process.env[name]?.trim();
@@ -30,12 +30,13 @@ async function main() {
30
30
  getRequiredEnv("MOONSHOT_BASE_URL", "请在 MCP 配置的 env 里设置 MOONSHOT_BASE_URL(如 https://api.moonshot.cn/v1)");
31
31
  // 1. 清理上次进程异常退出残留的临时图片
32
32
  await cleanupOldTempImages();
33
- // 2. 启动 HTTP 图片拦截代理(与 MCP 共存于同一进程)
33
+ // 2. 按需拉起独立常驻的 HTTP 图片拦截代理(与 MCP 进程解耦:
34
+ // 代理脱离任何会话独立运行,关掉任意窗口都不影响它)
34
35
  try {
35
- await startImageProxy();
36
+ await ensureImageProxyRunning();
36
37
  }
37
38
  catch (err) {
38
- console.error("[vision-mcp] 代理启动失败(不影响 MCP 功能):", err);
39
+ console.error("[vision-mcp] 代理拉起失败(不影响 MCP 功能):", err);
39
40
  }
40
41
  // 3. 启动 MCP 服务器
41
42
  const server = new McpServer({
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,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,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,kBAAkB,EAClB,qCAAqC,CACtC,CAAC;IACF,cAAc,CACZ,mBAAmB,EACnB,oEAAoE,CACrE,CAAC;IAEF,uBAAuB;IACvB,MAAM,oBAAoB,EAAE,CAAC;IAE7B,mCAAmC;IACnC,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;IAC1B,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;IAChD,6BAA6B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAEpD,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"}
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,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,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,kBAAkB,EAClB,qCAAqC,CACtC,CAAC;IACF,cAAc,CACZ,mBAAmB,EACnB,oEAAoE,CACrE,CAAC;IAEF,uBAAuB;IACvB,MAAM,oBAAoB,EAAE,CAAC;IAE7B,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;IAChD,6BAA6B,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;IAEpD,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"}
@@ -1 +1,2 @@
1
1
  export declare function startImageProxy(): Promise<void>;
2
+ export declare function ensureImageProxyRunning(): Promise<void>;
@@ -1,11 +1,11 @@
1
1
  import http from "http";
2
2
  import https from "https";
3
- import { URL } from "url";
3
+ import { URL, fileURLToPath } from "url";
4
4
  import zlib from "zlib";
5
5
  import fs from "fs";
6
6
  import path from "path";
7
7
  import os from "os";
8
- import { execSync } from "child_process";
8
+ import { spawn } from "child_process";
9
9
  import { callMoonshot } from "../services/moonshot.js";
10
10
  // ────────────────────── 日志 ──────────────────────
11
11
  // 日志文件路径:优先用环境变量,否则放系统临时目录(跨平台、无需权限处理)
@@ -76,77 +76,75 @@ async function describeImage(base64Data, mimeType) {
76
76
  }
77
77
  return description;
78
78
  }
79
- async function processContent(content) {
80
- if (typeof content === "string")
81
- return content;
82
- if (!Array.isArray(content))
83
- return content;
84
- // 日志:记录所有 block 类型,方便排查
85
- const blockTypes = content.map((b) => b?.type || "unknown");
86
- log(`[image-proxy] content blocks: ${JSON.stringify(blockTypes)}`);
87
- const newContent = [];
88
- for (const block of content) {
89
- // 格式1: Anthropic 标准 {"type":"image","source":{"type":"base64",...}}
90
- if (block?.type === "image" && block.source?.type === "base64") {
91
- const { media_type, data } = block.source;
79
+ // 处理单个 content block:图片类型识别后替换为文字,其余原样返回。
80
+ // 同层数组的多个图片块由调用方 Promise.all 并行触发,这里只负责单块转换。
81
+ async function describeBlock(block) {
82
+ // 格式1: Anthropic 标准 {"type":"image","source":{"type":"base64",...}}
83
+ if (block?.type === "image" && block.source?.type === "base64") {
84
+ const { media_type, data } = block.source;
85
+ try {
86
+ const description = await describeImage(data, media_type);
87
+ log(`[image-proxy] 图片已识别 (${media_type}, ${Math.round((data.length * 0.75) / 1024)} KB)`);
88
+ return {
89
+ type: "text",
90
+ text: `[以下是用户粘贴的图片内容描述]\n${description}\n[图片描述结束]`,
91
+ };
92
+ }
93
+ catch (err) {
94
+ log(`[image-proxy] 图片识别失败: ${err.message}`);
95
+ return {
96
+ type: "text",
97
+ text: `[图片识别失败: ${err.message}]`,
98
+ };
99
+ }
100
+ }
101
+ // 格式2: OpenAI 风格 {"type":"image_url","image_url":{"url":"data:image/png;base64,..."}}
102
+ if (block?.type === "image_url" &&
103
+ block.image_url?.url?.startsWith("data:image")) {
104
+ const url = block.image_url.url;
105
+ const match = url.match(/^data:(image\/[a-z+]+);base64,(.+)$/i);
106
+ if (match) {
107
+ const [, media_type, data] = match;
92
108
  try {
93
109
  const description = await describeImage(data, media_type);
94
- newContent.push({
110
+ log(`[image-proxy] image_url 图片已识别 (${media_type})`);
111
+ return {
95
112
  type: "text",
96
- text: `[以下是用户粘贴的图片内容描述]\n${description}\n[图片描述结束]`,
97
- });
98
- log(`[image-proxy] 图片已识别 (${media_type}, ${Math.round((data.length * 0.75) / 1024)} KB)`);
113
+ text: `[以下是截图内容描述]\n${description}\n[图片描述结束]`,
114
+ };
99
115
  }
100
116
  catch (err) {
101
- log(`[image-proxy] 图片识别失败: ${err.message}`);
102
- newContent.push({
117
+ log(`[image-proxy] image_url 图片识别失败: ${err.message}`);
118
+ return {
103
119
  type: "text",
104
120
  text: `[图片识别失败: ${err.message}]`,
105
- });
106
- }
107
- }
108
- // 格式2: OpenAI 风格 {"type":"image_url","image_url":{"url":"data:image/png;base64,..."}}
109
- else if (block?.type === "image_url" &&
110
- block.image_url?.url?.startsWith("data:image")) {
111
- const url = block.image_url.url;
112
- const match = url.match(/^data:(image\/[a-z+]+);base64,(.+)$/i);
113
- if (match) {
114
- const [, media_type, data] = match;
115
- try {
116
- const description = await describeImage(data, media_type);
117
- newContent.push({
118
- type: "text",
119
- text: `[以下是截图内容描述]\n${description}\n[图片描述结束]`,
120
- });
121
- log(`[image-proxy] image_url 图片已识别 (${media_type})`);
122
- }
123
- catch (err) {
124
- log(`[image-proxy] image_url 图片识别失败: ${err.message}`);
125
- newContent.push({
126
- type: "text",
127
- text: `[图片识别失败: ${err.message}]`,
128
- });
129
- }
130
- }
131
- else {
132
- newContent.push(block);
121
+ };
133
122
  }
134
123
  }
135
- // 格式3: tool_result 里嵌套图片(MCP 工具返回的截图)
136
- else if (block?.type === "tool_result" && Array.isArray(block.content)) {
137
- const toolContent = block.content;
138
- const processed = await processContent(toolContent);
139
- newContent.push({ ...block, content: processed });
140
- }
141
- else if (block?.type === "image" && block.source && !block.source.type?.startsWith("base64")) {
142
- log(`[image-proxy] 未识别的 image source type: ${block.source.type}`);
143
- newContent.push(block);
144
- }
145
- else {
146
- newContent.push(block);
147
- }
124
+ return block;
125
+ }
126
+ // 格式3: tool_result 里嵌套图片(MCP 工具返回的截图)
127
+ if (block?.type === "tool_result" && Array.isArray(block.content)) {
128
+ const toolContent = block.content;
129
+ const processed = await processContent(toolContent);
130
+ return { ...block, content: processed };
148
131
  }
149
- return newContent;
132
+ // 其他未识别的 image source type
133
+ if (block?.type === "image" && block.source && !block.source.type?.startsWith("base64")) {
134
+ log(`[image-proxy] 未识别的 image source type: ${block.source.type}`);
135
+ }
136
+ return block;
137
+ }
138
+ async function processContent(content) {
139
+ if (typeof content === "string")
140
+ return content;
141
+ if (!Array.isArray(content))
142
+ return content;
143
+ // 日志:记录所有 block 类型,方便排查
144
+ const blockTypes = content.map((b) => b?.type || "unknown");
145
+ log(`[image-proxy] content blocks: ${JSON.stringify(blockTypes)}`);
146
+ // 并行识别同一层级的所有图片块,map 保持原顺序
147
+ return Promise.all(content.map((block) => describeBlock(block)));
150
148
  }
151
149
  async function processMessages(messages) {
152
150
  if (!Array.isArray(messages))
@@ -205,30 +203,62 @@ function forwardRequest(req, res, body) {
205
203
  }
206
204
  proxyReq.end();
207
205
  }
208
- // ────────────────────── 端口清理 ──────────────────────
209
- function killProcessOnPort(port) {
206
+ // ────────────────────── 单例锁 ──────────────────────
207
+ // 锁文件路径:系统临时目录,跨平台无需权限处理
208
+ const LOCK_FILE = path.join(os.tmpdir(), "vision-mcp-proxy.lock");
209
+ // 检测 PID 对应的进程是否仍在运行(信号 0 不实际发信号,仅探测存活)
210
+ function isProcessAlive(pid) {
211
+ try {
212
+ process.kill(pid, 0);
213
+ return true;
214
+ }
215
+ catch {
216
+ // ESRCH: 进程不存在;EPERM: 存在但无权限。两者都视为"不可达",允许接管
217
+ return false;
218
+ }
219
+ }
220
+ // 尝试获取单例锁:保证全局只有一个 vision-mcp 进程启动图片代理,
221
+ // 避免多个 MCP 进程互相 kill 对方占用的 8787 端口(会把正在处理请求的代理杀掉)。
222
+ // 返回 true 表示拿到锁、应由本进程启动代理;false 表示已有代理在运行,跳过。
223
+ function tryAcquireLock() {
210
224
  try {
211
- if (process.platform === "win32") {
212
- execSync(`powershell -NoProfile -Command "Get-NetTCPConnection -LocalPort ${port} -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -ErrorAction SilentlyContinue }"`, { stdio: "ignore", timeout: 5000 });
225
+ // O_EXCL (wx) 原子创建:文件已存在则抛 EEXIST
226
+ const fd = fs.openSync(LOCK_FILE, "wx");
227
+ fs.writeFileSync(fd, String(process.pid));
228
+ fs.closeSync(fd);
229
+ return true;
230
+ }
231
+ catch (err) {
232
+ if (err.code !== "EEXIST") {
233
+ // 其他 IO 错误,保守起见不获取锁
234
+ return false;
213
235
  }
214
- else if (process.platform === "darwin" || process.platform === "linux") {
215
- // macOS/Linux: lsof 找到占用端口的 PID 并 kill -9
216
- // lsof 不存在时静默失败,|| true 保证命令返回 0
217
- execSync(`lsof -ti :${port} 2>/dev/null | xargs kill -9 2>/dev/null || true`, {
218
- stdio: "ignore",
219
- timeout: 5000,
220
- });
236
+ // 锁文件已存在:检查持有者是否还活着
237
+ try {
238
+ const holderPid = parseInt(fs.readFileSync(LOCK_FILE, "utf8").trim(), 10);
239
+ if (holderPid && isProcessAlive(holderPid)) {
240
+ return false; // 持有者仍存活,复用已有代理
241
+ }
242
+ // 持有者已退出(崩溃未释放锁):清理僵尸锁后递归重试
243
+ fs.unlinkSync(LOCK_FILE);
244
+ return tryAcquireLock();
221
245
  }
222
- else {
246
+ catch {
223
247
  return false;
224
248
  }
225
- log(`[image-proxy] 已清理占用端口 ${port} 的旧进程`);
226
- return true;
249
+ }
250
+ }
251
+ // 释放锁:仅当锁文件登记的 PID 是本进程时才删除,避免误删他人的锁
252
+ function releaseLock() {
253
+ try {
254
+ const holderPid = parseInt(fs.readFileSync(LOCK_FILE, "utf8").trim(), 10);
255
+ if (holderPid === process.pid) {
256
+ fs.unlinkSync(LOCK_FILE);
257
+ }
227
258
  }
228
259
  catch {
229
- // 忽略错误
260
+ // 忽略:文件可能已被删除
230
261
  }
231
- return false;
232
262
  }
233
263
  // ────────────────────── 启动代理 ──────────────────────
234
264
  export function startImageProxy() {
@@ -238,6 +268,19 @@ export function startImageProxy() {
238
268
  resolve();
239
269
  return;
240
270
  }
271
+ // 单例锁:保证全局只有一个代理进程。拿不到锁说明已有代理在运行,
272
+ // 直接复用,避免多 MCP 进程互相 kill 8787 端口导致正在处理的请求中断。
273
+ if (!tryAcquireLock()) {
274
+ log("[image-proxy] 已有代理进程在运行,跳过启动(复用已有代理,MCP 工具仍可用)");
275
+ resolve();
276
+ return;
277
+ }
278
+ // 进程退出时释放锁,让其他 MCP 进程下次启动时能接管
279
+ const releaseOnExit = () => releaseLock();
280
+ process.on("SIGINT", releaseOnExit);
281
+ process.on("SIGTERM", releaseOnExit);
282
+ process.on("beforeExit", releaseOnExit);
283
+ process.on("exit", releaseOnExit);
241
284
  const server = http.createServer(async (req, res) => {
242
285
  const isMessagesEndpoint = req.method === "POST" && (req.url || "").includes("/v1/messages");
243
286
  if (!isMessagesEndpoint) {
@@ -319,28 +362,73 @@ export function startImageProxy() {
319
362
  log(`[image-proxy] 请求错误: ${err.message}`);
320
363
  });
321
364
  });
322
- let retried = false;
323
365
  server.on("error", (err) => {
324
366
  const msg = err.message;
325
- if (msg.includes("EADDRINUSE") && !retried) {
326
- retried = true;
327
- log(`[image-proxy] 端口 ${PROXY_PORT} 被占用,清理旧进程后重试...`);
328
- killProcessOnPort(PROXY_PORT);
329
- setTimeout(() => {
330
- server.listen(PROXY_PORT, "127.0.0.1");
331
- }, 1000);
367
+ if (msg.includes("EADDRINUSE")) {
368
+ // 端口已被占用。锁机制保证正常情况下只有一个本 MCP 代理在跑,
369
+ // 这里被占用说明是其他程序,或锁在极端情况下漏网。
370
+ // 不再 kill(避免杀掉正在处理请求的代理),直接放弃启动。
371
+ log(`[image-proxy] 端口 ${PROXY_PORT} 已被占用,放弃启动代理(MCP 工具仍可用)`);
332
372
  }
333
373
  else {
334
- // 其他错误或重试仍失败,不阻塞 MCP 启动
335
374
  log(`[image-proxy] 代理启动失败(MCP 工具仍可用): ${msg}`);
336
- resolve();
337
375
  }
376
+ releaseLock();
377
+ resolve();
338
378
  });
339
379
  server.listen(PROXY_PORT, "127.0.0.1", () => {
340
- log(`[image-proxy] 代理已启动: http://127.0.0.1:${PROXY_PORT}`);
380
+ log(`[image-proxy] 代理已启动: http://127.0.0.1:${PROXY_PORT} (pid ${process.pid})`);
341
381
  log(`[image-proxy] 上游 API: ${UPSTREAM_BASE_URL}`);
342
382
  resolve();
343
383
  });
344
384
  });
345
385
  }
386
+ // ────────────────────── MCP 端:按需拉起独立代理 ──────────────────────
387
+ // 独立代理入口脚本(与本文件同目录,编译后为 dist/proxy/standaloneProxy.js)
388
+ const STANDALONE_SCRIPT = fileURLToPath(new URL("standaloneProxy.js", import.meta.url));
389
+ // 读取锁文件里登记的代理 PID;不存在/无效返回 null
390
+ function readLockHolderPid() {
391
+ try {
392
+ const pid = parseInt(fs.readFileSync(LOCK_FILE, "utf8").trim(), 10);
393
+ return Number.isFinite(pid) && pid > 0 ? pid : null;
394
+ }
395
+ catch {
396
+ return null;
397
+ }
398
+ }
399
+ // MCP 进程调用:确保有一个独立常驻的图片代理在运行。
400
+ // - 锁持有者进程存活 → 复用已有代理
401
+ // - 否则 detached spawn 一个独立代理进程,与本 MCP 进程生命周期解耦
402
+ // 任何一个 Claude Code 会话退出都不影响代理,代理常驻至自身崩溃或被主动 kill。
403
+ export function ensureImageProxyRunning() {
404
+ return new Promise((resolve) => {
405
+ if (!UPSTREAM_BASE_URL) {
406
+ log("[image-proxy] 未设置 UPSTREAM_BASE_URL,代理功能不可用(MCP 工具仍可用)");
407
+ resolve();
408
+ return;
409
+ }
410
+ // 1. 已有独立代理在运行则直接复用
411
+ const holderPid = readLockHolderPid();
412
+ if (holderPid !== null && isProcessAlive(holderPid)) {
413
+ log(`[image-proxy] 独立代理已在运行 (pid ${holderPid}),复用`);
414
+ resolve();
415
+ return;
416
+ }
417
+ // 2. detached spawn 独立代理进程:stdio ignore + unref,独立于父进程生命周期
418
+ try {
419
+ const child = spawn(process.execPath, [STANDALONE_SCRIPT], {
420
+ detached: true,
421
+ stdio: "ignore",
422
+ env: { ...process.env },
423
+ });
424
+ child.unref();
425
+ log(`[image-proxy] 已拉起独立代理进程 (pid ${child.pid})`);
426
+ }
427
+ catch (err) {
428
+ log(`[image-proxy] 拉起独立代理进程失败: ${err.message}(MCP 工具仍可用)`);
429
+ }
430
+ // 不等待子进程 listen 完成即返回:MCP 工具不依赖代理,代理会在后台就绪
431
+ resolve();
432
+ });
433
+ }
346
434
  //# sourceMappingURL=imageProxy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"imageProxy.js","sourceRoot":"","sources":["../../src/proxy/imageProxy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"imageProxy.js","sourceRoot":"","sources":["../../src/proxy/imageProxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * 独立常驻的图片拦截代理进程入口。
4
+ *
5
+ * 由第一个 MCP 进程通过 detached spawn 拉起,此后独立于任何 Claude Code 会话
6
+ * 常驻运行:任一会话退出都不影响代理,代理持续服务至自身崩溃或被主动 kill。
7
+ *
8
+ * 启动语义(见 imageProxy.ts 的 startImageProxy):
9
+ * - 拿到单例锁且 listen 成功 → 常驻服务
10
+ * - 锁已被占(已有代理在跑)→ 安静退出,让在跑的那个继续服务
11
+ * - listen 失败(端口被占)→ 释放锁、退出
12
+ */
13
+ import { startImageProxy } from "./imageProxy.js";
14
+ startImageProxy().catch((err) => {
15
+ console.error("[vision-mcp-proxy] fatal:", err);
16
+ process.exit(1);
17
+ });
18
+ //# sourceMappingURL=standaloneProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standaloneProxy.js","sourceRoot":"","sources":["../../src/proxy/standaloneProxy.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC9B,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1,7 +1,17 @@
1
+ import fs from "fs";
2
+ import os from "os";
3
+ import path from "path";
1
4
  import { DescribeClipboardInputSchema } from "../schemas.js";
2
5
  import { DEFAULT_MODEL, CHARACTER_LIMIT } from "../constants.js";
3
6
  import { readClipboardImage } from "../services/clipboard.js";
4
7
  import { callMoonshot, handleMoonshotError } from "../services/moonshot.js";
8
+ // 排查用日志:MCP 工具走 stdio,console 输出用户看不到,写文件方便排查耗时
9
+ const LOG_FILE = path.join(os.tmpdir(), "vision-mcp-clipboard.log");
10
+ function log(msg) {
11
+ const line = `[${new Date().toISOString()}] ${msg}\n`;
12
+ console.error(line.trim());
13
+ fs.appendFile(LOG_FILE, line, () => { });
14
+ }
5
15
  export function registerDescribeClipboardTool(server, getApiKey) {
6
16
  server.registerTool("kimi_describe_clipboard", {
7
17
  title: "Kimi 识别剪贴板图片",
@@ -40,10 +50,12 @@ Error Handling:
40
50
  },
41
51
  }, async (params) => {
42
52
  const apiKey = getApiKey();
53
+ const t0 = Date.now();
43
54
  // 1. 从剪贴板读取图片
44
55
  let imageResult;
45
56
  try {
46
57
  imageResult = await readClipboardImage();
58
+ log(`读取剪贴板耗时 ${Date.now() - t0}ms, 图片 ${(imageResult.sizeBytes / 1024).toFixed(1)} KB (${imageResult.mimeType})`);
47
59
  }
48
60
  catch (err) {
49
61
  return {
@@ -62,6 +74,7 @@ Error Handling:
62
74
  ];
63
75
  const messages = [{ role: "user", content }];
64
76
  // 3. 调用 Moonshot API
77
+ const t1 = Date.now();
65
78
  let response;
66
79
  try {
67
80
  response = await callMoonshot({
@@ -70,6 +83,7 @@ Error Handling:
70
83
  messages,
71
84
  maxTokens: params.max_tokens,
72
85
  });
86
+ log(`Moonshot 调用耗时 ${Date.now() - t1}ms, completion_tokens=${response.usage?.completion_tokens ?? "?"}`);
73
87
  }
74
88
  catch (err) {
75
89
  return {
@@ -98,6 +112,7 @@ Error Handling:
98
112
  if (text.length > CHARACTER_LIMIT) {
99
113
  text = text.slice(0, CHARACTER_LIMIT) + `\n\n[已截断,原文长度 ${text.length} 字符]`;
100
114
  }
115
+ log(`总耗时 ${Date.now() - t0}ms`);
101
116
  return {
102
117
  content: [{ type: "text", text }],
103
118
  };
@@ -1 +1 @@
1
- {"version":3,"file":"describeClipboard.js","sourceRoot":"","sources":["../../src/tools/describeClipboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"describeClipboard.js","sourceRoot":"","sources":["../../src/tools/describeClipboard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "image-vision-mcp",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "MCP server for image recognition via vision models (extensible to multiple providers), with an HTTP image-intercepting proxy that lets text-only LLMs accept image input in Claude Code.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",