refactor(grain): live Grain API only ā the index moved to grain-indexer
Why
The Grain MCP's own index (a grain_meeting_recordings table in Supabase fed by Grain webhooks, plus SEARCH_INDEXED_RECORDINGS and trigger storage) is replaced by decocms/grain-indexer. That service keeps full transcripts, privacy rules, signed webhooks and an MCP of its own. The old tables were already migrated (as metadata only) and dropped, and the old atlas-index hooks were deleted from Grain.
What
- Removed: the webhook route and auto-created hooks, the Supabase index and queries,
SEARCH_INDEXED_RECORDINGS, Mesh triggers (their storage table had 0 rows), the backfill script, and the@supabase/supabase-jsdependency. - Kept:
LIST_RECORDINGS,GET_RECORDING,GET_TRANSCRIPT,GET_SUMMARY. They call the Grain API live with the connection's own key, with no state. - README points to grain-indexer for search, transcripts and events.
Verified
tsc on grain/ is clean apart from 2 errors inside node_modules/@decocms/runtime (bindings version mismatch), which are unrelated to this change. oxlint and oxfmt pass.
š¤ Generated with Claude Code
Summary by cubic
Turns the Grain MCP into a stateless, live-API-only package. The webhook-fed Supabase index (grain_meeting_recordings), SEARCH_INDEXED_RECORDINGS, Mesh triggers, and the backfill script have moved to decocms/grain-indexer, which now owns full transcripts, privacy rules, signed webhooks, and search; the old tables were already migrated there and dropped.
What stays: LIST_RECORDINGS, GET_RECORDING, GET_TRANSCRIPT, and GET_SUMMARY, which call the Grain API live with the connection's own key and keep no state.
- Removed the webhook route, auto-created Grain hooks, Supabase queries, trigger storage, the backfill script, and the
@supabase/supabase-jsdependency. - No webhooks are created on users' Grain accounts anymore; the README now points to grain-indexer for search and transcripts.