luma-mcp 1.2.2 → 1.2.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.
Files changed (37) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/build/image-processor.d.ts +1 -2
  3. package/build/image-processor.d.ts.map +1 -1
  4. package/build/image-processor.js +55 -69
  5. package/build/image-processor.js.map +1 -1
  6. package/build/index.d.ts +1 -1
  7. package/build/index.js +52 -60
  8. package/build/index.js.map +1 -1
  9. package/build/vision-client.d.ts.map +1 -1
  10. package/package.json +1 -1
  11. package/minimax_coding_plan_mcp-0.0.2/.env.test +0 -4
  12. package/minimax_coding_plan_mcp-0.0.2/LICENSE +0 -21
  13. package/minimax_coding_plan_mcp-0.0.2/PKG-INFO +0 -200
  14. package/minimax_coding_plan_mcp-0.0.2/README.md +0 -143
  15. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/PKG-INFO +0 -200
  16. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/SOURCES.txt +0 -17
  17. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/dependency_links.txt +0 -1
  18. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/entry_points.txt +0 -2
  19. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/requires.txt +0 -20
  20. package/minimax_coding_plan_mcp-0.0.2/minimax_coding_plan_mcp.egg-info/top_level.txt +0 -1
  21. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__init__.py +0 -3
  22. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__main__.py +0 -99
  23. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/__init__.cpython-313.pyc +0 -0
  24. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/client.cpython-313.pyc +0 -0
  25. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/const.cpython-313.pyc +0 -0
  26. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/exceptions.cpython-313.pyc +0 -0
  27. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/__pycache__/utils.cpython-313.pyc +0 -0
  28. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/client.py +0 -104
  29. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/const.py +0 -4
  30. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/exceptions.py +0 -24
  31. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/server.py +0 -169
  32. package/minimax_coding_plan_mcp-0.0.2/minimax_mcp/utils.py +0 -101
  33. package/minimax_coding_plan_mcp-0.0.2/pyproject.toml +0 -59
  34. package/minimax_coding_plan_mcp-0.0.2/setup.cfg +0 -4
  35. package/minimax_coding_plan_mcp-0.0.2/setup.py +0 -6
  36. package/minimax_coding_plan_mcp-0.0.2/test_at_prefix.py +0 -134
  37. package/minimax_coding_plan_mcp-0.0.2/test_real_image.py +0 -153
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.2.3] - 2025-11-21
6
+
7
+ ### Changed
8
+ - 🧹 **代码清理**: 移除 Claude 特定调试注释和实验性代码
9
+ - 📝 **工具描述优化**: 简化和专业化工具说明,提升 AI 模型调用成功率
10
+ - 🔧 **路径处理通用化**: 重构 @ 前缀路径处理,移除平台特定命名
11
+
12
+ ### Technical Details
13
+ - 移除 Claude 资源读取相关的实验性代码
14
+ - 重命名 `stripAtPrefix()` 为 `normalizeImageSourcePath()`
15
+ - 清理所有客户端适配器中的调试日志和注释
16
+ - 统一代码风格和注释规范
17
+
5
18
  ## [1.2.2] - 2025-11-20
6
19
 
7
20
  ### Added
@@ -21,7 +34,6 @@ All notable changes to this project will be documented in this file.
21
34
  - 新增 `stripAtPrefix()` 函数处理 Claude Code 的文件引用语法
22
35
  - 简化 `buildAnalysisPrompt()` 从两套逻辑到单一逻辑
23
36
  - 添加智能请求检测,自动补充详细分析指引
24
- - 在 minimax_mcp 上验证修复,真实 API 测试通过
25
37
 
26
38
  ## [1.2.1] - 2025-11-18
27
39
 
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * 图片处理工具
3
- * 负责读取、压缩和编码图片
4
- * 支持本地文件和远程URL
3
+ * 负责读取、压缩和编码图片(支持本地文件和远程 URL)
5
4
  */
6
5
  /**
7
6
  * 验证图片来源(文件或URL)
@@ -1 +1 @@
1
- {"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0CH;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CpG;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCtE"}
1
+ {"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiDH;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCtE"}
@@ -1,15 +1,16 @@
1
1
  /**
2
2
  * 图片处理工具
3
- * 负责读取、压缩和编码图片
4
- * 支持本地文件和远程URL
3
+ * 负责读取、压缩和编码图片(支持本地文件和远程 URL)
5
4
  */
6
- import { readFile, stat } from 'fs/promises';
7
- import sharp from 'sharp';
8
- import { isUrl } from './utils/helpers.js';
9
- import { logger } from './utils/logger.js';
5
+ import { readFile, stat } from "fs/promises";
6
+ import sharp from "sharp";
7
+ import { isUrl } from "./utils/helpers.js";
8
+ import { logger } from "./utils/logger.js";
10
9
  // 判断是否为 Data URI(data:image/png;base64,....)
11
10
  function isDataUri(input) {
12
- return typeof input === 'string' && input.startsWith('data:') && /;base64,/.test(input);
11
+ return (typeof input === "string" &&
12
+ input.startsWith("data:") &&
13
+ /;base64,/.test(input));
13
14
  }
14
15
  // 从 Data URI 获取 mimeType
15
16
  function getMimeFromDataUri(input) {
@@ -19,7 +20,7 @@ function getMimeFromDataUri(input) {
19
20
  // 估算 Data URI 的原始字节大小(不含头部)
20
21
  function estimateBytesFromDataUri(input) {
21
22
  try {
22
- const base64 = input.split(',')[1] || '';
23
+ const base64 = input.split(",")[1] || "";
23
24
  // base64 长度 * 3/4,忽略 padding 近似即可
24
25
  return Math.floor((base64.length * 3) / 4);
25
26
  }
@@ -28,60 +29,48 @@ function estimateBytesFromDataUri(input) {
28
29
  }
29
30
  }
30
31
  /**
31
- * 移除 Claude Code 的 @ 路径前缀
32
+ * 规范化本地图像路径(例如去掉前缀符号)
33
+ * 某些客户端会使用 "@path/to/file" 作为文件引用,这里统一转换为真实路径
32
34
  */
33
- function stripAtPrefix(path) {
34
- // Claude Code 使用 @ 作为文件引用的语法糖
35
- if (path.startsWith('@')) {
36
- const stripped = path.substring(1);
37
- logger.debug('Stripped @ prefix from path', { original: path, stripped });
38
- return stripped;
35
+ function normalizeImageSourcePath(source) {
36
+ if (typeof source === "string" && source.startsWith("@")) {
37
+ const normalized = source.slice(1);
38
+ logger.debug("Normalized @-prefixed image path", {
39
+ original: source,
40
+ normalized,
41
+ });
42
+ return normalized;
39
43
  }
40
- return path;
44
+ return source;
41
45
  }
42
46
  /**
43
47
  * 验证图片来源(文件或URL)
44
48
  */
45
49
  export async function validateImageSource(imageSource, maxSizeMB = 10) {
46
- // 首先移除可能的 @ 前缀
47
- const cleanSource = stripAtPrefix(imageSource);
48
- // 如果是 Data URI,则验证 mime 与大小后直接返回
49
- if (isDataUri(cleanSource)) {
50
- const mime = getMimeFromDataUri(cleanSource);
51
- const allowed = ['image/png', 'image/jpeg', 'image/jpg', 'image/webp', 'image/gif'];
52
- if (!mime || !allowed.includes(mime)) {
53
- throw new Error(`Unsupported data URI mimeType: ${mime || 'unknown'}. Supported: ${allowed.join(', ')}`);
54
- }
55
- const bytes = estimateBytesFromDataUri(cleanSource);
56
- const sizeMB = bytes / (1024 * 1024);
57
- if (sizeMB > maxSizeMB) {
58
- throw new Error(`Image data URI too large: ${sizeMB.toFixed(2)}MB (max: ${maxSizeMB}MB)`);
59
- }
60
- logger.debug('Image source is data URI, validated', { mime, sizeMB: sizeMB.toFixed(2) });
61
- return;
62
- }
50
+ // 先规范化可能带有前缀符号的本地路径(如 "@image.png")
51
+ const normalizedSource = normalizeImageSourcePath(imageSource);
63
52
  // 如果是 URL,直接返回
64
- if (isUrl(cleanSource)) {
65
- logger.debug('Image source is URL, skipping validation', { imageSource: cleanSource });
53
+ if (isUrl(normalizedSource)) {
54
+ logger.debug("Image source is URL, skipping validation");
66
55
  return;
67
56
  }
68
57
  // 验证本地文件
69
58
  try {
70
- const stats = await stat(cleanSource);
59
+ const stats = await stat(normalizedSource);
71
60
  const fileSizeMB = stats.size / (1024 * 1024);
72
61
  if (fileSizeMB > maxSizeMB) {
73
62
  throw new Error(`Image file too large: ${fileSizeMB.toFixed(2)}MB (max: ${maxSizeMB}MB)`);
74
63
  }
75
64
  // 验证文件格式
76
- const ext = cleanSource.toLowerCase().split('.').pop();
77
- const supportedFormats = ['jpg', 'jpeg', 'png', 'webp', 'gif'];
65
+ const ext = normalizedSource.toLowerCase().split(".").pop();
66
+ const supportedFormats = ["jpg", "jpeg", "png", "webp", "gif"];
78
67
  if (!ext || !supportedFormats.includes(ext)) {
79
- throw new Error(`Unsupported image format: ${ext}. Supported: ${supportedFormats.join(', ')}`);
68
+ throw new Error(`Unsupported image format: ${ext}. Supported: ${supportedFormats.join(", ")}`);
80
69
  }
81
70
  }
82
71
  catch (error) {
83
- if (error.code === 'ENOENT') {
84
- throw new Error(`Image file not found: ${cleanSource}`);
72
+ if (error.code === "ENOENT") {
73
+ throw new Error(`Image file not found: ${normalizedSource}`);
85
74
  }
86
75
  throw error;
87
76
  }
@@ -91,32 +80,29 @@ export async function validateImageSource(imageSource, maxSizeMB = 10) {
91
80
  */
92
81
  export async function imageToBase64(imagePath) {
93
82
  try {
94
- // 首先移除可能的 @ 前缀
95
- const cleanPath = stripAtPrefix(imagePath);
96
- // 如果是 Data URI,直接返回(已是 data:*;base64, 格式)
97
- if (isDataUri(cleanPath)) {
98
- logger.info('Using data URI image');
99
- return cleanPath;
100
- }
83
+ // 规范化本地路径(处理可能的前缀符号)
84
+ const normalizedPath = normalizeImageSourcePath(imagePath);
101
85
  // 如果是 URL,直接返回
102
- if (isUrl(cleanPath)) {
103
- logger.info('Using remote image URL', { url: cleanPath });
104
- return cleanPath;
86
+ if (isUrl(normalizedPath)) {
87
+ logger.info("Using remote image URL", { url: normalizedPath });
88
+ return normalizedPath;
105
89
  }
106
90
  // 本地文件:读取并编码
107
- let imageBuffer = await readFile(cleanPath);
91
+ let imageBuffer = await readFile(normalizedPath);
108
92
  // 检查文件大小,如果超过 2MB 则压缩
109
93
  if (imageBuffer.length > 2 * 1024 * 1024) {
110
- logger.info('Compressing large image', { originalSize: `${(imageBuffer.length / (1024 * 1024)).toFixed(2)}MB` });
94
+ logger.info("Compressing large image", {
95
+ originalSize: `${(imageBuffer.length / (1024 * 1024)).toFixed(2)}MB`,
96
+ });
111
97
  imageBuffer = Buffer.from(await compressImage(imageBuffer));
112
98
  }
113
99
  // 转换为 base64
114
- const base64 = imageBuffer.toString('base64');
115
- const mimeType = getMimeType(cleanPath);
100
+ const base64 = imageBuffer.toString("base64");
101
+ const mimeType = getMimeType(normalizedPath);
116
102
  return `data:${mimeType};base64,${base64}`;
117
103
  }
118
104
  catch (error) {
119
- throw new Error(`Failed to process image: ${error instanceof Error ? error.message : 'Unknown error'}`);
105
+ throw new Error(`Failed to process image: ${error instanceof Error ? error.message : "Unknown error"}`);
120
106
  }
121
107
  }
122
108
  /**
@@ -125,8 +111,8 @@ export async function imageToBase64(imagePath) {
125
111
  async function compressImage(imageBuffer) {
126
112
  return sharp(imageBuffer)
127
113
  .resize(2048, 2048, {
128
- fit: 'inside',
129
- withoutEnlargement: true
114
+ fit: "inside",
115
+ withoutEnlargement: true,
130
116
  })
131
117
  .jpeg({ quality: 85 })
132
118
  .toBuffer();
@@ -135,19 +121,19 @@ async function compressImage(imageBuffer) {
135
121
  * 根据文件扩展名获取 MIME 类型
136
122
  */
137
123
  function getMimeType(filePath) {
138
- const ext = filePath.toLowerCase().split('.').pop();
124
+ const ext = filePath.toLowerCase().split(".").pop();
139
125
  switch (ext) {
140
- case 'jpg':
141
- case 'jpeg':
142
- return 'image/jpeg';
143
- case 'png':
144
- return 'image/png';
145
- case 'webp':
146
- return 'image/webp';
147
- case 'gif':
148
- return 'image/gif';
126
+ case "jpg":
127
+ case "jpeg":
128
+ return "image/jpeg";
129
+ case "png":
130
+ return "image/png";
131
+ case "webp":
132
+ return "image/webp";
133
+ case "gif":
134
+ return "image/gif";
149
135
  default:
150
- return 'image/jpeg'; // 默认使用 jpeg
136
+ return "image/jpeg"; // 默认使用 jpeg
151
137
  }
152
138
  }
153
139
  //# sourceMappingURL=image-processor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,6CAA6C;AAC7C,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1F,CAAC;AAED,yBAAyB;AACzB,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,4BAA4B;AAC5B,SAAS,wBAAwB,CAAC,KAAa;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,kCAAkC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,8BAA8B;IAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,YAAoB,EAAE;IACnF,eAAe;IACf,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAE/C,iCAAiC;IACjC,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QACpF,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,IAAI,SAAS,gBAAgB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC;QACD,MAAM,KAAK,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,SAAS,KAAK,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzF,OAAO;IACT,CAAC;IACD,eAAe;IACf,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,CAAC,0CAA0C,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,SAAS;IACT,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAE9C,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,SAAS,KAAK,CAAC,CAAC;QAC5F,CAAC;QAED,SAAS;QACT,MAAM,GAAG,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACvD,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAE/D,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,gBAAgB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,IAAI,CAAC;QACH,eAAe;QACf,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAE3C,0CAA0C;QAC1C,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,eAAe;QACf,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1D,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,aAAa;QACb,IAAI,WAAW,GAAW,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEpD,sBAAsB;QACtB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACjH,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,aAAa;QACb,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QAExC,OAAO,QAAQ,QAAQ,WAAW,MAAM,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAC1G,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,WAAmB;IAC9C,OAAO,KAAK,CAAC,WAAW,CAAC;SACtB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;QAClB,GAAG,EAAE,QAAQ;QACb,kBAAkB,EAAE,IAAI;KACzB,CAAC;SACD,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;SACrB,QAAQ,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAEpD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,YAAY,CAAC,CAAC,YAAY;IACrC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,6CAA6C;AAC7C,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;QACzB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CACvB,CAAC;AACJ,CAAC;AAED,yBAAyB;AACzB,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACpD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,4BAA4B;AAC5B,SAAS,wBAAwB,CAAC,KAAa;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,kCAAkC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,MAAc;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE;YAC/C,QAAQ,EAAE,MAAM;YAChB,UAAU;SACX,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,YAAoB,EAAE;IAEtB,oCAAoC;IACpC,MAAM,gBAAgB,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAE/D,eAAe;IACf,IAAI,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,SAAS;IACT,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAE9C,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,yBAAyB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,SAAS,KAAK,CACzE,CAAC;QACJ,CAAC;QAED,SAAS;QACT,MAAM,GAAG,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5D,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAE/D,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,6BAA6B,GAAG,gBAAgB,gBAAgB,CAAC,IAAI,CACnE,IAAI,CACL,EAAE,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,gBAAgB,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,IAAI,CAAC;QACH,qBAAqB;QACrB,MAAM,cAAc,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAE3D,eAAe;QACf,IAAI,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC;YAC/D,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,aAAa;QACb,IAAI,WAAW,GAAW,MAAM,QAAQ,CAAC,cAAc,CAAC,CAAC;QAEzD,sBAAsB;QACtB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBACrC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;aACrE,CAAC,CAAC;YACH,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,aAAa;QACb,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QAE7C,OAAO,QAAQ,QAAQ,WAAW,MAAM,EAAE,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,4BACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,WAAmB;IAC9C,OAAO,KAAK,CAAC,WAAW,CAAC;SACtB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE;QAClB,GAAG,EAAE,QAAQ;QACb,kBAAkB,EAAE,IAAI;KACzB,CAAC;SACD,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;SACrB,QAAQ,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAEpD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,YAAY,CAAC,CAAC,YAAY;IACrC,CAAC;AACH,CAAC"}
package/build/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * Luma MCP Server
4
- * 视觉理解 MCP 服务器,powered by GLM-4.5V
4
+ * 通用图像理解 MCP 服务器,支持多家视觉模型提供商
5
5
  */
6
6
  export {};
7
7
  //# sourceMappingURL=index.d.ts.map
package/build/index.js CHANGED
@@ -1,47 +1,47 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
3
  * Luma MCP Server
4
- * 视觉理解 MCP 服务器,powered by GLM-4.5V
4
+ * 通用图像理解 MCP 服务器,支持多家视觉模型提供商
5
5
  */
6
6
  // 第一件事:重定向console到stderr,避免污染MCP的stdout
7
- import { setupConsoleRedirection, logger } from './utils/logger.js';
7
+ import { setupConsoleRedirection, logger } from "./utils/logger.js";
8
8
  setupConsoleRedirection();
9
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
10
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
11
- import { z } from 'zod';
12
- import { loadConfig } from './config.js';
13
- import { ZhipuClient } from './zhipu-client.js';
14
- import { SiliconFlowClient } from './siliconflow-client.js';
15
- import { QwenClient } from './qwen-client.js';
16
- import { imageToBase64, validateImageSource } from './image-processor.js';
17
- import { buildAnalysisPrompt } from './prompts.js';
18
- import { withRetry, createSuccessResponse, createErrorResponse } from './utils/helpers.js';
9
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
10
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
11
+ import { z } from "zod";
12
+ import { loadConfig } from "./config.js";
13
+ import { ZhipuClient } from "./zhipu-client.js";
14
+ import { SiliconFlowClient } from "./siliconflow-client.js";
15
+ import { QwenClient } from "./qwen-client.js";
16
+ import { imageToBase64, validateImageSource } from "./image-processor.js";
17
+ import { buildAnalysisPrompt } from "./prompts.js";
18
+ import { withRetry, createSuccessResponse, createErrorResponse, } from "./utils/helpers.js";
19
19
  /**
20
20
  * 创建 MCP 服务器
21
21
  */
22
22
  async function createServer() {
23
- logger.info('Initializing Luma MCP Server');
23
+ logger.info("Initializing Luma MCP Server");
24
24
  // 加载配置
25
25
  const config = loadConfig();
26
26
  // 根据配置选择模型客户端
27
27
  let visionClient;
28
- if (config.provider === 'siliconflow') {
28
+ if (config.provider === "siliconflow") {
29
29
  visionClient = new SiliconFlowClient(config.apiKey, config.model, config.maxTokens, config.temperature);
30
30
  }
31
- else if (config.provider === 'qwen') {
31
+ else if (config.provider === "qwen") {
32
32
  visionClient = new QwenClient(config.apiKey, config.model, config.maxTokens, config.temperature);
33
33
  }
34
34
  else {
35
35
  visionClient = new ZhipuClient(config.apiKey, config.model, config.maxTokens, config.temperature, config.topP);
36
36
  }
37
- logger.info('Vision client initialized', {
37
+ logger.info("Vision client initialized", {
38
38
  provider: config.provider,
39
- model: visionClient.getModelName()
39
+ model: visionClient.getModelName(),
40
40
  });
41
41
  // 创建服务器 - 使用 McpServer
42
42
  const server = new McpServer({
43
- name: 'luma-mcp',
44
- version: '1.0.0',
43
+ name: "luma-mcp",
44
+ version: "1.0.0",
45
45
  }, {
46
46
  capabilities: {
47
47
  tools: {},
@@ -53,53 +53,42 @@ async function createServer() {
53
53
  await validateImageSource(imageSource);
54
54
  // 2. 处理图片(读取或返回URL)
55
55
  const imageDataUrl = await imageToBase64(imageSource);
56
- // 3. 构建提示词
57
- // DeepSeek-OCR 需要简洁的 prompt,不支持复杂格式化
58
- // Qwen/GLM 使用结构化 prompt
59
- const fullPrompt = config.provider === 'siliconflow'
60
- ? prompt // DeepSeek-OCR: 直接使用原始 prompt
61
- : buildAnalysisPrompt(prompt); // Qwen/GLM: 使用结构化 prompt
56
+ // 3. 构建分析提示词(部分提供商使用原始提示词,部分使用结构化提示词)
57
+ const fullPrompt = config.provider === "siliconflow"
58
+ ? prompt
59
+ : buildAnalysisPrompt(prompt);
62
60
  // 4. 调用视觉模型分析图片
63
61
  return await visionClient.analyzeImage(imageDataUrl, fullPrompt);
64
62
  }, 2, // 最多重试2次
65
63
  1000 // 初始延补1秒
66
64
  );
67
65
  // 注册工具 - 使用 McpServer.tool() API
68
- server.tool('analyze_image', `使用视觉模型分析图片内容。支持三个视觉模型:
69
- - GLM-4.5V(智谱清言)- 付费,中文理解优秀
70
- - DeepSeek-OCR(硅基流动)- 免费,OCR能力强
71
- - Qwen3-VL-Flash(阿里云通义千问)- 付费,速度快成本低,支持思考模式
72
-
73
- **何时自动调用此工具**:
74
- 1. 用户提供了图片文件路径(包括临时路径、相对路径、绝对路径)
75
- 2. 用户提供了图片URL(https://开头)
76
- 3. 用户粘贴了图片到聊天框(会生成临时路径)
77
- 4. 用户要求分析、理解、查看、识别图片内容
78
- 5. 用户询问关于图片中的代码、UI、错误信息等问题
79
-
80
- **支持场景**:代码截图、UI界面、错误信息、通用图片分析。
81
- **支持格式**:JPG、PNG、WebP、GIF。
82
- **支持来源**:本地文件、远程URL、临时文件(包括截图)。
83
-
84
- 如果你是不支持视觉的AI模型,看到图片路径时应主动调用此工具来分析图片内容。`, {
85
- image_source: z.string().describe('图片来源:支持三种格式:1) 本地文件路径(含临时路径)、2) 远程URL(https://)、3) Data URI(data:image/png;base64,...)。支持 PNG/JPG/WebP/GIF。例如:"./image.png"、"/tmp/screenshot.png"、"C:\\Users\\...\\image.jpg"、"https://example.com/pic.jpg"、"data:image/png;base64,iVBORw0KG..."'),
86
- prompt: z.string().describe('必须:详细的分析指令。如果用户没有提供具体问题,默认使用:"请详细分析这张图片的内容"。对于具体任务:代码分析、UI设计、错误诊断、文字识别等,应提供明确的指令。例如:"这段代码为什么报错?"、"分析这个UI的布局和风格"、"识别图片中的所有文字"'),
66
+ server.tool("analyze_image", "图像分析工具:对截图、设计稿、照片等图片进行详细理解和中文描述(支持本地文件和 HTTP(S) 图片 URL,最大 10MB)", {
67
+ image_source: z
68
+ .string()
69
+ .describe("要分析的图片来源:本地文件路径或 HTTP(S) 图片 URL(支持 PNG、JPG、JPEG、WebP、GIF,最大 10MB)"),
70
+ prompt: z
71
+ .string()
72
+ .optional()
73
+ .describe("可选的任务说明,例如“帮我详细描述这张 UI 设计图的布局和组件”。如果不填,将自动生成整图的详细中文描述。"),
87
74
  }, async (params) => {
88
75
  try {
89
- logger.info('Analyzing image', {
76
+ // 如果没有提供 prompt,使用默认值
77
+ const prompt = params.prompt || "请详细分析这张图片的内容";
78
+ logger.info("Analyzing image", {
90
79
  source: params.image_source,
91
- prompt: params.prompt,
80
+ prompt,
92
81
  });
93
82
  // 执行分析(带重试)
94
- const result = await analyzeWithRetry(params.image_source, params.prompt);
95
- logger.info('Image analysis completed successfully');
83
+ const result = await analyzeWithRetry(params.image_source, prompt);
84
+ logger.info("Image analysis completed successfully");
96
85
  return createSuccessResponse(result);
97
86
  }
98
87
  catch (error) {
99
- logger.error('Image analysis failed', {
88
+ logger.error("Image analysis failed", {
100
89
  error: error instanceof Error ? error.message : String(error),
101
90
  });
102
- return createErrorResponse(error instanceof Error ? error.message : 'Unknown error');
91
+ return createErrorResponse(error instanceof Error ? error.message : "Unknown error");
103
92
  }
104
93
  });
105
94
  return server;
@@ -112,30 +101,33 @@ async function main() {
112
101
  const server = await createServer();
113
102
  const transport = new StdioServerTransport();
114
103
  await server.connect(transport);
115
- logger.info('Luma MCP server started successfully on stdio');
104
+ logger.info("Luma MCP server started successfully on stdio");
116
105
  }
117
106
  catch (error) {
118
- logger.error('Failed to start Luma MCP server', {
107
+ logger.error("Failed to start Luma MCP server", {
119
108
  error: error instanceof Error ? error.message : String(error),
120
109
  });
121
110
  process.exit(1);
122
111
  }
123
112
  }
124
113
  // 全局错误处理
125
- process.on('uncaughtException', (error) => {
126
- logger.error('Uncaught exception', { error: error.message, stack: error.stack });
114
+ process.on("uncaughtException", (error) => {
115
+ logger.error("Uncaught exception", {
116
+ error: error.message,
117
+ stack: error.stack,
118
+ });
127
119
  process.exit(1);
128
120
  });
129
- process.on('unhandledRejection', (reason) => {
130
- logger.error('Unhandled rejection', { reason });
121
+ process.on("unhandledRejection", (reason) => {
122
+ logger.error("Unhandled rejection", { reason });
131
123
  process.exit(1);
132
124
  });
133
- process.on('SIGINT', () => {
134
- logger.info('Received SIGINT, shutting down gracefully');
125
+ process.on("SIGINT", () => {
126
+ logger.info("Received SIGINT, shutting down gracefully");
135
127
  process.exit(0);
136
128
  });
137
- process.on('SIGTERM', () => {
138
- logger.info('Received SIGTERM, shutting down gracefully');
129
+ process.on("SIGTERM", () => {
130
+ logger.info("Received SIGTERM, shutting down gracefully");
139
131
  process.exit(0);
140
132
  });
141
133
  main();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vision-client.d.ts","sourceRoot":"","sources":["../src/vision-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9F;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"vision-client.d.ts","sourceRoot":"","sources":["../src/vision-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,YAAY,CACV,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC;CACxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "luma-mcp",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "description": "Multi-model vision understanding MCP server. Supports GLM-4.5V (Zhipu), DeepSeek-OCR (SiliconFlow - Free), and Qwen3-VL-Flash (Aliyun)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,4 +0,0 @@
1
- # Test environment variables
2
- # Replace with your actual API key
3
- MINIMAX_API_KEY=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJHcm91cE5hbWUiOiJKb2NoZW4iLCJVc2VyTmFtZSI6IkpvY2hlbiIsIkFjY291bnQiOiIiLCJTdWJqZWN0SUQiOiIxOTgzMDI4NDA1MDA3ODE4OTQ3IiwiUGhvbmUiOiIxODk4MDkwNTM3MCIsIkdyb3VwSUQiOiIxOTgzMDI4NDA0OTk5NDMwMzM5IiwiUGFnZU5hbWUiOiIiLCJNYWlsIjoiIiwiQ3JlYXRlVGltZSI6IjIwMjUtMTEtMTQgMTk6NTc6NTMiLCJUb2tlblR5cGUiOjQsImlzcyI6Im1pbmltYXgifQ.KTbvW9BShdS-nr9PWih_8haNleDcKLezSdXpyFGGa5Y3JJvQp8cGFIMPgS3ZtGOVhwCY-iM1N6p1bSACeTurXqlqxKVtanDgil43h_MKBr-cHrPrNMWwkSQiY9bYXVMjqxWxZY6pEWMDOAMcoAKQPGDXWVFV1YAHJYmLrpx_c8swBhYLtYQQfIb8z52qwyqUskh9WJ7AxF17g0jDCbITEg-gZRSQZySmDe8n9bS1b_jRIvjF35DayyQ_mJ5jYvaHRijfBXdnTgDNTxvkDH2W8nJ4rkdSKg82cLxwO-MZAMYIQ0HGwcBS_OfHFLmV98aZDd_lT5PSjEEQ2tPxYryDkg
4
- MINIMAX_API_HOST=https://api.minimaxi.com
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright 2025 MiniMax AI.
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.