Skip to main content
Glama
hnt504

ChatAtlas-local

ChatAtlas Local in the browser: a search for "sourdough" with the matching chat open

You've had hundreds of conversations with AI assistants. The good answers, the decisions, the half-finished plans are scattered across ChatGPT and Claude, and their own search barely helps.

ChatAtlas Local takes the data exports both of them already give you and keeps every chat in one file on your computer. Then you can:

  • Search everything at once, from the terminal or in your browser.

  • Ask Claude about it: "what did ChatGPT tell me about my sourdough starter?" or "find the chat where I planned the garden beds." Claude Desktop, Claude Code, Cursor, VS Code and others can read your archive through MCP.

  • Keep it forever, as plain Markdown files or a backup, whatever happens to the apps.

No account, no server, no telemetry. It never connects to the internet.

Get started

You need Node.js 22.16 or newer (or 24). Then:

npm install -g chatatlas-local

Before the first npm release, install it straight from GitHub: npm install -g github:hnt504/chatatlas-local

1. Ask for your exports

  • ChatGPT: Settings → Data controls → Export data. You get an email with a link to a .zip.

  • Claude: Settings → Privacy → Export data. Same idea: an email, then a .zip.

2. Bring them in

chatatlas-local import ~/Downloads/<your ChatGPT export>.zip ~/Downloads/<your Claude export>.zip
✓ 6720ab…-2026-10-21.zip: ChatGPT, 1,284 chats (1,284 new)
✓ data-2026-10-21.zip: Claude, 412 chats (412 new)

Do it again whenever you like with a newer export: new chats come in, changed ones update, nothing doubles up. Or let it happen by itself (see Exports folder).

3. Look around

chatatlas-local search sourdough starter
chatatlas-local open            # the browser view in the screenshot above

Related MCP server: chron

Connect Claude (and friends)

Claude Desktop

Either download chatatlas-local-<version>.mcpb from the latest release and open it with Claude Desktop (it asks where your exports go; no terminal needed), or, with the command installed:

chatatlas-local setup claude-desktop --write

Quit Claude Desktop completely and open it again. Then ask it something like "Search my old chats for the kitchen remodel estimate."

About the red warning. When you open the extension, Claude Desktop says installing it "will grant this extension access to everything on your computer." It says that for every extension installed from a file rather than from Anthropic's directory, because an extension is a program that runs as you. Here's what this one actually does: it reads your exports and its own archive file, never connects to the internet, and gives Claude read-only tools. The code is all here to check.

Claude Code

Install it as a plugin (the MCP tools and a skill that teaches Claude when to look here):

/plugin install chatatlas-local --marketplace hnt504/chatatlas-local

Or, with the command installed:

chatatlas-local setup claude-code --write   # the MCP tools, for every project
chatatlas-local skill                       # teaches Claude Code when to look here

Cursor, VS Code, Windsurf, Gemini CLI, Codex

chatatlas-local setup                 # shows each app's settings, and whether it's connected
chatatlas-local setup cursor --write  # or vscode, windsurf, gemini-cli, codex

--write keeps a copy of the app's old settings file next to it before changing anything.

What about ChatGPT?

ChatGPT can't reach a file on your computer, so it can't read your archive here. You can still import your ChatGPT exports and search them from Claude, the terminal or the browser view.

What the assistant can do

Everything is read-only. An assistant can find and read your chats; it can't change, tag or delete anything.

Tool

What it does

search_chats

Chats holding every word you asked about, with the best-matching message quoted

list_chats

Browse by platform, date, words in the title, or tag

read_chat

Read a conversation message by message (long ones a page at a time)

recent_topics

What you talked about over a stretch of days, week by week

archive_overview

What the archive holds and how far back it goes

An exports folder

Point ChatAtlas Local at a folder (your Downloads, say) and any ChatGPT or Claude export you save there comes in by itself. Other files are left alone, and each file is only read once.

chatatlas-local watch ~/Downloads                              # until you press Ctrl+C
chatatlas-local setup claude-desktop --inbox ~/Downloads --write  # whenever Claude Desktop is open

The Claude Desktop extension asks for this folder when you install it.

Commands

Command

import <file...>

A ChatGPT or Claude export (the .zip, its conversations.json, or the unzipped folder), or a ChatAtlas backup

search <words...>

Chats holding every word. Each word also finds longer words it starts ("plan" finds "planning"); accents don't matter

list

Newest first

show <id>

