🎨 MCP integration for DreamTail (SDXL on Jetson Orin) - dreamtail_generate: Create images with prompts - dreamtail_get_info: Get last generated image path - Inline display support for Claude Desktop - Configurable JPEG quality and download directory Built with love for the hardware dragon 🦊
11 KiB
Executable File
🎨 DreamTail MCP Server
Model Context Protocol (MCP) server for integrating DreamTail SDXL image generation with Claude Desktop.
Overview
This MCP server exposes DreamTail's Stable Diffusion XL image generation capabilities to Claude Desktop through a single, simple tool: dreamtail_generate().
Features:
- 🎨 Generate high-quality 1024x1024 images using SDXL
- 🖼️ Inline image display in Claude Desktop (new!)
- ⏱️ Automatic job submission and polling (no manual checking)
- 💾 Automatic download to local folder (configurable)
- 🗜️ Smart format conversion with adaptive compression for 1MB limit
- 🔄 Built-in progress tracking and timeout handling
- 💬 Natural language prompts via Claude
- ⚡ Powered by Jetson AGX Orin GPU
Prerequisites
- DreamTail service running on bigorin:8765
- Python 3.8+ installed
- Claude Desktop installed
Installation
1. Install Dependencies
cd /home/alex/Projects/dreamtail-mcp
pip install -r requirements.txt
Or using uv (recommended):
uv pip install -r requirements.txt
2. Make Script Executable
chmod +x dreamtail_mcp.py
3. Test the Server Locally
# Test that the server starts without errors
python3 dreamtail_mcp.py
# Press Ctrl+C to stop
Claude Desktop Configuration
Step 1: Locate Configuration File
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Or use Claude Desktop:
- Open Claude Desktop
- Go to: Settings → Developer → "Edit Config"
Step 2: Add DreamTail MCP Server
Add this configuration to your claude_desktop_config.json:
{
"mcpServers": {
"dreamtail": {
"command": "python3",
"args": [
"/home/alex/Projects/dreamtail-mcp/dreamtail_mcp.py"
],
"env": {
"DREAMTAIL_BASE_URL": "http://192.168.50.30:8765",
"DREAMTAIL_DOWNLOAD_DIR": "/Users/yourname/Pictures/dreamtail",
"DREAMTAIL_FORMAT": "jpeg",
"DREAMTAIL_JPEG_QUALITY": "95",
"DREAMTAIL_INLINE_DISPLAY": "true",
"DREAMTAIL_INLINE_QUALITY": "85"
}
}
}
}
Important notes:
- Use the absolute path to
dreamtail_mcp.py - Use the IP address for
DREAMTAIL_BASE_URLinstead of hostname (e.g.,192.168.50.30:8765instead ofbigorin:8765) - Set
DREAMTAIL_DOWNLOAD_DIRto your preferred download location (defaults to~/dreamtail_images) DREAMTAIL_FORMAToptions:"jpeg"(default),"png", or"both"- for saved filesDREAMTAIL_JPEG_QUALITY: 1-100 (default: 95) - quality for saved filesDREAMTAIL_INLINE_DISPLAY:"true"(default) or"false"- enable inline image display in Claude DesktopDREAMTAIL_INLINE_QUALITY: 1-100 (default: 85) - JPEG quality for inline display (lower = smaller file for 1MB limit)- If you have other MCP servers configured, add the "dreamtail" entry alongside them
Step 3: Restart Claude Desktop
You MUST completely quit and restart Claude Desktop for the changes to take effect:
macOS:
# Quit Claude Desktop completely
# Then reopen from Applications
Step 4: Verify Installation
- Open Claude Desktop
- Look for the 🔨 (hammer) icon in the bottom-right corner of the chat input
- Click it to see available tools
- You should see "DreamTail Image Generator" with the
dreamtail_generatetool
Usage
Once configured, you can ask Claude to generate images naturally:
Example Prompts
Basic generation:
Generate an image of a serene mountain landscape at sunset
With negative prompt:
Create an image of a cat wearing a wizard hat, but avoid any blurry or
low-quality elements
Custom dimensions:
Generate a 512x512 image of a futuristic cityscape
More inference steps for quality:
Create a highly detailed portrait of a robot, using 50 inference steps
What Claude Will Do
- Parse your natural language request
- Call
dreamtail_generate()with appropriate parameters - Wait ~45-60 seconds while the image generates
- Display the image inline in the chat (when enabled)
- Automatically save full-resolution version to your local folder
Response Format
With inline display enabled (default):
Claude will show the generated image directly in the conversation! No need to open files or URLs - the image appears immediately for analysis and discussion.
The image displayed inline is:
- Compressed JPEG at quality 85 (or lower if needed to fit 1MB limit)
- May be slightly resized if the original is too large
- Optimized for fast loading while maintaining visual quality
Full-resolution files are saved to disk:
- Location:
~/dreamtail_images/{job_id}.jpg(and.pngif configured) - Quality: Your configured JPEG quality (default 95) or original PNG
- Use these for high-quality archival or further editing
With inline display disabled:
Claude will provide a text message:
Image generated successfully!
Saved to: /Users/yourname/Pictures/dreamtail/{job_id}.jpg
You can then open the file directly from your local filesystem.
Tool Reference
dreamtail_generate()
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
prompt |
string | required | Text description of image to generate |
negative_prompt |
string | None | What to avoid in the image (optional) |
width |
integer | 1024 | Image width (must be multiple of 8) |
height |
integer | 1024 | Image height (must be multiple of 8) |
num_inference_steps |
integer | 30 | Denoising steps (20-50, higher = better quality but slower) |
client_id |
string | "claude" | Client identifier |
Returns:
{
"status": "completed", # or "failed", "timeout", "error"
"job_id": "uuid",
"image_url": "http://192.168.50.30:8765/result/{job_id}",
"local_paths": ["/path/to/download/dir/{job_id}.jpg"], # List of saved files
"progress": 100,
"message": "Image generated successfully! Saved to: /path/to/download/dir/{job_id}.jpg"
}
Notes:
local_pathscontains 1 file (JPEG or PNG) or 2 files (whenDREAMTAIL_FORMAT="both")- JPEG files are optimized and ~10x smaller than PNG with negligible quality loss at 95%
Generation Time:
- Typical: ~45-60 seconds for 1024x1024 @ 30 steps
- Fast: ~30-40 seconds for 20 steps or 512x512
- High quality: ~60-90 seconds for 50 steps
Troubleshooting
Tool Not Appearing in Claude Desktop
- Check config path: Ensure you're editing the correct config file
- Verify absolute path: Must be absolute, not relative (e.g.,
/home/alex/...not~/...) - Restart Claude: Completely quit and reopen Claude Desktop
- Check logs: Look for errors in Claude Desktop's logs
"Failed to connect to DreamTail"
-
Check DreamTail is running:
curl http://bigorin:8765/health -
Verify network access: Ensure your machine can reach bigorin:8765
-
Update config: Check
DREAMTAIL_BASE_URLin Claude config
"Generation exceeded timeout"
- Normal generation takes 45-60 seconds
- If you get timeouts, DreamTail might be overloaded or having issues
- Check DreamTail logs:
ssh bigorin "sudo docker logs dreamtail"
Import Errors
# Reinstall dependencies
cd /home/alex/Projects/dreamtail-mcp
pip install --upgrade -r requirements.txt
Advanced Configuration
Inline Display Options
Control how images are displayed in Claude Desktop:
"env": {
"DREAMTAIL_INLINE_DISPLAY": "true",
"DREAMTAIL_INLINE_QUALITY": "85"
}
Options:
DREAMTAIL_INLINE_DISPLAY:"true"(default) or"false""true": Images display inline in Claude Desktop (recommended)"false": Return text message with file path only
DREAMTAIL_INLINE_QUALITY: 50-95 (default: 85)- JPEG compression quality for inline display
- Lower values = smaller files (required for 1MB limit)
- 85: Good balance of quality and size (~150-300KB)
- 70-75: More aggressive compression for large images
- Will automatically reduce if image still exceeds 1MB
Why inline quality is lower than saved quality:
- Claude Desktop has a 1MB limit for tool responses
- Images must be compressed to fit this limit
- Full-resolution images are always saved to disk at your configured quality
- You get the best of both worlds: instant viewing + high-quality archives
Image Format Options
Control saved file format in your Claude Desktop config:
"env": {
"DREAMTAIL_BASE_URL": "http://192.168.50.30:8765",
"DREAMTAIL_DOWNLOAD_DIR": "/Users/yourname/Pictures/dreamtail",
"DREAMTAIL_FORMAT": "jpeg",
"DREAMTAIL_JPEG_QUALITY": "95"
}
Format Options:
"jpeg"(default): Save as JPEG at specified quality- Quality 95: Visually lossless, ~10x smaller than PNG
- Quality 85: Very good, ~15x smaller than PNG
- Quality 75: Good for web, ~20x smaller than PNG
"png": Save as PNG (lossless, ~2-5MB per image)"both": Save both JPEG and PNG versions
File Size Comparison (1024x1024):
- PNG: ~2-5MB
- JPEG Q95: ~200-500KB (recommended)
- JPEG Q85: ~150-300KB
- JPEG Q75: ~100-200KB
Custom Download Directory
Tip: Use an absolute path, not ~. For example:
- ✅
/Users/alex/Pictures/dreamtail - ✅
/home/alex/dreamtail_images - ❌
~/Pictures/dreamtail(may not expand correctly in Claude Desktop)
If not specified, images will be saved to ~/dreamtail_images by default.
Custom Timeout
Edit dreamtail_mcp.py and change:
DEFAULT_TIMEOUT = 180 # 3 minutes instead of 2
Different DreamTail Instance
In Claude Desktop config:
"env": {
"DREAMTAIL_BASE_URL": "http://192.168.50.30:8765"
}
Using uv (Python Package Manager)
In Claude Desktop config:
{
"mcpServers": {
"dreamtail": {
"command": "uv",
"args": [
"--directory",
"/home/alex/Projects/dreamtail-mcp",
"run",
"dreamtail_mcp.py"
],
"env": {
"DREAMTAIL_BASE_URL": "http://bigorin:8765"
}
}
}
}
Architecture
┌─────────────────┐
│ Claude Desktop │
└────────┬────────┘
│ stdio (MCP)
▼
┌─────────────────┐
│ dreamtail_mcp │ (this server)
└────────┬────────┘
│ HTTP REST
▼
┌─────────────────┐
│ DreamTail │ (bigorin:8765)
│ SDXL Service │
└─────────────────┘
Flow:
- User asks Claude to generate an image
- Claude calls
dreamtail_generate()via MCP - MCP server submits job to DreamTail API
- MCP server polls status every 3 seconds
- When complete, downloads image to local folder
- Claude shows the user the local file path
Related Projects
- DreamTail: SDXL image generation service (../dreamtail)
- Lyra: AI assistant ecosystem
- Model Context Protocol: https://modelcontextprotocol.io
License
Part of the Lyra project ecosystem.
Built with ❤️ for Claude Desktop integration