Skip to main content
Glama
README.md
# Midjourney MCP Web

Unofficial Model Context Protocol (MCP) server for generating images through the Midjourney web app using your own signed-in browser authentication cookies.

This project is a cleaned-up and modernized fork of [`Lala-0x3f/mj-mcp`](https://github.com/Lala-0x3f/mj-mcp). It keeps the same simple MCP surface, but updates the web flow for the current Midjourney site:

- submits jobs to `/api/submit-jobs`
- reads the Midjourney user id from the signed-in web page
- polls `/api/imagine` instead of relying on the now-blocked websocket path
- defaults to `--v 8.1`

This project is not affiliated with, endorsed by, or supported by Midjourney.

## Tool

The server exposes one MCP tool:

```text
generating_image(prompt: str, aspect_ratio: str) -> str
```

The response is Markdown with four Midjourney CDN image URLs.

## Requirements

- Python 3.10+
- [`uv`](https://docs.astral.sh/uv/) or another Python package runner
- A Midjourney account with access to the web app
- Your own `__Host-Midjourney.AuthUserTokenV3_r` and `__Host-Midjourney.AuthUserTokenV3_i` cookie values

## Install From GitHub

```bash
uvx --from git+https://github.com/WilliamJizh/midjourney-mcp-web midjourney-mcp-web
```

For local development:

```bash
git clone https://github.com/WilliamJizh/midjourney-mcp-web.git
cd midjourney-mcp-web
uv run --with-editable . python -m midjourney_mcp_web
```

## Configuration

The server reads configuration from environment variables.

| Variable | Required | Default | Description |
| --- | --- | --- | --- |
| `TOKEN_R` | Yes | | Value of `__Host-Midjourney.AuthUserTokenV3_r` |
| `TOKEN_I` | Yes | | Value of `__Host-Midjourney.AuthUserTokenV3_i` |
| `API_BASE` | No | `www.midjourney.com` | Midjourney web host |
| `SUFFIX` | No | `--v 8.1` | Parameters appended to every prompt |
| `MJ_JOB_TIMEOUT_SEC` | No | `300` | Polling timeout for completed job visibility |
| `CHANNEL_ID` | No | `singleplayer_<user_id>` | Override channel id |

Never commit real token values. Treat both tokens as secrets.

## Codex Config Example

```toml
[mcp_servers.midjourney]
command = "uvx"
args = ["--from", "git+https://github.com/WilliamJizh/midjourney-mcp-web", "midjourney-mcp-web"]

[mcp_servers.midjourney.env]
TOKEN_R = "replace_with_midjourney_cookie_r"
TOKEN_I = "replace_with_midjourney_cookie_i"
SUFFIX = "--v 8.1"
```

For better local security on macOS, store the tokens in Keychain and use a small wrapper script that exports `TOKEN_R` and `TOKEN_I` before launching this server. Do not publish that wrapper with real values.

## Claude Desktop Config Example

```json
{
  "mcpServers": {
    "midjourney": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/WilliamJizh/midjourney-mcp-web",
        "midjourney-mcp-web"
      ],
      "env": {
        "TOKEN_R": "replace_with_midjourney_cookie_r",
        "TOKEN_I": "replace_with_midjourney_cookie_i",
        "SUFFIX": "--v 8.1"
      }
    }
  }
}
```

## Getting Cookie Values

1. Open `https://www.midjourney.com/explore?tab=top` while signed in.
2. Open browser developer tools.
3. Go to Application or Storage.
4. Open Cookies for `https://www.midjourney.com`.
5. Copy the values for:
   - `__Host-Midjourney.AuthUserTokenV3_r`
   - `__Host-Midjourney.AuthUserTokenV3_i`

Do not paste these values into public chats, issues, logs, or commits.

## Example Prompt

```text
A peaceful impressionist garden with water lilies and soft morning light --stylize 200
```

Call the MCP tool with:

```json
{
  "prompt": "A peaceful impressionist garden with water lilies and soft morning light --stylize 200",
  "aspect_ratio": "3:4"
}
```

The server appends:

```text
--ar 3:4 --v 8.1
```

unless you override `SUFFIX`.

## Development

```bash
uv run --extra dev pytest
uv run --extra dev python -m build
```

Run a no-secret source scan before publishing:

```bash
git grep -n -I -E 'TOKEN_R=|TOKEN_I=|AuthUserTokenV3_[ri]=[^\"[:space:]]+|gho_|sk-[A-Za-z0-9]|BEGIN (RSA|OPENSSH|PRIVATE) KEY'
```

## Limitations

- Midjourney web APIs are not public APIs and may change without notice.
- The server uses your own Midjourney account and may consume GPU time.
- The returned URLs point to Midjourney CDN assets.
- This does not upload reference images; it is text-prompt only.

## License

GPL-3.0-or-later. See [LICENSE](LICENSE).

TDQS

B3.4/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion between tools. The tool's purpose is clear and distinct.

Naming Consistency5/5

The single tool uses a descriptive verb_noun pattern ('generating_image'), and there is no inconsistency since there's only one tool.

Tool Count3/5

One tool is on the borderline of being too few for a domain like image generation, which typically benefits from additional capabilities (e.g., describing, varying). However, it may suffice for basic generation.

Completeness2/5

The tool surface is severely limited to only generation, lacking common lifecycle operations like retrieving results, upscaling, or modifying images. This will likely lead to agent failures in practical workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues