get_objection_response
Handle sales objections like 'too expensive' or 'no budget' with psychology-backed responses. Select the objection type to get a tailored counterargument.
Instructions
Handle a specific sales objection with psychology-backed responses.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| objection_type | Yes | The type of objection to handle |
Implementation Reference
- src/main.ts:825-842 (handler)Handler for the 'get_objection_response' tool. Extracts objection_type from args, looks up the corresponding OBJECTION_HANDLERS entry, and returns the objection handling data (psychology, response, follow-up advice, mistakes to avoid) as JSON.
case "get_objection_response": { const objectionType = args?.objection_type as string; const handler = OBJECTION_HANDLERS[objectionType as keyof typeof OBJECTION_HANDLERS]; return { content: [{ type: "text", text: JSON.stringify({ module: "Objection Handling", framework: { step_1: "Acknowledge — make them feel heard", step_2: "Clarify — find the real objection", step_3: "Reframe — address the actual concern" }, ...handler }, null, 2) }] }; } - src/main.ts:678-692 (schema)Schema/registration of the 'get_objection_response' tool in the tools list. Defines inputSchema with required 'objection_type' parameter, enum of objection types, and description.
{ 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"] } }, - src/main.ts:647-657 (registration)Server setup and capability declaration for the MCP server named 'smb-sales-intelligence'.
const server = new Server( { name: "smb-sales-intelligence", version: "2.0.0", }, { capabilities: { tools: {}, }, } ); - src/main.ts:660-662 (registration)Server request handler for ListToolsRequestSchema, registering all available tools including get_objection_response.
server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ - src/main.ts:75-149 (helper)OBJECTION_HANDLERS data object containing all objection types (too_expensive, no_budget, need_approval, comparing_options, bad_timing, already_have_someone, send_info, need_to_think, too_soon, ghosting) with psychology, response, follow-up, and mistake_to_avoid fields.
const OBJECTION_HANDLERS = { too_expensive: { objection: "Your price is too high", psychology: "Price objections are rarely about price — they're about perceived value.", response: "Fair point — let me ask: is it the total investment that feels off, or the value relative to what you're getting? Because I can usually solve one of those.", if_its_the_number: "Offer Option A with reduced scope. Never discount Option B.", if_its_the_value: "Restate the specific ROI: 'Most clients see X within Y weeks. Would that math work for you?'", mistake_to_avoid: "Never immediately offer a discount — it signals your original price was fake." }, no_budget: { objection: "We don't have budget right now", psychology: "This is often a polite rejection, but sometimes it's real timing.", response: "Makes sense — budget cycles are real. Quick question: is this 'not ever' or more 'not this quarter'? If it's timing, I'd rather hold your place than lose the conversation.", if_timing: "Set a specific follow-up date: 'I'll reach out [date]. Does that work?'", if_never: "Thank them, ask for referral: 'Totally understand. Anyone in your network who might be looking for this?'", mistake_to_avoid: "Don't push back on budget — you can't create money that isn't there." }, need_approval: { objection: "I need to check with my team/boss", psychology: "You're talking to an influencer, not the decision-maker.", response: "Totally get it — is there anything I can put together that would make that conversation easier? A one-pager, ROI calc, anything?", follow_up: "Offer: 'Happy to jump on a quick call with them if that helps. Sometimes an outside voice makes it easier.'", mistake_to_avoid: "Don't bypass them to reach the boss — you'll lose the champion." }, comparing_options: { objection: "We're looking at other vendors", psychology: "Good sign — they're actively buying. Make sure you're comparing apples to apples.", response: "Smart move — you should be. What's the main thing you're comparing on? Price, quality, turnaround, or something else?", follow_up: "Once you know their criteria, show how you win on that specific dimension.", mistake_to_avoid: "Don't trash competitors — it makes you look insecure." }, bad_timing: { objection: "Not the right time / too busy", psychology: "Either a soft rejection or genuine timing issue.", response: "Heard. Is this 'wrong quarter' or 'wrong week'? If it's just timing, I'd rather stay on your radar than start from scratch later.", follow_up: "Get specific: 'When would be better? I'll set a reminder and reach out then.'", mistake_to_avoid: "Don't accept vague timing — pin them to a date." }, already_have_someone: { objection: "We already work with someone", psychology: "Loyalty is good, but most relationships aren't exclusive.", response: "Nice — is that relationship locked in, or do you occasionally test new partners? Most brands I work with started as a 'test' alongside their existing team.", follow_up: "Offer low-risk trial: 'What if we did one small project? If it works, great. If not, no hard feelings.'", mistake_to_avoid: "Don't try to replace — try to complement." }, send_info: { objection: "Can you just send your portfolio/deck/info?", psychology: "They're trying to skip the conversation. Don't let them.", response: "Absolutely — before I do, quick context question: what's the main problem you're trying to solve? Helps me send the most relevant stuff.", follow_up: "Always qualify before sending generic materials.", mistake_to_avoid: "Don't send a generic portfolio — you'll get ghosted." }, need_to_think: { objection: "Let me think about it", psychology: "There's a specific blocker they're not saying.", response: "Of course — what's the main thing you're weighing? If it's timing, scope, or budget, I might be able to help narrow it down.", follow_up: "Once you identify the real blocker, address it directly.", mistake_to_avoid: "Don't say 'take your time' — that kills urgency." }, too_soon: { objection: "It's too early for us to think about this", psychology: "They don't see the cost of waiting.", response: "Totally fair. Quick question: what needs to happen before this becomes a priority? I want to make sure I reach out at the right time.", follow_up: "Understand their buying triggers, then follow up when those triggers happen.", mistake_to_avoid: "Don't push — you'll burn the relationship." }, ghosting: { objection: "No response to follow-ups", psychology: "They're not saying no — they're saying 'not urgent enough to respond.'", day_5_message: "Had a thought for your [product/campaign]: [specific idea or observation]. Want me to build that into the proposal?", day_7_message: "Closing the loop — reply 'A', 'B', or 'C' if you want to pick this back up. Otherwise, I'll assume timing shifted.", day_14_message: "Saw you just [launched X / posted Y]. If you need help with [specific thing], I have a slot this week.", mistake_to_avoid: "Never send 'just checking in' — it adds no value." } };