Skip to main content
Glama

What it does

Related MCP server: codex-mcp-system

See it work

Two real opencode sessions in a scratch project. The images are exactly what came back:

You: I need a sticker-style illustration of a cute cartoon cactus with a transparent background for this project. Save it as assets/cactus-sticker.png.

opencode · openai/gpt-5.5 loads the imagegen skill → imagegen_generate_image with background: "transparent""Saved assets/cactus-sticker.png, 1254×1254 PNG with a transparent background."

You: Make a 16:9 hero banner for the Cactus Shop landing page, and a variant of the sticker where the cactus wears a tiny straw hat. Keep everything else identical.

opencode · github-copilot/claude-sonnet-5imagegen_auth_statusimagegen_generate_image (aspect_ratio: "16:9") and imagegen_edit_image (images: ["assets/cactus-sticker.png"]) in parallel → both saved, the edit with "transparent background (alpha verified)".

One prompt, three canvases. aspect_ratio doesn't crop. The service composes a new picture for each shape:

A green screen becomes alpha on your machine. remove_background keys out a flat backdrop locally, with no network call and no quota:

TIP

Every image in this repository was made with codex-imagegen-mcp itself. That covers the posters, the badges, the logo and the examples. The prompts and the art-direction record are indocs/assets.

Quick start

NOTE

You needNode.js 22+ and a ChatGPT plan that includes Codex (Plus, Pro, Business, Enterprise, Edu…). Codex image generation isn't available on the Free plan.

1 · Install. This takes the packaged build from the latest GitHub release and puts codex-imagegen-mcp on your PATH.

npm install --global https://github.com/ShalomObongo/codex-imagegen-mcp/releases/latest/download/codex-imagegen-mcp.tgz
git clone https://github.com/ShalomObongo/codex-imagegen-mcp.git && cd codex-imagegen-mcp
npm ci && npm run build
npm link                                  # puts `codex-imagegen-mcp` on your PATH

2 · Add it to opencode. This registers the MCP server and the skill, keeping your config's comments and formatting.

codex-imagegen-mcp install opencode

3 · Sign in with ChatGPT. Skip this if Codex or opencode is already signed in with ChatGPT.

codex-imagegen-mcp login                  # opens the browser; use --device on a headless machine

4 · Check, then ask for pictures

codex-imagegen-mcp doctor                 # Node, credentials, quota, opencode entry, skill
opencode mcp list                         # → ✓ imagegen connected
you › Make a 16:9 hero image of a lighthouse at dusk and save it to assets/hero.png

How it works