Read one chat. --md for Markdown, --json for the data. The start of an id is enough

topics

What you talked about lately (--days 90)

stats

Chats per platform, chats per month, your tags

open

The browser view. --read-only, --port 8765, --no-browser

tag <id> <tag...>

Tag a chat (--remove takes tags off)

forget <id...>

Take chats out of the archive

export <folder>

Every chat as a Markdown file, or --format chatatlas for one backup file

watch <folder>

Bring in exports saved there, and keep watching

setup [app] [--write]

Connect an assistant

skill

Install the Claude Code skill

doctor

Check Node, the archive, the search index and every connected app

where

Where the archive file is

Filters for search, list, export and topics: --platform chatgpt, --tag work, --since 2025-03, --until 2026, --title garden, --limit 50, --offset 50, --json.

Privacy policy

ChatAtlas Local is a program that runs on your computer. It has no servers and no accounts.

  • What it collects: nothing. It has no analytics, telemetry or crash reporting, and never makes a network connection.

  • What it stores, and where: the chats from the exports you import, plus any tags you add, in one SQLite file on your computer: ~/.chatatlas-local/chatatlas.db (chatatlas-local where says exactly where). Use another with --db <file> or the CHATATLAS_LOCAL_DB setting. It reads your export files and doesn't change or delete them.

  • Sharing: ChatAtlas Local shares nothing with anyone, including its author. If you connect an AI assistant (Claude Desktop, Claude Code, Cursor and so on), that assistant can search and read your archive through read-only tools when you ask it to, and what it reads becomes part of your conversation with it, under that assistant's own privacy policy.

  • The browser view listens on 127.0.0.1 only, answers only requests addressed to it, and every request needs a random key that only the tab it opened knows.

  • How long it's kept: until you delete it. chatatlas-local forget <id> removes a chat; removing the ~/.chatatlas-local folder removes everything. Your ChatGPT and Claude accounts are never touched.

  • Installing: npm (or GitHub, for the Claude Desktop extension) serves the download under its own terms; after that, nothing goes over the network.

  • Contact: questions go to GitHub issues; anything that could expose someone's chats goes privately through security advisories.

ChatAtlas Local and ChatAtlas Pro

ChatAtlas Local is free and open source, and stays that way. ChatAtlas Pro is the hosted version, for people who want more:

Local

Pro

ChatGPT and Claude exports

✓

✓

Search by words

✓

✓

Claude Desktop, Claude Code, Cursor and more

✓

✓

Your data stays on your computer

✓

Kept in your account

Gemini, Grok, Perplexity, DeepSeek and more

Through a ChatAtlas backup

✓

Search by meaning

✓

ChatGPT and claude.ai on the web

✓

Folders, projects, any device

✓

They speak the same backup format: chatatlas-local export <folder> --format chatatlas makes a file ChatAtlas Pro imports, and a ChatAtlas backup comes into ChatAtlas Local the same way.

Questions

