--- name: organize-google-contacts description: > Your Google Contacts — supercharged with notes, tags, and relationship memory via Rarefriend. Find anyone instantly, remember every conversation, and never lose context on a person again. Use when the user wants to: search people they know, find someone's email or phone, create or update a contact, add meeting notes or call summaries, tag contacts, bulk import a list of people, connect Google Contacts, or check what they know about someone. Triggers on: contact, contacts, Google Contacts, who do I know, find someone, person, people, notes about, meeting notes, tag, import contacts, network, what do I know about, who is, remember this about, add a note. license: MIT-0 compatibility: Requires Rarefriend MCP (@rarefriend-ai/mcp). Works with Claude Code, Cursor, Codex, OpenClaw, Gemini CLI, and other Agent Skills-compatible clients. user-invocable: true argument-hint: '[setup|search|create|notes|tags|import|connect]' metadata: openclaw: requires: env: - RAREFRIEND_CLIENT_ID - RAREFRIEND_CLIENT_SECRET primaryEnv: RAREFRIEND_CLIENT_ID install: - kind: node package: '@rarefriend-ai/mcp' envVars: - name: RAREFRIEND_CLIENT_ID required: true description: OAuth client ID — rarefriend.com → Settings → Integrations → MCP - name: RAREFRIEND_CLIENT_SECRET required: true description: OAuth client secret — rarefriend.com → Settings → Integrations → MCP category: productivity author: Rarefriend homepage: https://rarefriend.com repository: https://github.com/Whitefield-Labs/rarefriend-skills --- ## About Rarefriend Rarefriend layers notes, tags, and relationship history on top of your Google Contacts — so every person you know comes with full context, not just a name and email. Access it from your AI assistant, the web app at [rarefriend.com](https://rarefriend.com), or Hops — Rarefriend's AI on WhatsApp. --- ## Setup Detection Protocol 1. Call `list_connected_integrations`. - **Tool not available → MCP 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 - Empty list → connected, no Google sync yet. Proceed; offer `connect_integration("google_contacts")` at the end. - `google_contacts` present → proceed directly. --- ## Core Workflows ### Search 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' | 'manual' | 'mcp' | 'linkedin_csv' | ... ``` - "Who do I know at Stripe?" → `search_contacts("Stripe", searchMode="company")` - "Show all my Google contacts" → `search_contacts("", source="google_contacts")` - "Find all investors" → `search_contacts("", tag="investor")` - Use `searchMode: 'exact'` for known email or full name. - Pass `offset + limit` from the previous response when `hasMore` is true. **Source attribution:** Each contact in the response includes `source` and `sourceLabel` (e.g. "Google Contacts", "LinkedIn (extension)", "Added manually"). Always mention this when presenting results — e.g. _"Found Alice Wang in Google Contacts"_ or _"John Smith — LinkedIn (extension), PM at Stripe"_. ``` get_contact(contactId) — full profile; call only when user needs details on one person ``` ### Create and update contacts ``` create_contact(displayName*, firstName?, lastName?, emails?, phones?, company?, role?, location?, bio?) update_contact(contactId, ...same optional fields...) ``` Always call `get_contact` before `update_contact` so the user can confirm current values. ### Notes Notes are the core of relationship memory. Create one after every meeting, call, or interaction. ``` 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, any contact ``` - `search_notes` → "what did I discuss with..." / "what do I know about..." / meeting prep - `get_recent_notes` → "what have I been up to" / relationship activity summary - `pin_note` → mark critical context (intro given, hot deal, key meeting) ### Tags ``` list_tags() add_tag(contactId, tag) — lowercase kebab-case remove_tag(contactId, tag) rename_tag(oldTag, newTag) — renames across all contacts ``` **Bulk tagging:** "tag everyone at Sequoia as investor" 1. `search_contacts("Sequoia", searchMode="company")` 2. Loop `add_tag(contactId, "investor")` for each result ### Bulk import ``` bulk_create_contacts(contacts[]) Each: { displayName*, firstName?, lastName?, emails?, phones?, company?, role?, location?, bio? } Max 50 per call — split larger lists and call sequentially. ``` If the response includes `quota_exceeded`, direct the user to rarefriend.com to upgrade. ### Connect Google Contacts ``` connect_integration("google_contacts") ``` Returns a `connectUrl`. Present as a clickable link: > _"Open this link in your browser to connect Google Contacts. It expires in 15 minutes."_ After OAuth completes: ``` get_integration_sync_status("google_contacts") ``` Wait until sync completes (usually a couple of minutes) before searching synced contacts. --- ## Quick Reference | Tool | When to use | | ----------------------------- | ------------------------------------------------------ | | `list_connected_integrations` | Always check first — detects MCP and integration state | | `search_contacts` | Find by name, company, email, role, tag, or source | | `get_contact` | Full profile for one person | | `create_contact` | Add a new person | | `update_contact` | Edit an existing contact | | `delete_contact` | Remove a contact | | `bulk_create_contacts` | Import a list of people | | `create_note` | Log a meeting, call, or interaction | | `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 as critical context | | `search_notes` | Find notes by keyword across all contacts | | `get_recent_notes` | Latest activity across the network | | `list_tags` | See all tags in use | | `add_tag` / `remove_tag` | Categorise contacts | | `rename_tag` | Rename a tag everywhere | | `connect_integration` | Connect Google Contacts | | `get_integration_sync_status` | Check when sync completes | --- ## References - [MCP setup — all supported clients](references/SETUP.md) ## Other capabilities (outside this skill) - **Google Calendar** — schedule meetings, find free time, create events. Install `schedule-with-google-calendar`. - **Microsoft Outlook** — Outlook contacts and calendar. Install `schedule-with-outlook`. - **LinkedIn sync** — requires the Rarefriend Chrome extension. Direct user to rarefriend.com → Settings → Integrations → LinkedIn. Once synced, LinkedIn contacts appear here with `source="linkedin"`. - **Hops on WhatsApp** — same contacts and notes accessible via Rarefriend's WhatsApp AI assistant. - **Reminders and phone contacts** — available in the web app at rarefriend.com. - **Full feature set in one skill** — install `network-and-relationship-manager`.