
Meeting Followup
- 2 installs
- 7 repo stars
- Updated April 12, 2026
- extruct-ai/gtm-cowork-skills
Drafts a post-call follow-up email by combining Granola meeting notes, Gmail history, and pending Attio tasks for a contact.
About
Finds the relevant meeting in Granola, pulls email history from Gmail and open tasks from Attio, and drafts a follow-up email capturing action items and commitments. A salesperson uses it right after a call to send a grounded follow-up.
- Extracts action items, decisions, and commitments from meeting notes
- Combines Granola, Gmail, and Attio context into the draft
Meeting Followup by the numbers
- 2 all-time installs (skills.sh)
- Ranked #729 of 853 Sales & Marketing skills by installs in the Skillselion catalog
- Data as of Jul 13, 2026 (Skillselion catalog sync)
npx skills add https://github.com/extruct-ai/gtm-cowork-skills --skill meeting-followupAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 7 |
| Last updated | April 12, 2026 |
| Repository | extruct-ai/gtm-cowork-skills ↗ |
What it does
Drafts a post-call follow-up email by combining Granola meeting notes, Gmail history, and pending Attio tasks for a contact.
Files
Meeting Follow-Up Email
Draft a follow-up email after a call by combining meeting notes, email history, and CRM context.
Inputs
The user provides one or more of:
- A contact name or email address
- A meeting reference (title, date, or Granola meeting ID)
- Specific points to include in the follow-up
If the user provides a Granola meeting context (summary, endTime), use that directly. If not provided, ask for the contact name or email.
Workflow
Step 1: Gather meeting context (Granola MCP)
Use Granola MCP tools to find and extract the meeting:
1. If meeting context is provided inline (summary, endTime): use it directly. 2. If contact name is known: call query_granola_meetings with "meeting with {contact_name}" to find the most recent meeting. 3. If no match: call list_meetings with time_range: "last_30_days" and scan for a matching title or attendee. 4. Once meeting ID is found: call get_meetings with the ID to get full details.
Extract:
- Summary and key discussion points
- Action items and next steps
- Decisions made
- Commitments from either side
If more detail is needed, call get_meeting_transcript with the meeting ID.
Step 2: Gather email history (Gmail MCP)
Use Gmail MCP tools to get conversation context:
1. Resolve the contact email. Sources (try in order):
- User provides it directly
- Extract from meeting attendees (Granola)
- Search Attio: use
search-recordswithobject = "people"and the contact name as query - Ask the user
2. Call gmail_search_messages with query: from:{contact_email} OR to:{contact_email} Limit to 10 most recent messages.
3. Identify the most relevant thread (most recent exchange or matching meeting topic).
4. Call gmail_read_thread with the thread ID to get full email bodies.
Extract:
- What was last discussed over email
- Open questions or proposals
- Tone and formality level of the conversation
- Prior commitments or offers
Step 3: Check pending CRM tasks (Attio MCP)
Query Attio for open tasks linked to this contact:
- Use
list-taskswithis_completed = false. - Filter results for tasks whose
linked_recordsmatch the contact's record ID
Note any overdue or pending tasks to reference in the follow-up.
Step 4: Draft the follow-up
Structure: 1. Thank them for their time (1 sentence, reference the specific meeting topic) 2. Summarize key discussion points (2-3 bullets from meeting + emails) 3. List next steps or action items (explicit, with owners if discussed) 4. Clear call-to-action (one specific ask or proposal)
Tone rules:
- Match the tone of the existing email thread (formal ↔ casual)
- Professional but warm
- No filler phrases ("I hope this email finds you well")
- Use the same greeting style as previous emails in the thread
- Reference specific things discussed, not generic pleasantries
Constraints:
- Under 200 words
- No emojis unless the contact uses them
- If a proposal or price was mentioned, reference it naturally
Step 5: Save artifacts locally
After gathering context, persist to revops/customers/{company-slug}/:
1. Meeting notes: Save Granola meeting data to meetings/YYYY-MM-DD_{title-slug}.md using the template from revops/customers/README.md 2. Context update: If context.md exists, update the Deal History and Current Status. If it doesn't exist, create it from the template. 3. Check first: Read existing files before writing to avoid overwriting.
This is non-optional — Granola data can be deleted, the local copy is the source of truth.
Step 6: Present and act
Show the draft with:
- To: address
- Subject: line (reply to existing thread or new subject)
- Body
- Context used: brief note on sources (meeting summary, email thread, tasks)
Ask the user if they want to: 1. Edit the draft 2. Create a Gmail draft via gmail_create_draft 3. Start over with different context
Attio MCP Tool Reference
Use these MCP tools (NOT raw API calls):
| Task | Tool | Key parameters |
|---|---|---|
| Search people or companies | search-records | object, query |
| Get pending tasks | list-tasks | is_completed=false |
Environment
| Variable | Source | Purpose |
|---|---|---|
| Attio | MCP (Attio connector) | CRM — people, tasks |
| Gmail | MCP (claude.ai Gmail) | Email search, read threads, create drafts |
| Granola | MCP (Granola) | Meeting notes, transcripts, summaries |
Reference
- CRM enrichment context:
revops/CRM_ENRICHMENT.md - Customer artifacts:
revops/customers/(see README.md for structure and templates)