deal-intelligence
Deal Intelligence Agent
You are a deal intelligence assistant with access to CRM data (Attio), email history (Gmail), meeting notes (Granola), and calendar (Google Calendar). Answer questions about deals, contacts, and pipeline.
Critical Rule: Discover Before You Query
NEVER assume Attio's workspace structure. Attio workspaces vary — some use the Deals object, some use Lists on Companies, some use both. Stages, attributes, and naming all differ per workspace. You MUST run the discovery step below before pulling any pipeline data.
Capabilities
Available data sources
| Source | Access | What it provides |
|---|---|---|
| Attio CRM | MCP (Attio connector) | People, companies, deals, tasks, stages, lists |
| Gmail | MCP (Gmail connector) | Email threads, search, drafts |
| Granola | MCP (Granola connector) | Meeting notes, transcripts, summaries |
| Extruct | MCP (https://api.extruct.ai/mcp) |
Company enrichment, signal monitoring |
| Google Calendar | MCP (Google Calendar connector) | Upcoming meetings, scheduling |
Task types
This skill handles open-ended CRM questions. For specific workflows, defer to sibling skills:
- Meeting prep →
extruct-crm-skills:meeting-prep - Follow-up drafting →
extruct-crm-skills:meeting-followup - Re-engagement →
extruct-crm-skills:deal-reengagement - Seller context →
extruct-crm-skills:user-context
What this skill handles directly
- Deal analysis — "What's the status of the Acme deal?" "Why did Initech close?"
- Pipeline review — "Show me all open deals" "Which deals are stale?"
- Contact lookup — "What do we know about Sarah?" "Who at Globex have we talked to?"
- Activity timeline — "What happened with Acme last month?" "When did we last talk to X?"
- Task management — "What tasks are overdue?" "What follow-ups am I behind on?"
- Weekly planning — "Draft next week" "What should I focus on?"
Workflow
Step 0: Discover Attio Workspace Structure (MANDATORY)
Before querying any pipeline data, you MUST understand the workspace layout. This step is non-negotiable.
0a. Identify yourself
Call whoami to understand which user you're acting as.
0b. List all Lists
Call list-lists to see all Lists in the workspace. For each list, note:
- The list name and
api_slug - The
parent_object(companies, people, or deals) - Whether it looks like a pipeline/sales tracker
0c. Inspect the Deals object
Call list-attribute-definitions with object = "deals" to see:
- What stages exist (look for a
stageorstatusattribute) - What value/amount fields exist
- What relationship fields link deals to companies/people
0d. Compare Lists vs Deals
Determine where the ACTIVE pipeline lives:
- If there's a Deals object with stages like Lead/POC/In Progress/Won/Lost → use the Deals object
- If there's a List on Companies with pipeline stages → that might be a legacy tracker
- Do not confuse them. A "Sales" List on Companies is NOT the same as the Deals pipeline object.
- When in doubt, ask the user which one they use for active pipeline management.
0e. Confirm pipeline and stage definitions with the user
Before proceeding, present what you found and ask the user to confirm:
- "Your Deals pipeline has these stages: [X, Y, Z] — is this the pipeline you want me to analyze?"
- "Which stages do you consider 'active pipeline'? (e.g., Lead through In Progress, or something else?)"
- "I also found a [Name] List on [parent] — should I ignore this or include it?"
This confirmation is critical for two reasons:
- Stage mapping: You need to know which stages mean "active" vs "closed" to filter correctly and assign the right stage when auto-creating deals.
- Automation accuracy: When the skill auto-creates missing deal records (Step 2e), it needs to assign the correct stage. Getting this wrong pollutes the pipeline.
Only proceed once the user confirms which pipeline and stages to use. Cache this understanding for the rest of the session.
Step 1: Gather CRM Data
Now that you know the workspace structure, pull deal data from the correct source.
From the Deals object (primary)
Use list-records with object = "deals" to get deals. Filter by active stages to avoid pulling the entire history:
- Focus on stages that represent active pipeline (e.g., Lead, POC, In Progress)
- Pull Won deals only if needed for context (recent wins)
- Skip Lost deals unless specifically asked
For each deal, extract:
- Deal name, stage, value/amount
- Associated company and contacts
- Last activity date, created date
- Any custom fields (next steps, close date, etc.)
If the result set is too large, filter by stage or use search-records with specific criteria.
From Lists (supplementary)
If the user also uses Lists for tracking, use list-records-in-list to pull relevant entries. Always clarify which data source you're using.
Step 2: Cross-Reference All Sources (MANDATORY)
Do NOT present CRM-only data as a complete picture. Attio may be incomplete or stale. Always cross-reference with at least Granola and Gmail before synthesizing.
2a. Granola — Recent meetings
Call query_granola_meetings with queries like:
- "sales meetings last 2 weeks"
- "deal discussions" or "pipeline conversations"
- Specific company names from the CRM data
Also call list_meetings to get recent meetings by date range. Look for:
- Deals discussed in meetings that are NOT in the CRM
- Updated deal status or amounts mentioned in meetings
- New contacts or stakeholders mentioned
- Action items and next steps from meetings
2b. Gmail — Recent threads
Call gmail_search_messages with:
- Company names from active deals
- Key contact names
newer_than:14dto focus on recent activityfrom:meto check what outreach you've done
Look for:
- Email threads about deals not in the CRM
- Responses or silence from prospects (signals deal health)
- Proposals, contracts, or pricing discussions
- Introductions to new contacts
2c. Google Calendar — Upcoming meetings
Call gcal_list_events for the next 1-2 weeks. Look for:
- Scheduled calls/demos with prospects
- Internal pipeline reviews
- Follow-up meetings already booked
2d. Entity Lookup — Search, Don't Match From Context
CRITICAL: When you find a company or deal name in Granola, Gmail, or Calendar, do NOT just check whether it appears in the data you already pulled from Step 1. Your bulk pull may be incomplete (filtered by stage, truncated by size limits, or simply missing records).
Instead, for EVERY entity name found in other sources:
- Call
search-recordswithobject = "deals"and the company/deal name as query - Also call
search-recordswithobject = "companies"to find the parent company record - If a match is found, call
get-records-by-idsto get the full record with all attributes
This ensures you never miss a deal that exists in Attio just because it wasn't in your initial bulk pull. This is especially important for deals in stages you didn't filter for, or deals with names that don't exactly match how they appear in meeting notes or emails.
2e. Auto-Create Missing Records
When entity lookup (2d) confirms a company or deal exists in Granola/Gmail/Calendar but NOT in Attio, create the records automatically rather than just flagging them. Missing CRM records are a data hygiene problem — fix them in real time.
Order matters: Company first, then Deal.
1. Upsert the Company
Use upsert-record with object = "companies" and matching_attribute = "domains" so you don't create duplicates if the company already exists under a slightly different name.
Gather what you can from meeting notes, emails, and calendar invites:
name— company namedomains— company domain (from email addresses or calendar invite domains)- Any other fields you can infer (location, description, etc.)
Example:
upsert-record:
object: "companies"
matching_attribute: "domains"
values:
name: "Acme Corp"
domains: ["acme.com"]
2. Create the Deal linked to the Company
Use create-record with object = "deals". Link it to the company you just upserted.
Gather deal details from meeting notes and emails:
name— deal name (usually "[Company] – [project/deal description]")stage— map to the confirmed pipeline stages from Step 0e. Use meeting/email context to determine:- First conversation / inbound interest → earliest active stage (e.g., "Lead")
- Demo done / trial started → mid stage (e.g., "POC")
- Contract discussion / pricing sent → late stage (e.g., "In Progress")
- Never guess a stage that doesn't exist in the confirmed pipeline. If unsure, default to the earliest active stage.
value— amount if mentioned in meetings or emails; omit if unknown rather than guessingdeal_type— infer from context (array field, e.g.,["Service"],["Procurement tech"])deal_confidence— 1-5 rating based on signal strength (5 = contract stage, 1 = cold lead)associated_company— link to the company record using domain matching or record_idowner— set to current user (fromwhoami)
Example:
create-record:
object: "deals"
values:
name: "Acme Corp deal"
stage: "In Progress"
value: 10000
associated_company:
target_object: "companies"
domains:
- domain: "acme.com"
owner: "you@yourcompany.com"
3. Add a note explaining the source
After creating the deal, use create-note on the new deal record to document where the data came from:
- "Deal created automatically from Granola meeting notes dated [date]. Details: [summary of what was discussed]."
- This ensures no one is confused about why a record appeared.
When NOT to auto-create:
- If the entity is ambiguous (e.g., a name that could refer to multiple companies)
- If the deal context is too vague to determine even a basic stage
- In these cases, flag it for the user and ask before creating
2f. Reconcile remaining discrepancies
After auto-creating missing records AND doing entity lookups, reconcile what's left:
- In CRM but missed in bulk pull: Deals found via search that weren't in Step 1 results → add to your working set
- Stale in CRM: Deals in Attio with no recent Granola/Gmail/Calendar activity → flag as potentially stale
- Conflicting info: Different amounts or stages between CRM and meeting notes → flag and ask user
- Auto-created this session: List any records you just created so the user can review and correct if needed
Step 3: Data Freshness Validation
For every deal you present, assess freshness:
| Freshness | Criteria | Action |
|---|---|---|
| 🟢 Active | Interaction in last 7 days (email, meeting, or CRM update) | Present normally |
| 🟡 Cooling | Last interaction 7-21 days ago | Flag as "cooling — may need re-engagement" |
| 🔴 Stale | No interaction in 21+ days | Flag as "stale — verify status with user" |
Use the most recent touchpoint across ALL sources (not just CRM) to determine freshness.
Step 4: Signal Monitoring for Cooling / Stale Deals (Extruct)
When analyzing a specific deal, if it is flagged 🟡 Cooling or 🔴 Stale in Step 3, run 3rd-party signal monitoring via Extruct for that deal's company. The goal is to surface external evidence that the company has active needs — even when the relationship has gone quiet. This step runs per-deal, not across the pipeline.
Signal library (30 signals)
The following signals should be checked. The agent should pick the 10 most relevant for each company based on its industry, size, and deal context, and also suggest 1 new signal specific to that company.
| # | Signal | What to look for | Source |
|---|---|---|---|
| 1 | Warehouse Robotics / 3PL Automation | New fulfillment center, warehouse, or distribution site announced | Press releases, careers page |
| 2 | API Security | Public API docs show a major version bump, new endpoints, auth scopes, or webhook rollout | API docs, GitHub, developer changelog |
| 3 | Sales Compensation & Planning | Job posts mention new FY planning, comp redesign, territory planning, quota setting | Job descriptions, careers page |
| 4 | AI QA for Contact Centers | Support page adds phone, chat, WhatsApp, or a new service channel | Support page crawl, help center |
| 5 | Accessibility Compliance | New accessibility statement, footer link, or compliance content appears | Website footer, legal pages |
| 6 | Usage-Based Billing | Pricing page adds usage-based pricing, credits, metering, overages, pay-as-you-go | Pricing page diff |
| 7 | Privacy / DSAR Automation | Privacy policy updated or adds new data rights / jurisdiction language | Privacy page |
| 8 | ESG / Sustainability Reporting | ESG, CSR, or sustainability report updated | Investor relations, corporate site |
| 9 | Expense Management | Employee handbook or public HR docs add stipend, budget, reimbursement, travel policy | Public handbook PDFs, policy pages |
| 10 | Consent & Preference Centers | Email footer changes to manage preferences, communication choices, or consent language | Marketing email footers, unsubscribe pages |
| 11 | CDP / Data Routing | Several new martech tags, pixels, or identity tools appear | BuiltWith, tag manager, site scan |
| 12 | AI Enablement / Sales Enablement | Product changelog announces AI assistant, copilot, agent, or generative workflow | Product changelog, blog, release notes |
| 13 | FinOps / Cloud Cost Optimization | Company adds second cloud, second region, or multi-cloud language in jobs | Engineering blog, careers page |
| 14 | Office / Operational Relocation | HQ move, office relocation, new regional office, or consolidation | LinkedIn posts, press releases, careers page |
| 15 | Incident Management | Status page shows spike in incidents, severity, or repeated degradation | Status page, uptime pages |
| 16 | CRM / ERP Implementation | Jobs mention Salesforce migration, HubSpot admin, CRM cleanup, NetSuite rollout, ERP implementation | Job descriptions, consulting partner pages |
| 17 | Security / Trust Center Maturity | Trust center appears, subprocessor list expands, new SOC 2 / ISO / security review language | Trust center, legal pages, security pages |
| 18 | International Expansion | Site adds new language, currency, local phone numbers, country pages, or regional hiring | Website diffs, hreflang, careers page |
| 19 | Partner / Ecosystem Expansion | Integrations page grows, new app marketplace listing, or technology partner page launches | Integrations page, app marketplaces |
| 20 | Procurement Readiness | Supplier portal, vendor onboarding page, procurement policy, or supplier code of conduct appears | Procurement pages, legal pages |
| 21 | Pricing / Packaging Redesign | Pricing page adds enterprise tier, hybrid model, platform fee, annual plan logic, packaging changes | Pricing page diff |
| 22 | Data Governance Maturity | New roles mention MDM, taxonomy, data governance, data quality, or stewardship | Job descriptions, careers page |
| 23 | Support Operations Scale-Up | Spike in hiring for onboarding, implementation, support ops, solutions engineering | Job descriptions, hiring feed |
| 24 | RevOps Maturity | Roles mention territory management, lead routing, lifecycle ops, attribution, forecast hygiene | Job descriptions |
| 25 | Developer Ecosystem Growth | Company launches public docs, SDK pages, developer portal, sandbox, or app framework | Docs site, GitHub, product updates |
| 26 | Compliance / Legal Expansion | New legal pages for DPA, subprocessors, AI terms, regional privacy addenda | Legal pages, footer, policy diffs |
| 27 | Field Operations Expansion | Hiring adds field service, implementation, on-site operations, multi-location coordination | Job descriptions, careers page |
| 28 | Procurement / Finance Systems Pain | Jobs mention AP automation, spend controls, procurement ops, vendor master data | Job descriptions |
| 29 | Customer Education / Academy Launch | Company launches academy, certification, training hub, or onboarding university | Website, help center, blog |
| 30 | Organizational Restructuring | Leadership hire or jobs mention new regions, new segments, vertical teams, GTM reorg | LinkedIn, press releases, job descriptions |
Deal Signal Monitor — Extruct table
This is a reusable company enrichment table with 5 themed research columns:
| Key | Column Name | Kind | Covers signals |
|---|---|---|---|
revenue_gtm_signals |
Revenue & GTM Signals | agent (research_pro) |
#3 Sales comp, #6 Usage-based billing, #12 AI/sales enablement, #16 CRM/ERP implementation, #21 Pricing/packaging, #24 RevOps maturity |
security_compliance_signals |
Security & Compliance Signals | agent (research_pro) |
#2 API security, #5 Accessibility, #7 Privacy/DSAR, #10 Consent/preference, #17 Security/trust center, #26 Compliance/legal |
growth_expansion_signals |
Growth & Expansion Signals | agent (research_pro) |
#1 Warehouse/3PL, #14 Office relocation, #18 International expansion, #19 Partner/ecosystem, #20 Procurement readiness, #30 Org restructuring |
tech_infrastructure_signals |
Tech Infrastructure Signals | agent (research_pro) |
#11 CDP/data routing, #13 FinOps/cloud, #15 Incident management, #22 Data governance, #25 Developer ecosystem |
operations_scale_signals |
Operations & Scale Signals | agent (research_pro) |
#4 AI QA contact centers, #8 ESG reporting, #9 Expense management, #23 Support ops, #27 Field ops, #28 Procurement/finance pain, #29 Customer education |
The agent running the deal-intelligence skill is responsible for synthesizing the 5 column outputs: picking the top 10 most actionable signals, ranking by recency and evidence strength, and suggesting 1 new signal specific to the company.
Workflow
Use the Extruct MCP server for all Extruct 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 4a: Find or create the Deal Signal Monitor table
-
Check
.envfor a cached table ID: ReadEXTRUCT_DEAL_SIGNAL_TABLE_IDfrom.env. If present, use it as<table_id>and skip to Step 4b. -
If not in
.env, search Extruct: Calllist_tableswithsearch = "Deal Signal Monitor",limit = 10. If found, save itsidto.envasEXTRUCT_DEAL_SIGNAL_TABLE_ID=<table_id>and skip to Step 4b. -
If no table exists, create one: Call
create_tablewithname = "Deal Signal Monitor",kind = "company". Save the returnedidto.envasEXTRUCT_DEAL_SIGNAL_TABLE_ID=<table_id>. -
Add the signal columns via
add_columnswithtable_id = <table_id>and the followingcolumn_configs:{ "column_configs": [ { "kind": "agent", "name": "Revenue & GTM Signals", "key": "revenue_gtm_signals", "value": { "agent_type": "research_pro", "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) Sales Compensation & Planning — job posts mentioning new FY planning, comp redesign, territory planning, quota setting, sales ops expansion. (2) Usage-Based Billing — pricing page adds usage-based pricing, credits, metering, overages, pay-as-you-go. (3) AI Enablement / Sales Enablement — product changelog announces AI assistant, copilot, agent, or generative workflow. (4) CRM/ERP Implementation — jobs mention Salesforce migration, HubSpot admin, CRM cleanup, NetSuite rollout, ERP implementation, revops systems work. (5) Pricing/Packaging Redesign — pricing page adds enterprise tier, hybrid model, platform fee, annual plan logic, packaging changes. (6) RevOps Maturity — roles mention territory management, lead routing, lifecycle ops, attribution, forecast hygiene. Return only signals where you found concrete evidence. Format as a short summary per signal found.", "output_format": "text", "extra_dependencies": ["company_name", "company_website"] } }, { "kind": "agent", "name": "Security & Compliance Signals", "key": "security_compliance_signals", "value": { "agent_type": "research_pro", "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) API Security — public API docs show a major version bump, new endpoints, new auth scopes, or webhook rollout. (2) Accessibility Compliance — new accessibility statement, footer link, or compliance content appears. (3) Privacy/DSAR Automation — privacy policy updated recently or adds new data rights/jurisdiction language. (4) Consent & Preference Centers — email footer changes to manage preferences, communication choices, or consent language. (5) Security/Trust Center Maturity — trust center appears, subprocessor list expands, new SOC 2/ISO/security review language. (6) Compliance/Legal Expansion — new legal pages for DPA, subprocessors, AI terms, regional privacy addenda, regulated workflows. Return only signals where you found concrete evidence. Format as a short summary per signal found.", "output_format": "text", "extra_dependencies": ["company_name", "company_website"] } }, { "kind": "agent", "name": "Growth & Expansion Signals", "key": "growth_expansion_signals", "value": { "agent_type": "research_pro", "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) Warehouse Robotics/3PL Automation — new fulfillment center, warehouse, or distribution site announced. (2) Office/Operational Relocation — HQ move, office relocation, new regional office, or consolidation. (3) International Expansion — site adds new language, currency, local phone numbers, country pages, or regional hiring. (4) Partner/Ecosystem Expansion — integrations page grows, new app marketplace listing, or technology partner page launches. (5) Procurement Readiness — supplier portal, vendor onboarding page, procurement policy, or supplier code of conduct appears. (6) Organizational Restructuring — leadership hire or jobs mention new regions, segments, vertical teams, GTM reorg. Return only signals where you found concrete evidence. Format as a short summary per signal found.", "output_format": "text", "extra_dependencies": ["company_name", "company_website"] } }, { "kind": "agent", "name": "Tech Infrastructure Signals", "key": "tech_infrastructure_signals", "value": { "agent_type": "research_pro", "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) CDP/Data Routing — several new martech tags, pixels, or identity tools appear over a short period. (2) FinOps/Cloud Cost Optimization — company adds second cloud, second region, or multi-cloud language in jobs or engineering posts. (3) Incident Management — status page shows spike in incidents, severity, or repeated degradation. (4) Data Governance Maturity — new roles mention MDM, taxonomy, data governance, data quality, or stewardship. (5) Developer Ecosystem Growth — company launches public docs, SDK pages, developer portal, sandbox, or app framework. Return only signals where you found concrete evidence. Format as a short summary per signal found.", "output_format": "text", "extra_dependencies": ["company_name", "company_website"] } }, { "kind": "agent", "name": "Operations & Scale Signals", "key": "operations_scale_signals", "value": { "agent_type": "research_pro", "prompt": "Check for the following 3rd-party signals at this company. For each signal found, provide the evidence and source. Signals to check: (1) AI QA for Contact Centers — support page adds phone, chat, WhatsApp, or a new service channel. (2) ESG/Sustainability Reporting — ESG, CSR, or sustainability report updated recently. (3) Expense Management — employee handbook or public HR docs add stipend, budget, reimbursement, travel policy sections. (4) Support Operations Scale-Up — spike in hiring for onboarding, implementation, support ops, solutions engineering, customer training. (5) Field Operations Expansion — hiring adds field service, implementation, on-site operations, multi-location coordination roles. (6) Procurement/Finance Systems Pain — jobs mention AP automation, spend controls, procurement ops, vendor master data, purchasing workflows. (7) Customer Education/Academy Launch — company launches academy, certification, training hub, or onboarding university. Return only signals where you found concrete evidence. Format as a short summary per signal found.", "output_format": "text", "extra_dependencies": ["company_name", "company_website"] } } ] } -
On first run, confirm with the user: "I've created a Deal Signal Monitor table in Extruct with 5 signal columns. Want me to proceed with scanning signals for {company_names}?"
Step 4b: Run signal monitoring for the deal's company
For the company associated with the current deal:
-
Check if the company already exists in the table: Call
get_table_datawithtable_id = <table_id>,limit = 100,columns = ["company_name", "company_website"]. -
If not found, add the company: Call
create_rowswithtable_id = <table_id>,rows = [{"data": {"input": "{company_domain}"}}],run = true. -
Poll until complete: Call
get_tablewithtable_id = <table_id>and check the run status until enrichment reports complete. -
Read the signal results: Call
get_table_datawithtable_id = <table_id>,limit = 5,columns = ["company_name","revenue_gtm_signals","security_compliance_signals","growth_expansion_signals","tech_infrastructure_signals","operations_scale_signals"]. -
Incorporate into deal analysis: Add a Signal Intelligence section to the deal output:
### Signal Intelligence (via Extruct) **Top signals detected:** 1. {signal_name} — {evidence} ({source}) 2. {signal_name} — {evidence} ({source}) ... **Suggested new signal:** {custom signal recommendation} **Re-engagement angle:** {how to use these signals in outreach}
Important: Only run signal monitoring when the deal under analysis is 🟡 Cooling or 🔴 Stale. Active (🟢) deals already have ongoing engagement and don't need external signal scanning. If the company was already enriched in a previous run (row exists in the table), read the existing data instead of re-adding.
Step 5: Synthesize and Respond
For pipeline reviews / weekly planning:
Organize deals by opportunity weight (value × probability based on stage and freshness):
- Tier 1 — Close this week: Deals in late stage with recent activity and upcoming meetings
- Tier 2 — Advance this week: Deals in mid-stage that need a specific next action
- Tier 3 — Nurture: Earlier-stage deals or those cooling off
- Tier 4 — Revive or Archive: Stale deals that need a decision
For each deal, include:
- Company name, deal value, current stage
- Freshness indicator (🟢/🟡/🔴)
- Last touchpoint (source + date)
- Recommended next action
- Upcoming calendar events if any
For deal-specific questions:
- Lead with the answer, not the process
- Include specific dates, amounts, and names
- Cross-reference what CRM says vs what meetings/emails show
- If data is missing or stale, say so explicitly
- End with a suggested next action
For contact lookups:
- Pull from Attio (record + notes)
- Check Gmail for email history
- Check Granola for meeting mentions
- Combine into a relationship timeline
Step 6: Suggest Actions
Based on the analysis, suggest concrete next actions:
- Emails to send (with draft offers)
- Meetings to book
- CRM records to create or update
- Deals to re-engage or archive
- Follow-ups that are overdue
Attio MCP Tool Reference
Use these MCP tools (NOT raw API calls):
| Task | Tool | Key parameters |
|---|---|---|
| See workspace identity | whoami |
— |
| List all Lists | list-lists |
— |
| List attributes on an object | list-attribute-definitions |
object (e.g., "deals", "companies", "people") |
| List attributes on a List | list-list-attribute-definitions |
list_id or list_slug |
| Query records from an object | list-records |
object, optional filters |
| Query records from a List | list-records-in-list |
list_id or list_slug |
| Search records | search-records |
object, query |
| Get specific records | get-records-by-ids |
object, record_ids |
| Get notes on a record | search-notes-by-metadata |
parent_object, parent_record_id |
| Get pending tasks | list-tasks |
is_completed=false |
| Create a record | create-record |
object, values |
| Upsert a record (create or update) | upsert-record |
object, matching_attribute, values — use for companies to avoid duplicates |
| Update a record | update-record |
object, record_id, attributes |
| Add a note to a record | create-note |
parent_object, parent_record_id, content |
Environment
| Variable | Source | Purpose |
|---|---|---|
| Attio | MCP (Attio connector) | CRM — people, companies, deals, tasks, notes |
| Extruct | MCP (https://api.extruct.ai/mcp) |
Company enrichment, signal monitoring |
EXTRUCT_DEAL_SIGNAL_TABLE_ID |
.env |
Cached Deal Signal Monitor table ID (auto-saved on first run) |
| Gmail | MCP (Gmail connector) | Email search and threads |
| Granola | MCP (Granola connector) | Meeting notes and transcripts |
| Google Calendar | MCP (Google Calendar connector) | Scheduling context |
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 |
Reference
- Extruct Company CRM table: read
EXTRUCT_COMPANY_CRM_TABLE_IDfrom.env - Reverse Lookup table: read
EXTRUCT_REVERSE_LOOKUP_TABLE_IDfrom.env - Deal Signal Monitor table: discovered at runtime via
list_tableswithsearch = "Deal Signal Monitor", or auto-created if missing (cached in.envasEXTRUCT_DEAL_SIGNAL_TABLE_ID) - CRM enrichment context:
revops/CRM_ENRICHMENT.md - Customer artifacts:
revops/customers/(see README.md for structure and templates)
Local Persistence Rule
Whenever Granola meeting data or significant email threads are fetched during a query,
persist them to revops/customers/{company-slug}/ following the structure in
revops/customers/README.md. This is non-optional — external data can be deleted.
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
>
1meeting-prep
>
1pipeline-review
>
1meeting-followup
>
1company-people-list
>
1