Skip to main content
Glama

image-gen-mcp

An MCP server that lets Claude Code generate real images to use in your projects (banners, icons, backgrounds, textures, etc.) with OpenAI gpt-image-2, and save them straight to a path you specify. It is meant for producing production assets — not for mocking up UI designs.

ภาษาไทย: ดู README.th.md

Tools

generate_image

Generate a new image from a text prompt and write it to a file.

param

values

default

prompt *

text description of the image

output_path *

where to save, e.g. public/images/banner.png

quality

low | medium | high | auto

medium

size

auto | 1024x1024 | 1536x1024 (landscape) | 1024x1536 (portrait) | 2048x2048 | WxH

1024x1024 (api_key mode only)

format

png | jpeg | webp

inferred from output_path extension

background

opaque | transparent | auto (transparent needs png/webp)

auto

compression

0-100 (jpeg/webp only)

n

1-10 (if >1, saves name-1.ext, name-2.ext, ...)

1

model

override the model

gpt-image-2

edit_image

Edit / build on existing images. Pass 1-16 reference images, plus an optional mask for inpainting.

param

values

prompt *

what to edit / create

image_paths *

1-16 source (reference) image paths

output_path *

where to save the result

mask_path

(optional) mask for inpainting — transparent areas of the mask are what gets edited; must match the first image's dimensions

+ quality / size / format / background / compression / n / model — same as generate_image

