Plan overview
Call Prep
Pull calendar context, Slack history, and Salesforce account signals into a concise meeting prep brief before the call starts.
Best for
Sales · Account executives · Customer success
Runs with
Google Calendar · Slack · Salesforce
At a glance
04
Outputs
01
Capabilities
03
Teams
Core outputs
• Meeting brief
• Account context
• Recent activity summary
• Prep packet
Capability requirements
MCP
What it solves
Important meetings start without a shared prep packet, leaving teams to hunt for context across systems minutes before the call.
• 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.
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 instructed for repeatable execution.
Plan Code
call-prep.yaml
135 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}
}
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 }