Sync Google Calendar events into EvolutionDB long-term memory.
Project description
evolutiondb-calendar-sync
Pull Google Calendar events into EvolutionDB long-term memory so an AI assistant can answer "when did we meet about the database move?" weeks later, side by side with the chat and email memory that the other connectors write.
Setup
If you already configured evolutiondb-gmail-sync, you can reuse
the same OAuth Desktop client. Just enable the Calendar API on the
same Google Cloud project.
- https://console.cloud.google.com/apis/library/calendar-json.googleapis.com → Enable.
- APIs & Services → Credentials → reuse the existing Desktop OAuth client (or create one of type Desktop app).
- Copy the Client ID + Client secret into
.env(GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET). - Make sure your Google account is listed under "Test Users" on the OAuth consent screen.
The package only requests calendar.readonly — it cannot create,
edit, or delete events on your calendar.
Install
pip install evolutiondb-calendar-sync
# or, from this repo:
pip install -e client/calendar-sync
First-time auth
evolutiondb-calendar-sync --auth
Opens a browser tab for Google's consent screen and stores the
refresh token at ~/.evosql/calendar_token.json (mode 0600).
Subsequent runs are silent.
Run
# One pass; pull the last 30 days. Bootstrap.
evolutiondb-calendar-sync --once --since 30d
# Daemon mode, polls every 15 minutes.
evolutiondb-calendar-sync --interval 900
# Auth + scope check without writes.
evolutiondb-calendar-sync --once --dry-run
Each pass prints a one-line JSON summary:
{"ok": true, "calendars": 6, "events": 142, "deleted": 3, "skipped": 1, "errors": 0}
How "incremental" works
Google's Calendar API hands back a nextSyncToken on every list
call. We persist it per-calendar and pass it on the next run, so
only events that changed since last time come over the wire. A
deleted event also flows through — the connector picks it up,
removes the matching row from the memory store, and counts it.
If the token is older than 30 days Google returns 410. The
connector clears the stale token and re-bootstraps from the
--since floor automatically; nothing for you to do.
What gets indexed
| Field | Source |
|---|---|
| summary | event title |
| description | event body, clipped to 1 kB |
| location | event location string |
| organizer | display name or email of the creator |
| attendees | list of attendee names |
| start / end | RFC 3339 timestamps (or date for all-day) |
| status | confirmed / tentative / cancelled |
| html_link | Google Calendar deep link |
| calendar_name | the calendar this event lives on |
Records use the calendar id and event id as the key
(gcal_event_<calendar_id>_<event_id>), so re-sync UPSERTs.
Privacy
The token reads what your account can see, including events you
were invited to on other people's calendars. Once an event lands
in EvolutionDB, anyone with the matching MCP_USER_ID can recall
it through search_memory. Use a dedicated Google account for
sensitive calendars rather than pointing this at your primary one.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file evolutiondb_calendar_sync-0.1.0.tar.gz.
File metadata
- Download URL: evolutiondb_calendar_sync-0.1.0.tar.gz
- Upload date:
- Size: 15.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4323595426a42900a3191649b80caadc493ccf23b9570221272f97f985e5b587
|
|
| MD5 |
5378e9449ee39d863cfd1bffca5870bd
|
|
| BLAKE2b-256 |
662ef9513dccc0f80abda7ffebbde5ae7bb2f4b4e044147236258edb4d4dd0c8
|
Provenance
The following attestation bundles were made for evolutiondb_calendar_sync-0.1.0.tar.gz:
Publisher:
calendar-sync-release.yml on alptekin/evolutiondb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evolutiondb_calendar_sync-0.1.0.tar.gz -
Subject digest:
4323595426a42900a3191649b80caadc493ccf23b9570221272f97f985e5b587 - Sigstore transparency entry: 1541355669
- Sigstore integration time:
-
Permalink:
alptekin/evolutiondb@540e054cf09082c8d2468c12d39632a0edc6412e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/alptekin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
calendar-sync-release.yml@540e054cf09082c8d2468c12d39632a0edc6412e -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file evolutiondb_calendar_sync-0.1.0-py3-none-any.whl.
File metadata
- Download URL: evolutiondb_calendar_sync-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31c314b5cc78b85e07de924355da1688d3c88002fd2916432f5b6d9756a3c1a0
|
|
| MD5 |
c6cbd82cdc0ef4aec84c8ed6a5e6aaf9
|
|
| BLAKE2b-256 |
dd53d6c4fbaba1b4c5d02b27e0e5797efa2a0121700b6f5e2bbad441f8835e95
|
Provenance
The following attestation bundles were made for evolutiondb_calendar_sync-0.1.0-py3-none-any.whl:
Publisher:
calendar-sync-release.yml on alptekin/evolutiondb
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evolutiondb_calendar_sync-0.1.0-py3-none-any.whl -
Subject digest:
31c314b5cc78b85e07de924355da1688d3c88002fd2916432f5b6d9756a3c1a0 - Sigstore transparency entry: 1541355777
- Sigstore integration time:
-
Permalink:
alptekin/evolutiondb@540e054cf09082c8d2468c12d39632a0edc6412e -
Branch / Tag:
refs/heads/main - Owner: https://github.com/alptekin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
calendar-sync-release.yml@540e054cf09082c8d2468c12d39632a0edc6412e -
Trigger Event:
workflow_dispatch
-
Statement type: