Solution Page
Pull calendar context, Slack history, and Salesforce account signals into a concise meeting prep brief before the call starts.
Overview
For Sales, Account executives, Customer success
Integrations: Google Calendar, Slack, Salesforce
• Meeting brief
• Account context
• Recent activity summary
• Prep packet
• Reduces pre-call scrambling for customer-facing teams.
• Improves meeting quality with a consistent prep artifact.
• Brings CRM and collaboration context into one operational view.
What It Solves
Important meetings start without a shared prep packet, leaving teams to hunt for context across systems minutes before the call.
Workflow
Pull meeting context from the calendar and supporting systems.
Combine Slack history and account signals into a single prep brief.
Deliver a concise package the team can use immediately before the meeting.
Implementation
Review the underlying plan definition, inspect the template when available, and see how the workflow is encoded for repeatable execution.
Plan Code
call-prep.yaml
136 lines
requiredTools:
- name: gcal
type: mcp
- name: salesforce
type: mcp
- name: slack
type: mcp
parameters:
- name: meetingQuery
schema:
type: string
description: "Search query to find the meeting on Google Calendar (e.g., 'Life360')"
transformers:
- name: extract_meeting_details
onFunctionOutput: calendar_events_list
jmesPath: |-
items[0].{
title: summary,
start: start.dateTime,
timezone: start.timeZone,
meeting_id: id,
participants: attendees[*].{email: email, name: displayName},
external_emails: attendees[?!ends_with(email, '@barndoor.ai')].email
}
components:
schemas:
meeting_context:
type: object
properties:
title: { type: string }
start: { type: string }
participants:
type: array
items:
type: object
properties:
email: { type: string }
name: { type: string }
signal:
type: object
properties:
source: { type: string, description: "Source system (Slack, Gmail, Salesforce)" }
summary: { type: string, description: "Summary of the signal" }
relevance: { type: string, description: "Why this is relevant to the meeting" }
timestamp: { type: string, description: "When this signal occurred" }
sessions:
fetch-signals:
preCalls:
- name: calendar_events_list
description: "Calendar event"
args:
calendarId: primary
q: "{{ .params.meetingQuery }}"
maxResults: 5
orderBy: startTime
singleEvents: true
- name: search_messages
description: "Slack messages"
args:
query: "{{ .params.meetingQuery }}"
limit: 20
- name: queryAccount
description: "Salesforce accounts"
args:
where: "Name LIKE '%{{ .params.meetingQuery }}%'"
fields: ["Id", "Name", "Industry", "Website", "Description"]
- name: queryOpportunity
description: "Salesforce opportunities"
args:
where: "Account.Name LIKE '%{{ .params.meetingQuery }}%'"
fields: ["Id", "Name", "StageName", "Amount", "CloseDate", "NextStep", "Description"]
prompt: |-
Givenn all the data retrieved, extract relevant signals that could be important for the upcoming meeting.
build-prep:
dependsOn:
- session: fetch-signals
context: true
prompt: |-
Using the meeting details and signals gathered, create a comprehensive meeting prep summary.
schema:
type: object
properties:
meeting_details:
type: object
x-session: fetch-signals
$ref: "#/components/schemas/meeting_context"
signals:
type: array
x-session: fetch-signals
items:
$ref: "#/components/schemas/signal"
prep_summary:
type: object
x-session: build-prep
properties:
overview: { type: string, description: "preparation details of the upcoming meeting details and context" }
crm_details:
type: object
properties:
account_info: { type: string, description: "Key details about the account from Salesforce" }
opportunity_info: { type: string, description: "Key details about any open opportunities from Salesforce" }
recent_slack_activity:
type: array
items:
type: object
properties:
message: { type: string, description: "Summary of the Slack message" }
timestamp: { type: string, description: "When the message was sent" }
relevance: { type: string, description: "Why this message is relevant to the meeting" }
talking_points:
type: array
items: { type: string, description: "Key talking points to address in the meeting" }
open_items:
type: array
items:
type: object
properties:
item: { type: string, description: "Description of the open item or commitment" }
owner: { type: string, description: "Who is responsible for this item" }
source: { type: string, description: "Where this item was identified (e.g., Slack, Salesforce, Gmail)" }
suggested_agenda:
type: array
items: { type: string }