
Meeting Prep
- 2 installs
- 7 repo stars
- Updated April 12, 2026
- extruct-ai/gtm-cowork-skills
Generates a pre-call briefing by pulling Attio deal context, Gmail interactions, Granola past meetings, and Extruct growth-signal enrichment for new companies.
About
Resolves the contact and company in Attio, gathers recent email and meeting history, and enriches net-new companies via Extruct growth signals into a concise briefing. A salesperson uses it before a call to walk in with deal context and talking points.
- Combines CRM, email, and past-meeting context into one briefing
- Enriches new companies with no interaction history via Extruct signals
Meeting Prep by the numbers
- 2 all-time installs (skills.sh)
- Ranked #730 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-prepAdd 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
Generates a pre-call briefing by pulling Attio deal context, Gmail interactions, Granola past meetings, and Extruct growth-signal enrichment for new companies.
Files
Meeting Prep Briefing
Generate a concise, actionable briefing before a call.
Inputs
The user provides one or more of:
- A contact name, email, or company name
- A meeting reference (title, date, calendar event)
- Meeting details from a calendar integration (summary, startTime, attendees)
If not provided, ask for the contact or meeting context.
Workflow
Step 1: Identify the contact and company
Resolve the contact to an Attio record:
1. If attendee emails are provided: use the primary external attendee. 2. Search Attio by email or name: Use search-records with object = "people" and the contact's email or name as query. 3. From the person record, extract:
- Name, job title, company
- Associated deals (IDs and status)
- Subscription status, plan, LTV
- Origin, registration date
- Last interaction date
Step 2: Enrich new companies via Extruct Growth Signal table
After identifying the company, determine whether this is a new company — one with no meaningful prior interaction history. Use the Attio company record from Step 1 to check:
first_interactionis missing, or occurred less than 14 days agostrongest_connection_strengthisVery weakorWeak- No associated deals, or the deal was created very recently
- No company record found in Attio at all
If any of those conditions are true, treat the company as new and run Extruct enrichment.
Extruct Growth Signal table
This is a reusable company enrichment table with these research columns:
| Key | Column Name | Kind | Output |
|---|---|---|---|
expansion_signals | Expansion Signals | agent (research_pro) | text — geographic, product, and market expansion evidence |
traction_indicators | Traction Indicators | agent (research_pro) | text — customer counts, revenue milestones, case studies, review volume |
business_priority_signals | Business Priority Signals | agent (research_pro) | text — strategic priorities from job postings, product pages, exec posts |
recent_trigger_events | Recent Trigger Events | agent (research_pro) | json — funding rounds, launches, major hires, partnerships |
growth_stage_signals_ | Growth Stage Signals | agent (research_pro) | text — scaling indicators from press, job postings, office openings |
ai_initiatives | AI Initiatives | agent (research_pro) | text — AI-related projects, products, and strategic focus |
Workflow:
Use the Extruct MCP server for all enrichment operations. Tool names referenced below (list_tables, create_table, add_columns, create_rows, run_table, get_table, get_table_data) are exposed by the Extruct MCP at https://api.extruct.ai/mcp.
Step 2a: Find or create the Growth Signal table
1. Check `.env` for a cached table ID: Read EXTRUCT_GROWTH_SIGNAL_TABLE_ID from .env. If present, use it as <table_id> and skip to Step 2b.
2. If not in `.env`, search Extruct for an existing table: Call list_tables with search = "Growth Signal", limit = 10. Look for a company-kind table named "Growth Signal" (or similar). If found, save its id to .env as EXTRUCT_GROWTH_SIGNAL_TABLE_ID=<table_id>, and skip to Step 2b.
3. If no table exists, create one with the standard columns: Call create_table with name = "Growth Signal", kind = "company". Save the returned table id as <table_id> and persist it to .env as EXTRUCT_GROWTH_SIGNAL_TABLE_ID=<table_id>.
4. Add the enrichment columns: Call add_columns with table_id = <table_id> and the following column_configs:
{
"column_configs": [
{
"kind": "agent",
"name": "Expansion Signals",
"key": "expansion_signals",
"value": {
"agent_type": "research_pro",
"prompt": "Identify and summarize the company's expansion signals using information from job postings, press releases, new office mentions, executive hires, and product launches. Focus on evidence of geographic, product, or market expansion. Include details such as new regional offices, hires in specific regions (e.g., EMEA, APAC), product development roles, or mentions of entering new customer segments. Output as a short text summary.",
"output_format": "text",
"extra_dependencies": ["company_name", "company_website"]
}
},
{
"kind": "agent",
"name": "Traction Indicators",
"key": "traction_indicators",
"value": {
"agent_type": "research_pro",
"prompt": "Identify traction indicators for the company by analyzing customer count claims on the website, revenue milestones in press, case studies, review volume, and job posting mentions. Summarize key signals of growth and market adoption in text form.",
"output_format": "text",
"extra_dependencies": ["company_name", "company_website"]
}
},
{
"kind": "agent",
"name": "Business Priority Signals",
"key": "business_priority_signals",
"value": {
"agent_type": "research_pro",
"prompt": "Identify business priority signals for the company by analyzing job postings, product page focus, executive LinkedIn posts, earnings calls, and blog content. Summarize the company's current strategic priorities in text form.",
"output_format": "text",
"extra_dependencies": ["company_name", "company_website"]
}
},
{
"kind": "agent",
"name": "Recent Trigger Events",
"key": "recent_trigger_events",
"value": {
"agent_type": "research_pro",
"prompt": "Identify the company's recent trigger events by reviewing press releases, LinkedIn company updates, job postings, and product launches. Summarize notable events such as new product launches, major hires, funding announcements, office openings, or strategic partnerships.",
"output_format": "json",
"output_schema": {
"type": "object",
"properties": {
"date": {"type": "string"},
"type": {"type": "string", "description": "type of the signal"},
"description": {"type": "string"}
}
},
"extra_dependencies": ["company_name", "company_website"]
}
},
{
"kind": "agent",
"name": "Growth Stage Signals",
"key": "growth_stage_signals_",
"value": {
"agent_type": "research_pro",
"prompt": "Identify growth stage signals for the company by analyzing recent information. Use sources such as press mentions, job posting language, Glassdoor reviews, office openings, and product launches. Look for indicators like rapid growth, scaling, expanding, doubling team, fast-paced, or hypergrowth. Summarize your findings in a concise text format.",
"output_format": "text",
"extra_dependencies": ["company_name", "company_website"]
}
},
{
"kind": "agent",
"name": "AI Initiatives",
"key": "ai_initiatives",
"value": {
"agent_type": "research_pro",
"prompt": "Summarize the company's current AI initiatives, including any projects, products, or strategic focuses related to artificial intelligence. Look for information in press releases, product announcements, or company reports. Format the response as a concise text summary.",
"output_format": "text",
"extra_dependencies": ["company_name", "company_website"]
}
}
]
}5. On first run, confirm with the user: "I've created a new Growth Signal enrichment table in Extruct with 6 research columns. Want me to proceed with enriching {company_name}?"
Step 2b: Enrich the company
1. Check if the company already exists in the table: Call get_table_data with table_id = <table_id>, limit = 100, columns = ["company_name", "company_website"]. Scan for a matching domain. If found, read that row's data directly — skip to step 4.
2. Add the company as a new row: Call create_rows with table_id = <table_id>, rows = [{"data": {"input": "{company_domain}"}}], run = true. Use the company domain (e.g. livedatatechnologies.com) as input. run = true starts enrichment immediately.
3. Poll until enrichment completes: Call get_table with table_id = <table_id> and check the run status until it reports completion.
4. Read the enriched row: Call get_table_data with table_id = <table_id>, limit = 5, columns = ["company_name","expansion_signals","traction_indicators","business_priority_signals","recent_trigger_events","growth_stage_signals_","ai_initiatives"]. Extract the row matching the target company.
5. Incorporate into the briefing: The enrichment data feeds into the briefing in Step 6 as a new Company Intelligence section (see updated briefing structure below). Summarize the most relevant signals — do not dump raw output.
If the company is NOT new (established relationship with strong Attio history), skip this step entirely. The existing Attio, Gmail, and Granola data is sufficient.
Step 3: Get deal context (Attio MCP)
For each associated deal:
- Use
get-records-by-idswithobject = "deals"and the deal record IDs from Step 1. - Extract: deal name, stage, value, close date, notes
Check for pending tasks:
- Use
list-taskswithis_completed = false - Filter for tasks linked to this person or their deals
Step 4: Recent email interactions (Gmail MCP)
1. Call gmail_search_messages with: from:{contact_email} OR to:{contact_email} Limit to 10 most recent.
2. Call gmail_read_thread on the 2-3 most recent threads.
Summarize:
- Last 2-3 touchpoints (date, topic, outcome)
- Any open proposals, questions, or commitments
- Tone of the relationship
Step 5: Past meeting history (Granola MCP)
1. Call query_granola_meetings with "meetings with {contact_name}" 2. If relevant meetings found, call get_meetings for details
Summarize:
- What was discussed in past meetings
- Action items that were assigned
- Decisions that were made
Step 6: Generate the briefing
Structure:
## Meeting Brief: {contact_name} — {company}
**When:** {meeting_time}
**Attendees:** {attendee_list}
### 1. Relationship State
- Current deal stage / subscription status
- How long they've been a customer/prospect
- Key metrics (LTV, plan, usage)
### 2. Company Intelligence (new companies only — from Extruct Growth Signal)
- **Profile:** {short_description}, founded {year}, {employee_count}, HQ {location}
- **Growth stage:** {key growth stage signals}
- **Recent triggers:** {most relevant trigger event with date}
- **Business priorities:** {top 1-2 strategic priorities}
- **Traction:** {key traction metric or signal}
- **AI initiatives:** {summary if relevant to the conversation}
*(Omit this section entirely for established relationships with strong Attio history.)*
### 3. Recent Interactions
- {date}: {touchpoint summary}
- {date}: {touchpoint summary}
- {date}: {touchpoint summary}
### 4. Key Contacts
- {name} — {title} ({context on their role in the deal})
### 5. Suggested Talking Points
1. {specific talking point tied to recent context}
2. {specific talking point tied to recent context}
3. {specific talking point tied to recent context}
### 6. Questions to Explore
- {question grounded in deal/interaction context}
- {question grounded in deal/interaction context}
- {question grounded in deal/interaction context}
### 7. Open Items
- {pending task or commitment}
- {unanswered proposal or question}Rules:
- Every point must be grounded in data from Attio, Gmail, Granola, or Extruct — no generic filler
- Talking points should reference specific things from email/meeting history
- If there's an open proposal with a price, surface it
- Flag overdue tasks or stale follow-ups
- Keep the entire brief under 400 words
Step 7: Save artifacts locally
Before presenting, check revops/customers/{company-slug}/ for existing context:
1. Read first: If context.md or past meeting notes exist, use them as additional input. 2. Save meeting notes: If Granola data was fetched, persist to meetings/YYYY-MM-DD_{title-slug}.md using the template from revops/customers/README.md. 3. Update context.md: Add any new information to the relationship summary.
Granola data can be deleted — the local copy is the source of truth.
Step 8: Present the brief
Show the briefing to the user. Ask if they want to: 1. Dive deeper into any section 2. Get the full transcript of a past meeting 3. See the complete email thread
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 specific records | get-records-by-ids | object, record_ids |
| Get pending tasks | list-tasks | is_completed=false |
Extruct MCP Tool Reference
| Task | Tool | Key parameters |
|---|---|---|
| Find an existing table | list_tables | search, limit |
| Create a new table | create_table | name, kind |
| Add columns to a table | add_columns | table_id, column_configs |
| Add rows (with enrichment) | create_rows | table_id, rows, run |
| Start/rerun enrichment | run_table | table_id, mode |
| Check run status | get_table | table_id |
| Read enriched row data | get_table_data | table_id, limit, columns |
Environment
| Variable | Source | Purpose |
|---|---|---|
| Attio | MCP (Attio connector) | CRM — people, companies, deals, tasks |
| Extruct | MCP (https://api.extruct.ai/mcp) | Company enrichment for new companies |
| Gmail | MCP (claude.ai Gmail) | Email history |
| Granola | MCP (Granola) | Meeting notes and transcripts |
| Google Calendar | MCP (claude.ai Google Calendar) | Upcoming meeting context (optional) |
EXTRUCT_GROWTH_SIGNAL_TABLE_ID | .env | Cached Growth Signal table ID (auto-saved on first run) |
Reference
- CRM enrichment context:
revops/CRM_ENRICHMENT.md - Customer artifacts:
revops/customers/(see README.md for structure and templates) - Extruct Growth Signal table: discovered at runtime via
list_tableswithsearch = "Growth Signal", or auto-created if missing