Reading profiles and sending a handful of invites from your own browser session is an evening's work for an agent, and open-source MCP servers already do it. SalesTouch charges for the layer that keeps it alive: sends paced like a person, cooldowns when LinkedIn pushes back, a residential IP per account, queues that run while your laptop is shut, and Sales Navigator extraction. LinkedIn's help center says automation tools breach its User Agreement and can get an account restricted, so the real cost of any version, hosted or homemade, is your account. A local, read-mostly build is sensible; a mass-outreach build is not.
Before you buildSalesTouch has a 7-day trial (card required). Also try the open-source linkedin-mcp-server first: it already covers reading and basic sending from your own machine.
Build me a local MCP server that lets my coding agent use my own LinkedIn account, to replace SalesTouch. Requirements: - Python 3.12 with the official `mcp` SDK (FastMCP) over stdio and Playwright driving Chromium with a persistent profile in ~/.linkedin-agent/profile. `linkedin-agent login` opens a visible browser where I sign in by hand; never ask for or store my password. - Read tools: lookup_profile, lookup_company, search_people (keywords, location, company), list_inbox and read_conversation. Return structured JSON (name, headline, location, current role, URL), never raw page HTML. - Write tools: send_invite (note up to 200 characters) and send_message. Both stay disabled unless ALLOW_WRITES=true in .env, require confirm=true from the agent, and are logged to SQLite at ./data/actions.db with time, target and text. - Pacing guard in front of every write: daily caps (default 20 invites and 30 messages), a random 20 to 90 second gap between actions, 09:00 to 18:00 local time only, one invite per person per 3 weeks. On a checkpoint, captcha or "unusual activity" page, stop all writes for 24 hours and say so in every tool reply. - schedule_message(url, text, send_at) goes into the same SQLite file and a background worker sends it while the server runs; the laptop has to be awake. - Local-first: no accounts, no telemetry; only linkedin.com is contacted. - Out of scope: Sales Navigator, bulk scraping of comments or reactions, email sending, proxies, and running on a server (a datacenter IP is the quickest way to get flagged). - README: register it with `claude mcp add`, how to delete the profile folder, and a warning that LinkedIn's User Agreement forbids automation, accounts can be restricted, and the selectors break whenever LinkedIn changes its pages.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own SalesTouch.
Add an approval queue to the LinkedIn MCP server in this folder. Requirements: - send_invite and send_message no longer send: they store a pending action in SQLite with the target, the text and the reason the agent gave. - `linkedin-agent review` lists pending actions in the terminal, shows the target's headline next to the text, and lets me approve, edit or reject each one with a key. - Approved actions go through the existing pacing guard; rejected ones are kept with the reason so the agent can see what I turned down. - Update the README.
Add a lead book to the LinkedIn MCP server in this folder. Requirements: - SQLite tables for leads (URL, name, headline, company, stage, tags, note, last contact) and a history of every tool call that touched a lead. - MCP tools: lead_upsert, lead_tag, lead_note and leads_search (by stage, tag or text). - `linkedin-agent export` writes leads.csv in UTF-8, one row per lead, with the last five history entries joined into one column. - Update the README.
Add a warm-up schedule to the pacing guard in this folder. Requirements: - A WARMUP_START date in .env. For the first 21 days, the daily caps grow in steps from 5 invites and 5 messages up to the configured maximum. - Show today's cap and what is left of it in every write tool's reply. - If a write hits a checkpoint or "unusual activity" page, restart the warm-up from day 1 after the 24-hour pause. - Tests for the schedule with a fake clock. Update the README.
Outbound is a numbers game, and a restricted LinkedIn account is expensive to lose. SalesTouch sells the pacing, monitoring and always-on queue so an agent can keep working unattended. Its success-rate figures and testimonials are the vendor's own and we couldn't check them, and we found no independent reviews.
Estimate · It runs on your own laptop, so there is no hosting bill; the cost is token usage on your agent plan, and the risk is your LinkedIn account. A VPS would add a few dollars but also a datacenter IP, which the prompt rules out.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Monthly | $39 | — | One LinkedIn account, every tool, safety controls and analytics. |
| Annual | — | $32.42 | The same as Monthly. |
| Extra LinkedIn account | $39 | $32.42 | Another connected LinkedIn profile on the same workspace. |
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Sends that keep running while your computer is off, A residential IP in your country for each account.
About $39 a month on the Monthly plan per seat, $468 a year (checked 2026-10-19).
Sends that keep running while your computer is off; A residential IP in your country for each account; Sales Navigator searches and bulk extraction from post comments, reactions, groups and viewers; Follow-up sequences, lead tags, lead history and acceptance and reply analytics; The vendor's cooldowns and monitoring when LinkedIn pushes back. If any of those matter to you, keep paying.
Yes: linkedin-mcp-server (open source), linkedin-mcp-server (eliasbiondo) (open source).