OpenAI gpt-image (gpt-image-1 / gpt-image-2) MCP server with advanced image generation and editing capabilities
This server demonstrates good schema completeness and parameter documentation, with clear enum constraints and detailed input structures. However, it has moderate gaps in parameter descriptions, missing output schema documentation, and lacks tool annotations. All three tools are explicitly registered with descriptions and comprehensive input schemas. The tool descriptions are adequate but could be more prescriptive about when to use each tool. Parameter descriptions are present for most fields but vary in detail and clarity. Error handling is basic, validation errors are caught but recovery guidance is minimal.
Apply the same edit to multiple images using gpt-image-1 or gpt-image-2 (default: gpt-image-2).
Edit existing images with gpt-image-1 or gpt-image-2 (default: gpt-image-2). Inpaint, outpaint, style transfer, and other transformations. With gpt-image-2, source_image accepts an array (1-10 images) for compositions.
Generate images using gpt-image-1 or gpt-image-2. Omit `model` to use gpt-image-2 (default). gpt-image-2 unlocks 2K presets (square_2k / landscape_2k / portrait_2k) and aspect_ratio: "auto".
Output schema not documented. Tool descriptions reference what is returned (e.g., 'Generated image successfully'), but no formal output schema is provided. LLMs cannot reliably extract fields (file_path, base64_image, metadata) without a declared schema.
Parameter descriptions are present but inconsistent in detail. Some parameters (e.g., 'mask_area' in edit-image, 'preserve_composition') have no description or vague descriptions ('Mask area' alone). LLMs cannot determine what values are valid or how the parameter affects behavior.
batch-edit has a design flaw: both 'images' (array of image objects) and 'image_urls' (array of URL strings) are defined as separate required parameters. This is ambiguous, must the caller provide both, or can they choose one? The schema does not express mutual exclusivity clearly, forcing the LLM to guess or try both.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All three tools perform write operations (generate, edit, batch-edit), but the toolAnnotations field in the server capabilities is missing (set to false). This prevents clients from understanding which tools are safe to retry or have side effects.
Error handling is minimal. The code wraps errors in a formatValidationError() helper, but the actual error messages returned are not shown in the source. Without actionable error messages (e.g., 'Invalid aspect_ratio for gpt-image-1: must be one of [square, landscape, portrait]'), LLMs cannot self-correct on invalid inputs.
The 'model' parameter can be omitted and defaults to gpt-image-2, but this default behavior is not consistently reflected in the schema. For edit-image and batch-edit, the parameter is not marked as required, but the tool description says 'default: gpt-image-2', which is implied but not enforced at the schema level.