English | ζ₯ζ¬θͺ
A Model Context Protocol (MCP) server that enables image generation and editing using OpenAI's GPT Image API (gpt-image-1, gpt-image-1.5, and gpt-image-2). Works seamlessly with Claude Desktop, Claude Code, and other MCP-compatible clients.
- π¨ High-Quality Image Generation: State-of-the-art text-to-image generation
- π Excellent Text Rendering: Accurate text rendering within images
- βοΈ Precise Image Editing: Inpainting for targeted modifications
- π Image Transformation: Style transfer and reinterpretation
- π Flexible Sizing: Square, portrait, and landscape formats
- ποΈ Quality Control: Choose from low, medium, or high quality
- πΌοΈ Multiple Formats: PNG, JPEG, and WebP support
- π Cross-Platform: Works on macOS, Windows, and Linux with smart path handling
- π² Multi-Image Generation: Generate 1-10 images in a single request
- π History Management: SQLite-based generation history with search
- β‘ Async Job System: Background processing with progress tracking
- π·οΈ Metadata Embedding: Automatic metadata in PNG/JPEG files
- π° Cost Management: Automatic token usage and cost estimation
- π‘οΈ Content Filtering: Built-in safety filters
- π Image Management: List and organize generated images
- π§ Debug Mode: Detailed logging for troubleshooting
- π gpt-image-1.5 Model: 4x faster generation, 20% lower cost
- π Better Text Rendering: Improved accuracy for text in images
- π€ Input Fidelity: High-fidelity face/logo preservation (edit & transform)
- π§ Model Selection: Choose between gpt-image-1 and gpt-image-1.5
- π gpt-image-2 Model: Latest OpenAI image model with flexible sizing
- π Flexible Sizes: 2K/4K presets (2048x2048, 2048x1152, 3840x2160, etc.) and custom
WxH(16px multiples, each edge β€3840, ratio β€3:1, 0.65β8.3 megapixels) - π§ͺ Experimental 4K:
3840x2160/2160x3840available (quality/stability not guaranteed by OpenAI) - π― Auto High-Fidelity: Reference images are always processed at high fidelity β
input_fidelityis ignored β οΈ No Transparent Background:transparent_backgroundis not supported; use gpt-image-1 / 1.5 if you need transparency- π΅ Lower Low-Tier Pricing:
lowquality 1024x1024 is ~$0.006/image
- π¦ CLI Batch Tool: Generate multiple images at once via command line
- π Concurrency Control: Parallel processing with configurable limits
- π Cost Estimation: Preview costs before execution
- βοΈ Retry Policy: Automatic retry for failed jobs
- π Multiple Output Formats: Text or JSON results
- π€ GitHub Actions: Automated batch generation from Issue comments
- πΎ Batch History: Track and manage batch executions
- Node.js v18 or higher
- OpenAI API Key with verified organization
- MCP-compatible client (Claude Desktop, Claude Code, etc.)
β οΈ Important: Using gpt-image-1 requires OpenAI Organization Verification.
Prerequisites: Node.js 18+, OpenAI API key with verified organization
npm install -g openai-gpt-image-mcp-serverAdd to your Claude Desktop config file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"openai-gpt-image": {
"command": "openai-gpt-image-mcp-server",
"env": {
"OPENAI_API_KEY": "sk-proj-your-key-here"
}
}
}
}Windows users: Use
openai-gpt-image-mcp-server.cmdas the command.
Completely restart Claude Desktop (quit from system tray/menu bar).
In Claude, try: "Generate a beautiful sunset landscape"
Done! For detailed setup and advanced features, see Full Installation Guide below.
npm install -g openai-gpt-image-mcp-servergit clone https://github.com/ex-takashima/openAI-gpt-image-1-MCP-SERVER.git
cd openAI-gpt-image-1-MCP-SERVER
npm install
npm run build- Visit OpenAI Platform
- Log in or create an account
- Complete Organization Verification:
- Go to Settings > Organization > General
- Click "Verify Organization"
- Upload government-issued ID
- Complete facial verification
- Wait up to 15 minutes for approval
- Create a new API key in the API Keys section
- Save the key securely
Set your API key as an environment variable:
# Linux/macOS
export OPENAI_API_KEY="sk-proj-..."
# Windows (PowerShell)
$env:OPENAI_API_KEY="sk-proj-..."Or create a .env file:
OPENAI_API_KEY=sk-proj-your-api-key-hereAdd to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"openai-gpt-image": {
"command": "openai-gpt-image-mcp-server",
"env": {
"OPENAI_API_KEY": "sk-proj-your-api-key-here",
"OPENAI_IMAGE_OUTPUT_DIR": "/Users/username/Pictures/ai-images"
}
}
}
}Windows users: Use openai-gpt-image-mcp-server.cmd as the command.
Optional Environment Variables:
OPENAI_IMAGE_OUTPUT_DIR: Custom output directory (default:~/Downloads/openai-images)OPENAI_IMAGE_INPUT_DIR: Custom input directory (default: same as output directory)OPENAI_IMAGE_EMBED_METADATA: Enable metadata embedding (true/false, default:true)OPENAI_IMAGE_METADATA_LEVEL: Metadata detail level (minimal/standard/full, default:standard)OPENAI_IMAGE_THUMBNAIL: Enable thumbnail generation (true/false, default:false)OPENAI_IMAGE_THUMBNAIL_SIZE: Thumbnail size in pixels (default:128, range: 1-512)OPENAI_IMAGE_THUMBNAIL_QUALITY: Thumbnail JPEG quality (default:60, range: 1-100)OPENAI_ORGANIZATION: OpenAI organization ID (if you belong to multiple)HISTORY_DB_PATH: Custom database location (default:~/.openai-gpt-image/history.db)DEBUG: Set to1for detailed logging
π Complete reference: See Environment Variables Reference for detailed documentation of all variables.
Restart Claude Desktop after saving.
For Claude Code, use this configuration:
Windows:
{
"mcpServers": {
"openai-gpt-image": {
"command": "cmd",
"args": ["/c", "npx", "-y", "openai-gpt-image-mcp-server"],
"env": {
"OPENAI_API_KEY": "sk-proj-your-api-key-here"
}
}
}
}macOS/Linux:
{
"mcpServers": {
"openai-gpt-image": {
"command": "npx",
"args": ["-y", "openai-gpt-image-mcp-server"],
"env": {
"OPENAI_API_KEY": "sk-proj-your-api-key-here"
}
}
}
}Generate a beautiful sunset landscape
Generate a 1536x1024 wide mountain landscape
Generate a high-quality image of an astronaut floating in space
Create an image with "WELCOME" written on a large sign
Edit this photo's background. Use the mask image to change only
the background to a beautiful beach.
Transform this photo into an oil painting style
Generate an illustration of an apple with a transparent background
Generate 5 different variations of a cyberpunk cityscape
Show me my image generation history from the last week
Start a background job to generate 10 high-quality landscape images.
I want to continue working while it processes.
Generate multiple images at once using the CLI batch tool.
# Basic batch generation
openai-gpt-image-batch examples/batch-simple.json
# Estimate cost before execution
openai-gpt-image-batch examples/batch-detailed.json --estimate-only
# JSON output format
openai-gpt-image-batch examples/batch-large-scale.json --format json > result.json{
"jobs": [
{
"prompt": "A beautiful sunset over the ocean",
"output_path": "sunset.png",
"size": "1536x1024",
"quality": "high"
},
{
"prompt": "A futuristic city skyline",
"output_path": "city.png",
"quality": "medium"
}
],
"max_concurrent": 3,
"timeout": 900000
}openai-gpt-image-batch <config.json> [options]
Options:
--output-dir <path> Output directory
--format <text|json> Output format (default: text)
--timeout <ms> Timeout in milliseconds
--max-concurrent <n> Max concurrent jobs (1-10)
--estimate-only Estimate cost without executing
--help, -h Show help
--version, -v Show version- Concurrency Control: Parallel processing with configurable limits (1-10 concurrent jobs)
- Cost Estimation: Preview costs before execution with
--estimate-only - Retry Policy: Automatic retry for failed jobs (configurable)
- Multiple Output Formats: Results in text or JSON format
- Timeout Management: Prevent long-running executions
- Error Handling: Continue processing even if individual jobs fail
- GitHub Actions Integration: Automated batch generation from Issue comments
Four example configurations are included:
- batch-simple.json: Basic batch with 3 images
- batch-detailed.json: Detailed configuration with custom settings (5 images)
- batch-multi-variant.json: Multi-variant generation (3-5 variants per prompt)
- batch-large-scale.json: Large-scale batch processing (10+ images)
For detailed documentation, see:
- docs/BATCH_PROCESSING.md - English
- docs/BATCH_PROCESSING.ja.md - ζ₯ζ¬θͺ
Documentation includes:
- Comprehensive CLI usage guide
- Batch configuration JSON format
- GitHub Actions integration
- Troubleshooting guide
- Best practices
Generate new images from text prompts.
Parameters:
prompt(required): Image descriptionoutput_path: Save location (default:generated_image.png)size:1024x1024,1024x1536,1536x1024, orautoquality:low,medium,high, orautooutput_format:png,jpeg, orwebptransparent_background: Enable transparency (PNG only)moderation: Content filtering levelsample_count: Number of images to generate (1-10, default: 1)return_base64: Return base64-encoded image
Edit images using inpainting.
Parameters:
prompt(required): Edit descriptionreference_image_base64orreference_image_path: Source imagemask_image_base64ormask_image_path: Mask (transparent = edit area)output_path: Save locationsample_count: Number of images to generate (1-10, default: 1)- Other parameters same as
generate_image
Transform images to new styles.
Parameters:
prompt(required): Transformation descriptionreference_image_base64orreference_image_path: Source imageoutput_path: Save locationsample_count: Number of images to generate (1-10, default: 1)- Other parameters same as
generate_image
List images in a directory.
Parameters:
directory: Path to search (default: current directory)
Browse generation history with optional filters.
Parameters:
limit: Max records (1-100, default: 20)offset: Skip N records (pagination)tool_name: Filter by tool (generate_image,edit_image,transform_image)query: Search in prompts
Get detailed information about a specific generation.
Parameters:
uuid(required): History record UUID
Start an async image generation job in the background.
Parameters:
tool_name(required): Which tool to useprompt(required): Generation prompt- Other parameters same as the respective tool
Check the status of an async job.
Parameters:
job_id(required): Job ID fromstart_generation_job
Get the result of a completed job.
Parameters:
job_id(required): Job ID
Cancel a pending or running job.
Parameters:
job_id(required): Job ID to cancel
List async jobs with optional filters.
Parameters:
status: Filter by status (pending,running,completed,failed,cancelled)tool_name: Filter by toollimit: Max results (1-100, default: 20)offset: Skip N results
All generation tools support the sample_count parameter to generate multiple images at once:
Generate 5 variations of a cat playing with yarn
- Supported range: 1-10 images per request
- Files are automatically numbered:
output_1.png,output_2.png, etc. - Cost is multiplied by the number of images
- All files are recorded in history
Every generation is automatically saved to a local SQLite database (~/.openai-gpt-image/history.db):
View recent history:
Show me the last 10 images I generated
Search history:
Find all images I generated with "sunset" in the prompt
Get details:
Show me the details for this history ID: 8796265a-8dc8-48f4-9b40-fe241985379b
The history includes:
- Generation timestamp
- Tool used
- Prompt and parameters
- Output file paths
- Cost information
For long-running operations or batch processing, use async jobs:
Start a background job:
Start a background job to generate 10 high-quality space images
Check status:
Check the status of job b7912655-0d8e-4ecc-be58-cbc2c4746932
Get results:
Get the results for job b7912655-0d8e-4ecc-be58-cbc2c4746932
Job statuses:
- β³
pending: Waiting to start - π
running: Currently processing - β
completed: Finished successfully - β
failed: Error occurred - π«
cancelled: Manually cancelled
Generated images automatically include embedded metadata:
PNG files: tEXt chunks with:
openai_gpt_image_uuid: Unique identifierparams_hash: SHA-256 hash of parameterstool_name: Tool used (generate_image, edit_image, transform_image)model: Model name (gpt-image-1)created_at: ISO 8601 timestampsize: Image dimensions (e.g., "1024x1024")quality: Quality level (low, medium, high)prompt: Generation prompt (full level only)parameters: Complete generation parameters (full level only)
JPEG/WebP files: EXIF ImageDescription with JSON metadata
View metadata:
# macOS/Linux
exiftool generated_image.png | grep openai
# Windows (PowerShell)
exiftool generated_image.pngThis allows you to identify how an image was created even after moving it to different locations.
You can control metadata embedding behavior using environment variables:
Disable metadata embedding entirely:
{
"mcpServers": {
"openai-gpt-image": {
"env": {
"OPENAI_API_KEY": "sk-proj-...",
"OPENAI_IMAGE_EMBED_METADATA": "false"
}
}
}
}Change metadata detail level:
{
"mcpServers": {
"openai-gpt-image": {
"env": {
"OPENAI_API_KEY": "sk-proj-...",
"OPENAI_IMAGE_METADATA_LEVEL": "minimal"
}
}
}
}Metadata levels:
-
minimal: UUID and parameter hash only- Best for: Privacy-focused use cases
- Size impact: Minimal (~100 bytes)
- Contains:
openai_gpt_image_uuid,params_hash
-
standard(default): Basic generation information- Best for: Most use cases, balances detail and privacy
- Size impact: Small (~300 bytes)
- Contains: All minimal fields +
tool_name,model,created_at,size,quality
-
full: Complete generation details- Best for: Full traceability and reproducibility
- Size impact: Medium (varies by prompt length, typically 500-2000 bytes)
- Contains: All standard fields +
prompt,parameters
Note: Metadata embedding is "best effort" - if embedding fails, the image is still saved without metadata. Enable DEBUG=1 to see metadata embedding details.
Images are saved with smart cross-platform path handling:
By default, all images are saved to ~/Downloads/openai-images:
- macOS:
/Users/username/Downloads/openai-images/ - Windows:
C:\Users\username\Downloads\openai-images\ - Linux:
/home/username/Downloads/openai-images/
-
Absolute paths: Must be within base directory (security sandboxing)
~/Downloads/openai-images/myimage.png β β saved (within base) /tmp/myimage.png β β rejected (outside base) -
Relative paths: Resolved from base directory
myimage.png β ~/Downloads/openai-images/myimage.png subfolder/image.png β ~/Downloads/openai-images/subfolder/image.png -
Security: Path traversal attacks prevented
../other/image.png β β rejected (path traversal) -
Auto-creation: Parent directories are created automatically
Set the OPENAI_IMAGE_OUTPUT_DIR environment variable:
{
"mcpServers": {
"openai-gpt-image": {
"env": {
"OPENAI_API_KEY": "sk-proj-...",
"OPENAI_IMAGE_OUTPUT_DIR": "/Users/username/Pictures/ai-images"
}
}
}
}Now myimage.png will be saved to /Users/username/Pictures/ai-images/myimage.png.
Input images (for edit_image and transform_image) are also managed with security:
- Input directory: Same as output directory by default
- Can be customized with
OPENAI_IMAGE_INPUT_DIRenvironment variable
-
Relative paths: Resolved from input base directory
photo.png β ~/Downloads/openai-images/photo.png source/photo.png β ~/Downloads/openai-images/source/photo.png -
Absolute paths: Must be within base directory
~/Downloads/openai-images/photo.png β β allowed /tmp/photo.png β β rejected (outside base) -
Security: Same sandboxing as output paths
- Path traversal prevented
- System files protected
- Other user files protected
{
"mcpServers": {
"openai-gpt-image": {
"env": {
"OPENAI_API_KEY": "sk-proj-...",
"OPENAI_IMAGE_INPUT_DIR": "~/Pictures/source-images",
"OPENAI_IMAGE_OUTPUT_DIR": "~/Pictures/generated-images"
}
}
}
}All operations automatically report:
- Input/output token counts
- Estimated cost in USD
- Cost breakdown (text processing + image generation)
- Parameter details
Example output:
π Usage Statistics
- Input tokens: 15
- Output tokens (image): 4,096
- Total tokens: 4,111
- Estimated cost: $0.042
π° Cost breakdown:
- Text processing: $0.000150
- Image generation: $0.041850
π Parameters: high quality | 1024x1024 | png
The following costs are approximate estimates. Actual pricing may vary.
| Size | Quality | Approx. Cost |
|---|---|---|
| 1024x1024 | low | $0.01-0.02 |
| 1024x1024 | medium | $0.04-0.07 |
| 1024x1024 | high | $0.17-0.19 |
Important: See OpenAI Pricing for current official rates.
| Issue | Solution |
|---|---|
| Server won't start | Verify Node.js v18+, check PATH |
| Authentication error | Check OPENAI_API_KEY |
| "organization must be verified" | Complete verification at OpenAI Platform |
| Generation fails | Try moderation: "low" or refine prompt |
| Edit doesn't work | Ensure mask is transparent PNG |
| File access error (macOS/Windows) | Use absolute paths or set OPENAI_IMAGE_OUTPUT_DIR |
| "ENOENT: no such file or directory" | Check path format, try default ~/Downloads/openai-images |
Enable detailed logging:
DEBUG=1 openai-gpt-image-mcp-server- Never commit API keys to version control
- Use environment variables or
.envfiles - Set file permissions:
chmod 600 .env - Rotate keys regularly
- Monitor usage at OpenAI Dashboard
All file operations (read/write) are restricted to configured base directories:
Protected system files:
- Unix/Linux/macOS:
/etc/*,/var/*,/home/other_user/*,/root/* - Windows:
C:\Windows\*,C:\Program Files\*,C:\Users\OtherUser\*
Security features:
- β
Path traversal attack prevention (
../restrictions) - β System file protection
- β Other user data protection
- β Operations limited to configured directories only
To access different directories, configure base directories:
{
"mcpServers": {
"openai-gpt-image": {
"env": {
"OPENAI_IMAGE_OUTPUT_DIR": "/path/to/your/output",
"OPENAI_IMAGE_INPUT_DIR": "/path/to/your/input"
}
}
}
}# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run dev
# Run locally
npm startContributions welcome! Please feel free to submit issues and pull requests.
MIT License - see LICENSE file for details.
Happy Image Generating! π¨