Skip to main content
Glama
README.md
# Leonardo MCP

A [Model Context Protocol](https://modelcontextprotocol.io) server that exposes
Leonardo.ai image generation as MCP tools over Streamable HTTP.

## Features

- `generate_image` — submit an image generation job to Leonardo.ai (v2 API).
- `get_generation_status` — poll a job and retrieve generated image URLs.
- Stateful Streamable HTTP transport with per-session management.
- Supports GPT Image models (quality) and Phoenix models (mode).

## Requirements

- Node.js 20+
- A Leonardo.ai API key

## Setup

```bash
npm install
```

Set the required environment variables:

```bash
export LEONARDO_API_KEY="your-api-key"
export PORT=3001   # optional, defaults to 3001
```

## Build & Run

```bash
npm run build
npm start
```

Or use the helper script (expects `LEONARDO_API_KEY` to already be exported):

```bash
./run.sh
```

The server listens on `http://0.0.0.0:3001/mcp` by default.

## MCP Client Configuration

Point your MCP client at the HTTP endpoint. Example:

```json
{
  "mcpServers": {
    "leonardo": {
      "url": "http://localhost:3001/mcp"
    }
  }
}
```

## Tools

### `generate_image`

| Parameter        | Type     | Default                     | Description                                         |
| ---------------- | -------- | --------------------------- | --------------------------------------------------- |
| `prompt`         | string   | —                           | Detailed description of the image (required).       |
| `negative_prompt`| string   | —                           | Elements to avoid.                                  |
| `model`          | string   | `openai/gpt-image-2.5-flare`| Leonardo model ID.                                  |
| `quality`        | string   | `LOW`                       | For GPT Image models: LOW, MEDIUM, HIGH, EXTRA_HIGH, MAX. |
| `mode`           | string   | `FAST`                      | For Phoenix models: FAST, QUALITY, ULTRA.           |
| `width`          | number   | `1024`                      | Width in pixels (multiple of 8).                    |
| `height`         | number   | `1024`                      | Height in pixels (multiple of 8).                   |
| `quantity`       | number   | `1`                         | Number of images (1–8).                             |
| `style_ids`      | string[] | —                           | Optional Leonardo style UUIDs.                      |

Returns a `generation_id` to poll with `get_generation_status`.

### `get_generation_status`

| Parameter       | Type   | Description                          |
| --------------- | ------ | ------------------------------------ |
| `generation_id` | string | ID returned by `generate_image`.     |

Returns the job status and, when complete, the generated image URLs.

## Project Structure

```
src/index.ts          Main Streamable HTTP MCP server
sources/index_stdio.js Reference stdio-based implementation (v1 API)
dist/                 Compiled JavaScript output
```

## License

MIT — see [LICENSE](LICENSE).