Skip to content

Granola (meeting-notes) connector — the other half of #245 #425

Description

@CheeryProgrammer

Follow-up to #245, which shipped the Gmail connector. This tracks the Granola (meeting-notes) connector.

Why split

Unlike Gmail (a stable, well-documented API), Granola's HTTP API shape isn't confirmed here, so a blind implementation would be guesswork. The connector pattern is identical to the other blind connectors (internal/plugins/gmail, linear, github) — token + REST list/get → RawDoc, httptest-covered — only the endpoints/fields differ.

What's needed

  1. Confirm the API: the meetings-list endpoint, the per-meeting fetch, and where the transcript/notes text lives (fields), plus auth (token header). The claude.ai Granola MCP integration hints at the model (meetings, transcripts, folders) but the REST shape must be pinned down.
  2. Implement internal/plugins/granola mirroring gmail: GRANOLA_TOKEN auto-source, Fetch yields one RawDoc per meeting (title + transcript/notes), source_uri = granola://<meetingId>, ModifiedAt from the meeting time; httptest against a fake endpoint.
  3. Wire the import --source granola dispatch (mcp + cli) and .env.example.

Invariant

Opt-in; off until GRANOLA_TOKEN is set. Content untrusted by default like other remote connectors.

@CheeryProgrammer — since you use Granola, the fastest unblock is dropping the meetings-list + meeting-fetch request/response shape (or a link to their API docs) on this issue.

P2, area:ingestion.

🤖 Generated with Claude Code

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions