Skip to content
Conduit

mcp server

carryon

Take your AI memory with you: ChatGPT / Claude / Gemini chat history in one self-hosted archive, searchable from any assistant over MCP. Home Assistant add-on.

shenyinzhe/carryoncommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

This project does not publish an install method we can turn into a config. Follow the README instead.

README

synced Oct 21, 2026

Carry-On

Take your AI memory with you. Switch between ChatGPT, Claude and Gemini subscriptions without losing years of conversations: Carry-On imports the official data exports of all three into one searchable archive on your own hardware, and serves it over MCP so whichever assistant you use today can search what you discussed with the others.

Runs as a Home Assistant add-on or a plain Docker container (aarch64 / amd64), with optional built-in Tailscale Funnel so claude.ai and chatgpt.com can reach it without a domain or port forwarding.

中文说明

Features

  • Official exports only — no browser extension, no scraping, no session cookies. Drop the export zip into a folder; re-export any time, imports are incremental.
  • Faithful parsing — keeps only the branch you actually ended on (edits/regenerations dropped), voice-chat transcripts, attachment text, Gemini Canvas code; merges Gemini Takeout across exports since Google deletes activity after 18 months.
  • CJK-friendly search — SQLite FTS5 with a trigram tokenizer: Chinese/Japanese work without word segmentation.
  • Works with web connectors — streamable HTTP; tools follow the ChatGPT connector search/fetch convention and also work in Claude custom connectors and any MCP client.
  • Small — ~1400 ChatGPT + ~900 Gemini conversations ≈ 130 MB database, ~220 MB RAM.

Install

Home Assistant

Add repository to Home Assistant

Or add https://github.com/shenyinzhe/carryon as a repository in the add-on store, then install Carry-On. A prebuilt image is pulled, so installing takes seconds. See carryon/DOCS.md for configuration, importing and connecting.

Docker

curl -O https://raw.githubusercontent.com/shenyinzhe/carryon/main/compose.yaml
echo "CARRYON_SECRET=$(python3 -c 'import secrets;print(secrets.token_urlsafe(32))')" > .env
docker compose up -d

Drop export zips into ./share/inbox/; the endpoint is http://127.0.0.1:8765/<secret>/mcp. For a public HTTPS URL, add CARRYON_TAILSCALE_FUNNEL=true to .env and open the Tailscale login link from docker compose logs. Everything else in carryon/DOCS.md applies; the add-on options map to CARRYON_SECRET, CARRYON_TAILSCALE_FUNNEL and CARRYON_TAILSCALE_HOSTNAME.

Tools

Tool
search(query, source?)Keyword search across all conversations (any language)
fetch(id)Full text of one conversation
list_recent(limit?, source?)Most recently updated conversations
archive_stats()Number of conversations per source

Security

Authentication is a long random secret path (https://<host>/<secret>/mcp), because Claude custom connectors accept only authless or OAuth servers. Treat the whole URL like a password; the server never logs request paths. OAuth is on the roadmap.

Development

pip install -r carryon/requirements.txt pytest
pytest                      # synthetic exports of all three formats, no personal data
cd carryon
python -m carryon.cli --db carryon.db import chatgpt-export.zip claude-export.zip takeout.zip
python -m carryon.cli --db carryon.db search "vector database"
CARRYON_DATA=. CARRYON_INBOX=./inbox CARRYON_SECRET=$(python -c "import secrets;print(secrets.token_urlsafe(32))") \
  python -m carryon.server

Roadmap

  • Hybrid vector search with a multilingual embedding model
  • OAuth instead of the secret path
  • save_note tool so assistants can write conclusions back

License

MIT

↑↓ navigate openesc close