Timeline MCP
Provides tools for querying Google Timeline location history, including visits, trips, distances, and place searches; optionally enriches Google place IDs with names, categories, addresses, and Google Maps links via the Google Places API.
Enriches visited coordinates with addresses, cities, and countries using OpenStreetMap geocoding, with rate-limited lookups cached in the local database.
Click on "Deploy 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., "@Timeline MCPWhere was I on 3 March?"
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.
Timeline MCP
An MCP server that lets an AI assistant answer questions about your Google Timeline: "Where was I on 3 March?", "When was I at the bakery in Meppel?", "How far did I cycle last week?".
It reads a Timeline export, indexes it into SQLite, and serves it over MCP (stdio or streamable HTTP). Your data stays on your machine, except for the optional place lookups described below.
Export your Timeline (Android)
Google Timeline data is stored on your phone, not in your Google account, so you export it from the device:
Open the Settings app → Location → Location services → Timeline. (Alternatively: Google Maps → your profile picture → Your Timeline → ⋮ → Location & privacy settings.)
Tap Export Timeline data and choose where to save the file.
Copy the resulting JSON file (e.g.
Timeline.json, orTijdlijn.jsonon a Dutch phone) to the machine that runs the server.
Menu names can differ slightly per Android version and manufacturer.
This server supports the new on-device export format: one JSON file with a top-level semanticSegments array. The older Google Takeout export (Records.json, Semantic Location History/) is not supported.
Related MCP server: Google Maps MCP Server
Getting started
Requires Node.js 22+. npx downloads this repository, builds it, and runs it over stdio, so there is nothing to clone or keep running:
claude mcp add timeline \
-e TIMELINE_JSON_PATH=/absolute/path/to/Timeline.json \
-e TIMELINE_DB_PATH=/absolute/path/to/timeline.db \
-- npx -y github:idserda/timeline-mcpWindows: use
cmd /c npx …as the command.Versions: the first start is slower while npm builds the package; it is cached afterwards. Pin a version with
github:idserda/timeline-mcp#v0.1.0, or runnpx clear-npx-cacheto pick up the latestmaster.Updates to your export: the index is rebuilt automatically on the next start when the export file has changed.
Run claude mcp list to check that the server connects.
Running as an HTTP server (Docker)
To run one long-lived server that several clients can share:
docker build -t timeline-mcp .
docker run -d --name timeline-mcp --restart unless-stopped \
-p 3000:3000 \
--env-file timeline.env \
-v "$PWD/Timeline.json:/data/Timeline.json:ro" \
-v "$PWD/.timeline-data:/data/state" \
timeline-mcp
claude mcp add --transport http timeline http://localhost:3000/mcptimeline.env holds the configuration as NAME=value lines, at least TIMELINE_JSON_PATH=/data/Timeline.json and TIMELINE_DB_PATH=/data/state/timeline.db. The .timeline-data/ folder keeps the database, so lookups survive restarts. /health returns ok.
Security: the HTTP server has no authentication and is reachable from your network, so only run it on trusted networks. To keep it local to the machine, publish the port as -p 127.0.0.1:3000:3000.
Configuration
Variable | Default | Description |
| required | Path to the Timeline export. |
| required | Path to the SQLite index (created if missing). |
|
|
|
|
| Address to listen on (HTTP only). |
|
| Port to listen on (HTTP only). |
| Optional aliases file. | |
|
| Identifies you to OpenStreetMap; set this to something with contact info. |
| Enables place names. | |
| Google's default | Language for place names and categories, e.g. |
|
| Pace of Google lookups. |
|
|
|
| Also append logs to this file. |
Tools
Tool | What it does |
| Where you were at a given moment. |
| All visits and trips in a time range. |
| Visits, trips, and total distance for one day. |
| Travel modes and distances in a time range. |
| Find places you have visited, with visit counts. |
| All visits to a place, optionally within a time range. |
| Look up names and addresses for visited places (see below). |
Resources: timeline://stats, timeline://day/{date}, and timeline://segment/{id}.
Place names
The export only contains coordinates and Google place IDs (like ChIJN1t_tDeuEmsRUsoyG83frY4), not names. Run the enrich_places tool once after the first start, and again after importing a new export, to look them up:
OpenStreetMap (free, always on): turns coordinates into an address, city, and country. Limited to 1 request per second, so the first run can take a while.
Google Places (optional, set
TIMELINE_GOOGLE_PLACES_API_KEY): turns place IDs into real names like "Albert Heijn", plus a category ("Supermarket"), address, and Google Maps link. The key needs Places API (New) enabled. Each lookup is billed as a Place Details (Pro) request.
Results are cached in the database, so each place is looked up only once. If Google rate-limits you, enrich_places stops, keeps what it has, and reports how many places are remaining. Run it again later to continue.
A visit is labelled using the first available of: your alias, Home/Work from Google, the Google place name, then the OpenStreetMap address.
Searching places
search_places and when_was_i_at_place take a free-text query. A place matches when every word appears in its name, address, city, or category. Partial words count, capitals and accents don't matter, and small words like in, the, and de are ignored. For example, Bakker in Meppel finds "Bakkerij Jansen, Hoofdstraat 1, Meppel" but not bakeries in other towns, and cafe finds "Café de Kroon".
Names and categories come from enrich_places, so run that first. With TIMELINE_GOOGLE_PLACES_LANGUAGE=nl, Dutch words like bakker and supermarkt work as well as English ones.
Aliases
Optionally give places your own names with a JSON file set in TIMELINE_ALIASES_PATH:
{
"placeIds": {
"ChIJN1t_tDeuEmsRUsoyG83frY4": "Ten Forward"
},
"semanticTypes": {
"WORK": "The Bridge"
}
}Development
npm install
npm test
npm run build
TIMELINE_JSON_PATH=/path/to/Timeline.json TIMELINE_DB_PATH=/path/to/timeline.db npm run devLicense
This server cannot be deployed
Maintenance
Related MCP Connectors
Give any AI assistant real-time access to your phone's GPS and location history.
Geolocate Me turns your phone into location context for any AI assistant. Install the iOS or Android app, connect once with OAuth, and your GPS is queryable in natural language. Ask where you are, where you parked, where you were yesterday at 3pm, or how long you were at the office — the assistant calls the tool and answers with a real street address. https://geolocateme.app
Travel tools for AI agents: plan and edit real trips, search stays and tours, import travel videos.
The location engine for AI agents: one verified coordinate from where a user means. Beta: US.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search and analyze Chrome browser history and bookmarks data locally, including keyword searches, date range filtering, recent browsing activity, and usage statistics across all platforms.2-
- AlicenseAqualityBmaintenanceEnables AI assistants to access Google Maps services including places search, details, directions, geocoding, and nearby search through natural language.62MIT

Magic Lane MCP Serverofficial
AlicenseBqualityBmaintenanceEnables AI agents to become geospatially intelligent assistants with tools for location search, smart routing, round trip planning, reverse geocoding, isochrone analysis, route visualization, geofence management, and interactive map display.822 npm7Apache 2.0- FlicenseBqualityDmaintenanceEnables interaction with Dawarich location history through tools for maps, stats, places, visits, points, and trip workflows.19-