
Moondream
STDIOFastMCP server for Moondream AI vision model providing image analysis capabilities
FastMCP server for Moondream AI vision model providing image analysis capabilities
A FastMCP server for Moondream, an AI vision language model. This server provides image analysis capabilities including captioning, visual question answering, object detection, and visual pointing through the Model Context Protocol (MCP).
# Run without installation uvx moondream-mcp # Or specify a specific version uvx moondream-mcp==1.0.0
pip install moondream-mcp
git clone https://github.com/ColeMurray/moondream-mcp.git cd moondream-mcp pip install -e .
git clone https://github.com/ColeMurray/moondream-mcp.git cd moondream-mcp pip install -e ".[dev]"
# Using uvx (no installation needed) uvx moondream-mcp # Using pip-installed command moondream-mcp # Or run directly with Python python -m moondream_mcp.server
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "moondream": { "command": "uvx", "args": ["moondream-mcp"], "env": { "MOONDREAM_DEVICE": "auto" } } } }
{ "mcpServers": { "moondream": { "command": "moondream-mcp", "env": { "MOONDREAM_DEVICE": "auto" } } } }
The server can be configured using environment variables:
MOONDREAM_MODEL_NAME
: Model name (default: vikhyatk/moondream2
)MOONDREAM_MODEL_REVISION
: Model revision (default: 2025-01-09
)MOONDREAM_TRUST_REMOTE_CODE
: Trust remote code (default: true
)MOONDREAM_DEVICE
: Force specific device (cpu
, cuda
, mps
, or auto
)MOONDREAM_MAX_IMAGE_SIZE
: Maximum image dimensions (default: 2048x2048
)MOONDREAM_MAX_FILE_SIZE_MB
: Maximum file size in MB (default: 50
)MOONDREAM_TIMEOUT_SECONDS
: Processing timeout (default: 120
)MOONDREAM_MAX_CONCURRENT_REQUESTS
: Max concurrent requests (default: 5
)MOONDREAM_ENABLE_STREAMING
: Enable streaming for captions (default: true
)MOONDREAM_MAX_BATCH_SIZE
: Maximum batch size for batch operations (default: 10
)MOONDREAM_BATCH_CONCURRENCY
: Concurrent batch processing limit (default: 3
)MOONDREAM_ENABLE_BATCH_PROGRESS
: Enable progress reporting for batch operations (default: true
)MOONDREAM_REQUEST_TIMEOUT_SECONDS
: HTTP request timeout (default: 30
)MOONDREAM_MAX_REDIRECTS
: Maximum HTTP redirects (default: 5
)MOONDREAM_USER_AGENT
: HTTP User-Agent headercaption_image
Generate captions for images.
Parameters:
image_path
(string): Path to image file or URLlength
(string): Caption length - "short"
, "normal"
, or "detailed"
stream
(boolean): Whether to stream caption generationExample:
{ "image_path": "https://example.com/image.jpg", "length": "detailed", "stream": false }
query_image
Ask questions about images.
Parameters:
image_path
(string): Path to image file or URLquestion
(string): Question to ask about the imageExample:
{ "image_path": "/path/to/image.jpg", "question": "How many people are in this image?" }
detect_objects
Detect specific objects in images.
Parameters:
image_path
(string): Path to image file or URLobject_name
(string): Name of object to detectExample:
{ "image_path": "https://example.com/photo.jpg", "object_name": "person" }
point_objects
Get coordinates of objects in images.
Parameters:
image_path
(string): Path to image file or URLobject_name
(string): Name of object to locateExample:
{ "image_path": "/path/to/image.jpg", "object_name": "car" }
analyze_image
Multi-purpose image analysis tool.
Parameters:
image_path
(string): Path to image file or URLoperation
(string): Operation type ("caption"
, "query"
, "detect"
, "point"
)parameters
(string): JSON string with operation-specific parametersExample:
{ "image_path": "https://example.com/image.jpg", "operation": "query", "parameters": "{\"question\": \"What is the weather like?\"}" }
batch_analyze_images
Process multiple images in batch.
Parameters:
image_paths
(string): JSON array of image pathsoperation
(string): Operation to perform on all imagesparameters
(string): JSON string with operation-specific parametersExample:
{ "image_paths": "[\"image1.jpg\", \"image2.jpg\"]", "operation": "caption", "parameters": "{\"length\": \"short\"}" }
# Using the caption_image tool result = await caption_image( image_path="https://example.com/sunset.jpg", length="detailed" )
# Ask about image content result = await query_image( image_path="/path/to/family_photo.jpg", question="How many children are in this photo?" )
# Detect faces in an image result = await detect_objects( image_path="https://example.com/group_photo.jpg", object_name="face" )
# Process multiple images result = await batch_analyze_images( image_paths='["img1.jpg", "img2.jpg", "img3.jpg"]', operation="caption", parameters='{"length": "normal"}' )
The server automatically detects and optimizes for available hardware:
The server provides detailed error information:
{ "success": false, "error_message": "Image file not found: /path/to/missing.jpg", "error_code": "IMAGE_PROCESSING_ERROR", "processing_time_ms": 15.2 }
Common error codes:
MODEL_LOAD_ERROR
: Issues loading the Moondream modelIMAGE_PROCESSING_ERROR
: Problems with image files or URLsINFERENCE_ERROR
: Model inference failuresINVALID_REQUEST
: Invalid parameters or requestsbatch_analyze_images
for multiple imagesMOONDREAM_MAX_CONCURRENT_REQUESTS
based on your hardware# Check PyTorch installation python -c "import torch; print(torch.__version__)" # Check device availability python -c "import torch; print(f'CUDA: {torch.cuda.is_available()}, MPS: {torch.backends.mps.is_available()}')"
MOONDREAM_MAX_IMAGE_SIZE
MOONDREAM_MAX_CONCURRENT_REQUESTS
MOONDREAM_REQUEST_TIMEOUT_SECONDS
pytest tests/
# Format code black src/ tests/ # Sort imports isort src/ tests/ # Type checking mypy src/
This project is licensed under the MIT License. See LICENSE for details.
Note: This server requires downloading the Moondream model on first use, which may take some time depending on your internet connection.