> ## Documentation Index
> Fetch the complete documentation index at: https://docs.groovin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Tools Reference

> Reference of all Groovin MCP tools, grouped by what they do, with their parameters and example prompts.

A quick reference of every tool exposed by the Groovin MCP server, grouped by what they do. Use the example prompts as a starting point when chatting with your AI assistant.

A typical workflow chains several tools: use a **discovery** tool to find people (attendees, relations, invitations), run `lookup_crm_contacts` to see who's already in your CRM, then `create_crm_contacts` for the rest. From there you can reply, invite, enrich or sync without leaving the conversation.

## Read your LinkedIn inbox and network

| Name | Description | Parameters | Example prompt |
| - | - | - | - |
| `list_linkedin_conversation_attendees` | List everyone you have a LinkedIn conversation with, deduplicated, most recent conversation first, with profile info and a flag showing whether they're already in your CRM. Each person comes with their last-message time, unread count, conversation ID, and whether the thread is a regular message, an InMail or a sponsored message. | **Limit** – return only your N most recent conversations. **Only unread / only read** – filter to people with (or without) unread messages. **Include conversation details** – on by default; turn off for a lighter list (the order is then unspecified). | Show me my 10 most recent LinkedIn conversations with unread messages, and tell me who isn't in my CRM yet. |
| `get_linkedin_chat_messages` | Read the messages of one specific LinkedIn chat, newest first. Supports pagination for long histories. | **Conversation**\*(required)\* – the chat to open (ID from `list_linkedin_conversation_attendees`). **Page size** – how many messages to return (1–250, default 100). **Next page** – cursor to load older messages. | Read my latest DMs with Sarah Chen and summarize what she asked for. |
| `get_linkedin_profile` | Fetch one LinkedIn profile live (name, headline, summary, current role and company, location, education, contact details when visible). Each call counts as a profile view on your account: use it for the few people you really need, and stay around 100 per day. | **Person**\*(required)\* – a LinkedIn URL, slug, profile ID, or Sales Navigator ID. | Pull the profile for linkedin.com/in/sarah-jones and tell me if she matches our ICP. |
| `list_linkedin_relations` | List your 1st-degree LinkedIn connections, newest first, each with the connection date and a flag showing whether they're already in your CRM. Useful for surfacing fresh connections that need CRM tracking. | **Connected after / Connected before** – filter by connection date (e.g. `2026-06-01`). **Name filter** – search by name. **Limit** – cap the number of results. Always set a date or a limit unless you really need your whole network. | Show me new LinkedIn connections from the last 30 days who aren't in my CRM yet. |
| `list_linkedin_pending_invitations` | List pending LinkedIn connection requests: sent, received, or both. Each item shows who, the invitation note, when it was sent, and whether the person is already in your CRM. | **Direction** – `sent` (default), `received`, or `all`. **Sent after / Sent before** – filter by date. **Limit** – cap results. | List all connection requests I sent in the last 2 weeks that are still pending. |

## Act on LinkedIn

These tools do something real on your LinkedIn account. Your assistant shows you the draft and the recipient first, and only acts once you approve.

| Name | Description | Parameters | Example prompt |
| - | - | - | - |
| `send_linkedin_message` | Send a LinkedIn message from your account to one person, in an existing conversation or a new one. If the person is paired with a CRM contact, the message is recorded in your CRM automatically. | **Text**\*(required)\* – the message, exactly as you approved it. **Recipient** – a conversation (preferred), a LinkedIn profile, or a CRM contact. | Draft a reply to Sarah Chen's last message, show it to me, and send it once I approve. |
| `send_linkedin_invitation` | Send a LinkedIn connection request from your account to one person, with or without a note. If the person is paired with a CRM contact, the invitation is recorded in your CRM automatically. | **Recipient**\*(required)\* – a LinkedIn profile or a CRM contact. **Note** – optional, 300 characters max. **Recipient email** – only when LinkedIn asks for it. | Invite Sarah Jones to connect with a short note mentioning our chat at SaaStr. Show me the note first. |
| `set_linkedin_chat_read_status` | Mark one LinkedIn chat as read or unread. Marking as read removes it from your unread list and, if read receipts are on, shows the other person you've seen their message. LinkedIn may refuse marking as unread. | **Conversation**\*(required)\* – the chat to change. **Read**\*(required)\* – `true` for read, `false` for unread. | Mark my conversation with Sarah Chen as read. |

> [!WARNING]
>
> One message or one invitation per request, to one person, from your own account only. These tools are designed to operate at human speed and can't go above LinkedIn's limits (roughly 100 messages a day and 100 invitations a week).

## CRM contacts and sync

| Name | Description | Parameters | Example prompt |
| - | - | - | - |
| `lookup_crm_contacts` | Check whether a batch of LinkedIn people already exist as CRM contacts. Always run this **before** `create_crm_contacts` to avoid duplicates. Handles up to 10,000 profiles per call; batches of around 500 work best in a chat. | **Profiles**\*(required)\* – the LinkedIn people to check. | For these 50 new connections, tell me which ones are already in my CRM. |
| `create_crm_contacts` | Create CRM contacts for a batch of LinkedIn profiles, up to 25 per call, along with their company when it's missing. Existing contacts are paired, not duplicated. Groovin also looks for a verified professional email for each new contact (uses credits). Optionally turns on LinkedIn message sync at the same time. A full batch can take several minutes. | **Profiles**\*(required)\* – the LinkedIn people to create (max 25). **Sync messages** – on, off, or follow your organization's default. | Add these 10 warm connections to my Attio CRM and turn on message sync. |
| `list_synced_crm_contacts` | List all CRM contacts whose LinkedIn conversation is being synced by Groovin, each with a link to the CRM record. Fast by default; optionally fetches richer profile fields from your CRM. | **Include CRM details** – off by default; turn on to fetch name, job title, email, etc. from the CRM (slower). **Limit** – cap results (most recently synced first). | Show me all contacts currently syncing to HubSpot, with their job title and email. |
| `toggle_linkedin_sync` | Turn LinkedIn message sync ON or OFF for a batch of CRM contacts. Turning **ON** records the current invitation or connection status in the CRM and imports the existing conversation history (max 25 per call, can take a minute or more). Contacts created directly in your CRM are paired automatically from the LinkedIn URL on their record. Turning **OFF** deletes the imported conversation notes from the CRM. | **CRM contact IDs**\*(required)\* – contacts to toggle (max 25 ON, 200 OFF). **Enabled**\*(required)\* – `true` to enable sync, `false` to disable. **LinkedIn profile URLs** – optional, for contacts that have no LinkedIn URL in the CRM yet. | Turn on LinkedIn sync for these 20 CRM contacts I just created. |

## Enrich your CRM

These tools fill in missing data on records that are already in your CRM. They only write when the match is certain, never overwrite an existing value, and never guess: getting "not found" or "ambiguous" for some records is normal.

| Name | Description | Parameters | Example prompt |
| - | - | - | - |
| `find_linkedin_profile_url` | Find the missing LinkedIn profile URL of CRM contacts and save it on each contact. Once a URL is found, `toggle_linkedin_sync` can pair and sync the contact. Minimal info required: full name + company name or domain. Ideal: work email, location and job title. | **CRM contact IDs**\*(required)\* – contacts with no LinkedIn URL yet (max 25). | Find the LinkedIn profiles of these 8 Attio contacts that don't have a LinkedIn URL, then turn on message sync for the ones you find. |
| `find_company_domains` | Find the missing website domain of companies and save it on the CRM company record. Much more reliable when you also give the name (and ideally the LinkedIn URL) of someone who currently works there. You can also pass a plain company name to test a lookup without writing anything. | **Companies**\*(required)\* – up to 25, each as a CRM company ID or a company name. **Contact at the company** – optional first name, last name, LinkedIn URL or work email. **Country** – optional. | These 15 companies in my CRM have no domain. Find it, using the contacts linked to each company to be sure it's the right one. |

> [!NOTE]
>
> Enrichment uses Groovin credits: finding a LinkedIn URL, finding a company domain, and finding an email on a new contact. If your credits run out mid-batch, the records already processed are kept and your assistant tells you which ones are left.

## Import your LinkedIn connections

Import your full LinkedIn connections export (`Connections.csv`, the file LinkedIn sends when you request your data) into your CRM as contacts and companies. The import reads the file only, so it doesn't count against any LinkedIn limit.

| Name | Description | Parameters | Example prompt |
| - | - | - | - |
| `start_linkedin_connections_import` | Start an import. A new file is always **previewed first**: the preview writes nothing to your CRM and reports how many contacts and companies would be created. Once you agree with the numbers, the same tool runs the import for real. Files up to 10 MB or 30,000 connections. | **File** – the content of `Connections.csv`. **Preview** – on by default. **Previous import** – the preview to run for real. **Add to default lists** – on by default. **On behalf of** – admins only, to import a teammate's export. | Here is my LinkedIn Connections.csv. Preview the import into HubSpot and tell me what it would create. |
| `get_linkedin_connections_import` | Check the progress and results of an import: contacts found and created, companies created, rows skipped, and the rows that need your attention (possible duplicates and errors). Also picks up an import you started from the Groovin extension. | **Import** – which import to check (defaults to your latest). **Rows** – `none` (counts only), `needs_attention`, `created`, `skipped`, or `all`. | How is my LinkedIn connections import going? Show me the rows that need my attention. |
| `cancel_linkedin_connections_import` | Stop an import that is still running. Contacts and companies already created stay in the CRM, and running the import again later won't duplicate them. | **Import**\*(required)\* – the import to stop. | Stop my LinkedIn connections import. |

How an import goes:

1. **Preview.** Share the file with your assistant, or upload it in the Groovin extension settings if your AI tool can't read files, and ask for a preview.
2. **Review.** Check the counts. When someone with the same name already exists in your CRM and Groovin can't confirm it's the same person, nothing is created for that row: it's listed as a possible duplicate for you to settle.
3. **Run.** Confirm, and the import runs in the background. Count roughly 25 minutes per 2,400 connections. You get an email when it's done.
4. **Wrap up.** Ask for the rows that need attention, or download the full result file from the Groovin extension settings. Import data is kept for 72 hours.

Everyone in the file is recorded in your CRM as a LinkedIn connection of the person who exported it. Workspace admins can import a teammate's export on their behalf, so the connections are attributed to the right person.

## Limits and pacing

| Tools | Limit | What to keep in mind |
| - | - | - |
| `list_linkedin_conversation_attendees`, `get_linkedin_chat_messages`, `list_synced_crm_contacts`, `lookup_crm_contacts` | None | Use them as often as you need. |
| `get_linkedin_profile`, `list_linkedin_relations`, `list_linkedin_pending_invitations` | Live LinkedIn reads | Around 100 profile views a day. Read your connections and pending invitations a few times a day at most, not on a fixed schedule. |
| `create_crm_contacts`, `toggle_linkedin_sync`, `find_linkedin_profile_url` | Live LinkedIn reads behind the scenes | Slow on purpose. Keep batches small and leave a few minutes between them. |
| `send_linkedin_message`, `send_linkedin_invitation`, `set_linkedin_chat_read_status` | Strictest | One at a time, after your approval. Never in loops or sequences. |

> [!NOTE]
>
> Groovin passes LinkedIn and CRM data through directly to your AI assistant and does not store personal data on its own servers, keeping the workflow GDPR-compliant.

> [!WARNING]
>
> The CRM-related tools are optimized for **Attio** and **HubSpot**. `lookup_crm_contacts` and `create_crm_contacts` don't work reliably with **Affinity** yet due to API limitations, and the LinkedIn connections import is not available for Affinity. For Affinity, we recommend using [Affinity's own MCP](https://support.affinity.co/) to search for or add contacts.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.