Skip to main content
Glama

ask-my-chatgpt

Let Codex and Claude Code talk to your own signed-in ChatGPT through a Chrome extension: send project updates, get a second opinion, and keep one conversation you can come back to.

IMPORTANT

Unofficial — not affiliated with or endorsed by OpenAI or Anthropic. This project automates the ChatGPT website in your own browser. That may conflict with OpenAI's terms of use, and it may trigger rate limits, safeguards or restrictions on your account. Use it at your own risk. Never send passwords, API keys, tokens, private keys, .env files or personal data — nothing is filtered before it reaches ChatGPT.

NOTE

AI-generated project. The code was generated by OpenAI Codex and Claude Code under human direction. It is a practical tool, not a teaching example. Read the permissions section before installing, and test the parts you rely on. Contributions are welcome.

Status: Windows-first developer preview · MIT license · Install · Workflows · Design · Tests · Contribute


Part 1 — What it does

1. A ChatGPT bridge for coding agents (main feature)

Your coding agent works inside the repository. ChatGPT is often where you think about the bigger picture. ask-my-chatgpt connects the two:

  • Report progress. Codex or Claude Code sends ChatGPT what was built, which tests passed, what is blocked and what comes next.

  • Get another view. Ask ChatGPT to challenge a design or suggest an experiment; the coding agent evaluates the suggestion before using it.

  • Catch up later. Open the same ChatGPT conversation on any device and ask "What changed this week, and what is still open?"

  • Review PDFs. Send an approved PDF and keep discussing it in the same chat.

It works through the ChatGPT website in your normal, signed-in Chrome — no OpenAI API key. Your account's normal limits apply.

The Chrome Companion is the foundation. This unpacked extension is what types into the ChatGPT page, confirms the message was sent once and reads the reply back. It talks only to the local servers on your PC (127.0.0.1), using a random per-machine pairing token. The extra 1point3acres assistant (below) also uses it; its files are listed separately in chrome_extension/README.md.

ChatGPT only knows what you send it. Its summaries can be wrong; the repository and its test results stay the source of truth. Regular reports need a scheduler in your coding client — this project never sends anything on its own.

This repository also ships two independent tools. Neither is needed for the ChatGPT bridge, and both stay off unless you start them.

2. Optional: a local web-content collector

Save articles or an in-scope online course as clean Markdown with images. A local model in LM Studio picks which links matter and cleans the text; nothing is sent to a cloud model. Jobs are checkpointed, so an interrupted download resumes without repeating finished pages. Output goes to Desktop/WebContent by default. It respects robots.txt and never bypasses login walls, paywalls or DRM.

3. Extra feature: a supervised 1point3acres daily assistant

Extra, not part of the ChatGPT bridge. You can ignore it entirely: it never starts unless you run it, and the bridge doesn't use it. Its code, scripts, extension files and tests are listed in src/web_content_agent/onepoint3acres/README.md.

A small Windows desktop app for the daily check-in quiz on 1point3acres, using your own signed-in account. A local model proposes an answer with evidence, a supervisor approves it, the extension submits once, and the website's response is recorded.

Related MCP server: TaskQuay

Quick start (ChatGPT bridge)

You need: Windows, Git, uv, Google Chrome signed in to ChatGPT, and Codex or Claude Code. uv installs Python 3.12.

git clone https://github.com/felixchenfy/ask-my-chatgpt.git
cd ask-my-chatgpt
uv sync --python 3.12 --frozen
uv run python -m web_content_agent.chatgpt_pairing
  1. In Chrome, open chrome://extensions, turn on Developer mode, click Load unpacked and choose this checkout's chrome_extension folder.

  2. Register the MCP server with your coding agent (use your real path):

    Claude Code

    claude mcp add --transport stdio --scope user webcontentagent -- uv --directory "C:/path/to/ask-my-chatgpt" run wca-mcp

    Codex — add to ~/.codex/config.toml:

    [mcp_servers.webcontentagent]
    command = "uv"
    args = ["--directory", "C:/path/to/ask-my-chatgpt", "run", "wca-mcp"]
    startup_timeout_sec = 30
    tool_timeout_sec = 1200
  3. In a new agent session, try:

    Use ask_chatgpt to ask "Reply with BRIDGE_OK." with thinking_mode "current".
    Show me the reply and the conversation URL.

