Skip to main content
Glama
sanliunanjue

Image Processor MCP Server

by sanliunanjue

process_image_to_description

Generate text descriptions from images by analyzing visual content and specifying detail level or focus areas to extract meaningful information.

Instructions

处理图像并生成描述

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
image_urlYes图像URL
detail_levelNo描述详细程度:简洁(brief)、标准(standard)或详细(detailed)standard
focusNo描述重点,例如:物体、场景、人物、情感等

Implementation Reference

  • The main handler for the 'process_image_to_description' tool. It extracts image_url, detail_level, and focus parameters, downloads the image, constructs a descriptive prompt based on parameters, calls the processImageWithQwen helper to get the AI description, and returns the result as text content or error.
    case "process_image_to_description": { const imageUrl = String(request.params.arguments?.image_url); const detailLevel = String(request.params.arguments?.detail_level || "standard"); const focus = String(request.params.arguments?.focus || ""); if (!imageUrl) { throw new Error("图像URL是必需的"); } try { // 下载图像 const imagePath = await downloadImage(imageUrl); // 构建提示词 let prompt = "请描述这张图片"; if (detailLevel === "brief") { prompt += ",给出简洁的描述"; } else if (detailLevel === "detailed") { prompt += ",提供详细的描述,包括细节、背景和上下文"; } if (focus) { prompt += `,重点关注${focus}`; } // 处理图像 const result = await processImageWithQwen(imagePath, prompt); return { content: [{ type: "text", text: result }] }; } catch (error: any) { return { content: [{ type: "text", text: `处理图像失败: ${error.message}` }], isError: true }; } }
  • Input schema definition for the tool, specifying parameters: image_url (required), detail_level (enum with default), focus (optional). Defines validation for tool arguments.
    inputSchema: { type: "object", properties: { image_url: { type: "string", description: "图像URL" }, detail_level: { type: "string", description: "描述详细程度:简洁(brief)、标准(standard)或详细(detailed)", enum: ["brief", "standard", "detailed"], default: "standard" }, focus: { type: "string", description: "描述重点,例如:物体、场景、人物、情感等", default: "" } }, required: ["image_url"] }
  • src/index.ts:178-202 (registration)
    Tool registration in the ListToolsRequestSchema handler, defining name, description, and input schema for discovery by MCP clients.
    { name: "process_image_to_description", description: "处理图像并生成描述", inputSchema: { type: "object", properties: { image_url: { type: "string", description: "图像URL" }, detail_level: { type: "string", description: "描述详细程度:简洁(brief)、标准(standard)或详细(detailed)", enum: ["brief", "standard", "detailed"], default: "standard" }, focus: { type: "string", description: "描述重点,例如:物体、场景、人物、情感等", default: "" } }, required: ["image_url"] } }
  • Core helper function that calls the Qwen VL API: reads image to base64, sends prompt + image to API, extracts text response, cleans up temp file. Used by both image processing tools.
    async function processImageWithQwen(imagePath: string, prompt: string): Promise<string> { try { // 读取图像文件 const imageBuffer = fs.readFileSync(imagePath); const base64Image = imageBuffer.toString('base64'); // 准备请求数据 const requestData = { model: "qwen-vl-plus", input: { messages: [ { role: "user", content: [ { type: "text", text: prompt }, { type: "image", image: base64Image } ] } ] }, parameters: {} }; // 发送请求到API const response = await axios.post(API_ENDPOINT, requestData, { headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' } }); // 处理响应 if (response.data && response.data.output && response.data.output.text) { return response.data.output.text; } else { throw new Error("API响应格式不正确"); } } catch (error: any) { console.error("调用qwen2.5-vl模型API失败:", error); if (error.response) { console.error("API响应:", error.response.data); } throw new Error(`处理图像失败: ${error.message}`); } finally { // 清理临时文件 try { fs.unlinkSync(imagePath); } catch (e) { console.error("清理临时文件失败:", e); } } }
  • Helper to download image from URL to temp file using stream, generates unique filename, returns path. Used in tool handlers.
    async function downloadImage(imageUrl: string): Promise<string> { try { // 为图像生成唯一文件名 const filename = `${Date.now()}-${Math.random().toString(36).substring(2, 15)}.jpg`; const filePath = path.join(TEMP_DIR, filename); // 下载图像 const response = await axios({ method: 'GET', url: imageUrl, responseType: 'stream' }); await streamPipeline(response.data, fs.createWriteStream(filePath)); return filePath; } catch (error: any) { console.error("下载图像失败:", error); throw new Error(`下载图像失败: ${error.message}`); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sanliunanjue/image-processor-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server