Odel
mcp server grok image

mcp server grok image

Local
@codechapRustUpdated 3 days ago

MCP server for Grok image generation and editing

mcp-server-grok-image

An MCP (Model Context Protocol) server for xAI's Grok image generation API. Built in Rust, exposes image generation and editing as MCP tools.

Communicates via stdio using JSON-RPC 2.0, like all MCP servers.

Tools

ToolDescription
generate_imageGenerate an image from a text prompt
edit_imageEdit an existing image using natural language instructions
headshotCorporate headshot from a source portrait (pad to 3:2 + fixed edit prompt)
list_stylesList available image styles for use with generate_image

generate_image

Generate an image from a text description.

Parameters:

NameTypeRequiredDescription
promptstringyesText description of the desired image
modelstringnoModel to use (default: grok-imagine-image-2.0)
nintegernoNumber of images to generate (1-10, default 1)
aspect_ratiostringnoAspect ratio: 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 2:1, 1:2, 19.5:9, 9:19.5, 20:9, 9:20, 21:9, 5:2, auto
resolutionstringnoOutput resolution: 1k (~1024px, default) or 2k (~2048px)
qualitystringnolow, medium, or auto (2.0 only; omitted = auto. Auto currently serves low for generation)
response_formatstringnoOutput format: url (default, temporary) or b64_json
stylestringnoStyle name to apply (use list_styles to see options)

When a style is set, the prompt is wrapped in the style's template. For example, with style: "watercolor" and prompt: "a cat on a roof", the API receives "a cat on a roof, as a watercolor painting". Avoid including style language in the prompt itself when using this parameter.

The response includes the resolved prompt so you can see exactly what was sent to the API.

edit_image

Edit an existing image using natural language instructions.

Parameters:

NameTypeRequiredDescription
image_urlstringno*URL, base64 data URI, or local file path of the source image. Mutually exclusive with images.
imagesstring[]no*Up to 5 source images for multi-image editing. Reference them in the prompt as <IMAGE_0>, <IMAGE_1>, …
promptstringyesNatural language edit instructions
modelstringnoModel to use (default: grok-imagine-image-2.0)
nintegernoNumber of variations to generate (1-10, default 1)
aspect_ratiostringnoSame set as generate_image, including 21:9 and 5:2
resolutionstringnoOutput resolution: 1k (~1024px, default) or 2k (~2048px)
qualitystringnolow, medium, or auto (2.0 only; omitted = auto. Auto currently serves medium for editing)
response_formatstringnoOutput format: url (default, temporary) or b64_json

* Provide either image_url or images.

Note: The style parameter is intentionally not available on edit_image -- edit prompts are instructions (e.g. "remove the background"), not descriptions, so wrapping them in style templates would produce nonsense.

headshot

Expand-only portrait fix (Gemini pipeline equivalent on Imagine). Does not reframe pose, cut out hair, or redesign the person.

  1. Resize full source (default 550px wide) — never crop
  2. Letterbox with white gutters to canvas width (default 780)
  3. Call grok-imagine-image-2.0 at quality medium: complete cut-off shoulders if needed; clean solid white background; keep face/hair/pose/clothing/logos

No cutout / no rembg / no transparent alpha — same job as the original Gemini headshot skill.

Parameters:

NameTypeRequiredDescription
imagestringyesLocal path, http(s) URL, or data: URI
clothingstringnoFor missing-shoulder fill only
notesstringnoMust-preserve details (glasses, exact logo text, …)
pronounstringnohis / her / their (default their)
gravitystringnoLetterbox gravity (North default)
content_widthintegernoResize width before pad (default 550)
canvas_widthintegernoPadded width (default 780)
resolutionstringno1k or 2k (default 2k)
output_pathstringnoOptional final path (also under save_dir)
nintegernoVariations (1–10, default 1)
qualitystringnolow / medium / auto (default medium)
modelstringnoDefault grok-imagine-image-2.0

Padded intermediate: save_dir/headshot-padded_*.jpg.

list_styles

Returns all available image styles with their name, description, and prompt template. No parameters.

Built-in Styles

StyleDescription
watercolorWatercolor painting style
oil-paintingOil painting with visible brushstrokes
pencil-sketchDetailed pencil sketch
pixel-artRetro pixel art
animeAnime style illustration
pop-artBold pop art style
art-nouveauArt nouveau with flowing organic lines
cinematicCinematic photography with dramatic lighting
portraitProfessional portrait photography
macroExtreme macro photography
aerialAerial drone photography
studioStudio photography on clean background
noirDark film noir style
vintageFaded vintage photograph

Available Models

ModelNotes
grok-imagine-image-2.0 (default)Optional quality (low / medium / auto), up to 5 edit references, 21:9 and 5:2. Auto currently serves low for generation and medium for editing.
grok-imagine-image1.0. Still available; no quality param.
grok-imagine-image-qualityRetires 2026-11-02. After that the slug is served by grok-imagine-image-2.0 at quality: low ($0.01 less per image than the quality model).

Prerequisites

Setup

Create the config file:

mkdir -p ~/.config/mcp-server-grok-image

Create ~/.config/mcp-server-grok-image/config.toml:

api_key = "xai-..."

Custom Styles

Add custom styles to your config file. Custom styles with the same name as a built-in will override it.

api_key = "xai-..."

[[styles]]
name = "my-style"
description = "My custom look"
template = "{prompt}, in my custom style"

[[styles]]
name = "watercolor"
description = "My watercolor variant"
template = "{prompt}, as a loose expressive watercolor with ink outlines"

Templates must contain the {prompt} placeholder. Any custom style missing it will be skipped with a warning at startup.

Build

cargo build --release

This produces target/release/mcp-server-grok-image.

For development:

cargo build              # debug build
cargo run                # run in dev mode
RUST_LOG=debug cargo run # run with debug logging

MCP Configuration

Add to your Claude Desktop config (~/.config/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "grok-image": {
      "command": "/path/to/mcp-server-grok-image"
    }
  }
}

Project Structure

src/
  main.rs      process entry (stdio MCP)
  config.rs    TOML / env config
  styles.rs    built-in + custom styles
  grok.rs      xAI request/response types
  params.rs    MCP tool params + validation
  image_io.rs  data URIs, local files, mime, fetch
  headshot.rs  letterbox pad + expand prompt
  server.rs    MCP tools and Grok HTTP

License

MIT