31 lines
964 B
Python
31 lines
964 B
Python
import base64
|
|
import mimetypes
|
|
import logging
|
|
from pathlib import Path
|
|
from typing import Any, Dict
|
|
from tools.utils import ToolError
|
|
|
|
logger = logging.getLogger("MooseCP")
|
|
|
|
async def handle(args: Dict[str, Any]):
|
|
"""
|
|
Reads an image file from disk and returns it as a base64 encoded string
|
|
within an MCP ImageContent object.
|
|
"""
|
|
path_str = args.get("path")
|
|
if not path_str:
|
|
raise ToolError("Missing path argument")
|
|
|
|
path = Path(path_str)
|
|
|
|
# Validate that the file has an image-like MIME type
|
|
mime_type, _ = mimetypes.guess_type(path_str)
|
|
if not mime_type or not mime_type.startswith("image/"):
|
|
raise ToolError(f"File {path_str} is not a supported image format.")
|
|
|
|
try:
|
|
data = base64.b64encode(path.read_bytes()).decode("utf-8")
|
|
return {"type": "image", "data": data, "mimeType": mime_type}
|
|
except Exception as e:
|
|
raise ToolError(f"Error reading image: {str(e)}")
|