image-vision-mcp 1.0.0 → 1.0.2

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.
@@ -1,106 +0,0 @@
1
- import { DescribeClipboardInputSchema } from "../schemas.js";
2
- import { DEFAULT_MODEL, CHARACTER_LIMIT } from "../constants.js";
3
- import { readClipboardImage } from "../services/clipboard.js";
4
- import { callMoonshot, handleMoonshotError } from "../services/moonshot.js";
5
- export function registerDescribeClipboardTool(server, getApiKey) {
6
- server.registerTool("kimi_describe_clipboard", {
7
- title: "Kimi 识别剪贴板图片",
8
- description: `使用 Moonshot Kimi 视觉模型 (kimi-k2.6) 识别剪贴板中的图片并返回文本描述。
9
-
10
- 直接从系统剪贴板读取图片,无需提供文件路径或 URL。
11
- 跨平台支持: Windows (PowerShell)、macOS (pngpaste/osascript)、Linux (xclip/xsel)。
12
-
13
- Args:
14
- - prompt (string, 可选): 询问图片的问题或识图指令,默认 "请详细描述这张图片的内容。"。最长 4000 字符
15
- - max_tokens (number, 可选): 返回描述的最大 token 数,1-8192,默认 2048
16
-
17
- Returns:
18
- 文本内容,包含图片描述和 token 使用情况元信息。
19
-
20
- Usage:
21
- 1. 用户先复制一张图片到剪贴板 (Ctrl+C)
22
- 2. 调用此工具即可自动从剪贴板读取并识别
23
-
24
- Examples:
25
- - 描述剪贴板截图: (无参数,使用默认 prompt)
26
- - 提取剪贴板图片中的文字: prompt="请提取图片中的所有文字"
27
- - 识别剪贴板中的图表: prompt="图表中显示的数据是什么"
28
-
29
- Error Handling:
30
- - "剪贴板中没有图片": 请先复制一张图片到剪贴板
31
- - "不支持的平台": 当前操作系统不支持
32
- - "Moonshot API 鉴权失败 (401)": API key 错误
33
- - "Moonshot API 限流 (429)": 请求过于频繁,请稍后重试`,
34
- inputSchema: DescribeClipboardInputSchema,
35
- annotations: {
36
- readOnlyHint: true,
37
- destructiveHint: false,
38
- idempotentHint: false,
39
- openWorldHint: true,
40
- },
41
- }, async (params) => {
42
- const apiKey = getApiKey();
43
- // 1. 从剪贴板读取图片
44
- let imageResult;
45
- try {
46
- imageResult = await readClipboardImage();
47
- }
48
- catch (err) {
49
- return {
50
- content: [
51
- {
52
- type: "text",
53
- text: `Error: 读取剪贴板图片失败 - ${err.message}`,
54
- },
55
- ],
56
- };
57
- }
58
- // 2. 构造 Moonshot 请求
59
- const content = [
60
- { type: "image_url", image_url: { url: imageResult.dataUrl } },
61
- { type: "text", text: params.prompt },
62
- ];
63
- const messages = [{ role: "user", content }];
64
- // 3. 调用 Moonshot API
65
- let response;
66
- try {
67
- response = await callMoonshot({
68
- apiKey,
69
- model: DEFAULT_MODEL,
70
- messages,
71
- maxTokens: params.max_tokens,
72
- });
73
- }
74
- catch (err) {
75
- return {
76
- content: [{ type: "text", text: handleMoonshotError(err) }],
77
- };
78
- }
79
- // 4. 提取描述
80
- const description = response.choices?.[0]?.message?.content ?? "";
81
- if (!description) {
82
- return {
83
- content: [
84
- {
85
- type: "text",
86
- text: `Error: Moonshot API 返回空内容。完整响应: ${JSON.stringify(response)}`,
87
- },
88
- ],
89
- };
90
- }
91
- // 5. 构造输出
92
- const meta = [
93
- `模型: ${response.model}`,
94
- `图片大小: ${(imageResult.sizeBytes / 1024).toFixed(2)} KB (${imageResult.mimeType})`,
95
- `Token 使用: ${response.usage?.total_tokens ?? "未知"} (prompt: ${response.usage?.prompt_tokens ?? "?"}, completion: ${response.usage?.completion_tokens ?? "?"})`,
96
- ].join("\n");
97
- let text = `${description}\n\n---\n${meta}`;
98
- if (text.length > CHARACTER_LIMIT) {
99
- text = text.slice(0, CHARACTER_LIMIT) + `\n\n[已截断,原文长度 ${text.length} 字符]`;
100
- }
101
- return {
102
- content: [{ type: "text", text }],
103
- };
104
- });
105
- }
106
- //# sourceMappingURL=describeClipboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"describeClipboard.js","sourceRoot":"","sources":["../../src/tools/describeClipboard.ts"],"names":[],"mappings":"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"}