get_followup_sequence
Retrieve a structured follow-up sequence tailored to specific sales situations such as post-proposal, post-call, cold outbound, or revival.
Instructions
Get a follow-up sequence for different situations (post-proposal, post-call, cold outbound, revival).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sequence_type | Yes | The type of follow-up sequence needed |
Implementation Reference
- src/main.ts:693-707 (schema)Tool schema registration for 'get_followup_sequence' — defines name, description, and inputSchema with an enum of sequence types (post_proposal, post_call, cold_outbound, revival).
{ name: "get_followup_sequence", description: "Get a follow-up sequence for different situations (post-proposal, post-call, cold outbound, revival).", inputSchema: { type: "object", properties: { sequence_type: { type: "string", enum: ["post_proposal", "post_call", "cold_outbound", "revival"], description: "The type of follow-up sequence needed" } }, required: ["sequence_type"] } }, - src/main.ts:844-862 (handler)Handler for 'get_followup_sequence' tool call. Extracts sequence_type from args, looks it up in FOLLOWUP_SEQUENCES map, and returns the sequence with follow-up rules in JSON format.
case "get_followup_sequence": { const sequenceType = args?.sequence_type as string; const sequence = FOLLOWUP_SEQUENCES[sequenceType as keyof typeof FOLLOWUP_SEQUENCES]; return { content: [{ type: "text", text: JSON.stringify({ module: "Follow-Up Sequences", rules: [ "Reply in the same thread — never start new", "Keep each message under 3 lines", "Day 5 value-add is your highest-leverage message", "Never say 'just checking in' — it adds no value" ], sequence: sequence }, null, 2) }] }; } - src/main.ts:155-229 (helper)FOLLOWUP_SEQUENCES constant object defining the actual follow-up sequences for each type: post_proposal (days 1,3,5,7,14), post_call (same_day, day_2, day_5), cold_outbound (email_1, email_2, email_3), and revival (dead leads).
const FOLLOWUP_SEQUENCES = { post_proposal: { name: "After sending proposal/quote", day_1: { timing: "24 hours", template: "Quick check — did you want to go with A, B, or C? Happy to lock in dates once you pick.", psychology: "Simple, no pressure, just asking for the decision." }, day_3: { timing: "3 days", template: "Still deciding between options, or did timing shift? Either way fine — just want to make sure I hold your slot if needed.", psychology: "Creates scarcity without being pushy." }, day_5: { timing: "5 days - MOST IMPORTANT", template: "Had a thought for your [product/campaign]: [specific idea]. Want me to build that into Option B?", psychology: "Adds value, shows you're thinking about their business. This reopens 30-40% of dead conversations.", note: "This is your highest-leverage message. Spend time making the idea specific." }, day_7: { timing: "7 days", template: "Closing the loop on my end. If you want to pick this back up, reply with A, B, or C and I'll jump back in.", psychology: "Clean exit. Low pressure but keeps door open." }, day_14: { timing: "14 days - optional", template: "Saw you just [launched X / posted about Y]. If you need [deliverable] for it, I have a slot this week. Want updated options?", psychology: "Re-engages with relevance to their current activity." } }, post_call: { name: "After discovery/sales call", same_day: { timing: "Within 2 hours of call", template: "Great chatting! As discussed, here are the 3 options:\n\n[Options]\n\nLet me know which works, and I'll get things moving.", psychology: "Strike while the iron is hot. Speed = professionalism." }, day_2: { timing: "2 days if no response", template: "Quick follow-up on the options I sent. Any questions, or are you ready to pick one?", psychology: "Simple nudge." }, day_5: { timing: "5 days", template: "Thought about what you said re: [specific thing from call]. What if we [modified approach]? Could make Option B even more relevant.", psychology: "Shows you listened. References the actual conversation." } }, cold_outbound: { name: "Cold outreach sequence", email_1: { timing: "Day 0", template: "Subject: Quick question about [their problem]\n\nHi [Name],\n\n[One line about them — not generic]\n\nI help companies like [similar company] solve [specific problem]. Is this something you're actively working on, or is this a 'not right now' situation?\n\nEither answer is fine.\n\n[Your name]", psychology: "Permission-based. Not asking for their time." }, email_2: { timing: "Day 3", template: "Subject: Re: Quick question about [their problem]\n\n[Name] — bumping this up. Is [problem] on your radar right now?\n\nIf not, no worries at all.", psychology: "Short, respectful bump." }, email_3: { timing: "Day 7", template: "Subject: Re: Quick question about [their problem]\n\nLast one from me — if [problem] becomes a priority later, here's a [resource/case study] that might help:\n\n[Link]\n\nGood luck with [something specific to them].", psychology: "Adds value, closes loop, leaves door open." } }, revival: { name: "Reviving dead leads (90+ days old)", approach: "Reference something new — their news, your news, or market news", template_their_news: "Saw [Company] just [launched/raised/announced X]. Congrats! Is [original problem] still something you're thinking about? I've helped a few similar companies with it recently.", template_your_news: "Quick update — I just [launched/completed/achieved X]. Made me think of our earlier conversation about [topic]. Is that still on your radar?", template_market: "With [industry trend/event], I've been getting a lot of questions about [topic]. Thought of our earlier chat — is this something you're running into now?", psychology: "New context = new conversation. Never reference the old silence." } }; - src/main.ts:660-797 (registration)Tool registration via ListToolsRequestSchema handler — lists 'get_followup_sequence' among all available tools.
server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: "get_discovery_script", description: "Get a discovery script to qualify prospects before pitching. Always ask questions first.", inputSchema: { type: "object", properties: { tone: { type: "string", enum: ["professional", "warm", "ultra_short", "cold_outbound", "inbound_lead"], description: "professional=email/linkedin, warm=existing relationship, ultra_short=DM, cold_outbound=first contact, inbound_lead=they reached out" } }, required: ["tone"] } }, { name: "get_objection_response", description: "Handle a specific sales objection with psychology-backed responses.", inputSchema: { type: "object", properties: { objection_type: { type: "string", enum: ["too_expensive", "no_budget", "need_approval", "comparing_options", "bad_timing", "already_have_someone", "send_info", "need_to_think", "too_soon", "ghosting"], description: "The type of objection to handle" } }, required: ["objection_type"] } }, { name: "get_followup_sequence", description: "Get a follow-up sequence for different situations (post-proposal, post-call, cold outbound, revival).", inputSchema: { type: "object", properties: { sequence_type: { type: "string", enum: ["post_proposal", "post_call", "cold_outbound", "revival"], description: "The type of follow-up sequence needed" } }, required: ["sequence_type"] } }, { name: "get_closing_script", description: "Get a closing script based on the situation.", inputSchema: { type: "object", properties: { style: { type: "string", enum: ["standard", "assumptive", "timeline", "scarcity", "retainer", "choice", "next_step"], description: "The closing style to use" } }, required: ["style"] } }, { name: "get_pricing_framework", description: "Get the 3-option pricing framework and templates.", inputSchema: { type: "object", properties: {}, required: [] } }, { name: "get_emea_intelligence", description: "Get market intelligence for selling to a specific European country.", inputSchema: { type: "object", properties: { country: { type: "string", enum: ["uk", "ireland", "spain", "germany", "france", "netherlands", "nordics"], description: "The EMEA market to get intelligence for" } }, required: ["country"] } }, { name: "get_cold_email_template", description: "Get a cold email template for outbound.", inputSchema: { type: "object", properties: { template_type: { type: "string", enum: ["pattern_interrupt", "observation", "mutual_connection", "case_study", "breakup"], description: "The type of cold email template" } }, required: ["template_type"] } }, { name: "get_call_script", description: "Get a call script for discovery calls or cold calls.", inputSchema: { type: "object", properties: { call_type: { type: "string", enum: ["discovery_call", "cold_call"], description: "The type of call script needed" } }, required: ["call_type"] } }, { name: "get_buying_signals", description: "Get a list of buying signals to watch for during sales conversations.", inputSchema: { type: "object", properties: {}, required: [] } }, { name: "get_full_playbook", description: "Get the complete sales playbook with all modules.", inputSchema: { type: "object", properties: {}, required: [] } } ] }; });