@stabgan/openrouter-mcp-multimodal 1.3.0 → 1.5.0
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 +22 -0
- package/dist/index.js +50 -11
- package/dist/index.js.map +1 -1
- package/dist/tool-handlers/analyze-image.js +158 -31
- package/dist/tool-handlers/analyze-image.js.map +1 -1
- package/dist/tool-handlers/multi-image-analysis.d.ts +3 -7
- package/dist/tool-handlers/multi-image-analysis.js +146 -71
- package/dist/tool-handlers/multi-image-analysis.js.map +1 -1
- package/dist/tool-handlers.d.ts +4 -0
- package/dist/tool-handlers.js +8 -2
- package/dist/tool-handlers.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,6 +30,28 @@ An MCP (Model Context Protocol) server that provides chat and image analysis cap
|
|
|
30
30
|
- Exponential backoff for retries
|
|
31
31
|
- Automatic rate limit handling
|
|
32
32
|
|
|
33
|
+
## What's New in 1.5.0
|
|
34
|
+
|
|
35
|
+
- **Improved OS Compatibility:**
|
|
36
|
+
- Enhanced path handling for Windows, macOS, and Linux
|
|
37
|
+
- Better support for Windows-style paths with drive letters
|
|
38
|
+
- Normalized path processing for consistent behavior across platforms
|
|
39
|
+
|
|
40
|
+
- **MCP Configuration Support:**
|
|
41
|
+
- Cursor MCP integration without requiring environment variables
|
|
42
|
+
- Direct configuration via MCP parameters
|
|
43
|
+
- Flexible API key and model specification options
|
|
44
|
+
|
|
45
|
+
- **Robust Error Handling:**
|
|
46
|
+
- Improved fallback mechanisms for image processing
|
|
47
|
+
- Better error reporting with specific diagnostics
|
|
48
|
+
- Multiple backup strategies for file reading
|
|
49
|
+
|
|
50
|
+
- **Image Processing Enhancements:**
|
|
51
|
+
- More reliable base64 encoding for all image types
|
|
52
|
+
- Fallback options when Sharp module is unavailable
|
|
53
|
+
- Better handling of large images with automatic optimization
|
|
54
|
+
|
|
33
55
|
## Installation
|
|
34
56
|
|
|
35
57
|
### Option 1: Install via npm
|
package/dist/index.js
CHANGED
|
@@ -8,13 +8,13 @@ const DEFAULT_MODEL = 'qwen/qwen2.5-vl-32b-instruct:free';
|
|
|
8
8
|
class OpenRouterMultimodalServer {
|
|
9
9
|
server;
|
|
10
10
|
toolHandlers; // Using definite assignment assertion
|
|
11
|
-
constructor() {
|
|
12
|
-
// Retrieve API key
|
|
13
|
-
const apiKey = process.env.OPENROUTER_API_KEY;
|
|
14
|
-
const defaultModel = process.env.
|
|
11
|
+
constructor(options) {
|
|
12
|
+
// Retrieve API key from options or environment variables
|
|
13
|
+
const apiKey = options?.apiKey || process.env.OPENROUTER_API_KEY;
|
|
14
|
+
const defaultModel = options?.defaultModel || process.env.OPENROUTER_DEFAULT_MODEL || DEFAULT_MODEL;
|
|
15
15
|
// Check if API key is provided
|
|
16
16
|
if (!apiKey) {
|
|
17
|
-
throw new Error('
|
|
17
|
+
throw new Error('OpenRouter API key is required. Provide it via options or OPENROUTER_API_KEY environment variable');
|
|
18
18
|
}
|
|
19
19
|
// Initialize the server
|
|
20
20
|
this.server = new Server({
|
|
@@ -38,14 +38,53 @@ class OpenRouterMultimodalServer {
|
|
|
38
38
|
const transport = new StdioServerTransport();
|
|
39
39
|
await this.server.connect(transport);
|
|
40
40
|
console.error('OpenRouter Multimodal MCP server running on stdio');
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
console.error(
|
|
44
|
-
const modelDisplay = process.env.OPENROUTER_DEFAULT_MODEL || DEFAULT_MODEL;
|
|
45
|
-
console.error(` Using default model: ${modelDisplay}`);
|
|
41
|
+
// Log model information
|
|
42
|
+
const modelDisplay = this.toolHandlers.getDefaultModel() || DEFAULT_MODEL;
|
|
43
|
+
console.error(`Using default model: ${modelDisplay}`);
|
|
46
44
|
console.error('Server is ready to process tool calls. Waiting for input...');
|
|
47
45
|
}
|
|
48
46
|
}
|
|
49
|
-
|
|
47
|
+
// Get MCP configuration if provided
|
|
48
|
+
let mcpOptions;
|
|
49
|
+
// Check if we're being run as an MCP server with configuration
|
|
50
|
+
if (process.argv.length > 2) {
|
|
51
|
+
try {
|
|
52
|
+
const configArg = process.argv.find(arg => arg.startsWith('--config='));
|
|
53
|
+
if (configArg) {
|
|
54
|
+
const configPath = configArg.split('=')[1];
|
|
55
|
+
const configData = require(configPath);
|
|
56
|
+
// Extract configuration
|
|
57
|
+
mcpOptions = {
|
|
58
|
+
apiKey: configData.OPENROUTER_API_KEY || configData.apiKey,
|
|
59
|
+
defaultModel: configData.OPENROUTER_DEFAULT_MODEL || configData.defaultModel
|
|
60
|
+
};
|
|
61
|
+
if (mcpOptions.apiKey) {
|
|
62
|
+
console.error('Using API key from MCP configuration');
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error('Error parsing MCP configuration:', error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Attempt to parse JSON from stdin to check for MCP server parameters
|
|
71
|
+
if (!mcpOptions?.apiKey) {
|
|
72
|
+
process.stdin.setEncoding('utf8');
|
|
73
|
+
process.stdin.once('data', (data) => {
|
|
74
|
+
try {
|
|
75
|
+
const firstMessage = JSON.parse(data.toString());
|
|
76
|
+
if (firstMessage.params && typeof firstMessage.params === 'object') {
|
|
77
|
+
mcpOptions = {
|
|
78
|
+
apiKey: firstMessage.params.OPENROUTER_API_KEY || firstMessage.params.apiKey,
|
|
79
|
+
defaultModel: firstMessage.params.OPENROUTER_DEFAULT_MODEL || firstMessage.params.defaultModel
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
// Not a valid JSON message or no parameters, continue with environment variables
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const server = new OpenRouterMultimodalServer(mcpOptions);
|
|
50
89
|
server.run().catch(console.error);
|
|
51
90
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,mCAAmC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,yDAAyD;AACzD,MAAM,aAAa,GAAG,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,47 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { promises as fs } from 'fs';
|
|
3
|
-
import sharp from 'sharp';
|
|
4
|
-
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
5
3
|
import fetch from 'node-fetch';
|
|
4
|
+
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
6
5
|
import { findSuitableFreeModel } from './multi-image-analysis.js';
|
|
7
6
|
// Default model for image analysis
|
|
8
7
|
const DEFAULT_FREE_MODEL = 'qwen/qwen2.5-vl-32b-instruct:free';
|
|
8
|
+
let sharp;
|
|
9
|
+
try {
|
|
10
|
+
sharp = require('sharp');
|
|
11
|
+
}
|
|
12
|
+
catch (e) {
|
|
13
|
+
console.error('Warning: sharp module not available, using fallback image processing');
|
|
14
|
+
// Mock implementation that just passes through the base64 data
|
|
15
|
+
sharp = (buffer) => ({
|
|
16
|
+
metadata: async () => ({ width: 800, height: 600 }),
|
|
17
|
+
resize: () => ({
|
|
18
|
+
jpeg: () => ({
|
|
19
|
+
toBuffer: async () => buffer
|
|
20
|
+
})
|
|
21
|
+
}),
|
|
22
|
+
jpeg: () => ({
|
|
23
|
+
toBuffer: async () => buffer
|
|
24
|
+
})
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Normalizes a file path to be OS-neutral
|
|
29
|
+
* Handles Windows backslashes, drive letters, etc.
|
|
30
|
+
*/
|
|
31
|
+
function normalizePath(filePath) {
|
|
32
|
+
// Skip normalization for URLs and data URLs
|
|
33
|
+
if (filePath.startsWith('http://') ||
|
|
34
|
+
filePath.startsWith('https://') ||
|
|
35
|
+
filePath.startsWith('data:')) {
|
|
36
|
+
return filePath;
|
|
37
|
+
}
|
|
38
|
+
// Handle Windows paths and convert them to a format that's usable
|
|
39
|
+
// First normalize the path according to the OS
|
|
40
|
+
let normalized = path.normalize(filePath);
|
|
41
|
+
// Make sure any Windows backslashes are handled
|
|
42
|
+
normalized = normalized.replace(/\\/g, '/');
|
|
43
|
+
return normalized;
|
|
44
|
+
}
|
|
9
45
|
async function fetchImageAsBuffer(url) {
|
|
10
46
|
try {
|
|
11
47
|
// Handle data URLs
|
|
@@ -16,31 +52,72 @@ async function fetchImageAsBuffer(url) {
|
|
|
16
52
|
}
|
|
17
53
|
return Buffer.from(matches[2], 'base64');
|
|
18
54
|
}
|
|
55
|
+
// Normalize the path before proceeding
|
|
56
|
+
const normalizedUrl = normalizePath(url);
|
|
19
57
|
// Handle file URLs
|
|
20
|
-
if (
|
|
21
|
-
const filePath =
|
|
58
|
+
if (normalizedUrl.startsWith('file://')) {
|
|
59
|
+
const filePath = normalizedUrl.replace('file://', '');
|
|
22
60
|
return await fs.readFile(filePath);
|
|
23
61
|
}
|
|
24
62
|
// Handle http/https URLs
|
|
25
|
-
if (
|
|
26
|
-
const response = await fetch(
|
|
63
|
+
if (normalizedUrl.startsWith('http://') || normalizedUrl.startsWith('https://')) {
|
|
64
|
+
const response = await fetch(normalizedUrl);
|
|
27
65
|
if (!response.ok) {
|
|
28
66
|
throw new Error(`HTTP error! status: ${response.status}`);
|
|
29
67
|
}
|
|
30
68
|
return Buffer.from(await response.arrayBuffer());
|
|
31
69
|
}
|
|
32
70
|
// Handle regular file paths
|
|
33
|
-
|
|
71
|
+
try {
|
|
72
|
+
return await fs.readFile(normalizedUrl);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
// Try the original path as a fallback
|
|
76
|
+
if (normalizedUrl !== url) {
|
|
77
|
+
try {
|
|
78
|
+
return await fs.readFile(url);
|
|
79
|
+
}
|
|
80
|
+
catch (secondError) {
|
|
81
|
+
console.error(`Failed to read file with normalized path (${normalizedUrl}) and original path (${url})`);
|
|
82
|
+
throw error; // Throw the original error
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
34
87
|
}
|
|
35
88
|
catch (error) {
|
|
36
89
|
console.error(`Error fetching image from ${url}:`, error);
|
|
37
90
|
throw error;
|
|
38
91
|
}
|
|
39
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Processes an image with minimal processing when sharp isn't available
|
|
95
|
+
*/
|
|
96
|
+
async function processImageFallback(buffer) {
|
|
97
|
+
try {
|
|
98
|
+
// Just return the buffer as base64 without processing
|
|
99
|
+
return buffer.toString('base64');
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.error('Error in fallback image processing:', error);
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
40
106
|
async function processImage(buffer) {
|
|
41
107
|
try {
|
|
108
|
+
if (typeof sharp !== 'function') {
|
|
109
|
+
console.warn('Using fallback image processing (sharp not available)');
|
|
110
|
+
return processImageFallback(buffer);
|
|
111
|
+
}
|
|
42
112
|
// Get image metadata
|
|
43
|
-
|
|
113
|
+
let metadata;
|
|
114
|
+
try {
|
|
115
|
+
metadata = await sharp(buffer).metadata();
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.warn('Error getting image metadata, using fallback:', error);
|
|
119
|
+
return processImageFallback(buffer);
|
|
120
|
+
}
|
|
44
121
|
// Calculate dimensions to keep base64 size reasonable
|
|
45
122
|
const MAX_DIMENSION = 800;
|
|
46
123
|
const JPEG_QUALITY = 80;
|
|
@@ -64,30 +141,82 @@ async function processImage(buffer) {
|
|
|
64
141
|
return jpegBuffer.toString('base64');
|
|
65
142
|
}
|
|
66
143
|
catch (error) {
|
|
67
|
-
console.error('Error processing image:', error);
|
|
68
|
-
|
|
144
|
+
console.error('Error processing image, using fallback:', error);
|
|
145
|
+
return processImageFallback(buffer);
|
|
69
146
|
}
|
|
70
147
|
}
|
|
71
148
|
/**
|
|
72
|
-
*
|
|
149
|
+
* Processes an image from a path or base64 string to a proper base64 format for APIs
|
|
73
150
|
*/
|
|
74
|
-
async function
|
|
151
|
+
async function prepareImage(imagePath) {
|
|
75
152
|
try {
|
|
76
|
-
//
|
|
77
|
-
if (
|
|
78
|
-
|
|
153
|
+
// Check if already a base64 data URL
|
|
154
|
+
if (imagePath.startsWith('data:')) {
|
|
155
|
+
const matches = imagePath.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
|
|
156
|
+
if (!matches || matches.length !== 3) {
|
|
157
|
+
throw new McpError(ErrorCode.InvalidParams, 'Invalid base64 data URL format');
|
|
158
|
+
}
|
|
159
|
+
return { base64: matches[2], mimeType: matches[1] };
|
|
160
|
+
}
|
|
161
|
+
// Normalize the path first
|
|
162
|
+
const normalizedPath = normalizePath(imagePath);
|
|
163
|
+
// Check if image is a URL
|
|
164
|
+
if (normalizedPath.startsWith('http://') || normalizedPath.startsWith('https://')) {
|
|
165
|
+
try {
|
|
166
|
+
const buffer = await fetchImageAsBuffer(normalizedPath);
|
|
167
|
+
const processed = await processImage(buffer);
|
|
168
|
+
return { base64: processed, mimeType: 'image/jpeg' }; // We convert everything to JPEG
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
throw new McpError(ErrorCode.InvalidParams, `Failed to fetch image from URL: ${error.message}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Handle file paths
|
|
175
|
+
let absolutePath = normalizedPath;
|
|
176
|
+
// For local file paths, ensure they are absolute
|
|
177
|
+
// Don't check URLs or data URIs
|
|
178
|
+
if (!normalizedPath.startsWith('data:') &&
|
|
179
|
+
!normalizedPath.startsWith('http://') &&
|
|
180
|
+
!normalizedPath.startsWith('https://')) {
|
|
181
|
+
if (!path.isAbsolute(normalizedPath)) {
|
|
182
|
+
throw new McpError(ErrorCode.InvalidParams, 'Image path must be absolute');
|
|
183
|
+
}
|
|
184
|
+
// For Windows paths that include a drive letter but aren't recognized as absolute
|
|
185
|
+
// by path.isAbsolute in some environments
|
|
186
|
+
if (/^[A-Za-z]:/.test(normalizedPath) && !path.isAbsolute(normalizedPath)) {
|
|
187
|
+
absolutePath = path.resolve(normalizedPath);
|
|
188
|
+
}
|
|
79
189
|
}
|
|
80
|
-
// Check if the file exists
|
|
81
190
|
try {
|
|
82
|
-
|
|
191
|
+
// Check if the file exists
|
|
192
|
+
await fs.access(absolutePath);
|
|
83
193
|
}
|
|
84
194
|
catch (error) {
|
|
85
|
-
|
|
195
|
+
// Try the original path as a fallback
|
|
196
|
+
try {
|
|
197
|
+
await fs.access(imagePath);
|
|
198
|
+
absolutePath = imagePath; // Use the original path if that works
|
|
199
|
+
}
|
|
200
|
+
catch (secondError) {
|
|
201
|
+
throw new McpError(ErrorCode.InvalidParams, `File not found: ${absolutePath}`);
|
|
202
|
+
}
|
|
86
203
|
}
|
|
87
204
|
// Read the file as a buffer
|
|
88
|
-
|
|
205
|
+
let buffer;
|
|
206
|
+
try {
|
|
207
|
+
buffer = await fs.readFile(absolutePath);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
// Try the original path as a fallback
|
|
211
|
+
try {
|
|
212
|
+
buffer = await fs.readFile(imagePath);
|
|
213
|
+
}
|
|
214
|
+
catch (secondError) {
|
|
215
|
+
throw new McpError(ErrorCode.InvalidParams, `Failed to read file: ${absolutePath}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
89
218
|
// Determine MIME type from file extension
|
|
90
|
-
const extension = path.extname(
|
|
219
|
+
const extension = path.extname(absolutePath).toLowerCase();
|
|
91
220
|
let mimeType;
|
|
92
221
|
switch (extension) {
|
|
93
222
|
case '.png':
|
|
@@ -109,12 +238,12 @@ async function imageToBase64(imagePath) {
|
|
|
109
238
|
default:
|
|
110
239
|
mimeType = 'application/octet-stream';
|
|
111
240
|
}
|
|
112
|
-
//
|
|
113
|
-
const
|
|
114
|
-
return { base64, mimeType };
|
|
241
|
+
// Process and optimize the image
|
|
242
|
+
const processed = await processImage(buffer);
|
|
243
|
+
return { base64: processed, mimeType };
|
|
115
244
|
}
|
|
116
245
|
catch (error) {
|
|
117
|
-
console.error('Error
|
|
246
|
+
console.error('Error preparing image:', error);
|
|
118
247
|
throw error;
|
|
119
248
|
}
|
|
120
249
|
}
|
|
@@ -126,19 +255,17 @@ export async function handleAnalyzeImage(request, openai, defaultModel) {
|
|
|
126
255
|
try {
|
|
127
256
|
// Validate inputs
|
|
128
257
|
if (!args.image_path) {
|
|
129
|
-
throw new McpError(ErrorCode.InvalidParams, 'An image path is required');
|
|
130
|
-
}
|
|
131
|
-
if (!args.question) {
|
|
132
|
-
throw new McpError(ErrorCode.InvalidParams, 'A question about the image is required');
|
|
258
|
+
throw new McpError(ErrorCode.InvalidParams, 'An image path, URL, or base64 data is required');
|
|
133
259
|
}
|
|
134
|
-
|
|
260
|
+
const question = args.question || "What's in this image?";
|
|
261
|
+
console.error(`Processing image: ${args.image_path.substring(0, 100)}${args.image_path.length > 100 ? '...' : ''}`);
|
|
135
262
|
// Convert the image to base64
|
|
136
|
-
const { base64, mimeType } = await
|
|
263
|
+
const { base64, mimeType } = await prepareImage(args.image_path);
|
|
137
264
|
// Create the content array for the OpenAI API
|
|
138
265
|
const content = [
|
|
139
266
|
{
|
|
140
267
|
type: 'text',
|
|
141
|
-
text:
|
|
268
|
+
text: question
|
|
142
269
|
},
|
|
143
270
|
{
|
|
144
271
|
type: 'image_url',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-image.js","sourceRoot":"","sources":["../../src/tool-handlers/analyze-image.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"analyze-image.js","sourceRoot":"","sources":["../../src/tool-handlers/analyze-image.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ export interface MultiImageAnalysisToolRequest {
|
|
|
13
13
|
*/
|
|
14
14
|
export declare function findSuitableFreeModel(openai: OpenAI): Promise<string>;
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
16
|
+
* Main handler for multi-image analysis
|
|
17
17
|
*/
|
|
18
18
|
export declare function handleMultiImageAnalysis(request: {
|
|
19
19
|
params: {
|
|
@@ -27,8 +27,6 @@ export declare function handleMultiImageAnalysis(request: {
|
|
|
27
27
|
metadata: {
|
|
28
28
|
model: string;
|
|
29
29
|
usage: OpenAI.Completions.CompletionUsage | undefined;
|
|
30
|
-
successful_images: number;
|
|
31
|
-
failed_images: number;
|
|
32
30
|
error_type?: undefined;
|
|
33
31
|
error_message?: undefined;
|
|
34
32
|
};
|
|
@@ -40,11 +38,9 @@ export declare function handleMultiImageAnalysis(request: {
|
|
|
40
38
|
}[];
|
|
41
39
|
isError: boolean;
|
|
42
40
|
metadata: {
|
|
43
|
-
error_type:
|
|
44
|
-
error_message:
|
|
41
|
+
error_type: any;
|
|
42
|
+
error_message: any;
|
|
45
43
|
model?: undefined;
|
|
46
44
|
usage?: undefined;
|
|
47
|
-
successful_images?: undefined;
|
|
48
|
-
failed_images?: undefined;
|
|
49
45
|
};
|
|
50
46
|
}>;
|
|
@@ -1,11 +1,32 @@
|
|
|
1
1
|
import fetch from 'node-fetch';
|
|
2
|
-
|
|
2
|
+
// Remove the sharp import to avoid conflicts with our dynamic import
|
|
3
|
+
// import sharp from 'sharp';
|
|
3
4
|
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js';
|
|
4
5
|
import path from 'path';
|
|
5
6
|
import { promises as fs } from 'fs';
|
|
6
7
|
import { tmpdir } from 'os';
|
|
7
8
|
// Remove uuid import as we'll use a simple random string generator instead
|
|
8
9
|
// import { v4 as uuidv4 } from 'uuid';
|
|
10
|
+
// Setup sharp with fallback
|
|
11
|
+
let sharp;
|
|
12
|
+
try {
|
|
13
|
+
sharp = require('sharp');
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
console.error('Warning: sharp module not available, using fallback image processing');
|
|
17
|
+
// Mock implementation that just passes through the base64 data
|
|
18
|
+
sharp = (buffer) => ({
|
|
19
|
+
metadata: async () => ({ width: 800, height: 600 }),
|
|
20
|
+
resize: () => ({
|
|
21
|
+
jpeg: () => ({
|
|
22
|
+
toBuffer: async () => buffer
|
|
23
|
+
})
|
|
24
|
+
}),
|
|
25
|
+
jpeg: () => ({
|
|
26
|
+
toBuffer: async () => buffer
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
}
|
|
9
30
|
// Default model for image analysis
|
|
10
31
|
const DEFAULT_FREE_MODEL = 'qwen/qwen2.5-vl-32b-instruct:free';
|
|
11
32
|
// Image processing constants
|
|
@@ -22,6 +43,24 @@ function generateRandomId() {
|
|
|
22
43
|
* Sleep function for retry mechanisms
|
|
23
44
|
*/
|
|
24
45
|
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
46
|
+
/**
|
|
47
|
+
* Normalizes a file path to be OS-neutral
|
|
48
|
+
* Handles Windows backslashes, drive letters, etc.
|
|
49
|
+
*/
|
|
50
|
+
function normalizePath(filePath) {
|
|
51
|
+
// Skip normalization for URLs and data URLs
|
|
52
|
+
if (filePath.startsWith('http://') ||
|
|
53
|
+
filePath.startsWith('https://') ||
|
|
54
|
+
filePath.startsWith('data:')) {
|
|
55
|
+
return filePath;
|
|
56
|
+
}
|
|
57
|
+
// Handle Windows paths and convert them to a format that's usable
|
|
58
|
+
// First normalize the path according to the OS
|
|
59
|
+
let normalized = path.normalize(filePath);
|
|
60
|
+
// Make sure any Windows backslashes are handled
|
|
61
|
+
normalized = normalized.replace(/\\/g, '/');
|
|
62
|
+
return normalized;
|
|
63
|
+
}
|
|
25
64
|
/**
|
|
26
65
|
* Get MIME type from file extension or data URL
|
|
27
66
|
*/
|
|
@@ -55,9 +94,11 @@ async function fetchImageAsBuffer(url) {
|
|
|
55
94
|
}
|
|
56
95
|
return Buffer.from(matches[2], 'base64');
|
|
57
96
|
}
|
|
97
|
+
// Normalize the path before proceeding
|
|
98
|
+
const normalizedUrl = normalizePath(url);
|
|
58
99
|
// Handle file URLs with file:// protocol
|
|
59
|
-
if (
|
|
60
|
-
const filePath =
|
|
100
|
+
if (normalizedUrl.startsWith('file://')) {
|
|
101
|
+
const filePath = normalizedUrl.replace('file://', '');
|
|
61
102
|
try {
|
|
62
103
|
return await fs.readFile(filePath);
|
|
63
104
|
}
|
|
@@ -67,23 +108,34 @@ async function fetchImageAsBuffer(url) {
|
|
|
67
108
|
}
|
|
68
109
|
}
|
|
69
110
|
// Handle absolute and relative file paths
|
|
70
|
-
if (
|
|
111
|
+
if (normalizedUrl.startsWith('/') || normalizedUrl.startsWith('./') || normalizedUrl.startsWith('../') || /^[A-Za-z]:\\/.test(normalizedUrl) || /^[A-Za-z]:\//.test(normalizedUrl)) {
|
|
71
112
|
try {
|
|
72
|
-
|
|
113
|
+
// Try with normalized path
|
|
114
|
+
return await fs.readFile(normalizedUrl);
|
|
73
115
|
}
|
|
74
116
|
catch (error) {
|
|
75
|
-
|
|
76
|
-
|
|
117
|
+
// Fallback to original path if normalized path doesn't work
|
|
118
|
+
if (normalizedUrl !== url) {
|
|
119
|
+
try {
|
|
120
|
+
return await fs.readFile(url);
|
|
121
|
+
}
|
|
122
|
+
catch (secondError) {
|
|
123
|
+
console.error(`Failed to read file with both normalized path (${normalizedUrl}) and original path (${url})`);
|
|
124
|
+
throw new Error(`Failed to read file: ${url}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
console.error(`Error reading file at ${normalizedUrl}:`, error);
|
|
128
|
+
throw new Error(`Failed to read file: ${normalizedUrl}`);
|
|
77
129
|
}
|
|
78
130
|
}
|
|
79
131
|
// Handle http/https URLs
|
|
80
|
-
if (
|
|
132
|
+
if (normalizedUrl.startsWith('http://') || normalizedUrl.startsWith('https://')) {
|
|
81
133
|
for (let attempt = 0; attempt < MAX_RETRY_ATTEMPTS; attempt++) {
|
|
82
134
|
try {
|
|
83
135
|
// Use AbortController for timeout instead of timeout option
|
|
84
136
|
const controller = new AbortController();
|
|
85
137
|
const timeoutId = setTimeout(() => controller.abort(), 15000);
|
|
86
|
-
const response = await fetch(
|
|
138
|
+
const response = await fetch(normalizedUrl, {
|
|
87
139
|
signal: controller.signal,
|
|
88
140
|
headers: {
|
|
89
141
|
'User-Agent': 'OpenRouter-MCP-Server/1.0'
|
|
@@ -97,7 +149,7 @@ async function fetchImageAsBuffer(url) {
|
|
|
97
149
|
return Buffer.from(await response.arrayBuffer());
|
|
98
150
|
}
|
|
99
151
|
catch (error) {
|
|
100
|
-
console.error(`Error fetching URL (attempt ${attempt + 1}/${MAX_RETRY_ATTEMPTS}): ${
|
|
152
|
+
console.error(`Error fetching URL (attempt ${attempt + 1}/${MAX_RETRY_ATTEMPTS}): ${normalizedUrl}`, error);
|
|
101
153
|
if (attempt < MAX_RETRY_ATTEMPTS - 1) {
|
|
102
154
|
// Exponential backoff with jitter
|
|
103
155
|
const delay = RETRY_DELAY * Math.pow(2, attempt) * (0.5 + Math.random() * 0.5);
|
|
@@ -119,17 +171,34 @@ async function fetchImageAsBuffer(url) {
|
|
|
119
171
|
// TypeScript requires a return statement here, but this is unreachable
|
|
120
172
|
return Buffer.from([]);
|
|
121
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Fallback image processing when sharp isn't available
|
|
176
|
+
*/
|
|
177
|
+
function processImageFallback(buffer, mimeType) {
|
|
178
|
+
return Promise.resolve(buffer.toString('base64'));
|
|
179
|
+
}
|
|
122
180
|
/**
|
|
123
181
|
* Process and optimize image for API consumption
|
|
124
182
|
*/
|
|
125
183
|
async function processImage(buffer, mimeType) {
|
|
126
184
|
try {
|
|
185
|
+
if (typeof sharp !== 'function') {
|
|
186
|
+
console.warn('Using fallback image processing (sharp not available)');
|
|
187
|
+
return processImageFallback(buffer, mimeType);
|
|
188
|
+
}
|
|
127
189
|
// Create a temporary directory for processing if needed
|
|
128
190
|
const tempDir = path.join(tmpdir(), `openrouter-mcp-${generateRandomId()}`);
|
|
129
191
|
await fs.mkdir(tempDir, { recursive: true });
|
|
130
192
|
// Get image info
|
|
131
193
|
let sharpInstance = sharp(buffer);
|
|
132
|
-
|
|
194
|
+
let metadata;
|
|
195
|
+
try {
|
|
196
|
+
metadata = await sharpInstance.metadata();
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.warn('Error getting image metadata, using fallback:', error);
|
|
200
|
+
return processImageFallback(buffer, mimeType);
|
|
201
|
+
}
|
|
133
202
|
// Skip processing for small images
|
|
134
203
|
if (metadata.width && metadata.height &&
|
|
135
204
|
metadata.width <= MAX_DIMENSION &&
|
|
@@ -147,18 +216,21 @@ async function processImage(buffer, mimeType) {
|
|
|
147
216
|
sharpInstance = sharpInstance.resize(resizeOptions);
|
|
148
217
|
}
|
|
149
218
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
219
|
+
try {
|
|
220
|
+
// Convert to JPEG for consistency and small size
|
|
221
|
+
const processedBuffer = await sharpInstance
|
|
222
|
+
.jpeg({ quality: JPEG_QUALITY })
|
|
223
|
+
.toBuffer();
|
|
224
|
+
return processedBuffer.toString('base64');
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
console.warn('Error in final image processing, using fallback:', error);
|
|
228
|
+
return processImageFallback(buffer, mimeType);
|
|
229
|
+
}
|
|
155
230
|
}
|
|
156
231
|
catch (error) {
|
|
157
|
-
console.error('Error processing image:', error);
|
|
158
|
-
|
|
159
|
-
// This is a fallback to ensure we don't completely fail on processing errors
|
|
160
|
-
console.error('Returning original image without processing');
|
|
161
|
-
return buffer.toString('base64');
|
|
232
|
+
console.error('Error processing image, using fallback:', error);
|
|
233
|
+
return processImageFallback(buffer, mimeType);
|
|
162
234
|
}
|
|
163
235
|
}
|
|
164
236
|
/**
|
|
@@ -230,61 +302,47 @@ export async function findSuitableFreeModel(openai) {
|
|
|
230
302
|
}
|
|
231
303
|
}
|
|
232
304
|
/**
|
|
233
|
-
*
|
|
305
|
+
* Main handler for multi-image analysis
|
|
234
306
|
*/
|
|
235
307
|
export async function handleMultiImageAnalysis(request, openai, defaultModel) {
|
|
236
308
|
const args = request.params.arguments;
|
|
237
309
|
try {
|
|
238
310
|
// Validate inputs
|
|
239
|
-
if (!args.images || args.images.length === 0) {
|
|
311
|
+
if (!args.images || !Array.isArray(args.images) || args.images.length === 0) {
|
|
240
312
|
throw new McpError(ErrorCode.InvalidParams, 'At least one image is required');
|
|
241
313
|
}
|
|
242
314
|
if (!args.prompt) {
|
|
243
|
-
throw new McpError(ErrorCode.InvalidParams, 'A prompt is required');
|
|
315
|
+
throw new McpError(ErrorCode.InvalidParams, 'A prompt for analyzing the images is required');
|
|
244
316
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
text: args.prompt
|
|
249
|
-
}];
|
|
250
|
-
// Track successful and failed images for reporting
|
|
251
|
-
const successfulImages = [];
|
|
252
|
-
const failedImages = [];
|
|
253
|
-
// Process each image
|
|
254
|
-
for (const [index, image] of args.images.entries()) {
|
|
317
|
+
console.error(`Processing ${args.images.length} images`);
|
|
318
|
+
// Process each image and convert to base64 if needed
|
|
319
|
+
const processedImages = await Promise.all(args.images.map(async (image, index) => {
|
|
255
320
|
try {
|
|
256
|
-
|
|
321
|
+
// Skip processing if already a data URL
|
|
322
|
+
if (image.url.startsWith('data:')) {
|
|
323
|
+
console.error(`Image ${index + 1} is already in base64 format`);
|
|
324
|
+
return image;
|
|
325
|
+
}
|
|
326
|
+
console.error(`Processing image ${index + 1}: ${image.url.substring(0, 100)}${image.url.length > 100 ? '...' : ''}`);
|
|
257
327
|
// Get MIME type
|
|
258
328
|
const mimeType = getMimeType(image.url);
|
|
259
329
|
// Fetch and process the image
|
|
260
|
-
const
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
type: 'image_url',
|
|
267
|
-
image_url: {
|
|
268
|
-
url: `data:${outputMimeType};base64,${base64Image}`
|
|
269
|
-
}
|
|
270
|
-
});
|
|
271
|
-
successfulImages.push(image.url);
|
|
330
|
+
const buffer = await fetchImageAsBuffer(image.url);
|
|
331
|
+
const base64 = await processImage(buffer, mimeType);
|
|
332
|
+
return {
|
|
333
|
+
url: `data:${mimeType === 'application/octet-stream' ? 'image/jpeg' : mimeType};base64,${base64}`,
|
|
334
|
+
alt: image.alt
|
|
335
|
+
};
|
|
272
336
|
}
|
|
273
337
|
catch (error) {
|
|
274
|
-
console.error(`Error processing image ${index + 1}
|
|
275
|
-
|
|
276
|
-
// Continue with other images if one fails
|
|
338
|
+
console.error(`Error processing image ${index + 1}:`, error);
|
|
339
|
+
throw new Error(`Failed to process image ${index + 1}: ${image.url}. Error: ${error.message}`);
|
|
277
340
|
}
|
|
278
|
-
}
|
|
279
|
-
// If no images were successfully processed
|
|
280
|
-
if (content.length === 1) {
|
|
281
|
-
const errorDetails = failedImages.map(img => `${img.url.substring(0, 30)}...: ${img.error}`).join('; ');
|
|
282
|
-
throw new Error(`Failed to process any of the provided images. Errors: ${errorDetails}`);
|
|
283
|
-
}
|
|
341
|
+
}));
|
|
284
342
|
// Select model with priority:
|
|
285
343
|
// 1. User-specified model
|
|
286
344
|
// 2. Default model from environment
|
|
287
|
-
// 3. Default free vision model
|
|
345
|
+
// 3. Default free vision model
|
|
288
346
|
let model = args.model || defaultModel || DEFAULT_FREE_MODEL;
|
|
289
347
|
// If a model is specified but not our default free model, verify it exists
|
|
290
348
|
if (model !== DEFAULT_FREE_MODEL) {
|
|
@@ -297,7 +355,22 @@ export async function handleMultiImageAnalysis(request, openai, defaultModel) {
|
|
|
297
355
|
}
|
|
298
356
|
}
|
|
299
357
|
console.error(`Making API call with model: ${model}`);
|
|
300
|
-
|
|
358
|
+
// Build content array for the API call
|
|
359
|
+
const content = [
|
|
360
|
+
{
|
|
361
|
+
type: 'text',
|
|
362
|
+
text: args.prompt
|
|
363
|
+
}
|
|
364
|
+
];
|
|
365
|
+
// Add each processed image to the content array
|
|
366
|
+
processedImages.forEach(image => {
|
|
367
|
+
content.push({
|
|
368
|
+
type: 'image_url',
|
|
369
|
+
image_url: {
|
|
370
|
+
url: image.url
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
});
|
|
301
374
|
// Make the API call
|
|
302
375
|
const completion = await openai.chat.completions.create({
|
|
303
376
|
model,
|
|
@@ -306,14 +379,18 @@ export async function handleMultiImageAnalysis(request, openai, defaultModel) {
|
|
|
306
379
|
content
|
|
307
380
|
}]
|
|
308
381
|
});
|
|
309
|
-
//
|
|
382
|
+
// Get response text and format if requested
|
|
310
383
|
let responseText = completion.choices[0].message.content || '';
|
|
311
|
-
//
|
|
312
|
-
if (
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
384
|
+
// Format as markdown if requested
|
|
385
|
+
if (args.markdown_response) {
|
|
386
|
+
// Simple formatting enhancements
|
|
387
|
+
responseText = responseText
|
|
388
|
+
// Add horizontal rule after sections
|
|
389
|
+
.replace(/^(#{1,3}.*)/gm, '$1\n\n---')
|
|
390
|
+
// Ensure proper spacing for lists
|
|
391
|
+
.replace(/^(\s*[-*•]\s.+)$/gm, '\n$1')
|
|
392
|
+
// Convert plain URLs to markdown links
|
|
393
|
+
.replace(/(https?:\/\/[^\s]+)/g, '[$1]($1)');
|
|
317
394
|
}
|
|
318
395
|
// Return the analysis result
|
|
319
396
|
return {
|
|
@@ -325,9 +402,7 @@ export async function handleMultiImageAnalysis(request, openai, defaultModel) {
|
|
|
325
402
|
],
|
|
326
403
|
metadata: {
|
|
327
404
|
model: completion.model,
|
|
328
|
-
usage: completion.usage
|
|
329
|
-
successful_images: successfulImages.length,
|
|
330
|
-
failed_images: failedImages.length
|
|
405
|
+
usage: completion.usage
|
|
331
406
|
}
|
|
332
407
|
};
|
|
333
408
|
}
|
|
@@ -340,13 +415,13 @@ export async function handleMultiImageAnalysis(request, openai, defaultModel) {
|
|
|
340
415
|
content: [
|
|
341
416
|
{
|
|
342
417
|
type: 'text',
|
|
343
|
-
text: `Error analyzing images: ${error
|
|
418
|
+
text: `Error analyzing images: ${error.message}`,
|
|
344
419
|
},
|
|
345
420
|
],
|
|
346
421
|
isError: true,
|
|
347
422
|
metadata: {
|
|
348
|
-
error_type: error
|
|
349
|
-
error_message: error
|
|
423
|
+
error_type: error.constructor.name,
|
|
424
|
+
error_message: error.message
|
|
350
425
|
}
|
|
351
426
|
};
|
|
352
427
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-image-analysis.js","sourceRoot":"","sources":["../../src/tool-handlers/multi-image-analysis.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multi-image-analysis.js","sourceRoot":"","sources":["../../src/tool-handlers/multi-image-analysis.ts"],"names":[],"mappings":"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"}
|
package/dist/tool-handlers.d.ts
CHANGED
|
@@ -7,4 +7,8 @@ export declare class ToolHandlers {
|
|
|
7
7
|
private defaultModel?;
|
|
8
8
|
constructor(server: Server, apiKey: string, defaultModel?: string);
|
|
9
9
|
private setupToolHandlers;
|
|
10
|
+
/**
|
|
11
|
+
* Get the default model configured for this server
|
|
12
|
+
*/
|
|
13
|
+
getDefaultModel(): string | undefined;
|
|
10
14
|
}
|
package/dist/tool-handlers.js
CHANGED
|
@@ -119,7 +119,7 @@ export class ToolHandlers {
|
|
|
119
119
|
properties: {
|
|
120
120
|
image_path: {
|
|
121
121
|
type: 'string',
|
|
122
|
-
description: 'Path to the image file to analyze (
|
|
122
|
+
description: 'Path to the image file to analyze (can be an absolute file path, URL, or base64 data URL starting with "data:")',
|
|
123
123
|
},
|
|
124
124
|
question: {
|
|
125
125
|
type: 'string',
|
|
@@ -148,7 +148,7 @@ export class ToolHandlers {
|
|
|
148
148
|
properties: {
|
|
149
149
|
url: {
|
|
150
150
|
type: 'string',
|
|
151
|
-
description: 'URL or data URL of the image (use
|
|
151
|
+
description: 'URL or data URL of the image (use http(s):// for web images, absolute file paths for local files, or data:image/xxx;base64,... for base64 encoded images)',
|
|
152
152
|
},
|
|
153
153
|
alt: {
|
|
154
154
|
type: 'string',
|
|
@@ -312,5 +312,11 @@ export class ToolHandlers {
|
|
|
312
312
|
}
|
|
313
313
|
});
|
|
314
314
|
}
|
|
315
|
+
/**
|
|
316
|
+
* Get the default model configured for this server
|
|
317
|
+
*/
|
|
318
|
+
getDefaultModel() {
|
|
319
|
+
return this.defaultModel;
|
|
320
|
+
}
|
|
315
321
|
}
|
|
316
322
|
//# sourceMappingURL=tool-handlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../src/tool-handlers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../src/tool-handlers.ts"],"names":[],"mappings":"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"}
|