Batch review: "review today's calls" → analyzes all calls from today → summary report
Coaching mode: "call coaching for my University of Michigan demo" → deep analysis with talk ratio, question quality, objection handling
Trigger phrases:
- "analyze call [company]"
- "call review [company]"
- "score my call"
- "what did I miss on [company] call"
- "call coaching [company]"
- "review my last call"
- "review today's calls"
- "how did my call go"
- "Clari scorecard"
Architecture
TRIGGER DATA PULL ANALYSIS OUTPUT
──────────────────────────────────────────────────────────────────────────────────
"analyze call X" → Clari: transcript + → MEDDIC scoring → Call Scorecard
summary + action items → Discovery gaps → Coaching Report
→ HubSpot: deal context → Competitor extract → Action Items
→ Prior call history → Talk ratio analysis → Deal Update
→ Objection mapping → Morning Brief Feed
Stage 1: Data Collection
Run these MCP calls in parallel:
1a. Clari Call Data
| Tool | Purpose |
|---|---|
clari_search_calls |
Find the call by company name, attendee email, or date range |
clari_get_call |
Full call metadata: duration, participants, recording URL |
clari_get_call_summary |
AI summary, key moments, action items, sentiment |
Search strategy:
- If company name provided:
clari_search_calls(query=company_name, daysBack=7) - If "last call" or "today's calls":
clari_search_calls(daysBack=1) - If attendee specified:
clari_search_calls(attendeeEmail=email, daysBack=14)
1b. HubSpot Deal Context
| Tool | Purpose |
|---|---|
hubspot_search_companies |
Company record for the prospect |
hubspot_search_deals |
Active deals associated with this company |
hubspot_search_contacts |
Contact records for call participants |
Pre-Flight Golden Rules Check:
- If contact.lifecyclestage = 'customer' → Skip. Route to CSM.
- If hubspot_owner_id IN ('82625923', '423155215', '190030668') AND Tim is NOT collaborator → Skip.
1c. Prior Call History
| Tool | Purpose |
|---|---|
clari_search_calls |
Find previous calls with same contacts (last 90 days) |
clari_get_call_summary |
Summaries of prior calls for progression context |
Stage 2: MEDDIC Call Scoring
Score the call transcript against each MEDDIC dimension (0-100 total).
M — Metrics (0-20 points)
| Evidence | Points |
|---|---|
| Prospect stated specific success metrics | 20 |
| Prospect described general goals | 12 |
| Tim asked but prospect deflected | 8 |
| Not discussed | 0 |
Missed question: "How will you measure success? What does ideal look like in numbers?"
E — Economic Buyer (0-20 points)
| Evidence | Points |
|---|---|
| EB identified by name and confirmed as budget holder | 20 |
| EB referenced indirectly | 12 |
| Tim asked, answer unclear | 8 |
| No discussion of budget authority | 0 |
ATL/BTL Validation (MANDATORY — per CLAUDE.md § ATL/BTL Classification v1.0): Classify ALL call attendees. If NO ATL attendee → Flag ⚠️ COACHING MOMENT: "Get the economic buyer on the next call."
D — Decision Criteria (0-15 points)
| Evidence | Points |
|---|---|
| Prospect listed specific evaluation criteria | 15 |
| Some factors mentioned | 10 |
| Tim asked, prospect uncertain | 5 |
| Not discussed | 0 |
D — Decision Process (0-15 points)
| Evidence | Points |
|---|---|
| Clear timeline + stakeholders + process | 15 |
| Partial timeline | 10 |
| Tim asked, vague | 5 |
| Not discussed | 0 |
I — Identify Pain (0-20 points)
| Evidence | Points |
|---|---|
| Specific quantified pain | 20 |
| Qualitative pain | 12 |
| Pain implied | 6 |
| No pain discussion (pitch without discovery) | 0 |
C — Champion (0-10 points)
| Evidence | Points |
|---|---|
| Contact volunteered to champion internally | 10 |
| High engagement (detailed questions, requested next steps) | 7 |
| Passive engagement | 3 |
| No champion signal | 0 |
MEDDIC Classification
| Score | Rating | Meaning |
|---|---|---|
| 80-100 | STRONG | Well-qualified deal |
| 60-79 | ADEQUATE | 1-2 gaps to fill next call |
| 40-59 | WEAK | Incomplete discovery |
| 0-39 | MISSED | Call was a pitch, not discovery |
Stage 3: Coaching Analysis
Talk-to-Listen Ratio
- Target: Prospect talks 60%+, Tim talks 40% or less
- Red flag: Tim talked 60%+ = premature pitching
Question Quality
| Type | Quality |
|---|---|
| Open-ended discovery | HIGH |
| Calibrated (NSTTD style) | HIGH |
| Closed confirmation | MEDIUM |
| Leading/assumptive | LOW |
| Product feature dump | COACHING MOMENT |
Competitive Intelligence Extraction
Scan for: Extron, Blackmagic, Crestron, vMix, Matrox, Teradek, Kaltura, Panopto, YuJa, Echo360
Stage 4: Output Format
╔══════════════════════════════════════════════════════════════╗
║ CALL SCORECARD: [Company Name] ║
║ [Date] [Duration] | [Call Type: Discovery/Demo/Follow-up] ║
╠══════════════════════════════════════════════════════════════╣
MEDDIC SCORE: [XX/100] — [STRONG/ADEQUATE/WEAK/MISSED]
DISCOVERY GAPS — ASK THESE NEXT TIME:
1. [Specific question for biggest MEDDIC gap]
2. [Specific question for second gap]
COACHING MOMENTS:
⚠️ [Context] — [What happened] → [What to do differently]
COMPETITIVE INTEL: [Competitor mentioned + battlecard response]
TALK RATIO: Tim [X%] / Prospect [X%]
ACTION ITEMS:
☐ [Action] — Owner: [Tim/Prospect] — Due: [date]
╚══════════════════════════════════════════════════════════════╝
deal-momentum-analyzer (Signal 4: Call Momentum)
Push: call_recency, call_sentiment, meddic_score, unresolved_actions, competitor_detected
morning-brief
Include: yesterday's call scores, unresolved action items, deals with MEDDIC gaps needing follow-up
meddic-call-prep-auto
Feed prior call gaps into next call prep
Sibling Skills Referenced
deal-momentum-analyzer— Consumes call quality signals for Signal 4 scoringmeddic-call-prep-auto— Receives call gaps to inform next call prepmorning-brief— Displays yesterday's call summaries
Emit Outcome Sidecar
As the final step, write to ~/.claude/skill-analytics/last-outcome-call-recording-analyzer.json:
{"ts":"[UTC ISO8601]","skill":"call-recording-analyzer","version":"1.0.0","variant":"default",
"status":"[success|partial|error]","runtime_ms":[estimated ms from start],
"metrics":{"calls_analyzed":[n],"avg_meddic_score":[n],"coaching_moments_found":[n],"competitors_detected":[n]},
"error":null,"session_id":"[YYYY-MM-DD]"}
Use status "partial" if some stages failed but results were produced. Use "error" only if no output was generated.