google-activity-assistant
This server provides MCP tools for querying your locally ingested Google Takeout activity data, including Search and YouTube history. It operates entirely offline with no Google network calls.
search_activity: Perform full-text keyword search across activity entries (titles, URLs, channels), with optional filters for product type (search, youtube, maps, chrome, assistant, play, other), date range, and result limit (1-100, default 20). Returns matching entries with citations. Use an empty query to list recent activity.
get_activity_stats: Get summary statistics like entry counts, date range, and product distribution to check import status and coverage.
get_db_info: Return the local database path and confirm existence.
Allows agents to search and analyze your YouTube activity history (watch and search) from a local Google Takeout export, with full-text search and date/product filters.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@google-activity-assistantsearch my activity history for 'MCP servers'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Activity Assistant
Local-first tools over your Google Takeout activity — keyword search in SQLite, MCP tools for any compatible client, and an optional local web dashboard.
Not a live Google API. You export Takeout once (or periodically), ingest locally, then query with Claude Desktop, Cursor, Grok, or
gaa search.
Doc | Use when |
Full walkthrough: what it can/can’t do, Takeout, CLI, MCP, FAQ | |
Short MCP + export reference | |
Privacy / what not to commit | |
Dev setup & PRs |
Why
Mainstream chatbots don’t have your Search/YouTube history. This project turns a Takeout export into:
Structured + full-text search (SQLite + FTS5)
MCP tools so agents can answer with citations from your real activity
Optional local dashboard (timeline / journeys)
Privacy-first: processing stays on disk under data/ (gitignored).
Related MCP server: Hoard
Similar work & positioning
This is not “the only personal-data project” and not “the only MCP.” Adjacent work exists; the packaging here is specific.
Category | Examples / reality | Overlap with this repo |
Google Takeout itself | Official takeout.google.com | Data source only |
Offline Takeout parsers / privacy research | Scripts, blogs, personal-data tooling | Ingest inspiration |
Personal RAG (“chat with my notes/PDFs”) | Common portfolio pattern | Same idea (local memory + LLM), different corpus |
MCP for browser history | e.g. local browser-history MCP servers | Same shape (history → tools), not Google Takeout |
Google Workspace / product MCPs | Gmail, Drive, Calendar, Looker, SecOps, etc. | Live product APIs — not My Activity dumps |
Live “My Activity API” for third parties | Does not exist as a simple public stream | Why we use Takeout + local DB |
What this project emphasizes
Takeout-first Search / YouTube history (JSON and HTML history files)
SQLite + FTS5 as system of record (portable, offline)
MCP tools so any compatible host can query your export with citations
Explicit honesty: no live My Activity sync, multi-GB media exports out of scope for v0.1
How to describe it (interviews / README pitch)
Prefer: “Most Google MCPs hit Drive/Gmail; this wires Takeout My Activity / YouTube history into a local index and MCP tools.”
Avoid: “Nobody has ever built personal history + AI.”
Features (v0.1)
Feature | Status |
Ingest Takeout JSON (My Activity / YT history) | ✅ |
Ingest Takeout HTML watch/search history | ✅ |
Selective zip extract (skips huge media) | ✅ |
SQLite + FTS5 keyword search | ✅ |
Hybrid search (FTS + embeddings, RRF) | ✅ v0.2 |
Embeddings: hashing default; FastEmbed optional | ✅ |
CLI: | ✅ |
MCP: search (modes), stats, | ✅ |
Insights (top channels/searches, by hour/weekday/month) | ✅ v0.3 |
Period summary, on this day, journeys, similar, random | ✅ v0.3 |
Local CSV/JSON export | ✅ v0.3 |
Local FastAPI + React dashboard ( | ✅ |
Synthetic fixtures for demos/tests | ✅ |
Google Data Portability auto-sync | 🔜 later |
Quick start
Requirements
Python 3.12+
uv (recommended)
git clone https://github.com/Daemon-Killer/google-activity-assistant.git
cd google-activity-assistant
uv syncSample data (no Google account needed)
uv run gaa ingest-fixtures
uv run gaa reindex # embeddings for hybrid/semantic search
uv run gaa status
uv run gaa search "React Server" # hybrid by default
uv run gaa search "React Server" --mode keyword
uv run gaa insights
uv run gaa on-this-day
uv run gaa journeys
uv run gaa random
uv run gaa export ./data/export.csvOptional better semantic model (ONNX, no PyTorch):
uv sync --extra semantic
uv run gaa reindex # rebuilds missing rows with FastEmbed when availableYour Takeout
Open takeout.google.com
Prefer My Activity (Search + YouTube) and/or YouTube → History, format JSON if available (HTML also works)
Avoid exporting full Photos/video libraries if you only want activity search
Ingest:
uv run gaa ingest /path/to/takeout.zip
# or extracted folder
uv run gaa ingest /path/to/Takeout
uv run gaa statusReal exports and data/activity.db are gitignored. Never commit them.
MCP (Claude / Cursor / Grok / …)
Start the stdio server:
uv run gaa serve-mcpGrok Build (~/.grok/config.toml)
[mcp_servers.google_activity]
command = "uv"
args = [
"run",
"--directory",
"/absolute/path/to/google-activity-assistant",
"gaa",
"serve-mcp",
]
enabled = true
startup_timeout_sec = 60Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"google-activity": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/google-activity-assistant",
"gaa",
"serve-mcp"
]
}
}
}Tools
Tool | Purpose |
| Search with |
| Counts / date range / embedding coverage |
| Local paths only |
| Ingest a local Takeout zip/folder path |
| Build vectors for hybrid/semantic search |
| Top channels/searches, hour/weekday heat |
| Counts + samples for a date range |
| Same calendar day across years |
| Search→watch pairs (local heuristic) |
| Embedding neighbors for a hit id |
| Random rows |
| Write CSV/JSON to a local path |
After ingest + reindex, ask: “Search my YouTube for romantic Bollywood songs and cite titles + dates.”
Or: “Use get_insights and summarize my peak hours.”
Full walkthrough (export, FAQ, demo script): docs/HOW_TO.md · MCP config short ref: docs/MCP_AND_TAKEOUT.md
Local dashboard
# If web/dist is missing:
cd web && npm install && npm run build && cd ..
uv run gaa serve-ui
# → http://127.0.0.1:8788API routes under /api/* (stats, activity list, journeys). Binds to localhost by default.
Project layout
google-activity-assistant/
├── src/google_activity_assistant/
│ ├── cli.py # gaa commands
│ ├── mcp_server.py # FastMCP tools
│ ├── parse_takeout.py # JSON + HTML parsers
│ ├── ingest.py
│ ├── db.py # SQLite + FTS5
│ ├── search.py
│ ├── journeys.py # search→watch proximity
│ └── api.py # FastAPI dashboard API
├── web/ # React + Vite dashboard
├── fixtures/ # synthetic Takeout samples
├── docs/
│ ├── HOW_TO.md # full user guide
│ └── MCP_AND_TAKEOUT.md
├── tests/
└── data/ # gitignored — your DB + exportsDevelopment
uv sync --extra dev
uv run pytestSee CONTRIBUTING.md.
Privacy & license
SECURITY.md — local-first, what not to commit
LICENSE — MIT
Takeout is Google’s official data export. This project is unaffiliated with Google.
Roadmap
Better multi-product My Activity coverage (Search slice, Chrome)
Optional Data Portability OAuth re-import (bulk jobs, not live My Activity)
Drive-folder watch / auto-ingest helpers
Packaging / one-command installers
PRs welcome.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for browsing, searching, exporting, and backing up your Cursor AI chat history directly into Claude via natural language.810232MIT
- Alicense-qualityDmaintenanceLocal MCP server for indexing personal knowledge into SQLite with hybrid search, chunk-level citations, memory tools, and agent orchestration.4MIT
- Alicense-qualityDmaintenanceMCP server that exposes local Granola meeting notes, summaries, and transcripts to AI assistants via SQLite-backed search and retrieval.MIT
- Alicense-qualityDmaintenancePersonal memory MCP server backed by SQLite FTS5 BM25 search with temporal reranking.201MIT
Related MCP Connectors
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for AI dialogue using various LLM models via AceDataCloud
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Daemon-Killer/google-activity-assistant'
If you have feedback or need assistance with the MCP directory API, please join our Discord server