Skip to main content
Glama
runapi-ai

RunAPI Midjourney MCP Server

by runapi-ai
README.md
<h1 align="center">RunAPI Midjourney MCP Server</h1>

<p align="center">
  <strong>Midjourney API access for AI agents: run image and video generation operations, poll asynchronous results, and check pricing through one focused MCP server.</strong>
</p>

<p align="center">
  <sub>Works with Claude Code, Codex, Cursor, Windsurf, VS Code, Roo Code, and any MCP-compatible host.</sub>
</p>

<p align="center">
  <a href="https://www.npmjs.com/package/@runapi.ai/midjourney-mcp"><img src="https://img.shields.io/npm/v/%40runapi.ai/midjourney-mcp?style=flat-square&color=blue" alt="npm version"></a>
  <a href="https://github.com/runapi-ai/midjourney-mcp"><img src="https://img.shields.io/badge/GitHub-runapi--ai%2Fmidjourney--mcp-24292f?style=flat-square" alt="GitHub repository"></a>
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache_2.0-blue?style=flat-square" alt="Apache-2.0 license"></a>
  <img src="https://img.shields.io/badge/Type-MCP_Server-blue?style=flat-square" alt="MCP Server">
  <img src="https://img.shields.io/badge/Models-3-16a34a?style=flat-square" alt="3 models">
</p>

<p align="center">
  <a href="#install">Install</a> |
  <a href="#tools">Tools</a> |
  <a href="#models">Models</a> |
  <a href="#agent-prompts">Agent Prompts</a> |
  <a href="#configuration">Configuration</a> |
  <a href="#links">Links</a>
</p>

---

## Why This Package?

`@runapi.ai/midjourney-mcp` is a focused Model Context Protocol server for the **Midjourney** model line on RunAPI.
It gives MCP-compatible assistants direct access to 7 endpoints and 3 model variants without loading the full RunAPI catalog.

Use this per-model server when an agent should stay scoped to Midjourney. Use [`@runapi.ai/mcp`](https://github.com/runapi-ai/mcp) when one assistant should discover every RunAPI model line.

---

## Install

Add it to Claude Code:

```bash
claude mcp add midjourney -s user -- npx -y @runapi.ai/midjourney-mcp
```

Use project scope when the server should be shared with a repository:

```bash
claude mcp add midjourney -s project -- npx -y @runapi.ai/midjourney-mcp
```

Codex, Cursor, Windsurf, VS Code, Roo Code, and other MCP hosts can use the same stdio command:

```json
{
  "mcpServers": {
    "midjourney": {
      "command": "npx",
      "args": ["-y", "@runapi.ai/midjourney-mcp"]
    }
  }
}
```

`check_pricing` works before sign-in. For task creation and status polling, ask your assistant to call the `login` tool. It opens a browser login and saves credentials to `~/.config/runapi/config.json`, the same file used by `runapi login`.
Headless and CI hosts can still set `RUNAPI_API_KEY` before starting the MCP host.

Ready-made examples are in [`examples/`](examples/) for Claude, Cursor, Windsurf, VS Code, and Roo Code.

---

## Tools

| Tool | Auth | Purpose |
|---|---|---|
| `edit_image` | Yes | Create a Midjourney edit image task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `extend_video` | Yes | Create a Midjourney extend video task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `get_seed` | Yes | Run a Midjourney get seed operation synchronously. Returns the operation result. |
| `image_to_prompt` | Yes | Run a Midjourney image to prompt operation synchronously. Returns the operation result. |
| `image_to_video` | Yes | Create a Midjourney image to video task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `shorten_prompt` | Yes | Run a Midjourney shorten prompt operation synchronously. Returns the operation result. |
| `text_to_image` | Yes | Create a Midjourney text to image task and optionally wait for a terminal status. Returns the task id, status, and output URLs. |
| `get_task` | Yes | Fetch the current status and latest payload for an existing task. |
| `check_pricing` | No | Look up current pricing for a Midjourney model and endpoint. |

---

## Models

Midjourney covers 3 model variants across 7 endpoints. Each tool accepts the models listed for it:

| Tool | Models |
|---|---|
| `edit_image` | `midjourney-edit-image` |
| `extend_video` | `midjourney-image-to-video` |
| `get_seed` | _no model parameter_ |
| `image_to_prompt` | _no model parameter_ |
| `image_to_video` | `midjourney-image-to-video` |
| `shorten_prompt` | _no model parameter_ |
| `text_to_image` | `midjourney-v8.1` |

Model availability can change between releases. Use `check_pricing` or the [Midjourney model page](https://runapi.ai/models/midjourney) for the current catalog view.

---

## Agent Prompts

Ask your assistant in natural language; it can inspect pricing, create the task, and return the task id plus output URLs.

### Create a task

```text
Run a Midjourney edit image task with RunAPI.
```

The assistant can call `check_pricing`, then `edit_image`, and return the task id, status, and output URLs.

### Submit without waiting

```text
Create the task but don't wait for it to finish.
```

The assistant calls the create tool with `wait: false` and returns the task id. Check on it later with `get_task`.

### Check pricing before creating

```text
Check current Midjourney pricing, then create the task if it matches my request.
```

The assistant calls `check_pricing` and can link to the [Midjourney model page](https://runapi.ai/models/midjourney) for the canonical catalog entry.

---

## Configuration

The server resolves auth in this order:

1. `RUNAPI_API_KEY` environment variable, useful for headless and CI hosts
2. `~/.config/runapi/config.json`, created by the MCP `login` tool or `runapi login`
3. No key, which still allows `check_pricing`

The config file is normally managed by login. A pre-provisioned headless config can use:

```json
{
  "apiKey": "your_runapi_key"
}
```

Do not commit real API keys.

---

## Links

| Resource | URL |
|---|---|
| Midjourney model page | [https://runapi.ai/models/midjourney](https://runapi.ai/models/midjourney) |
| npm package | [@runapi.ai/midjourney-mcp](https://www.npmjs.com/package/@runapi.ai/midjourney-mcp) |
| GitHub repository | [runapi-ai/midjourney-mcp](https://github.com/runapi-ai/midjourney-mcp) |
| RunAPI MCP overview | [runapi.ai/mcp](https://runapi.ai/mcp) |
| RunAPI docs | [runapi.ai/docs](https://runapi.ai/docs) |

---

## License

Licensed under the [Apache License, Version 2.0](LICENSE).

TDQS

B3.2/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct action or resource: login is for authentication, the four creation tools (text_to_image, image_to_video, extend_video, edit_image) are clearly different task types, the three synchronous operations (get_seed, image_to_prompt, shorten_prompt) are distinct utilities, and get_task/check_pricing serve separate purposes. No two tools appear interchangeable.

Naming Consistency4/5

Tool names mostly follow a verb_noun pattern (edit_image, extend_video, get_seed, shorten_prompt, get_task, check_pricing), but the creation tools (text_to_image, image_to_video) use a noun_to_noun pattern that describes the operation rather than a verb. This is a minor inconsistency but overall the naming style is predictable and readable.

Tool Count5/5

With 10 tools, the server is well-scoped for a Midjourney API wrapper. Each tool serves a clear function, and the count is within the ideal 3-15 range. The set is neither bloated nor thin.

Completeness4/5

The server covers the core Midjourney workflows: login, all major generation types (text-to-image, image-to-video, extend video, edit image), task status retrieval, and several common utilities (seed, prompt inversion, prompt shortening). Minor gaps exist such as upscale or variation operations, but the essential lifecycle is present.

Maintenance

ActivitySlowing
ResponsivenessNo issues