Which Node do I need? 22.16 or newer, or 24 and up (23 won't do), because ChatAtlas Local uses the SQLite database built into Node. chatatlas-local doctor checks.

A chat I had yesterday isn't there. The archive holds what was in the exports you imported. Ask for a fresh export and import it (or drop it in your exports folder).

Can it read exports from Gemini or other apps? Not directly yet. ChatAtlas backups can carry chats from any platform, and support for more exports is welcome as a pull request.

How big does it get? About the size of the exports' text. A 60 MB export of 3,000 chats imports in about two seconds and searches in well under a tenth of a second.

Contributing

Bug reports and pull requests are welcome. See CONTRIBUTING.md.

License

MIT. Made by Heather Turner, who also makes ChatAtlas.

Available Tools

5 tools
archive_overviewArchive overviewA
Read-onlyIdempotent

What the archive holds: how many chats from each platform, the dates they cover, the tags in use and when it was last imported.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description adds useful scope context (it reports counts, date coverage, tags, and import recency), but does not say whether these are cached snapshot values or freshly computed, or roughly how large the response is. That is reasonable but not rich added disclosure.

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?

A single compact sentence that front-loads the core answer ('what the archive holds') and then lists the specific fields. No filler, no repetition of the tool name or title; only minor gain from splitting the enumeration into a readable list.

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?

There is no output schema, so the description must carry the return-value burden, and it does by naming the four things returned. For a zero-parameter, read-only summary tool that is essentially complete; only the lack of guidance on when to call it leaves a small gap.

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 the baseline is 4. The description correctly makes clear there is nothing to filter or configure - it is a whole-archive summary - which matches the empty schema.

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 gives a specific verb-plus-resource ('what the archive holds') and enumerates the exact contents: per-platform chat counts, covered date ranges, tags in use, and last import date. That enumeration separates it from chat-level siblings like list_chats and read_chat, though it never names them explicitly.

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?

Usage is only implied: the contents described suggest it is an orientation/first-call tool, but the description never says 'call this before searching' or when to prefer it over search_chats or list_chats. No exclusions or prerequisites are stated.

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

list_chatsList chatsA
Read-onlyIdempotent

Browse the user's saved conversations, newest first, by platform, date, words in the title or tag. Each line has the chat's id for read_chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoOnly chats with this tag
limitNoHow many (default 25)
sinceNoOnly chats from this date on: 2026-08-01, 2026-08 or 2026
titleNoWords the title holds
untilNoOnly chats up to and including this date: 2026-08-31, 2026-08 or 2026
offsetNoSkip this many (for the next page)
platformNoOnly chats from this platform: chatgpt, claude, gemini, grok, perplexity, deepseek…

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description contributes the result ordering ('newest first') and the line-level shape with ids, but says nothing about pagination behavior beyond the schema, total counts, or result limits.

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 tight sentences, zero filler, with scope and ordering front-loaded ahead of the read_chat pointer. Nothing is redundant or padded.

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?

With no output schema, the description's note that each line carries a chat id partially covers the return shape, and filters are fully covered by the schema. What remains thin is the distinction from search_chats and pagination expectations.

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

Parameters3/5

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

Schema description coverage is 100%, with each filter (tag, title, since, until, platform, limit, offset) documented in-schema, so the baseline is 3. The description restates the filterable dimensions without adding syntax or defaults beyond the schema.

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 ('Browse the user's saved conversations') plus ordering and filter dimensions, so the agent knows exactly what it returns. It does not differentiate itself from the sibling search_chats, leaving the list-vs-search boundary implicit.

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?

Usage is implied by 'newest first' and the closing hint that each line carries the id for read_chat, which sketches a browse-then-read workflow. However, there is no explicit when-to-use-this-instead-of-search_chats guidance or stated preconditions, so the agent must infer the choice.

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

read_chatRead a chatA
Read-onlyIdempotent

Read one saved conversation, message by message, numbered from 1. Long chats come a page at a time: carry on with from_message. A very long single message comes in parts: carry on with part.

ParametersJSON Schema
NameRequiredDescriptionDefault
chatYesThe chat's id from search_chats or list_chats (its start is enough)
partNoFor a message too long for one page: which part of it (default 1)
from_messageNoStart at this message (default 1)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the safe, read-only, idempotent profile. The description adds valuable behavior beyond annotations: messages are numbered from 1, long chats are paged via from_message, and oversized messages are split into parts via part.

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 compact sentences, front-loaded with the main action and then the pagination behavior. 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 simple read tool with full schema coverage and annotations covering safety, the description is largely complete. It explains paging and message-part handling, though it leaves return-shape details implicit since there is no output schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds conceptual meaning by explaining how from_message and part are used to continue reading across pages and message parts.

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 gives a specific verb and resource: reading one saved conversation message by message. The phrase 'one saved conversation' clearly distinguishes it from the sibling search/list tools that handle collections.

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 explains continuation behavior for long chats and long messages, which is useful usage guidance. However, it does not explicitly say when to choose this tool over search_chats, list_chats, or archive_overview.

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

recent_topicsRecent topicsB
Read-onlyIdempotent

What the user talked about with their AIs over a stretch of days: how many chats on each platform, the tags that come up most, and the chats' titles week by week.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoHow far back (default 30)
platformNoOnly chats from this platform: chatgpt, claude, gemini, grok, perplexity, deepseek…

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile needs no restatement. The description adds value by disclosing the shape of the returned data (counts, tags, titles per week), which matters because no output schema exists, but it says nothing about how aggregation is scoped or whether results are paginated.

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?

A single front-loaded sentence with a colon list of returned elements; no filler. The trailing clause 'the chats' titles week by week' is slightly awkward but still informative.

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?

With no output schema, the description carries the burden of describing returns and does so concretely for a two-optional-parameter read tool. Minor gaps remain around aggregation scope (all platforms combined vs. per-platform totals) and result size.

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 100% – both 'days' (default 30, max 3650) and 'platform' (enumerated examples) are documented in the schema. The description only echoes them loosely ('over a stretch of days', 'each platform') without adding format or default details, so the baseline applies.

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 names the resource (topics the user discussed with their AIs over a date range) and enumerates the specific aggregates returned: per-platform chat counts, top tags, and titles by week. That is specific enough for an agent to tell it apart from list_chats or read_chat, though it never names a sibling or a verb.

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 guidance on when to choose this over search_chats or list_chats, no mention of prerequisites, and no exclusions. The agent must infer that this is a summarization/analytics view rather than a retrieval tool.

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

search_chatsSearch chatsA
Read-onlyIdempotent

Find the user's saved conversations that mention something: chats holding every word of the query in the title or messages (each word also matches longer words it starts, accents ignored), title matches first, then newest, with the best-matching message quoted. Each result has the chat's id for read_chat.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoOnly chats with this tag
limitNoHow many chats (default 10)
queryYesThe words to look for
sinceNoOnly chats from this date on: 2026-08-01, 2026-08 or 2026
untilNoOnly chats up to and including this date: 2026-08-31, 2026-08 or 2026
platformNoOnly chats from this platform: chatgpt, claude, gemini, grok, perplexity, deepseek…

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds real behavioral detail beyond that: AND-semantics across query words, prefix and accent normalization, result ordering (title matches first, then newest), and that the best-matching message is quoted in results.

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?

Dense but front-loaded: the search action, then the matching rules, then ordering, then the result shape. Every clause carries information, though the single run-on sentence packs the ordering and return details together in a way that is slightly hard to parse.

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?

No output schema exists, and the description compensates by describing the return contents (chat id, quoted best-matching message) and ordering. For a 6-parameter search tool that is nearly complete; only ordering stability across large result sets and the effect of the filter parameters on ranking go unaddressed.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns above baseline by explaining the matching semantics of the required 'query' parameter (word-splitting, prefix expansion, accent handling) that the schema's one-line 'The words to look for' does not convey. The optional tag/since/until/platform/limit filters are left entirely to the schema.

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 ('Find the user's saved conversations') and goes further to define what a match means: every query word present in title or messages, prefix matching, accent-insensitive. This clearly separates it from list_chats (enumeration) and read_chat (fetch by id).

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 trigger condition is clear — use this when looking for chats that 'mention something' by keyword — and the description routes the follow-up step to read_chat via the returned id. It never explicitly contrasts itself with list_chats (browse) or recent_topics, so the sibling differentiation 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedarchive_overview
    • First observedlist_chats
    • First observedread_chat
    • First observedrecent_topics
    • First observedsearch_chats

TDQS

A3.7/5.0

Scored across 5 tools

Disambiguation4/5

Each tool has a distinct primary purpose: aggregate overview, content search, filtered browsing, single-chat reading, and recent topic summarization. The main overlap is between search_chats and list_chats, since both can find chats by title words, but their descriptions clarify that search also scans message content while list is for browsing with metadata filters.

Naming Consistency3/5

The names use consistent snake_case and readable vocabulary, but the convention is mixed: search_chats, list_chats, and read_chat are verb_noun, while archive_overview and recent_topics are noun phrases. This is still understandable but not a predictable single pattern.

Tool Count5/5

Five tools is well-scoped for a local chat archive: overview, search, browse, read, and recent-topic summarization. Each tool covers a distinct workflow and none feels redundant or extraneous.

Completeness4/5

The surface covers the core read-only lifecycle for saved conversations: orienting with overview/topics, finding chats, browsing, and reading messages with pagination. Minor gaps exist around archive management, such as import, export, or tag editing, but these may be intentionally out of scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides read-only access to local Beeper message history on macOS, enabling users to search conversations, read messages, and list recent chats through natural language queries. Supports both SQLite and IndexedDB storage formats with privacy-focused local-only operation.
    1
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Permanent, timestamped audit log for every AI conversation, stored locally in SQLite, owned by you.
    -
  • F
    license
    A
    quality
    D
    maintenance
    Enables full-text search and browsing of Claude.ai conversation history by ingesting exported conversations into a local SQLite database with FTS5 indexes.
    5
    1
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only access to Kilo Code and Opencode conversation history stored in a local SQLite database, allowing users to list projects and sessions, read messages, and perform full-text keyword searches across all messages.
    -