Fal.ai MCP Server
# šØ Fal.ai MCP Server
[](https://github.com/raveenb/fal-mcp-server/actions/workflows/ci.yml)
[](https://github.com/raveenb/fal-mcp-server/actions/workflows/docker.yml)
[](https://modelcontextprotocol.io)
[](https://github.com/raveenb/fal-mcp-server/releases)
[](https://pypi.org/project/fal-mcp-server/)
[](https://github.com/raveenb/fal-mcp-server/pkgs/container/fal-mcp-server)
[](https://www.python.org)
[](LICENSE)
A Model Context Protocol (MCP) server that enables Claude Desktop (and other MCP clients) to generate images, videos, music, and audio using [Fal.ai](https://fal.ai) models.
<a href="https://glama.ai/mcp/servers/@raveenb/fal-mcp-server">
<img width="380" height="200" src="https://glama.ai/mcp/servers/@raveenb/fal-mcp-server/badge" alt="Fal.ai Server MCP server" />
</a>
## ⨠Features
### š Performance
- **Native Async API** - Uses fal_client.run_async() for optimal performance
- **Queue Support** - Long-running tasks (video/music) use queue API with progress updates
- **Non-blocking** - All operations are truly asynchronous
### š Transport Modes (New!)
- **STDIO** - Traditional Model Context Protocol communication
- **HTTP/SSE** - Web-based access via Server-Sent Events
- **Dual Mode** - Run both transports simultaneously
### šØ Media Generation (18 Tools)
**Image Generation:**
- š¼ļø **generate_image** - Create images from text prompts (Flux, SDXL, etc.)
- šÆ **generate_image_structured** - Fine-grained control over composition, lighting, subjects
- š **generate_image_from_image** - Transform existing images with style transfer
**Image Editing:**
- āļø **remove_background** - Remove backgrounds from images (transparent PNG)
- š **upscale_image** - Upscale images 2x or 4x while preserving quality
- āļø **edit_image** - Edit images using natural language instructions
- š **inpaint_image** - Edit specific regions using masks
- š **resize_image** - Smart resize for social media (Instagram, YouTube, TikTok, etc.)
- š·ļø **compose_images** - Overlay images (watermarks, logos) with precise positioning
**Video Tools:**
- š¬ **generate_video** - Text-to-video and image-to-video generation
- š¹ **generate_video_from_image** - Animate images into videos
- š **generate_video_from_video** - Video restyling and motion transfer
**Audio Tools:**
- šµ **generate_music** - Create instrumental music or songs with vocals
**Utility Tools:**
- š **list_models** - Discover 600+ available models with smart filtering
- š” **recommend_model** - AI-powered model recommendations for your task
- š° **get_pricing** - Check costs before generating content
- š **get_usage** - View spending history and usage stats
- ā¬ļø **upload_file** - Upload local files for use with generation tools
### š Dynamic Model Discovery (New!)
- **600+ Models** - Access all models available on Fal.ai platform
- **Auto-Discovery** - Models are fetched dynamically from the Fal.ai API
- **Smart Caching** - TTL-based cache for optimal performance
- **Flexible Input** - Use full model IDs or friendly aliases
## š Quick Start
### Prerequisites
- Python 3.10 or higher
- [Fal.ai API key](https://fal.ai) (free tier available)
- Claude Desktop (or any MCP-compatible client)
### Installation
#### Option 0: Claude Code Plugin (Simplest for Claude Code Users) š
If you're using [Claude Code](https://claude.ai/code), install directly via the plugin system:
```bash
# Add the Luminary Lane Tools marketplace
/plugin marketplace add raveenb/fal-mcp-server
# Install the fal-ai plugin
/plugin install fal-ai@luminary-lane-tools
```
Or install directly without adding the marketplace:
```bash
/plugin install fal-ai@raveenb/fal-mcp-server
```
> **Note:** You'll need to set `FAL_KEY` in your environment before using the plugin.
#### Option 1: uvx (Recommended - Zero Install) ā”
Run directly without installation using [uv](https://docs.astral.sh/uv/):
```bash
# Run the MCP server directly
uvx --from fal-mcp-server fal-mcp
# Or with specific version
uvx --from fal-mcp-server==1.4.0 fal-mcp
```
**Claude Desktop Configuration for uvx:**
```json
{
"mcpServers": {
"fal-ai": {
"command": "uvx",
"args": ["--from", "fal-mcp-server", "fal-mcp"],
"env": {
"FAL_KEY": "your-fal-api-key"
}
}
}
}
```
> **Note:** Install uv first: `curl -LsSf https://astral.sh/uv/install.sh | sh`
#### Option 2: Docker (Recommended for Production) š³
Official Docker image available on GitHub Container Registry.
**Step 1: Start the Docker container**
```bash
# Pull and run with your API key
docker run -d \
--name fal-mcp \
-e FAL_KEY=your-api-key \
-p 8080:8080 \
ghcr.io/raveenb/fal-mcp-server:latest
# Verify it's running
docker logs fal-mcp
```
**Step 2: Configure Claude Desktop to connect**
Add to your Claude Desktop config file:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"fal-ai": {
"command": "npx",
"args": ["mcp-remote", "http://localhost:8080/sse"]
}
}
}
```
> **Note:** This uses [mcp-remote](https://www.npmjs.com/package/mcp-remote) to connect to the HTTP/SSE endpoint. Alternatively, if you have `curl` available: `"command": "curl", "args": ["-N", "http://localhost:8080/sse"]`
**Step 3: Restart Claude Desktop**
The fal-ai tools should now be available.
**Docker Environment Variables:**
| Variable | Default | Description |
|----------|---------|-------------|
| `FAL_KEY` | (required) | Your Fal.ai API key |
| `FAL_MCP_TRANSPORT` | `http` | Transport mode: `http`, `stdio`, or `dual` |
| `FAL_MCP_HOST` | `0.0.0.0` | Host to bind the server to |
| `FAL_MCP_PORT` | `8080` | Port for the HTTP server |
**Using Docker Compose:**
```bash
curl -O https://raw.githubusercontent.com/raveenb/fal-mcp-server/main/docker-compose.yml
echo "FAL_KEY=your-api-key" > .env
docker-compose up -d
```
**ā ļø File Upload with Docker:**
The `upload_file` tool requires volume mounts to access host files:
```bash
docker run -d -p 8080:8080 \
-e FAL_KEY="${FAL_KEY}" \
-e FAL_MCP_TRANSPORT=http \
-v ${HOME}/Downloads:/downloads:ro \
-v ${HOME}/Pictures:/pictures:ro \
ghcr.io/raveenb/fal-mcp-server:latest
```
Then use container paths like `/downloads/image.png` instead of host paths.
| Feature | stdio (uvx) | Docker (HTTP/SSE) |
|---------|:-----------:|:-----------------:|
| `upload_file` | ā
Full filesystem | ā ļø Needs volume mounts |
| Security | Runs as user | Sandboxed container |
#### Option 3: Install from PyPI
```bash
pip install fal-mcp-server
```
Or with uv:
```bash
uv pip install fal-mcp-server
```
#### Option 4: Install from source
```bash
git clone https://github.com/raveenb/fal-mcp-server.git
cd fal-mcp-server
pip install -e .
```
### Configuration
1. Get your Fal.ai API key from [fal.ai](https://fal.ai)
2. Configure Claude Desktop by adding to:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
#### For PyPI/pip Installation:
```json
{
"mcpServers": {
"fal-ai": {
"command": "fal-mcp",
"env": {
"FAL_KEY": "your-fal-api-key"
}
}
}
}
```
> **Note:** For Docker configuration, see [Option 2: Docker](#option-2-docker-recommended-for-production-) above.
#### For Source Installation:
```json
{
"mcpServers": {
"fal-ai": {
"command": "python",
"args": ["/path/to/fal-mcp-server/src/fal_mcp_server/server.py"],
"env": {
"FAL_KEY": "your-fal-api-key"
}
}
}
}
```
3. Restart Claude Desktop
## š¬ Usage
### With Claude Desktop
Once configured, ask Claude to:
- "Generate an image of a sunset"
- "Create a video from this image"
- "Generate 30 seconds of ambient music"
- "Convert this text to speech"
- "Transcribe this audio file"
### Discovering Available Models
Use the `list_models` tool to discover available models:
- "What image models are available?"
- "List video generation models"
- "Search for flux models"
### Using Any Fal.ai Model
You can use any model from the Fal.ai platform:
```
# Using a friendly alias (backward compatible)
"Generate an image with flux_schnell"
# Using a full model ID (new capability)
"Generate an image using fal-ai/flux-pro/v1.1-ultra"
"Create a video with fal-ai/kling-video/v1.5/pro"
```
### HTTP/SSE Transport (New!)
Run the server with HTTP transport for web-based access:
```bash
# Using Docker (recommended)
docker run -d -e FAL_KEY=your-key -p 8080:8080 ghcr.io/raveenb/fal-mcp-server:latest
# Using pip installation
fal-mcp-http --host 0.0.0.0 --port 8000
# Or dual mode (STDIO + HTTP)
fal-mcp-dual --transport dual --port 8000
```
Connect from web clients via Server-Sent Events:
- SSE endpoint: `http://localhost:8080/sse` (Docker) or `http://localhost:8000/sse` (pip)
- Message endpoint: `POST http://localhost:8080/messages/`
See [Docker Documentation](docs/docker.md) and [HTTP Transport Documentation](docs/HTTP_TRANSPORT.md) for details.
## š¦ Supported Models
This server supports **600+ models** from the Fal.ai platform through dynamic discovery. Use the `list_models` tool to explore available models, or use any model ID directly.
### Popular Aliases (Quick Reference)
These friendly aliases are always available for commonly used models:
| Alias | Model ID | Type |
|-------|----------|------|
| `flux_schnell` | `fal-ai/flux/schnell` | Image |
| `flux_dev` | `fal-ai/flux/dev` | Image |
| `flux_pro` | `fal-ai/flux-pro` | Image |
| `sdxl` | `fal-ai/fast-sdxl` | Image |
| `stable_diffusion` | `fal-ai/stable-diffusion-v3-medium` | Image |
| `svd` | `fal-ai/stable-video-diffusion` | Video |
| `animatediff` | `fal-ai/fast-animatediff` | Video |
| `kling` | `fal-ai/kling-video` | Video |
| `musicgen` | `fal-ai/musicgen-medium` | Audio |
| `musicgen_large` | `fal-ai/musicgen-large` | Audio |
| `bark` | `fal-ai/bark` | Audio |
| `whisper` | `fal-ai/whisper` | Audio |
### Using Full Model IDs
You can also use any model directly by its full ID:
```python
# Examples of full model IDs
"fal-ai/flux-pro/v1.1-ultra" # Latest Flux Pro
"fal-ai/kling-video/v1.5/pro" # Kling Video Pro
"fal-ai/hunyuan-video" # Hunyuan Video
"fal-ai/minimax-video" # MiniMax Video
```
Use `list_models` with category filters to discover more:
- `list_models(category="image")` - All image generation models
- `list_models(category="video")` - All video generation models
- `list_models(category="audio")` - All audio models
- `list_models(search="flux")` - Search for specific models
## š Documentation
| Guide | Description |
|-------|-------------|
| [Installation Guide](docs/installation.md) | Detailed setup instructions for all platforms |
| [API Reference](docs/api.md) | Complete tool documentation with parameters |
| [Examples](docs/examples.md) | Usage examples for image, video, and audio generation |
| [Docker Guide](docs/docker.md) | Container deployment and configuration |
| [HTTP Transport](docs/HTTP_TRANSPORT.md) | Web-based SSE transport setup |
| [Local Testing](docs/LOCAL_TESTING.md) | Running CI locally with `act` |
š **Full documentation site**: [raveenb.github.io/fal-mcp-server](https://raveenb.github.io/fal-mcp-server/)
### š Claude Code Plugin Marketplace
This project is part of the **Luminary Lane Tools** marketplace for Claude Code plugins.
**Add the marketplace:**
```bash
/plugin marketplace add raveenb/fal-mcp-server
```
**Available plugins:**
| Plugin | Description |
|--------|-------------|
| `fal-ai` | Generate images, videos, and music using 600+ Fal.ai models |
*More plugins coming soon!*
## š§ Troubleshooting
### Common Errors
#### FAL_KEY not set
```
Error: FAL_KEY environment variable is required
```
**Solution:** Set your Fal.ai API key:
```bash
export FAL_KEY="your-api-key"
```
#### Model not found
```
Error: Model 'xyz' not found
```
**Solution:** Use `list_models` to discover available models, or check the model ID spelling.
#### File not found (Docker)
```
Error: File not found: /Users/username/image.png
```
**Solution:** When using Docker, mount the directory as a volume. See [File Upload with Docker](#-file-upload-with-docker) above.
#### Timeout on video/music generation
```
Error: Generation timed out after 300s
```
**Solution:** Video and music generation can take several minutes. This is normal for high-quality models. Try:
- Using a faster model variant (e.g., `schnell` instead of `pro`)
- Reducing duration or resolution
#### Rate limiting
```
Error: Rate limit exceeded
```
**Solution:** Wait a few minutes and retry. Consider upgrading your Fal.ai plan for higher limits.
### Debug Mode
Enable verbose logging for troubleshooting:
```bash
# Set debug environment variable
export FAL_MCP_DEBUG=true
# Run the server
fal-mcp
```
### Reporting Issues
If you encounter a bug or unexpected behavior:
1. **Check existing issues:** [GitHub Issues](https://github.com/raveenb/fal-mcp-server/issues)
2. **Gather information:**
- Error message (full text)
- Steps to reproduce
- Model ID used
- Environment (OS, Python version, transport mode)
3. **Open a new issue** with:
```
**Error:** [paste error message]
**Steps to reproduce:** [what you did]
**Model:** [model ID if applicable]
**Environment:** [OS, Python version, Docker/uvx/pip]
```
4. **Include logs** if available (with sensitive data removed)
[š Open an Issue](https://github.com/raveenb/fal-mcp-server/issues/new)
## š¤ Contributing
Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
### Local Development
We support local CI testing with `act`:
```bash
# Quick setup
make ci-local # Run CI locally before pushing
# See detailed guide
cat docs/LOCAL_TESTING.md
```
## š License
MIT License - see [LICENSE](LICENSE) file for details.
## š Acknowledgments
- [Fal.ai](https://fal.ai) for providing the AI models
- [Anthropic](https://anthropic.com) for the MCP specification
## Hosted deployment
A hosted deployment is available on [Fronteir AI](https://fronteir.ai/mcp/raveenb-fal-mcp-server).
TDQS
Scored across 18 tools
Most tools have distinct purposes, but there is some overlap between edit_image, inpaint_image, and generate_image_from_image, which could cause confusion as they all involve modifying existing images. However, descriptions help clarify their specific use cases, and other tools like generate_music or get_pricing are clearly separate.
Tool names follow a consistent verb_noun pattern throughout, such as generate_image, edit_image, and list_models. All tools use snake_case, and the naming is predictable, making it easy for agents to understand and navigate the toolset.
With 18 tools, the count is slightly high but reasonable for a comprehensive AI media generation server covering images, video, audio, and utilities. It includes core operations and supporting tools, though it may feel heavy compared to simpler servers.
The toolset provides complete coverage for the domain of AI media generation and management. It includes generation, editing, transformation, and utility tools (e.g., upload_file, get_pricing, list_models), with no obvious gaps that would hinder agent workflows.