Updated

Hiring engineers with Roo Code: LinkedIn outreach you approve first

Use a custom Roo Code mode and Finchreach to search LinkedIn for candidates and draft personal invitations and DMs that wait for your approval.

Finchreach teamRoo codeLinkedinMcpHiringRecruitingOutreach

The short answer

If you lead an engineering team and you are hiring, you already know the best candidates rarely answer job ads. They answer a short, specific note from the person they would work with. Roo Code with Finchreach lets you do that sourcing work from your editor: search LinkedIn for people, look at what they have posted, and draft a personal connection invitation or a message to someone you already know. Every invitation and message waits in your approval queue until you approve it.

Finchreach is a remote MCP server for LinkedIn at https://mcp.finchreach.com/mcp. MCP (Model Context Protocol) is a standard plug that lets AI apps use outside tools. Roo Code supports remote MCP servers with custom headers, so it connects directly with a Finchreach API key. Pair it with a custom Roo Code mode, say “Recruiter”, whose instructions keep the assistant narrow, honest and slow.

Why use Roo Code for LinkedIn hiring outreach?

Roo Code lets you define custom modes, each with its own role and instructions. That is useful for outreach, because the rules that make recruiting messages good are easy to forget at message twelve: mention something real about the person, say who you are and what the role is, keep it short, never pretend you read something you didn’t. Put those rules in a mode once and every draft follows them.

It also keeps hiring next to the work. The job description, the team’s README and your notes on what the role actually involves can sit in the same workspace, so the assistant drafts from the real role instead of from a generic template.

  • Search: linkedin_search with the people vertical, optionally filtered to 1st, 2nd or 3rd+ degree connections.
  • Context: the content vertical finds posts on a topic, so you can see what a candidate has written about publicly.
  • Invitations: linkedin_send_invitation with an optional note of up to 300 characters.
  • Messages: linkedin_get_conversations, linkedin_get_messages and linkedin_send_dm for people you are already talking to.
  • Approval: every invitation and message returns pending_approval and waits at /approvals.

How do I connect Roo Code to LinkedIn?

Open the MCP icon in Roo Code. “Edit Global MCP” opens mcp_settings.json, which applies everywhere; “Edit Project MCP” opens .roo/mcp.json in the current workspace, which wins if both define the same server. Add Finchreach like this:

mcp_settings.json or .roo/mcp.json
{
  "mcpServers": {
    "finchreach": {
      "type": "streamable-http",
      "url": "https://mcp.finchreach.com/mcp",
      "headers": { "Authorization": "Bearer <your Finchreach API key>" },
      "disabled": false,
      "alwaysAllow": [],
      "disabledTools": ["linkedin_create_post", "linkedin_react_to_post", "linkedin_comment_on_post"]
    }
  }
}

A few choices worth making on purpose. disabledTools hides tools this workspace has no business using; a hiring project does not need to publish posts or react to them. alwaysAllow lists tools Roo Code may call without asking you. If you use it at all, put only read tools there, such as linkedin_search. Never put linkedin_send_invitation or linkedin_send_dm in it: you want to see each outreach call in Roo Code and again in Finchreach’s queue. And if you use the project file, keep your API key out of git, or use the global file for this server instead. Details are in Roo Code’s MCP docs.

  1. Sign up for Finchreach and connect your LinkedIn account at /accounts.
  2. Create an API key at /api-keys.
  3. Add the server to mcp_settings.json or .roo/mcp.json as above.
  4. Create a custom “Recruiter” mode with the instructions below.
  5. Draft outreach in that mode, then review it at /approvals. The Roo Code guide and the docs cover the rest.

What should a Recruiter mode’s instructions say?

Keep them short and strict. Here is a starting point you can paste into a custom mode’s instructions and adapt:

Recruiter mode instructions
You help me, an engineering lead, reach candidates on LinkedIn for the role described in hiring/role.md.
- Use only what you actually found (search results, their public posts). Never invent shared interests or claim I read something.
- Invitation notes: under 300 characters, say who I am, the role in one line, and one specific reason I'm writing to them.
- Messages only to people I'm already connected with or already talking to.
- Draft a batch of at most 5 at a time, show me the drafts, and queue them only when I say so.
- Never send a second message to someone who hasn't replied unless I ask.

The batch limit is not a technicality. Small, reviewed batches keep the quality up and the pace human, which matters both to candidates and to LinkedIn.

What prompts work for sourcing candidates on LinkedIn?

Start with a search and ask for reasons, not just names:

Ask your assistant“Search LinkedIn people for “platform engineer Kubernetes Go Berlin”, 2nd-degree connections only. Pick the 5 that best match hiring/role.md and tell me why for each, based only on the search results. Don’t contact anyone yet.”

Then look for real context before drafting. Search results give you a name and headline; there is no tool for reading someone else’s full profile, so public posts are the best extra signal:

Ask your assistant“For those 5, search LinkedIn content for posts they have written about infrastructure or Go. Summarize anything relevant in one line each, and say plainly if you found nothing.”
Ask your assistant“Draft a connection invitation note for each, under 300 characters, following the Recruiter rules. Show me all 5 with character counts. When I reply “queue”, send them with linkedin_send_invitation and list the action ids.”

For people you already know, messages work better than invitations:

Ask your assistant“Look through my LinkedIn conversations for anyone who has talked with me about backend work in the last few months. Draft a short, friendly message to each asking if they’d like to hear about the role or know someone who would. Show me the drafts first.”

Is automated LinkedIn recruiting outreach safe?

Approval mode is on by default for every Finchreach account. When Roo Code calls linkedin_send_invitation or linkedin_send_dm, nothing is sent: the result is { status: "pending_approval", action }, and you approve or reject each one at /approvals. Roo Code can check progress with linkedin_get_action. Accepting invitations from candidates who reach out first is coming soon; for now, do that in LinkedIn.

Automating a personal LinkedIn account carries risk under LinkedIn’s User Agreement, and LinkedIn limits how many connection invitations you can send. The approval queue and a human pace lower the risk; they don’t remove it. Send a few well-chosen invitations a day, not hundreds, spread them out, and stop if your acceptance rate drops or LinkedIn shows a warning. No tool can promise your account won’t be restricted.

Know the limits too: Finchreach works on your personal profile only, with no company pages, no scheduling and no analytics. It is not a sequencing tool, and it will not run follow-up campaigns on its own.

Roo Code and LinkedIn hiring: common questions

Can Roo Code send invitations without me? Not if you leave linkedin_send_invitation out of alwaysAllow. And even then, Finchreach holds every invitation until you approve it.

Why is my invitation note rejected? Notes are limited to 300 characters. Ask the mode to show character counts with each draft.

Can I message people I am not connected to? linkedin_send_dm takes recipient profile ids, but LinkedIn generally limits messages to people outside your network. Invitations with a note are the normal first step.

Should I use the project or global MCP file? Use .roo/mcp.json if only your hiring workspace should see LinkedIn tools, and keep it out of version control because it holds your key. Use the global mcp_settings.json if you want the server everywhere.

Does this work with other agents? Yes, with any client that can send an API key header to a remote MCP server. See the docs, the Cline guide, or what a LinkedIn MCP server is.