Skip to main content
Glama

chatgpt-web

Drive your own logged-in ChatGPT web session from an AI agent: an MCP stdio server (mcp_chatgpt_* tools) and a cgweb CLI built on the same core. It attaches over CDP to a Chromium that is already running with your profile, so there is no password handling, no headless login and no scraping of a second account. Built for Hermes Agent on a Linux server; works with any MCP host.

What it gives the agent:

  • one fixed ChatGPT Project (found by name, created if missing, URL cached)

  • new_chat / list_chats / open_chat — new or existing conversation, handle = conversation URL

  • send with file attachments (transcripts, images), wait that polls long Pro replies in ≤15-minute slices, get_reply / save_reply (extracts the biggest ```markdown block to a file), stop, close_chat

  • model selection by URL slug + picker label with verification (CHATGPT_MODEL_SLUG/LABEL)

  • clear error codes (SESSION_LOST, RATE_LIMIT, UPLOAD_UNAVAILABLE, …) returned as tool results

Requirements

  • A Chromium/Chrome started with --remote-debugging-port=9222 --remote-allow-origins=* and a profile that is logged in to chatgpt.com (on a server: Xvfb + noVNC for the one-time login).

  • Python ≥ 3.11. pip install -e . installs playwright (no playwright install needed — we only connect over CDP) and the mcp SDK.

Related MCP server: parley

Install (server, as the agent's user)

cd ~/work && git clone https://github.com/FirstWari/chatgpt-web && cd chatgpt-web
uv venv .venv && uv pip install -e .
.venv/bin/cgweb doctor          # session, models, project, file input

Hermes (~/.hermes/config.yaml):

mcp_servers:
  chatgpt:
    command: /home/hermes/work/chatgpt-web/.venv/bin/python
    args: ["-m", "chatgpt_web.mcp_server"]
    env:
      CHATGPT_PROJECT: "Ders Notları"
      CHATGPT_MODEL_LABEL: "Pro"        # substring expected in the model picker; empty = don't touch the model
      CHATGPT_MODEL_SLUG: ""            # optional ?model= slug
      CHATGPT_WORK_DIR: "/home/hermes/work/lore-engine/results"   # data-only: never the tool/venv/cookie root
    timeout: 900
    connect_timeout: 60

Then copy SKILL.md (and prompts/) to ~/.hermes/skills/research/chatgpt-web/ and restart the gateway. Claude Desktop / Claude Code / Codex use the same command/args/env shape in their own config files.

Environment variables

Var

Default

Meaning

CHATGPT_CDP_URL

http://127.0.0.1:9222

CDP endpoint

CHATGPT_PROJECT

Ders Notları

Project name in the sidebar

CHATGPT_MODEL_LABEL / _SLUG

empty

Model to select; CHATGPT_MODEL_STRICT=1 turns a mismatch into an error

CHATGPT_WORK_DIR

~/work

Only files under here may be attached (send) or written (save_reply). Set it to a data-only dir (e.g. the lecture-results dir), never a directory that also contains code, venvs or cookie files — it is the trust boundary for a prompt-injected reply.

CHATGPT_STATE_DIR

~/work/chatgpt-web

lock, projects.json, debug/ screenshots

CHATGPT_STABLE_SEC

20

Reply must be unchanged this long (and show a Copy button) to count as finished

CHATGPT_MAX_WAIT_SEC

900

Upper bound for one wait/send --wait call

CLI

cgweb status | doctor | list-chats [--query X]
cgweb new-chat                                  # -> {"chat": "tab:...", ...}
cgweb send tab:... --text "Merhaba" --file ~/work/x.txt --wait 300
cgweb wait https://chatgpt.com/c/<id> --timeout 900
cgweb save-reply https://chatgpt.com/c/<id> ~/work/out/notes.md
cgweb check ~/work/out/notes.md                 # words per "### BÖLÜM n"

Design notes

  • Stateless per call: each tool connects, acts, disconnects. Chromium keeps the tabs, so the handle (tab:<targetId> before the first message, the /c/<uuid> URL after) survives across processes.

  • A file lock serialises browser operations (MCP server and CLI can coexist).

  • Completion heuristic: no stop button, no "Thinking" indicator, text hash stable for STABLE_SEC, Copy button present; "Continue generating" is clicked automatically; one automatic Regenerate on "Something went wrong".

  • All selectors live in chatgpt_web/selectors.py with ordered fallbacks.

  • ChatGPT's terms treat UI automation as a grey area; this tool uses your own account, one conversation at a time, with human-like pacing. Use at your own risk.

Stealth measures (measured, 2026-09)

  • Engine: Patchright over connect_over_cdp — no Runtime.enable/Console.enable, so Brotector and rebrowser-bot-detector stay clean (plain Playwright is flagged runtime.enabled within 300 ms).

  • Input: humanize.py — cubic Bezier paths with minimum-jerk timing, Fitts-law durations (MacKenzie 1991 constants), tremor, occasional overshoot; log-normal key hold/flight; typed ≤400 chars, pasted above. Clicks pass isTrusted; the interactive Turnstile demo is solved by a humanized click.

  • Browser environment (server side, not in this repo): headful Chromium on Xvfb 1920×1080, WebGL via ANGLE/SwiftShader (--use-gl=angle --use-angle=swiftshader --enable-unsafe-swiftshader), 200+ font families, WebRtcIPHandling=disable_non_proxied_udp policy (no real-IP leak next to the proxy), no viewport override (inner ≤ outer), consistent Linux UA/platform.

  • Network: tools/warp-rotate — safe WARP egress rotation (shared net.lock, cooldown, daily cap, geo health check against Google's location=unsupported gate); chatgpt-web rotates once automatically when a Cloudflare challenge does not clear.

  • Measurement tools: tools/fpcheck_all.sh (Brotector, rebrowser, browserscan, CreepJS, Turnstile in raw/playwright/patchright modes), tools/turnstile_test.py, tools/dom_dump.py.

Tests

pytest covers the text layer (fence extraction, section stats). Browser behaviour is checked with cgweb doctor and a real conversation.

License

MIT

Available Tools

12 tools
check_fileA

Offline: word count per ### BÖLÜM n section of a saved notes file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral weight; it discloses that the operation is offline and read/compute-oriented (word counting), which suggests no mutation. It does not, however, describe output structure, error behavior, or file expectations beyond calling the file 'saved notes'.

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?

A single front-loaded sentence with no filler; the 'Offline' qualifier and the specific section pattern are immediately visible. Every word contributes.

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

Completeness3/5

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

For a one-parameter tool this is near-sufficient: an agent can infer that calling it with a notes file path yields per-section word counts. Still, the absence of an output schema and any mention of return format or failure modes leaves a moderate gap.

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

Parameters3/5

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

Schema coverage is 0% and the only property is 'path'. The description compensates partially by indicating the path points to a saved notes file containing `### BÖLÜM n` sections, but it omits path conventions such as relative vs absolute paths or accepted file formats.

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?

Description states a specific behavior: counting words per `### BÖLÜM n` section of a saved notes file, offline. This is a concrete verb+resource combination and clearly separates it from the chat-oriented sibling tools.

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

Usage Guidelines3/5

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

The 'Offline' prefix implies the tool is appropriate when a local, network-free word count is needed, but it does not explicitly state when to prefer it over alternatives or provide any exclusions. Usage context is implied rather than stated.

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

close_chatA

Close the browser tab of a chat (the conversation stays in ChatGPT).

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses the key non-destructive behavior: the conversation remains in ChatGPT after the tab is closed. This gives the agent useful safety-relevant context beyond the bare action name.

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 a single, front-loaded sentence with no filler. Every part contributes meaning, and the clarifying parenthetical adds important behavioral information without bloating the text.

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 simple one-parameter close action with no output schema, the description is mostly complete: it states the action and its main side effect. The only notable gap is that the 'chat' parameter is left underspecified, but the tool's simplicity limits the impact.

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

Parameters2/5

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 for the undocumented 'chat' parameter, but it does not. The parameter is only named, with no explanation of what format the chat identifier takes or where it comes from.

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

Purpose5/5

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

The description clearly states a specific verb and resource: it closes the browser tab of a chat. The parenthetical 'the conversation stays in ChatGPT' distinguishes this from ending or deleting a chat, and the action is clearly distinct from sibling tools like open_chat and new_chat.

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

Usage Guidelines3/5

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

The description implies when this tool should be used: when the agent wants to close the tab while preserving the conversation. However, it does not explicitly say when not to use it or mention alternatives such as stop or open_chat.

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

doctorA

Health check: CDP reachable, session state, file input present, available model names, whether the configured project exists. Use when something fails.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses what the health check covers by listing the five checks. But it does not state whether the tool has side effects, what it returns, or how it behaves when a check fails. The diagnostic intent is clear, but some behavioral detail is missing.

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 one compact sentence with a front-loaded purpose, a clear list of checks, and a direct usage instruction. Every word earns its place and there is no redundancy.

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 zero-parameter diagnostic tool, the description covers what it checks and when to use it. The lack of an output schema is not fully compensated by the description, since the return shape is not stated, but the essential invocation context is present.

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?

The tool has zero parameters, so parameter semantics are trivially satisfied. The description does not need to explain parameters, and the empty schema is fully consistent with that.

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 identifies a health-check tool with a specific scope: CDP reachability, session state, file input, model names, and project existence. This is much more specific than a generic status check, but it does not explicitly distinguish itself from the sibling 'status' tool.

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 an explicit usage trigger: 'Use when something fails.' This is useful contextual guidance. However, it does not mention when not to use it or how it differs from alternatives like 'status' or 'check_file'.

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

get_replyA

Read an assistant reply without waiting. index=-1 is the newest. reply_format: text | blocks | largest_markdown | all.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
indexNo
reply_formatNotext

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It usefully discloses that the tool is non-blocking and explains index semantics and reply_format options. However, it does not describe behavior when no reply is available, whether chat refers to the active chat, or what happens with invalid indices or formats.

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 extremely compact: one action sentence followed by two terse parameter explanations. Every sentence earns its place, and the core purpose is front-loaded.

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

Completeness3/5

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

For a simple read tool with no annotations and no output schema, the description is reasonably complete but still leaves gaps. It covers non-blocking behavior, index semantics, and output format selection, but does not define what chat should be, what happens when no reply exists, or the shape of the returned data.

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 0%, so the description must compensate. It clearly explains index ('-1 is the newest') and enumerates reply_format values, which adds meaning beyond the bare schema. The required chat parameter is left undefined, though its name suggests a chat identifier.

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 uses a specific verb ('Read') and a clear resource ('assistant reply'), and the phrase 'without waiting' immediately distinguishes it from a blocking sibling like wait. However, it does not explicitly name or contrast with alternative sibling tools, so it stops just short of full differentiation.

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 phrase 'without waiting' gives a clear usage context: use this when you want to fetch a reply without blocking. It does not explicitly state when not to use it or mention alternatives like wait or save_reply, but the implied guidance is strong enough for an agent to decide.

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

list_chatsA

List conversations inside the configured ChatGPT project (title + url). Optional substring filter on title.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses scope (configured project), result fields (title + url), and filter behavior (optional substring on title), but it does not mention ordering, limit/pagination behavior, error conditions such as a missing project configuration, or explicitly confirm that listing has no side effects.

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 two short sentences with no filler. The action and project scope are front-loaded, the output shape is compactly parenthesized, and the filter detail is a separate clear sentence.

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 simple list operation with no required parameters and no output schema, the description provides enough to invoke and interpret results: scope, result fields, and filtering. Minor gaps around limit behavior and ordering keep it from a perfect score.

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 0%, so the description must compensate. It adds meaningful semantics for 'query' by explaining it as an optional substring filter on title, but 'limit' is left to its self-evident name and schema default rather than being explicitly described.

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 uses a specific verb ('List') and resource ('conversations inside the configured ChatGPT project'), and specifies the output shape ('title + url') plus optional substring filtering. This makes the tool's purpose unambiguous and distinguishes it from siblings like open_chat, new_chat, and send.

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 establishes clear context: this tool enumerates existing conversations within the configured project and supports a title substring filter. It does not explicitly name alternatives or exclusions, but the list-only role among the sibling tools makes when-to-use reasonably inferable.

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

new_chatA

Open a new conversation inside the configured project and select the configured model. Returns a temporary handle chat (tab:); after the first send you get the permanent chat_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
title_hintNo

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry behavioral disclosure. It does add a useful non-obvious behavior: the handle is temporary until first send, after which a permanent chat_url is obtained. However, it does not mention prerequisites, side effects, or whether creating a new chat affects an existing active chat.

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 compact and front-loaded: the main action appears in the first sentence, while the return-handle lifecycle is provided in the second. Every sentence adds useful information without unnecessary elaboration.

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

Completeness3/5

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

For a tool with one optional parameter and no output schema, the description covers the core purpose and a key lifecycle detail. However, it leaves title_hint unexplained, does not clarify what 'configured project' and 'configured model' depend on, and lacks guidance about sending or managing the created chat. It is minimally viable but not complete.

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

Parameters2/5

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

The schema has one optional parameter, title_hint, with 0% schema description coverage. The description does not mention title_hint at all, so the agent gets no guidance on its purpose, format, or behavior. The schema only reveals it is a nullable string, which is insufficient.

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 and resource: 'Open a new conversation inside the configured project and select the configured model.' It clearly identifies this as creating a new chat rather than opening an existing one, which distinguishes it from siblings like open_chat and list_chats.

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 that this tool is for starting a new conversation, and the 'new' qualifier implies when to use it versus alternatives. It does not explicitly name sibling tools or state exclusions, but the intended usage is evident enough for an agent to select it correctly.

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

open_chatA

Open an existing conversation by URL (https://chatgpt.com/c/...) so you can continue it. Returns turn counts and a preview of the last reply.

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_urlYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the return values (turn counts and preview of last reply), which is helpful, but it does not explicitly state whether opening a chat changes the active session or affects subsequent send/get_reply calls. That side effect is implied but not stated.

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 two sentences with no redundant words. The core action and URL format are front-loaded, followed by return-value details. 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?

For a single-parameter tool with no output schema or annotations, the description covers invocation and expected return values well. The only meaningful gap is the lack of explicit disclosure about session-state side effects, which is relevant in the context of sibling tools like send and get_reply.

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 description coverage is 0%, so the description must compensate for the bare 'chat_url' property. It does by specifying the expected URL format with an explicit example (https://chatgpt.com/c/...), giving the agent enough to construct a valid parameter value.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Open an existing conversation by URL' and connects it to a clear purpose ('so you can continue it'). It distinguishes itself from siblings like new_chat and close_chat by stating it targets existing conversations by URL, and even mentions what it returns.

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 clearly implies when to use this tool: when you have a URL for an existing conversation and want to continue it. It does not explicitly list exclusions or name alternatives, but the context is sufficiently clear given sibling tools like new_chat and list_chats.

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

save_replyA

Write a reply to a file under the work dir without passing the whole text through the model. reply_format largest_markdown extracts the biggest ```markdown block (falls back to full text). Returns word/section stats.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
pathYes
indexNo
reply_formatNolargest_markdown

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose useful behavior: the largest_markdown extraction rule, fallback to full text, and return of word/section stats. However, it does not say whether an existing file is overwritten or truncated, what happens on invalid paths, or how index affects the saved reply, leaving key side effects of a write operation unstated.

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 compact and front-loaded: the main verb and resource appear first, then the format option, then the return value. Every sentence carries distinct information and there is no filler.

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

Completeness2/5

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

With four parameters, no output schema, and no annotations, an agent still lacks enough context to call this safely: index semantics and overwrite behavior are absent, and the return stats are only vaguely described as 'word/section stats'. The description is not complete for the complexity of the tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the prose must explain all four parameters. It explains reply_format's values, and path is inferable from 'file under the work dir', but chat is never defined and index's role and default of -1 are not explained at all. This is a meaningful gap for an agent deciding what to pass.

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 names a specific action and object: 'Write a reply to a file under the work dir' and adds detail about the save format. This differentiates it from sibling tools like get_reply and check_file, which read or inspect rather than persist a reply.

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

Usage Guidelines3/5

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

It implies a use case ('without passing the whole text through the model' and extracting markdown locally) but never states when to choose save_reply over alternatives or when not to use it. There is no explicit comparison with get_reply, send, or check_file, so the guidance is only implied.

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

sendA

Send a message (optionally with files under the work dir, max 10) to a chat. Returns immediately with status=generating unless wait_sec>0 (max 900). reply_format: largest_markdown | text | blocks | all.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
textYes
filesNo
wait_secNo
reply_formatNolargest_markdown

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it provides useful behavioral detail: the call returns immediately with status=generating, wait_sec caps at 900, and reply_format accepts a specific set of values. It does not cover failures, permissions, or irreversibility, but the async and format behavior is materially disclosed.

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 compact sentences front-load the core operation, then pack the important behavioral and format details without filler. The parenthetical file limit and reply_format shorthand are efficient and directly usable.

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 five-parameter send tool with no annotations and no output schema, it covers the main call behavior, the wait mechanism, and response format choices. It omits output shape and error behavior, but sibling tools like wait and get_reply, plus the returned status=generating note, partially fill that gap.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It explains wait_sec's maximum, reply_format's allowed values, and the files count/scope constraint, but it does not clarify chat or text semantics such as identifiers, format, or length, leaving those to inference from required parameters.

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 concrete action—send a message to a chat—and adds specific scope: optional files under the work dir with a maximum of 10. This clearly positions it against sibling tools like open_chat, wait, and get_reply, which focus on other chat operations.

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

Usage Guidelines3/5

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

It conveys the core usage context: sending a message and choosing whether to wait or return immediately via wait_sec. However, it never explicitly names alternatives such as wait or get_reply for retrieving a response, so routing to siblings depends on inference from their names.

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

statusA

Session state (logged_in/anonymous/login_required), current model label, configured project, open chat tabs. Cheap; call first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

There are no annotations, so the description bears the full behavioral burden. It discloses that the call is cheap, that it should be first, and what state categories it reports. It does not explicitly say the operation is read-only, but the content list strongly implies inspection rather than mutation.

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 compact, front-loaded sentences cover content and usage guidance without any fluff. Every clause adds information, and the 'cheap; call first' guidance is easy to parse.

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 zero-parameter status tool with no output schema, the description adequately enumerates the expected contents: session state with possible values, model label, project, and open chat tabs. The call-first hint completes the picture for an agent deciding when to invoke it.

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?

The tool has zero parameters, so parameter semantics are trivially satisfied. The description adds useful context about what the status covers, and no parameter documentation is needed.

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 identifies the tool as reporting session state, model label, project, and open chat tabs. Although it lacks an explicit verb, the resource and data scope are unmistakable and it is distinguished from sibling tools by being a status/state snapshot.

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 phrase 'Cheap; call first' provides clear operational guidance: this tool should be invoked early because it is inexpensive. It does not name alternatives or exclusions, but for a status tool the directive to call first is sufficient context.

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

stopB

Stop the reply currently being generated in a chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes

TDQS

B3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the core effect—stopping a reply—but does not mention what happens to the partial reply, whether the action is reversible, or any side effects. This is thin for a mutating control operation.

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 a single, front-loaded sentence with no wasted words. It directly states the action and target, which is appropriate for a simple tool.

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

Completeness2/5

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

Despite the tool being simple, the lack of annotations and output schema means the description should provide more behavioral and usage context. It does not explain what happens to the partially generated reply, whether the stop is permanent, or how to identify the right chat. This leaves meaningful gaps for an agent.

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

Parameters2/5

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

The schema has a single 'chat' string with no description (0% coverage), so the description must compensate for parameter meaning. It only says 'in a chat,' which adds minimal context about the parameter, but it does not clarify the expected format, identifier type, or how the chat is specified.

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 uses a specific verb 'stop' and a specific resource 'the reply currently being generated in a chat,' making the core operation clear. It does not explicitly differentiate from siblings like 'wait' or 'get_reply,' but the action is unambiguous.

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

Usage Guidelines3/5

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

The phrase 'currently being generated' implies the tool should only be used mid-generation, which provides some usage context. However, there are no explicit when-to-use/when-not-to-use instructions or references to alternative tools such as 'wait' or 'get_reply.'

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

waitA

Wait for the newest reply in a chat to finish (poll). timeout_sec<=900; if it returns status=generating call wait again. Returns the reply in reply_format.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYes
timeout_secNo
reply_formatNolargest_markdown

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of explaining behavior. It discloses that this is a polling operation, that it waits for a reply to finish, that a 'generating' status means the agent must poll again, and that it returns the reply in reply_format. It does not describe error/timeout edge cases or explicitly confirm lack of side effects, but the core behavior is transparent.

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 short, purposeful sentences. The core purpose is front-loaded, followed by the key constraint and loop behavior, then the return semantics. Every sentence earns its place with no filler or redundancy.

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

Completeness3/5

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

For a simple polling tool with no output schema and no annotations, the description covers the main loop and return value adequately. However, it leaves gaps: the chat parameter is unexplained, non-'generating' statuses are not mentioned, and timeout behavior is only implied. These gaps prevent it from being fully self-sufficient.

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

Parameters2/5

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. It explains timeout_sec (max 900) and reply_format (the format of the returned reply), but it completely omits the required 'chat' parameter. An agent would have to guess what value to supply for chat, which is a significant gap for the only required parameter.

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

Purpose5/5

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

The description clearly states the tool's function: 'Wait for the newest reply in a chat to finish (poll).' It identifies the verb, resource, and behavior, and distinguishes itself from siblings like status or get_reply by emphasizing polling and reply retrieval. The added details about status=generating and reply_format make the tool's role unmistakable.

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

Usage Guidelines4/5

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

The description provides concrete usage guidance: set timeout_sec<=900, and if the returned status is 'generating', call wait again. This tells the agent how to use the tool in a loop. It does not explicitly discuss alternatives or when not to use this tool, but the context is clear enough for typical polling scenarios.

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. Dates show when Glama detected each change.

  1. 12 tool updatesv0.1.0
    • First observedcheck_file
    • First observedclose_chat
    • First observeddoctor
    • First observedget_reply
    • First observedlist_chats
    • First observednew_chat
    • First observedopen_chat
    • First observedsave_reply
    • First observedsend
    • First observedstatus
    • First observedstop
    • First observedwait

TDQS

A3.6/5.0
Disambiguation4/5

Most tools are clearly distinct: new_chat/open_chat/send/wait/get_reply/save_reply each target a different step in the chat workflow. The only minor overlap is status and doctor, but their descriptions make status a cheap session snapshot and doctor a deeper diagnostics tool.

Naming Consistency3/5

Many tools follow a verb_noun pattern (list_chats, open_chat, get_reply, save_reply, close_chat, check_file), but status and doctor are bare nouns and new_chat breaks the verb-led convention. Send, wait, and stop are also simple verbs, so the naming style is somewhat mixed but still readable.

Tool Count4/5

Twelve tools is a reasonable size for automating ChatGPT web interactions, covering session management, chat navigation, messaging, reply retrieval, and cleanup. The count does not feel excessive, though a few tools like check_file seem only tangentially related to the core workflow.

Completeness4/5

The set covers the main lifecycle well: create, open, send, wait, read, save, stop, and close chats. Minor gaps exist—there is no way to list messages within a chat or rename/delete conversations—but agents can complete the primary task of conversing with ChatGPT and saving responses.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI coding assistants to control and inspect a live Chrome browser for automation, debugging, performance analysis, network monitoring, and DOM interaction through Chrome DevTools Protocol.
    3,288,165
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables token-efficient browser automation for AI chats like ChatGPT, Gemini, and Claude, allowing reading responses, sending messages, waiting for streaming replies, and bridging conversations between tabs via Chrome DevTools Protocol.
    3
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to drive your real, logged-in Chrome browser with existing sessions and cookies, bypassing CAPTCHA and anti-bot measures, with support for multi-session and human-in-the-loop workflows.
    40
    36
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/FirstWari/chatgpt-web'

If you have feedback or need assistance with the MCP directory API, please join our Discord server