CONNECTIONS — the one place every data source lives
Last updated: 2026-06-01 (Mon) · Session 40 cont. Purpose: Sam's ask — "build a special place that holds links to my Airbnb calendar, Gmail, calendars, email… so whenever you need to pull from it, it's real, live, actual, and you can make changes." This is that registry: every source, how it's connected, what I can read/write, and its live-link location. If a connection isn't here, it's not wired — add it here.
The secret links themselves do NOT live in this doc (it's in git). They live in the gitignored
command-inbox/.connections.json(local-only) and/or the ops-api Worker env. This doc is the MAP; that file is the KEYRING.✅ 2026-06-01 — ops-api deployed (wrangler login fixed the auth). Now LIVE:
- Airbnb calendars (9312 + 9332) — wired through WorkerGET /calendar(reads the iCal secrets), aggregated + rendering in the cockpit "Today" hero. 9332 booked Jun 17–21; 9312 booked Jun 25–29 + Nov 23–28.
- OpenAI voice — routing live; blocked only on OpenAI billing (account hitinsufficient_quota— add credits at platform.openai.com → Billing, then it's instant).
- Plaid = production now (was sandbox). Link a real bank via/link.html→ live cash in the cockpit.
✅ 2026-06-01 PM update:
- OpenAI voice is LIVE — billing added;/voice/speakreturnsprovider:openai. Bot speaks in the real voice now.
- Google Calendar = the consolidation hub, already connected for me (MCP). It aggregates personal (ztreitel@), business (sam@— has davening + auto-created card events), FAMILY/SKYLIGHT (the "Sam - Family & Life" calendar IS the Skylight bridge), Mildred, Hebcal. I read + write it live. So "Google / phone / Skylight / family" = one hub — no separate Skylight integration needed.
-/calendarnow takes ANY feed via theICAL_FEEDSsecret (JSON[{src,url}]) — Google/TripIt/phone all drop in with no code change.
- To light these up in the PORTAL: paste each calendar's Secret iCal URL (Google → Settings → [calendar] → Integrate calendar → Secret address in iCal format) intoical_feedsin the keyring; I push them toICAL_FEEDS. TripIt: its Settings → Calendar feed.ics. Rocket Money: no iCal/API — forward its email digests or go manual (separate, non-calendar).
Two layers (this is the key mental model)
- Agent layer — what I (Claude in a session) can already touch live. These are MCP connections in the session. I can pull + act on them now for briefings, analysis, drafting, and changes.
- Portal/Worker layer — what the portal/cockpit/bot can show + write live. The browser can't use my MCPs; it goes through the ops-api Cloudflare Worker (
ops-api.sam-0f0.workers.dev). For a source to be live in the portal, the Worker needs an endpoint for it.
The registry
| Source | Holds | Connected via | R/W | Status | Live link / where it lives |
|---|---|---|---|---|---|
| Google Calendar (primary / "regular" / Gmail cal) | events, all-day, schedule | MCP (agent layer) ✅ | Read + Write | 🟢 LIVE for me (I can read + create/move/delete events now) · 🟡 not in the portal yet | MCP Google_Calendar |
| Business Gmail (sam@hookstreetcapital.com) | mail, drafts, labels | MCP (claude.ai) ✅ | Read + Write | 🟢 LIVE for me | MCP Gmail |
| Personal Gmail (ztreitel@gmail.com) | local MCP gmail-personal ✅ |
Read | 🟢 LIVE for me | ~/.gmail-mcp/ (local, off-repo) |
|
| Google Drive | files, sheets | MCP ✅ | Read + Write | 🟢 LIVE for me | MCP Google_Drive |
| Cards / Tasks / Open loops | the Action_Queue | ops-api /inbox → command-inbox ✅ |
Read + Write | 🟢 LIVE (portal + bot + me) | /inbox (QUEUE_JSON, ACTION, DONE, DEFER, PROOF…) |
| Grocery list | items | ops-api /inbox ✅ |
Read + Write | 🟢 LIVE | /inbox (GLIST, GROCERY, BOUGHT) |
| Cash / bank balances | account balances (9 institutions) | ops-api /plaid ✅ |
Read | 🟢 LIVE production (Jun 2026) | /plaid/balances (KV-cached, cron-warmed 6:30a/5p ET) |
| Bank liabilities (APRs, mortgage/HELOC detail) | card APRs/mins, mortgage rates/escrow | ops-api /plaid/liabilities |
Read | 🟡 endpoint LIVE but all 9 items 400 — liabilities product never enabled at link time; fix = re-link 5/3 + USALLIANCE via link.html (card #606) |
/plaid/liabilities |
| MIS / portfolio | positions, signals | ops-api /mis + MIS v2 GAS ✅ |
Read | 🟢 LIVE | /mis/peek, /mis/brief, /mis/tile, /mis/notify |
| MIS quotes — full universe (237) | real-time Schwab quotes, every ticker | ops-api /mis/quotes → v2 fn=watchlist (misV2SchwabQuotes_) ✅ |
Read | 🟢 LIVE (Jul 1) — one-pass Schwab via the already-authed v2 app; Finnhub gap-fills BRK.B/BTCUSD | /mis/quotes?syms= · ?all · ?refresh=1 |
| Price history → D1 | daily closes per ticker | ops-api crons (17:00+22:00 ET) → D1 price_history ✅ |
Read | 🟢 LIVE (Jul 1) — first rows night of Jul 1 | /mis/history?sym=&days= |
| Hospitable (STR PMS) | properties, reservations w/ REAL guest names, status, platform | ops-api /hospitable/* (PAT in vault) ✅ |
Read (API also supports message SEND — not wired yet) | 🟢 LIVE (Jul 1) — feeds str.html + Mildred board; ⚠️ trial→paid decision on the Jul-2 call; MCP server exists (mcp.hospitable.com) — evaluate post-call |
/hospitable/reservations?days= (≤180) |
| BOS v3 obligations (money sheet) | due_next_7 + needs-you + monthly totals | v1 sheet web app fn=obligations (token) → morning brief ✅ |
Read | 🟢 LIVE (Jul 1) — first web-app deploy @1; feeds the 6:30a brief | Worker secrets V3_OBL_URL/TOKEN |
| Schwab → MIS (acct 898, ACTIVE) | live holdings + trades | Schwab cloud-auth ✅ (re-auth DONE 2026-06) | Read | 🟢 LIVE-LINKED — Sam trades here; new trades reflect on a fn=portrecon re-pull (cached snapshot lags until refreshed). ⚠️ TBC w/ MIS: auto-refresh vs manual. |
MIS fn=portrecon |
| Fidelity → MIS (accts 600 GROWTH · 5692 · 4073 · 5378) | holdings | manual CSV export | Read | 🔴 NOT live-linked — holdings come from Sam's CSV load (last = Jun-4). Sam WANTS Fidelity live-connected (it's the bigger account) — wanted wire, lower priority than today's fires. | load via fn=loadholdings |
| Telegram (you in your pocket) | 2-way messages | command-inbox bot ✅ | Read + Write | 🟢 LIVE | bot token in Script Properties |
| Airbnb calendar — 9312 | bookings/availability | iCal feed → Worker /calendar |
Read | 🟢 LIVE (iCal secret on the Worker) | reads in the cockpit "Today" hero + Mildred bookings |
| Airbnb calendar — 9332 | bookings/availability | iCal feed → Worker /calendar |
Read | 🟢 LIVE (iCal secret on the Worker) | reads in the cockpit "Today" hero + Mildred bookings |
| Skylight (family calendar) | family events | TBD (no clean API) | Read | 🔴 RESEARCH — likely needs an export/iCal or screen-scrape; figure out method | TBD |
| Voice (bot speaks/listens) | TTS/STT | ops-api /voice ✅ |
n/a | 🟢 LIVE — OpenAI TTS out (verified Jun 1) + CF Whisper in (free) | /voice/speak, /voice/transcribe |
What I need FROM YOU (drop into command-inbox/.connections.json)
- Airbnb iCal URLs (one per listing): Airbnb → Listing → Availability → Connect to another website → Export calendar → copy the
.icsURL. Do this for 9312 and 9332. - Google Calendar secret iCal (optional — I can already read it via MCP, but the portal needs a feed): Google Calendar → Settings → your calendar → Integrate calendar → Secret address in iCal format.
- Skylight: tell me how you currently view it (app? web?) — I'll research the export path.
~~The ONE unblock~~ — RESOLVED (kept for history; updated 2026-07-01)
The old blocker here (ops-api Worker deploy gated on wrangler auth) is DEAD: deploy-safety was solved Jul 1 (secrets wrangler-owned, npx wrangler deploy is routine, /health secrets_ok guards every push), /calendar is live, Plaid is production, voice is OpenAI-out. Remaining known connection gaps live in the table above (Plaid liabilities flag, Fidelity live-link, Skylight) — this table is the registry: keep it current on every new wire-up, or it manufactures false gaps (find-it-first sweep, Jul 1, caught 4 missing live rows).
What's already TRUE today (not "shooting the wind")
- I can read your Google Calendar and create/move/delete events right now (agent layer).
- I can read + change your cards, tasks, grocery, open loops right now (portal + me).
- I can read business + personal Gmail, Drive, MIS right now.
The gap is purely: (a) the external feeds you haven't handed me yet (Airbnb/Skylight), and (b) the Worker deploy that puts calendars live in the portal.
Related: WORKSPACE_AUDIT.md (systems map) · telegram-voice skill (voice) · project_plaid_production_watcher (cash) · ops-api wrangler.toml.