Then tell your agent, for example: "Report our project progress to ChatGPT, ask for alternative approaches, and save the conversation URL privately for next time." More recipes, including periodic reports, are in workflows. Timeouts, PDFs and troubleshooting are in the installation guide.

Check it end to end (sends two short synthetic messages to your ChatGPT):

uv run python scripts/chatgpt-live-check.py --confirm-send

Integrations

Two optional clients reuse the same bridge and Chrome Companion; both send real messages:

Both find this checkout relative to their own folder; WCA_PROJECT_ROOT overrides it.

Safety and privacy in one minute

  • The bridge runs on your PC, but the questions and PDFs you choose are sent to ChatGPT. PDFs are only accepted from folders you allow.

  • Nothing is scanned or redacted before sending. Keep secrets (passwords, API keys, tokens, private keys, .env files) and personal or customer data out of what your agent sends, and tell your agent the same.

  • Account risk: automated use of the ChatGPT website may conflict with OpenAI's terms and can lead to rate limits or account restrictions. Use only an account and a volume of messages you are comfortable with.

  • The Chrome extension has strong permissions (tabs, scripting, debugger) so it can type into ChatGPT and read the reply. Read privacy first.

  • The extension and the local servers pair with a random per-machine token. The local servers listen only on 127.0.0.1 and refuse requests from web pages.

  • A timeout does not prove nothing was sent. The bridge records every request and blocks blind re-sends; recovery only reads the reply to the original message.

  • "Reply extracted correctly" does not mean "reply is correct".

  • Logins, CAPTCHAs and paywalls are never bypassed.

This is an unofficial, independent project. It is not affiliated with, endorsed by or supported by OpenAI or Anthropic. ChatGPT is a trademark of OpenAI, and Claude is a trademark of Anthropic.


Part 2 — For developers

Architecture

flowchart LR
    S["Optional external scheduler"] -. "starts authorized reporting" .-> C["Codex / Claude Code"]
    C <-->|"MCP over stdio"| P["Python MCP server"]
    subgraph PY["One local Python process"]
        P -->|"Python call"| B["Local ChatGPT bridge"]
    end
    B <--> R["Private task records"]
    X["Chrome Companion"] -->|"HTTP poll and report (paired, 127.0.0.1)"| B
    B -->|"HTTP response"| X
    X <-->|"Browser interaction"| G["Signed-in ChatGPT"]

The coding agent decides what to send. Python validates the request and records it durably. The Chrome Companion polls the paired loopback endpoint, types and submits once, then reports the reply that belongs to that exact message. A full request sequence, the collector pipeline and the recovery rules are in docs/design.md.

Repository map

Path

What it is

src/web_content_agent/mcp/server.py

MCP server (wca-mcp): the 11 tools below

src/web_content_agent/chatgpt_chrome_bridge.py

ChatGPT task state, duplicate protection, loopback HTTP API

src/web_content_agent/chatgpt_pairing.py

Per-machine pairing tokens for the extension

chrome_extension/

Chrome Companion (MV3 service worker); file map separates bridge, shared and extra files

src/web_content_agent/worker.py, discovery.py, extraction.py, lmstudio.py

Collector pipeline

src/web_content_agent/cli.py

wca command-line tool for the collector

src/web_content_agent/onepoint3acres*

Extra: 1point3acres desktop app (wca-onepoint3acres-app); details

scripts/

Launchers and diagnostics, grouped by feature in scripts/README.md

integrations/codex-plugin/

Codex plugin: skill, Node MCP adapter, its own npm test suite; README

integrations/claude-skill/chatgpt-bridge/

Claude Code skill (SKILL.md, scripts/gpt.py); README

tests/

Python unit/integration tests and Node tests for the extension

Public interfaces

MCP tools (uv run wca-mcp, stdio)

Tool

Purpose

ask_chatgpt

Send one question (optional PDF, optional conversation_url) and return the reply and canonical URL

read_chatgpt_conversation

Read-only recovery of an existing reply; never types or submits

discover_site

List likely content links on one public page (no download)

create_collection

Write a source.yaml for a site/course (no download)

start_collection

Start the background collector; returns a run_id

get_run_status

Concise progress; rate-limited to discourage polling

resume_run / validate_run

Resume an interrupted run / check outputs and hashes

list_collections / get_failure

Inventory / redacted failure summary

create_context_handoff

Compact snapshot for continuing in a new chat

CLI (uv run wca --help): doctor, run, login, resume, status, validate, handoff, new-source.

