network-and-relationship-manager
Never forget a person again — search your entire professional network, recall exactly what you discussed, and always know who you know at any company. Powered by Rarefriend personal CRM. Use when the user wants to: search contacts, find who they know at a company, add meeting notes or call summaries, tag and organise contacts, schedule or check calendar events, import LinkedIn connections, bulk import contacts, connect Google Contacts or Microsoft Outlook, track relationship context, log an interaction, or do anything related to contacts, networking, or relationship management. Triggers on: contact, contacts, CRM, notes, my network, schedule, calendar, LinkedIn, Google Contacts, Outlook, bulk import, who do I know, who do I know at, relationship, networking, person, people, meeting notes, who should I reach out to, warm intro, remind me about, what do I know about.
What this skill does
## About Rarefriend
Rarefriend remembers your professional network so you don't have to — contacts from Google, LinkedIn, Microsoft, and your phone in one place, with notes, tags, and full relationship history always at your fingertips.
Access it from your AI assistant, the web app at [rarefriend.com](https://rarefriend.com), or Hops — Rarefriend's AI on WhatsApp.
**LinkedIn sync** requires the Rarefriend Chrome extension — set it up at rarefriend.com → Settings → Integrations → LinkedIn.
---
## Setup Detection Protocol
**ALWAYS run this before any CRM action.**
1. Call `list_connected_integrations` with no arguments.
- **If the tool is not available → MCP is not connected.** Present these steps inline to the user:
1. Sign in at [rarefriend.com](https://rarefriend.com) → **Settings → Integrations → MCP** → copy the Client ID and Client Secret
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`
3. **Cursor:** add to `~/.cursor/mcp.json` under `mcpServers.rarefriend` with `command: npx`, `args: ["-y", "@rarefriend-ai/mcp"]`, and the two env vars
4. **Claude Desktop:** add the same block to `claude_desktop_config.json`
5. Restart the client, then try again
- If it returns an empty list → MCP is connected but no integrations synced. Proceed and offer to connect Google or Microsoft when relevant.
- If integrations are present → proceed directly to the user's request.
2. Never assume whether an integration is connected — always call the tool to check.
---
## Core Workflows
### 1 — Search and retrieve contacts
```
search_contacts(query, searchMode?, tag?, source?, limit?, offset?)
searchMode: 'all' | 'name' | 'company' | 'role' | 'email' | 'exact'
tag: filter to contacts with this exact tag (e.g. "investor")
source: filter by origin — 'google_contacts' | 'microsoft_contacts' |
'linkedin' | 'linkedin_csv' | 'manual' | 'mcp' | 'gmail' |
'google_calendar' | 'microsoft_calendar' | 'microsoft_email' | 'phone_contacts'
Use offset + limit for pagination when hasMore=true in the response.
get_contact(contactId)
Returns full profile — emails, phones, notes count, tags.
```
**Pattern:** Always search first. Only call `get_contact` for a specific person the user asks about — do not fetch every result from a list.
**Source attribution:** Each contact in the response includes a `sourceLabel` field (e.g. "Google Contacts", "LinkedIn (extension)", "Added manually"). Always mention this when presenting a contact — e.g. _"Found Alice Wang in Google Contacts"_ or _"Sarthak Sharma — LinkedIn (extension), Product Manager at Acme"_.
### 2 — Create and update contacts
```
create_contact(displayName, firstName?, lastName?, emails?, phones?,
company?, role?, location?, bio?)
update_contact(contactId, ...same optional fields...)
```
**Pattern:** For updates, call `get_contact` first so the user sees the current state, then apply the change.
### 3 — Notes
```
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)
search_notes(query, limit?) — full-text across all contacts
get_recent_notes(limit?) — most recent notes, all contacts
```
**Pattern:** After any meeting or call, create a note immediately. Use `search_notes` when the user asks "what did I last discuss with…" or "what do I know about…". Pin notes for critical context.
### 4 — Tags
```
list_tags()
add_tag(contactId, tag)
remove_tag(contactId, tag)
rename_tag(oldTag, newTag) — renames across all contacts
```
**Pattern:** Normalise tags to lowercase kebab-case. When bulk-tagging ("tag everyone at Sequoia"), search contacts first then loop `add_tag`.
### 5 — Google Calendar
```
create_google_calendar_event(title, startTime, endTime, description?,
attendees?, location?, transparency?)
transparency: 'opaque' (busy) | 'transparent' (free)
search_google_calendar_events(query, timeMin?, timeMax?)
get_upcoming_google_events(limit?, days?)
reschedule_google_event(eventId, startTime, endTime)
cancel_google_event(eventId)
find_available_google_time(durationMinutes, preferredDays?,
preferredTimeRange?, attendeeEmails?)
```
**Pattern:** Pass times in ISO 8601 with timezone. Use `find_available_google_time` before scheduling. Use `search_contacts` to resolve attendee emails by name before creating events.
### 6 — Microsoft Outlook
```
search_microsoft_contacts(query, limit?)
get_microsoft_contact(contactId)
create_microsoft_calendar_event(title, startTime, endTime, description?,
attendees?, location?)
search_microsoft_calendar_events(query, timeMin?, timeMax?)
get_upcoming_microsoft_events(limit?, days?)
reschedule_microsoft_event(eventId, startTime, endTime)
cancel_microsoft_event(eventId)
find_available_microsoft_time(durationMinutes, preferredDays?,
preferredTimeRange?, attendeeEmails?)
```
Microsoft contacts are readable from Outlook — edits go through `update_contact` in Rarefriend.
### 7 — Bulk import
```
bulk_create_contacts(contacts[])
Each: { displayName*, firstName?, lastName?, emails?, phones?,
company?, role?, location?, bio? }
Max 50 contacts per call.
```
**Pattern:** Parse any list the user provides (text, CSV, spreadsheet rows) into the contacts array. If the batch exceeds 50, split and make sequential calls. If the response contains `quota_exceeded`, inform the user their plan limit has been reached and direct them to rarefriend.com to upgrade.
### 8 — Integration management
```
list_connected_integrations()
connect_integration(integration)
integration: 'gmail' | 'google_calendar' | 'google_contacts'
| 'microsoft_calendar' | 'microsoft_contacts' | 'microsoft_email'
get_integration_sync_status(integration)
```
**Pattern for connecting:** Call `connect_integration`, present the `connectUrl` as a clickable link, say: _"Open this link in your browser to connect [integration]. It expires in 15 minutes."_ Never ask the user to paste credentials.
**Pattern after connecting:** Call `get_integration_sync_status` to confirm when sync completes (typically a couple of minutes after connecting).
---
## Quick Reference
| Category | Tool | Key params |
| ------------ | --------------------------------- | ------------------------------------------------ |
| Contacts | `search_contacts` | `query`, `searchMode`, `tags`, `limit`, `offset` |
| | `get_contact` | `contactId` |
| | `create_contact` | `displayName` (required), others optional |
| | `update_contact` | `contactId` + fields to change |
| | `delete_contact` | `contactId` |
| Notes | `create_note` | `contactId`, `content` |
| | `search_notes` | `query` |
| | `get_recent_notes` | `limit` |
| | `pin_note` | `noteId`, `pinned` |
| Tags | `add_tag` | `contactId`, `tag` |
| | `rename_tag` | `oldTag`, `newTag` |
| Google Cal | `find_available_google_time` | `durationMinutes` |
| | `create_google_calendar_event` Related in Productivity
gitea-workflow
IncludedOrchestrate agile development workflows for Gitea repositories using the tea CLI. Use when working with Gitea-hosted repos and asking to 'run the workflow', 'continue working', 'what's next', 'complete the task cycle', 'start my day', 'end the sprint', 'implement the next task', or wanting guided step-by-step development assistance. Keywords: workflow, orchestrate, agile, task cycle, sprint, daily, implement, review, PR, standup, retrospective, gitea, tea.
microsoft-graph-gateway
IncludedRoute Microsoft Graph work in this workspace. Use when users want to read or write Outlook mail, calendar events, contacts, OneDrive or SharePoint files, Teams, Planner, To Do, users, groups, directory data, or arbitrary Microsoft Graph endpoints from VS Code. Prefer WorkIQ for common read scenarios. Use Microsoft Graph for write actions and gap-read scenarios that need exact Graph properties, filters, permissions, or endpoints.
copilotkit
IncludedUse when building with CopilotKit — setup, development, integrations, debugging, upgrading, or contributing. Routes to the appropriate specialized skill based on the task.
wordly-wisdom
IncludedProvides calibrated decision analysis using Charlie Munger-style multiple mental models, inversion, incentive mapping, circle-of-competence checks, misjudgment audits, second-order effects, and forecast updates. Use when the user asks for an oracle take, a hard call, a decision memo, a premortem, an outside view, a red-team, a sanity-check, what am I missing, think this through, or wants a strategy, hire, investment, plan, product, partnership, or major life choice analysed. Avoid for simple factual lookups or time-sensitive legal, medical, or market questions without fresh evidence.
swain-session
IncludedSession management and project status dashboard. Owns the full session lifecycle (start/work/close/resume), focus lane, bookmarks, worktree detection, and tab naming. Also serves as the project status dashboard — shows active epics, progress, actionable next steps, blocked items, tasks, GitHub issues, and recommendations. Worktree creation is deferred to swain-do task dispatch (SPEC-195). Triggers on: 'session', 'status', 'what's next', 'dashboard', 'overview', 'where are we', 'what should I work on', 'show me priorities', 'bookmark', 'focus on', 'session info'.
gandi
IncludedComprehensive Gandi domain registrar integration for domain and DNS management. Register and manage domains, create/update/delete DNS records (A, AAAA, CNAME, MX, TXT, SRV, and more), configure email forwarding and aliases, check SSL certificate status, create DNS snapshots for safe rollback, bulk update zone files, and monitor domain expiration. Supports multi-domain management, zone file import/export, and automated DNS backups. Includes both read-only and destructive operations with safety controls.