ideogram-mcp-server
Version:
A FastMCP server for the Ideogram AI API.
59 lines (58 loc) • 2.68 kB
JavaScript
/**
* Describe Tool
* Image description tool implementation using FastMCP framework
*/
import { z } from 'zod';
import FormData from 'form-data';
const describeSchema = z.object({
image_file: z.string().min(1, 'Image file is required')
});
export function createDescribeTool(apiClient, fileManager) {
return {
name: 'describe',
description: 'Get detailed descriptions of images using Ideogram AI vision capabilities',
parameters: {
"~standard": {},
type: 'object',
properties: {
image_file: { type: 'string', description: 'Path to the image file to describe' }
},
required: ['image_file']
},
execute: async (args) => {
const validatedArgs = describeSchema.parse(args);
try {
// Read and validate image file
const imageResult = await fileManager.readImageFile(validatedArgs.image_file);
if (!imageResult.success || !imageResult.data) {
return `❌ Failed to read image file: ${imageResult.error}`;
}
// Create FormData for multipart upload
const formData = new FormData();
formData.append('image_file', imageResult.data, {
filename: 'image.jpg',
contentType: 'image/jpeg'
});
// Make API request with FormData - Note: describe uses /v1/describe not v3 path
const response = await apiClient.post('/describe', formData, {
'Content-Type': `multipart/form-data; boundary=${formData.getBoundary()}`
});
if (!response.success) {
return `❌ Description failed: ${response.error}`;
}
if (!response.data?.descriptions || response.data.descriptions.length === 0) {
return '❌ No description was generated. Please try with a different image.';
}
// Format response
let result = `✅ **Image Description:**\n\n`;
result += `📝 **Description**: ${response.data.descriptions[0].text}\n\n`;
result += `🔍 **Analysis**: The AI has analyzed the visual content, composition, colors, objects, and context within the image to provide this comprehensive description.\n`;
return result;
}
catch (error) {
return `❌ Unexpected error: ${error instanceof Error ? error.message : 'Unknown error occurred'}`;
}
}
};
}
export { describeSchema };