Loopback HTTP (used only by the extension; token + extension origin required): ChatGPT bridge on 127.0.0.1:18732 (/command, /before-submit, /observation, /event, /submitted, /complete); extra 1point3acres app on 127.0.0.1:18731 (/command, /status, /run, /run-daily, /simulate, /close, /solve, /complete, /review/*).

Tests

All offline tests run without a ChatGPT account, LM Studio or network access:

$env:PYTHONUTF8 = '1'
$env:PYTEST_ADDOPTS = '-m "not live and not lmstudio"'
.\scripts\test.ps1      # ruff format + ruff lint + pytest + node --test (+ plugin npm test/lint)

The Codex plugin suite runs only when integrations/codex-plugin/node_modules exists (npm ci there first); CI always installs it.

Area

What is covered

Where

API contracts

Every MCP tool forwards its arguments; CLI commands; HTTP auth, CORS and unknown routes for both local servers; live-check script refuses to send without --confirm-send

tests/unit/test_api_contracts.py, tests/integration/test_mcp_server.py

ChatGPT bridge

Send-once state machine, durable idempotency across restarts, zero-submission retry rules, throttling, mode correction, PDF policy, port ownership, read-only recovery

tests/unit/test_chatgpt_*.py

Chrome Companion

Composer readiness, submission confirmation, reply extraction, tab handling, thinking mode, render recovery

tests/js/chatgpt-*.test.mjs, tests/js/tab-load.test.mjs

Collector

Link selection, extraction fallbacks, images, checkpoints, resume, context budget, model lifecycle, full static/course/resume pipelines

tests/unit/test_{selection_utils,extraction_fallbacks,image_download,checkpoint_logging_markdown,context_budget,model_lifecycle_scripts,mcp_tools,paths_config}.py, tests/integration/

1point3acres assistant (extra)

Quiz parsing, solver output, model selection, supervision and one-use permits, records, recovery, desktop-app wiring, extension quiz flow

tests/unit/test_{onepoint3acres_daily,quiz_*}.py, tests/js/onepoint3acres-*.test.mjs

Integrations

Codex plugin MCP tools, launcher/agent path resolution, cancellation, cache repair, Companion DOM contracts; Claude skill path resolution

integrations/codex-plugin/tests/, tests/unit/test_claude_skill_paths.py

Live (opt-in)

Real LM Studio / website / ChatGPT checks

-m lmstudio, -m live, scripts/chatgpt-live-check.py

Current totals and the per-file list are in docs/testing.md. CI runs the same offline checks on windows-latest for every push and pull request.

What is verified, and what is not

Evidence

Offline suite

Windows, 2026-10-15: 484 Python passed, 0 skipped (6 live/model tests deselected); 182/182 Companion JavaScript and 260/260 Codex plugin tests passed, plugin ESLint clean. Run by Windows CI on every push

Live ChatGPT round trip over MCP stdio

scripts/chatgpt-live-check.py: passed on Windows, 2026-10-15 (new chat, follow-up in the same chat, read-only read); details in release notes

Codex as the MCP client

Long-running personal use

Claude Code as the MCP client

Standard MCP setup documented; a recorded Claude Code session is still welcome

macOS / Linux

Offline tests pass on Linux; the browser workflow is not validated there

Contributing

Bug reports, setup reports, synthetic browser fixtures, clearer docs and focused pull requests are all welcome. Read CONTRIBUTING.md for the workflow, and SECURITY.md for private vulnerability reports. AI-assisted contributions are welcome; you stay responsible for reviewing and testing them. Please follow the code of conduct.

Further reading

Maintained by Feiyu Chen. Licensed under MIT. Model weights, downloaded content and third-party services keep their own terms.

Available Tools

11 tools
ask_chatgptA

Send one question and optional PDF through signed-in Chrome and return ChatGPT's answer.

The question and result are persisted in an ignored local task file. Supply a canonical
https://chatgpt.com/c/... URL to continue an existing conversation; omit it for a new chat.
PDF paths must be absolute and inside the existing ChatGPT bridge's allowed roots.
NameRequiredDescriptionDefault
questionYes
thinking_modeNoprefer_max
attachment_pathNo
timeout_secondsNo
conversation_urlNo
minimum_response_charactersNo

TDQS

A3.8/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 does meaningful work: it discloses that execution happens via signed-in Chrome (an auth/environment requirement), that the question and result are persisted to a local task file (a side effect), and that attachments are constrained to allowed roots. It omits failure/timeout behavior and rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and answer return in the first sentence, then two compact follow-ups on persistence and URL/PDF constraints. No filler, though the persistence note is slightly tangential to invocation decisions.

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?

No output schema and no annotations, so the description must cover behavior and returns. It handles continuation semantics and attachment constraints well, but is silent on three non-obvious parameters (thinking_mode enum, timeout_seconds, minimum_response_characters), leaving an agent unable to reason about latency and answer-completeness controls.

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% across 6 parameters, so the description must compensate. It clarifies attachment_path (absolute, inside allowed roots) and conversation_url (canonical https://chatgpt.com/c/... URL, omit for new chat), but leaves thinking_mode, timeout_seconds, and minimum_response_characters entirely unexplained.

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?

Specific verb and resource: 'Send one question ... and return ChatGPT's answer,' with the Chrome-signed-in mechanism named. It implicitly separates itself from the read-only sibling read_chatgpt_conversation by describing both submission and answer retrieval, though it never names that sibling explicitly.

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?

Gives a clear decision rule for the conversation_url parameter: supply a canonical URL to continue an existing chat, omit it for a new one. It also states the precondition for PDF attachments (absolute path inside the bridge's allowed roots). It stops short of naming alternative tools or exclusions, so no explicit when-not guidance.

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

create_collectionB

Create a safe WebContent collection and source.yaml without starting a job.

After this, call start_collection only when the user asks to begin.
NameRequiredDescriptionDefault
urlYes
nameYes
strategyNoauto
max_itemsNo
instructionsNo

TDQS

B3.1/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 two side effects: a collection plus a source.yaml are written, and no job is started (the key behavioral distinction). It says nothing about permissions/authentication, whether an existing collection is overwritten, or what identifiers are returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the core action plus its 'no job started' constraint are front-loaded. The second sentence is slightly clunky ('After this, call start_collection only when...') but earns its place by establishing the workflow order.

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?

For a 5-parameter creation tool with no annotations, no output schema, and zero schema descriptions, the definition is under-specified. It never explains the enum strategy, optional limits like max_items, or what the call returns, so an agent cannot confidently populate or act on the result.

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

Parameters1/5

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

Schema description coverage is 0% and the description offers no parameter meaning at all. Five parameters exist (url, name, the strategy enum, max_items, instructions) and the agent gets no hint about what url points to, what the strategy values mean, or how instructions shape collection behavior.

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?

States a specific verb and resource: create a WebContent collection (plus a source.yaml) without starting a job. It explicitly contrasts with the sibling start_collection, so the agent can separate creation from execution. 'Safe WebContent collection' is slightly opaque jargon, 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 Guidelines4/5

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

Gives an explicit sequencing rule with a condition: create first, then call start_collection only when the user asks to begin. That is real when-to-use guidance for the follow-up step. It does not address alternatives other than start_collection (e.g. discover_site or list_collections) or any explicit when-not-to-use case.

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

create_context_handoffA

Compress durable run state into a small snapshot for continuing in a new Chat.

Use once when a Chat becomes long or before a long background wait. It intentionally omits page bodies, logs, screenshots, repeated tool results, and hidden reasoning.

NameRequiredDescriptionDefault
run_idYes

TDQS

A3.6/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 is deliberately excluded (page bodies, logs, screenshots, repeated tool results, hidden reasoning), which is real behavioral context, but says nothing about side effects, permissions, whether the snapshot is stored or returned, or what it contains positively.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by a compact usage rule and an omission list, all of which earn their place. No filler or repetition.

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?

Adequate for a one-parameter tool with no annotations, but with no output schema the description should say what the snapshot looks like or how the agent consumes it in a new Chat. That return-value gap leaves an agent without a clear next step after calling it.

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?

There is a single parameter, run_id, with 0% schema description coverage, so the description must compensate. It implies a run-scoped operation via 'durable run state', but never explains what run_id identifies or what form it takes.

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?

States a specific verb and resource: compress durable run state into a small snapshot for continuing in a new Chat. It is clearly distinguishable from siblings like get_run_status or resume_run, but it never names an alternative, so the differentiation is conceptual rather than explicit.

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?

Gives a clear trigger condition: use once when a Chat becomes long or before a long background wait, including frequency guidance ('once'). It does not state when not to use it or which sibling to prefer instead.

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

discover_siteA

Inspect one public page and list likely content links.

This never downloads a collection. Use it first for an unfamiliar site, then ask the user which collection they want.

NameRequiredDescriptionDefault
urlYes
instructionsNoFind likely content collections.

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 full burden; it does disclose the key scope limit (single public page, no collection download), which implies a read-only probe. It says nothing about authentication, rate limits, or how the returned links are ranked, leaving notable behavioral gaps.

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 short sentences, front-loaded with the action and immediately followed by the scope constraint and usage ordering. No filler.

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?

With no annotations and no output schema, the description should describe what 'list likely content links' actually returns and what 'instructions' does. The core workflow is conveyed, but these gaps leave an agent guessing on return shape and the second parameter.

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 coverage is 0%, so the description must compensate. 'url' is self-evident, but 'instructions' (with a default of 'Find likely content collections.') is a non-obvious parameter whose effect on the inspection is never explained in the description.

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?

States a specific verb (inspect) and resource (one public page) plus the delivered artifact (likely content links), which cleanly separates it from start_collection/create_collection siblings. It stops short of naming a sibling explicitly, so it isn't a top-tier 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?

"Use it first for an unfamiliar site, then ask the user which collection they want" gives explicit ordering and a follow-up step, and "never downloads a collection" rules out the obvious wrong expectation. It does not name which sibling to call next, but the when-to-use condition is clear.

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

get_failureA

Return a redacted failure summary and bundle path for a failed run.

Never returns cookies, authorization headers, credentials, or full logs.

NameRequiredDescriptionDefault
run_idYes

TDQS

A3.7/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 does disclose a meaningful behavioral trait: output is redacted and never includes cookies, authorization headers, credentials, or full logs. That is a genuine security-scoping guarantee beyond the schema. It stops short of covering auth requirements or behavior for non-failed runs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the return content and scoped with the redaction constraint. It is efficient, but the redaction idea is stated twice ('redacted failure summary' and 'Never returns ... full logs'), a small 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 one-parameter getter with no output schema, the description covers what comes back (failure summary, bundle path) and the redaction boundary, which is the key thing an agent needs. Missing only the origin/format of run_id and behavior for a non-failed run.

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% and run_id carries no title or description, so the description would need to compensate. It says nothing about run_id format, source, or whether it must reference a failed run, but the single self-explanatory identifier keeps this only a moderate gap.

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?

States a specific verb and resource: returns a failure summary and bundle path. It clearly describes the payload shape ('failure summary and bundle path'), which distinguishes it from a status-only tool, though it never names the sibling it differs from, such as get_run_status or validate_run.

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 clause 'for a failed run' implies the triggering condition, so usage is inferable. However, it gives no comparison against get_run_status or validate_run, and does not say what happens if the run did not fail, leaving the agent to guess when this is the right call.

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

get_run_statusA

Get concise progress for a run without returning full logs.

Use this when the user asks how a download is going. Never call it repeatedly in one response.

NameRequiredDescriptionDefault
run_idYes

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 burden and does disclose useful behavior: it returns condensed progress rather than logs, and it warns against repeated invocation in a single turn. It omits auth/permission requirements, whether output is cached or live, and what happens with an invalid run_id.

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 short sentences and a constraint, with purpose stated first and the triggering cue immediately after. No filler and nothing redundant.

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?

There is no output schema, so return values need not be described, and the description notes they are concise. However, with zero annotation coverage and an undocumented required run_id, an agent lacks the input sourcing and safety context needed to invoke this confidently.

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?

There is one required parameter (run_id) with 0% schema description coverage, so the schema adds no meaning. The description never explains what a run_id is, its format, or where to obtain it, leaving the sole input undocumented.

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 states a specific verb+resource (get progress for a run) and distinguishes it from the full-log retrieval path ('without returning full logs'). It does not name sibling tools like get_failure, so it stops 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?

It gives an explicit triggering condition ('when the user asks how a download is going') and a usage constraint ('Never call it repeatedly in one response'). It does not route to alternatives such as get_failure for error cases, so it is clear but incomplete.

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

list_collectionsB

List collections with source URL, latest status, and content counts.

Use for questions about existing collections or the latest run.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full behavioral burden. 'List' implies a read, and the return fields are hinted at, but there is no statement about pagination, result volume, ordering, or required permissions for what is presumably a bulk-read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the operation and result contents, with the usage note following. No filler or redundancy, though the second sentence is thin and could carry more routing value.

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 zero-parameter tool with no output schema, the description does supply the key return fields, which is the main thing needed. It stops short of pagination/ordering behavior and of differentiating this list from the run-status siblings, leaving the agent to guess in a crowded toolset.

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 takes zero parameters, so there is nothing for the description to disambiguate. The baseline of 4 applies; the description's mention of returned fields is a mild bonus rather than parameter semantics.

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

Purpose3/5

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

Names a specific verb and resource ('List collections') and even enumerates the returned attributes (source URL, latest status, content counts), which is more than a tautology. However, it never distinguishes itself from siblings that also surface collection/run data, notably get_run_status and start_collection, so an agent cannot tell from the text alone which to pick.

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?

'Use for questions about existing collections or the latest run' gives an implied context for invocation, but offers no explicit when-not guidance and names no alternative tool. With siblings like get_run_status and get_failure covering adjacent run information, the absence of routing guidance is a real gap.

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

read_chatgpt_conversationA

Read the latest assistant response from an existing ChatGPT conversation.

This is recovery-only and never types, submits, or uploads anything. Supply the canonical
https://chatgpt.com/c/... URL returned by a previous ask_chatgpt call.
NameRequiredDescriptionDefault
timeout_secondsNo
conversation_urlYes
expected_message_idNo
minimum_response_charactersNo

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 carries the full behavioral burden. It usefully discloses that the tool 'never types, submits, or uploads anything,' establishing a read-only safety profile, but says nothing about authentication needs, rate limits, timeout behavior, or what happens when the conversation 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?

Three tight sentences with the core purpose front-loaded and the safety constraint and URL prerequisite following in priority order. No filler.

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?

No output schema exists, so the description reasonably explains the return (latest assistant response), but it leaves three of four parameters unexplained and omits failure/timeout behavior. For a 4-param tool with zero annotation and zero schema-description coverage, more is needed.

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% across 4 parameters, and the description only clarifies the required conversation_url (canonical chatgpt.com/c/... format). timeout_seconds, expected_message_id, and minimum_response_characters are left entirely undocumented in both schema and description.

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?

States a specific verb and resource — reading the latest assistant response from an existing ChatGPT conversation — and scopes it narrowly ('latest assistant response'), which distinguishes it from ask_chatgpt's create-and-send behavior. An agent can tell what it retrieves 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.

Usage Guidelines4/5

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

Explicitly frames the tool as 'recovery-only' and requires the canonical URL returned by a previous ask_chatgpt call, giving both the situation (recovery) and the dependency. It stops short of naming an alternative tool or an explicit when-not-to-use condition.

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

resume_runB

Resume a failed or interrupted run without repeating completed work.

Use only after get_run_status or get_failure says the run is resumable.
NameRequiredDescriptionDefault
run_idYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided, so the description carries full burden. It mentions resuming without repeating completed work, implying idempotence or checkpointing, but does not disclose: required permissions, whether it can be called multiple times, what happens if the run is not resumable, or the return behavior. For a mutation tool with no annotations, this is a significant gap.

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, front-loaded with the core action and constraint, followed by a precise usage condition. No wasted words.

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?

For a mutation tool with no annotations and no output schema, the description should disclose side effects, permission requirements, and failure modes. It only mentions the resumability precondition, which is helpful but insufficient given zero structured behavioral 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 doesn't describe the run_id parameter at all beyond the schema's implicit type. Baseline 3 is given because the parameter is self-explanatory (run_id identifies the run), but the description adds no semantic detail.

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?

States a specific action (resume a run) and adds a key constraint: without repeating completed work. This distinguishes it from a hypothetical 'restart' tool. However, it does not explicitly differentiate from siblings like get_run_status beyond usage note.

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?

Provides a clear precondition: use only after get_run_status or get_failure says the run is resumable. Names specific sibling tools. Lacks explicit when-not-to-use beyond the precondition, but that's effectively covered.

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

start_collectionB

Start the existing worker as an independent background process.

Returns a run_id immediately. The path must be a source.yaml inside WebContent.
NameRequiredDescriptionDefault
source_configYes

TDQS

B3.4/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 does disclose key behavior: the process runs independently in the background and returns a run_id immediately (non-blocking, asynchronous). It omits what happens on failure, whether concurrent starts are allowed, and any resource or permission implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler, leading with the action and following with the return value and the path constraint. Efficient, though the trailing constraint reads as an afterthought rather than being grouped with the parameter it governs.

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?

There is no output schema, and the description usefully tells the agent it gets a run_id back, so the return-value burden is covered. However, with no annotations on a process-launching tool, more behavioral context (side effects, failure handling, relationship to get_run_status/resume_run) would be needed for full completeness.

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% and the schema text ('Source Config', string) is uninformative, so the description's constraint that the value must be a source.yaml path inside WebContent is genuinely valuable. It still leaves path format details (absolute vs relative, extension expectations) unstated, so it only partly compensates.

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?

States a specific verb and effect: start the existing worker as an independent background process. This distinguishes it reasonably well from siblings like create_collection (creates a new one) and resume_run (continues an existing run), though the description's use of 'worker' against a tool named start_collection leaves a slight terminology mismatch.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance and no mention of alternatives. The phrase 'the existing worker' weakly implies the collection must already exist, but the agent is not told how this differs from create_collection or resume_run when deciding which sibling to call.

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

validate_runB

Validate final outputs, hashes, and local image paths.

Use after status reports success.

NameRequiredDescriptionDefault
run_idYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the full behavioral burden. It discloses what is checked (outputs, hashes, image paths), which is genuine behavioral content, but says nothing about side effects, idempotency, required permissions, or what a failed validation yields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no waste; the primary action is front-loaded and the usage cue follows. Appropriately sized for a single-parameter 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?

No output schema exists, so the description should ideally describe what validation returns (pass/fail, which artifact failed). It omits return semantics and leaves the run_id parameter unexplained, which is insufficient for a tool whose whole value is its verdict.

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 single required parameter run_id has 0% schema description coverage, and the description never explains what a run_id is or where to obtain it. It fails to compensate for the schema gap on the one parameter that matters.

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?

States a specific verb (validate) and concrete resources: final outputs, hashes, and local image paths. This distinguishes it from siblings like get_run_status and get_failure, which read state rather than verify artifacts. Clear, though it doesn't explicitly name those siblings.

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?

Gives an explicit precondition: 'Use after status reports success,' implicitly referencing the get_run_status sibling. There is no when-not guidance or mention of what to do on failure, but the trigger context is clear enough to select the tool.

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. 11 tool updatesv0.1.0
    • First observedask_chatgpt
    • First observedcreate_collection
    • First observedcreate_context_handoff
    • First observeddiscover_site
    • First observedget_failure
    • First observedget_run_status
    • First observedlist_collections
    • First observedread_chatgpt_conversation
    • First observedresume_run
    • First observedstart_collection
    • First observedvalidate_run

TDQS

A3.7/5.0

Scored across 11 tools

Disambiguation4/5

The collection lifecycle tools (create/start/get_run_status/resume/validate/list/get_failure) each target a distinct stage, and the ChatGPT pair (ask vs read) is clearly separated. Minor adjacency exists between get_run_status and get_failure, and between start_collection and resume_run, but descriptions disambiguate them adequately.

Naming Consistency5/5

Every tool follows a consistent snake_case verb_noun (or verb_resource) pattern: create_collection, start_collection, get_run_status, list_collections, resume_run, validate_run, discover_site, ask_chatgpt. No mixed conventions or vague bare verbs.

Tool Count5/5

11 tools is well within the healthy range and each tool maps to a real step in the web-collection workflow or the ChatGPT bridge. No tool appears redundant or padded.

Completeness4/5

The surface covers discovery, creation, execution, monitoring, resumption, validation, and failure inspection, which is strong lifecycle coverage. Gaps remain: no cancel/stop for a running collection and no delete/update for collections, though agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables ChatGPT conversations to directly inspect local workspaces and delegate coding tasks to a local Codex agent, with controlled concurrency, reusable sessions, and task/usage tracking.
    285 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables ordinary ChatGPT web Chat to work directly on a local machine over a private MCP tunnel — reading and editing project files, running shell commands and tests, loading local skills, manipulating images, and driving Chrome — without spinning up a separate coding agent or additional model-generation API calls. It also supports multi-step task plans with persisted execution receipts and acceptance checks so results from real runs are returned to the conversation.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Lets AI coding tools drive the real, already-logged-in Chrome browser over local stdio—snapshotting and reading pages, clicking, typing, managing tabs, capturing screenshots, and inspecting network, console, storage, and cookies—without opening a remote-debugging port. It installs as a Chrome extension plus native-messaging bridge, so agents work in the user's authenticated sessions while passing bot detection.
    1 npm
    ISC