ChatGPT Subscription MCP
Enables asking OpenAI questions, continuing conversations, and generating or editing images through a ChatGPT subscription using the official Codex local interface, including polling and cancelling jobs and retrieving generated images.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ChatGPT Subscription MCPAsk OpenAI to critique this product idea, then compare it with your answer."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ChatGPT Subscription MCP
Ask OpenAI questions and generate or edit images from Claude Desktop, using your ChatGPT subscription through the official Codex local interface. No OpenAI API key required.
Claude launches the bridge and its Codex backend automatically. You do not need to keep ChatGPT, Codex Desktop, or a terminal window open. Your computer and Claude must remain running while a job finishes.
This is an unofficial local integration, not an OpenAI or Anthropic product. It provides Codex-backed conversations and built-in image generation; it does not expose every ChatGPT feature or existing ChatGPT web conversations. Plan eligibility, workspace controls, and normal Codex usage limits still apply.
Open source and community
All project-owned code is public under the MIT license: the MCP server, Claude setup helper, tests, extension manifest, build scripts, and CI. There is no private edition or separate proprietary bridge component. You can fork it, change it, and submit improvements.
Start with the contributor guide and roadmap. Use Discussions for questions and design ideas, Issues for reproducible bugs and feature proposals, and pull requests to contribute changes. Setup, clearer errors, image previews, and cross-platform testing are especially welcome.
The development guide maps the code and explains how to work without a subscription. The release guide documents how the downloadable extensions are built from public source. Third-party components keep their own licenses; OpenAI's hosted models and services are external dependencies and are not included in this project's license. See third-party notices.
Related MCP server: gpt-image-2-combined
Install in Claude Desktop
Desktop extension
Download the
.mcpbmatching your operating system and CPU architecture from Releases. Never install a Windows bundle on macOS or an x64 bundle on ARM.In Claude Desktop, open Settings → Desktop app → Extensions → Advanced settings → Install Extension. Older Claude versions place Extensions directly in Settings.
Select the downloaded bundle. It includes the bridge and its pinned Codex runtime.
Ask Claude: “Check chatgpt_status. If I need to sign in, call chatgpt_login and give me the login link.” Open the link and sign in with your ChatGPT account. Existing Codex ChatGPT sign-in is reused.
Ask Claude to generate an image or ask OpenAI a question.
Claude must allow local desktop extensions, and its extension Node runtime must support Node 22 or later. There is no API key field. A custom extension is not the same as a remote connector: do not paste localhost into Claude's web connector dialog.
If no release bundle matches your platform, install from source below. Bundles are unsigned custom extensions, not reviewed directory listings.
From source: Windows, macOS, Linux MCP clients
Install Node.js 22 or later and Git, then:
git clone https://github.com/corith37/chatgpt-subscription-mcp.git
cd chatgpt-subscription-mcp
npm ci
npm run doctorIf doctor reports that ChatGPT sign-in is required:
npm run loginThen install the Claude Desktop configuration:
npm run setupFully quit and reopen Claude Desktop. Setup preserves other MCP servers and preferences, backs up changed files, and uses absolute paths. On Windows it handles both the ordinary and Microsoft Store Claude config locations. Re-running setup is safe. Keep the cloned folder in place; rerun setup after moving it.
To select a config explicitly:
npm run setup -- --config /absolute/path/to/claude_desktop_config.jsonOn Windows PowerShell, use npm.cmd if your execution policy blocks npm.ps1. Claude Desktop availability and local extension support vary by OS; the server itself also works with other local MCP clients on Linux.
Other MCP clients / Claude Code
Configure a local stdio server:
{
"mcpServers": {
"chatgpt-subscription": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/chatgpt-subscription-mcp/src/cli.js"]
}
}
}Windows JSON paths need escaped backslashes (or forward slashes). Run the Node entry directly, rather than npm start, to keep stdout free of npm messages. Claude Code can register this same command using its local MCP configuration. This project does not provide a public HTTP server or a claude.ai/mobile remote connector.
Use it
Examples to ask Claude:
“Ask OpenAI to critique this product idea, then compare its answer with yours.”
“Generate a square watercolor illustration of a fox reading beside a window.”
“Edit
C:/Users/me/Pictures/portrait.png: replace the background with a pale blue studio backdrop.”“Continue that OpenAI conversation and ask for three alternatives.”
“Cancel the image job that is still running.”
Tool | Purpose |
| Check login, models, limits, and data location |
| Start the official browser login and return its URL |
| Submit a question or conversation follow-up |
| Generate or edit an image, optionally with local references |
| Poll a job and retrieve text, images, and a conversation ID |
| Request cancellation |
| Retrieve a generated image by its job and image IDs |
Submission tools return immediately with job_id. Claude should call chatgpt_job with wait_seconds: 20 until completed, failed, cancelled, or interrupted. Image generation can take several minutes. Polling does not submit the prompt again. One generation runs at a time, with up to 16 queued requests per bridge process.
Pass conversation_id from a previous job to continue it. Conversations and completed job results survive a restart. A restart interrupts in-flight jobs; they are never silently retried. Cancellation cannot refund usage already consumed.
Image requests accept up to four local PNG/JPEG/WebP references, each up to 20 MiB. References must already exist on the same computer as the bridge: an attachment inside Claude is not necessarily a local file path. Describe desired size, transparency, composition, and edits in the prompt; these are model instructions, not guaranteed API parameters. Generated images up to 4 MiB are returned inline. Larger images are saved locally, with their full paths returned.
How it works
flowchart LR
C[Claude Desktop] -->|local MCP stdio| B[Node bridge]
B -->|local app-server JSON-RPC| X[Bundled Codex CLI]
X -->|ChatGPT sign-in| O[OpenAI subscription services]
O --> X
X -->|text and image bytes| B
B -->|job result and inline image| CThe bridge uses the documented Codex app-server interface and native imageGeneration events. It does not scrape chatgpt.com, automate a hidden browser, extract cookies, copy access tokens, or fall back to billable API calls. The backend owns sign-in and token refresh. See the design and feasibility notes for the options considered and remaining limitations.
Settings and local data
Environment variable | Default / behavior |
|
|
| Account default from |
| Bundled Codex; optional absolute native executable path |
| Codex default |
Setup carries these explicit environment settings into the Claude configuration. Do not put API keys or passwords there. The source install uses the pinned @openai/codex dependency and does not upgrade or replace your globally installed CLI.
The data directory contains completed responses, image files, copied reference inputs, job metadata, and bridge-to-Codex conversation mappings. Codex separately retains its normal conversation/authentication state. Treat both directories as private. Data is not automatically deleted; close the bridge before removing its local data directory. Deleting it does not delete Codex's own saved conversations. Uninstalling the extension or removing its config entry stops future use; it does not log you out of other Codex clients.
Troubleshooting
Symptom | Next step |
No tools in Claude | Fully quit/reopen Claude, check local extension policy and logs, run |
Not signed in / API-key login detected | Use |
Model unavailable | Run doctor; remove a stale model override; update the bridge for a newer pinned runtime |
No image returned | Read the job error; account eligibility, service refusals, and limits still apply |
Job stays running | Poll the same ID; cancel if needed; the bridge times out after ten minutes |
| Review available results; explicitly submit a new request if desired |
Reference image unavailable | Supply an absolute path to a local image the bridge can read |
Image exceeds inline size | Open the returned local path; the original file is retained |
Login link stops working | Keep Claude open, request a fresh login link, and complete it on this computer |
Development and verification
npm ci
npm test
npm audit
npm run bundleTests use a fake backend and a real MCP stdio client; they require no account. CI tests Node 22/24 on Windows, macOS, and Linux. npm run bundle creates a platform-specific .mcpb and SHA-256 checksum under dist/. Bundling never includes your login, generated images, or local configuration.
Optional live checks consume your plan limits:
npm run smoke
npm run smoke -- --image --editOn 2026-10-26, the full live flow was verified on Windows x64 with ChatGPT Plus and Codex 0.164.0: text, conversation continuation, image generation, image retrieval, and editing a reference image. Other platforms are covered by automated CI, but a passing unit test does not establish live account eligibility. Upstream app-server behavior is version-dependent and experimental; dependencies are pinned and the lockfile is committed.
See SECURITY.md, CONTRIBUTING.md, and third-party notices. The bridge is MIT licensed; bundled components retain their own licenses.
Available Tools
7 toolschatgpt_askA
Ask the subscription-backed OpenAI assistant a question or continue its conversation. Uses plan limits. Returns a background job; poll chatgpt_job for the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Optional model ID from chatgpt_status. Defaults to the account default. | |
| prompt | Yes | The complete question, generation prompt, or image-edit instructions. | |
| conversation_id | No | Continue a conversation returned by this bridge. | |
| reference_images | No | Absolute local paths to PNG, JPEG, or WebP reference images. Only attach files the user intends to share. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover openWorldHint, idempotentHint=false and destructiveHint=false. The description adds genuinely useful behavior not in the annotations: subscription-backed auth, 'uses plan limits' (quota constraint), and the asynchronous contract returning a background job that must be polled via chatgpt_job.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, then the quota caveat, then the async follow-up. Every sentence carries a distinct fact with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async tool with no output schema, the description supplies the critical missing piece: it returns a job, not an answer, and chatgpt_job is how to retrieve it. Minor gaps remain (whether the job handle is returned inline, whether conversation_id is echoed back), but the agent can call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents prompt, model, conversation_id, and reference_images including the 4-image cap. The description only gesture at the conversation parameter via 'continue its conversation', adding no format or constraint detail beyond the schema — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Ask the subscription-backed OpenAI assistant a question') and adds the continue-conversation mode. It does not explicitly distinguish itself from chatgpt_generate_image, even though reference_images makes that boundary relevant, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the two modes ('a question or continue its conversation') and the follow-up instruction to poll chatgpt_job. There is no explicit when-not guidance or named alternative for image generation versus text prompting, which an agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_cancelAIdempotent
Cancel a queued or running generation. Usage already consumed is not refunded. Poll the job to confirm terminal status.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotent, non-destructive and open-world, so the description adds real value beyond them: that consumed usage is not refunded and that cancellation is asynchronous and must be confirmed by polling. It does not state whether cancellation succeeds for already-terminal jobs, which is the remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, action first, then the cost caveat, then the required follow-up. Every sentence carries distinct information with no repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with no output schema, this covers the essentials: what is canceled, the billing consequence, and the verification step. Only the origin and format of job_id is missing for an agent to act without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, but it never mentions job_id — neither its format (the schema pattern is the only clue) nor where the agent obtains it (presumably from chatgpt_ask/generate). With a single self-describing required parameter the gap is modest, but it is not compensated for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Cancel a queued or running generation') and scopes it to two job states, which separates it from generate/ask siblings. It doesn't name chatgpt_job or chatgpt_status explicitly, so the sibling boundary is only implied by the 'poll the job' sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Queued or running' implicitly excludes finished jobs and 'Poll the job to confirm terminal status' gives a follow-up path, so usage is inferable. However, no alternative tool is named and there is no explicit guidance on what to do if the job is already terminal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_generate_imageA
Generate a real image, or edit reference images, with built-in OpenAI image generation using ChatGPT subscription limits. Describe size, composition, transparency and edits in the prompt. Returns a background job; poll chatgpt_job. No image is promised until the job completes.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Optional model ID from chatgpt_status. Defaults to the account default. | |
| prompt | Yes | The complete question, generation prompt, or image-edit instructions. | |
| conversation_id | No | Continue a conversation returned by this bridge. | |
| reference_images | No | Absolute local paths to PNG, JPEG, or WebP reference images. Only attach files the user intends to share. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses that generation uses ChatGPT subscription limits, returns a background job, and promises no image until completion. It does not cover failure modes, rate-limit specifics, or output retrieval beyond polling chatgpt_job.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and appropriately sized. The final sentence about no promised image slightly overlaps with the polling instruction, but it reinforces an important async expectation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an async image-generation tool with no output schema, it covers the essential workflow: generate/edit, prompt content, background job, and polling. It could be more complete by mentioning how to retrieve the resulting image or referencing chatgpt_read_image.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are already documented. The description adds useful prompt guidance about describing size, composition, transparency, and edits, but it does not explain model, conversation_id, or reference_images beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: generate or edit images. It distinguishes itself from text siblings by naming image generation and editing, and it points to the async workflow via chatgpt_job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly establishes the tool for image generation/editing and tells the agent to poll chatgpt_job after invocation. It lacks explicit when-not guidance or a direct comparison to sibling tools like chatgpt_ask or chatgpt_read_image.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_jobARead-only
Retrieve a generation job, response text, conversation ID, and image paths. Completed small images are returned inline. Poll running jobs; do not resubmit the original request.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| wait_seconds | No | ||
| include_images | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds useful behavioral details: completed small images are returned inline, and running jobs should be polled rather than resubmitted. These points clarify runtime behavior that the annotations alone do not convey. It still does not mention rate limits or authentication requirements, but the added context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with zero redundancy. It front-loads the retrieval purpose and then adds operational constraints and return behavior in an efficient sequence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately mentions returned fields and inline images. However, for a tool with three parameters at 0% schema description coverage, the missing explanation of wait_seconds and include_images leaves the definition incomplete for an agent to invoke it optimally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate but does not. It never mentions the job_id, wait_seconds, or include_images parameters directly, leaving wait_seconds and include_images completely unexplained. The inline image statement loosely touches include_images behavior but is not explicit parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool retrieves a generation job along with its response text, conversation ID, and image paths. It distinguishes itself from a generic status tool by specifying the job-specific output. However, it does not explicitly contrast itself with the sibling chatgpt_status or chatgpt_ask tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Poll running jobs; do not resubmit the original request' gives a clear usage context for this tool. However, it does not name alternative tools or explain when to use chatgpt_status versus chatgpt_job, leaving some ambiguity for an agent deciding between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_loginA
Begin ChatGPT browser sign-in when the user asks to connect their account. Returns a URL for the user to open; never ask for a password or token in chat.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare openWorldHint and destructiveHint=false, so the description carries the real behavioral load: it discloses that the call returns a URL to open and adds a security constraint ('never ask for a password or token in chat'). It stops short of stating whether a login attempt expires, can be repeated, or is superseded by chatgpt_cancel.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and its trigger, followed by the return behavior and the credential-safety warning. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly fills the gap by explaining the return value (a URL for the user to open) and the credential-handling constraint. It lacks only lifecycle context — what happens on repeat calls and how it relates to chatgpt_status/chatgpt_cancel.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing the description could add on parameter semantics. The schema is empty and fully consistent with a no-argument login trigger.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Begin ChatGPT browser sign-in') and names the concrete output ('Returns a URL'), which clearly separates it from siblings like chatgpt_status, chatgpt_cancel, and chatgpt_ask. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'when the user asks to connect their account.' However, it names no exclusions or alternatives — for example, it doesn't say to check chatgpt_status first, or that chatgpt_cancel aborts a pending login, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_read_imageARead-only
Return a previously generated image inline using job and image IDs. Only reads images produced by this bridge, up to 4 MiB per image.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| image_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: results are returned inline (not as a link), only bridge-produced images are readable, and there is a 4 MiB per-image ceiling — a constraint an agent cannot see anywhere else.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding, with the core action and the retrieval identifiers front-loaded and the constraints trailing. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read with no output schema, the description covers the essentials: what is returned (image content inline) and the two hard limits (bridge-origin, 4 MiB). It omits failure behavior for unknown or expired IDs, which is the only meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning and it does not. It names 'job and image IDs' but never explains where those IDs come from (presumably chatgpt_generate_image or chatgpt_job), that both are required, or what the identifier format is — even though the schema imposes a strict pattern.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return a previously generated image inline') plus the identifiers used to address it. The word 'previously' implicitly separates it from the sibling chatgpt_generate_image, but the differentiation is left for the agent to infer rather than stated outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Only reads images produced by this bridge' clause tells the agent the scope of valid inputs, which is useful. However, it never says when to call this versus chatgpt_generate_image or chatgpt_job, and gives no guidance on what to do if the image was not produced here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chatgpt_statusARead-only
Check subscription login, available text models, usage limits, and bridge setup without generating content.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description then adds the non-obvious behavioral guarantee that the call does not consume generation/quota ("without generating content"), which is exactly the extra context an agent needs before using it as a cheap pre-flight check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence: verb first, then the list of coverage areas, then the differentiator. Nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and no output schema, the description carries the burden of describing what comes back, and it does so at the category level (login state, models, usage limits, bridge setup). A hint about the response shape or what a failure means would push this to a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly implies a call with no arguments and enumerates the status areas being probed, leaving no ambiguity about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Check") and enumerates the exact resources it reports on: subscription login, available text models, usage limits, bridge setup. The phrase "without generating content" separates it from the generation siblings (chatgpt_ask, chatgpt_generate_image) without needing the schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames a diagnostic/read-only context ("without generating content"), which tells an agent this is the non-consuming probe to run before or instead of generation calls. It stops short of explicitly routing among siblings, e.g. not saying to use chatgpt_login when this reports a logged-out state.
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.
7 tool updates
v0.1.0- First observed
chatgpt_ask - First observed
chatgpt_cancel - First observed
chatgpt_generate_image - First observed
chatgpt_job - First observed
chatgpt_login - First observed
chatgpt_read_image - First observed
chatgpt_status
TDQS
Scored across 7 tools
Each tool targets a distinct phase of the bridge workflow: status, login, cancel, ask, generate_image, job polling, and read_image. The only mild overlap is between chatgpt_job (returns job metadata, text, and image paths) and chatgpt_read_image (returns an image inline), but the descriptions clearly delineate their purposes.
All tools share the chatgpt_ prefix and snake_case formatting, which is highly predictable. The only minor deviation is that some names are action verbs (ask, generate_image, read_image) while others are nouns (status, job), but the convention remains readable and consistent overall.
Seven tools is well-scoped for a subscription bridge, covering authentication, generation, polling, cancellation, and image retrieval without bloat or obvious redundancy.
The surface covers the full core lifecycle: login, status checks, content generation (text and image), job polling, cancellation, and image retrieval. Minor gaps exist, such as no explicit logout or conversation-listing/management tool, but agents can work around these.
Maintenance
Related MCP Connectors
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
- ZionDeskOAuthapp.ziondesk
Connect ChatGPT, Claude, Cursor or VS Code to your Windows PC: files, terminal, browser, apps.
Generate images with your own ChatGPT subscription (Plus, Pro or Team), without spending API credits
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Claude to directly invoke OpenAI's chat models (GPT-4o, GPT-4o-mini, o1-preview, o1-mini) through a Model Context Protocol integration, allowing users to query and compare responses from different AI models within Claude Desktop.11MIT
- AlicenseNot gradedqualityDmaintenanceEnables generating images from text prompts using OpenAI's GPT-Image-2 model within Claude Code and Codex conversations.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude Code Desktop to call OpenAI Codex/GPT-5 and Gemini APIs via stdio MCP, without requiring local CLI tools.MIT
- AlicenseNot gradedqualityAmaintenanceAn unofficial bridge that lets Claude Code control local macOS applications through an existing OpenAI Computer Use installation by launching the signed Codex client and translating MCP compatibility.26 npm13MIT