Topic: Claude Desktop export
Claude Desktop App Conversation Export — Local Storage, Session Architecture, and Data Portability
Claude Desktop is a native Mac and Windows application from Anthropic. Unlike editors like Cursor or Zed, which store AI conversations locally in project files, Claude Desktop stores conversations on Anthropic's servers — the same server-side session storage as claude.ai. This architectural choice means the export path is identical to claude.ai, but it also means the app data directory on your computer contains almost no conversation content. This page covers how Claude Desktop sessions are stored, how to export them, what the local app data directory actually contains (including MCP server configuration), how to identify Desktop sessions in your export, and the GDPR implications.
TL;DR
Claude Desktop conversations are stored server-side — export via claude.ai Settings → Account → Export Data (same as claude.ai). Local app data directory (~/Library/Application Support/Claude/ on Mac) contains auth tokens and MCP configuration (claude_desktop_config.json), not conversation content. Desktop sessions appear in the same conversations.json as claude.ai sessions — identifiable by tool_use/tool_result message types if MCP tools were used. Deleting Claude Desktop does not delete your conversations.
Claude Desktop architecture: server-side sessions
Claude Desktop is built with Electron — a framework that packages a web application as a native desktop app. Under the hood, Claude Desktop communicates with the same Anthropic API that powers claude.ai, using the same authentication and the same server-side conversation storage. A conversation started in Claude Desktop appears immediately on claude.ai if you open a browser and log in.
This is the opposite of what many engineers expect when they first install Claude Desktop. The desktop app mental model — shaped by tools like Obsidian (local Markdown vault), Cursor (project-local chat history), VS Code (workspace-local settings) — predicts local storage. Claude Desktop doesn't work that way. It's a native shell around a web service, not an offline-capable local application.
The reason for this design is continuity: your conversations are accessible from any device (phone, browser, another computer) because they're stored centrally. The trade-off is that conversation history depends on your Anthropic account being active, and data portability requires going through Anthropic's export mechanism rather than copying a local file.
How Claude Desktop differs from Cursor and Zed
Cursor and Zed are code editors that embed AI chat as a local feature. Cursor stores chat history in a SQLite database at ~/.cursor/; Zed stores conversation state in workspace-local files. Both are primarily development tools where AI is a feature, not the product.
Claude Desktop is a general-purpose Claude interface — the product is Claude, not a code editor that happens to have Claude. Its conversations are stored where claude.ai stores them, not where your files are. This is why the Cursor AI chat export and Zed AI chat export pages describe a local database forensics path, while this page describes an account-level export path.
Export path: identical to claude.ai
To export all your Claude Desktop conversations (along with all your claude.ai conversations — they share the same store):
- Open a browser and go to claude.ai. Log in with the same account you use in Claude Desktop.
- Click your name or avatar in the bottom-left → Settings.
- In the Account tab, scroll to Export Data and click Export Data.
- Anthropic emails a download link to your registered address within a few minutes. The email contains a ZIP file link.
- Download and extract the ZIP. It contains
conversations.jsonwith all your conversations.
There is no "Export" button inside the Claude Desktop application itself. The native app has no data export UI because the data is not stored locally. If you can't find the export, the Claude export not working page covers the most common issues: export email going to spam, link expiring after 24 hours, and the delay before large exports are ready.
conversations.json format for Desktop sessions
The conversations.json format is the same regardless of whether a conversation originated in Claude Desktop or claude.ai. Each conversation entry follows this structure:
{
"uuid": "01234567-89ab-cdef-0123-456789abcdef",
"name": "Architecture discussion: API gateway options",
"created_at": "2026-05-12T14:23:11.000Z",
"updated_at": "2026-05-12T15:04:37.000Z",
"account": { "uuid": "..." },
"chat_messages": [
{
"uuid": "...",
"text": "I'm evaluating three API gateway options...",
"content": [...],
"sender": "human",
"created_at": "2026-05-12T14:23:11.000Z",
"updated_at": "..."
},
{
"uuid": "...",
"text": "Let me analyze the trade-offs for each option...",
"content": [...],
"sender": "assistant",
"created_at": "2026-05-12T14:23:45.000Z",
"updated_at": "..."
}
]
}
The format is described in detail on the Claude conversation export format page. For standard architecture conversations without MCP tool use, the format is indistinguishable between Desktop and claude.ai sessions.
Identifying Claude Desktop sessions in your export
Claude Desktop's defining capability versus claude.ai is MCP (Model Context Protocol) — a protocol that allows Claude to call external tools like file system access, shell command execution, database queries, and custom integrations. When MCP tools are invoked, they leave distinctive markers in the conversation export.
tool_use and tool_result messages
When Claude Desktop calls an MCP tool, the conversation includes message objects with content type tool_use (Claude requesting a tool call) and tool_result (the result returned by the tool). These types do not appear in claude.ai conversations, which have no MCP access. To find Claude Desktop sessions with tool use in your export:
import json
with open('conversations.json') as f:
data = json.load(f)
desktop_sessions = []
for conv in data:
has_tool_use = any(
isinstance(msg.get('content'), list) and
any(block.get('type') == 'tool_use' for block in msg['content'])
for msg in conv.get('chat_messages', [])
)
if has_tool_use:
desktop_sessions.append({
'uuid': conv['uuid'],
'name': conv.get('name', ''),
'created_at': conv['created_at']
})
print(f"Found {len(desktop_sessions)} conversations with MCP tool use")
This script identifies conversations where MCP tools were actively used. Standard conversations in Claude Desktop (no MCP tools invoked) look identical to claude.ai sessions and cannot be reliably distinguished by content alone.
Conversations without tool use
Most architecture deliberation sessions in Claude Desktop don't use MCP tools — they're text conversations where you discuss design decisions with Claude, the same as in claude.ai. These are the sessions most relevant to the WhyChose extractor workflow: they contain the reasoning about alternatives, constraints, and trade-offs that architects write ADRs to capture. Tool-use-free Claude Desktop sessions are fully recoverable via the standard export path and are processed by the extractor exactly like claude.ai sessions.
What IS stored locally: the app data directory
While conversation content is server-side, the Claude Desktop app data directory does contain meaningful local state. The directory location depends on the operating system:
- macOS:
~/Library/Application Support/Claude/ - Windows:
%APPDATA%\Claude\(typicallyC:\Users\YourName\AppData\Roaming\Claude\) - Linux:
~/.config/Claude/
Contents of the app data directory:
claude_desktop_config.json — the MCP configuration file
The most important local file. This defines the MCP servers Claude Desktop connects to — filesystem access, shell execution, database integrations, custom tools. Example:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/projects"]
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
}
}
}
This configuration is not included in the conversations.json export. If you reinstall Claude Desktop on a new machine, your conversations are recovered from the cloud export, but your MCP server configuration must be manually restored from a backup of this file (or from memory). Engineers who maintain complex MCP setups should back up claude_desktop_config.json separately — it is the local state with no cloud equivalent.
Authentication credentials
Claude Desktop stores your authentication tokens in the OS keychain on macOS and Windows (Keychain Access on Mac, Windows Credential Manager on Windows). On Linux, tokens may be stored in the app data directory directly or in the system keychain depending on the distribution. These tokens give the application access to your Anthropic account — treat them like passwords. They are not conversation content and are not included in the data export.
Application preferences and cache
The app data directory also contains UI preferences (theme, font size, window position), Electron application cache, and update metadata. None of this is conversation content. The cache is safe to delete if Claude Desktop is behaving unexpectedly — the application will rebuild it on next launch.
Claude Desktop vs claude.ai vs Claude API: three storage models
| Product | Where conversations are stored | Export path | Local files |
|---|---|---|---|
| Claude Desktop | Anthropic servers (same as claude.ai) | claude.ai → Settings → Export Data | Auth tokens + MCP config only |
| claude.ai (browser) | Anthropic servers | Settings → Account → Export Data | Browser cache/cookies only |
| Claude API (direct) | Not stored — stateless per request | No export (nothing stored) | Whatever your app logs locally |
| Claude Code CLI | Anthropic servers if logged in; local project files for context | claude.ai → Settings → Export Data (for server sessions) | Project files, .claude/settings.json |
The key insight: Claude Desktop and claude.ai share the same conversation store. If you have a Pro or Team subscription, conversations are accessible from both surfaces. Claude API calls (POST /v1/messages) are stateless — nothing is retained on Anthropic's servers after the response is returned. The Claude API conversation export page covers the API case and why it requires at-the-time capture rather than post-hoc export.
Claude Projects in Claude Desktop
Claude Projects (available on Pro and Team plans) are accessible from Claude Desktop. A Project bundles a persistent system prompt and Knowledge Files (uploaded documents) with a set of conversations that share context.
Project conversations are included in the standard data export, same as standalone conversations. The Project name appears as a field on each conversation. Knowledge Files uploaded to a Project are not included in the export — only the conversation text is exported. This is the same binary-exclusion behavior as claude.ai Projects and ChatGPT file uploads: the conversation references the uploaded content, but the file itself is not bundled in the data export ZIP.
If you used Claude Projects in Claude Desktop for architecture deliberation (common for teams with a shared Project containing design documents as Knowledge Files), the conversation text — including Claude's analysis of the design documents — is in your export and processable by the WhyChose extractor. The design documents themselves must be preserved separately.
GDPR and data portability
Claude Desktop conversations fall under the same GDPR data portability rights as claude.ai conversations, because they use the same data store. The standard data export (Settings → Account → Export Data) satisfies Article 20 data portability for conversation content. Anthropic's GDPR-specific data subject request path is available via their privacy page for cases where the standard export is insufficient (e.g., requests for metadata beyond conversation text, or deletion requests).
The claude_desktop_config.json file is local to your machine and is not held by Anthropic — it is not subject to GDPR data portability requests. It is your configuration of a third-party tool, not personal data stored by the data controller.
Authentication tokens stored in the OS keychain are credentials, not personal data in the GDPR sense. They give access to your personal data (the conversations on Anthropic's servers) but are not the data itself. Rotating them (by signing out of Claude Desktop) does not delete your conversations.
What gets lost if you delete Claude Desktop
When you uninstall Claude Desktop:
- Not lost: Conversations (stored server-side on Anthropic's servers, accessible via claude.ai)
- Not lost: Account access (your Anthropic account credentials are separate from the app)
- Lost:
claude_desktop_config.json— your MCP server configuration. Back this up before uninstalling if you have custom MCP integrations. - Lost: Authentication tokens in the OS keychain (you'll need to log in again after reinstalling)
- Lost: Application preferences and UI state
The practical implication: reinstalling Claude Desktop recovers your conversations automatically after you log in. The only manual work is restoring your MCP server configuration from a backup of claude_desktop_config.json.
Using Claude Desktop for architecture deliberation
Claude Desktop's MCP capabilities make it more powerful than claude.ai for architecture deliberation in active codebases: you can give Claude direct read access to your project files, schema files, and configuration — so the architecture discussion has the actual system context, not a copied-and-pasted excerpt.
For example, with the filesystem MCP server configured:
mcpServers: {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/project"]
}
}
You can ask Claude Desktop to read the current database schema, list the existing service interfaces, or examine the dependency tree before asking "what are the trade-offs of moving this component to a separate service?" — producing a Context section for an ADR that references the actual current state of the system rather than an engineer's description of it.
These conversations are fully recoverable via the standard export and are the highest-quality input for the WhyChose extractor: they contain both Claude's analysis and the actual system context it was analyzing. The extractor surfaces which conversations contain ADR-candidate decisions, and the MCP-assisted context means the Alternatives Considered and Context sections are based on the real architecture rather than a summary.
Further Reading
- How to export Claude conversations — the complete step-by-step guide for the claude.ai data export, which covers Claude Desktop sessions as well
- Claude conversation export format — the conversations.json schema, chat_messages structure, and content types including tool_use and tool_result
- Claude Projects export — how Projects, Knowledge Files, and project-scoped conversations appear in the data export
- Claude API conversation export — the API case: stateless requests, no server-side storage, at-the-time capture requirements
- Cursor AI chat export — the comparison case: a code editor where AI chat IS stored locally in a SQLite database
- Extract decisions from Claude conversations — how to surface architecture decisions from your Claude export using the WhyChose extractor
Your architecture reasoning is already in your Claude Desktop sessions
Every architecture decision you deliberated with Claude Desktop — in standard conversations or in MCP-assisted sessions with live codebase context — is in your conversations.json export. The WhyChose extractor processes that export and surfaces the sessions where architectural decisions were made, producing structured ADR-ready output: the decision, the alternatives that were evaluated, the constraints that shaped the choice, and the consequences that were anticipated. The deliberation that happened before the ADR was written is recoverable.