mcp-hydrocoder-image 1.1.1 → 1.2.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 +239 -80
- package/dist/api/geminiClient.d.ts +3 -30
- package/dist/api/geminiClient.d.ts.map +1 -1
- package/dist/api/geminiClient.js +13 -57
- package/dist/api/geminiClient.js.map +1 -1
- package/dist/api/geminiTextClient.js +1 -1
- package/dist/api/geminiTextClient.js.map +1 -1
- package/dist/api/imageProvider.d.ts +29 -0
- package/dist/api/imageProvider.d.ts.map +1 -0
- package/dist/api/imageProvider.js +5 -0
- package/dist/api/imageProvider.js.map +1 -0
- package/dist/api/volcengineClient.d.ts +13 -0
- package/dist/api/volcengineClient.d.ts.map +1 -0
- package/dist/api/volcengineClient.js +288 -0
- package/dist/api/volcengineClient.js.map +1 -0
- package/dist/business/inputValidator.d.ts.map +1 -1
- package/dist/business/inputValidator.js +69 -1
- package/dist/business/inputValidator.js.map +1 -1
- package/dist/business/multiImagePrompt.d.ts +13 -0
- package/dist/business/multiImagePrompt.d.ts.map +1 -0
- package/dist/business/multiImagePrompt.js +135 -0
- package/dist/business/multiImagePrompt.js.map +1 -0
- package/dist/business/providerResolver.d.ts +4 -0
- package/dist/business/providerResolver.d.ts.map +1 -0
- package/dist/business/providerResolver.js +45 -0
- package/dist/business/providerResolver.js.map +1 -0
- package/dist/business/responseBuilder.d.ts +3 -2
- package/dist/business/responseBuilder.d.ts.map +1 -1
- package/dist/business/responseBuilder.js +69 -48
- package/dist/business/responseBuilder.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/server/errorHandler.d.ts.map +1 -1
- package/dist/server/errorHandler.js +3 -2
- package/dist/server/errorHandler.js.map +1 -1
- package/dist/server/mcpServer.d.ts +90 -29
- package/dist/server/mcpServer.d.ts.map +1 -1
- package/dist/server/mcpServer.js +430 -288
- package/dist/server/mcpServer.js.map +1 -1
- package/dist/types/mcp.d.ts +62 -15
- package/dist/types/mcp.d.ts.map +1 -1
- package/dist/types/mcp.js +15 -0
- package/dist/types/mcp.js.map +1 -1
- package/dist/utils/config.d.ts +6 -2
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +43 -13
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/errors.d.ts +9 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +50 -1
- package/dist/utils/errors.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const VOLCENGINE_PATTERNS = [
|
|
2
|
+
/\buse\s+volcengine\b/i,
|
|
3
|
+
/\bwith\s+volcengine\b/i,
|
|
4
|
+
/\bprovider\s*[:=]\s*["']?volcengine\b/i,
|
|
5
|
+
/\bseedream\b/i,
|
|
6
|
+
/用火山引擎/,
|
|
7
|
+
/使用火山引擎/,
|
|
8
|
+
/改用火山引擎/,
|
|
9
|
+
/用豆包/,
|
|
10
|
+
/使用豆包/,
|
|
11
|
+
/改用豆包/,
|
|
12
|
+
/火山模型/,
|
|
13
|
+
];
|
|
14
|
+
const GEMINI_PATTERNS = [
|
|
15
|
+
/\buse\s+gemini\b/i,
|
|
16
|
+
/\bwith\s+gemini\b/i,
|
|
17
|
+
/\bprovider\s*[:=]\s*["']?gemini\b/i,
|
|
18
|
+
/\bgoogle gemini\b/i,
|
|
19
|
+
/\bnano banana\b/i,
|
|
20
|
+
/用gemini/i,
|
|
21
|
+
/使用gemini/i,
|
|
22
|
+
/改用gemini/i,
|
|
23
|
+
/用谷歌模型/,
|
|
24
|
+
/使用谷歌模型/,
|
|
25
|
+
];
|
|
26
|
+
function matchesAnyPattern(prompt, patterns) {
|
|
27
|
+
return patterns.some((pattern) => pattern.test(prompt));
|
|
28
|
+
}
|
|
29
|
+
export function inferProviderFromPrompt(prompt) {
|
|
30
|
+
const normalizedPrompt = prompt.trim();
|
|
31
|
+
if (!normalizedPrompt) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
if (matchesAnyPattern(normalizedPrompt, VOLCENGINE_PATTERNS)) {
|
|
35
|
+
return 'volcengine';
|
|
36
|
+
}
|
|
37
|
+
if (matchesAnyPattern(normalizedPrompt, GEMINI_PATTERNS)) {
|
|
38
|
+
return 'gemini';
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
export function resolveRequestedProvider(explicitProvider, prompt, defaultProvider) {
|
|
43
|
+
return explicitProvider || inferProviderFromPrompt(prompt) || defaultProvider;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=providerResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providerResolver.js","sourceRoot":"","sources":["../../src/business/providerResolver.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG;IAC1B,uBAAuB;IACvB,wBAAwB;IACxB,wCAAwC;IACxC,eAAe;IACf,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAA;AAED,MAAM,eAAe,GAAG;IACtB,mBAAmB;IACnB,oBAAoB;IACpB,oCAAoC;IACpC,oBAAoB;IACpB,kBAAkB;IAClB,UAAU;IACV,WAAW;IACX,WAAW;IACX,OAAO;IACP,QAAQ;CACT,CAAA;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,QAAkB;IAC3D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;IACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,EAAE,CAAC;QAC7D,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,eAAe,CAAC,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,gBAA2C,EAC3C,MAAc,EACd,eAA8B;IAE9B,OAAO,gBAAgB,IAAI,uBAAuB,CAAC,MAAM,CAAC,IAAI,eAAe,CAAA;AAC/E,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Response Builder for MCP structured content responses
|
|
3
3
|
* Converts generation results and errors into MCP-compatible response format
|
|
4
4
|
*/
|
|
5
|
-
import type { GeneratedImageResult } from '../api/
|
|
5
|
+
import type { GeneratedImageResult } from '../api/imageProvider.js';
|
|
6
6
|
import type { McpToolResponse } from '../types/mcp.js';
|
|
7
7
|
import { type BaseError } from '../utils/errors.js';
|
|
8
8
|
/**
|
|
@@ -10,7 +10,8 @@ import { type BaseError } from '../utils/errors.js';
|
|
|
10
10
|
*/
|
|
11
11
|
export interface ResponseBuilder {
|
|
12
12
|
buildSuccessResponse(generationResult: GeneratedImageResult, filePath: string): McpToolResponse;
|
|
13
|
-
|
|
13
|
+
buildMultiSuccessResponse(generationResult: GeneratedImageResult, filePaths: string[]): McpToolResponse;
|
|
14
|
+
buildBase64SuccessResponse(generationResult: GeneratedImageResult, filePaths: string[]): McpToolResponse;
|
|
14
15
|
buildErrorResponse(error: BaseError | Error): McpToolResponse;
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responseBuilder.d.ts","sourceRoot":"","sources":["../../src/business/responseBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"responseBuilder.d.ts","sourceRoot":"","sources":["../../src/business/responseBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAA4C,MAAM,iBAAiB,CAAA;AAChG,OAAO,EACL,KAAK,SAAS,EAQf,MAAM,oBAAoB,CAAA;AA6E3B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oBAAoB,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAA;IAC/F,yBAAyB,CACvB,gBAAgB,EAAE,oBAAoB,EACtC,SAAS,EAAE,MAAM,EAAE,GAClB,eAAe,CAAA;IAClB,0BAA0B,CACxB,gBAAgB,EAAE,oBAAoB,EACtC,SAAS,EAAE,MAAM,EAAE,GAClB,eAAe,CAAA;IAClB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,GAAG,eAAe,CAAA;CAC9D;AAgED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAgFvD"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Converts generation results and errors into MCP-compatible response format
|
|
4
4
|
*/
|
|
5
5
|
import * as path from 'node:path';
|
|
6
|
-
import {
|
|
6
|
+
import { pathToFileURL } from 'node:url';
|
|
7
|
+
import { ConfigError, FileOperationError, GeminiAPIError, InputValidationError, NetworkError, SecurityError, VolcengineAPIError, } from '../utils/errors.js';
|
|
7
8
|
// Constants for MIME types and error handling
|
|
8
9
|
const MIME_TYPES = {
|
|
9
10
|
PNG: 'image/png',
|
|
@@ -18,6 +19,53 @@ const FILE_EXTENSIONS = {
|
|
|
18
19
|
const DEFAULT_MIME_TYPE = MIME_TYPES.PNG;
|
|
19
20
|
const UNKNOWN_ERROR_CODE = 'UNKNOWN_ERROR';
|
|
20
21
|
const DEFAULT_ERROR_SUGGESTION = 'Please try again or contact support if the problem persists';
|
|
22
|
+
function toFileUri(filePath) {
|
|
23
|
+
return pathToFileURL(path.resolve(filePath)).toString();
|
|
24
|
+
}
|
|
25
|
+
function createMetadata(generationResult, imageCount) {
|
|
26
|
+
return {
|
|
27
|
+
model: generationResult.metadata.model,
|
|
28
|
+
processingTime: 0,
|
|
29
|
+
contextMethod: 'structured_prompt',
|
|
30
|
+
timestamp: generationResult.metadata.timestamp.toISOString(),
|
|
31
|
+
imageCount,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function createFileDescriptor(filePath, index, total) {
|
|
35
|
+
const fileName = path.basename(filePath);
|
|
36
|
+
const ordinal = total > 1 ? ` ${index + 1}` : '';
|
|
37
|
+
return {
|
|
38
|
+
uri: toFileUri(filePath),
|
|
39
|
+
name: fileName,
|
|
40
|
+
title: fileName,
|
|
41
|
+
mimeType: getMimeTypeFromPath(filePath),
|
|
42
|
+
description: `Generated image${ordinal}`,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function toResourceLinkContent(file) {
|
|
46
|
+
return {
|
|
47
|
+
type: 'resource_link',
|
|
48
|
+
...file,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function createStructuredContent(generationResult, filePaths, base64Included = false) {
|
|
52
|
+
return {
|
|
53
|
+
type: 'image_result',
|
|
54
|
+
files: filePaths.map((filePath, index) => createFileDescriptor(filePath, index, filePaths.length)),
|
|
55
|
+
...(base64Included ? { base64Included: true } : {}),
|
|
56
|
+
metadata: createMetadata(generationResult, filePaths.length),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function getGeneratedVariants(generationResult) {
|
|
60
|
+
return generationResult.images?.length
|
|
61
|
+
? generationResult.images
|
|
62
|
+
: [
|
|
63
|
+
{
|
|
64
|
+
imageData: generationResult.imageData,
|
|
65
|
+
mimeType: generationResult.metadata.mimeType,
|
|
66
|
+
},
|
|
67
|
+
];
|
|
68
|
+
}
|
|
21
69
|
/**
|
|
22
70
|
* Determines MIME type based on file extension
|
|
23
71
|
* @param filePath Path to the image file
|
|
@@ -48,6 +96,7 @@ function convertErrorToStructured(error) {
|
|
|
48
96
|
if (error instanceof InputValidationError ||
|
|
49
97
|
error instanceof FileOperationError ||
|
|
50
98
|
error instanceof GeminiAPIError ||
|
|
99
|
+
error instanceof VolcengineAPIError ||
|
|
51
100
|
error instanceof NetworkError ||
|
|
52
101
|
error instanceof ConfigError ||
|
|
53
102
|
error instanceof SecurityError) {
|
|
@@ -79,31 +128,18 @@ export function createResponseBuilder() {
|
|
|
79
128
|
* @returns MCP tool response with structured content containing file path
|
|
80
129
|
*/
|
|
81
130
|
buildSuccessResponse(generationResult, filePath) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
type: 'resource',
|
|
88
|
-
resource: {
|
|
89
|
-
uri: `file://${filePath}`,
|
|
90
|
-
name: fileName,
|
|
91
|
-
mimeType,
|
|
92
|
-
},
|
|
93
|
-
metadata: {
|
|
94
|
-
model: generationResult.metadata.model,
|
|
95
|
-
processingTime: 0, // Not tracked in simplified version
|
|
96
|
-
contextMethod: 'structured_prompt',
|
|
97
|
-
timestamp: generationResult.metadata.timestamp.toISOString(),
|
|
98
|
-
},
|
|
131
|
+
const structuredContent = createStructuredContent(generationResult, [filePath]);
|
|
132
|
+
return {
|
|
133
|
+
content: structuredContent.files.map((file) => toResourceLinkContent(file)),
|
|
134
|
+
structuredContent,
|
|
135
|
+
isError: false,
|
|
99
136
|
};
|
|
137
|
+
},
|
|
138
|
+
buildMultiSuccessResponse(generationResult, filePaths) {
|
|
139
|
+
const structuredContent = createStructuredContent(generationResult, filePaths);
|
|
100
140
|
return {
|
|
101
|
-
content:
|
|
102
|
-
|
|
103
|
-
type: 'text',
|
|
104
|
-
text: JSON.stringify(structuredContent),
|
|
105
|
-
},
|
|
106
|
-
],
|
|
141
|
+
content: structuredContent.files.map((file) => toResourceLinkContent(file)),
|
|
142
|
+
structuredContent,
|
|
107
143
|
isError: false,
|
|
108
144
|
};
|
|
109
145
|
},
|
|
@@ -114,31 +150,16 @@ export function createResponseBuilder() {
|
|
|
114
150
|
* @param base64Data Base64 encoded image data
|
|
115
151
|
* @returns MCP tool response with both file URI and base64 data
|
|
116
152
|
*/
|
|
117
|
-
buildBase64SuccessResponse(generationResult,
|
|
118
|
-
const
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
name: fileName,
|
|
125
|
-
mimeType,
|
|
126
|
-
},
|
|
127
|
-
base64Data,
|
|
128
|
-
metadata: {
|
|
129
|
-
model: generationResult.metadata.model,
|
|
130
|
-
processingTime: 0,
|
|
131
|
-
contextMethod: 'structured_prompt',
|
|
132
|
-
timestamp: generationResult.metadata.timestamp.toISOString(),
|
|
133
|
-
},
|
|
134
|
-
};
|
|
153
|
+
buildBase64SuccessResponse(generationResult, filePaths) {
|
|
154
|
+
const structuredContent = createStructuredContent(generationResult, filePaths, true);
|
|
155
|
+
const imageContents = getGeneratedVariants(generationResult).map((variant) => ({
|
|
156
|
+
type: 'image',
|
|
157
|
+
data: variant.imageData.toString('base64'),
|
|
158
|
+
mimeType: variant.mimeType,
|
|
159
|
+
}));
|
|
135
160
|
return {
|
|
136
|
-
content: [
|
|
137
|
-
|
|
138
|
-
type: 'text',
|
|
139
|
-
text: JSON.stringify(responseData),
|
|
140
|
-
},
|
|
141
|
-
],
|
|
161
|
+
content: [...imageContents, ...structuredContent.files.map((file) => toResourceLinkContent(file))],
|
|
162
|
+
structuredContent,
|
|
142
163
|
isError: false,
|
|
143
164
|
};
|
|
144
165
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responseBuilder.js","sourceRoot":"","sources":["../../src/business/responseBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"responseBuilder.js","sourceRoot":"","sources":["../../src/business/responseBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - skills install → bin/install-skills.js
|
|
7
7
|
* - (default) → MCP server startup
|
|
8
8
|
*/
|
|
9
|
-
export type { GeneratedImageResult } from './api/
|
|
9
|
+
export type { GeneratedImageResult } from './api/imageProvider.js';
|
|
10
10
|
export { createMCPServer, MCPServerImpl } from './server/mcpServer.js';
|
|
11
11
|
export type { GenerateImageParams, MCPServerConfig } from './types/mcp.js';
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAwBH,YAAY,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAwBH,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACtE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/server/errorHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/server/errorHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAOL,KAAK,MAAM,EACZ,MAAM,oBAAoB,CAAA;AAM3B;;;;GAIG;AACH,iBAAS,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAqBlD;AAED;;;;;GAKG;AACH,iBAAe,kBAAkB,CAAC,CAAC,EACjC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAa3B;AA4DD;;;GAGG;AACH,eAAO,MAAM,YAAY;;;CAGf,CAAA"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Error Handler utility for unified error processing
|
|
3
3
|
* Provides centralized error handling and Result type wrapping
|
|
4
4
|
*/
|
|
5
|
-
import { ConfigError, FileOperationError, GeminiAPIError, InputValidationError, NetworkError, } from '../utils/errors.js';
|
|
5
|
+
import { ConfigError, FileOperationError, GeminiAPIError, InputValidationError, NetworkError, VolcengineAPIError, } from '../utils/errors.js';
|
|
6
6
|
import { Logger } from '../utils/logger.js';
|
|
7
7
|
// Create logger instance for error handling
|
|
8
8
|
const logger = new Logger();
|
|
@@ -62,6 +62,7 @@ function convertErrorToStructured(error) {
|
|
|
62
62
|
if (error instanceof InputValidationError ||
|
|
63
63
|
error instanceof FileOperationError ||
|
|
64
64
|
error instanceof GeminiAPIError ||
|
|
65
|
+
error instanceof VolcengineAPIError ||
|
|
65
66
|
error instanceof NetworkError ||
|
|
66
67
|
error instanceof ConfigError) {
|
|
67
68
|
const errorResponse = {
|
|
@@ -71,7 +72,7 @@ function convertErrorToStructured(error) {
|
|
|
71
72
|
suggestion: error.suggestion,
|
|
72
73
|
};
|
|
73
74
|
// Include context details for GeminiAPIError to provide better debugging info
|
|
74
|
-
if (error instanceof GeminiAPIError && error.context) {
|
|
75
|
+
if ((error instanceof GeminiAPIError || error instanceof VolcengineAPIError) && error.context) {
|
|
75
76
|
// Add non-sensitive context information
|
|
76
77
|
const { suggestion, ...otherContext } = error.context;
|
|
77
78
|
if (Object.keys(otherContext).length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/server/errorHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,YAAY,
|
|
1
|
+
{"version":3,"file":"errorHandler.js","sourceRoot":"","sources":["../../src/server/errorHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Server implementation
|
|
3
|
-
*
|
|
3
|
+
* Supports multiple image providers with Gemini prompt enhancement when applicable
|
|
4
4
|
*/
|
|
5
5
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
6
6
|
import type { MCPServerConfig } from '../types/mcp.js';
|
|
7
|
-
/**
|
|
8
|
-
* Simplified MCP server
|
|
9
|
-
*/
|
|
10
7
|
export declare class MCPServerImpl {
|
|
11
8
|
private config;
|
|
12
9
|
private server;
|
|
@@ -17,17 +14,12 @@ export declare class MCPServerImpl {
|
|
|
17
14
|
private structuredPromptGenerator;
|
|
18
15
|
private geminiTextClient;
|
|
19
16
|
private geminiClient;
|
|
17
|
+
private volcengineClient;
|
|
20
18
|
constructor(config?: Partial<MCPServerConfig>);
|
|
21
|
-
/**
|
|
22
|
-
* Get server info
|
|
23
|
-
*/
|
|
24
19
|
getServerInfo(): {
|
|
25
20
|
name: string;
|
|
26
21
|
version: string;
|
|
27
22
|
};
|
|
28
|
-
/**
|
|
29
|
-
* Get list of registered tools
|
|
30
|
-
*/
|
|
31
23
|
getToolsList(): {
|
|
32
24
|
tools: {
|
|
33
25
|
name: string;
|
|
@@ -39,6 +31,11 @@ export declare class MCPServerImpl {
|
|
|
39
31
|
type: "string";
|
|
40
32
|
description: string;
|
|
41
33
|
};
|
|
34
|
+
provider: {
|
|
35
|
+
type: "string";
|
|
36
|
+
description: string;
|
|
37
|
+
enum: string[];
|
|
38
|
+
};
|
|
42
39
|
fileName: {
|
|
43
40
|
type: "string";
|
|
44
41
|
description: string;
|
|
@@ -122,6 +119,22 @@ export declare class MCPServerImpl {
|
|
|
122
119
|
description: string;
|
|
123
120
|
enum: string[];
|
|
124
121
|
};
|
|
122
|
+
outputFormat: {
|
|
123
|
+
type: "string";
|
|
124
|
+
description: string;
|
|
125
|
+
enum: string[];
|
|
126
|
+
};
|
|
127
|
+
outputCount: {
|
|
128
|
+
type: "integer";
|
|
129
|
+
description: string;
|
|
130
|
+
};
|
|
131
|
+
imageRequests: {
|
|
132
|
+
type: "array";
|
|
133
|
+
description: string;
|
|
134
|
+
items: {
|
|
135
|
+
type: "string";
|
|
136
|
+
};
|
|
137
|
+
};
|
|
125
138
|
skipPromptEnhancement: {
|
|
126
139
|
type: "boolean";
|
|
127
140
|
description: string;
|
|
@@ -129,31 +142,79 @@ export declare class MCPServerImpl {
|
|
|
129
142
|
};
|
|
130
143
|
required: string[];
|
|
131
144
|
};
|
|
145
|
+
outputSchema: {
|
|
146
|
+
type: "object";
|
|
147
|
+
properties: {
|
|
148
|
+
type: {
|
|
149
|
+
type: "string";
|
|
150
|
+
const: string;
|
|
151
|
+
};
|
|
152
|
+
files: {
|
|
153
|
+
type: "array";
|
|
154
|
+
items: {
|
|
155
|
+
type: "object";
|
|
156
|
+
properties: {
|
|
157
|
+
uri: {
|
|
158
|
+
type: "string";
|
|
159
|
+
};
|
|
160
|
+
name: {
|
|
161
|
+
type: "string";
|
|
162
|
+
};
|
|
163
|
+
title: {
|
|
164
|
+
type: "string";
|
|
165
|
+
};
|
|
166
|
+
mimeType: {
|
|
167
|
+
type: "string";
|
|
168
|
+
};
|
|
169
|
+
description: {
|
|
170
|
+
type: "string";
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
required: string[];
|
|
174
|
+
};
|
|
175
|
+
};
|
|
176
|
+
base64Included: {
|
|
177
|
+
type: "boolean";
|
|
178
|
+
};
|
|
179
|
+
metadata: {
|
|
180
|
+
type: "object";
|
|
181
|
+
properties: {
|
|
182
|
+
model: {
|
|
183
|
+
type: "string";
|
|
184
|
+
};
|
|
185
|
+
processingTime: {
|
|
186
|
+
type: "number";
|
|
187
|
+
};
|
|
188
|
+
contextMethod: {
|
|
189
|
+
type: "string";
|
|
190
|
+
};
|
|
191
|
+
timestamp: {
|
|
192
|
+
type: "string";
|
|
193
|
+
};
|
|
194
|
+
imageCount: {
|
|
195
|
+
type: "integer";
|
|
196
|
+
};
|
|
197
|
+
};
|
|
198
|
+
required: string[];
|
|
199
|
+
};
|
|
200
|
+
};
|
|
201
|
+
required: string[];
|
|
202
|
+
};
|
|
132
203
|
}[];
|
|
133
204
|
};
|
|
134
|
-
/**
|
|
135
|
-
* Tool execution
|
|
136
|
-
*/
|
|
137
205
|
callTool(name: string, args: unknown): Promise<import("../types/mcp.js").McpToolResponse>;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
private
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
206
|
+
private initializeGeminiSupport;
|
|
207
|
+
private initializeVolcengineSupport;
|
|
208
|
+
private getProviderClient;
|
|
209
|
+
private prepareInputImages;
|
|
210
|
+
private maybeEnhancePrompt;
|
|
211
|
+
private buildSuccessResponse;
|
|
212
|
+
private getGeneratedVariants;
|
|
213
|
+
private generateAndSave;
|
|
214
|
+
private handleGenerateMultiImage;
|
|
145
215
|
private handleGenerateImage;
|
|
146
|
-
/**
|
|
147
|
-
* Initialize MCP server with tool handlers
|
|
148
|
-
*/
|
|
149
216
|
initialize(): Server;
|
|
150
|
-
/**
|
|
151
|
-
* Setup MCP protocol handlers
|
|
152
|
-
*/
|
|
153
217
|
private setupHandlers;
|
|
154
218
|
}
|
|
155
|
-
/**
|
|
156
|
-
* Factory function to create MCP server
|
|
157
|
-
*/
|
|
158
219
|
export declare function createMCPServer(config?: Partial<MCPServerConfig>): MCPServerImpl;
|
|
159
220
|
//# sourceMappingURL=mcpServer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpServer.d.ts","sourceRoot":"","sources":["../../src/server/mcpServer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;
|
|
1
|
+
{"version":3,"file":"mcpServer.d.ts","sourceRoot":"","sources":["../../src/server/mcpServer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AA0BlE,OAAO,KAAK,EAAsC,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAsM1F,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,yBAAyB,CAAyC;IAC1E,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,gBAAgB,CAAgC;gBAE5C,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM;IAQ1C,aAAa;;;;IAOb,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqBN,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;YAenC,uBAAuB;YA6BvB,2BAA2B;IAgBzC,OAAO,CAAC,iBAAiB;YAcX,kBAAkB;YA8ClB,kBAAkB;IAyDhC,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,oBAAoB;YAMd,eAAe;YA+Ff,wBAAwB;YA4ExB,mBAAmB;IAiB1B,UAAU,IAAI,MAAM;IAkB3B,OAAO,CAAC,aAAa;CAwBtB;AAED,wBAAgB,eAAe,CAAC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,iBAEpE"}
|