KasarKasar Docs
MCP Server

Tools — Inbox & Communication

MCP tools for reading email threads, viewing interaction details, browsing activity feeds, and listing calendar events.

The Inbox & Communication tools give your AI assistant access to email threads, interaction history, activity feeds, and calendar events across all synced accounts.

crm_inbox

Read email and message threads from synced accounts.

Parameters

ParameterTypeRequiredDescription
actionlist_threads | get_thread | mark_read | mark_unreadYesOperation to perform.
channelall | email | linkedin | whatsappNoFilter by communication channel. Defaults to all.
is_readbooleanNoFilter threads by read status.
thread_idstringNoThread UUID. Required for get_thread, mark_read, and mark_unread.
message_cursorstringNoPagination cursor for messages within a thread.
message_limitnumberNoMessages per page. Default 50, max 200.
cursorstringNoPagination cursor for thread listing.
limitnumberNoMax threads per page. Default 20, max 50.

Key behaviors

  • User isolation — Each user only sees threads from their own synced email accounts. There is no cross-user visibility.
  • Content gating — Email bodies require the inbox:content scope on your API token. Without it, message bodies are replaced with a placeholder and a prompt to upgrade the token scope.
  • SQL-level pagination — Thread listing is paginated server-side. Use cursor and limit to page through results.
  • Message pagination — Large threads support internal pagination via message_cursor and message_limit, so you can incrementally load conversation history.

Examples

List unread email threads:

{
  "action": "list_threads",
  "channel": "email",
  "is_read": false,
  "limit": 10
}

Response:

{
  "data": [
    {
      "thread_id": "t_abc123",
      "subject": "Q3 contract renewal",
      "last_message_at": "2025-06-10T14:22:00Z",
      "is_read": false,
      "message_count": 4,
      "participants": ["alice@example.com", "bob@acme.com"]
    }
  ],
  "total": 23,
  "nextCursor": "eyJ0aHJlYWRfaWQiOiJ0X2FiYzEy..."
}

Get a thread with paginated messages:

{
  "action": "get_thread",
  "thread_id": "t_abc123",
  "message_limit": 20
}

Response:

{
  "thread": {
    "thread_id": "t_abc123",
    "subject": "Q3 contract renewal",
    "is_read": true
  },
  "messages": [
    {
      "id": "msg_001",
      "from": "alice@example.com",
      "to": ["bob@acme.com"],
      "body": "Hi Bob, following up on the renewal...",
      "sent_at": "2025-06-10T14:22:00Z"
    }
  ],
  "total_messages": 4,
  "next_message_cursor": null
}

When next_message_cursor is null, all messages in the thread have been returned.

Mark a thread as read:

{
  "action": "mark_read",
  "thread_id": "t_abc123"
}

Response:

{
  "thread_id": "t_abc123",
  "is_read": true
}

crm_interaction_detail

Get details of a single interaction (email, call, meeting) or a full thread.

Parameters

ParameterTypeRequiredDescription
interaction_idstringNoUUID of a single interaction.
thread_idstringNoThread UUID. Returns the thread metadata plus all messages.

One of interaction_id or thread_id must be provided. If both are given, interaction_id takes precedence.

Key behaviors

  • User isolation — Access is restricted to interactions belonging to the authenticated user's synced email accounts.
  • Metadata stripped — Sensitive data such as OAuth tokens and internal sync metadata is never exposed in the response.
  • Content gating — Like crm_inbox, email bodies require the inbox:content scope.
  • Automatic routing — The tool detects which parameter is provided and routes to the appropriate handler internally.

Example

Get a single email interaction:

{
  "interaction_id": "550e8400-e29b-41d4-a716-446655440000"
}

Response:

{
  "interaction": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "email",
    "subject": "Partnership proposal",
    "from": "alice@example.com",
    "to": ["bob@acme.com"],
    "body": "Hi Bob, I wanted to discuss a potential partnership...",
    "sent_at": "2025-06-08T09:15:00Z",
    "thread_id": "t_xyz789",
    "is_read": true
  }
}

crm_activity_feed

Get the complete activity feed for any record: interactions, tasks, and notes in a single call.

Parameters

ParameterTypeRequiredDescription
entity_typestringYesObject name: contacts, companies, opportunities, or any custom object.
entity_idstringYesUUID of the record to get activity for.
includestring[]NoFilter which sections to return: interactions, tasks, notes. Defaults to all three.
channelall | email | linkedin | whatsapp | phone | meetingNoFilter interactions by communication channel.
cursorstringNoPagination cursor.
limitnumberNoMax items per section.

Example

Get full activity for a contact:

{
  "entity_type": "contacts",
  "entity_id": "550e8400-e29b-41d4-a716-446655440000"
}

Response:

{
  "interactions": {
    "data": [
      {
        "id": "int_001",
        "type": "email",
        "subject": "Follow-up call notes",
        "sent_at": "2025-06-10T14:00:00Z"
      }
    ],
    "total": 12
  },
  "tasks": {
    "data": [
      {
        "id": "task_001",
        "title": "Send proposal by Friday",
        "status": "todo",
        "due_date": "2025-06-13"
      }
    ],
    "total": 3
  },
  "notes": {
    "data": [
      {
        "id": "note_001",
        "body": "Met at the trade show, interested in enterprise plan.",
        "created_at": "2025-06-05T11:00:00Z"
      }
    ],
    "total": 5
  }
}

Each section follows the normalized { data: [], total } shape. When a section is excluded via include, it is omitted from the response entirely.

Filter to notes only:

{
  "entity_type": "contacts",
  "entity_id": "550e8400-e29b-41d4-a716-446655440000",
  "include": ["notes"]
}

crm_manage_events

Read calendar events (meetings, calls) from synced accounts.

Parameters

ParameterTypeRequiredDescription
actionlist | create | update | deleteYesOperation to perform.
start_datestringNoISO 8601 date. Filter events starting from this date (used with list).
end_datestringNoISO 8601 date. Filter events ending before this date (used with list).
event_idstringNoEvent UUID. Required for update and delete.
titlestringNoEvent title. Used with create.
startstringNoISO 8601 datetime. Event start time. Used with create.
endstringNoISO 8601 datetime. Event end time. Used with create.

Currently, only the list action is fully supported via MCP. The create, update, and delete actions require direct OAuth access to the calendar provider and are not yet available through the MCP server.

The list action queries meeting-type interactions stored in the CRM database, not an external calendar API directly. Events are sourced from synced calendar data.

Example

List events for next week:

{
  "action": "list",
  "start_date": "2025-06-16",
  "end_date": "2025-06-22"
}

Response:

{
  "data": [
    {
      "id": "evt_001",
      "title": "Quarterly review with Acme",
      "start": "2025-06-17T10:00:00Z",
      "end": "2025-06-17T11:00:00Z",
      "attendees": ["alice@example.com", "bob@acme.com"],
      "location": "Google Meet"
    },
    {
      "id": "evt_002",
      "title": "Internal standup",
      "start": "2025-06-18T09:00:00Z",
      "end": "2025-06-18T09:30:00Z",
      "attendees": ["alice@example.com", "carol@example.com"],
      "location": null
    }
  ],
  "total": 2
}

On this page