sequenceDiagram
    autonumber
    participant A as Your agent<br/>(opencode, Claude Code…)
    participant M as imagegen MCP server<br/>(local · stdio)
    participant O as auth.openai.com
    participant C as chatgpt.com<br/>/backend-api/codex
    A->>M: generate_image {prompt, aspect_ratio, background}
    M->>M: pick credentials: own sign-in → Codex → opencode
    opt token expires within 5 minutes
        M->>O: refresh (under a cross-process lock)
        O-->>M: new access token + rotated refresh token
    end
    M->>C: POST /images/generations · Bearer token · ChatGPT-Account-ID
    loop every 5 s while the image renders
        M-->>A: progress notification (keeps the client's timeout alive)
    end
    C-->>M: PNG + usage headers
    M->>M: save without overwriting · verify alpha · build preview
    M-->>A: path, size, background + a 1024 px preview

It sends the same request as the image tool built into the Codex app, byte for byte. As OpenAI improves Codex's image model on the server, this server gets the same upgrade. How that was reverse-engineered →

Signing in

You already have…

What happens

Codex (CLI or desktop app) signed in with ChatGPT

Works immediately. The server borrows ~/.codex/auth.json read-only.

opencode signed in with OpenAI → ChatGPT Plus/Pro

Works immediately. It borrows ~/.local/share/opencode/auth.json read-only.

Neither, or you want an independent sign-in

Run codex-imagegen-mcp login, or ask your agent to call the sign_in tool.

codex-imagegen-mcp login            # browser → sign in → "You're signed in to Codex ImageGen MCP"
codex-imagegen-mcp login --device   # SSH/headless: enter a code at auth.openai.com/codex/device
codex-imagegen-mcp status           # account, plan, credential source and usage windows
codex-imagegen-mcp logout           # remove and revoke this tool's own sign-in
IMPORTANT

OpenAI refresh tokens aresingle-use. Borrowed sign-ins are therefore never refreshed or modified, so this server can't sign you out of Codex or opencode. Its own tokens are stored 0600 and refreshed under a lock shared by every server process. Authentication in depth →

Tools

Tool

What it does

Key parameters

generate_image

A new image from a prompt

prompt · aspect_ratio · background · n · output_path

edit_image

Edit images, or generate from 1–5 references

images · prompt · same options

remove_background

Cut a flat backdrop out locally (no quota)

input_path · key_color (auto) · output_path

auth_status

Sign-in, plan, credential source, usage windows

check_usage

sign_in

Start a ChatGPT sign-in and return a link or code for you

method (browser · device)

The server also exposes the resources imagegen://history, imagegen://images/{id} and imagegen://skill/*, and the prompts generate and edit. In opencode the prompts appear as /imagegen:generate and /imagegen:edit. Full reference →

From the terminal

The CLI uses the same engine as the MCP tools:

codex-imagegen-mcp generate "a watercolor fox in a snowy forest" -a 16:9 -o art/fox.png
codex-imagegen-mcp generate "Image 1: add a tiny straw hat; keep everything else" \
  -i assets/cactus.png -b transparent -o assets/cactus-hat.png
codex-imagegen-mcp remove-bg sprite-on-green.png -o sprite.png
codex-imagegen-mcp config claude-code     # print the setup for another client

Other clients

Client

Setup

opencode

codex-imagegen-mcp install opencode (automated, reversible with uninstall)

Claude Code

claude mcp add --scope user imagegen -- node /path/to/dist/src/cli.js serve

Claude Desktop · Cursor · VS Code · Windsurf · Gemini CLI · Codex

codex-imagegen-mcp config <client> prints a ready-to-paste config

Per-client guidance, including where each one loads skills from: docs/CLIENTS.md.

Documentation

FAQ

No extra money. Images come out of your ChatGPT plan's Codex usage limits, the same as images you make in the Codex app. codex-imagegen-mcp status (or the auth_status tool) shows the 5-hour and weekly windows, and checking them uses no quota.

Yes. The endpoint, request body and auth headers are identical to the ones the Codex desktop app sends. The service picks the model, resolution and quality itself, for Codex and for this server alike.

Not with a ChatGPT sign-in. The service ignores model, size, quality and n. That was measured, including requests for the newer gpt-image-2.5-sunburst and -flare models, and the tools deliberately don't pretend otherwise. Choose the shape with aspect_ratio; for exact pixels, resize or crop afterwards. Selecting a model explicitly requires the billed OpenAI Platform API, which is out of scope by design. The measurements →

They go to output_path, relative to your workspace, when you give one. Otherwise they land in the image library at ~/.local/share/codex-imagegen-mcp/images/<date>/. Every file is also recorded in imagegen://history. Existing files are never replaced unless you pass overwrite: true.

No. Borrowed sign-ins are read-only: they're used while their access token is valid and are never refreshed or written. Its own sign-in (login) is independent. Why that matters →

No. It's an unofficial integration that uses the same public OAuth client and internal ChatGPT endpoints as the Codex CLI, as opencode's ChatGPT sign-in also does. Those interfaces are undocumented and may change. Use it within OpenAI's Terms of Use.

Configuration

Variable

Default

Purpose

CODEX_IMAGEGEN_HOME

~/.local/share/codex-imagegen-mcp

Credentials, history, logs and the default image library

CODEX_IMAGEGEN_OUTPUT_DIR

$CODEX_IMAGEGEN_HOME/images

Where images go when no output_path is given

CODEX_IMAGEGEN_CREDENTIALS

auto

auto (own → Codex → opencode), or pin own, codex or opencode

CODEX_IMAGEGEN_TIMEOUT_MS

300000

Per-request timeout for the image service

CODEX_IMAGEGEN_LOG_LEVEL

info

debug, info, warn, error or silent; the log is $CODEX_IMAGEGEN_HOME/server.log

CODEX_IMAGEGEN_NO_BROWSER

unset

Never open a browser automatically

CODEX_HOME

~/.codex

Where to look for a Codex sign-in

CODEX_IMAGEGEN_ORIGINATOR

codex-imagegen-mcp

The originator identifying this client to OpenAI

Test-only overrides: CODEX_IMAGEGEN_BASE_URL, CODEX_IMAGEGEN_USAGE_URL, CODEX_IMAGEGEN_AUTH_ISSUER, CODEX_IMAGEGEN_CLIENT_ID, CODEX_IMAGEGEN_OPENCODE_AUTH_FILE.

Troubleshooting

Start with codex-imagegen-mcp doctor. It checks Node, the data directory, credentials, backend reachability and quota, the sign-in ports, the opencode entry and duplicate skills.

Symptom

Fix

Not signed in

codex-imagegen-mcp login (or --device), or open Codex/opencode once so their sign-in refreshes

usage limit … resets in …

Wait for the reset; status shows the windows

ports 1455 and 1457 are busy

Another Codex or opencode login is waiting. Finish it, or use login --device

Device-code sign-in is not enabled

ChatGPT → Settings → Security → allow device code authorization for Codex

Tools missing in opencode

Check opencode mcp list, re-run install opencode, then restart opencode

An opaque result despite transparent

Retry, or generate on a flat #00FF00 backdrop and run remove_background

Still stuck? See getting help.

Contributing

Bug reports, docs fixes, support for more clients and backend measurements are welcome. Start with CONTRIBUTING.md; security issues go through SECURITY.md, never public issues. Every release is listed in the changelog.


Available Tools

5 tools
auth_statusSign-in and quota statusA
Read-onlyIdempotent

Show whether image generation is signed in, which ChatGPT account/plan and credential source is used, and the current usage-limit windows. Costs no image quota. Call this when a tool reports an auth or quota problem, or after sign_in.

ParametersJSON Schema
NameRequiredDescriptionDefault
check_usageNoAlso fetch current usage/quota from ChatGPT (default true).

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context: that it costs no image quota, which is not in annotations. This extra detail helps the agent understand the cost-free nature of the call, but it doesn't describe other behavioral traits like response format, which is acceptable given no output schema.

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, front-loaded with the core purpose, and includes a clear usage trigger. Every sentence serves a purpose: defining the tool, noting the non-cost, and specifying when to call it. No wasted words.

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?

For a read-only status tool with no required parameters and full schema coverage, the description is complete. It covers what it reports, the absence of quota cost, and when to use it. The output format is not described, but without an output schema, this is acceptable for a simple status check. The tool is simple enough that nothing critical is missing.

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 description coverage is 100%, so the schema fully documents the 'check_usage' parameter. The description does not add additional meaning beyond the schema, but it does mention usage-limit windows, which aligns with 'check_usage'. Since the schema is complete, a baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states what the tool does: shows sign-in status, account/plan, credential source, and usage-limit windows. It distinguishes itself from siblings like sign_in and generate_image by focusing on status rather than action. However, it could be slightly more specific about the tool's name, but the resource is clear.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this tool: when another tool reports an auth or quota problem, or after sign_in. This provides clear context and routes the agent correctly. It also implies when not to use it (e.g., for actual image generation), which is helpful.

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

edit_imageEdit imageA

Edit or transform existing images, or create a new image guided by reference images, using the user's ChatGPT plan (no API key). Pass 1-5 images; refer to them in the prompt as Image 1, Image 2… (Image 1 is the primary edit target). State exactly what must change AND what must stay unchanged. Good for background replacement or removal, object removal/insertion, restyling, relighting, text localization, compositing and sketch-to-render. The input file is never modified; the result is saved as a new file.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber of variants of this same prompt, 1-4 (default 1). Each variant is a separate request against the user's ChatGPT image quota. For several different assets make one call per asset instead.
imagesYes1-5 input images: local file paths (absolute, ~/…, or relative to the workspace root), http(s) URLs, or data:image/…;base64 URLs. PNG, JPEG or WebP, up to 15 MB each.
promptYesEdit instructions, e.g. "Image 1: replace only the sky with a warm sunset; keep the building, people and framing unchanged."
overwriteNoReplace an existing file at output_path (default false).
backgroundNoBackground: "transparent" returns a PNG with a real alpha channel (cutouts, sprites, icons, stickers, logos); "opaque" asks for a filled background (a hint — also describe the backdrop in the prompt); "auto" (default) lets the service decide.auto
output_pathNoWhere to save: a .png/.jpg/.jpeg file path or a directory, absolute or relative to the workspace root. Omit to save in the server's image library (outside the project). Existing files are never replaced unless overwrite=true (a -2, -3… sibling is used instead); with n>1 a -1, -2… suffix is added.
aspect_ratioNoCanvas shape: auto (default), 1:1, 4:5, 5:4, 4:3, 3:4, 3:2, 2:3, 16:9, 9:16, 21:9 or 9:21. The service chooses the exact pixel size from the prompt; this adds an explicit aspect-ratio line to it.auto
output_formatNoFile format: png (default) or jpeg (converted locally; cannot be transparent). Inferred from output_path's extension when given.
include_previewNoAttach a downscaled preview so you can check the result visually (default true). Set false to save tokens.

Output Schema

ParametersJSON Schema
NameRequiredDescription
imagesYesSaved images (full resolution).
promptYesThe exact prompt sent to the image service.
failuresYesErrors for variants that failed (partial success).
warningsYes
elapsed_msYes

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the annotations, the description adds meaningful behavioral context: the operation uses the user's ChatGPT plan with no API key, the input file is never modified, and the result is saved as a new file. This complements destructiveHint=false and readOnlyHint=false without contradicting them.

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 dense but efficient: core capability first, then usage protocol, then example use cases, then a safety guarantee. Every sentence contributes, and no space is wasted on restating the title or repeating schema details.

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

Completeness4/5

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

For a tool with 9 parameters and rich schema documentation, the description is largely complete: it covers the core workflow, prompt construction, non-modifying behavior, and output-file semantics. The only minor gap is explicit routing to sibling tools such as remove_background or generate_image in edge cases, but the strong schema compensates elsewhere.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, and the description adds extra value by specifying the prompt convention ('Image 1, Image 2…') and the Image 1 primary-target rule. It also clarifies that edits should explicitly preserve unchanged content, which is not fully captured by the schema's brief prompt example.

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 states a specific verb-resource pair: 'Edit or transform existing images, or create a new image guided by reference images.' It enumerates concrete use cases and clearly distinguishes this reference-driven editing/creation tool from a plain text-to-image generator by requiring 1-5 reference images.

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 gives explicit, actionable guidance: pass 1-5 images, refer to them as Image 1, Image 2..., keep Image 1 as the primary target, and state both what must change and what must stay unchanged. It does not explicitly name sibling alternatives like generate_image or remove_background, but the intended context is clear and practical.

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

generate_imageGenerate imageA

Generate a new raster image (photo, illustration, texture, sprite, mockup, icon, product shot…) from a text prompt, using the user's ChatGPT plan — the same image service as OpenAI Codex's built-in image tool, no API key. Saves the full-resolution file and returns its path plus a preview. The service chooses resolution and quality; steer orientation with aspect_ratio or in the prompt. Use background="transparent" for assets that need real alpha. Typically takes 15-60 s.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNoNumber of variants of this same prompt, 1-4 (default 1). Each variant is a separate request against the user's ChatGPT image quota. For several different assets make one call per asset instead.
promptYesFull image description. Structure it: use case, subject, style/medium, composition, lighting, palette, exact text in quotes, constraints/avoid.
overwriteNoReplace an existing file at output_path (default false).
backgroundNoBackground: "transparent" returns a PNG with a real alpha channel (cutouts, sprites, icons, stickers, logos); "opaque" asks for a filled background (a hint — also describe the backdrop in the prompt); "auto" (default) lets the service decide.auto
output_pathNoWhere to save: a .png/.jpg/.jpeg file path or a directory, absolute or relative to the workspace root. Omit to save in the server's image library (outside the project). Existing files are never replaced unless overwrite=true (a -2, -3… sibling is used instead); with n>1 a -1, -2… suffix is added.
aspect_ratioNoCanvas shape: auto (default), 1:1, 4:5, 5:4, 4:3, 3:4, 3:2, 2:3, 16:9, 9:16, 21:9 or 9:21. The service chooses the exact pixel size from the prompt; this adds an explicit aspect-ratio line to it.auto
output_formatNoFile format: png (default) or jpeg (converted locally; cannot be transparent). Inferred from output_path's extension when given.
include_previewNoAttach a downscaled preview so you can check the result visually (default true). Set false to save tokens.

Output Schema

ParametersJSON Schema
NameRequiredDescription
imagesYesSaved images (full resolution).
promptYesThe exact prompt sent to the image service.
failuresYesErrors for variants that failed (partial success).
warningsYes
elapsed_msYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important behaviors: it saves the full-resolution file, returns a path plus preview, lets the service choose resolution and quality, typically takes 15-60 seconds, and requires no API key while using the user's ChatGPT plan. It also notes that the service controls resolution, which is useful operational context and contradicts nothing in the annotations.

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 four tight sentences with no filler. It front-loads the core purpose, then adds useful behavioral and usage details (output, resolution control, alpha guidance, expected latency) in order of importance.

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 rich input schema, output schema, and annotations, the description is complete enough for an agent to invoke the tool correctly. It covers what the tool creates, how the result is returned, how to control key parameters, quota/cost context, and expected runtime. No critical call-related detail is missing.

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

Parameters4/5

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

Schema coverage is 100% and each parameter already has rich descriptions, so the baseline is 3. The description adds extra meaning by explaining when transparent backgrounds are appropriate, how aspect_ratio can steer orientation, and that multiple variants count against quota. That additional context lifts it above baseline, though the schema already does most of the work.

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 states a specific verb ('Generate') and resource ('new raster image'), enumerates concrete use cases (photo, illustration, texture, sprite, mockup, icon, product shot), and emphasizes that it creates a new asset rather than editing one. This makes it clearly distinct from the sibling edit_image and remove_background tools.

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?

It provides clear context for when to use the tool: to create raster images from a text prompt and save them with a preview. It also gives targeted guidance such as using background="transparent" for assets needing alpha and steering orientation with aspect_ratio. However, it never explicitly contrasts with edit_image or remove_background or states when not to use it, so it stops short of a 5.

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

remove_backgroundRemove flat background (chroma key)A
Idempotent

Locally remove a flat, solid-color background from a PNG/JPEG and save a transparent PNG — no network, no quota. Use for images with a uniform backdrop (e.g. generated "on a flat pure #00ff00 background"), or to clean up a cutout. The key color is sampled from the image border unless key_color is given. Prefer background="transparent" on generate_image/edit_image when creating new assets.

ParametersJSON Schema
NameRequiredDescriptionDefault
despillNoRemove key-color fringe/spill on edge pixels (default true).
key_colorNoBackground color to remove as hex, e.g. #00ff00. Default: auto-detected from the image border.
overwriteNoReplace an existing file at output_path (default false).
toleranceNoHard-key per-channel tolerance 0-255 (default 12; used when soft_matte=false).
input_pathYesPNG or JPEG to process (absolute or relative to the workspace root).
soft_matteNoSmooth alpha ramp for anti-aliased edges (default true). false = hard key using tolerance.
output_pathNoDestination .png (default: <input>-transparent.png next to the input). Never overwrites unless overwrite=true.
edge_featherNoBlur radius for softened alpha edges, 0-64 (default 0).
edge_contractNoShrink the matte by this many pixels before feathering, 0-16 (default 0).
include_previewNoAttach a downscaled preview so you can check the result visually (default true). Set false to save tokens.
opaque_thresholdNoSoft matte: color distance at or above which pixels stay fully opaque (default 96).
transparent_thresholdNoSoft matte: color distance at or below which pixels become fully transparent (default 12).

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses local execution ('no network, no quota') and the key color sampling behavior ('sampled from the image border unless key_color is given'), adding value beyond annotations. Annotations already cover readOnly/destructive/idempotent hints, and the description does not contradict them. It doesn't mention overwrite behavior, but that's in the schema.

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?

Two sentences with zero fluff. The core function and key differentiator (local, no quota) are front-loaded; the usage guidance and sampling detail follow logically. Every clause earns its place.

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

Completeness4/5

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

Given 12 parameters but 100% schema coverage and no output schema, the description covers purpose, usage, and one parameter's default behavior. It also names alternatives. It doesn't explain return values, but without an output schema that's not required. The tool is well-scoped and the description is sufficient.

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 description coverage is 100%, so all 12 parameters are documented there. The description adds context only for key_color (border sampling) and mentions input_path implicitly. Per the rubric, high coverage sets a baseline of 3, and the description adds a small increment for key_color but nothing for other parameters like despill or soft_matte.

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 states a precise verb-resource pair: 'remove a flat, solid-color background from a PNG/JPEG and save a transparent PNG'. It distinguishes from siblings by explicitly recommending generate_image/edit_image with background='transparent' for new asset creation, making its niche clear.

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

Usage Guidelines5/5

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

It gives explicit usage scenarios: 'Use for images with a uniform backdrop' or 'to clean up a cutout'. It also provides a clear exclusion: 'Prefer background="transparent" on generate_image/edit_image when creating new assets', so an agent knows exactly when to pick this tool over alternatives.

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

sign_inSign in with ChatGPTA
Idempotent

Start signing this image server in to the user's ChatGPT account (required once before generating, unless an existing Codex/opencode ChatGPT sign-in is detected). Returns a link (browser method) or a code (device method) that the USER must open or enter — relay it verbatim. Sign-in completes in the background; afterwards call auth_status to confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoStart a new sign-in even if already signed in (e.g. to switch accounts). Default false.
methodNo"browser" (default): the user opens a link on THIS machine (redirects to localhost:1455). "device": the user enters a code at auth.openai.com/codex/device from any device — use for remote/headless machines.browser
open_browserNoTry to open the link in the local browser automatically (browser method; default true).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already convey read-only false, open-world true, idempotent true, and non-destructive. The description adds valuable behavioral context beyond those flags: it returns a user-facing link or code that must be relayed verbatim, sign-in completes in the background, and auth_status is the confirmation mechanism. This is solid but stops short of describing failure modes or timeouts.

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 three sentences with no wasted words. It front-loads the purpose and prerequisite, then explains the output and follow-up action. Every sentence earns its place.

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

Completeness4/5

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

Given there is no output schema, the description correctly explains what the agent will receive (link or code) and how the user must act on it. It also tells the agent to call auth_status to confirm completion. This is nearly complete, though it could mention what to do if the user fails to complete the sign-in or if the returned link/code expires.

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 description coverage is 100%, so the parameters are already fully documented with their defaults and meanings. The description reinforces the browser/device distinction without adding materially new parameter-level semantics. The 'relay it verbatim' instruction is about the output, not the parameters, so the baseline 3 is appropriate.

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 states a specific action (starting sign-in), the resource (the image server's ChatGPT account), and the prerequisite context (required before generating unless an existing sign-in is detected). It also clearly distinguishes sign_in from the sibling auth_status by explaining that auth_status is the follow-up confirmation step.

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 gives clear context: sign-in is needed once before generating, unless an existing sign-in is detected, and auth_status should be called afterward to confirm. It does not explicitly tell the agent to check auth_status before calling sign_in, but the 'unless an existing sign-in is detected' phrasing implies that pre-check. Slightly more explicit when-not-to-use guidance would earn a 5.

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. 5 tool updatesv0.1.2
    • First observedauth_status
    • First observededit_image
    • First observedgenerate_image
    • First observedremove_background
    • First observedsign_in

TDQS

A4.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a unique purpose: generate_image creates new images, edit_image modifies existing ones, remove_background handles a specific transformation, auth_status checks state, and sign_in handles authentication. There is no overlap or ambiguity; an agent can reliably choose the right tool for the task.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: generate_image, edit_image, remove_background, auth_status, sign_in. Even though auth_status is more of a state query, it fits the pattern well. The naming is predictable and easy to infer.

Tool Count5/5

Five tools is ideal for an image generation server. It covers creation, editing, a specific utility, plus auth and status checks—everything needed without unnecessary surface. The scope is clear and each tool earns its place.

Completeness5/5

The tool surface fully covers the domain: generation, editing, background removal, and authentication. There are no missing operations that would cause dead ends; users can create, modify, and manage sessions seamlessly. The lifecycle is complete for this server's intended functionality.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers