@bashcat/ai-image-chat-mcp 1.0.5 → 1.0.7
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 +74 -3
- package/dist/index.js +91 -65
- package/dist/index.js.map +1 -1
- package/package.json +6 -4
package/README.md
CHANGED
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
- 🖼️ **圖片生成**: 使用 AI 模型生成圖片
|
|
8
8
|
- 💬 **對話完成**: 使用 AI 模型進行智能對話
|
|
9
|
-
-
|
|
9
|
+
- � **自動保存**: 生成的圖片會自動下載並保存到指定目錄
|
|
10
|
+
- 📝 **智能命名**: 檔名根據用戶的 prompt 自動生成
|
|
11
|
+
- �🔐 **安全配置**: API 密鑰安全保存在 `.env` 文件中
|
|
10
12
|
- 🎛️ **自定義提示**: 支持自定義系統提示詞,如未提供則使用預設值
|
|
11
13
|
|
|
12
14
|
## 安裝與設置
|
|
@@ -24,8 +26,15 @@ npm install
|
|
|
24
26
|
```env
|
|
25
27
|
AI_API_KEY=your_api_key_here
|
|
26
28
|
AI_API_BASE_URL=https://api.laozhang.ai/v1
|
|
29
|
+
AI_IMAGE_SAVE_PATH=/path/to/your/images/directory
|
|
27
30
|
```
|
|
28
31
|
|
|
32
|
+
**環境變數說明:**
|
|
33
|
+
|
|
34
|
+
- `AI_API_KEY`: 您的 AI API 密鑰(必須)
|
|
35
|
+
- `AI_API_BASE_URL`: API 基礎 URL(可選,預設為 `https://api.laozhang.ai/v1`)
|
|
36
|
+
- `AI_IMAGE_SAVE_PATH`: 圖片保存路徑(可選,預設為 `~/generated_images`)
|
|
37
|
+
|
|
29
38
|
**支持的 API 服務商:**
|
|
30
39
|
|
|
31
40
|
- 老張 AI: `https://api.laozhang.ai/v1`
|
|
@@ -44,6 +53,66 @@ npm run build
|
|
|
44
53
|
npm start
|
|
45
54
|
```
|
|
46
55
|
|
|
56
|
+
## MCP (Model Context Protocol) 設置
|
|
57
|
+
|
|
58
|
+
### 在 Claude Desktop 中使用
|
|
59
|
+
|
|
60
|
+
編輯您的 Claude Desktop 配置文件 (`~/Library/Application Support/Claude/claude_desktop_config.json`):
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"mcpServers": {
|
|
65
|
+
"ai-image-chat-mcp": {
|
|
66
|
+
"command": "npx",
|
|
67
|
+
"args": ["-y", "@bashcat/ai-image-chat-mcp"],
|
|
68
|
+
"env": {
|
|
69
|
+
"AI_API_KEY": "your_api_key_here",
|
|
70
|
+
"AI_API_BASE_URL": "https://api.laozhang.ai/v1",
|
|
71
|
+
"AI_IMAGE_SAVE_PATH": "/path/to/your/images/directory"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 在 VS Code 中使用
|
|
79
|
+
|
|
80
|
+
編輯您的 VS Code 設置 (`settings.json`):
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"mcp": {
|
|
85
|
+
"servers": {
|
|
86
|
+
"ai-image-chat-mcp": {
|
|
87
|
+
"command": "npx",
|
|
88
|
+
"args": ["-y", "@bashcat/ai-image-chat-mcp"],
|
|
89
|
+
"env": {
|
|
90
|
+
"AI_API_KEY": "your_api_key_here",
|
|
91
|
+
"AI_API_BASE_URL": "https://api.laozhang.ai/v1",
|
|
92
|
+
"AI_IMAGE_SAVE_PATH": "/path/to/your/images/directory"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 環境變數配置
|
|
101
|
+
|
|
102
|
+
| 環境變數 | 必需 | 預設值 | 說明 |
|
|
103
|
+
| -------------------- | ---- | ---------------------------- | ---------------- |
|
|
104
|
+
| `AI_API_KEY` | ✅ | - | 您的 AI API 密鑰 |
|
|
105
|
+
| `AI_API_BASE_URL` | ❌ | `https://api.laozhang.ai/v1` | API 基礎 URL |
|
|
106
|
+
| `AI_IMAGE_SAVE_PATH` | ❌ | `~/generated_images` | 圖片保存路徑 |
|
|
107
|
+
|
|
108
|
+
### 圖片保存功能
|
|
109
|
+
|
|
110
|
+
- 🖼️ **自動下載**: 生成的圖片會自動下載到指定目錄
|
|
111
|
+
- 📝 **智能命名**: 檔名根據 prompt 自動生成,例如:`台灣男性工程師-2025-06-29T04-40-40-978Z.jpg`
|
|
112
|
+
- 📁 **目錄創建**: 如果指定目錄不存在,會自動創建
|
|
113
|
+
- 🔄 **格式轉換**: 支援 PNG 自動轉換為 JPG,也支援保持原始格式或轉換為 WebP
|
|
114
|
+
- 🎨 **多格式支援**: 支援 JPG、PNG、WebP 輸出格式
|
|
115
|
+
|
|
47
116
|
## 可用工具
|
|
48
117
|
|
|
49
118
|
### 1. generate_image
|
|
@@ -55,6 +124,7 @@ npm start
|
|
|
55
124
|
- `prompt` (必需): 圖片生成的提示詞
|
|
56
125
|
- `system_prompt` (可選): 系統提示詞,預設為 "You are a helpful assistant that generates images."
|
|
57
126
|
- `model` (可選): 模型名稱,可選 "gpt-image-1" 或 "gpt-4o-image",預設為 "gpt-4o-image"
|
|
127
|
+
- `output_format` (可選): 輸出圖片格式,可選 "jpg"、"jpeg"、"png"、"webp",預設為 "jpg"
|
|
58
128
|
|
|
59
129
|
**範例:**
|
|
60
130
|
|
|
@@ -62,7 +132,8 @@ npm start
|
|
|
62
132
|
{
|
|
63
133
|
"prompt": "生成一張卡通風格的熊貓宇航員圖片,背景是星空",
|
|
64
134
|
"system_prompt": "You are a creative image generator.",
|
|
65
|
-
"model": "gpt-4o-image"
|
|
135
|
+
"model": "gpt-4o-image",
|
|
136
|
+
"output_format": "png"
|
|
66
137
|
}
|
|
67
138
|
```
|
|
68
139
|
|
|
@@ -118,7 +189,7 @@ npm run dev
|
|
|
118
189
|
|
|
119
190
|
### 項目結構
|
|
120
191
|
|
|
121
|
-
```
|
|
192
|
+
```text
|
|
122
193
|
laozhang_mcp/
|
|
123
194
|
├── src/
|
|
124
195
|
│ └── index.ts # 主要服務器代碼
|
package/dist/index.js
CHANGED
|
@@ -4,15 +4,17 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
4
4
|
import { CallToolRequestSchema, ErrorCode, ListToolsRequestSchema, McpError, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
5
|
import dotenv from "dotenv";
|
|
6
6
|
import axios from "axios";
|
|
7
|
-
import fs from "fs";
|
|
8
|
-
import path from "path";
|
|
7
|
+
import * as fs from "fs";
|
|
8
|
+
import * as path from "path";
|
|
9
|
+
import * as os from "os";
|
|
10
|
+
import sharp from "sharp";
|
|
9
11
|
// 載入環境變數
|
|
10
12
|
dotenv.config();
|
|
11
13
|
class AIImageChatMCPServer {
|
|
12
14
|
server;
|
|
13
15
|
apiKey;
|
|
14
16
|
baseUrl;
|
|
15
|
-
|
|
17
|
+
saveDirectory;
|
|
16
18
|
constructor() {
|
|
17
19
|
this.server = new Server({
|
|
18
20
|
name: "ai-image-chat-mcp-server",
|
|
@@ -25,25 +27,80 @@ class AIImageChatMCPServer {
|
|
|
25
27
|
// 從環境變數獲取 API 配置
|
|
26
28
|
this.apiKey = process.env.AI_API_KEY || "";
|
|
27
29
|
this.baseUrl = process.env.AI_API_BASE_URL || "https://api.laozhang.ai/v1";
|
|
28
|
-
|
|
29
|
-
this.outputDir = process.env.IMAGE_OUTPUT_DIR || path.join(process.cwd(), "generated_images");
|
|
30
|
+
this.saveDirectory = process.env.AI_IMAGE_SAVE_PATH || path.join(os.homedir(), "generated_images");
|
|
30
31
|
if (!this.apiKey) {
|
|
31
32
|
throw new Error("AI_API_KEY 環境變數未設定");
|
|
32
33
|
}
|
|
33
|
-
//
|
|
34
|
-
this.
|
|
34
|
+
// 確保保存目錄存在
|
|
35
|
+
if (!fs.existsSync(this.saveDirectory)) {
|
|
36
|
+
fs.mkdirSync(this.saveDirectory, { recursive: true });
|
|
37
|
+
}
|
|
35
38
|
this.setupToolHandlers();
|
|
36
39
|
}
|
|
37
|
-
|
|
40
|
+
generateFilename(prompt, outputFormat = 'jpg') {
|
|
41
|
+
// 清理 prompt 作為檔名,移除特殊字符並限制長度
|
|
42
|
+
const cleanPrompt = prompt
|
|
43
|
+
.replace(/[^\w\s\u4e00-\u9fff]/g, '') // 保留字母、數字、空格和中文字符
|
|
44
|
+
.replace(/\s+/g, '-') // 將空格替換為連字符
|
|
45
|
+
.substring(0, 50); // 限制長度為50字符
|
|
46
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
47
|
+
// 確保輸出格式為小寫
|
|
48
|
+
const extension = outputFormat.toLowerCase() === 'jpeg' ? 'jpg' : outputFormat.toLowerCase();
|
|
49
|
+
return `${cleanPrompt}-${timestamp}.${extension}`;
|
|
50
|
+
}
|
|
51
|
+
async downloadAndSaveImage(imageUrl, filename, outputFormat = 'jpg') {
|
|
38
52
|
try {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
53
|
+
const response = await axios.get(imageUrl, { responseType: 'arraybuffer' });
|
|
54
|
+
const filePath = path.join(this.saveDirectory, filename);
|
|
55
|
+
// 根據輸出格式處理圖片
|
|
56
|
+
const normalizedFormat = outputFormat.toLowerCase() === 'jpeg' ? 'jpg' : outputFormat.toLowerCase();
|
|
57
|
+
if (normalizedFormat === 'jpg' || normalizedFormat === 'jpeg') {
|
|
58
|
+
// 轉換為 JPG 格式
|
|
59
|
+
await sharp(Buffer.from(response.data))
|
|
60
|
+
.jpeg({ quality: 90 })
|
|
61
|
+
.toFile(filePath);
|
|
62
|
+
}
|
|
63
|
+
else if (normalizedFormat === 'png') {
|
|
64
|
+
// 保持 PNG 格式
|
|
65
|
+
await sharp(Buffer.from(response.data))
|
|
66
|
+
.png()
|
|
67
|
+
.toFile(filePath);
|
|
42
68
|
}
|
|
69
|
+
else if (normalizedFormat === 'webp') {
|
|
70
|
+
// 轉換為 WebP 格式
|
|
71
|
+
await sharp(Buffer.from(response.data))
|
|
72
|
+
.webp({ quality: 90 })
|
|
73
|
+
.toFile(filePath);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
// 預設轉換為 JPG
|
|
77
|
+
await sharp(Buffer.from(response.data))
|
|
78
|
+
.jpeg({ quality: 90 })
|
|
79
|
+
.toFile(filePath);
|
|
80
|
+
}
|
|
81
|
+
return filePath;
|
|
43
82
|
}
|
|
44
83
|
catch (error) {
|
|
45
|
-
|
|
84
|
+
throw new Error(`圖片下載或轉換失敗: ${error instanceof Error ? error.message : String(error)}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
extractImageUrlFromContent(content) {
|
|
88
|
+
// 嘗試從回應中提取圖片 URL
|
|
89
|
+
const urlPatterns = [
|
|
90
|
+
/https?:\/\/[^\s\)]+\.(?:jpg|jpeg|png|gif|webp)/gi,
|
|
91
|
+
/!\[.*?\]\((https?:\/\/[^\)]+)\)/gi,
|
|
92
|
+
/https?:\/\/[^\s\)]+/gi
|
|
93
|
+
];
|
|
94
|
+
for (const pattern of urlPatterns) {
|
|
95
|
+
const matches = content.match(pattern);
|
|
96
|
+
if (matches && matches.length > 0) {
|
|
97
|
+
const url = matches[0].replace(/^\!\[.*?\]\(/, '').replace(/\)$/, '');
|
|
98
|
+
if (url.match(/\.(jpg|jpeg|png|gif|webp)(\?.*)?$/i)) {
|
|
99
|
+
return url;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
46
102
|
}
|
|
103
|
+
return null;
|
|
47
104
|
}
|
|
48
105
|
setupToolHandlers() {
|
|
49
106
|
// 列出可用工具
|
|
@@ -70,10 +127,11 @@ class AIImageChatMCPServer {
|
|
|
70
127
|
enum: ["gpt-image-1", "gpt-4o-image"],
|
|
71
128
|
default: "gpt-4o-image",
|
|
72
129
|
},
|
|
73
|
-
|
|
74
|
-
type: "
|
|
75
|
-
description: "
|
|
76
|
-
|
|
130
|
+
output_format: {
|
|
131
|
+
type: "string",
|
|
132
|
+
description: "輸出圖片格式(可選,預設為 jpg)",
|
|
133
|
+
enum: ["jpg", "jpeg", "png", "webp"],
|
|
134
|
+
default: "jpg",
|
|
77
135
|
},
|
|
78
136
|
},
|
|
79
137
|
required: ["prompt"],
|
|
@@ -126,40 +184,8 @@ class AIImageChatMCPServer {
|
|
|
126
184
|
}
|
|
127
185
|
});
|
|
128
186
|
}
|
|
129
|
-
async downloadAndSaveImage(imageUrl, filename) {
|
|
130
|
-
try {
|
|
131
|
-
const response = await axios.get(imageUrl, {
|
|
132
|
-
responseType: 'stream',
|
|
133
|
-
timeout: 30000,
|
|
134
|
-
});
|
|
135
|
-
// 生成檔案名稱
|
|
136
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
137
|
-
const finalFilename = filename || `ai-generated-${timestamp}.jpg`;
|
|
138
|
-
const filepath = path.join(this.outputDir, finalFilename);
|
|
139
|
-
// 建立寫入串流
|
|
140
|
-
const writer = fs.createWriteStream(filepath);
|
|
141
|
-
response.data.pipe(writer);
|
|
142
|
-
return new Promise((resolve, reject) => {
|
|
143
|
-
writer.on('finish', () => {
|
|
144
|
-
console.error(`圖片已保存至: ${filepath}`);
|
|
145
|
-
resolve(filepath);
|
|
146
|
-
});
|
|
147
|
-
writer.on('error', reject);
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
catch (error) {
|
|
151
|
-
console.error(`下載圖片失敗: ${error}`);
|
|
152
|
-
throw error;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
extractImageUrl(content) {
|
|
156
|
-
// 嘗試從回應中提取圖片 URL
|
|
157
|
-
const urlRegex = /https?:\/\/[^\s\)]+\.(jpg|jpeg|png|gif|webp)/gi;
|
|
158
|
-
const match = content.match(urlRegex);
|
|
159
|
-
return match ? match[0] : null;
|
|
160
|
-
}
|
|
161
187
|
async handleImageGeneration(args) {
|
|
162
|
-
const { prompt, system_prompt = "You are a helpful assistant that generates images.
|
|
188
|
+
const { prompt, system_prompt = "You are a helpful assistant that generates images.", model = "gpt-4o-image", output_format = "jpg" } = args;
|
|
163
189
|
if (!prompt) {
|
|
164
190
|
throw new McpError(ErrorCode.InvalidParams, "需要提供 prompt 參數");
|
|
165
191
|
}
|
|
@@ -180,29 +206,29 @@ class AIImageChatMCPServer {
|
|
|
180
206
|
});
|
|
181
207
|
const result = response.data;
|
|
182
208
|
const generatedContent = result.choices[0]?.message?.content || "未生成內容";
|
|
183
|
-
|
|
184
|
-
let
|
|
185
|
-
|
|
186
|
-
if (
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
savedImagePath = await this.downloadAndSaveImage(imageUrl);
|
|
191
|
-
resultText += `\n\n✅ 圖片已自動保存至: ${savedImagePath}`;
|
|
192
|
-
}
|
|
193
|
-
catch (error) {
|
|
194
|
-
resultText += `\n\n⚠️ 圖片下載失敗: ${error instanceof Error ? error.message : String(error)}`;
|
|
195
|
-
}
|
|
209
|
+
// 嘗試從回應中提取圖片 URL 並保存
|
|
210
|
+
let savedImagePath = "";
|
|
211
|
+
const imageUrl = this.extractImageUrlFromContent(generatedContent);
|
|
212
|
+
if (imageUrl) {
|
|
213
|
+
try {
|
|
214
|
+
const filename = this.generateFilename(prompt, output_format);
|
|
215
|
+
savedImagePath = await this.downloadAndSaveImage(imageUrl, filename, output_format);
|
|
196
216
|
}
|
|
197
|
-
|
|
198
|
-
|
|
217
|
+
catch (saveError) {
|
|
218
|
+
console.error("圖片保存失敗:", saveError);
|
|
219
|
+
// 繼續執行,不因保存失敗而中斷
|
|
199
220
|
}
|
|
200
221
|
}
|
|
222
|
+
let responseText = `圖片生成結果:\n\n${generatedContent}`;
|
|
223
|
+
if (savedImagePath) {
|
|
224
|
+
responseText += `\n\n✅ 圖片已自動保存至: ${savedImagePath}`;
|
|
225
|
+
responseText += `\n📁 輸出格式: ${output_format.toUpperCase()}`;
|
|
226
|
+
}
|
|
201
227
|
return {
|
|
202
228
|
content: [
|
|
203
229
|
{
|
|
204
230
|
type: "text",
|
|
205
|
-
text:
|
|
231
|
+
text: responseText,
|
|
206
232
|
},
|
|
207
233
|
],
|
|
208
234
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,sBAAsB,EACtB,QAAQ,GAET,MAAM,oCAAoC,CAAC;AAC5C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,KAAqB,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bashcat/ai-image-chat-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "MCP server for AI image generation and chat completion with support for multiple AI providers",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -15,11 +15,13 @@
|
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
18
|
+
"axios": "^1.7.7",
|
|
18
19
|
"dotenv": "^16.4.5",
|
|
19
|
-
"
|
|
20
|
+
"sharp": "^0.34.2"
|
|
20
21
|
},
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"@types/node": "^22.0.0",
|
|
24
|
+
"@types/sharp": "^0.31.1",
|
|
23
25
|
"typescript": "^5.5.0"
|
|
24
26
|
},
|
|
25
27
|
"engines": {
|
|
@@ -40,9 +42,9 @@
|
|
|
40
42
|
"url": "https://github.com/bashcat/ai-image-chat-mcp.git"
|
|
41
43
|
},
|
|
42
44
|
"bugs": {
|
|
43
|
-
"url": "https://github.com/
|
|
45
|
+
"url": "https://github.com/oliver0804/"
|
|
44
46
|
},
|
|
45
|
-
"homepage": "https://
|
|
47
|
+
"homepage": "https://bashcat.net/",
|
|
46
48
|
"files": [
|
|
47
49
|
"dist",
|
|
48
50
|
"README.md",
|