Skip to main content
Glama
README.md
# mcp-fal

An MCP (Model Context Protocol) server that exposes [Fal.ai](https://fal.ai) generative media models as tools callable by Claude and other MCP-compatible clients.

## Features

| Tool | Description |
|---|---|
| `generate_image` | Generate images from a text prompt using FLUX, Stable Diffusion, and other models |
| `generate_video` | Generate videos via text-to-video or image-to-video using MiniMax, HunyuanVideo, and more |
| `run_model` | Run **any** Fal.ai model by ID with arbitrary input — access to 1000+ models |

---

## Installation

```bash
# Clone the repository
git clone https://github.com/mohsenmousavieyeline/mcp-fal.git
cd mcp-fal

# Install dependencies
npm install

# Build (compiles TypeScript → dist/)
npm run build
```

---

## API Key

Get your Fal.ai API key at **https://fal.ai/dashboard/keys**.

The server resolves the API key in this priority order:

1. **CLI argument** — `--api-key <your-key>`
2. **Environment variable** — `FAL_KEY=<your-key>`

---

## Configuration

### Claude Desktop

Add the server to your Claude Desktop config file:

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`  
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

**Option A — API key as CLI argument (recommended):**
```json
{
  "mcpServers": {
    "fal-ai": {
      "command": "node",
      "args": [
        "/absolute/path/to/mcp-fal/dist/index.js",
        "--api-key",
        "fal_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      ]
    }
  }
}
```

**Option B — API key as environment variable:**
```json
{
  "mcpServers": {
    "fal-ai": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-fal/dist/index.js"],
      "env": {
        "FAL_KEY": "fal_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}
```

### Claude Code (CLI)

```bash
claude mcp add fal-ai -- node /absolute/path/to/mcp-fal/dist/index.js --api-key fal_xxxx
```

Or with an environment variable:
```bash
FAL_KEY=fal_xxxx claude mcp add fal-ai -- node /absolute/path/to/mcp-fal/dist/index.js
```

### npx (no installation)

If published to npm:
```json
{
  "mcpServers": {
    "fal-ai": {
      "command": "npx",
      "args": ["mcp-fal", "--api-key", "fal_xxxx"]
    }
  }
}
```

---

## Tool Reference

### `generate_image`

Generate one or more images from a text prompt.

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `prompt` | string | ✅ | — | Text description of the image |
| `model_id` | string | — | `fal-ai/flux/dev` | Fal.ai model ID |
| `image_size` | string | — | `landscape_4_3` | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` |
| `num_images` | integer | — | `1` | Number of images (1–4) |
| `negative_prompt` | string | — | — | What to exclude from the image |
| `seed` | integer | — | — | Seed for reproducible results |

**Example prompt to Claude:**
> "Generate an image of a misty mountain landscape at dawn using FLUX schnell"

---

### `generate_video`

Generate a video from text or an input image.

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `prompt` | string | ✅ | — | Text description of the video |
| `model_id` | string | — | Auto-selected | Fal.ai model ID |
| `image_url` | string | — | — | Input image URL (triggers image-to-video) |
| `duration` | number | — | — | Desired duration in seconds |

**Default models:**
- With `image_url`: `fal-ai/minimax-video/image-to-video`
- Without `image_url`: `fal-ai/minimax-video/text-to-video`

> ⚠️ Video generation typically takes 1–5 minutes.

**Example prompt to Claude:**
> "Generate a 5-second video of ocean waves crashing on a rocky shore"

---

### `run_model`

Run any Fal.ai model with custom parameters.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `model_id` | string | ✅ | Fal.ai model ID (e.g. `fal-ai/imageutils/rembg`) |
| `input` | object | ✅ | Model-specific input parameters |

Browse available models at **https://fal.ai/models**.

**Example prompt to Claude:**
> "Use the run_model tool with fal-ai/imageutils/rembg to remove the background from this image: https://example.com/photo.jpg"

---

## Development

```bash
# Run in development mode (no build step required)
FAL_KEY=your_key npm run dev

# Build for production
npm run build

# Run the built server
FAL_KEY=your_key npm start
```

---

## Popular Fal.ai Models

| Category | Model ID | Description |
|---|---|---|
| Image | `fal-ai/flux/dev` | FLUX.1 Dev — high quality |
| Image | `fal-ai/flux/schnell` | FLUX.1 Schnell — fast |
| Image | `fal-ai/stable-diffusion-v3-medium` | Stable Diffusion 3 |
| Video | `fal-ai/minimax-video/text-to-video` | MiniMax text-to-video |
| Video | `fal-ai/minimax-video/image-to-video` | MiniMax image-to-video |
| Video | `fal-ai/hunyuan-video` | HunyuanVideo |
| Video | `fal-ai/mochi-v1` | Mochi 1 |
| Utility | `fal-ai/imageutils/rembg` | Background removal |

---

## License

MIT

TDQS

A4.2/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a clearly distinct domain: image generation, video generation, and a catch-all for any other model. There is no ambiguity or overlap between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (generate_image, generate_video, run_model), making them predictable and easy to understand.

Tool Count5/5

Three tools is an ideal number for this server: two specialized tools for the most common tasks and one flexible tool that covers the remaining 1000+ models. The scope is well-scoped without being overwhelming.

Completeness4/5

The specialized tools handle the primary use cases (image and video generation), and run_model fills any gaps. However, dedicated tools for other popular model categories (e.g., audio) could improve discoverability, though run_model covers them.

Maintenance

ActivityInactive
ResponsivenessNo issues