io.favcrm/favcrm
Official220 toolsby favcrm
FavCRM
Agentic CRM for service businesses — bookings, customers, WhatsApp, loyalty, invoicing.
Manage bookings, customers, WhatsApp messaging, loyalty programs, and invoicing.
Topics
Captured live from the server via tools/list.
search_members
Search and filter members/accounts. Supports text search, date ranges, booking/activity history, membership tier, tags, and more. Use lastBookingBefore/inactiveDays to find inactive members.
Parameters (18)
- searchstring
Name, email, or phone to search
- lifeStagestring
Filter by life stage
- hasMembershipboolean
Filter to members with active membership
- createdAfterstring
ISO date — accounts created after this date
- createdBeforestring
ISO date — accounts created before this date
- lastBookingBeforestring
ISO date — members whose last booking is before this date (or have no bookings)
- lastBookingAfterstring
ISO date — members who have a booking after this date
- hasBookingboolean
Filter to members with/without any booking
- lastActivityBeforestring
ISO date — members with no activity since this date
- lastActivityAfterstring
ISO date — members with activity after this date
- inactiveDaysnumber
Members with no activity in the last N days
- tierIdstring
Filter by membership tier ID
- membershipStatusstring
Filter by membership status
- sourcestring
Filter by account source
- tagIdsarray
Filter by tag IDs
- sortstring
Sort column: name, email, or createdAt
- orderstring
Sort order
- limitnumber
Max results (default 20)
get_member_profile
Get detailed profile for a specific member/account by ID.
Parameters (1)
- accountIdstringrequired
The account ID
preview_customer_import
Preview a bulk customer import (max 2000 rows). Matches existing accounts by phone/email and shows create vs update actions plus points/stamps/credit deltas. Use commit_customer_import with the returned sessionId to apply.
Parameters (2)
- filenamestring
Original filename for audit
- rowsarrayrequired
commit_customer_import
Commit a previewed customer import. Pass the same rows and sessionId returned by preview_customer_import. Creates/updates accounts and applies points, stamps, and credit deltas.
Parameters (2)
- sessionIdstringrequired
sessionId from preview_customer_import
- rowsarrayrequired
create_account
Create a CRM account/customer with a primary contact. Optionally enroll the account as a member; use enrol_membership later when the account already exists.
Parameters (13)
- namestringrequired
Account/customer display name
- firstNamestring
First name for individual accounts
- lastNamestring
Last name for individual accounts
- emailstring
Email address
- phonestring
Phone number
- typestring
Account type. Defaults to individual.
- lifeStagestring
CRM life stage. Defaults to active.
- sourcestring
Acquisition source. Defaults to api.
- notesstring
Internal notes
- enrollMembershipboolean
Whether to create an active membership immediately
- tierIdstring
Membership tier ID to enroll into. If omitted, the company default tier may apply.
- expiresAtstring
Optional ISO expiry for the membership
- addressobject
Postal address
update_account
Update CRM account/customer profile fields such as name, phone, email, life stage, owner, notes, or member code.
Parameters (15)
- accountIdstringrequired
The account ID to update
- namestring
Account/customer display name
- firstNameany
First name for individual accounts
- lastNameany
Last name for individual accounts
- emailstring
Email address
- phonestring
Phone number
- typestring
Account type
- lifeStagestring
CRM life stage
- sourcestring
Acquisition source
- assignedToany
Assigned team member user ID, or null to clear
- notesstring
Internal notes
- memberCodeany
Merchant member code, or null to clear
- referredByAccountIdany
Referrer account ID, or null to clear
- genderstring
Gender
- dateOfBirthany
YYYY-MM-DD date of birth, or null to clear
delete_account
Soft-delete a CRM account/customer. This releases the primary phone for future reuse while keeping account history for audit.
Parameters (1)
- accountIdstringrequired
The account ID to soft-delete
list_tags
List all available tags for the merchant.
Parameters (1)
- searchstring
Search tags by name
create_tag
Create a CRM tag for customer segmentation and organization.
Parameters (2)
- namestringrequired
Tag name
- colorstring
Optional display color, e.g. #2563eb
update_tag
Rename or recolor an existing CRM tag.
Parameters (3)
- tagIdstringrequired
The tag ID to update
- namestring
New tag name
- colorany
New color, or null to clear
delete_tag
Delete a CRM tag and remove it from all tagged entities.
Parameters (1)
- tagIdstringrequired
The tag ID to delete
attach_tags
Attach one or more tags to a member/account. Useful for segmenting members after filtering.
Parameters (2)
- accountIdsarrayrequired
Member/account IDs to tag (max 100)
- tagIdstringrequired
Tag ID to attach
detach_tags
Detach one tag from one or more member/account records.
Parameters (2)
- accountIdsarrayrequired
Member/account IDs to untag (max 100)
- tagIdstringrequired
Tag ID to detach
list_tiers
List all membership tiers with member counts and stats.
No parameters.
get_membership_tier
Get a specific membership tier by ID.
Parameters (1)
- tierIdstringrequired
The tier ID
issue_rewards
Issue a gift/reward to multiple members. Requires a gift offer ID and member IDs.
Parameters (3)
- giftOfferIdstringrequired
The gift offer/reward scheme ID to issue
- memberIdsarrayrequired
Member/account IDs to receive the reward (max 50)
- expiresAtstring
Optional ISO date when the reward expires
enrol_membership
Enrol a member into a membership tier. Free tiers enrol immediately; paid tiers return PAYMENT_REQUIRED unless skipPriceCheck is set. Use list_tiers first to find the target tier.
Parameters (3)
- accountIdstringrequired
The member/account ID to enrol
- tierIdstring
The membership tier ID. Omit to enrol on the default no-tier membership.
- expiresAtstring
Optional ISO date to override the tier-computed expiry.
get_loyalty_balance
Get a member's current loyalty balance — points, stamps, credits, lifetime totals, and active membership tier. Returns null if the member is not enrolled.
Parameters (1)
- accountIdstringrequired
The member/account ID
earn_loyalty_points
Credit loyalty points or stamps to a member. Use field="points" for points, "stamps" for stamps. Server records a transaction with the reason as audit context.
Parameters (4)
- accountIdstringrequired
The member/account ID
- fieldstringrequired
Which loyalty unit to credit
- amountintegerrequired
Positive integer amount to credit
- reasonstring
Audit-trail reason (e.g. "Booking completed", "Manual adjustment")
get_dashboard_stats
Get high-level business KPIs: member count, new members this week, active subscriptions, total points issued, active promotions, rewards redeemed, messages sent.
No parameters.
list_bookings
List bookings with filters for date range, status, service, staff, or member.
Parameters (7)
- statusstring
Filter by booking status
- serviceIdstring
Filter by service ID
- staffIdstring
Filter by staff member ID
- accountIdstring
Filter by member/account ID
- dateFromstring
ISO date — bookings from this date
- dateTostring
ISO date — bookings up to this date
- limitnumber
Max results (default 20)
get_booking_detail
Get full booking details including line items, status history, and participants.
Parameters (1)
- bookingIdstringrequired
The booking ID
get_booking_stats
Get booking counts: today, this week, this month, and breakdown by status.
No parameters.
get_available_slots
Find available booking slots for a service on a specific date.
Parameters (4)
- serviceIdstringrequired
The service to check availability for
- datestringrequired
ISO date to check (YYYY-MM-DD)
- staffIdstring
Optional: filter by specific staff member
- resourceIdstring
Optional: filter by specific resource
list_services
List booking services with name, price, duration, and status.
Parameters (3)
- statusstring
Filter by status
- searchstring
Search by name
- limitnumber
Max results (default 20)
get_service_detail
Get full service details including addons, staff, resources, and tier pricing.
Parameters (1)
- serviceIdstringrequired
The service ID
create_service
Create a bookable service. Sets duration, price, capacity, and policies. Use list_service_categories first if you want to attach to an existing category.
Parameters (20)
- namestringrequired
Service name
- durationMinutesnumberrequired
Duration of one booking in minutes
- pricestring
Decimal string, e.g. "80.00". Defaults to "0".
- currencystring
ISO currency code, default HKD
- capacitynumber
How many participants per slot (default 1)
- categoryIdstring
Existing service category ID
- descriptionstring
Description
- typestring
Default one_on_one
- cooldownMinutesnumber
Minimum gap before bookings can be cancelled (default 0)
- requiresStaffboolean
Whether the service requires staff assignment
- requiresResourceboolean
Whether the service requires a resource (room/equipment)
- requiresConfirmationboolean
If true, bookings start as pending and need confirm_booking
- requireLoginboolean
Default true — guests cannot book
- visibilitystring
Visibility: public | members_only | hidden
- allowedTierIdsarray
Required when visibility=members_only
- statusstring
Default active
- sortOrdernumber
Sort order (lower = earlier)
- commissionTypeany
Commission type: "fixed" or "percentage"
- commissionValueany
Commission amount as decimal string
- commissionCurrencyany
Commission currency (ISO code)
update_service
Update an existing booking service. Pass only the fields you want to change.
Parameters (17)
- serviceIdstringrequired
Service ID to update
- namestring
Name
- descriptionstring
Description
- durationMinutesnumber
Duration of one booking in minutes
- pricestring
Decimal string, e.g. "80.00"
- capacitynumber
Participants per slot
- categoryIdany
Category ID
- statusstring
Status filter
- visibilitystring
Visibility: public | members_only | hidden
- requiresStaffboolean
Whether the service requires staff assignment
- requiresResourceboolean
Whether the service requires a resource (room/equipment)
- requiresConfirmationboolean
If true, bookings start pending and need explicit confirmation
- requireLoginboolean
If true, guests cannot book without an account
- cooldownMinutesnumber
Cooldown minutes between bookings
- commissionTypeany
Commission type: "fixed" or "percentage"
- commissionValueany
Commission amount as decimal string
- commissionCurrencyany
Commission currency (ISO code)
create_service_schedule
Create a bookable schedule window for a service, including recurring weekly/daily availability.
Parameters (12)
- serviceIdstringrequired
Service ID
- datestringrequired
Start date or one-off date (YYYY-MM-DD)
- startTimestringrequired
HH:MM (24h)
- endTimestringrequired
HH:MM (24h)
- maxCapacitynumber
Max bookings per generated slot
- staffIdstring
Optional companyMembers.id to bind this schedule to staff
- resourceIdstring
Optional resource ID to bind this schedule to a room/resource
- recurrencestring
Default none
- recurrenceIntervalnumber
Default 1
- byWeekdayarray
Weekdays for weekly recurrence: 0=Mon, 1=Tue, ... 6=Sun
- recurrenceEndDatestring
YYYY-MM-DD
- notesstring
Free-form notes
list_service_schedules
List schedule windows for booking services.
Parameters (7)
- serviceIdstring
Service ID
- staffIdstring
Staff member ID
- resourceIdstring
Resource ID (room/equipment)
- dateFromstring
YYYY-MM-DD
- dateTostring
YYYY-MM-DD
- isOverrideboolean
Filter to override entries only
- limitnumber
Max results (default 20)
update_service_schedule
Update a service schedule window. Pass only fields to change.
Parameters (12)
- scheduleIdstringrequired
Schedule ID
- datestring
Date (YYYY-MM-DD)
- startTimestring
Start time (HH:mm)
- endTimestring
End time (HH:mm)
- maxCapacitynumber
Maximum capacity for this slot
- staffIdany
Staff member ID
- resourceIdany
Resource ID (room/equipment)
- recurrencestring
Recurrence rule: none | daily | weekly | monthly
- recurrenceIntervalnumber
Recurrence interval (e.g. every N weeks)
- byWeekdayany
Weekdays (0=Mon..6=Sun) for weekly recurrence
- recurrenceEndDateany
Recurrence end date (YYYY-MM-DD)
- notesany
Free-form notes
assign_staff_to_service
Assign a staff member to a booking service. Pass users.id from list_staff.userId.
Parameters (2)
- serviceIdstringrequired
Service ID
- userIdstringrequired
users.id from list_staff.userId
link_resource_to_service
Link a room/resource to a booking service.
Parameters (2)
- serviceIdstringrequired
Service ID
- resourceIdstringrequired
Resource ID
list_service_categories
List service categories (groups for booking services like "Treatments", "Classes").
No parameters.
create_service_category
Create a service category (e.g. "Treatments", "Classes") to group bookable services.
Parameters (3)
- namestringrequired
Category name
- descriptionstring
Description
- sortOrdernumber
Sort order (lower = earlier)
create_resource
Create a bookable resource (room, equipment, vehicle). Used by services that have requiresResource=true.
Parameters (5)
- namestringrequired
Resource name (e.g. "Treatment Room A")
- typestringrequired
Free-form type label, e.g. "room", "equipment"
- descriptionstring
Description
- capacitynumber
How many concurrent bookings (default 1)
- statusstring
Default active
set_resource_availability
Add an availability window for a resource. Use day-of-week + recurring=true for weekly schedules, or a specific date for one-off blocks.
Parameters (7)
- resourceIdstringrequired
Resource ID
- startTimestringrequired
HH:MM (24h)
- endTimestringrequired
HH:MM (24h)
- typestring
Default available
- dayOfWeekstring
Day of week (0=Sun..6=Sat)
- datestring
YYYY-MM-DD for a specific date instead of dayOfWeek
- isRecurringboolean
Default true
set_staff_availability
Add an availability window for a staff member (companyMembers.id). Use day-of-week + recurring for weekly schedules, or a specific date for one-off changes.
Parameters (7)
- memberIdstringrequired
companyMembers.id of the staff
- startTimestringrequired
HH:MM (24h)
- endTimestringrequired
HH:MM (24h)
- typestring
Default available
- dayOfWeekstring
Day of week (0=Sun..6=Sat)
- datestring
YYYY-MM-DD for a specific date instead of dayOfWeek
- isRecurringboolean
Default true
get_booking_settings
Get global booking settings for the customer booking flow, cancellation rules, visibility options, and confirmation requirements.
No parameters.
update_booking_settings
Update global booking settings. Pass only the fields you want to change.
Parameters (15)
- globalCooldownDaysany
Minimum days between customer bookings, or null to disable
- cooldownMessageany
Optional message shown when cooldown blocks a booking
- blockUntilFinishedboolean
Block customers from booking again while they have active bookings
- showCouponboolean
Show coupon field in booking flow
- showAccessPassboolean
Show access pass/package options in booking flow
- calendarStylestring
Booking flow calendar presentation
- hideUnavailableTimeslotsboolean
Hide unavailable timeslots instead of showing them as full
- bookingReminderEnabledboolean
Send the default pre-booking reminder
- bookingReminderLeadHoursinteger
Hours before booking start for the default reminder
- sameDayReminderEnabledboolean
Send an additional same-day reminder before booking start
- sameDayReminderLeadHoursinteger
Hours before booking start for the same-day reminder
- allowMemberCancellationboolean
Allow members to cancel bookings from the customer portal
- memberCancellationCutoffHoursany
Hours before booking start when member cancellation closes, or null for no cutoff
- minimumAdvanceBookingMinutesany
Minutes before slot start when customer booking closes. null uses service duration; 0 disables cutoff
- requireBookingConfirmationboolean
Require merchant confirmation before bookings are confirmed
list_tickets
List support tickets with optional filters.
Parameters (6)
- statusstring
Filter by status
- prioritystring
Filter by priority
- categorystring
Filter by category
- accountIdstring
Filter by CRM account ID
- searchstring
Search by subject
- limitnumber
Max results (default 20)
get_ticket_stats
Get ticket counts grouped by status.
No parameters.
create_ticket
Create a support ticket for a member issue.
Parameters (9)
- subjectstringrequired
Ticket subject/title
- descriptionstring
Detailed description of the issue
- categorystring
Ticket category
- prioritystring
Ticket priority
- sourcestring
Where the ticket originated
- accountIdstring
Member/account ID this ticket is about
- contactNamestring
Contact name if no account ID
- contactEmailstring
Contact email if no account ID
- contactPhonestring
Contact phone if no account ID
update_ticket_status
Update the status of an existing support ticket.
Parameters (2)
- ticketIdstringrequired
The ticket ID to update
- statusstringrequired
New status
list_surveys
List surveys with optional status/search filters.
Parameters (3)
- statusstring
Filter by survey status
- searchstring
Search survey title or description
- limitnumber
Max results (default 20)
create_survey
Create a survey with custom question blocks. Publish it later or set status to published for immediate portal access.
Parameters (9)
- titlestringrequired
Survey title
- descriptionstring
Optional survey description
- slugstring
Optional URL slug; generated from title when omitted
- statusstring
Initial status
- visibilitystring
Who can access the survey
- questionBlocksarrayrequired
Ordered survey question blocks
- settingsobject
Survey settings such as allowMultipleResponses, collectEmail, collectIpAddress, requireAuthentication, showProgress, successMessage
- openAtstring
Optional ISO datetime when the survey opens
- closeAtstring
Optional ISO datetime when the survey closes
get_survey
Get survey detail, including blocks, publishing status, visibility, settings, and response count.
Parameters (1)
- surveyIdstringrequired
Survey ID
update_survey
Update a survey draft or publishing configuration. Use questionBlocks to replace the ordered form block list.
Parameters (10)
- surveyIdstringrequired
Survey ID
- titlestring
Survey title
- descriptionany
Survey description
- slugstring
URL slug
- statusstring
Survey status
- visibilitystring
Survey access mode
- questionBlocksarray
Ordered survey question blocks
- settingsobject
Survey settings such as allowMultipleResponses, collectEmail, collectIpAddress, requireAuthentication, showProgress, successMessage
- openAtany
Optional ISO datetime when the survey opens
- closeAtany
Optional ISO datetime when the survey closes
archive_survey
Archive a survey and remove it from active survey lists.
Parameters (1)
- surveyIdstringrequired
Survey ID to archive
get_survey_stats
Get response and invitation metrics for a survey overview dashboard.
Parameters (1)
- surveyIdstringrequired
Survey ID
get_survey_responses
List responses for a survey.
Parameters (2)
- surveyIdstringrequired
Survey ID
- limitnumber
Max responses (default 50)
list_survey_invitations
List survey invitation history without exposing token hashes or old invitation tokens.
Parameters (2)
- surveyIdstringrequired
Survey ID
- limitnumber
Max invitations (default 50)
create_survey_invitation
Create a token-auth survey invitation for a specific member/account or contact.
Parameters (9)
- surveyIdstringrequired
Survey ID
- accountIdstring
CRM account ID to invite
- contactIdstring
Contact ID to invite
- recipientEmailstring
Recipient email for link tracking
- recipientPhonestring
Recipient phone for link tracking
- recipientNamestring
Recipient display name for link tracking
- channelstring
Intended channel, e.g. email, sms, whatsapp, link
- expiresAtstring
Optional invitation expiry ISO datetime
- metadataobject
Optional invitation metadata
list_survey_workflows
List automation workflows attached to a survey.
Parameters (1)
- surveyIdstringrequired
Survey ID
upsert_survey_workflow
Create or update a survey automation workflow, usually triggered by survey_response_submitted.
Parameters (6)
- surveyIdstringrequired
Survey ID
- workflowIdstring
Existing workflow ID when updating
- namestringrequired
Workflow name
- statusstring
Workflow status
- triggerstring
Trigger name, default from graph.trigger
- graphobjectrequired
Workflow graph definition
list_deals
List CRM deals (sales pipeline) with optional filters.
Parameters (6)
- pagenumber
Page number (default 1)
- limitnumber
Items per page (default 20)
- searchstring
Search by name or description
- accountIdstring
Filter by account
- stagestring
Filter by stage
- dealTypestring
Filter by deal type
get_deal
Get detailed CRM deal information by ID.
Parameters (1)
- dealIdstringrequired
The deal ID
create_deal
Create a CRM sales pipeline deal, optionally linked to a customer account and contact.
Parameters (10)
- namestringrequired
Deal name
- accountIdany
Linked CRM account ID
- contactIdany
Linked contact ID
- amountany
Deal amount
- closingDateany
Expected closing date
- stageany
Pipeline stage
- probabilityany
Win probability, e.g. 25
- dealTypeany
Deal type/category
- descriptionany
Deal notes or description
- ownerIdany
Owner user/team member ID
update_deal
Update a CRM deal. Pass only fields to change; use null for nullable links/fields to clear them.
Parameters (11)
- dealIdstringrequired
The deal ID
- namestring
Deal name
- accountIdany
Linked CRM account ID, or null to clear
- contactIdany
Linked contact ID, or null to clear
- amountany
Deal amount, or null to clear
- closingDateany
Expected closing date, or null to clear
- stageany
Pipeline stage, or null to clear
- probabilityany
Win probability, or null to clear
- dealTypeany
Deal type/category, or null to clear
- descriptionany
Deal notes or description, or null to clear
- ownerIdany
Owner user/team member ID, or null to clear
delete_deal
Soft-delete a CRM deal from the sales pipeline.
Parameters (1)
- dealIdstringrequired
The deal ID to delete
update_deal_stage
Move a deal to a different pipeline stage.
Parameters (3)
- dealIdstringrequired
The deal ID
- stagestringrequired
New stage
- probabilitystring
Optional win probability (percent string)
list_contacts
List contacts (people linked to CRM accounts), optionally filtered by account or search.
Parameters (3)
- accountIdstring
Filter by account
- searchstring
Match name, email, or phone
- limitnumber
Max results (default 20)
get_contact
Fetch a single contact by ID.
Parameters (1)
- contactIdstringrequired
The contact ID
create_contact
Create a contact on an existing CRM account.
Parameters (6)
- accountIdstringrequired
Owning account ID
- namestringrequired
Contact name
- emailstring
Email
- phonestring
Phone
- jobTitlestring
Job title
- isPrimaryboolean
Mark as primary contact
update_contact
Update fields on an existing contact.
Parameters (6)
- contactIdstringrequired
The contact ID
- namestring
Name
- emailstring
Email address
- phonestring
Phone number
- jobTitlestring
Job title
- isPrimaryboolean
Mark as the primary contact
set_primary_contact
Set a contact as the primary contact for its CRM account and demote other contacts on that account.
Parameters (1)
- contactIdstringrequired
The contact ID to make primary
delete_contact
Delete a secondary contact. Primary contacts are protected; set another primary contact or delete the account instead.
Parameters (1)
- contactIdstringrequired
The contact ID to delete
list_custom_fields
List custom field definitions for CRM entities such as account, contact, deal, or booking.
Parameters (1)
- entityTypestringrequired
Entity type the custom fields belong to
get_custom_field
Get a custom field definition by ID.
Parameters (1)
- definitionIdstringrequired
Custom field definition ID
create_custom_field
Create a custom field definition for CRM entities. Use options for select or multiselect fields.
Parameters (7)
- entityTypestringrequired
Entity type, e.g. account, contact, deal, booking
- fieldNamestringrequired
Stable machine name, e.g. preferred_branch
- fieldLabelstringrequired
Human-readable label, e.g. Preferred branch
- fieldTypestringrequired
Field type
- optionsarray
Allowed values for select/multiselect fields
- isRequiredboolean
Whether this field is required
- sortOrdernumber
Display order
update_custom_field
Update a custom field definition label, type, options, required flag, or sort order.
Parameters (6)
- definitionIdstringrequired
Custom field definition ID
- fieldLabelstring
Human-readable label
- fieldTypestring
Field type
- optionsarray
Allowed values for select/multiselect fields
- isRequiredboolean
Whether this field is required
- sortOrdernumber
Display order
delete_custom_field
Delete a custom field definition and its stored values.
Parameters (1)
- definitionIdstringrequired
Custom field definition ID
get_custom_field_values
Get custom field values for a CRM entity such as an account, contact, deal, or booking.
Parameters (2)
- entityTypestringrequired
Entity type
- entityIdstringrequired
Entity ID
set_custom_field_values
Set or clear custom field values for a CRM entity. Values are stored as strings; pass null to clear a value.
Parameters (3)
- entityTypestringrequired
Entity type
- entityIdstringrequired
Entity ID
- valuesarrayrequired
Values to upsert
list_tasks
List tasks with optional status, assignee, and account filters.
Parameters (4)
- statusstring
Filter by task status
- assigneeIdstring
Filter by assignee company_members.id
- accountIdstring
Filter by related CRM account
- limitnumber
Max results (default 20)
get_task
Get detailed task information by ID.
Parameters (1)
- taskIdstringrequired
The task ID
create_task
Create a task. Optionally link to a CRM account or assign to a team member.
Parameters (7)
- titlestringrequired
Task title
- descriptionstring
Description
- prioritystring
Priority
- statusstring
Status filter
- assigneeIdstring
company_members.id
- accountIdstring
Linked CRM account
- dueDatestring
ISO date (YYYY-MM-DD)
update_task
Update a task (status, priority, assignee, due date, completion).
Parameters (7)
- taskIdstringrequired
The task ID
- statusstring
Status filter
- prioritystring
Priority
- titlestring
Title
- descriptionstring
Description
- assigneeIdstring
Assignee user ID
- dueDatestring
Due date (ISO 8601)
delete_task
Soft-delete a CRM task.
Parameters (1)
- taskIdstringrequired
The task ID to delete
search_crm
Search across CRM accounts and contacts by name, email, or phone.
Parameters (2)
- querystringrequired
Search string
- limitnumber
Max per entity (default 10)
list_invoices
List invoices with optional filters. Use status "OVERDUE" to find unpaid invoices past due date.
Parameters (5)
- statusstring
Filter by invoice status
- searchstring
Search by invoice number, account name, email, or phone
- sortstring
Sort column
- orderstring
Sort order
- limitnumber
Max results (default 20)
get_invoice
Fetch a single invoice with line items, payment history, and customer detail.
Parameters (1)
- invoiceIdstringrequired
Invoice ID
create_invoice
Create a new invoice for a customer. Optionally include line items inline. Returns the new invoiceId.
Parameters (5)
- accountIdstringrequired
Customer accountId (CRM account)
- currencystring
ISO currency code (defaults to company default)
- dueDatestring
Due date (ISO 8601 date)
- notesstring
Free-form notes shown on the invoice
- lineItemsarray
Line items to bill — totals are computed server-side
record_invoice_payment
Record a manual payment against an invoice (cash, bank transfer, cheque, card terminal). Updates invoice status to PARTIAL or PAID based on the running total.
Parameters (5)
- invoiceIdstringrequired
Invoice ID to record payment against
- amountstringrequired
Payment amount as decimal string, e.g. "100.00"
- methodstringrequired
Payment method
- referencestring
External reference (cheque number, bank transfer ID)
- notestring
Internal note about this payment
mark_invoice_sent
Mark an invoice as sent to the customer (transitions DRAFT → OPEN). Use after delivering the invoice via email or share link. Idempotent.
Parameters (1)
- invoiceIdstringrequired
Invoice ID
void_invoice
Void an invoice. Destructive — invoice can no longer be paid or edited; existing payments are preserved as history. Cannot void invoices that are already PAID or VOIDED.
Parameters (1)
- invoiceIdstringrequired
Invoice ID to void
delete_invoice
Delete a DRAFT invoice. Only invoices that have never been sent can be deleted; otherwise use void_invoice.
Parameters (1)
- invoiceIdstringrequired
Invoice ID to delete
restore_invoice
Restore a previously deleted DRAFT invoice.
Parameters (1)
- invoiceIdstringrequired
Invoice ID to restore
get_invoice_stats
Outstanding totals, overdue counts, and revenue this period. Used by the weekly-snapshot playbook.
No parameters.
list_subscriptions
List member subscriptions. Filter by status to find active, cancelled, or past-due subscriptions.
Parameters (2)
- statusstring
Filter by subscription status
- limitnumber
Max results (default 20)
get_subscription
Fetch a single subscription with customer, tier, billing cycle, and renewal info.
Parameters (1)
- subscriptionIdstringrequired
Subscription ID
create_subscription
Create a recurring subscription for a member. Bind to a membership tier or set a custom amount + cycle.
Parameters (8)
- accountIdstringrequired
Customer accountId
- tierIdstring
Membership tier ID — if set, amount/currency default from the tier
- billingCyclestring
Billing cycle (default monthly)
- amountnumber
Override amount per cycle (otherwise derived from tier)
- currencystring
ISO currency code (otherwise derived from tier or company default)
- autoRenewboolean
Auto-renew at period end (default true)
- currentPeriodStartstring
Period start (ISO 8601). Defaults to now.
- currentPeriodEndstring
Period end (ISO 8601). Defaults to start + cycle.
pause_subscription
Pause an active subscription (status → past_due, no further auto-renew). Use resume_subscription to reactivate.
Parameters (1)
- subscriptionIdstringrequired
Subscription ID
resume_subscription
Resume a paused subscription back to active.
Parameters (1)
- subscriptionIdstringrequired
Subscription ID
cancel_subscription
Cancel a subscription. Destructive — turns off auto-renew and prevents further billing cycles. Existing paid periods stay valid until end.
Parameters (1)
- subscriptionIdstringrequired
Subscription ID
list_campaigns
List marketing campaigns (email, SMS, WhatsApp) with delivery stats.
Parameters (5)
- channelstring
Filter by channel
- searchstring
Search by campaign name
- sortstring
Sort column
- orderstring
Sort order
- limitnumber
Max results (default 20)
create_campaign
Create a marketing campaign (email, SMS, or WhatsApp) in DRAFT. For email channelConfig, use subject + htmlBody + optional plainTextBody. recipientSource="list" is accepted as an alias for "individual".
Parameters (8)
- namestringrequired
Campaign name (internal)
- channelstringrequired
email | sms | whatsapp | push
- statusstring
Default DRAFT
- recipientSourcestring
Where to source recipients from. "list" is normalized to "individual".
- segmentIdany
Required if recipientSource="segment"
- recipientIdsarray
Required if recipientSource="individual", "list", or "csv"; values are account IDs
- channelConfigobject
Channel-specific config: subject + htmlBody for email, body for sms/whatsapp, templateId, etc. Legacy email html is normalized to htmlBody.
- scheduledAtany
ISO datetime for scheduled send (status must be SCHEDULED)
update_campaign
Update an existing campaign. Channel cannot be changed after creation. Pass only fields to change.
Parameters (8)
- campaignIdstringrequired
Campaign ID
- namestring
Name
- statusstring
Status filter
- recipientSourcestring
Recipient source: segment | tier | manual
- segmentIdany
Segment ID
- recipientIdsarray
Explicit recipient user IDs
- channelConfigobject
For email, use subject + htmlBody + optional plainTextBody. Legacy html is normalized to htmlBody.
- scheduledAtany
Scheduled timestamp (ISO 8601)
delete_campaign
Delete a campaign. Only allowed in DRAFT status; sent campaigns are kept for audit history.
Parameters (1)
- campaignIdstringrequired
Campaign ID
restore_campaign
Restore a previously deleted campaign.
Parameters (1)
- campaignIdstringrequired
Campaign ID
validate_campaign
Validate a campaign before sending. Resolves contactable recipient count and previews the final email subject/body without sending.
Parameters (1)
- campaignIdstringrequired
Campaign ID to validate
list_notification_logs
List notification delivery logs for the current company. Recipients are masked by default for incident-response safety.
Parameters (8)
- channelstring
Notification channel filter
- eventTypestring
Event type filter
- statusstring
Status filter
- recipientstring
Substring search on recipient
- entityIdstring
Entity ID filter
- dateFromstring
ISO timestamp lower bound
- dateTostring
ISO timestamp upper bound
- limitnumber
Max results (default 50, max 100)
list_conversations
List messaging conversations across channels (WhatsApp, SMS, email, etc). Shows unread counts and last message time.
Parameters (4)
- channelstring
Filter by channel
- statusstring
Filter by conversation status
- searchstring
Search by contact name, phone, or email
- limitnumber
Max results (default 20)
create_broadcast
Create a DRAFT WhatsApp or SMS broadcast campaign. The broadcast is NOT sent — admin must review and send it from the Broadcasts page.
Parameters (5)
- namestringrequired
Campaign name
- channelstring
Channel (default whatsapp)
- templateIdstring
Message template ID to use
- recipientFilterobject
Filter criteria for recipients, e.g. { tagIds: ["..."] }
- scheduledAtstring
ISO date to schedule the broadcast
list_audit_logs
List recent audit log entries for this company. Filter by action, resource, resourceId, user, source, outcome, destructive flag, and created date range.
Parameters (10)
- limitinteger
Maximum rows to return
- actionstring
Exact tool/action name, e.g. delete_campaign
- resourcestring
Resource name, e.g. campaigns
- resourceIdstring
Resource ID
- userIdstring
Actor user ID
- sourcestring
Audit source, e.g. mcp, ai_agent, payment_webhook, merchant_api
- outcomestring
Execution outcome
- destructiveboolean
Whether the audited tool was destructive
- createdAfterstring
ISO timestamp lower bound
- createdBeforestring
ISO timestamp upper bound
search_audit_logs
Search audit logs by free text across action, resource, resource ID, changes JSON, and metadata JSON.
Parameters (4)
- querystringrequired
Text to search for
- limitinteger
Maximum rows to return
- createdAfterstring
ISO timestamp lower bound
- createdBeforestring
ISO timestamp upper bound
get_audit_log
Fetch a single audit log entry by ID, including before/after snapshots when available.
Parameters (1)
- auditLogIdstringrequired
Audit log ID
revert_audit_action
Revert an audited action by restoring the captured before snapshot. Only works for allowlisted target tables with full before/after audit snapshots.
Parameters (2)
- auditLogIdstringrequired
Audit log ID to revert
- reasonstring
Reason for reverting this action
clone
Duplicate an existing record (product, tier, campaign, post, service package, promotion, gift offer). Creates a copy in DRAFT status with "(Copy)" appended to the name.
Parameters (3)
- entityTypestringrequired
Type of entity to clone
- entityIdstringrequired
ID of the entity to clone
- namestring
Override the name of the cloned entity (defaults to "Original Name (Copy)")
list_notes
List notes attached to a member/account, booking, or ticket.
Parameters (3)
- entityTypestringrequired
Type of entity the notes are on
- entityIdstringrequired
The entity ID
- limitnumber
Max results (default 10)
create_note
Add a note to a member/account, booking, ticket, or invoice.
Parameters (4)
- entityTypestringrequired
Type of entity
- entityIdstringrequired
The entity ID
- bodystringrequired
Note content
- isPinnedboolean
Pin this note to the top
confirm_booking
Confirm a pending booking.
Parameters (1)
- bookingIdstringrequired
The booking ID to confirm
cancel_booking
Cancel a booking. Optionally provide a reason.
Parameters (2)
- bookingIdstringrequired
The booking ID to cancel
- reasonstring
Cancellation reason
complete_booking
Mark a booking as completed. Triggers commission calculation if configured.
Parameters (1)
- bookingIdstringrequired
The booking ID to complete
mark_no_show
Mark a booking as no-show when the customer did not attend.
Parameters (1)
- bookingIdstringrequired
The booking ID to mark as no-show
list_promotions
List promotion/coupon codes with optional status filter.
Parameters (3)
- statusstring
Filter by status
- searchstring
Search by name
- limitnumber
Max results (default 20)
get_promotion
Get details of a specific promotion/coupon code.
Parameters (1)
- promotionIdstringrequired
The promotion ID
create_promotion
Create a promotion / discount code. type=percentage or fixed_amount; value is the discount as a string ("10" = 10% or 10 currency units). Codes are uppercased server-side.
Parameters (17)
- namestringrequired
Promotion name (internal)
- codestringrequired
Coupon code customers enter at checkout (auto-uppercased)
- valuestringrequired
Discount value as decimal string
- typestring
Default percentage
- descriptionstring
Description
- maximumDiscountany
Cap on percentage discounts, decimal string
- statusstring
Default active
- startsAtany
ISO datetime — when the promo becomes valid
- endsAtany
ISO datetime — when the promo expires
- usageLimitTotalany
Max total uses across all customers
- usageLimitPerCustomerany
Max uses per single customer
- minimumAmountany
Minimum order amount required, decimal string
- minimumQuantityany
Minimum item count required
- bookingEnabledboolean
Allow on bookings
- eventEnabledboolean
Allow on event registrations
- onlineEnabledboolean
Allow on online shop orders
- posEnabledboolean
Allow at POS
update_promotion
Update an existing promotion. Pass only the fields you want to change.
Parameters (10)
- promotionIdstringrequired
Promotion ID
- namestring
Name
- codestring
Promotion code
- valuestring
Discount value (numeric or decimal string)
- typestring
Type
- statusstring
Status filter
- startsAtany
Start timestamp (ISO 8601)
- endsAtany
End timestamp (ISO 8601)
- usageLimitTotalany
Total usage limit across all customers
- usageLimitPerCustomerany
Usage limit per customer
delete_promotion
Delete a promotion. Past usage records are preserved.
Parameters (1)
- promotionIdstringrequired
Promotion ID
restore_promotion
Restore a previously deleted promotion.
Parameters (1)
- promotionIdstringrequired
Promotion ID
validate_promotion
Check if a promotion code is valid for a given order. Returns isValid, discount amount, and an error code/message if invalid. Use before applying to a checkout.
Parameters (4)
- promotionCodestringrequired
The code customer entered
- channelstringrequired
Where the promo is being applied
- amountnumberrequired
Order subtotal in major units (dollars, not cents)
- accountIdstring
Customer account ID — used for per-customer usage limits
list_reward_schemes
List loyalty reward schemes (points/stamps programs) configured for this business.
Parameters (2)
- searchstring
Search by name
- limitnumber
Max results (default 20)
list_staff
List staff/team members in the business.
Parameters (1)
- limitnumber
Max results (default 20)
list_resources
List booking resources (rooms, equipment, etc.).
Parameters (1)
- limitnumber
Max results (default 20)
list_service_packages
List service packages/prepaid session bundles with optional search, status, sorting, and pagination.
Parameters (5)
- searchstring
Search package name
- statusstring
Filter by package status
- sortstring
Sort column: name, price, or createdAt
- orderstring
Sort order
- limitnumber
Max results (default 20)
get_service_package
Get service package detail including applicability and selected booking service/event items.
Parameters (1)
- packageIdstringrequired
Service package ID
create_service_package
Create a service package/prepaid session bundle. Use applicableType=SELECTED with applicableItems to limit the package to specific booking services or events.
Parameters (8)
- namestringrequired
Package name
- descriptionstring
Description
- sessionCountintegerrequired
Number of included sessions
- pricenumberrequired
Package price
- validDaysintegerrequired
Validity window after purchase, in days
- applicableTypestring
Default ALL
- statusstring
Default ACTIVE
- applicableItemsarray
Items used when applicableType=SELECTED
update_service_package
Update an existing service package. Pass only the fields you want to change.
Parameters (9)
- packageIdstringrequired
Service package ID to update
- namestring
Name
- descriptionany
Description
- sessionCountinteger
Number of sessions in the package
- pricenumber
Decimal string, e.g. "80.00"
- validDaysinteger
Validity period in days
- applicableTypestring
What this package applies to: services | products | both
- statusstring
Status filter
- applicableItemsarray
Item IDs the package can be redeemed against
delete_service_package
Delete a service package by ID.
Parameters (1)
- packageIdstringrequired
Service package ID to delete
restore_service_package
Restore a previously deleted service package by ID.
Parameters (1)
- packageIdstringrequired
Service package ID to restore
get_plan_status
Show the current organisation plan, subscription/payment state, enabled modules, and quota usage. Use before deciding whether an agentic operation is allowed.
No parameters.
check_plan_operation
Preflight whether an intended operation is allowed by token scopes, enabled modules, subscription state, and quota. Provide toolName, quotaCode, or moduleCode.
Parameters (4)
- toolNamestring
MCP tool name to preflight, e.g. create_account
- quotaCodestring
Quota code to check, e.g. contacts or mcp_calls_per_minute
- moduleCodestring
Module code to check, e.g. whatsapp or crm
- deltainteger
Planned usage increment. Currently quota checks are single-resource preflights.
list_plan_options
List active FavCRM plans with prices, quotas, included modules, and whether each is the current plan.
No parameters.
create_plan_upgrade_link
Create a Stripe Checkout link for a new paid subscription, or a Stripe Billing Portal link for an existing Stripe subscription. Use only after the user explicitly asks to upgrade or fix billing.
Parameters (5)
- planIdstring
Target plan ID. Use list_plan_options first if unknown.
- planCodestring
Target plan code, e.g. favcrm-lite. Either planId or planCode is required.
- billingCyclestring
- returnUrlstring
Where Stripe should return after checkout/portal. Defaults to merchant billing settings.
- confirmboolean
Required true to create a Stripe-hosted payment or billing link.
create_team_member_invite
Invite a team member to this company and return a one-time MCP accept token. The invited user must verify an email code through accept_team_invite_request and accept_team_invite_verify before membership and API key issuance.
Parameters (6)
- emailstringrequired
Invitee email address
- namestring
Optional display name for a new user
- rolestring
Team member role to grant on acceptance
- permissionsarray
Optional structured module permissions to attach to the company member
- modulesarray
Optional legacy module list to attach to the company member
- expiresInHoursinteger
Invite lifetime in hours. Defaults to 72, max 336.
accept_team_invite_request
Step 1 of agentic team invite acceptance. Validates an invite token and sends a 6-digit verification code to the invited email. Then call accept_team_invite_verify with the code to join and receive an MCP API key.
Parameters (1)
- tokenstringrequired
Invite token returned by create_team_member_invite or from the invite link
accept_team_invite_verify
Step 2 of agentic team invite acceptance. Verifies the emailed code, joins the invited user to the company, and returns a one-time MCP API key for that user.
Parameters (3)
- tokenstringrequired
Invite token returned by create_team_member_invite or from the invite link
- codestringrequired
6-digit code from the invite email
- namestring
Optional display name when creating a new user
get_whatsapp_connection_status
Check whether WhatsApp Business is connected for this company, including WABA/phone metadata and the latest agentic connect session state.
No parameters.
create_whatsapp_connect_link
Create a short-lived browser link for WhatsApp Business Embedded Signup. The user must open the link because Meta requires a browser popup to authorize and choose the WABA/phone number.
Parameters (2)
- onboardingModestring
Use cloud_api for a new WhatsApp Cloud API connection, or coexistence when connecting a WhatsApp Business App number.
- ttlMinutesinteger
Connect link lifetime in minutes. Defaults to 30.
list_my_companies
List all companies/organisations the current user has access to. Use this to see available orgs before switching.
No parameters.
switch_company
Switch the current session to a different company/organisation. Returns a new access token scoped to the target company. All subsequent tool calls will operate on the new company.
Parameters (1)
- companyIdstringrequired
The company ID to switch to (use list_my_companies to find available IDs)
list_posts
List CMS posts (blog posts and/or pages) with optional filters.
Parameters (4)
- typestring
Filter by post type slug (blog_post, page, or any custom type — see list_post_types).
- statusstring
Filter by status
- searchstring
Search by title
- limitnumber
Max results (default 20)
get_post
Get detailed CMS post including content blocks, categories, and tags.
Parameters (1)
- postIdstringrequired
The post ID
create_post
Create a new CMS post (blog_post, page, or any custom post type). The post type must already exist — use list_post_types to discover, create_post_type to add a new one. excerpt = plain-text summary only (auto-derived from blocks if omitted). Structured custom fields go in meta, keyed by the field schema defined with create_post_type_field.
Parameters (16)
- typestringrequired
Post type slug (e.g. blog_post, page, treatment). Must exist in post_types for this company.
- titlestringrequired
Post title
- slugstring
URL slug. Auto-generated from title if omitted; collisions get -2, -3 suffix.
- blocksarray
Ordered array of content blocks. Each block has { id, version, type, data } where type is one of: paragraph, heading, image, list, quote, code, divider, spacer, embed, html, youtube, file, faq, callout, gallery, cta, accordion, product, columns. Unknown types are rejected.
- excerptstring
Plain-text summary only — never JSON. Auto-derived from the first paragraph/heading block if omitted and the post type supports excerpts.
- featuredImagestring
Cover image URL
- statusstring
Status (default draft)
- visibilitystring
Visibility (default public)
- categoryIdsarray
Category IDs (post types with supportsCategories only)
- tagIdsarray
Tag IDs to attach to the post
- metaobject
Structured custom field values, keyed by field key (see list_post_type_fields). Validated against the post type field schema. Use this for all machine-readable data — never put JSON in excerpt.
- seoTitlestring
SEO title override
- seoDescriptionstring
SEO meta description
- parentIdany
Parent post ID for nested types (e.g. pages).
- sortOrdernumber
Sort order (lower = earlier)
- publishedAtany
ISO timestamp; required when status=scheduled.
update_post
Update an existing CMS post (any post type). Only provided fields are changed.
Parameters (17)
- postIdstringrequired
The post ID
- typestring
Change post type (e.g. blog_post → treatment). Slug is re-checked for uniqueness under the new type.
- titlestring
Post title
- slugstring
URL slug (must be unique per company+type).
- blocksarray
Replaces the entire ordered block array. Use append_post_block / replace_post_block / remove_post_block / reorder_post_blocks for per-block edits. Each block: { id, version, type, data }. Types: paragraph, heading, image, list, quote, code, divider, spacer, embed, html, youtube, file, faq, callout, gallery, cta, accordion, product, columns.
- featuredImagestring
Cover image URL
- statusstring
Post status
- visibilitystring
Visibility
- excerptstring
Plain-text summary only — never JSON. Omit to leave unchanged.
- categoryIdsarray
Category IDs
- tagIdsarray
Tag IDs to sync (replaces existing tags)
- metaobject
Custom field values; merged shallowly with existing meta. Use this for structured data, not excerpt.
- seoTitlestring
SEO title override
- seoDescriptionstring
SEO description override
- parentIdany
Parent post ID for nested types.
- sortOrdernumber
Sort order (lower = earlier)
- publishedAtany
Publish timestamp (ISO 8601)
delete_post
Delete a CMS post by ID. Soft-deleted posts can be restored with restore_post.
Parameters (1)
- postIdstringrequired
The post ID
restore_post
Restore a previously deleted CMS post.
Parameters (1)
- postIdstringrequired
The post ID
list_image_models
List AI image-generation models exposed to merchants (sanitized — provider/cost details hidden). Use to pick a `modelCode` for `generate_post_cover`.
No parameters.
generate_image
Generate an AI image via kie.ai and return its public R2 URL. Use to mint reusable URLs for content blocks (image, gallery), product photos, or any field that takes an image URL — does NOT attach to a post by itself. Costs credits (see list_image_models). On poll timeout the job continues running; pass `jobId` from the response to merchant ai-media APIs to retrieve it later.
Parameters (7)
- promptstringrequired
Generation prompt
- modelCodestringrequired
Image model code from list_image_models
- aspectRatiostring
Output aspect ratio (e.g. 16:9, 1:1)
- negativePromptstring
Things to exclude from generation
- seedinteger
Random seed for reproducible output
- pollTimeoutMsinteger
Default 60000.
- pollIntervalMsinteger
Default 3000.
generate_post_cover
Generate an AI image and attach it as a post's featuredImage. Submits a kie.ai job, polls until complete, copies the result into the canonical post-asset R2 folder, and writes the public URL onto the post. Costs credits (see list_image_models). On poll timeout, the job continues — call attach_post_cover_from_job(postId, jobId) once it finishes to attach without paying again.
Parameters (8)
- postIdstringrequired
The post ID
- promptstringrequired
Image generation prompt
- modelCodestringrequired
Image model code from list_image_models (e.g. nano-banana-2)
- aspectRatiostring
Aspect ratio passed to the model, e.g. "16:9", "1:1"
- negativePromptstring
Things to exclude from generation
- seedinteger
Random seed for reproducible output
- pollTimeoutMsinteger
Default 60000.
- pollIntervalMsinteger
Default 3000.
attach_post_cover_from_job
Attach a previously generated ai-media job's output as the post's featuredImage. Use when generate_post_cover timed out (job kept running) or when reusing the same generation across multiple posts. Verifies the job belongs to your company and succeeded. Does NOT charge credits — credits were charged at submit time.
Parameters (5)
- postIdstringrequired
The post ID
- jobIdstringrequired
The ai-media job ID (from generate_image, generate_post_cover, or POST /v6/merchant/ai-media/generate)
- assetIndexinteger
Which asset to use when the job produced multiple outputs. Default 0.
- pollIfRunningboolean
When true, advance polling once if the job is still running. Default true.
- pollTimeoutMsinteger
When pollIfRunning is true, wait up to this long for terminal state. Default 30000.
upload_post_cover_from_url
Download an external image URL into R2 and attach it as the post's featuredImage. Replaces the manual flow of pasting external URLs (which break when the source goes down). Validates content-type starts with `image/` and rejects payloads larger than 20 MB. No AI credits charged — only standard storage.
Parameters (2)
- postIdstringrequired
The post ID
- sourceUrlstringrequired
Public http(s) URL to fetch the image from. Must respond with an image/* content-type.
list_categories
List CMS post categories.
No parameters.
create_category
Create a CMS post category (e.g. "Equipment", "Injection — Botox"). For sub-categories, use namespaced names — the table is flat.
Parameters (4)
- namestringrequired
Category name
- slugstring
Auto-generated from name if omitted.
- descriptionstring
Description
- sortOrdernumber
Sort order (lower = earlier)
update_category
Update a CMS post category.
Parameters (5)
- categoryIdstringrequired
Category ID
- namestring
Name
- slugstring
URL slug
- descriptionany
Description
- sortOrdernumber
Sort order (lower = earlier)
delete_category
Delete a CMS post category. Posts in the category are not deleted; they are simply unlinked.
Parameters (1)
- categoryIdstringrequired
Category ID
restore_category
Restore a previously deleted CMS post category.
Parameters (1)
- categoryIdstringrequired
Category ID
list_post_types
List all post types defined for this company (built-in: blog_post, page; plus any custom types).
No parameters.
create_post_type
Define a new custom post type (e.g. "treatment", "service"). Required before creating posts of that type. After creating a post type, use create_post_type_field to define its structured field schema. Those fields are stored in meta on each post — do not use excerpt for structured data.
Parameters (10)
- slugstringrequired
Lowercase identifier, e.g. "treatment". Auto-derived from label if omitted.
- labelstringrequired
Singular UI label, e.g. "Treatment"
- labelPluralstringrequired
Plural UI label, e.g. "Treatments"
- iconany
Icon name or URL
- supportsCategoriesboolean
Default true
- supportsFeaturedImageboolean
Default true
- supportsNestingboolean
Default false
- supportsExcerptboolean
Default true
- supportsBlocksboolean
Default true
- sortOrdernumber
Sort order (lower = earlier)
list_post_type_fields
List the custom field schema for a post type. Use this before creating posts to know which keys to pass in meta and what types they expect.
Parameters (1)
- postTypeIdstringrequired
Post type ID (from list_post_types)
create_post_type_field
Add a custom field to a post type schema. The field key becomes the key in meta when creating/updating posts. Use fieldType="repeater" with fields=[...] for repeatable structured rows. Use this instead of storing structured data in excerpt.
Parameters (9)
- postTypeIdstringrequired
Post type ID (from list_post_types)
- labelstringrequired
Human-readable field label, e.g. "Tagline"
- fieldTypestringrequired
Field type: text | textarea | richtext | number | boolean | date | datetime | select | multiselect | url | email | image | file | gallery | attachments | repeater
- keystring
snake_case key used in meta. Auto-derived from label if omitted.
- requiredboolean
Whether the field is required on post creation (default false)
- helpTextstring
Optional hint shown in the UI
- optionsobject
For select/multiselect: { choices: [{ label, value }] }. For URL fields that should accept merchant uploads, use { uploadable: true } so the UI stores the uploaded file URL instead of asking the merchant to paste a raw URL.
- fieldsarray
Required for fieldType="repeater". Defines the child fields stored in each row object.
- sortOrdernumber
Sort order (lower = earlier)
update_post_type
Update a custom post type. Built-in types (blog_post, page) cannot be modified.
Parameters (10)
- postTypeIdstringrequired
Post type ID
- labelstring
Display label
- labelPluralstring
Plural display label
- iconany
Icon name or URL
- supportsCategoriesboolean
Allow categories on this post type
- supportsFeaturedImageboolean
Allow a featured image
- supportsNestingboolean
Allow parent/child nesting
- supportsExcerptboolean
Allow an excerpt field
- supportsBlocksboolean
Allow content blocks (rich body)
- sortOrdernumber
Sort order (lower = earlier)
delete_post_type
Delete a custom post type. Built-in types cannot be deleted. Fails if any posts of this type still exist — delete those first.
Parameters (1)
- postTypeIdstringrequired
Post type ID
restore_post_type
Restore a previously deleted custom post type.
Parameters (1)
- postTypeIdstringrequired
Post type ID
update_post_type_field
Update a field on a post type schema. Changing fieldType or flipping required=true is blocked when posts already use the field unless force=true is passed.
Parameters (10)
- postTypeIdstringrequired
Post type ID
- fieldIdstringrequired
Field ID
- labelstring
Display label
- fieldTypestring
Field type
- requiredboolean
Whether the field is required
- helpTextany
Help text shown next to the input
- optionsany
For URL fields, { uploadable: true } enables file upload while preserving a URL string in meta.
- fieldsany
Child fields for fieldType="repeater".
- sortOrdernumber
Sort order (lower = earlier)
- forceboolean
Override safety guards. Required to change fieldType or flip required=true on a field that already has data in posts.
delete_post_type_field
Remove a field from a post type schema. Blocked when posts of this type still have data in the field unless force=true is passed (orphans the data).
Parameters (3)
- postTypeIdstringrequired
Post type ID
- fieldIdstringrequired
Field ID
- forceboolean
Delete even if posts have data in this field. Existing meta values become orphaned.
restore_post_type_field
Restore a previously deleted field on a post type schema.
Parameters (2)
- postTypeIdstringrequired
Post type ID
- fieldIdstringrequired
Field ID
reorder_post_type_fields
Reorder fields on a post type. Pass field IDs in the desired display order; sortOrder is updated to match.
Parameters (2)
- postTypeIdstringrequired
Post type ID
- orderedFieldIdsarrayrequired
Field IDs in the desired order
append_post_block
Append one or more blocks to the end of a post. Each block must be a valid block object: { id, version, type, data }. Types: paragraph, heading, image, list, quote, code, divider, spacer, embed, html, youtube, file, faq, callout, gallery, cta, accordion, product.
Parameters (2)
- postIdstringrequired
The post ID
- blocksarrayrequired
Block(s) to append
replace_post_block
Replace a single block at the given index (0-based). Avoids fetching the full post and re-sending all blocks via update_post.
Parameters (3)
- postIdstringrequired
The post ID
- indexintegerrequired
0-based index of the block to replace
- blockanyrequired
Replacement block
remove_post_block
Remove the block at the given index (0-based). All subsequent blocks shift up by one.
Parameters (2)
- postIdstringrequired
The post ID
- indexintegerrequired
0-based index of the block to remove
reorder_post_blocks
Reorder blocks by passing block IDs in the desired order. The id list must contain every existing block id exactly once.
Parameters (2)
- postIdstringrequired
The post ID
- orderedBlockIdsarrayrequired
Block IDs in the desired order; must match the existing set exactly
create_booking
Create a new booking for a member. Use get_available_slots first to find valid times, then create the booking with the service, member, date, and time.
Parameters (8)
- serviceIdstringrequired
The service ID
- accountIdstringrequired
The member/account ID
- bookingDatestringrequired
Date in YYYY-MM-DD format
- startTimestringrequired
Start time in HH:MM format
- endTimestringrequired
End time in HH:MM format
- staffIdstring
Staff member ID
- resourceIdstring
Resource ID
- notesstring
Booking notes
get_conversation_messages
Get messages from a specific conversation thread. Shows the chat history between the merchant and a contact.
Parameters (3)
- conversationIdstringrequired
The conversation ID
- searchstring
Search within messages
- limitnumber
Max results (default 20)
find_or_create_workroom_thread
Find or create a Workroom DM thread between a merchant user and an AI colleague. Use this when an inbound event deserves owner attention but no threadId was provided. This only prepares an internal Workroom channel.
Parameters (3)
- agentIdstringrequired
AI colleague ID for the Workroom DM
- userIdstring
Merchant user ID to notify. Defaults to the current MCP user when omitted.
- titlestring
Optional title if a new thread is created
get_attachment_text
Read the text/Markdown content of a file attached to a Workroom thread or sent by a customer (PDF, image, or document). Extracts on first read and caches the result. Returns status "ready" with markdown, or "skipped"/"failed"/"not_found" with a reason. Use when a message references an attachment you need to read.
Parameters (1)
- attachmentIdstringrequired
The attachment ID from the message attachments list
post_workroom_message
Post an internal message from an AI colleague into a Workroom thread. Use this to report findings, ask the owner for approval, or share source links after reading CRM/Inbox data. This does not send anything to customers.
Parameters (4)
- threadIdstringrequired
Workroom thread ID
- agentIdstringrequired
AI colleague ID that is a participant in the thread
- contentstringrequired
Message to show in Workroom. Markdown is allowed.
- metadataobject
Optional generic metadata, e.g. {sourceRefs:[{type:"inbox_conversation",id:"..."}]}
create_inbox_reply_suggestion
Create a draft reply suggestion that appears inline in the FavCRM Inbox composer. Use this for message.inbound events with replyPolicy="suggest"; it does not send anything to the customer.
Parameters (6)
- conversationIdstringrequired
Inbox conversation ID
- agentIdstringrequired
AI colleague ID creating the suggestion
- bodystringrequired
Draft reply text for the merchant to review
- sourceMessageIdstring
Inbound message ID this draft responds to
- subjectstring
Optional email subject suggestion
- metadataobject
Optional metadata such as rationale, confidence, or source refs
request_send_approval
Create a merchant-owned Workroom approval request for a customer-facing send. The agent must not call send_message, send_whatsapp_message, send_test_campaign, or send_campaign directly.
Parameters (5)
- threadIdstringrequired
Workroom thread ID where the approval button should appear
- agentIdstringrequired
AI colleague ID that is a participant in the thread
- actionTypestringrequired
The customer-facing action to execute only after merchant approval
- summarystringrequired
Human-readable draft/recipient/campaign summary shown above the approval buttons
- payloadobjectrequired
Exact tool payload to execute if the merchant approves
list_segments
List customer segments. Segments group members by criteria for targeted campaigns.
Parameters (2)
- searchstring
Search by segment name
- limitnumber
Max results (default 20)
get_segment
Get customer segment details including type, criteria, and live member count.
Parameters (1)
- segmentIdstringrequired
The segment ID
get_segment_members
Get the members that belong to a specific segment.
Parameters (2)
- segmentIdstringrequired
The segment ID
- limitnumber
Max results (default 20)
create_segment
Create a new customer segment. Use STATIC for manual member lists, DYNAMIC for criteria-based auto-filtering.
Parameters (4)
- namestringrequired
Segment name
- descriptionstring
Segment description
- segmentTypestring
Segment type (default DYNAMIC)
- criteriaobject
Dynamic segment criteria
update_segment
Update an existing customer segment by id. Pass only the fields to change; criteria replaces the existing rules.
Parameters (5)
- segmentIdstringrequired
The segment ID to update
- namestring
New segment name
- descriptionstring
New segment description
- segmentTypestring
Change segment type
- criteriaany
Replace dynamic criteria, or null to clear criteria
preview_segment_count
Preview how many customers would match dynamic segment criteria before creating or updating a segment.
Parameters (1)
- criteriaany
Dynamic criteria to preview. Omit or null to count all active customers.
set_segment_members
Replace the members of a STATIC customer segment with the given account IDs. The segment is converted to STATIC.
Parameters (2)
- segmentIdstringrequired
The segment ID
- accountIdsarrayrequired
CRM account IDs to set as segment members
delete_segment
Delete a customer segment.
Parameters (1)
- segmentIdstringrequired
The segment ID to delete
list_templates
List the company's WhatsApp message templates with their Meta approval status (PENDING / APPROVED / REJECTED). Check this to see which templates are approved before referencing one in a campaign.
Parameters (1)
- limitinteger
Max templates to return (default 20)
create_template
Create and submit a WhatsApp message template to Meta for approval. Text templates only (header text, body with {{1}} variables, footer) — add buttons in the app. The template is NOT usable until Meta approves it (check with list_templates). Submitting consumes the store’s Meta template allowance.
Parameters (7)
- namestringrequired
Friendly template name (a Meta-safe id is derived from it).
- categorystringrequired
UTILITY = transactional (order/shipping), MARKETING = promos, AUTHENTICATION = codes.
- messagestringrequired
Body text. Use {{1}}, {{2}} for personalised values.
- languagestring
Language code, default en_US.
- headerTextstring
Optional short bold header above the body.
- footerstring
Optional small footer text.
- variableSamplesobject
Example values per variable number, e.g. {"1":"Sara"} — Meta reviews with these.
list_outlets
List shop outlets/locations for the company.
Parameters (1)
- activeOnlyboolean
When true, only return active outlets (default false)
create_outlet
Create a shop outlet/location. Optionally pass id to preserve a legacy UUID during migration.
Parameters (10)
- idstring
Optional outlet UUID (for legacy migration; non-standard formats accepted)
- namestringrequired
Outlet name
- addressany
Street address
- phoneany
Contact phone
- latitudeany
Latitude
- longitudeany
Longitude
- logoUrlany
Logo URL
- sortOrderinteger
Display sort order (default 0)
- isActiveboolean
Whether outlet is active (default true)
- acceptsOrdersboolean
Whether outlet accepts online orders (default true)
update_outlet
Update an existing shop outlet/location by ID.
Parameters (10)
- idstringrequired
Outlet ID (UUID)
- namestring
Outlet name
- addressany
Street address
- phoneany
Contact phone
- latitudeany
Latitude
- longitudeany
Longitude
- logoUrlany
Logo URL
- sortOrderinteger
Display sort order
- isActiveboolean
Whether outlet is active
- acceptsOrdersboolean
Whether outlet accepts online orders
list_products
List shop products with optional filters by name, status, or category.
Parameters (4)
- searchstring
Search by product name
- statusstring
Filter by status
- categoryIdnumber
Filter by category ID
- limitnumber
Max results (default 20)
get_product
Get full product detail including images, options, and variations.
Parameters (1)
- productIdnumberrequired
The product ID
create_product
Create a new shop product as DRAFT. Merchant can review and activate from the portal.
Parameters (8)
- namestringrequired
Product name
- descriptionstring
Product description
- pricestringrequired
Price as decimal string (e.g. "29.99")
- discountPricestring
Discounted price
- memberPricestring
Members-only price
- skustring
SKU code
- categoryIdsarray
Category IDs (first is primary)
- productTypestring
Product type (default one_time)
update_product
Update an existing product. Only provided fields are changed.
Parameters (9)
- productIdnumberrequired
The product ID
- namestring
Product name
- descriptionstring
Product description
- pricestring
Price as decimal string
- discountPricestring
Discounted price
- memberPricestring
Members-only price
- skustring
SKU code
- statusstring
Product status
- categoryIdsarray
Category IDs (first is primary). Replaces all existing categories.
list_product_categories
List all product categories for the shop.
No parameters.
create_product_category
Create a product category. Use parentId to create subcategories under an existing category.
Parameters (5)
- namestringrequired
Category name
- descriptionstring
Category description
- parentIdnumber
Parent category ID for subcategories
- onlineEnabledboolean
Show in online store (default true)
- sortOrdernumber
Display sort order
create_variation
Add a variation (size, color, etc.) to an existing product.
Parameters (9)
- productIdnumberrequired
The product ID
- namestring
Variation name
- skustring
Variation SKU
- pricestringrequired
Price as decimal string (e.g. "29.99")
- discountPricestring
Discounted price
- memberPricestring
Members-only price
- stockQuantitynumber
Stock quantity
- stockStatusstring
Stock status
- selectedOptionsobject
Option selections e.g. {"Size": "Large"}
list_orders
List shop orders with optional status and search filters.
Parameters (3)
- statusstring
Filter by order status
- searchstring
Search by order number or customer name/email
- limitnumber
Max results (default 20)
get_order
Get full order detail including line items.
Parameters (1)
- orderIdstringrequired
The order UUID
update_order_status
Update the status of a shop order (e.g. confirm, ship, cancel).
Parameters (2)
- orderIdstringrequired
The order UUID
- statusstringrequired
New order status
list_offer_rules
List upsell/cross-sell offer rules with optional filters.
Parameters (3)
- statusstring
Filter by status
- typestring
Filter by rule type
- limitnumber
Max results (default 20)
get_offer_rule
Get offer rule detail including associated products and discounts.
Parameters (1)
- ruleIdstringrequired
The offer rule ID
create_offer_rule
Create an upsell/cross-sell offer rule as draft. Specify trigger type, conditions, and suggested products with optional discounts.
Parameters (6)
- namestringrequired
Rule name
- descriptionstring
Rule description
- typestringrequired
Rule type: upsell, cross_sell, bundle, or post_purchase
- triggerTypestringrequired
When the offer triggers
- triggerConfigobject
Trigger-specific configuration
- productsarray
Products to suggest with optional discounts
query_favcrm_platform
Search FavCRM MCP tools, enabled skills, and feature areas for how to use the platform. Use before guessing tool names or JSON arguments.
Parameters (3)
- querystringrequired
Plain-language capability question, e.g. "create a booking" or "send a campaign safely"
- areastring
Restrict search area (default all)
- limitinteger
Maximum results (default 8)
search_tools
Search the available FavCRM tool catalog for relevant operations. Use this when the curated direct tool list does not contain the operation you need.
Parameters (5)
- querystring
Plain-language tool search, e.g. "delete a segment" or "set custom field values"
- scopestring
Optional exact scope filter, e.g. contacts, customer_segments, invoices
- writeboolean
Filter to write tools (true) or read-only tools (false)
- limitinteger
Maximum results (default 8, max 20)
- includeInputSchemaboolean
Include full JSON input schemas for returned tools. Defaults to false to keep context small.
execute_tool
Execute an available FavCRM tool by name after discovering it with search_tools. Target tool availability, input schema, module gates, and audit logging are still enforced.
Parameters (2)
- toolNamestringrequired
Exact target tool name returned by search_tools
- argumentsobject
Arguments object for the target tool. Must match the target input schema.
query_company_knowledge
Search this company's reviewed knowledge base and return grounded snippets with source document IDs. Use for merchant policies, FAQs, pricing notes, brand guidance, and other uploaded references.
Parameters (3)
- querystringrequired
Question or keywords to search for in company knowledge
- limitinteger
Maximum matching snippets (default 5)
- maxSnippetCharsinteger
Maximum characters per snippet (default 600)
list_knowledge_documents
List merchant knowledge base documents (uploads + scraped URLs). Use reviewStatus/syncable to see what is ready for agent retrieval. Pass `updatedAfter` for delta sync. Reviewed content is fetched via GET /v6/merchant/ai/knowledge/{id}/content; source audit text is available with ?variant=extracted.
Parameters (2)
- updatedAfterstring
ISO timestamp — only return docs updated after this. Use for delta sync.
- limitnumber
Max results (default 100)
get_knowledge_document
Fetch a single knowledge document with metadata + extraction/review status. Reviewed content is served via GET /v6/merchant/ai/knowledge/{id}/content; raw/extracted variants are for audit.
Parameters (1)
- documentIdstringrequired
Knowledge document ID
scrape_knowledge_url
Fetch a URL's content into the knowledge base. Server crawls the URL, stores the response body in R2, returns the new document ID. Failures store the row with status='failed'. Use for adding marketing pages, FAQ docs, or external references the agent should be aware of.
Parameters (1)
- urlstringrequired
URL to fetch (must be https / http and publicly reachable)
add_knowledge_text
Add a free-form text document to the knowledge base. Use for pasted policies, FAQs, internal notes, brand voice references — anything the agent should be able to retrieve later. Stored as a single document; agent-side embedding/retrieval happens elsewhere.
Parameters (2)
- namestringrequired
Friendly title for the document
- contentstringrequired
Document body text
delete_knowledge_document
Soft-delete a knowledge document. The agent loses access immediately, but the document can be restored with restore_knowledge_document.
Parameters (1)
- documentIdstringrequired
Knowledge document ID
restore_knowledge_document
Restore a previously deleted knowledge document.
Parameters (1)
- documentIdstringrequired
Knowledge document ID
list_shipping_methods
List all shipping methods configured for the shop.
No parameters.
report_agent_issue
Report a FavCRM platform issue when an agent finds a missing MCP path, tool failure, confusing schema, CLI/docs issue, or SDK fallback. Include logs, AI analysis, references, and clarification questions so the platform team can follow up.
Parameters (13)
- titlestringrequired
Short issue title
- severitystringrequired
Impact level
- areastringrequired
Issue area
- expectedBehaviorstringrequired
What the agent or user expected to happen
- actualBehaviorstringrequired
What actually happened
- stepsTriedarrayrequired
Concrete steps the agent tried before reporting
- toolCallsarray
Relevant MCP/CLI/SDK calls, arguments, and outcomes
- logsarray
Relevant error messages, command output, or stack traces
- aiAnalysisstringrequired
Agent analysis of likely root cause and impact
- clarificationQuestionsarray
Questions the platform team should ask the agent/user to resolve ambiguity
- referencesarray
Source links, file paths, docs, screenshots, or IDs that support the report
- environmentobject
Runtime context such as MCP URL, CLI version, token type, client, sandbox, model, OS
- workaroundstring
Temporary workaround used, if any
register_organisation_request
Step 1 of agentic signup. Sends a 6-digit verification code to the email. After the user reads the code, call register_organisation_verify with it to finish and receive an API key. Use this when a user wants to create a new FavCRM workspace from inside an MCP client.
Parameters (5)
- organisationNamestringrequired
Business / brand name (used as the first company name too)
- emailstringrequired
Owner email — receives a 6-digit code (10 min TTL)
- industrystring
Vertical — drives default templates
- countrystring
ISO 3166-1 alpha-2 country code (HK, US, GB, ...)
- timezonestring
IANA timezone (e.g. Asia/Hong_Kong); falls back to country default
register_organisation_verify
Step 2 of agentic signup. Confirms the 6-digit code and creates the workspace. Returns an API key the agent should set as Authorization: Bearer <apiKey> for all subsequent FavCRM MCP calls in this session.
Parameters (2)
- requestIdstringrequired
From register_organisation_request
- codestringrequired
6-digit code from the verification email
README not available yet.
Install
claude_desktop_config.json
{
"mcpServers": {
"favcrm": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.favcrm.io/mcp"
]
}
}
}Desktop config is stdio-only; this bridges via mcp-remote. Native remote: Settings > Connectors.