MCP Server

Mob (Demo)

io.github.benkaiser/mob-demo
Productivity Sales & CRM Public & reachable MCP 2025-11-25

What this MCP does

Manages personal CRM data including contacts, relationships, activities, notes, reminders, gifts, debts, preferences, tasks, searches, and notifications.

activity_list
List activities, optionally filtered by contact or type. Add days_back or since for a chronological activity journal with participant names.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'number', 'description': 'Page number (default: 1)'}, 'type': {'enum': ['phone_call', 'video_call', 'text_message', 'in_person', 'email', 'activity', 'other'], 'type': 'string', 'description': 'Filter by interaction type'}, 'since': {'type': 'string', 'description': 'Show activities since this ISO date (uses activity log mode with participant names)'}, 'per_page': {'type': 'number', 'description': 'Results per page (default: 20)'}, 'days_back': {'type': 'number', 'maximum': 365, 'minimum': 1, 'description': 'Look-back window in days (uses activity log mode with participant names). Ignored if since is provided.'}, 'contact_id': {'type': 'string', 'description': 'Filter by contact ID'}, 'sort_order': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Sort direction by occurred_at (default: desc, only for activity log mode)'}, 'include_deleted': {'type': 'boolean', 'description': 'Include soft-deleted activities in results (default: false)'}}}
activity_manage
Create, get, update, delete, or restore an activity/interaction. • action="create": Record a new activity. Requires type, occurred_at, participant_contact_ids. Optional title, description, duration_minutes, location, activity_type_id. • action="get": Get full details of an activity. Requires id. • action="update": Update an activity. Requires id. Optional type, title, description, occurred_at, duration_minutes, location, participant_contact_ids. • action="delete": Soft-delete an activity. Requires id. • action="restore": Restore a soft-deleted activity. Requires id.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The activity ID (required for "get", "update", "delete", "restore")'}, 'type': {'enum': ['phone_call', 'video_call', 'text_message', 'in_person', 'email', 'activity', 'other'], 'type': 'string', 'description': 'Type of interaction (required for "create", optional for "update")'}, 'title': {'type': 'string', 'description': 'Title (e.g. "Coffee at Blue Bottle")'}, 'action': {'enum': ['create', 'get', 'update', 'delete', 'restore'], 'type': 'string', 'description': 'Action to perform'}, 'location': {'type': 'string', 'description': 'Where it happened'}, 'description': {'type': 'string', 'description': 'Description or notes'}, 'occurred_at': {'type': 'string', 'description': 'When it happened (ISO date/datetime) (required for "create", optional for "update")'}, 'activity_type_id': {'type': 'string', 'description': 'Custom activity type ID'}, 'duration_minutes': {'type': 'number', 'description': 'Duration in minutes'}, 'participant_contact_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Contact IDs of participants (required for "create", optional for "update")'}}}
activity_type_manage
List, create, update, or delete custom activity types
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'Activity type ID (required for "update" and "delete")'}, 'icon': {'type': 'string', 'description': 'Icon identifier'}, 'name': {'type': 'string', 'description': 'Activity type name (required for "create")'}, 'action': {'enum': ['list', 'create', 'update', 'delete'], 'type': 'string', 'description': 'Action to perform'}, 'category': {'type': 'string', 'description': 'Category (e.g. "Food & Drink", "Sports")'}}}
address_manage
Add, update, or remove an address for a contact
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The address ID (required for "update" and "remove")'}, 'city': {'type': 'string', 'description': 'City'}, 'label': {'type': 'string', 'description': 'Label (e.g. "Home", "Work")'}, 'action': {'enum': ['add', 'update', 'remove'], 'type': 'string', 'description': 'Action to perform'}, 'country': {'type': 'string', 'description': 'Country (ISO 3166-1 alpha-2 recommended)'}, 'contact_id': {'type': 'string', 'description': 'The contact ID (required for "add")'}, 'is_primary': {'type': 'boolean', 'description': 'Set as primary address'}, 'postal_code': {'type': 'string', 'description': 'Postal/ZIP code'}, 'street_line_1': {'type': 'string', 'description': 'Street address line 1'}, 'street_line_2': {'type': 'string', 'description': 'Street address line 2'}, 'state_province': {'type': 'string', 'description': 'State or province'}}}
batch_create_activities
Create multiple activities/interactions in one call. Max 50 items per batch. Runs atomically - if any item fails, the entire batch is rolled back.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['activities'], 'properties': {'activities': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'occurred_at', 'participant_contact_ids'], 'properties': {'type': {'enum': ['phone_call', 'video_call', 'text_message', 'in_person', 'email', 'activity', 'other'], 'type': 'string', 'description': 'Type of interaction'}, 'title': {'type': 'string', 'description': 'Title (e.g. "Coffee at Blue Bottle")'}, 'location': {'type': 'string', 'description': 'Where it happened'}, 'description': {'type': 'string', 'description': 'Description or notes'}, 'occurred_at': {'type': 'string', 'description': 'When it happened (ISO date/datetime)'}, 'activity_type_id': {'type': 'string', 'description': 'Custom activity type ID'}, 'duration_minutes': {'type': 'number', 'description': 'Duration in minutes'}, 'participant_contact_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Contact IDs of participants'}}}, 'description': 'Array of activity creation inputs (max 50)'}}}
batch_create_contacts
Create multiple contacts in one call. Max 50 items per batch. Runs atomically - if any item fails, the entire batch is rolled back.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contacts'], 'properties': {'contacts': {'type': 'array', 'items': {'type': 'object', 'required': ['first_name'], 'properties': {'gender': {'type': 'string', 'description': 'Gender'}, 'status': {'enum': ['active', 'archived', 'deceased'], 'type': 'string', 'description': 'Contact status (default: active)'}, 'company': {'type': 'string', 'description': 'Company or organization'}, 'industry': {'type': 'string', 'description': 'Industry'}, 'nickname': {'type': 'string', 'description': 'Nickname'}, 'pronouns': {'type': 'string', 'description': 'Pronouns (e.g. she/her, he/him, they/them)'}, 'job_title': {'type': 'string', 'description': 'Job title'}, 'last_name': {'type': 'string', 'description': 'Last name'}, 'avatar_url': {'type': 'string', 'description': 'Avatar URL'}, 'first_name': {'type': 'string', 'description': 'First name (required)'}, 'work_notes': {'type': 'string', 'description': 'Notes about their work'}, 'is_favorite': {'type': 'boolean', 'description': 'Mark as favorite'}, 'maiden_name': {'type': 'string', 'description': 'Maiden name'}, 'met_at_date': {'type': 'string', 'description': 'Date you met this person (YYYY-MM-DD)'}, 'middle_name': {'type': 'string', 'description': 'Middle name'}, 'birthday_day': {'type': 'number', 'description': 'Birthday day (1-31), used with birthday_mode=month_day'}, 'birthday_date': {'type': 'string', 'description': 'Full birthday date (YYYY-MM-DD), used with birthday_mode=full_date'}, 'birthday_mode': {'enum': ['full_date', 'month_day', 'approximate_age'], 'type': 'string', 'description': 'Birthday mode: full_date (YYYY-MM-DD), month_day (month + day only), or approximate_age (birth year estimate)'}, 'deceased_date': {'type': 'string', 'description': 'Date of death (YYYY-MM-DD)'}, 'birthday_month': {'type': 'number', 'description': 'Birthday month (1-12), used with birthday_mode=month_day'}, 'met_at_location': {'type': 'string', 'description': 'Where you met this person'}, 'met_description': {'type': 'string', 'description': 'Story of how you met'}, 'met_through_contact_id': {'type': 'string', 'description': 'Contact ID of person who introduced you'}, 'birthday_year_approximate': {'type': 'number', 'description': 'Approximate birth year, used with birthday_mode=approximate_age'}}}, 'description': 'Array of contact creation inputs (max 50)'}}}
batch_tag_contacts
Apply a tag to multiple contacts in one call. Max 50 contacts per batch. Creates the tag if it doesn't exist. Runs atomically - if any item fails, the entire batch is rolled back.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['tag_name', 'contact_ids'], 'properties': {'tag_name': {'type': 'string', 'description': 'Tag name to apply'}, 'contact_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Array of contact IDs to tag (max 50)'}}}
contact_create
Create a new contact with basic info
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['first_name'], 'properties': {'gender': {'type': 'string', 'description': 'Gender'}, 'status': {'enum': ['active', 'archived', 'deceased'], 'type': 'string', 'description': 'Contact status (default: active)'}, 'company': {'type': 'string', 'description': 'Company or organization'}, 'industry': {'type': 'string', 'description': 'Industry'}, 'nickname': {'type': 'string', 'description': 'Nickname'}, 'pronouns': {'type': 'string', 'description': 'Pronouns (e.g. she/her, he/him, they/them)'}, 'job_title': {'type': 'string', 'description': 'Job title'}, 'last_name': {'type': 'string', 'description': 'Last name'}, 'avatar_url': {'type': 'string', 'description': 'Avatar URL'}, 'first_name': {'type': 'string', 'description': 'First name (required)'}, 'work_notes': {'type': 'string', 'description': 'Notes about their work'}, 'is_favorite': {'type': 'boolean', 'description': 'Mark as favorite'}, 'maiden_name': {'type': 'string', 'description': 'Maiden name'}, 'met_at_date': {'type': 'string', 'description': 'Date you met this person (YYYY-MM-DD)'}, 'middle_name': {'type': 'string', 'description': 'Middle name'}, 'birthday_day': {'type': 'number', 'description': 'Birthday day (1-31), used with birthday_mode=month_day'}, 'birthday_date': {'type': 'string', 'description': 'Full birthday date (YYYY-MM-DD), used with birthday_mode=full_date'}, 'birthday_mode': {'enum': ['full_date', 'month_day', 'approximate_age'], 'type': 'string', 'description': 'Birthday mode: full_date (YYYY-MM-DD), month_day (month + day only), or approximate_age (birth year estimate)'}, 'deceased_date': {'type': 'string', 'description': 'Date of death (YYYY-MM-DD)'}, 'birthday_month': {'type': 'number', 'description': 'Birthday month (1-12), used with birthday_mode=month_day'}, 'met_at_location': {'type': 'string', 'description': 'Where you met this person'}, 'met_description': {'type': 'string', 'description': 'Story of how you met'}, 'met_through_contact_id': {'type': 'string', 'description': 'Contact ID of person who introduced you'}, 'birthday_year_approximate': {'type': 'number', 'description': 'Approximate birth year, used with birthday_mode=approximate_age'}}}
contact_delete
Soft-delete a contact (can be restored later)
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'The contact ID to delete'}}}
contact_find_duplicates
Scan for potential duplicate contacts using name, email, and phone matching. Returns pairs of contacts that may be duplicates with the reason for the match.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
contact_get
Get full contact details including all related data in one call: contact methods, addresses, food preferences, custom fields, tags, relationships, recent notes, recent activities, life events, active reminders, open tasks, recent gifts, active debts, and debt summary
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'The contact ID'}}}
contact_list
List contacts with optional filters (status, favorite, company, tag, search). Returns paginated results.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'number', 'description': 'Page number (default: 1)'}, 'search': {'type': 'string', 'description': 'Search contacts by name, company, or job title'}, 'status': {'enum': ['active', 'archived', 'deceased'], 'type': 'string', 'description': 'Filter by status'}, 'company': {'type': 'string', 'description': 'Filter by company'}, 'sort_by': {'enum': ['name', 'created_at', 'updated_at'], 'type': 'string', 'description': 'Sort field (default: name)'}, 'per_page': {'type': 'number', 'description': 'Results per page (default: 20)'}, 'tag_name': {'type': 'string', 'description': 'Filter by tag name'}, 'sort_order': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Sort order (default: asc)'}, 'is_favorite': {'type': 'boolean', 'description': 'Filter by favorite'}, 'include_deleted': {'type': 'boolean', 'description': 'Include soft-deleted contacts in results (default: false)'}}}
contact_merge
Merge two contacts into one. All child records (notes, activities, tags, etc.) from the secondary contact are moved to the primary. The secondary contact is soft-deleted after merge.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['primary_contact_id', 'secondary_contact_id'], 'properties': {'primary_contact_id': {'type': 'string', 'description': 'The contact ID to keep (primary)'}, 'secondary_contact_id': {'type': 'string', 'description': 'The contact ID to merge into the primary (will be soft-deleted)'}}}
contact_method_manage
Add, update, or remove a contact method (email, phone, social handle, etc.)
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The contact method ID (required for "update" and "remove")'}, 'type': {'type': 'string', 'minLength': 1, 'description': 'Type of contact method (required for "add"). Built-ins: email, phone, whatsapp, telegram, signal, twitter, instagram, facebook, linkedin, website, other. Custom values defined in Settings are also accepted.'}, 'label': {'type': 'string', 'description': 'Label (e.g. "Personal", "Work")'}, 'value': {'type': 'string', 'description': 'The value - email, phone number, handle (required for "add")'}, 'action': {'enum': ['add', 'update', 'remove'], 'type': 'string', 'description': 'Action to perform'}, 'contact_id': {'type': 'string', 'description': 'The contact ID (required for "add")'}, 'is_primary': {'type': 'boolean', 'description': 'Set as primary for this type'}}}
contact_restore
Restore a soft-deleted contact
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'The contact ID to restore'}}}
contacts_needing_attention
Find contacts you haven't interacted with recently - the "who am I neglecting?" query. Returns contacts sorted by staleness (longest since last interaction first). Contacts with zero interactions are included and sorted first.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'number', 'maximum': 100, 'minimum': 1, 'description': 'Max results to return (default: 20)'}, 'status': {'enum': ['active', 'archived'], 'type': 'string', 'description': 'Contact status filter (default: active)'}, 'tag_name': {'type': 'string', 'description': 'Filter to contacts with this tag (e.g., "close friends")'}, 'is_favorite': {'type': 'boolean', 'description': 'Filter to favorites only'}, 'days_since_last_interaction': {'type': 'number', 'description': 'Minimum days since last activity to be included (default: 30)'}}}
contact_timeline
Get the unified timeline for a contact (activities, life events, notes, etc.)
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contact_id'], 'properties': {'page': {'type': 'number', 'description': 'Page number (default: 1)'}, 'per_page': {'type': 'number', 'description': 'Results per page (default: 20)'}, 'contact_id': {'type': 'string', 'description': 'The contact ID'}, 'entry_type': {'enum': ['activity', 'life_event', 'note', 'contact_created'], 'type': 'string', 'description': 'Filter by entry type'}}}
contact_update
Update contact fields
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contact_id'], 'properties': {'gender': {'type': 'string', 'description': 'Gender'}, 'status': {'enum': ['active', 'archived', 'deceased'], 'type': 'string', 'description': 'Contact status'}, 'company': {'type': 'string', 'description': 'Company'}, 'industry': {'type': 'string', 'description': 'Industry'}, 'nickname': {'type': 'string', 'description': 'Nickname'}, 'pronouns': {'type': 'string', 'description': 'Pronouns'}, 'job_title': {'type': 'string', 'description': 'Job title'}, 'last_name': {'type': 'string', 'description': 'Last name'}, 'avatar_url': {'type': 'string', 'description': 'Avatar URL'}, 'contact_id': {'type': 'string', 'description': 'The contact ID to update'}, 'first_name': {'type': 'string', 'description': 'First name'}, 'work_notes': {'type': 'string', 'description': 'Work notes'}, 'is_favorite': {'type': 'boolean', 'description': 'Mark as favorite'}, 'maiden_name': {'type': 'string', 'description': 'Maiden name'}, 'met_at_date': {'type': 'string', 'description': 'Date you met this person'}, 'middle_name': {'type': 'string', 'description': 'Middle name'}, 'birthday_day': {'type': 'number', 'description': 'Birthday day (1-31)'}, 'birthday_date': {'type': 'string', 'description': 'Full birthday date (YYYY-MM-DD)'}, 'birthday_mode': {'enum': ['full_date', 'month_day', 'approximate_age'], 'type': 'string', 'description': 'Birthday mode'}, 'deceased_date': {'type': 'string', 'description': 'Date of death (YYYY-MM-DD)'}, 'birthday_month': {'type': 'number', 'description': 'Birthday month (1-12)'}, 'met_at_location': {'type': 'string', 'description': 'Where you met this person'}, 'met_description': {'type': 'string', 'description': 'How you met'}, 'met_through_contact_id': {'type': 'string', 'description': 'Contact ID of person who introduced you'}, 'birthday_year_approximate': {'type': 'number', 'description': 'Approximate birth year'}}}
custom_field_manage
Add, update, or remove a custom field on a contact
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The custom field ID (required for "update" and "remove")'}, 'action': {'enum': ['add', 'update', 'remove'], 'type': 'string', 'description': 'Action to perform'}, 'contact_id': {'type': 'string', 'description': 'The contact ID (required for "add")'}, 'field_name': {'type': 'string', 'description': 'Field name, e.g. "Favorite Color" (required for "add")'}, 'field_group': {'type': 'string', 'description': 'Group to organize fields, e.g. "Preferences"'}, 'field_value': {'type': 'string', 'description': 'Field value (required for "add")'}}}
data_export
Export all CRM data as a JSON object (contacts, relationships, notes, activities, life events, reminders, gifts, debts, tasks, tags)
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
data_statistics
Get CRM statistics and overview (contact counts, activity counts, pending items, etc.)
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
debt_manage
Create, list, update, settle, delete, restore, or summarize debts. • action="create": Track a new debt. Requires contact_id, amount, direction. Optional currency, reason, incurred_at. • action="list": List debts. Optional contact_id, status, page, per_page, include_deleted. • action="update": Update a debt. Requires id. Optional amount, currency, direction, reason, incurred_at. • action="settle": Mark a debt as settled. Requires id. • action="delete": Soft-delete a debt. Requires id. • action="restore": Restore a soft-deleted debt. Requires id. • action="summary": Get net balance summary for a contact. Requires contact_id.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The debt ID (required for "update", "settle", "delete", "restore")'}, 'page': {'type': 'number', 'description': 'Page number for "list" (default: 1)'}, 'action': {'enum': ['create', 'list', 'update', 'settle', 'delete', 'restore', 'summary'], 'type': 'string', 'description': 'Action to perform'}, 'amount': {'type': 'number', 'description': 'Amount owed (required for "create", optional for "update")'}, 'reason': {'type': 'string', 'description': 'Reason for the debt'}, 'status': {'enum': ['active', 'settled'], 'type': 'string', 'description': 'Filter by status (for "list" only)'}, 'currency': {'type': 'string', 'description': 'Currency (default: USD)'}, 'per_page': {'type': 'number', 'description': 'Results per page for "list" (default: 20)'}, 'direction': {'enum': ['i_owe_them', 'they_owe_me'], 'type': 'string', 'description': 'Who owes whom (required for "create", optional for "update")'}, 'contact_id': {'type': 'string', 'description': 'The contact ID (required for "create" and "summary", optional filter for "list")'}, 'incurred_at': {'type': 'string', 'description': 'When the debt was incurred (ISO date)'}, 'include_deleted': {'type': 'boolean', 'description': 'Include soft-deleted debts in "list" results (default: false)'}}}
food_preferences_get
Get food preferences for a contact (dietary restrictions, allergies, favorites, dislikes)
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contact_id'], 'properties': {'contact_id': {'type': 'string', 'description': 'The contact ID'}}}
food_preferences_upsert
Set or update food preferences for a contact. Replaces all fields - pass all known preferences, not just changes.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contact_id'], 'properties': {'notes': {'type': 'string', 'description': 'Additional notes about food preferences'}, 'allergies': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Food allergies (e.g. ["peanuts", "shellfish"])'}, 'contact_id': {'type': 'string', 'description': 'The contact ID'}, 'disliked_foods': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Disliked foods'}, 'favorite_foods': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Favorite foods'}, 'dietary_restrictions': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Dietary restrictions (e.g. ["vegetarian", "gluten-free"])'}}}
gift_list
List gifts, optionally filtered by contact, status, or direction. Add occasion, sort_by, sort_order, or omit contact_id for a cross-contact gift tracker with summary stats.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'number', 'description': 'Page number (default: 1)'}, 'status': {'enum': ['idea', 'planned', 'purchased', 'given', 'received'], 'type': 'string', 'description': 'Filter by status'}, 'sort_by': {'enum': ['date', 'created_at', 'estimated_cost'], 'type': 'string', 'description': 'Sort field (default: date for tracker mode, created_at otherwise)'}, 'occasion': {'type': 'string', 'description': 'Filter by occasion (fuzzy match, e.g. "birthday", "Christmas")'}, 'per_page': {'type': 'number', 'description': 'Results per page (default: 20)'}, 'direction': {'enum': ['giving', 'receiving'], 'type': 'string', 'description': 'Filter by direction'}, 'contact_id': {'type': 'string', 'description': 'Filter by contact ID'}, 'sort_order': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Sort direction (default: desc)'}, 'include_deleted': {'type': 'boolean', 'description': 'Include soft-deleted gifts in results (default: false)'}}}
gift_manage
Create, update, delete, or restore a gift for a contact. • action="create": Track a gift idea, plan, or record a given/received gift. Requires contact_id, name, and direction. Optional description, url, estimated_cost, currency, occasion, status, date. • action="update": Update an existing gift (change status, add details, etc.). Requires id. Optional name, description, url, estimated_cost, currency, occasion, status, direction, date. • action="delete": Soft-delete a gift. Requires id. • action="restore": Restore a soft-deleted gift. Requires id.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The gift ID (required for "update", "delete", "restore")'}, 'url': {'type': 'string', 'description': 'Link to the gift'}, 'date': {'type': 'string', 'description': 'Date of giving/receiving (ISO date)'}, 'name': {'type': 'string', 'description': 'Gift name (required for "create")'}, 'action': {'enum': ['create', 'update', 'delete', 'restore'], 'type': 'string', 'description': 'Action to perform'}, 'status': {'enum': ['idea', 'planned', 'purchased', 'given', 'received'], 'type': 'string', 'description': 'Gift status (default: idea)'}, 'currency': {'type': 'string', 'description': 'Currency (default: USD)'}, 'occasion': {'type': 'string', 'description': 'Occasion (e.g. "Birthday", "Christmas")'}, 'direction': {'enum': ['giving', 'receiving'], 'type': 'string', 'description': 'Giving to or receiving from this contact (required for "create")'}, 'contact_id': {'type': 'string', 'description': 'The contact ID (required for "create")'}, 'description': {'type': 'string', 'description': 'Description'}, 'estimated_cost': {'type': 'number', 'description': 'Estimated cost'}}}
global_search
Search across all entity types (contacts, notes, activities, life events, gifts, tasks, reminders, debts, relationships, contact methods, addresses, custom fields) in a single query. Returns grouped results by entity type with snippets and contact context.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'description': 'Search term'}, 'entity_types': {'type': 'array', 'items': {'enum': ['contacts', 'notes', 'activities', 'life_events', 'gifts', 'tasks', 'reminders', 'debts', 'relationships', 'contact_methods', 'addresses', 'custom_fields'], 'type': 'string'}, 'description': 'Optional: filter to specific entity types (default: all types)'}, 'limit_per_type': {'type': 'number', 'maximum': 50, 'minimum': 1, 'description': 'Max results per entity type (default: 10)'}}}
life_event_manage
Create, list, update, delete, or restore life events for a contact. • action="create": Record a new life event. Requires contact_id, event_type, and title. Optional description, occurred_at, related_contact_ids. • action="list": List life events for a contact. Requires contact_id. Optional page, per_page, include_deleted. • action="update": Update a life event. Requires id. Optional event_type, title, description, occurred_at, related_contact_ids. • action="delete": Soft-delete a life event. Requires id. • action="restore": Restore a soft-deleted life event. Requires id.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The life event ID (required for "update", "delete", "restore")'}, 'page': {'type': 'number', 'description': 'Page number for "list" (default: 1)'}, 'title': {'type': 'string', 'description': 'Title (e.g. "Started at Google", "Moved to Berlin") - required for "create", optional for "update"'}, 'action': {'enum': ['create', 'list', 'update', 'delete', 'restore'], 'type': 'string', 'description': 'Action to perform'}, 'per_page': {'type': 'number', 'description': 'Results per page for "list" (default: 20)'}, 'contact_id': {'type': 'string', 'description': 'The contact ID (required for "create" and "list")'}, 'event_type': {'type': 'string', 'description': 'Event type (e.g. "new_job", "got_married", "moved") - required for "create", optional for "update"'}, 'description': {'type': 'string', 'description': 'Description (optional for "create" and "update")'}, 'occurred_at': {'type': 'string', 'description': 'When it happened (ISO date, optional for "create" and "update")'}, 'include_deleted': {'type': 'boolean', 'description': 'Include soft-deleted life events in "list" results (default: false)'}, 'related_contact_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'IDs of other contacts involved (optional for "create" and "update")'}}}
manage_push_notifications
Open a page to manage push notification subscriptions in your browser. Enables/disables web push notifications for birthday reminders and other alerts.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
manage_settings
View or update your personal settings (timezone, birthday reminder preferences). • action="get": View current settings • action="update": Update settings. Optional fields: timezone (IANA timezone like "America/New_York"), birthday_reminder_offsets (array of day offsets like [0,7,30] where 0=day-of, 7=week-before), reminder_offsets (array of day offsets like [0,7,30] for advance notice on custom reminders), birthday_reminder_time (HH:MM 24-hour format for when to send reminders)
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'action': {'enum': ['get', 'update'], 'type': 'string', 'description': 'Action to perform'}, 'timezone': {'type': 'string', 'description': 'IANA timezone (e.g. "America/New_York", "Europe/London")'}, 'reminder_offsets': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Array of day offsets for custom reminder advance notice (e.g. [0,7,30] = day-of, 1 week before, 1 month before)'}, 'birthday_reminder_time': {'type': 'string', 'description': 'Time of day for birthday reminders in HH:MM 24-hour format (e.g. "09:00")'}, 'birthday_reminder_offsets': {'type': 'array', 'items': {'type': 'number'}, 'description': 'Array of day offsets for birthday reminders (e.g. [0,7,30] = day-of, 1 week before, 1 month before)'}}}
note_list
List and search notes. When contact_id is provided alone, lists that contact's notes (pinned first). Add query, tag_name, is_pinned, or omit contact_id to search across all contacts.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'number', 'description': 'Page number (default: 1)'}, 'query': {'type': 'string', 'description': 'Search term matched against note title and body'}, 'sort_by': {'enum': ['created_at', 'updated_at'], 'type': 'string', 'description': 'Sort field (default: updated_at)'}, 'per_page': {'type': 'number', 'description': 'Results per page (default: 20)'}, 'tag_name': {'type': 'string', 'description': 'Filter to notes belonging to contacts with this tag'}, 'is_pinned': {'type': 'boolean', 'description': 'Filter by pinned status'}, 'contact_id': {'type': 'string', 'description': 'Filter by contact ID (optional - omit to search across all contacts)'}, 'sort_order': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Sort direction (default: desc)'}, 'include_deleted': {'type': 'boolean', 'description': 'Include soft-deleted notes in results (default: false)'}}}
note_manage
Create, update, delete, or restore a note for a contact. • action="create": Add a new note. Requires contact_id and body. Optional title, is_pinned. • action="update": Update an existing note. Requires id. Optional title, body, is_pinned. • action="delete": Soft-delete a note. Requires id. • action="restore": Restore a soft-deleted note. Requires id.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The note ID (required for "update", "delete", "restore")'}, 'body': {'type': 'string', 'description': 'Note body, supports markdown (required for "create", optional for "update")'}, 'title': {'type': 'string', 'description': 'Note title (optional for "create" and "update")'}, 'action': {'enum': ['create', 'update', 'delete', 'restore'], 'type': 'string', 'description': 'Action to perform'}, 'is_pinned': {'type': 'boolean', 'description': 'Pin/unpin note (optional for "create" and "update")'}, 'contact_id': {'type': 'string', 'description': 'The contact ID (required for "create")'}}}
notification_create
Create a custom notification
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['type', 'title'], 'properties': {'body': {'type': 'string', 'description': 'Notification body'}, 'type': {'enum': ['birthday', 'reminder', 'follow_up', 'custom'], 'type': 'string', 'description': 'Notification type'}, 'title': {'type': 'string', 'description': 'Notification title'}, 'contact_id': {'type': 'string', 'description': 'Related contact ID'}}}
notification_list
List notifications (newest first)
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'page': {'type': 'number', 'description': 'Page number (default: 1)'}, 'per_page': {'type': 'number', 'description': 'Results per page (default: 20)'}, 'unread_only': {'type': 'boolean', 'description': 'Only show unread notifications'}}}
notification_read
Mark notification(s) as read. Pass id for a single notification, or all=true for all.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'id': {'type': 'string', 'description': 'The notification ID (required unless all=true)'}, 'all': {'type': 'boolean', 'description': 'Mark all notifications as read (default: false)'}}}
prime
IMPORTANT: Call this tool FIRST before any other tool to load essential CRM context. Returns a compact overview of the user's data: the current user's identity (name, email, contact_id), all tags, the 200 most recently updated contacts (id, name, and tag IDs), and the 10 most recent notes. This primes your context so you can reference contacts by name, understand the user's tag taxonomy, and see recent activity without needing separate list calls. Always call this at the start of a conversation.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
relationship_manage
Add, update, remove, or list relationships between contacts. • action="add": Create a relationship between two contacts. Automatically creates the inverse relationship. Requires contact_id, related_contact_id, and relationship_type. To create relationships involving yourself, use your own contact_id from the prime tool. Relationships describe how contacts relate to each other (e.g. Bandit is Bingo's parent). • action="update": Update a relationship. Also updates the inverse relationship. Requires id. Optionally set relationship_type and/or notes. • action="remove": Remove a relationship and its inverse. Requires id. • action="list": List all relationships for a contact. Requires contact_id.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The relationship ID (required for "update" and "remove")'}, 'notes': {'type': 'string', 'description': 'Notes about this relationship (optional for "add" and "update")'}, 'action': {'enum': ['add', 'update', 'remove', 'list'], 'type': 'string', 'description': 'Action to perform'}, 'contact_id': {'type': 'string', 'description': 'The source contact ID (required for "add" and "list")'}, 'relationship_type': {'type': 'string', 'description': 'Type of relationship (required for "add", optional for "update"). Canonical values: significant_other, spouse, date, lover, in_love_with, secret_lover, ex_boyfriend_girlfriend, ex_husband_wife, parent, child, sibling, grandparent, grandchild, uncle_aunt, nephew_niece, cousin, godparent, godchild, step_parent, step_child, friend, best_friend, colleague, boss, subordinate, mentor, protege. Custom values defined in Settings are also accepted.'}, 'related_contact_id': {'type': 'string', 'description': 'The related contact ID (required for "add")'}}}
reminder_manage
Create, list, update, complete, snooze, delete, or restore reminders. • action="create": Create a reminder for a contact. Requires contact_id, title, and reminder_date. Optional description, frequency. • action="list": List reminders, optionally filtered by contact or status. Optional contact_id, status, page, per_page, include_deleted. • action="update": Update a reminder. Requires id. Optional title, description, reminder_date, frequency. • action="complete": Mark a reminder as completed. For recurring reminders, advances to the next occurrence. Requires id. • action="snooze": Snooze a reminder to a new date. Requires id and new_date. • action="delete": Soft-delete a reminder. Requires id. • action="restore": Restore a soft-deleted reminder. Requires id.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The reminder ID (required for "update", "complete", "snooze", "delete", "restore")'}, 'page': {'type': 'number', 'description': 'Page number for "list" (default: 1)'}, 'title': {'type': 'string', 'description': 'Reminder title (required for "create", optional for "update")'}, 'action': {'enum': ['create', 'list', 'update', 'complete', 'snooze', 'delete', 'restore'], 'type': 'string', 'description': 'Action to perform'}, 'status': {'enum': ['active', 'snoozed', 'completed', 'dismissed'], 'type': 'string', 'description': 'Filter by status (for "list" only)'}, 'new_date': {'type': 'string', 'description': 'New reminder date (ISO date YYYY-MM-DD) (required for "snooze")'}, 'per_page': {'type': 'number', 'description': 'Results per page for "list" (default: 20)'}, 'frequency': {'enum': ['one_time', 'weekly', 'monthly', 'yearly'], 'type': 'string', 'description': 'Frequency (default: one_time, optional for "create" and "update")'}, 'contact_id': {'type': 'string', 'description': 'The contact ID (required for "create", optional filter for "list")'}, 'description': {'type': 'string', 'description': 'Description (optional for "create" and "update")'}, 'reminder_date': {'type': 'string', 'description': 'When to remind (ISO date YYYY-MM-DD) (required for "create", optional for "update")'}, 'include_deleted': {'type': 'boolean', 'description': 'Include soft-deleted reminders in "list" results (default: false)'}}}
tag_manage
Manage tags and contact tagging. • action="list": List all tags for the authenticated user. No additional fields required. • action="create": Create a new tag (or return existing if name already exists). Requires name. • action="update": Update a tag name. Requires id and name. • action="delete": Delete a tag. Requires id. • action="tag_contact": Tag a contact. Creates the tag if it doesn't exist. Requires name (the tag name) and contact_id. • action="untag_contact": Remove a tag from a contact. Requires id (the tag ID) and contact_id.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The tag ID (required for update, delete, untag_contact)'}, 'name': {'type': 'string', 'description': 'Tag name (required for create and tag_contact)'}, 'action': {'enum': ['list', 'create', 'update', 'delete', 'tag_contact', 'untag_contact'], 'type': 'string', 'description': 'Action to perform'}, 'contact_id': {'type': 'string', 'description': 'The contact ID (required for tag_contact and untag_contact)'}}}
task_manage
Create, list, update, complete, delete, or restore tasks. • action="create": Create a task. Requires title. Optional description, contact_id, due_date, priority. • action="list": List tasks. Optional contact_id, status, priority, page, per_page, include_deleted. • action="update": Update a task. Requires id. Optional title, description, contact_id, due_date, priority, status. • action="complete": Mark a task as completed. Requires id. • action="delete": Soft-delete a task. Requires id. • action="restore": Restore a soft-deleted task. Requires id.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['action'], 'properties': {'id': {'type': 'string', 'description': 'The task ID (required for "update", "complete", "delete", "restore")'}, 'page': {'type': 'number', 'description': 'Page number for "list" (default: 1)'}, 'title': {'type': 'string', 'description': 'Task title (required for "create", optional for "update")'}, 'action': {'enum': ['create', 'list', 'update', 'complete', 'delete', 'restore'], 'type': 'string', 'description': 'Action to perform'}, 'status': {'enum': ['pending', 'in_progress', 'completed'], 'type': 'string', 'description': 'Status (optional for "update", filter for "list")'}, 'due_date': {'type': 'string', 'description': 'Due date (ISO date, optional for "create" and "update")'}, 'per_page': {'type': 'number', 'description': 'Results per page for "list" (default: 20)'}, 'priority': {'enum': ['low', 'medium', 'high'], 'type': 'string', 'description': 'Priority (optional for "create"/"update", filter for "list")'}, 'contact_id': {'type': 'string', 'description': 'Link to a contact (optional for "create"/"update", filter for "list")'}, 'description': {'type': 'string', 'description': 'Description (optional for "create" and "update")'}, 'include_deleted': {'type': 'boolean', 'description': 'Include soft-deleted tasks in "list" results (default: false)'}}}
upcoming_birthdays
Find contacts with birthdays coming up within a time window or in a specific month. Returns contacts sorted by soonest birthday first, with age calculations when available.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'month': {'type': 'number', 'maximum': 12, 'minimum': 1, 'description': 'Optional: show all birthdays in a specific month (1-12) instead of using days_ahead'}, 'days_ahead': {'type': 'number', 'maximum': 365, 'minimum': 1, 'description': 'Look-ahead window in days from today (default: 30). Ignored if month is provided.'}}}
upcoming_reminders
Find upcoming and overdue reminders across all contacts. Returns reminders sorted by date (overdue first, then soonest upcoming).
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'status': {'enum': ['active', 'snoozed'], 'type': 'string', 'description': 'Filter by reminder status (default: active)'}, 'days_ahead': {'type': 'number', 'maximum': 365, 'minimum': 1, 'description': 'Look-ahead window in days from today (default: 14)'}, 'include_overdue': {'type': 'boolean', 'description': 'Include overdue reminders with reminder_date before today (default: true)'}}}
Added
manage_push_notifications
Sept. 17, 2026, 12:40 p.m.
Added
manage_settings
Sept. 17, 2026, 12:40 p.m.
Added
batch_create_activities
Sept. 17, 2026, 12:40 p.m.
Added
batch_tag_contacts
Sept. 17, 2026, 12:40 p.m.
Added
batch_create_contacts
Sept. 17, 2026, 12:40 p.m.
Added
upcoming_reminders
Sept. 17, 2026, 12:40 p.m.
Added
contacts_needing_attention
Sept. 17, 2026, 12:40 p.m.
Added
global_search
Sept. 17, 2026, 12:40 p.m.
Added
upcoming_birthdays
Sept. 17, 2026, 12:40 p.m.
Added
prime
Sept. 17, 2026, 12:40 p.m.
Added
data_statistics
Sept. 17, 2026, 12:40 p.m.
Added
data_export
Sept. 17, 2026, 12:40 p.m.
Added
task_manage
Sept. 17, 2026, 12:40 p.m.
Added
debt_manage
Sept. 17, 2026, 12:40 p.m.
Added
gift_list
Sept. 17, 2026, 12:40 p.m.
Added
gift_manage
Sept. 17, 2026, 12:40 p.m.
Added
notification_read
Sept. 17, 2026, 12:40 p.m.
Added
notification_create
Sept. 17, 2026, 12:40 p.m.
Added
notification_list
Sept. 17, 2026, 12:40 p.m.
Added
reminder_manage
Sept. 17, 2026, 12:40 p.m.
Added
contact_timeline
Sept. 17, 2026, 12:40 p.m.
Added
life_event_manage
Sept. 17, 2026, 12:40 p.m.
Added
activity_type_manage
Sept. 17, 2026, 12:40 p.m.
Added
activity_list
Sept. 17, 2026, 12:40 p.m.
Added
activity_manage
Sept. 17, 2026, 12:40 p.m.
Added
tag_manage
Sept. 17, 2026, 12:40 p.m.
Added
note_list
Sept. 17, 2026, 12:40 p.m.
Added
note_manage
Sept. 17, 2026, 12:40 p.m.
Added
relationship_manage
Sept. 17, 2026, 12:40 p.m.
Added
custom_field_manage
Sept. 17, 2026, 12:40 p.m.