Both tools return only { path, bytes, size, quality, ... } — never the raw image bytes (to avoid flooding the agent's context). A relative output_path is resolved against the calling project's CWD, and parent directories are created automatically.

Related MCP server: ImageForge MCP

Authentication

Two modes. IMAGE_GEN_AUTH_MODE picks between them (auto by default: an API key in the environment wins, otherwise a stored login is used).

api_keyOPENAI_API_KEY (recommended)

Calls api.openai.com/v1. Every parameter above works. Billed to your API account.

chatgpt — browser login

npx image-gen-mcp login     # opens a browser; also `status` and `logout`

Signs in with your ChatGPT account and generates on your ChatGPT plan quota instead of API credit. If you call a tool with no credential configured, the server asks the MCP client to open the same login URL (URL-mode elicitation) and retries the call once you're done — Claude Code supports this; claude -p does not, so use the CLI there.

Tokens are stored in ~/.image-gen-mcp/auth.json (0600) and refreshed automatically. Codex's own ~/.codex/auth.json is never read or written — sharing one rotating refresh token between two tools logs both out.

This mode is a reduced feature set. It goes through chatgpt.com/backend-api/codex, which accepts only prompt, model, quality, background, always returns PNG, and silently ignores everything else. Rather than hand back an asset that quietly isn't what was asked for, the tools reject the unsupported parameters:

api_key

chatgpt

size

yes

rejected — dimensions come from the prompt; say "landscape"/"portrait"/"square" in it

n > 1

yes

rejected — one image per call

format

png / jpeg / webp

png only

compression

yes

rejected

moderation

yes

rejected

mask_path (inpaint)

yes

rejected

background: transparent

yes

yes

quality

yes

accepted, but not reliably honored — the response's actual quality is reported back, and a notes entry flags any difference

Caveats. OpenAI publishes no OAuth flow for third-party apps: this reuses the login its own Codex CLI performs, including that client's ID and its two allow-listed loopback ports (1455/1457). It is undocumented, unsupported, and can break without notice. The resulting token is not accepted by the Platform API (GET /v1/models with one answers 403 Missing scopes: api.model.read), which is why the two modes talk to different hosts. api_key remains the supported path.

Install

cd image-gen-mcp
npm install

Connect to Claude Code

For api_key mode, provide the key via the server's env block in your MCP config (no .env file required) — in a project .mcp.json or a user-scoped config. For chatgpt mode, drop the env block and run npx image-gen-mcp login instead:

{
  "mcpServers": {
    "image-gen": {
      "command": "node",
      "args": ["/Users/palm/Desktop/projects/custom-mcp/image-gen-mcp/src/index.mjs"],
      "env": { "OPENAI_API_KEY": "sk-..." }
    }
  }
}

Or add it via the CLI:

claude mcp add image-gen -e OPENAI_API_KEY=sk-... -- node /Users/palm/Desktop/projects/custom-mcp/image-gen-mcp/src/index.mjs

Test

npm run selftest   # real in-memory MCP round-trip with a fake client — no key/network needed
OPENAI_API_KEY=sk-... npm run smoke   # one real API call (quality low) that verifies a valid PNG

Pricing (approx., gpt-image-2, 1024x1024)

low ~$0.006 · medium ~$0.053 · high ~$0.211 per image — start at medium, use high only for final assets.

Available Tools

2 tools
edit_imageA

แก้ไข/ต่อยอดรูปที่มีอยู่ด้วย gpt-image-2: ใส่รูปต้นทางได้ 1-16 ไฟล์เป็น reference (เช่น แก้รูปเดิม, รวมสไตล์จากหลายรูป, ใส่โลโก้), และใส่ mask (mask_path) เพื่อ inpaint เฉพาะบางส่วนได้. ผลลัพธ์เซฟเป็นไฟล์ที่ output_path. เหมาะกับการปรับ asset ที่เจนไว้แล้วหรือทำให้ตรงแบรนด์.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoจำนวนรูป (default 1). ถ้า >1 จะเซฟเป็น name-1.ext, name-2.ext, ...
sizeNoauto | 1024x1024 (จตุรัส) | 1536x1024 (แนวนอน) | 1024x1536 (แนวตั้ง) | 2048x2048 | WxH (gpt-image-2 สูงสุด 3840px, ทวีคูณของ 16)1024x1024
modelNoโมเดล (default gpt-image-2). override ได้ เช่น gpt-image-1.5gpt-image-2
formatNoนามสกุลไฟล์ผลลัพธ์ (ไม่ใส่ = เดาจาก output_path, ไม่รู้ = png)
promptYesบอกว่าจะให้แก้/สร้างอะไรจากรูปต้นทาง
qualityNoคุณภาพ/ราคา: low (ร่าง, ถูกสุด) | medium (ค่าเริ่มต้น) | high (งาน final, แพงสุด) | automedium
mask_pathNo(ไม่บังคับ) path ไฟล์ mask สำหรับ inpaint — บริเวณโปร่งใสใน mask คือส่วนที่จะถูกแก้ ต้องขนาดเท่ารูปแรก
backgroundNotransparent = พื้นหลังโปร่งใส (ใช้ได้เฉพาะ png/webp) | opaque | autoauto
moderationNoระดับ moderation (default auto)auto
compressionNoระดับบีบอัด 0-100 (เฉพาะ jpeg/webp)
image_pathsYespath รูปต้นทาง 1-16 ไฟล์ (reference images)
output_pathYesที่จะเซฟไฟล์ผลลัพธ์

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It explains the process (reference images, mask, output path) and model, but does not disclose potential destructive actions, auth requirements, rate limits, or side effects. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph with three sentences, reasonably concise. It front-loads the purpose. Could be slightly more terse but is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 12 parameters and no output schema. The description covers the main use case and some parameter details (mask size, number of images), but does not explain return values or behavior. Adequate for an experienced agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description paraphrases some parameters (reference images, mask) but adds little beyond the schema. No significant additional semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool edits/enhances existing images using gpt-image-2, with support for multiple reference images and mask inpainting. It distinguishes from the sibling generate_image tool, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes it's suitable for adjusting already-generated assets or making them on-brand, providing context for when to use. However, it does not explicitly state when not to use or mention alternatives, leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_imageA

เจนรูปใหม่จากข้อความ (prompt) ด้วย OpenAI gpt-image-2 แล้วเซฟเป็นไฟล์ที่ output_path ที่สั่ง (สร้างโฟลเดอร์ให้อัตโนมัติ, path relative จะอิงโฟลเดอร์โปรเจกต์ปัจจุบัน). ใช้สำหรับผลิต asset จริงเพื่อเอาไปใช้ในงาน เช่น banner เว็บ, ไอคอน, พื้นหลัง, texture. เลือกคุณภาพได้ (quality) — low ร่างถูกสุด, high งาน final. คืนแค่ path + metadata ไม่คืนข้อมูลรูปดิบ.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoจำนวนรูป (default 1). ถ้า >1 จะเซฟเป็น name-1.ext, name-2.ext, ...
sizeNoauto | 1024x1024 (จตุรัส) | 1536x1024 (แนวนอน) | 1024x1536 (แนวตั้ง) | 2048x2048 | WxH (gpt-image-2 สูงสุด 3840px, ทวีคูณของ 16)1024x1024
modelNoโมเดล (default gpt-image-2). override ได้ เช่น gpt-image-1.5gpt-image-2
formatNoนามสกุลไฟล์ผลลัพธ์ (ไม่ใส่ = เดาจาก output_path, ไม่รู้ = png)
promptYesคำอธิบายรูปที่ต้องการ (อังกฤษได้ผลดีสุด, ไทยก็ได้)
qualityNoคุณภาพ/ราคา: low (ร่าง, ถูกสุด) | medium (ค่าเริ่มต้น) | high (งาน final, แพงสุด) | automedium
backgroundNotransparent = พื้นหลังโปร่งใส (ใช้ได้เฉพาะ png/webp) | opaque | autoauto
moderationNoระดับ moderation (default auto)auto
compressionNoระดับบีบอัด 0-100 (เฉพาะ jpeg/webp)
output_pathYesที่จะเซฟไฟล์ เช่น public/images/banner.png หรือ /abs/path/icon.webp

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that it returns only path+metadata, not raw data, and mentions auto-creation of folders. However, it does not address overwrite behavior or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, well-structured, and front-loaded with the primary purpose. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, no output schema), the description covers key behaviors: return format, parameter interactions, quality differences, and file handling. It provides sufficient context for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant value beyond the schema: explains how 'n' affects filenames, size options including auto, quality levels, format inference, background restrictions, and compression applicability.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (generate), resource (images from prompt using gpt-image-2), and provides specific use cases (banners, icons, textures). It distinguishes from the sibling tool edit_image by focusing on creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context for when to use this tool (producing actual assets) but does not explicitly exclude alternatives or mention when not to use it. The sibling differentiation is implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.0.0
    • First observededit_image
    • First observedgenerate_image

TDQS

A4.1/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have completely distinct purposes: one for generating new images from prompts, the other for editing existing images with references and masks. No overlap in functionality.

Naming Consistency5/5

Both tools follow the same verb_noun pattern (edit_image, generate_image), creating a clear and predictable naming convention.

Tool Count3/5

With only 2 tools, the server feels minimal; typically 3-15 tools are expected for a well-scoped server, making this borderline underpowered.

Completeness4/5

The server covers the core workflows of image generation and editing. Minor gaps exist (e.g., no tool to list or delete images), but these are not essential for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers