interpret_expansion_signal
Analyze market expansion signals such as new office openings or product launches to generate outreach implications and actionable playbooks.
Instructions
Interpret a market expansion signal (new geo, vertical, product). Returns implications and outreach playbook. Types: international_office_opening, vertical_expansion, product_launch.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| expansion_type | Yes |
Implementation Reference
- src/main.ts:359-366 (schema)Tool registration with input schema for interpret_expansion_signal. Defines name, description, and inputSchema requiring expansion_type from enum of EXPANSION_SIGNALS keys (international_office_opening, vertical_expansion, product_launch).
{ name: "interpret_expansion_signal", description: "Interpret a market expansion signal (new geo, vertical, product). Returns implications and outreach playbook. Types: international_office_opening, vertical_expansion, product_launch.", inputSchema: { type: "object", properties: { expansion_type: { type: "string", enum: Object.keys(EXPANSION_SIGNALS) } }, required: ["expansion_type"] } - src/main.ts:418-422 (handler)Handler logic for interpret_expansion_signal. Looks up args.expansion_type in the EXPANSION_SIGNALS map and returns the structured data (signal_strength, interpretation, outreach_timing, pitch_angle, common_pitfalls, average_decision_window) plus _meta. Returns error if expansion_type is unknown.
if (name === "interpret_expansion_signal") { const data = EXPANSION_SIGNALS[(args as any).expansion_type]; if (!data) return { content: [{ type: "text", text: JSON.stringify({ error: "Unknown expansion_type. See enum.", _meta: MCP_META }, null, 2) }] }; return { content: [{ type: "text", text: JSON.stringify({ expansion_type: (args as any).expansion_type, ...data, _meta: MCP_META }, null, 2) }] }; } - src/main.ts:258-283 (helper)EXPANSION_SIGNALS data definition — the lookup map containing structured interpretation data for each expansion signal type: international_office_opening, vertical_expansion, and product_launch. Each entry has signal_strength, interpretation, outreach_timing, pitch_angle, common_pitfalls, and average_decision_window.
const EXPANSION_SIGNALS: Record<string, any> = { "international_office_opening": { signal_strength: "Very High", interpretation: "New geo expansion. Localized tooling needs immediately: country compliance, language support, payment infrastructure, in-country payroll/EOR.", outreach_timing: "Within 30 days of announcement", pitch_angle: "Country-specific compliance, language support, in-region case studies", common_pitfalls: ["Generic international pitch", "Not naming specific country regulatory environment"], average_decision_window: "30-90 days (urgency is real)" }, "vertical_expansion": { signal_strength: "Medium-High", interpretation: "Moving into new industry vertical. New compliance requirements, vertical-specific case studies needed. New buyer personas.", outreach_timing: "30-90 days", pitch_angle: "Vertical-specific compliance, industry case studies, partner ecosystem in new vertical", common_pitfalls: ["Treating new-vertical buyers like existing-vertical buyers (they have different language)"], average_decision_window: "60-180 days" }, "product_launch": { signal_strength: "Medium", interpretation: "New product category for the company. New revenue motion. Often new GTM team builds out — tooling decisions parallel to product launch.", outreach_timing: "30-90 days post-launch", pitch_angle: "GTM enablement for new product line, peer launch case studies", common_pitfalls: ["Pitching general tools when they need product-launch-specific support"], average_decision_window: "60-180 days" } }; - src/main.ts:321-389 (registration)The ListToolsRequestSchema handler that registers all tools, including interpret_expansion_signal (line 359-367) as part of the tools array.
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ { name: "interpret_hiring_signal", description: "Interpret a hiring signal (new exec hire, team expansion, role posting). Returns signal strength, outreach timing, pitch angle, common pitfalls, average decision window. Provide signal_type from: head_of_sales, head_of_revenue, head_of_security, vp_marketing, sdr_team_expansion, head_of_data.", inputSchema: { type: "object", properties: { signal_type: { type: "string", enum: Object.keys(HIRING_SIGNALS) } }, required: ["signal_type"] } }, { name: "interpret_funding_signal", description: "Interpret a funding-event signal. Returns interpretation, budget band, typical buyers, outreach timing, pitfalls. Stages: seed, series_a, series_b, series_c_plus, ipo_recent, down_round.", inputSchema: { type: "object", properties: { funding_stage: { type: "string", enum: Object.keys(FUNDING_SIGNALS) } }, required: ["funding_stage"] } }, { name: "interpret_tech_stack_change", description: "Interpret a tech-stack change signal. Returns interpretation, outreach timing, pitch angle, decision window. Types: added_competitor, removed_competitor, added_warehouse, added_compliance_tool, removed_legacy_crm.", inputSchema: { type: "object", properties: { change_type: { type: "string", enum: Object.keys(TECH_STACK_SIGNALS) } }, required: ["change_type"] } }, { name: "interpret_leadership_change", description: "Interpret a leadership-change signal. Returns interpretation, outreach timing, pitch angle. Types: ceo_change, cfo_change, cto_change, cmo_change, founder_departure.", inputSchema: { type: "object", properties: { change_type: { type: "string", enum: Object.keys(LEADERSHIP_SIGNALS) } }, required: ["change_type"] } }, { name: "interpret_expansion_signal", description: "Interpret a market expansion signal (new geo, vertical, product). Returns implications and outreach playbook. Types: international_office_opening, vertical_expansion, product_launch.", inputSchema: { type: "object", properties: { expansion_type: { type: "string", enum: Object.keys(EXPANSION_SIGNALS) } }, required: ["expansion_type"] } }, { name: "score_buyer_intent", description: "Given a list of signals observed for a target account, return a composite intent score (0-100) and recommended outreach action. Use this to prioritize an account list.", inputSchema: { type: "object", properties: { signals: { type: "array", items: { type: "string", enum: Object.keys(SIGNAL_WEIGHTS) }, description: "Array of signal keys observed for this account" } }, required: ["signals"] } }, { name: "get_full_pack", description: "Returns the complete signal-interpretation library + metadata. Useful for fine-tuning or full agent context.", inputSchema: { type: "object", properties: {} } } ] }));