meeting-prep
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:
- If attendee emails are provided: use the primary external attendee.
- Search Attio by email or name:
Use
search-recordswithobject = "people"and the contact's email or name as query. - 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
-
Check
.envfor a cached table ID: ReadEXTRUCT_GROWTH_SIGNAL_TABLE_IDfrom.env. If present, use it as<table_id>and skip to Step 2b. -
If not in
.env, search Extruct for an existing table: Calllist_tableswithsearch = "Growth Signal",limit = 10. Look for acompany-kind table named "Growth Signal" (or similar). If found, save itsidto.envasEXTRUCT_GROWTH_SIGNAL_TABLE_ID=<table_id>, and skip to Step 2b. -
If no table exists, create one with the standard columns: Call
create_tablewithname = "Growth Signal",kind = "company". Save the returned tableidas<table_id>and persist it to.envasEXTRUCT_GROWTH_SIGNAL_TABLE_ID=<table_id>. -
Add the enrichment columns: Call
add_columnswithtable_id = <table_id>and the followingcolumn_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"] } } ] } -
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
-
Check if the company already exists in the table: Call
get_table_datawithtable_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. -
Add the company as a new row: Call
create_rowswithtable_id = <table_id>,rows = [{"data": {"input": "{company_domain}"}}],run = true. Use the company domain (e.g.livedatatechnologies.com) as input.run = truestarts enrichment immediately. -
Poll until enrichment completes: Call
get_tablewithtable_id = <table_id>and check the run status until it reports completion. -
Read the enriched row: Call
get_table_datawithtable_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. -
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)
-
Call
gmail_search_messageswith:from:{contact_email} OR to:{contact_email}Limit to 10 most recent. -
Call
gmail_read_threadon 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)
- Call
query_granola_meetingswith "meetings with {contact_name}" - If relevant meetings found, call
get_meetingsfor 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:
- Read first: If
context.mdor past meeting notes exist, use them as additional input. - Save meeting notes: If Granola data was fetched, persist to
meetings/YYYY-MM-DD_{title-slug}.mdusing the template fromrevops/customers/README.md. - 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:
- Dive deeper into any section
- Get the full transcript of a past meeting
- 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
More from extruct-ai/gtm-cowork-skills
key-account-plan
Create comprehensive Key Account Plans for clients/prospects. Use this skill whenever the user mentions 'account plan', 'key account', 'account planning', 'strategic account', 'client plan', 'customer success plan', or wants to create a structured plan for managing an important client relationship. Also trigger when users ask to 'plan for [company name]', 'review account strategy', 'prepare account review', or mention MEDDPICC/MEDDPIC analysis alongside client planning. This skill pulls data from Attio CRM (company records, contacts, deals, notes, emails, call recordings, MEDDPICC scores) and Google Drive, then produces a polished .docx Key Account Plan document and creates summary notes + tasks back in Attio. Even if the user just names a company and says something like 'let's do an account plan' or 'prepare for my QBR with [company]', use this skill.
1user-context
>
1pipeline-review
>
1meeting-followup
>
1company-people-list
>
1deal-intelligence
>
1