get_pipeline_status
Monitor LinkedIn prospection pipeline status: track lead counts, invitations, messages, acceptance rates, and identify next actions.
Instructions
Get the current state of your LinkedIn prospection pipeline: lead counts by status, invitations sent, DMs sent, acceptance rates, and next actions.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/index.ts:499-568 (handler)The tool `get_pipeline_status` is implemented here as an MCP tool handler in `src/index.ts`. It reads from `getDailyLog()` to report on pipeline status, lead counts, and next actions.
server.registerTool( "get_pipeline_status", { title: "Get Pipeline Status", description: "Get the current state of your LinkedIn prospection pipeline: " + "lead counts by status, invitations sent, DMs sent, acceptance rates, and next actions.", inputSchema: {}, annotations: { readOnlyHint: true, openWorldHint: false, destructiveHint: false }, }, async () => { const log = getDailyLog() as { date?: string; invitations_sent?: number; dms_sent?: number; leads_p1?: Array<{ name: string; status: string; priority: string; linkedin_url?: string }>; leads_p2?: Array<{ name: string; status: string; priority: string; linkedin_url?: string }>; }; const allLeads = [...(log.leads_p1 || []), ...(log.leads_p2 || [])]; const statusCounts: Record<string, number> = {}; allLeads.forEach((l) => { const s = l.status || "unknown"; statusCounts[s] = (statusCounts[s] || 0) + 1; }); const lines = [ `=== Pipeline Status (${log.date || "today"}) ===`, "", `Total leads tracked: ${allLeads.length}`, `Invitations sent: ${log.invitations_sent || 0}`, `DMs sent: ${log.dms_sent || 0}`, "", "--- Status Breakdown ---", ]; Object.entries(statusCounts).forEach(([status, count]) => { lines.push(` ${status}: ${count}`); }); lines.push("", "--- Lead Details ---"); allLeads.forEach((l) => { lines.push(` [${l.priority}] ${l.name} — ${l.status}${l.linkedin_url ? ` — ${l.linkedin_url}` : ""}`); }); // Session check lines.push(""); if (fs.existsSync(SESSION_DIR)) { lines.push("LinkedIn session: ACTIVE"); } else { lines.push("LinkedIn session: EXPIRED — run setup-session.js"); } // Next actions lines.push("", "--- Next Actions ---"); const pendingInvites = allLeads.filter((l) => l.status === "pending_invitation").length; const awaitingAccept = allLeads.filter((l) => l.status === "invitation_sent").length; const readyForDM = allLeads.filter((l) => l.status === "connection_accepted").length; if (pendingInvites > 0) lines.push(` Send ${pendingInvites} pending invitations`); if (awaitingAccept > 0) lines.push(` ${awaitingAccept} invitations awaiting acceptance`); if (readyForDM > 0) lines.push(` Send DMs to ${readyForDM} accepted connections`); if (pendingInvites === 0 && awaitingAccept === 0 && readyForDM === 0) { lines.push(" Find new leads (run find_leads)"); } return { content: [{ type: "text" as const, text: lines.join("\n") }] }; }, );