About Rarefriend
Rarefriend syncs your LinkedIn connections and makes them fully searchable — with notes, tags, and relationship history so you always know who someone is, how you met, and what you last discussed.
Access it from your AI assistant, the web app at rarefriend.com, or Hops — Rarefriend's AI on WhatsApp.
Setup Detection Protocol
Call list_connected_integrations.
- Tool not available → MCP not connected. Present these steps inline to the user:
- Sign in at rarefriend.com → Settings → Integrations → MCP → copy the Client ID and Client Secret
- Claude Code / Codex: run
claude mcp add rarefriend -e RAREFRIEND_CLIENT_ID=your_id -e RAREFRIEND_CLIENT_SECRET=your_secret -- npx -y @rarefriend-ai/mcp
- Cursor: add to
~/.cursor/mcp.json under mcpServers.rarefriend with command: npx, args: ["-y", "@rarefriend-ai/mcp"], and the two env vars
- Claude Desktop: add the same block to
claude_desktop_config.json
- Restart the client, then try again
Check if LinkedIn contacts are in the CRM:
search_contacts("", source="linkedin", limit=1)
- Results found → LinkedIn is synced. Proceed to the user's request.
- No results → Don't assume it hasn't been synced. Continue to step 3.
Call get_integration_sync_status("linkedin") to check the actual sync state:
connected: false → LinkedIn has never been set up. Run the LinkedIn Sync Setup below.
lastJob.status: "running" or "pending" → Sync is currently in progress. Tell the user:
"Your LinkedIn sync is running right now — contacts will appear once it finishes. Large networks can take a few minutes. Try again shortly."
Do NOT show the sync setup instructions.
lastJob.status: "completed" with lastSyncAt set, but no contacts → Sync completed but found 0 contacts (network was empty or all were filtered). Tell the user and suggest checking LinkedIn in the web app.
lastJob.status: "failed" → Sync failed. Tell the user: "Your last LinkedIn sync failed. Go to rarefriend.com → Settings → Integrations → LinkedIn and click Sync Now to try again."
connected: true but lastJob: null → Account is connected but sync hasn't started yet. Tell the user to click Sync Now in the web app.
LinkedIn Sync Setup
LinkedIn sync works through the Rarefriend Chrome extension — it reads your LinkedIn connections directly from your browser. There is no direct LinkedIn API.
Tell the user:
"LinkedIn sync requires the Rarefriend Chrome extension. Here's how to set it up:"
- Install the extension — go to rarefriend.com → Settings → Integrations → LinkedIn → click Install Extension (opens the Chrome Web Store)
- Sign in to LinkedIn in your browser (the extension needs you to be logged in)
- Click Sync on the LinkedIn card in Settings → Integrations
- Sync runs in the background — large networks can take a few minutes
- Once done, come back here — all your connections will be searchable
After sync, LinkedIn contacts are labelled source: "linkedin" (extension) or source: "linkedin_csv" (CSV import) in search results.
Core Workflows
Search LinkedIn connections
search_contacts(query, searchMode?, tag?, source?, limit?, offset?)
source: 'linkedin' — synced via Chrome extension
'linkedin_csv' — imported via CSV
searchMode: 'all' | 'name' | 'company' | 'role' | 'email' | 'exact'
tag: filter by tag (e.g. "investor", "founder")
- "Who do I know at Stripe?" →
search_contacts("Stripe", searchMode="company", source="linkedin")
- "Find all VCs in my network" →
search_contacts("", tag="vc")
- "Find Alice Zhang" →
search_contacts("Alice Zhang", searchMode="exact")
- "Show all LinkedIn connections" →
search_contacts("", source="linkedin")
Source attribution: Each contact includes sourceLabel. Always mention it — e.g. "Found Alice Wang — LinkedIn (extension), PM at Stripe" or "John Smith — LinkedIn (CSV import)".
Paginate with offset + limit when hasMore is true.
Recall context before reaching out
Before any call, message, or meeting with a connection:
get_contact(contactId) — full profile: company, role, location, emails
list_notes(contactId) — full note history for this person
search_notes(query) — search across all contacts by keyword
get_recent_notes(limit?) — latest notes, any contact
Meeting prep pattern:
search_contacts("Marcus Johnson", searchMode="exact")
get_contact(contactId) — see their current company, role
list_notes(contactId) — review past conversations, intros given, context
- Summarise: last interaction, key context, anything to follow up on
Log relationship context
After every LinkedIn conversation, networking event, intro, or call:
create_note(contactId, content, isPinned?)
update_note(noteId, content?, isPinned?)
delete_note(noteId)
list_notes(contactId, limit?, offset?)
get_note(noteId)
pin_note(noteId, pinned) — pin for critical context (intro given, hot deal, key connection)
search_notes(query, limit?)
get_recent_notes(limit?)
Use isPinned: true for notes the user should always see first — intro'd to a key person, active deal, close mentor relationship.
Manage contacts
Update details after getting new info about a connection:
get_contact(contactId) — check current values first
update_contact(contactId, company?, role?, location?, bio?, emails?, phones?)
create_contact(displayName*, ...) — manually add someone not yet in CRM
Organise with tags
list_tags()
add_tag(contactId, tag)
remove_tag(contactId, tag)
rename_tag(oldTag, newTag)
Suggested tag conventions:
- Source:
linkedin-2024, event-founders-summit, cold-outreach
- Relationship:
warm-intro, mentor, investor, advisor
- Status:
active-deal, follow-up, dormant, met-once
- Type:
founder, vc, customer, recruiter, engineer
Bulk tagging: "Tag all Andreessen Horowitz connections as vc"
search_contacts("Andreessen Horowitz", searchMode="company", source="linkedin")
- Loop
add_tag(contactId, "vc") for each result
Cross-sync with Google or Microsoft
Once LinkedIn is synced, optionally connect Google or Microsoft to see calendar events, emails, and phone contacts alongside your LinkedIn network:
connect_integration("google_contacts")
connect_integration("google_calendar")
connect_integration("microsoft_contacts")
connect_integration("microsoft_calendar")
Quick Reference
| Tool |
When to use |
list_connected_integrations |
Always check first — detect MCP state and synced sources |
search_contacts |
Find connections by name, company, role, tag, or source |
get_contact |
Full profile before reaching out or preparing a meeting |
create_contact |
Manually add someone not yet in CRM |
update_contact |
Update details for an existing contact |
create_note |
Log a conversation, event, intro, or call |
update_note |
Edit a note |
delete_note |
Remove a note |
list_notes |
All notes for one contact |
get_note |
Full note content |
pin_note |
Mark critical relationship context |
search_notes |
Find context by keyword across all contacts |
get_recent_notes |
Recent networking activity |
list_tags |
See all tags in use |
add_tag / remove_tag |
Categorise connections |
rename_tag |
Rename a tag everywhere |
connect_integration |
Connect Google or Microsoft for cross-sync |
Other capabilities (outside this skill)
- LinkedIn sync setup — must be done in the web app via the Chrome extension (rarefriend.com → Settings → Integrations → LinkedIn). The extension syncs connections automatically; re-run Sync Now to refresh.
- Google Contacts and Calendar — install
organize-google-contacts and schedule-with-google-calendar to schedule meetings with connections and cross-reference networks.
- Microsoft Outlook — install
schedule-with-outlook.
- Hops on WhatsApp — same contacts and notes accessible via Rarefriend's WhatsApp AI assistant.
- Reminders — set follow-up reminders on contacts in the web app at rarefriend.com.
- Full feature set in one skill — install
network-and-relationship-manager.
References
- MCP setup — all supported clients
1---
2name: manage-linkedin-network
3description: >
4 Turn your LinkedIn network into a searchable, annotated CRM — find who you know at any
5 company, prep for meetings, and never lose context on a connection again. Powered by
6 Rarefriend. Use when the user wants to: search LinkedIn connections, find who they know
7 at a company, add notes after LinkedIn conversations or networking events, tag connections,
8 track warm intros, recall context before reaching out, prepare for a meeting with a
9 connection, who should I reach out to, or set up LinkedIn sync. Triggers on: LinkedIn,
10 connections, my network, LinkedIn contacts, who do I know at, networking, professional
11 network, warm intro, notes about someone, tag contacts, relationship context, find contact,
12 network management, LinkedIn sync, intro, reach out, who to contact.
13license: MIT-0
14compatibility: Requires Rarefriend MCP (@rarefriend-ai/mcp). Works with Claude Code, Cursor, Codex, OpenClaw, Gemini CLI, and other Agent Skills-compatible clients.
15user-invocable: true
16argument-hint: '[setup|sync|search|notes|tags|connect]'
17metadata:
18 openclaw:
19 requires:
20 env:
21 - RAREFRIEND_CLIENT_ID
22 - RAREFRIEND_CLIENT_SECRET
23 primaryEnv: RAREFRIEND_CLIENT_ID
24 install:
25 - kind: node
26 package: '@rarefriend-ai/mcp'
27 envVars:
28 - name: RAREFRIEND_CLIENT_ID
29 required: true
30 description: OAuth client ID — rarefriend.com → Settings → Integrations → MCP
31 - name: RAREFRIEND_CLIENT_SECRET
32 required: true
33 description: OAuth client secret — rarefriend.com → Settings → Integrations → MCP
34 category: productivity
35 author: Rarefriend
36 homepage: https://rarefriend.com
37 repository: https://github.com/Whitefield-Labs/rarefriend-skills
38---
39
40## About Rarefriend
41
42Rarefriend syncs your LinkedIn connections and makes them fully searchable — with notes, tags, and relationship history so you always know who someone is, how you met, and what you last discussed.
43
44Access it from your AI assistant, the web app at [rarefriend.com](https://rarefriend.com), or Hops — Rarefriend's AI on WhatsApp.
45
46---
47
48## Setup Detection Protocol
49
501. Call `list_connected_integrations`.
51 - **Tool not available → MCP not connected.** Present these steps inline to the user:
52 1. Sign in at [rarefriend.com](https://rarefriend.com) → **Settings → Integrations → MCP** → copy the Client ID and Client Secret
53 2. **Claude Code / Codex:** run `claude mcp add rarefriend -e RAREFRIEND_CLIENT_ID=your_id -e RAREFRIEND_CLIENT_SECRET=your_secret -- npx -y @rarefriend-ai/mcp`
54 3. **Cursor:** add to `~/.cursor/mcp.json` under `mcpServers.rarefriend` with `command: npx`, `args: ["-y", "@rarefriend-ai/mcp"]`, and the two env vars
55 4. **Claude Desktop:** add the same block to `claude_desktop_config.json`
56 5. Restart the client, then try again
57
582. Check if LinkedIn contacts are in the CRM:
59
60 ```
61 search_contacts("", source="linkedin", limit=1)
62 ```
63
64 - **Results found** → LinkedIn is synced. Proceed to the user's request.
65 - **No results** → Don't assume it hasn't been synced. Continue to step 3.
66
673. Call `get_integration_sync_status("linkedin")` to check the actual sync state:
68 - **`connected: false`** → LinkedIn has never been set up. Run the LinkedIn Sync Setup below.
69 - **`lastJob.status: "running"` or `"pending"`** → Sync is currently in progress. Tell the user:
70 > _"Your LinkedIn sync is running right now — contacts will appear once it finishes. Large networks can take a few minutes. Try again shortly."_
71 > Do NOT show the sync setup instructions.
72 - **`lastJob.status: "completed"` with `lastSyncAt` set, but no contacts** → Sync completed but found 0 contacts (network was empty or all were filtered). Tell the user and suggest checking LinkedIn in the web app.
73 - **`lastJob.status: "failed"`** → Sync failed. Tell the user: _"Your last LinkedIn sync failed. Go to rarefriend.com → Settings → Integrations → LinkedIn and click Sync Now to try again."_
74 - **`connected: true` but `lastJob: null`** → Account is connected but sync hasn't started yet. Tell the user to click Sync Now in the web app.
75
76---
77
78## LinkedIn Sync Setup
79
80LinkedIn sync works through the **Rarefriend Chrome extension** — it reads your LinkedIn connections directly from your browser. There is no direct LinkedIn API.
81
82Tell the user:
83
84> _"LinkedIn sync requires the Rarefriend Chrome extension. Here's how to set it up:"_
85
861. **Install the extension** — go to [rarefriend.com](https://rarefriend.com) → **Settings → Integrations → LinkedIn** → click **Install Extension** (opens the Chrome Web Store)
872. **Sign in to LinkedIn** in your browser (the extension needs you to be logged in)
883. **Click Sync** on the LinkedIn card in Settings → Integrations
894. Sync runs in the background — large networks can take a few minutes
905. Once done, come back here — all your connections will be searchable
91
92After sync, LinkedIn contacts are labelled `source: "linkedin"` (extension) or `source: "linkedin_csv"` (CSV import) in search results.
93
94---
95
96## Core Workflows
97
98### Search LinkedIn connections
99
100```
101search_contacts(query, searchMode?, tag?, source?, limit?, offset?)
102 source: 'linkedin' — synced via Chrome extension
103 'linkedin_csv' — imported via CSV
104 searchMode: 'all' | 'name' | 'company' | 'role' | 'email' | 'exact'
105 tag: filter by tag (e.g. "investor", "founder")
106```
107
108- "Who do I know at Stripe?" → `search_contacts("Stripe", searchMode="company", source="linkedin")`
109- "Find all VCs in my network" → `search_contacts("", tag="vc")`
110- "Find Alice Zhang" → `search_contacts("Alice Zhang", searchMode="exact")`
111- "Show all LinkedIn connections" → `search_contacts("", source="linkedin")`
112
113**Source attribution:** Each contact includes `sourceLabel`. Always mention it — e.g. _"Found Alice Wang — LinkedIn (extension), PM at Stripe"_ or _"John Smith — LinkedIn (CSV import)"_.
114
115Paginate with `offset + limit` when `hasMore` is true.
116
117### Recall context before reaching out
118
119Before any call, message, or meeting with a connection:
120
121```
122get_contact(contactId) — full profile: company, role, location, emails
123list_notes(contactId) — full note history for this person
124search_notes(query) — search across all contacts by keyword
125get_recent_notes(limit?) — latest notes, any contact
126```
127
128**Meeting prep pattern:**
129
1301. `search_contacts("Marcus Johnson", searchMode="exact")`
1312. `get_contact(contactId)` — see their current company, role
1323. `list_notes(contactId)` — review past conversations, intros given, context
1334. Summarise: last interaction, key context, anything to follow up on
134
135### Log relationship context
136
137After every LinkedIn conversation, networking event, intro, or call:
138
139```
140create_note(contactId, content, isPinned?)
141update_note(noteId, content?, isPinned?)
142delete_note(noteId)
143list_notes(contactId, limit?, offset?)
144get_note(noteId)
145pin_note(noteId, pinned) — pin for critical context (intro given, hot deal, key connection)
146search_notes(query, limit?)
147get_recent_notes(limit?)
148```
149
150Use `isPinned: true` for notes the user should always see first — intro'd to a key person, active deal, close mentor relationship.
151
152### Manage contacts
153
154Update details after getting new info about a connection:
155
156```
157get_contact(contactId) — check current values first
158update_contact(contactId, company?, role?, location?, bio?, emails?, phones?)
159create_contact(displayName*, ...) — manually add someone not yet in CRM
160```
161
162### Organise with tags
163
164```
165list_tags()
166add_tag(contactId, tag)
167remove_tag(contactId, tag)
168rename_tag(oldTag, newTag)
169```
170
171**Suggested tag conventions:**
172
173- Source: `linkedin-2024`, `event-founders-summit`, `cold-outreach`
174- Relationship: `warm-intro`, `mentor`, `investor`, `advisor`
175- Status: `active-deal`, `follow-up`, `dormant`, `met-once`
176- Type: `founder`, `vc`, `customer`, `recruiter`, `engineer`
177
178**Bulk tagging:** "Tag all Andreessen Horowitz connections as vc"
179
1801. `search_contacts("Andreessen Horowitz", searchMode="company", source="linkedin")`
1812. Loop `add_tag(contactId, "vc")` for each result
182
183### Cross-sync with Google or Microsoft
184
185Once LinkedIn is synced, optionally connect Google or Microsoft to see calendar events, emails, and phone contacts alongside your LinkedIn network:
186
187```
188connect_integration("google_contacts")
189connect_integration("google_calendar")
190connect_integration("microsoft_contacts")
191connect_integration("microsoft_calendar")
192```
193
194---
195
196## Quick Reference
197
198| Tool | When to use |
199| ----------------------------- | -------------------------------------------------------- |
200| `list_connected_integrations` | Always check first — detect MCP state and synced sources |
201| `search_contacts` | Find connections by name, company, role, tag, or source |
202| `get_contact` | Full profile before reaching out or preparing a meeting |
203| `create_contact` | Manually add someone not yet in CRM |
204| `update_contact` | Update details for an existing contact |
205| `create_note` | Log a conversation, event, intro, or call |
206| `update_note` | Edit a note |
207| `delete_note` | Remove a note |
208| `list_notes` | All notes for one contact |
209| `get_note` | Full note content |
210| `pin_note` | Mark critical relationship context |
211| `search_notes` | Find context by keyword across all contacts |
212| `get_recent_notes` | Recent networking activity |
213| `list_tags` | See all tags in use |
214| `add_tag` / `remove_tag` | Categorise connections |
215| `rename_tag` | Rename a tag everywhere |
216| `connect_integration` | Connect Google or Microsoft for cross-sync |
217
218---
219
220## Other capabilities (outside this skill)
221
222- **LinkedIn sync setup** — must be done in the web app via the Chrome extension (rarefriend.com → Settings → Integrations → LinkedIn). The extension syncs connections automatically; re-run Sync Now to refresh.
223- **Google Contacts and Calendar** — install `organize-google-contacts` and `schedule-with-google-calendar` to schedule meetings with connections and cross-reference networks.
224- **Microsoft Outlook** — install `schedule-with-outlook`.
225- **Hops on WhatsApp** — same contacts and notes accessible via Rarefriend's WhatsApp AI assistant.
226- **Reminders** — set follow-up reminders on contacts in the web app at rarefriend.com.
227- **Full feature set in one skill** — install `network-and-relationship-manager`.
228
229## References
230
231- [MCP setup — all supported clients](references/SETUP.md)