Skip to content
Agentmart
Submit a tool

HeyLead — AI agent for LinkedIn outreach

AI agent for LinkedIn outreach: finds the right people, writes in your voice, follows up, replies.

Connector by D4umak · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)Remote (HTTP)★ 11
Write a review

Install

Works with Claude Code, VS Code, Codex, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/d4umak-heylead

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://heylead.dev/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

AI agent for LinkedIn outreach: finds the right people, writes in your voice, follows up, replies.

Use cases: sales-prospecting, social-media

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
18 read · 15 write · 2 delete · 13 not yet classified
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Python package

Tools by what they do 48

Read from the source code; the running server may list different tools.

Read 18 · Look things up without changing anything.

  • accounts
  • brand_progress
  • brand_strategy
  • campaign_status
  • check_replies
  • contacts
  • icp
  • inbox
  • inspect
  • knowledge
  • organization
  • partners
Show 6 more tools
  • profile
  • prospect_view
  • scheduler_status
  • show_status
  • signals
  • suggest_next_action

Write 15 · Create, change, send or run things.

  • book_meeting
  • create_campaign
  • create_post
  • crm_sync
  • edit_campaign
  • engage_prospect
  • generate_and_send
  • import_prospects
  • partner
  • restore_profile
  • send_email
  • send_message
Show 3 more tools
  • setup_profile
  • update_contact
  • update_network

Delete 2 · Delete, drop, revoke or wipe things.

  • manage_watchlist
  • update_knowledge

Not yet classified 13 · We could not tell from the name and description.

  • account
  • analytics
  • answer_inbox
  • backfill_inbox
  • campaign
  • generate_icp
  • network
  • product
  • profile_signals
  • prospect
  • scheduler
  • telegram
Show 1 more tools
  • tune_signals

Network hosts it talks to 1

  • heylead.dev · found in remote endpoint, install command

Files it touches

  • Any path the agent passes to its tools

Tools (48)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • account

    Switch the active LinkedIn account, unlink it, or connect an email account. Which account is active decides who outreach is sent as. Listing them is the accounts tool. Args: action: "switch", "switch_to", "unlink", "connect_email" or "refresh_tier". account_id: The account id (switch_to).

  • accounts

    List the LinkedIn accounts connected to this HeyLead. Changes nothing. Args: action: "list" (switching, unlinking and connecting email are the account tool).

  • analytics

    Campaign analytics — reports, comparisons, and exports. Hosted accounts get a dashboard link and a snapshot card; relay the link, because some clients show the image only to the model. Args: action: What to do: "report" — Detailed analytics with outcomes, conversion rates, stale leads "compare" — Compare 2+ campaigns side by side "export" — Export campaign results as table, CSV, or JSON campaign_id: Which campaign. Uses active if empty. campaign_ids: Comma-separated IDs (for 'compare'). Compares all if empty. format: Output format for 'export': 'tabl…

  • answer_inbox

    Reply in a LinkedIn conversation, or approve or discard a drafted reply. "reply" and "approve_draft" SEND a LinkedIn message and cannot be undone. Reading the inbox is the inbox tool. Args: action: "reply", "approve_draft" or "discard_draft". chat_id: Which conversation, or which draft. text: What to send, or an edited version of the draft.

  • backfill_inbox

    Process unreplied LinkedIn inbox messages through the inbound pipeline. Scans your inbox for conversations where prospects messaged you but never got a reply. Classifies each message and sends discovery DMs. Args: limit: Max conversations to scan (default 50). dry_run: If True (default), only classify — don't send DMs. Set False to send. min_confidence: Only send DMs for signals >= this confidence (0.0-1.0). send_only: If True, skip inbox scan — process already-classified signals directly. Use after a dry_run to avoid re-scanning.

  • book_meeting

    Book a meeting on your Google Calendar and invite a prospect. Use this when a reply agrees to a call. Creates the event on the calendar you connected, attaches a Google Meet link, and emails the attendee an invitation. Args: attendee_email: Who to invite — the prospect who replied. start: When it starts, ISO 8601, e.g. 2026-09-01T10:00:00. duration_minutes: How long the meeting runs. Defaults to 30. summary: Event title. Defaults to naming the attendee. description: Optional agenda or notes included in the invitation.

  • brand_progress

    Read the personal-brand picture: the analysis, or progress against the plan. Args: action: "analyze" or "progress". focus: Which pillar to look at.

  • brand_strategy

    Plan the personal-brand work, run it, or change the LinkedIn profile. "execute" publishes to LinkedIn under your own name. Reading the plan and the progress is brand_progress. Args: action: "plan", "execute", "upload_photo", "upload_cover", "set_link", "set_headline", "set_summary", "set_photo_library" or "set_engagement". focus: Which pillar to work on. photo: A file path or base64 image.

  • campaign

    Launch, pause, resume, archive, delete or emergency-stop a campaign. Every action here changes what happens next. Watching one run, or reading its history, is campaign_status. Args: action: "launch", "pause", "resume", "archive", "delete", "emergency_stop", "retry_failed", "repair_queue" or "clear_coordinator_hold". campaign_id: Which campaign. Uses the active one if empty. confirm: Required by the actions that destroy work.

  • campaign_status

    Watch a campaign run, show its plan, or read its status history. Changes nothing. Args: action: "monitor" (live progress; a draft is started with campaign(action='launch')), "plan" (what happens after launch, step by step: finding, warm-up, invitations, opening message, follow-ups, replies, leads) or "status_history". campaign_id: Which campaign. Uses the active one if empty.

  • check_replies

    Read new LinkedIn replies and record what they mean. Fetches new messages, classifies each reply (positive, negative, question) and lists the people worth answering first. It sends nothing, but it does write: it marks an invitation accepted once the person answers or connects, moves an outreach to replied, stores the messages, and sets opted-out when someone asks not to be contacted, which stops all future outreach to them. It is the only path that notices an accepted invitation, so follow-ups depend on it having run.

  • contacts

    Search, browse and read your contacts, and export them. Changes nothing. Tagging, noting, re-staging and linking are update_contact. Args: action: "list", "search", "view", "stats", "export", "linkedin_search" or "my_connections". query: Search text for "search", "linkedin_search" and "my_connections". For "linkedin_search" the query is passed to LinkedIn as KEYWORDS, matched literally — a company name, a job title, a person's name, or a combination such as 'Acme Corp CTO' or 'Jane Doe'. A natural-language question ('who is the CTO of Acme?') i…

  • create_campaign

    Create a LinkedIn outreach campaign from a natural language description. Finds people on LinkedIn who match the description and saves a draft; nothing is sent until campaign(action='launch'). Use it for sales prospecting, recruiting and candidate sourcing, research and user-interview recruitment, job-search networking, investor and partner outreach, vendor scouting and event invitations. Reaching people you can already name — an article author, a warm intro, a speaker, one founder a customer mentioned — is the `people` argument: pass their profile URLs and the campaign is seeded from exactly…

  • create_post

    Generate and publish a voice-matched post to LinkedIn. Writes the post in your voice and publishes it immediately on your own LinkedIn account. LinkedIn is the only platform HeyLead posts to. To publish words the user has already written or approved, pass them as `text`: they go out exactly as given, with `image`, with `video`, or with no media. A post carries a photo or a video, not both. Args: topic: What to post about (e.g., "share a tip about cold outreach", "comment on AI in sales", "share a success story"). tone: Post tone: "professional", "casual", "thought-leader", "s…

  • crm_sync

    Sync campaign contacts and deals with HubSpot CRM, both ways. Pushes won deals, hot leads, or all contacts to HubSpot as contacts + deals. Tracks sync status to avoid duplicates. Includes conversation history as notes. Supports CRM integration, deal pipeline sync, and lead handoff to sales teams. First-time setup: create a HubSpot Private App with CRM scopes (contacts, deals, notes), then pass the access token here. The key is saved for future syncs. Args: campaign_id: Campaign to sync. Uses the most recent if empty. filter: Which contacts to sync: "won" (default), "hot_leads", or "…

Show 33 more tools
  • edit_campaign

    Change one running or drafted campaign's settings. Pass only what you want to change; every field left empty keeps its current value. Use it to rename a campaign, give it a booking link, feed it context that makes the messages more specific (offerings, case studies, project brief), say who it is for (campaign_intent, campaign_type), or set the limits it sends under (volume, caps, follow-ups, business hours). It edits settings only: it sends nothing and adds no prospects. A change applies to the messages written from now on, not to ones already sent. Use create_campaign for a new campaign, an…

  • engage_prospect

    Comment on, react to, follow, or endorse a prospect on LinkedIn to build trust. Finds a prospect's recent posts, generates a voice-matched comment (or reacts with a Like), and sends it. Use action="follow" to follow a prospect's profile — this triggers a "X started following you" notification and warms them up before connecting. Use action="endorse" to endorse their skills — triggers a high-visibility notification. Great for social selling, warm-up engagement, and building familiarity before cold outreach. Args: campaign_id: Which campaign to engage from. Uses active campaign if empty. …

  • generate_and_send

    Generate a personalized LinkedIn message and send it (or queue for review). Creates and sends cold outreach, connection requests, and personalized LinkedIn invitations using voice-matched AI messaging. Sends automatically after validation. A message that fails validation is never sent. Args: campaign_id: Which campaign to send from. Uses active campaign if empty.

  • generate_icp

    Generate a rich Ideal Customer Profile with buyer personas. The same profile describes whoever the user needs to reach: buyers, candidates to recruit, research or user-interview participants, hiring managers for a job search, investors or partners. Pass goal= so the profile is of the right people. Creates 2-4 ICP personas with pain points, fears, barriers, LinkedIn search parameters, and confidence scores. The result is saved and can be reused with create_campaign(icp_id=...). Supports target audience analysis, customer segmentation, buyer persona creation, ideal customer profiling, and B2B …

  • icp

    Preview a saved ICP against LinkedIn, or audit it against a campaign goal, without creating anything. Runs the search create_campaign would run from the ICP's enriched LinkedIn codes and shows what comes back, how each filter is shaping the result, and how the profiles score against the persona. It creates no campaign, no outreach records and no contacts, so an ICP can be checked and rejected without cleanup. Use it when the targeting is unproven or when someone asks for example profiles for an ICP. Args: action: "preview" shows matched profiles, the exact filters sent to LinkedI…

  • import_prospects

    Import prospects from a CSV/XLSX file into a campaign. Point HeyLead at a .csv or .xlsx file (or paste CSV text) and it will parse it, deduplicate against existing contacts and LinkedIn connections, score each prospect, and add them to the campaign for outreach. Every row of the file gets a disposition — imported, skipped:<reason>, or deduped-against a specific earlier row — and the totals are reconciled against the file's row count, so a partial import can never be reported as a success. Supports CSV import, XLSX/spreadsheet import, bulk prospect upload, lead list import, and contact list m…

  • inbox

    Read any conversation in your LinkedIn inbox, and the drafted replies. Replying, approving a draft and discarding one are answer_inbox. Args: action: "list", "read", "open_file" (save the files a person sent, to read them) or "comment_drafts". chat_id: Which conversation. name: Find the conversation by the person's name. limit: How many to show.

  • inspect

    Read-only digest of what the in-process agents decided — never writes. Surfaces operator holds, today's strategist replans, hot-lead closer decisions, recent reply skips, and gated scheduler jobs from the local log. Use it when someone asks what the agents did, who is held, why a reply was skipped, or why a campaign is not sending. It does not send, book, replan, or change outreach state. Args: action: What to show: "agents" — one-screen digest of holds, replans, closer, skips, jobs (default) "holds" — people held for you (the hold subset of "waiting") and coordinator …

  • knowledge

    List or search what HeyLead knows about your offer. Changes nothing. Adding, removing and refreshing are update_knowledge. Args: action: "list" or "search". scope: "all" or a campaign's scope. campaign_id: Which campaign. query: What to search for. kinds: Restrict to these kinds of entry. top_k: How many results.

  • manage_watchlist

    Add, remove, and list signal keyword watchlists. Watchlists define keywords that HeyLead monitors on LinkedIn to detect buying signals from prospect posts. Watchlists are also auto-created when you generate an ICP. Args: action: What to do: 'list', 'add', 'remove', 'pause', 'resume'. name: Watchlist name (for 'add'). watch_type: 'keyword', 'competitor', 'company', 'person', or 'industry' (for 'add'). keywords: Comma-separated keywords (for 'add'). E.g., "cold outreach, SDR automation". watchlist_id: Watchlist ID (for 'remove', 'pause', 'resume'). campaign_id: Optional…

  • network

    Network Intelligence — read a reciprocal pool of members' connected accounts. Pool members lend each other their LinkedIn accounts as "network sensors" for enrichment, search, network analysis, and anonymized message insights. The pool is reciprocal: it lends other members' connections and seats only to a workspace whose own LinkedIn seat is an active member. The consuming actions below are marked "members only" and are refused until you join; joining is free and takes two update_network calls, opt_in then sync. `status` reports whether you are opted in. The same is true of pooled Premium/Sa…

  • organization

    List, switch, or manage hosted HeyLead organizations. Use this to work across client workspaces. The person stays signed in; only the active organization changes. Args: action: list | switch | members | invite | remove_member | create org_id: Organization id (required for switch; optional if already switched). email: Invitee email (invite), or the new org name (create). role: editor or viewer (invite). user_id: Member to remove (remove_member).

  • partner

    Record a partner, vendor or investor follow-up, or change one. Listing them is the partners tool. Args: action: "add", "update", "complete", "snooze" or "cancel". name: Who. company: Where. email: Their address. context: What it is about. next_followup: When to come back to it. partner_id: Which one (update, complete, snooze, cancel). note: What happened.

  • partners

    List the partner, vendor and investor follow-ups you are tracking. Args: action: "list" (adding and updating are the partner tool). days: Only those due within this many days.

  • product

    Local-only product agent — patch this HeyLead git checkout or open a PR. Does not send LinkedIn, email, or calendar. Cloud workers and installs without a HeyLead .git checkout refuse. The coordinator never starts this loop; call it explicitly. Args: action: "status" (default) or "tick". request: What to change. Required for action='tick'.

  • profile

    Read the history of changes to your LinkedIn profile, or what is on it now. Putting a field back is restore_profile. Args: action: "history" or "current". field: Which field. limit: How many changes to show.

  • profile_signals

    Compile a targeting request into LinkedIn recall + profile evidence. Use this to see how HeyLead looks for country ties (school, language, worked-in) or interests (car lovers, esoteric) on a full LinkedIn profile. Campaigns still go through generate_icp / create_campaign. Args: action: compile (default), preview, or schools (exact LinkedIn school names). request: e.g. "Ukrainians in the US" or "classic car lovers". titles: Optional comma-separated titles for recall queries. location_codes: Optional comma-separated LinkedIn location codes. profiles_json: preview only — JSO…

  • prospect

    Skip a prospect, close one with an outcome, or dismiss it. Someone who is not a fit is skipped, not closed: skip leaves them out of this campaign and records nothing else. Close records a result and needs an outcome; won and lost are for people HeyLead has written to. Closing with outcome="opt_out" stops all future contact with that person. Reading a prospect is prospect_view. Args: action: "skip", "close" or "dismiss". outreach_id: Which outreach. campaign_id: Which campaign. Uses the active one if empty. outcome: "won", "lost" or "opt_out". Required for close; there is …

  • prospect_view

    Read the message thread with one prospect, or their timeline. Changes nothing. Args: action: "conversation" or "timeline". outreach_id: Which outreach. campaign_id: Which campaign. Uses the active one if empty.

  • restore_profile

    Put a LinkedIn profile field back to what it was before a change. This writes to your live LinkedIn profile. Reading the history is the profile tool. Args: change_id: Which change to undo, from profile(action="history").

  • scheduler

    Turn the autonomous scheduler on or off, or change how it runs. Off means nothing sends until it is on again. Reading its state, logs, activity or diagnostics is scheduler_status. Args: action: "toggle", "observe", "always_on", "backfill_cloud", "send_from" or "report". enabled: True to enable, False to disable (toggle, report). cloud: Act on the hosted scheduler rather than this machine's. host: "cloud" (send_from); a hosted account never sends from here. hours: The reporting interval (report). campaign_id: Which campaign (report).

  • scheduler_status

    Read the scheduler: status, logs, activity, diagnostics or the daily report. Args: action: "status", "logs", "activity" or "diagnostics". The daily report is the scheduler tool: it switches reporting on and off. cloud: Read the hosted scheduler rather than this machine's. hours: Lookback window in hours. event_type: Filter the log by event type. campaign_id: Filter by campaign.

  • send_email

    Send an email through the connected Unipile mailbox (Gmail/Outlook). This is the only supported way to send email. Never use Mail.app, osascript, mailto: handlers, or a local SMTP client. If no mailbox is connected, the result includes a hosted-auth link. Have the user open it, then retry. Or call account(action='connect_email') first. Args: to: Recipient email address. subject: Subject line. body: Body text (HTML is fine). to_name: Optional display name for the recipient.

  • send_message

    Send follow-ups, replies, or InMail to prospects. Args: action: What to do: "followup" — Send a follow-up DM after connection accepted "reply" — Reply to a prospect who has messaged you "delete" — Delete a recently sent message (within 60 min on LinkedIn) "inmail" — Send an InMail to a NON-connection. Preconditions (each fails closed with no send): prospect has a provider_id; they are NOT a 1st-degree connection (use followup/DM for those); no InMail already sent on t…

  • setup_profile

    Set up HeyLead by connecting your LinkedIn account and analyzing your writing style. REQUIRED for first-time users — must be called before any other tool. This analyzes your LinkedIn profile, posts, and writing style to create a "voice signature" so every outreach message sounds like YOU, not a bot. Handles LinkedIn automation setup, SDR onboarding, account connection, and voice analysis for personalized outreach. First-time setup: sign in at https://heylead.dev/auth/login-url, click 'Connect' on the LinkedIn row, copy the setup message ('Copy' under 'Get Started'), then call this tool with…

  • show_status

    Show your outreach dashboard — campaigns, stats, hot leads, account health. The chat is the front door to your dashboard. View pipeline metrics, prospect funnel, engagement rates, and campaign performance. Ask "how's my outreach?" anytime. Hosted accounts get a dashboard link and a snapshot card; relay the link, because some clients show the image only to the model. Args: campaign_id: Show stats for a specific campaign. Shows all if empty.

  • signals

    Read the buying signals found for your campaigns. Changes nothing. Changing how they are found or scored is tune_signals. Args: action: "show", "report", "website_stats" or "optimize_history". campaign_id: Which campaign. signal_type: Which kind of signal. status: Filter by status. limit: How many to show. days: Over how many days.

  • suggest_next_action

    Suggest the best next action for your outreach. Hosted accounts get a dashboard link and a snapshot card; relay the link, because some clients show the image only to the model. Analyzes all active campaigns and recommends what to do next, prioritized by impact: hot leads first, then pending approvals, follow-ups, engagement warm-ups, and new invitations. Args: campaign_id: Focus on a specific campaign. Analyzes all active if empty.

  • telegram

    The workspace's own Telegram account: read chats, send approved messages. For the operator's own chats (a course group, people they already talk to). Not outreach: no campaigns and no messages to strangers. Every send is two steps. action='queue' holds the exact text and sends nothing. Show the user that text; call action='approve' with its item_id ONLY after the user said yes to that text in this conversation. The approved text is sent verbatim, at most one message every 20 seconds. Actions: connect: a sign-in link to connect a Telegram account (once). chats: list chats (1:1 and gr…

  • tune_signals

    Change how signals are found, scored or acted on. Reading them is the signals tool. Args: action: "strategy", "feedback", "website_setup", "optimize", "optimize_rollback" or "optimize_weights". campaign_id: Which campaign. signal_type: Which kind of signal. signal_id: Which signal (feedback, rollback). feedback: What was wrong with it.

  • update_contact

    Change one contact: tag it, note it, move its stage, or link it to a campaign. Reading and searching contacts is the contacts tool. Args: action: "tag", "note", "stage", "link" or "enrich". contact_id: Which contact. lifecycle_stage: The stage to move it to. tag: The tag to add. note: The note to record. campaign_id: Which campaign (link). match: How to match when linking. dry_run: Show what would change without changing it.

  • update_knowledge

    Add, remove or refresh what HeyLead knows about your offer. What it holds shapes every message it writes from now on. Reading it is the knowledge tool. Args: action: "add", "remove" or "refresh". title: A name for the entry (add). text: The content (add). source_uri: A page to read instead of text (add). source_id: Which entry (remove, refresh). scope: "all" or a campaign's scope. campaign_id: Which campaign the entry belongs to. sync: Re-read the source before storing.

  • update_network

    Join or leave the shared network pool, sync it, or enrich a profile. Opting in shares your connection graph with the pool. Reading it is the network tool. Args: action: "opt_in", "opt_out", "sync", "opt_in_all", "sync_all", "enrich" or "parallel". linkedin_id: One profile. linkedin_ids: Several, comma separated. max_accounts: How many accounts to work through. force_refresh: Re-read profiles already known.

Compare and alternatives

    Featured in

    Signals

    Stars
    11
    Forks
    1
    Open issues
    1
    Weekly downloads
    2,933
    Last commit
    Oct 21, 2026 (5 days ago)
    Last release
    Oct 25, 2026 (yesterday)
    Last package publish
    Oct 21, 2026 (5 days ago)

    From GitHub (fetched Oct 24, 2026) and the package registry.

    Details

    Registry name
    io.github.D4umak/heylead
    Version
    0.10.473
    Auth
    Auth not stated
    Packages
    pypi heylead
    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 26, 2026
    Cite this page

    HeyLead — AI agent for LinkedIn outreach MCP server. Agent Mart. https://agentmart.dev/connectors/d4umak-heylead (last updated 2026-10-26)