Skip to main content
Glama

MCP Image Recognition Server

image.py2.71 kB
import base64 import io import logging from pathlib import Path from typing import Tuple from PIL import Image, UnidentifiedImageError logger = logging.getLogger(__name__) def image_to_base64(image_path: str) -> Tuple[str, str]: """Convert an image file to base64 string and detect its MIME type. Args: image_path: Path to the image file Returns: Tuple of (base64_string, mime_type) Raises: FileNotFoundError: If image file doesn't exist ValueError: If file is not a valid image """ path = Path(image_path) if not path.exists(): logger.error(f"Image file not found: {image_path}") raise FileNotFoundError(f"Image file not found: {image_path}") try: # Try to open and validate the image with Image.open(path) as img: # Get image format and convert to MIME type format_to_mime = { "JPEG": "image/jpeg", "PNG": "image/png", "GIF": "image/gif", "WEBP": "image/webp", } mime_type = format_to_mime.get(img.format, "application/octet-stream") logger.info( f"Processing image: {image_path}, format: {img.format}, size: {img.size}" ) # Convert to base64 with path.open("rb") as f: base64_data = base64.b64encode(f.read()).decode("utf-8") logger.debug(f"Base64 data length: {len(base64_data)}") return base64_data, mime_type except UnidentifiedImageError as e: logger.error(f"Invalid image format: {str(e)}") raise ValueError(f"Invalid image format: {str(e)}") except OSError as e: logger.error(f"Failed to read image file: {str(e)}") raise ValueError(f"Failed to read image file: {str(e)}") except Exception as e: logger.error(f"Unexpected error processing image: {str(e)}", exc_info=True) raise ValueError(f"Failed to process image: {str(e)}") def validate_base64_image(base64_string: str) -> bool: """Validate if a string is a valid base64-encoded image. Args: base64_string: The base64 string to validate Returns: bool: True if valid, False otherwise """ try: # Try to decode base64 image_data = base64.b64decode(base64_string) # Try to open as image with Image.open(io.BytesIO(image_data)) as img: logger.debug( f"Validated base64 image, format: {img.format}, size: {img.size}" ) return True except Exception as e: logger.warning(f"Invalid base64 image: {str(e)}") return False

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/mario-andreschak/mcp-image-recognition'

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