obsidian-granola
Original:🇺🇸 English
Translated
Syncs meetings from Granola to Obsidian notes. Fetches notes and transcripts from Granola, and imports them into formatted meeting and transcript notes in Obsidian. Use when the user says "sync my last granola meeting", "get my granola meeting with X", "make a note for my last meeting", or asks to pull in a Granola transcript.
16installs
Sourcenweii/agent-stuff
Added on
NPX Install
npx skill4agent add nweii/agent-stuff obsidian-granolaTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →This skill helps the user extract meeting data from Granola (via the Granola MCP) and turn it into properly formatted Obsidian notes in their vault.
1. Capture Intent & Context
First, determine which meeting the user wants to sync.
- If they say "my last meeting", you will need to list recent meetings to find it.
- If they specify a person or topic, search or list recent meetings to identify the correct one.
- If the user says they already have an existing prepared note for this meeting in Obsidian, append the Granola contents to their existing note, and create a separate transcript note.
- Otherwise, you will generate a new title and create both the meeting note and transcript note from scratch.
2. Fetch Granola Data
Use the Granola MCP tools:
- to find the meeting ID if you don't already have it.
mcp_granola_list_meetings - to get the AI-generated summary, action items, and private notes.
mcp_granola_get_meetings - to get the verbatim raw transcript (NOTE: This tool may require a paid Granola tier. If the call fails with a paid-tier error, continue the workflow and still create the transcript note so the user can fill it in manually.)
mcp_granola_get_meeting_transcript
3. Generate the Title (If creating a new note)
Generate a title using the user's specific naming convention:
[Meeting / Kickoff / Interview / etc] with [Person] [more concise context if relevant] [YYYY-MM]Examples:
Meeting with Matt 2, 2025-10Intro call with Acme 2026-01Interview - Acme Corp design rol with Grace 2024-05Kickoff with Carol for assistance work 2026-02
Crucial Step: Present the generated title to the user for approval before creating the files. The user may want to tweak it or provide their own.
4. Prepare and Save the Transcript Note
The transcript note uses the format and must follow this naming convention: .
Transcript template.mdTranscript - [Meeting Title]-
Frontmatter:
- If you need the transcript template, to read the latest properties for the template.
obsidian read file="Transcript template" - Use the retrieved properties as the base for the new note's frontmatter.
- Inject the dynamic values from the meeting:
- :
dateof the meeting.YYYY-MM-DD - : Add any identified attendees as wikilinks (e.g.,
people)."[[Jane Doe]]" - : Generate a list of 1-2 short, alternative titles for the meeting to improve searchability. Make sure these aliases are highly specific to this exact meeting (e.g. mentioning specific project names, unique topics, or dates) so they don't broadly apply to other notes (e.g.,
aliases).["Project Phoenix Q3 roadmap sync", "Stripe API integration planning 2024-10"] - : Add a wikilink back to the main meeting note (e.g.,
related)."[[Meeting Title]]" - Generate a property summarizing the meeting. Write a 1-2 sentence concise summary directly (like "Summary mode" in the
descriptionskill); do not use filler phrases like "This note is about" or "A summary of".set-note-description - If the template contains dynamic scripts or variables (e.g. ), evaluate them into actual dates.
<% tp.file.creation_date(...) %>
- If you need the transcript template,
-
Content:
- Add a header below the frontmatter.
## Transcript - Append the verbatim raw transcript below the header.
- Granola transcript logs have speaker labels like and
Them:. You must format the transcript text, inserting blank newlines to separate speakers into distinct paragraphs.Me: - Replace "Me: " with "Nathan: ". If you know the other speaker, replace "Them: " with the bolded first name of the speaker. If this is a multi-speaker meeting and speaker assignment isn't certain, leave the original label but bold it (e.g. "Them: "). Note the colon should be included in the bolding.
- Add a
-
Save Location:
- Save to @03-Records/Talks/Transcript - [Meeting Title].md
5. Prepare and Save the Meeting Note
If the user provided an existing note:
- Read their existing note.
- Retain their frontmatter and title.
- Ensure the property in their frontmatter includes a link to the transcript (
related)."[[Transcript - [Meeting Title]]]" - Intelligently append the Granola notes and AI summary into their document where it makes sense (e.g., under a header).
## Notes
If creating a new note:
-
Frontmatter:
- If you need the meeting template, to read the latest properties for the template.
obsidian read file="Meeting template" - Use the retrieved properties as the base for the new note's frontmatter.
- Inject the dynamic values from the meeting:
- Follow the same rules for ,
date,people, andaliasesas defined above.description - :
related"[[Transcript - [Meeting Title]]]" - If the template contains dynamic scripts or variables (e.g. ), evaluate them into actual dates.
<% tp.file.creation_date(...) %>
- Follow the same rules for
- If you need the meeting template,
-
Content:
- Add a or
## Notesheader.## Summary - Insert the AI-generated summary, private notes, and action items from Granola. Make sure it is nicely formatted in Markdown.
- Add a
-
Save Location:
- Save to @03-Records/Talks/[Meeting title].md
-
Bidirectional prev/next linking:
- If the new note has a frontmatter field pointing to an earlier meeting in a series, open that previous note and add (or append to) its
prevfrontmatter field with a wikilink back to the new note (e.g.,next). This keeps the chain navigable in both directions.next: "[[New Meeting Title]]"
- If the new note has a
6. (Desktop environment only) Open in Obsidian
Note: This only works if the agent has Obsidian CLI access in the current environment. If the command fails or is unavailable, skip it silently and report the file paths to the user instead.
After saving both notes, try to open them in Obsidian using the CLI:
bash
# If you have Obsidian running in your environment
obsidian open file="[Meeting Title]"7. Review
Confirm with the user that the notes have been successfully created and linked together!