Building a daily outreach agent with Claude + MCP
From zero to a Claude Desktop MCP connection running every morning at 09:00 CET. The exact config, the exact prompt, the credit math.
Tell Claude once. Start the day with 10 personalised LinkedIn invites, already drafted against fresh data and waiting for your yes. This recipe is the exact wiring: Claude Desktop, the LinkFetch MCP server, one standing prompt, and a five-minute morning review. Total setup time: 30 minutes. Steady-state maintenance: zero.
Step 1: connect the LinkFetch MCP server
LinkFetch runs a hosted MCP server, so there is nothing to install. In Claude Desktop, open Settings, then Connectors, choose "Add custom connector", and paste your server URL with your API key on the end:
https://linkfetch.io/mcp?key=lf_your_key
Create the key on the MCP page of your dashboard. Clients that read a JSON config (Cursor and most others) take the same server with the key as a header instead:
{
"mcpServers": {
"linkfetch": {
"url": "https://linkfetch.io/mcp",
"headers": { "Authorization": "Bearer lf_your_key" }
}
}
}
In Claude Code it is one command:
claude mcp add --transport http linkfetch https://linkfetch.io/mcp --header "Authorization: Bearer lf_your_key"
Clients that only speak stdio can run the bridge instead:
npx -y linkfetch-mcp with LINKFETCH_API_KEY=lf_your_key.
People search and invites run through your own LinkedIn account, so
connect it once under Accounts in the dashboard.
Open a new chat, type What tools do you have access to?, and confirm
search_people, get_person and send_invitation show up. If they
don't, check that the key is pasted in full, then reconnect. The setup
for every client is on the Claude setup page.
The MCP protocol is Anthropic's open standard for letting models call tools without bespoke glue. The LinkFetch server is hosted, so it is always on the latest version. There is no proxy, no webhook setup, and no additional auth dance beyond the API key.
Step 2: define the ICP and write the standing prompt
The standing prompt is the seed Claude uses every morning. One paragraph, three things to specify: who you are looking for, what signal makes them worth contacting, and what tone the invite should use. Be specific. A vague ICP produces a vague morning queue.
Every morning at 09:00, find 10 prospects matching this ICP and
prepare a warm intro to each.
ICP: VP Engineering or CTO at fintechs with 50-300 employees, based in
the US or UK, that posted engineering roles in the last 30 days. Bonus
signal if they joined the company in the last 90 days.
Tools to use:
- search_jobs and search_companies to find fintechs with recent
engineering hiring
- search_people to find the VP Engineering or CTO at each one
- get_person to pull the target's current title, start date, and one
specific recent role detail
- draft each invite yourself, then call send_invitation for each one
so I can approve it
Invite style: 2 sentences. Sentence 1 names the specific signal (their
recent move, their company's hiring push, their team's recent
shipping milestone). Sentence 2 is a question, not a pitch. No emojis,
no "I came across your profile", no "would love to connect". Sound
like a peer who noticed something specific.
Skip anyone with a "no recruiters" or "no sales pitches" line in their
headline.
The "skip anyone with..." line earns its keep. LinkedIn users who add that line are the most likely to flag low-effort outreach, and the single fastest way to get a connection request reported. Filtering upstream is cheaper than dealing with reports later.
Step 3: package the prompt as a Claude Skill
The standing prompt above works as a chat message, but a Claude Skill
is the right home for something that runs every morning. Skills are
named, parametric prompts that Claude invokes by reference. Save the
prompt to ~/Library/Application Support/Claude/skills/daily-outreach.md
and give it a one-line description Claude can match against.
---
name: daily-outreach
description: Run the morning outreach pipeline. Use when the user asks
to "do the morning outreach" or starts a chat at the daily cadence.
---
[The standing prompt from step 2]
Now the morning routine is one chat: /daily-outreach. Claude invokes
the skill, runs the tool calls, returns the queue of drafts. Total wall-clock
time: under three minutes for a 10-invite run.
Step 4: the 5-minute review
Each send_invitation call comes back as a preview first. Nothing goes
to LinkedIn until you say yes. LinkFetch sends connection requests
without a note, so the drafted two sentences become your first message
once they accept (send_message, which also waits for your yes). The
morning review is a coffee-and-scroll exercise: read each draft, edit
the first sentence if it does not sound like you, approve.
Editing the first sentence is the single highest-leverage habit in this whole workflow. Reply rates for AI-drafted outreach where the first sentence is hand-edited run in the 15-20% range; reply rates for unedited copy run 3-6% (salesforge.ai, 2026). The edit takes 20 seconds. The leverage is roughly 4x on reply rate.
The other thing that happens during review: you delete one or two invites that target someone whose recent move or company change makes the signal weak in context. Claude does not know that the VP Eng who "joined 90 days ago" actually returned to a company they were at three years prior. You do. Trust your gut on the deletes.
Step 5: tune the prompt over week one
Week one of the routine is calibration. Run it daily, watch which invites get accepted and which get ignored, and adjust the standing prompt accordingly. Three common adjustments after the first week:
Tighten the seniority filter. "VP Engineering or CTO" often pulls in director-level matches whose engineering scope is too narrow for the kind of conversation you want. Replace with "VP Engineering with direct reports of 20+" if the data layer supports it, or just narrow to CTO.
Add a freshness floor. If most of the queue is people who joined
their current role 80+ days ago, the new-hire signal has gone cold.
Add joined within the last 60 days and watch the queue tighten.
Specify the second sentence shape. Generic questions ("how is the new role going?") produce generic replies. Better: questions that reference the specific signal ("did the [recent product launch] ship under the new structure or before you joined?"). Spell this shape out in the prompt and Claude will follow it.
When the daily cadence is wrong
The daily cadence makes sense for a specific shape of GTM: an outbound motion targeting a defined ICP, where a meaningful fraction of the target population posts a fresh signal (job change, hire, funding event) on any given week. If your ICP is small enough that a weekly cadence already produces five strong signals, run it weekly. The daily agent is leverage for high-volume outbound; for narrow segments it oversamples and you end up rejecting eight of every ten queued invites at review time, which trains you to skip the review.
Two failure modes signal you have miscalibrated. First: the morning queue is consistently empty or near-empty. Either the watchlist is too small, the freshness filter is too tight, or the signal definitions are too narrow. Second: the morning queue is consistently full of signals that look right but are not actually buyers. This usually means the signal types are surfacing the wrong activity (every new hire, instead of new hires above a seniority bar) and the prompt needs a tighter ICP filter.
If you find yourself reaching for the daily agent inside three weeks of starting it, the calibration probably is not bad. Stick with it through week four; reply data takes that long to stabilise.
Scaling the agent across a small team
Three to five people on the GTM side can share one daily agent configuration with two adjustments. The first: each person keeps their own LinkFetch API key and connects their own LinkedIn account, so credits and safety limits are tracked per person. The second: the standing prompt names the runner explicitly ("the morning queue is for [name], who runs the [segment] book"), so the same Skill produces different queues for different reps when run with different person variables.
Where the workflow breaks for teams is in shared watchlists. Two reps running the agent on overlapping watchlists will draft messages to the same target on the same morning. The fix is account ownership in the watchlist: tag every account with one rep's name, and have the prompt filter to only that rep's accounts at run time. Unowned accounts go in a shared pool that one rep checks per week.
The reporting story is the second tradeoff. Most teams want a weekly
summary of what the agent surfaced, what got sent, and what got
replied. The cleanest version is a Friday-afternoon Skill that pulls
the week's pending invitations and replies (list_invitations,
list_conversations) and groups by signal type, rep, and outcome.
Twenty minutes of work for the GTM lead each Friday; faster than any
CRM-based reporting equivalent.
What changed since launch: the mid-2026 update
Three things shifted between the April launch of this recipe and the mid-year update.
First, the unedited-vs-edited reply rate gap widened. The April benchmark put unedited AI outreach at 3 to 6% and hand-edited at 15 to 20%. Six-month data across user accounts running the agent shows the unedited reply rate has dropped further (closer to 2 to 4%) as recipient inboxes filled with template DMs, while edited-first-line reply rates held at 15 to 18%. The 20-second edit is now the difference between a working channel and a dead one. The architecture choice to keep send manual was the right call.
Second, the morning queue is increasingly handed off to a CSM cadence. Teams running the agent for AE-side outbound now route positive replies into a follow-on CSM workflow within 48 hours. The CSM prompt library is the cleanest second-leg cadence we've seen; the daily-champion alert in particular catches the post-close moments the AE cadence hands off badly.
Third, founders started using the agent for non-outreach sourcing. The 14-day design partner recruitment routine reuses 70% of this recipe's wiring with a different ICP filter and a different close ask. If you wired the agent for outbound and now want to source 10 design partners for a new wedge product, do not build a second pipeline; reuse this one with the ICP swap and the binary close.
The credit math
| Step | Credits per run |
|---|---|
search_jobs + search_companies to find fintechs hiring engineers |
~5 |
search_people × 10 companies (5 each) |
~50 |
get_person × 10 matched contacts (5 each) |
~50 |
send_invitation × 10, charged only when you approve (10 each) |
~100 |
| Daily total | ~205 credits |
Claude's drafting costs nothing on the LinkFetch side. At a flat per-request rate, run the routine 22 weekdays per month and the data layer uses about 4,500 credits. Ten invites a day also sits inside the account's limit of 20 connection requests a day (10 while a new account warms up). Most teams hit positive ROI on the second accepted call.
Frequently asked questions
Can I run this without Claude Desktop?
Yes. The MCP server is hosted, so any MCP client can use it. Claude Code in your terminal is a perfectly good runner, and so are Cursor and VS Code. The only piece that benefits from Claude Desktop is the morning chat surface; the actual tool calls work identically headless.
Does the agent send messages without my review?
No. send_invitation and send_message only prepare the action:
Claude shows you a preview, and nothing reaches LinkedIn until you
confirm, on every invite, every time. Credits are charged only once
you do. This is deliberate: the human makes the send decision, and
LinkFetch still holds every account to its daily and weekly limits. The five-minute review
is not a polite suggestion; it is the architecture.
What if the same prospect shows up twice in different runs?
LinkFetch will not send a second connection request to someone you invited in the last three weeks. Add one line to the standing prompt ("check list_invitations and list_connections first and skip anyone already there") and Claude filters them before drafting. You will not accidentally double-tap the same person across multiple mornings.
Can I use the agent for non-LinkedIn outreach?
LinkFetch's send tools only write to LinkedIn. For email outreach, point the queue step at your email tool of choice (most email automation platforms have MCP servers now). The data layer is the same; only the destination changes.
Last updated: 2026-10-10 by the LinkFetch team.