Skip to main content
Glama
YunosukeYoshino

gpt-history-mcp

gpt-history-mcp

English | 日本語

An MCP server (stdio) that lets your AI assistant search and read your ChatGPT conversations.

No data export and no scraping: it reads the conversation catalog that the ChatGPT desktop app already syncs to disk, and fetches message bodies from ChatGPT on demand.

You:    Find the chat where I discussed our ICP with ChatGPT and summarize it.
Claude: → search_chatgpt_messages("ICP") → get_chatgpt_chat("6aa…") → summary
WARNING

This project useschatgpt.com/backend-api, an undocumented internal API. It may change or break at any time, and automated access may conflict with OpenAI's Terms of Use. Use it only with your own account, read-only, at human pace. Do not use it for bulk downloading. This project is not affiliated with or endorsed by OpenAI.

Features

  • Title search, offline: queries the local catalog kept by the ChatGPT desktop app

  • Full-text search: searches message bodies through ChatGPT's own search, with snippets

  • Read a conversation: returns the visible branch as a clean user / assistant transcript

  • Read-only by design: only GET requests. The local database is opened read-only. Tokens never appear in logs or output.

Related MCP server: chatgpt-conversations-mcp

Requirements

  • macOS with the ChatGPT desktop app (the version with Codex built in), signed in and synced

  • ~/.codex/auth.json holding a ChatGPT login. Run codex login and sign in with your ChatGPT account to create it.

  • Bun 1.4 or later. The server must run on Bun: other HTTP clients are blocked by Cloudflare.

Installation

Quick start with npx

No clone needed. npx fetches the package from npm and runs it with Bun, so bun must be on your PATH:

claude mcp add --scope user gpt-history-mcp -- npx -y gpt-history-mcp

For other clients, use "command": "npx" and "args": ["-y", "gpt-history-mcp"] in the examples below.

From a clone

git clone https://github.com/YunosukeYoshino/gpt-history-mcp.git
cd gpt-history-mcp
bun install

Then register the server with your MCP client. In the examples below, replace /path/to/gpt-history-mcp with the absolute path of your clone. GUI apps may not inherit your shell's PATH, so use the absolute path of bun there (find it with which bun, e.g. /usr/local/bin/bun).

Claude Code

claude mcp add --scope user gpt-history-mcp -- bun /path/to/gpt-history-mcp/src/index.ts

To share it with a single project instead, put this .mcp.json at that project's root:

{
  "mcpServers": {
    "gpt-history-mcp": {
      "command": "bun",
      "args": ["/path/to/gpt-history-mcp/src/index.ts"]
    }
  }
}

Claude Desktop

Add this to ~/Library/Application Support/Claude/claude_desktop_config.json, then restart the app:

{
  "mcpServers": {
    "gpt-history-mcp": {
      "command": "/usr/local/bin/bun",
      "args": ["/path/to/gpt-history-mcp/src/index.ts"]
    }
  }
}

Codex (CLI and ChatGPT desktop)

Add this to ~/.codex/config.toml:

[mcp_servers.gpt-history-mcp]
command = "/usr/local/bin/bun"
args = ["/path/to/gpt-history-mcp/src/index.ts"]

Cursor

Use the same mcpServers JSON as Claude Desktop, in ~/.cursor/mcp.json (or .cursor/mcp.json for a single project).

Verify

Call search_chatgpt_chats with an empty query from your client. It should list your recent chats. To test the server on its own, use the MCP Inspector:

bunx @modelcontextprotocol/inspector bun /path/to/gpt-history-mcp/src/index.ts

Tools

Tool

Input

Output

Source

search_chatgpt_chats

query, limit (default 20)

[{id, title, created_at, updated_at}]

Local catalog (no network)

search_chatgpt_messages

query, cursor?

{results: [{id, title, snippet, updated_at, archived}], next_cursor}

GET /backend-api/conversations/search

get_chatgpt_chat

id

{id, title, messages: [{role, content, create_time}]}

GET /backend-api/conversation/{id}

  • search_chatgpt_chats matches titles only. All space-separated words must match. An empty query lists the most recent chats.

  • search_chatgpt_messages also searches message bodies. Use it when the title is not enough.

  • get_chatgpt_chat returns only the branch currently shown in ChatGPT. System messages, tool messages and hidden messages are dropped.

How it works

~/.codex/sqlite/codex-dev.db          ~/.codex/auth.json
  local_thread_catalog                  tokens.access_token
  (source_kind = 'chatgpt')                   │
        │                                     ▼
  search_chatgpt_chats           chatgpt.com/backend-api  (Bun fetch)
                                   ├─ conversations/search → search_chatgpt_messages
                                   └─ conversation/{id}    → get_chatgpt_chat
  • The ChatGPT desktop app writes to the catalog database while it runs, so gpt-history-mcp opens it read-only.

  • Codex refreshes the token in auth.json, so gpt-history-mcp re-reads the file on every request.

Configuration

Variable

Default

Description

CODEX_HOME

~/.codex

Where to find auth.json and sqlite/codex-dev.db. Pass it through your client's env setting.

Troubleshooting

Error

Cause and fix

401

The token has expired. Open the ChatGPT desktop app or Codex, or run codex login.

403 (HTML)

Cloudflare blocked the request. Make sure the server runs on Bun.

auth.json not found / no ChatGPT token

Run codex login and sign in with your ChatGPT account (API-key login is not enough).

unable to open database file

The ChatGPT desktop app has not synced yet, or CODEX_HOME points somewhere else.

Development

bun test            # unit tests. They never touch the real API or your credentials.
bunx tsc --noEmit   # type check
bun start           # start the stdio server (usually launched by an MCP client)
src/
├── index.ts      MCP server and tool registration
├── catalog.ts    catalog search (bun:sqlite, read-only)
├── chatgpt.ts    auth loading, GET-only backend-api client, response normalization
├── linearize.ts  conversation tree → ordered messages
├── paths.ts      CODEX_HOME resolution
└── time.ts       Unix seconds → ISO 8601
test/             bun test (fixtures, fake fetch, temp files)

Contributor and agent guidelines are in AGENTS.md.

License

MIT

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search and retrieve from your local macOS iMessage history using hybrid retrieval with context expansion, all processed locally without sending data off-device.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to list and read existing ChatGPT conversations and send messages into them, retrieving the assistant's reply through ChatGPT Desktop's native bridge. It works without cookies, UI automation, or an OpenAI API key.
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables Claude to search locally indexed exported chat history and project docs, retrieving full messages and conversation IDs via full-text search.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to semantically search your entire local conversation history from Claude Desktop, ChatGPT and Claude Code, and to retrieve, browse, ingest and report on those conversations. All embeddings run locally, so no cloud, API keys, or data leave your machine.
    1
    MIT