| name | memory-bubbles-ingest |
| description | Ingest Bubbles AI meeting summaries from Gmail into the memory knowledge base |
| user_invocable | true |
Bubbles AI Meeting Notes Ingest for Memory Knowledge Base
Pull Bubbles AI meeting summaries from Gmail. These contain structured meeting notes, transcripts, and action items for every meeting Jesse attends.
How Bubbles Works
Bubbles AI (usebubbles.com) joins Jesse's Google Meet/Zoom calls and sends email summaries to jesse@rapidinnovation.io from no-reply@usebubbles.com. Each email contains:
- Meeting summary (numbered topic sections)
- Action items (with assignees)
- Link to recording
- Meeting title and participants
Process
1. Load State
Read state from /Users/jesseanglen/Documents/RandomStuff/memory-kb/state/bubbles-state.json.
If it doesn't exist, this is the first run — set last_checked to 7 days ago.
2. Search Gmail for Bubbles Summaries
Use gmail_search_messages:
q: "from:usebubbles.com subject:summary after:YYYY/MM/DD"
maxResults: 30
Where the date comes from last_checked in state.
3. Read Each Summary Email
For each Bubbles email, use gmail_read_message with the messageId.
Extract from the body:
- Meeting title (from subject line — format: "Full summary & N action items [for Person] — [Meeting Title]")
- Meeting summary (the numbered sections under "📝 Meeting Summary:")
- Action items (the items under action items section)
- Participants (inferred from subject and body mentions)
- Date/time (from email Date header)
4. Cross-Reference with Calendar
Match the meeting title against calendar events in the same daily log file.
If a matching calendar entry exists, add a reference linking the Bubbles notes to that event.
Also check /Users/jesseanglen/Documents/RandomStuff/memory-kb/state/calendar-contacts.json for participant emails.
5. Append to Daily Log
For each Bubbles summary, append to /Users/jesseanglen/Documents/RandomStuff/memory-kb/daily/YYYY-MM-DD.md:
## Meeting Notes (Bubbles): [Meeting Title] @ HH:MM PT
**source:** bubbles
**participants:** [Names mentioned in the summary]
**related_calendar_event:** [matching calendar entry if found]
### Meeting Summary
- [Topic 1 summary from Bubbles]
- [Topic 2 summary from Bubbles]
- [etc.]
### Action Items
- [ ] [Action item 1 — assignee]
- [ ] [Action item 2 — assignee]
Create daily log with header if it doesn't exist.
6. Deduplication
Track processed Bubbles email message IDs in state. Check daily log for existing Bubbles entries with same meeting title before appending.
7. Update State
Write to /Users/jesseanglen/Documents/RandomStuff/memory-kb/state/bubbles-state.json:
{
"last_checked": "YYYY/MM/DD",
"total_runs": N,
"last_run": {
"timestamp": "ISO",
"summaries_found": N,
"summaries_ingested": N,
"action_items_captured": N,
"status": "success"
},
"processed_message_ids": ["id1", "id2"]
}
8. Report
"Bubbles ingest complete. Found X meeting summaries, ingested Y, captured Z action items."
MCP Tools Reference
gmail_search_messages — search for Bubbles emails
gmail_read_message — read full meeting summary
Why This Is Valuable
Bubbles summaries are the richest meeting data source — they contain actual discussion content, decisions, and action items that calendar events don't have. Combined with calendar attendees and email follow-ups, this creates a complete picture of every meeting:
- Calendar = who was there and when
- Bubbles = what was discussed and decided
- Emails = what happened after
Notes
- Bubbles emails come from
no-reply@usebubbles.com
- Subject format: "Full summary & N action items [for Person] — [Meeting Title]"
- No Bubbles API/MCP exists — Gmail is the access path
- Bubbles sometimes creates duplicate "(Notes)" calendar events — ignore those, focus on the email summaries
- Strip the Bubbles boilerplate/marketing from the email body, keep only the meeting content