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

# CRM and follow-up

> Connected CRMs, and the manual follow-up that happens around a conversation. Event delivery uses automations, not webhooks.

<Info>Requires the **Tasks** permission. Tools in this group are hidden from `tools/list` and refused on call when your plan does not grant it.</Info>

| Tool | Kind |
| - | - |
| [`appointment_get`](#appointment_get) | Read-only |
| [`appointment_list`](#appointment_list) | Read-only |
| [`reminder_create`](#reminder_create) | Write |
| [`reminder_delete`](#reminder_delete) | Write, Destructive |
| [`reminder_list`](#reminder_list) | Read-only |
| [`task_list`](#task_list) | Read-only |
| [`task_upsert`](#task_upsert) | Write |

## appointment\_get

<Badge color="blue">Read-only</Badge>

Full detail for one booked meeting: time, timezone, status, and the lead and conversation it came out of. Read-only, like `appointment_list` — rescheduling and cancelling happen in the web app.

### Parameters

<ParamField path="appointmentId" type="string" required>
  Appointment id, from `appointment_list`.
</ParamField>

## appointment\_list

<Badge color="blue">Read-only</Badge>

Meetings booked out of conversations, or created in the web app. Read-only here by design: appointments are never inserted or edited by hand over this server, so there is no tool to create, change or cancel one. For the thread a meeting came out of use `conversation_get`.

### Parameters

<ParamField path="leadId" type="string">
  Lead id, from `lead_list`.
</ParamField>

<ParamField path="conversationId" type="string">
  Conversation id, from `conversation_list`.
</ParamField>

<ParamField path="status" type="CONFIRMED | CANCELLED | RESCHEDULED | NO_SHOW | COMPLETED">
  Filter by status.
</ParamField>

<ParamField path="page" type="integer (min 1)" default="1">
  1-indexed page number.
</ParamField>

## reminder\_create

<Badge color="orange">Write</Badge>

Set a follow-up reminder on a lead or conversation. You are notified at `remindAt` — you, not the prospect; nothing is sent to them. It does not schedule a campaign step or delay one. To make a lead wait, use `lead_update` with `paused`. Cancel with `reminder_delete`.

### Parameters

<ParamField path="title" type="string" required>
  Short label.
</ParamField>

<ParamField path="remindAt" type="string | number" required>
  When to fire, epoch milliseconds or ISO 8601.
</ParamField>

<ParamField path="description" type="string">
  Longer explanatory text.
</ParamField>

<ParamField path="leadId" type="string">
  Lead id, from `lead_list`.
</ParamField>

<ParamField path="conversationId" type="string">
  Conversation id, from `conversation_list`.
</ParamField>

<ParamField path="linkedAccountId" type="string">
  LinkedIn account id, from `linkedin_account_list`.
</ParamField>

## reminder\_delete

<Badge color="orange">Write</Badge> <Badge color="red">Destructive</Badge>

<Warning>Marked destructive in the protocol — your MCP client asks for confirmation before running it.</Warning>

Cancel a reminder so it never fires. Does not affect the lead, the conversation, or any scheduled campaign step — only your own nudge goes away. One of the few deletions available here, and it destroys nothing a prospect sees. To close a to-do instead use `task_upsert` with `isCompleted`.

### Parameters

<ParamField path="reminderId" type="string" required>
  Reminder id, from `reminder_list`.
</ParamField>

## reminder\_list

<Badge color="blue">Read-only</Badge>

Follow-up reminders set on a conversation or a lead. Private nudges for your team at a point in time. They send nothing to the prospect and are unrelated to the campaign schedule, which is `campaign_update`.

### Parameters

<ParamField path="conversationId" type="string">
  Conversation id, from `conversation_list`.
</ParamField>

<ParamField path="leadId" type="string">
  Lead id, from `lead_list`.
</ParamField>

## task\_list

<Badge color="blue">Read-only</Badge>

Manual to-dos for your team, either across your whole account or for one lead. TASK steps in a campaign flow create these automatically. Work for a human, not sending steps: a pending campaign action is `activity_list` or `lead_flow_state`, and a dated nudge is `reminder_list`. Completing a task sends nothing.

### Parameters

<ParamField path="leadId" type="string">
  Only tasks attached to this lead.
</ParamField>

<ParamField path="linkedAccountId" type="string">
  LinkedIn account id, from `linkedin_account_list`.
</ParamField>

<ParamField path="emailAccountId" type="string">
  Mailbox id, from `email_account_list`.
</ParamField>

<ParamField path="page" type="integer (min 1)" default="1">
  1-indexed page number.
</ParamField>

## task\_upsert

<Badge color="orange">Write</Badge>

Create a to-do, or update one by passing `taskId`. Set `isCompleted: true` to close it. An internal note-to-self with an owner; nothing is sent to the prospect and no campaign step is affected. For a timed personal nudge use `reminder_create`.

### Parameters

<ParamField path="taskId" type="string">
  Omit to create a new task.
</ParamField>

<ParamField path="title" type="string" required>
  What needs doing.
</ParamField>

<ParamField path="content" type="string">
  Detail or context.
</ParamField>

<ParamField path="leadId" type="string">
  Lead this relates to.
</ParamField>

<ParamField path="conversationId" type="string">
  Conversation id, from `conversation_list`.
</ParamField>

<ParamField path="link" type="string">
  Related URL.
</ParamField>

<ParamField path="tag" type="string">
  Free-text label for grouping.
</ParamField>

<ParamField path="date" type="string | number">
  Due date, epoch milliseconds or ISO 8601.
</ParamField>

<ParamField path="isCompleted" type="boolean">
  Mark as done.
</ParamField>


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