ZBS Index What actually exists in applied AI, with the source next to it

mcp server

FavCRM

Agentic CRM for service businesses — bookings, customers, WhatsApp, loyalty, invoicing.

Description as published by the maintainer. Source

  • version 1.0.0
  • active

active — Most recent push to the repository was 2026-06-26.

What this server can do

223 functions, named and described by the server itself. Parameter names are shown because they say more about what a function does than its name usually does.

accept_team_invite_request(token)
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. Required: token.
accept_team_invite_verify(code, name, token)
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. Required: token, code.
add_knowledge_text(name, content)
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. Required: name, content.
append_post_block(blocks, postId)
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. Required: postId, blocks.
archive_survey(surveyId)
Archive a survey and remove it from active survey lists. Required: surveyId.
assign_staff_to_service(userId, serviceId)
Assign a staff member to a booking service. Pass users.id from list_staff.userId. Required: serviceId, userId.
attach_post_cover_from_job(jobId, postId, assetIndex, pollIfRunning, pollTimeoutMs)
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. Required: postId, jobId.
attach_tags(tagId, accountIds)
Attach one or more tags to a member/account. Useful for segmenting members after filtering. Required: accountIds, tagId.
cancel_booking(reason, bookingId, refundMethod, idempotencyKey)
Cancel a booking and create a durable refund receipt. Uses the merchant refund setting unless refundMethod is provided. Required: bookingId, idempotencyKey.
cancel_subscription(subscriptionId)
Cancel a subscription. Destructive — turns off auto-renew and prevents further billing cycles. Existing paid periods stay valid until end. Required: subscriptionId.
check_plan_operation(delta, toolName, quotaCode, moduleCode)
Preflight whether an intended operation is allowed by token scopes, enabled modules, subscription state, and quota. Provide toolName, quotaCode, or moduleCode.
clone(name, entityId, entityType)
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. Required: entityType, entityId.
commit_customer_import(rows, sessionId)
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. Required: sessionId, rows.
complete_booking(bookingId)
Mark a booking as completed. Triggers commission calculation if configured. Required: bookingId.
confirm_booking(bookingId)
Confirm a pending booking. Required: bookingId.
convert_lead(dealName, accountId, dealStage, lifeStage, createDeal, dealAmount, dealClosingDate)
Convert a lead account to an active customer. Optionally create a linked pipeline deal (Salesforce/HubSpot-style convert). Required: accountId.
create_account(name, type, email, notes, phone, source, tierId, address, lastName, expiresAt, firstName, lifeStage, enrollMembership)
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. Required: name.
create_booking(notes, endTime, staffId, accountId, serviceId, startTime, resourceId, bookingDate)
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. Required: serviceId, accountId, bookingDate, startTime, endTime.
create_broadcast(name, channel, templateId, scheduledAt, recipientFilter)
Create a DRAFT WhatsApp or SMS broadcast campaign. The broadcast is NOT sent — admin must review and send it from the Broadcasts page. Required: name.
create_campaign(name, status, channel, segmentId, scheduledAt, recipientIds, channelConfig, recipientSource)
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". Required: name, channel.
create_category(name, slug, sortOrder, description)
Create a CMS post category (e.g. "Equipment", "Injection — Botox"). For sub-categories, use namespaced names — the table is flat. Required: name.
create_contact(name, email, phone, jobTitle, accountId, isPrimary)
Create a contact on an existing CRM account. Required: accountId, name.
create_custom_field(options, fieldName, fieldType, sortOrder, entityType, fieldLabel, isRequired)
Create a custom field definition for CRM entities. Use options for select or multiselect fields. Required: entityType, fieldName, fieldLabel, fieldType.
create_deal(name, stage, amount, ownerId, dealType, accountId, contactId, closingDate, description, probability)
Create a CRM sales pipeline deal, optionally linked to a customer account and contact. Required: name.
create_inbox_reply_suggestion(body, agentId, subject, metadata, conversationId, sourceMessageId)
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. Required: conversationId, agentId, body.
create_invoice(notes, dueDate, currency, accountId, lineItems)
Create a new invoice for a customer. Optionally include line items inline. Returns the new invoiceId. Required: accountId.
create_note(body, entityId, isPinned, entityType)
Add a note to a member/account, booking, ticket, or invoice. Required: entityType, entityId, body.
create_offer_rule(name, type, products, description, triggerType, triggerConfig)
Create an upsell/cross-sell offer rule as draft. Specify trigger type, conditions, and suggested products with optional discounts. Required: name, type, triggerType.
create_outlet(id, name, phone, address, logoUrl, isActive, latitude, longitude, sortOrder, acceptsOrders)
Create a shop outlet/location. Optionally pass id to preserve a legacy UUID during migration. Required: name.
create_plan_upgrade_link(planId, confirm, planCode, returnUrl, billingCycle)
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.
create_post(meta, slug, type, title, blocks, status, tagIds, excerpt, parentId, seoTitle, sortOrder, visibility, categoryIds, publishedAt, featuredImage, seoDescription)
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. Required: type, title.
create_post_type(icon, slug, label, sortOrder, labelPlural, supportsBlocks, supportsExcerpt, supportsNesting, supportsCategories, supportsFeaturedImage)
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. Required: slug, label, labelPlural.
create_post_type_field(key, label, fields, options, helpText, required, fieldType, sortOrder, postTypeId)
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. Required: postTypeId, label, fieldType.
create_product(sku, name, price, categoryIds, description, memberPrice, productType, discountPrice)
Create a new shop product as DRAFT. Merchant can review and activate from the portal. Required: name, price.
create_product_category(name, parentId, sortOrder, description, onlineEnabled)
Create a product category. Use parentId to create subcategories under an existing category. Required: name.
create_promotion(code, name, type, value, endsAt, status, startsAt, posEnabled, description, eventEnabled, minimumAmount, onlineEnabled, bookingEnabled, maximumDiscount, minimumQuantity, usageLimitTotal, usageLimitPerCustomer)
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. Required: name, code, value.
create_resource(name, type, status, capacity, description)
Create a bookable resource (room, equipment, vehicle). Used by services that have requiresResource=true. Required: name, type.
create_segment(name, criteria, description, segmentType)
Create a new customer segment. Use STATIC for manual member lists, DYNAMIC for criteria-based auto-filtering. Required: name.
create_service(name, type, price, status, capacity, currency, sortOrder, categoryId, visibility, description, requireLogin, requiresStaff, allowedTierIds, commissionType, commissionValue, cooldownMinutes, durationMinutes, requiresResource, commissionCurrency, requiresConfirmation)
Create a bookable service. Sets duration, price, capacity, and policies. Use list_service_categories first if you want to attach to an existing category. Required: name, durationMinutes.
create_service_category(name, sortOrder, description)
Create a service category (e.g. "Treatments", "Classes") to group bookable services. Required: name.
create_service_package(name, price, status, validDays, description, sessionCount, applicableType, applicableItems)
Create a service package/prepaid session bundle. Use applicableType=SELECTED with applicableItems to limit the package to specific booking services or events. Required: name, sessionCount, price, validDays.
create_service_schedule(date, notes, endTime, staffId, byWeekday, serviceId, startTime, recurrence, resourceId, maxCapacity, recurrenceEndDate, recurrenceInterval)
Create a bookable schedule window for a service, including recurring weekly/daily availability. Required: serviceId, date, startTime, endTime.
create_subscription(amount, tierId, currency, accountId, autoRenew, billingCycle, currentPeriodEnd, currentPeriodStart)
Create a manual, non-renewing subscription record for a member. Use a subscription action link for provider-backed recurring billing. Required: accountId.
create_survey(slug, title, openAt, status, closeAt, settings, visibility, description, questionBlocks)
Create a survey with custom question blocks. Publish it later or set status to published for immediate portal access. Required: title, questionBlocks.
create_survey_invitation(channel, metadata, surveyId, accountId, contactId, expiresAt, recipientName, recipientEmail, recipientPhone)
Create a token-auth survey invitation for a specific member/account or contact. Required: surveyId.
create_tag(name, color)
Create a CRM tag for customer segmentation and organization. Required: name.
create_task(title, status, dueDate, priority, accountId, assigneeId, description)
Create a task. Optionally link to a CRM account or assign to a team member. Required: title.
create_team_member_invite(name, role, email, modules, permissions, expiresInHours)
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. Required: email.
create_template(name, footer, message, category, language, headerText, variableSamples)
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. Required: name, category, message.
create_ticket(source, subject, category, priority, accountId, contactName, description, contactEmail, contactPhone)
Create a support ticket for a member issue. Required: subject.
create_variation(sku, name, price, productId, memberPrice, stockStatus, discountPrice, stockQuantity, selectedOptions)
Add a variation (size, color, etc.) to an existing product. Required: productId, price.
create_whatsapp_connect_link(ttlMinutes, onboardingMode)
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.
delete_account(accountId)
Soft-delete a CRM account/customer. This releases the primary phone for future reuse while keeping account history for audit. Required: accountId.
delete_campaign(campaignId)
Delete a campaign. Only allowed in DRAFT status; sent campaigns are kept for audit history. Required: campaignId.
delete_category(categoryId)
Delete a CMS post category. Posts in the category are not deleted; they are simply unlinked. Required: categoryId.
delete_contact(contactId)
Delete a secondary contact. Primary contacts are protected; set another primary contact or delete the account instead. Required: contactId.
delete_custom_field(definitionId)
Delete a custom field definition and its stored values. Required: definitionId.
delete_deal(dealId)
Soft-delete a CRM deal from the sales pipeline. Required: dealId.
delete_invoice(invoiceId)
Delete a DRAFT invoice. Only invoices that have never been sent can be deleted; otherwise use void_invoice. Required: invoiceId.
delete_knowledge_document(documentId)
Soft-delete a knowledge document. The agent loses access immediately, but the document can be restored with restore_knowledge_document. Required: documentId.
delete_post(postId)
Delete a CMS post by ID. Soft-deleted posts can be restored with restore_post. Required: postId.
delete_post_type(postTypeId)
Delete a custom post type. Built-in types cannot be deleted. Fails if any posts of this type still exist — delete those first. Required: postTypeId.
delete_post_type_field(force, fieldId, postTypeId)
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). Required: postTypeId, fieldId.
delete_promotion(promotionId)
Delete a promotion. Past usage records are preserved. Required: promotionId.
delete_segment(segmentId)
Delete a customer segment. Required: segmentId.
delete_service_package(packageId)
Delete a service package by ID. Required: packageId.
delete_tag(tagId)
Delete a CRM tag and remove it from all tagged entities. Required: tagId.
delete_task(taskId)
Soft-delete a CRM task. Required: taskId.
detach_tags(tagId, accountIds)
Detach one tag from one or more member/account records. Required: accountIds, tagId.
earn_loyalty_points(field, amount, reason, accountId)
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. Required: accountId, field, amount.
enrol_membership(tierId, accountId, expiresAt)
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. Required: accountId.
execute_tool(toolName, arguments)
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. Required: toolName.
find_or_create_workroom_thread(title, userId, agentId)
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. Required: agentId.
generate_image(seed, prompt, modelCode, aspectRatio, pollTimeoutMs, negativePrompt, pollIntervalMs)
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. Required: prompt, modelCode.
generate_post_cover(seed, postId, prompt, modelCode, aspectRatio, pollTimeoutMs, negativePrompt, pollIntervalMs)
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. Required: postId, prompt, modelCode.
get_attachment_text(attachmentId)
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. Required: attachmentId.
get_audit_log(auditLogId)
Fetch a single audit log entry by ID, including before/after snapshots when available. Required: auditLogId.
get_available_slots(date, staffId, serviceId, resourceId)
Find available booking slots for a service on a specific date. Required: serviceId, date.
get_booking_detail(bookingId)
Get full booking details including line items, status history, and participants. Required: bookingId.
get_booking_settings
Get global booking settings for the customer booking flow, cancellation rules, visibility options, and confirmation requirements.
get_booking_stats
Get booking counts: today, this week, this month, and breakdown by status.
get_contact(contactId)
Fetch a single contact by ID. Required: contactId.
get_conversation_messages(limit, search, conversationId)
Get messages from a specific conversation thread. Shows the chat history between the merchant and a contact. Required: conversationId.
get_custom_field(definitionId)
Get a custom field definition by ID. Required: definitionId.
get_custom_field_values(entityId, entityType)
Get custom field values for a CRM entity such as an account, contact, deal, or booking. Required: entityType, entityId.
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.
get_deal(dealId)
Get detailed CRM deal information by ID. Required: dealId.
get_invoice(invoiceId)
Fetch a single invoice with line items, payment history, and customer detail. Required: invoiceId.
get_invoice_stats
Outstanding totals, overdue counts, and revenue this period. Used by the weekly-snapshot playbook.
get_knowledge_document(documentId)
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. Required: documentId.
get_loyalty_balance(accountId)
Get a member's current loyalty balance — points, stamps, credits, lifetime totals, and active membership tier. Returns null if the member is not enrolled. Required: accountId.
get_member_profile(accountId)
Get detailed profile for a specific member/account by ID. Required: accountId.
get_membership_tier(tierId)
Get a specific membership tier by ID. Required: tierId.
get_offer_rule(ruleId)
Get offer rule detail including associated products and discounts. Required: ruleId.
get_order(orderId)
Get full order detail including line items. Required: orderId.
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.
get_post(postId)
Get detailed CMS post including content blocks, categories, and tags. Required: postId.
get_product(productId)
Get full product detail including images, options, and variations. Required: productId.
get_promotion(promotionId)
Get details of a specific promotion/coupon code. Required: promotionId.
get_segment(segmentId)
Get customer segment details including type, criteria, and live member count. Required: segmentId.
get_segment_members(limit, segmentId)
Get the members that belong to a specific segment. Required: segmentId.
get_service_detail(serviceId)
Get full service details including addons, staff, resources, and tier pricing. Required: serviceId.
get_service_package(packageId)
Get service package detail including applicability and selected booking service/event items. Required: packageId.
get_subscription(subscriptionId)
Fetch a single subscription with customer, tier, billing cycle, and renewal info. Required: subscriptionId.
get_survey(surveyId)
Get survey detail, including blocks, publishing status, visibility, settings, and response count. Required: surveyId.
get_survey_responses(limit, surveyId)
List responses for a survey. Required: surveyId.
get_survey_stats(surveyId)
Get response and invitation metrics for a survey overview dashboard. Required: surveyId.
get_task(taskId)
Get detailed task information by ID. Required: taskId.
get_ticket_stats
Get ticket counts grouped by status.
get_whatsapp_connection_status
Check whether WhatsApp Business is connected for this company, including WABA/phone metadata and the latest agentic connect session state.
issue_rewards(expiresAt, memberIds, giftOfferId)
Issue a gift/reward to multiple members. Requires a gift offer ID and member IDs. Required: giftOfferId, memberIds.
link_resource_to_service(serviceId, resourceId)
Link a room/resource to a booking service. Required: serviceId, resourceId.
list_audit_logs(limit, action, source, userId, outcome, resource, resourceId, destructive, createdAfter, createdBefore)
List recent audit log entries for this company. Filter by action, resource, resourceId, user, source, outcome, destructive flag, and created date range.
list_bookings(limit, dateTo, status, staffId, dateFrom, accountId, serviceId)
List bookings with filters for date range, status, service, staff, or member.
list_campaigns(sort, limit, order, search, channel)
List marketing campaigns (email, SMS, WhatsApp) with delivery stats.
list_categories
List CMS post categories.
list_contacts(limit, search, accountId)
List contacts (people linked to CRM accounts), optionally filtered by account or search.
list_conversations(limit, search, status, channel)
List messaging conversations across WhatsApp, Messenger, Instagram, Threads, SMS, email, and other enabled channels. Threads items are public conversations. Shows unread counts and last message time.
list_custom_fields(entityType)
List custom field definitions for CRM entities such as account, contact, deal, or booking. Required: entityType.
list_deals(page, limit, stage, search, dealType, accountId)
List CRM deals (sales pipeline) with optional filters.
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`.
list_invoices(sort, limit, order, search, status)
List invoices with optional filters. Use status "OVERDUE" to find unpaid invoices past due date.
list_knowledge_documents(limit, updatedAfter)
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.
list_my_companies
List all companies/organisations the current user has access to. Use this to see available orgs before switching.
list_notes(limit, entityId, entityType)
List notes attached to a member/account, booking, or ticket. Required: entityType, entityId.
list_notification_logs(limit, dateTo, status, channel, dateFrom, entityId, eventType, recipient)
List notification delivery logs for the current company. Recipients are masked by default for incident-response safety.
list_offer_rules(type, limit, status)
List upsell/cross-sell offer rules with optional filters.
list_orders(limit, search, status)
List shop orders with optional status and search filters.
list_outlets(activeOnly)
List shop outlets/locations for the company.
list_plan_options
List active FavCRM plans with prices, quotas, included modules, and whether each is the current plan.
list_post_type_fields(postTypeId)
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. Required: postTypeId.
list_post_types
List all post types defined for this company (built-in: blog_post, page; plus any custom types).
list_posts(type, limit, search, status)
List CMS posts (blog posts and/or pages) with optional filters.
list_product_categories
List all product categories for the shop.
list_products(limit, search, status, categoryId)
List shop products with optional filters by name, status, or category.
list_promotions(limit, search, status)
List promotion/coupon codes with optional status filter.
list_resources(limit)
List booking resources (rooms, equipment, etc.).
list_reward_schemes(limit, search)
List loyalty reward schemes (points/stamps programs) configured for this business.
list_segments(limit, search)
List customer segments. Segments group members by criteria for targeted campaigns.
list_service_categories
List service categories (groups for booking services like "Treatments", "Classes").
list_service_packages(sort, limit, order, search, status)
List service packages/prepaid session bundles with optional search, status, sorting, and pagination.
list_service_schedules(limit, dateTo, staffId, dateFrom, serviceId, isOverride, resourceId)
List schedule windows for booking services.
list_services(limit, search, status)
List booking services with name, price, duration, and status.
list_shipping_methods
List all shipping methods configured for the shop.
list_staff(limit)
List staff/team members in the business.
list_subscriptions(limit, status)
List member subscriptions. Filter by status to find active, cancelled, or past-due subscriptions.
list_survey_invitations(limit, surveyId)
List survey invitation history without exposing token hashes or old invitation tokens. Required: surveyId.
list_survey_workflows(surveyId)
List automation workflows attached to a survey. Required: surveyId.
list_surveys(limit, search, status)
List surveys with optional status/search filters.
list_tags(search)
List all available tags for the merchant.
list_tasks(limit, status, accountId, assigneeId)
List tasks with optional status, assignee, and account filters.
list_templates(limit)
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.
list_tickets(limit, search, status, category, priority, accountId)
List support tickets with optional filters.
list_tiers
List all membership tiers with member counts and stats.
mark_deal_lost(dealId, reason)
Mark a CRM deal as lost. Requires a lost reason. Required: dealId, reason.
mark_deal_won(dealId, closingDate)
Mark a CRM deal as won and set close date. Required: dealId.
mark_invoice_sent(invoiceId)
Mark an invoice as sent to the customer (transitions DRAFT → OPEN). Use after delivering the invoice via email or share link. Idempotent. Required: invoiceId.
mark_no_show(bookingId)
Mark a booking as no-show when the customer did not attend. Required: bookingId.
pause_subscription(subscriptionId)
Pause an active subscription (status → past_due, no further auto-renew). Use resume_subscription to reactivate. Required: subscriptionId.
post_workroom_message(agentId, content, metadata, threadId)
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. Required: threadId, agentId, content.
preview_customer_import(rows, filename)
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. Required: rows.
preview_segment_count(criteria)
Preview how many customers would match dynamic segment criteria before creating or updating a segment.
query_company_knowledge(limit, query, maxSnippetChars)
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. Required: query.
query_favcrm_platform(area, limit, query)
Search FavCRM MCP tools, enabled skills, and feature areas for how to use the platform. Use before guessing tool names or JSON arguments. Required: query.
record_invoice_payment(note, amount, method, invoiceId, reference)
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. Required: invoiceId, amount, method.
register_organisation_request(email, country, industry, timezone, organisationName)
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. Required: organisationName, email.
register_organisation_verify(code, requestId)
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. Required: requestId, code.
remove_post_block(index, postId)
Remove the block at the given index (0-based). All subsequent blocks shift up by one. Required: postId, index.
reorder_post_blocks(postId, orderedBlockIds)
Reorder blocks by passing block IDs in the desired order. The id list must contain every existing block id exactly once. Required: postId, orderedBlockIds.
reorder_post_type_fields(postTypeId, orderedFieldIds)
Reorder fields on a post type. Pass field IDs in the desired display order; sortOrder is updated to match. Required: postTypeId, orderedFieldIds.
replace_post_block(block, index, postId)
Replace a single block at the given index (0-based). Avoids fetching the full post and re-sending all blocks via update_post. Required: postId, index, block.
report_agent_issue(area, logs, title, severity, toolCalls, aiAnalysis, references, stepsTried, workaround, environment, actualBehavior, expectedBehavior, clarificationQuestions)
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. Required: title, severity, area, expectedBehavior, actualBehavior, stepsTried, aiAnalysis.
request_send_approval(agentId, payload, summary, threadId, actionType)
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. Required: threadId, agentId, actionType, summary, payload.
restore_campaign(campaignId)
Restore a previously deleted campaign. Required: campaignId.
restore_category(categoryId)
Restore a previously deleted CMS post category. Required: categoryId.
restore_invoice(invoiceId)
Restore a previously deleted DRAFT invoice. Required: invoiceId.
restore_knowledge_document(documentId)
Restore a previously deleted knowledge document. Required: documentId.
restore_post(postId)
Restore a previously deleted CMS post. Required: postId.
restore_post_type(postTypeId)
Restore a previously deleted custom post type. Required: postTypeId.
restore_post_type_field(fieldId, postTypeId)
Restore a previously deleted field on a post type schema. Required: postTypeId, fieldId.
restore_promotion(promotionId)
Restore a previously deleted promotion. Required: promotionId.
restore_service_package(packageId)
Restore a previously deleted service package by ID. Required: packageId.
resume_subscription(subscriptionId)
Resume a paused subscription back to active. Required: subscriptionId.
revert_audit_action(reason, auditLogId)
Revert an audited action by restoring the captured before snapshot. Only works for allowlisted target tables with full before/after audit snapshots. Required: auditLogId.
scrape_knowledge_url(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. Required: url.
search_audit_logs(limit, query, createdAfter, createdBefore)
Search audit logs by free text across action, resource, resource ID, changes JSON, and metadata JSON. Required: query.
search_crm(limit, query)
Search across CRM accounts and contacts by name, email, or phone. Required: query.
search_members(sort, limit, order, search, source, tagIds, tierId, lifeStage, hasBooking, createdAfter, inactiveDays, createdBefore, hasMembership, lastBookingAfter, membershipStatus, lastActivityAfter, lastBookingBefore, lastActivityBefore)
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.
search_tools(limit, query, scope, write, includeInputSchema)
Search the available FavCRM tool catalog for relevant operations. Use this when the curated direct tool list does not contain the operation you need.
set_custom_field_values(values, entityId, entityType)
Set or clear custom field values for a CRM entity. Values are stored as strings; pass null to clear a value. Required: entityType, entityId, values.
set_primary_contact(contactId)
Set a contact as the primary contact for its CRM account and demote other contacts on that account. Required: contactId.
set_resource_availability(date, type, endTime, dayOfWeek, startTime, resourceId, isRecurring)
Add an availability window for a resource. Use day-of-week + recurring=true for weekly schedules, or a specific date for one-off blocks. Required: resourceId, startTime, endTime.
set_segment_members(segmentId, accountIds)
Replace the members of a STATIC customer segment with the given account IDs. The segment is converted to STATIC. Required: segmentId, accountIds.
set_staff_availability(date, type, endTime, memberId, dayOfWeek, startTime, isRecurring)
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. Required: memberId, startTime, endTime.
switch_company(companyId)
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. Required: companyId.
update_account(name, type, email, notes, phone, gender, source, lastName, accountId, firstName, lifeStage, assignedTo, memberCode, dateOfBirth, referredByAccountId)
Update CRM account/customer profile fields such as name, phone, email, life stage, owner, notes, or member code. Required: accountId.
update_booking_settings(showCoupon, calendarStyle, showAccessPass, cooldownMessage, blockUntilFinished, globalCooldownDays, bookingReminderEnabled, memberReschedulingMode, sameDayReminderEnabled, allowMemberCancellation, bookingReminderLeadHours, hideUnavailableTimeslots, sameDayReminderLeadHours, requireBookingConfirmation, minimumAdvanceBookingMinutes, memberCancellationCutoffHours)
Update global booking settings. Pass only the fields you want to change.
update_campaign(name, status, segmentId, campaignId, scheduledAt, recipientIds, channelConfig, recipientSource)
Update an existing campaign. Channel cannot be changed after creation. Pass only fields to change. Required: campaignId.
update_category(name, slug, sortOrder, categoryId, description)
Update a CMS post category. Required: categoryId.
update_contact(name, email, phone, jobTitle, contactId, isPrimary)
Update fields on an existing contact. Required: contactId.
update_custom_field(options, fieldType, sortOrder, fieldLabel, isRequired, definitionId)
Update a custom field definition label, type, options, required flag, or sort order. Required: definitionId.
update_deal(name, stage, amount, dealId, ownerId, dealType, accountId, contactId, closingDate, description, probability)
Update a CRM deal. Pass only fields to change; use null for nullable links/fields to clear them. Required: dealId.
update_deal_stage(stage, dealId, lostReason, probability)
Move a deal to a different pipeline stage. Required: dealId, stage.
update_order_status(status, orderId)
Update the status of a shop order (e.g. confirm, ship, cancel). Required: orderId, status.
update_outlet(id, name, phone, address, logoUrl, isActive, latitude, longitude, sortOrder, acceptsOrders)
Update an existing shop outlet/location by ID. Required: id.
update_post(meta, slug, type, title, blocks, postId, status, tagIds, excerpt, parentId, seoTitle, sortOrder, visibility, categoryIds, publishedAt, featuredImage, seoDescription)
Update an existing CMS post (any post type). Only provided fields are changed. Required: postId.
update_post_type(icon, label, sortOrder, postTypeId, labelPlural, supportsBlocks, supportsExcerpt, supportsNesting, supportsCategories, supportsFeaturedImage)
Update a custom post type. Built-in types (blog_post, page) cannot be modified. Required: postTypeId.
update_post_type_field(force, label, fields, fieldId, options, helpText, required, fieldType, sortOrder, postTypeId)
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. Required: postTypeId, fieldId.
update_product(sku, name, price, status, productId, categoryIds, description, memberPrice, discountPrice)
Update an existing product. Only provided fields are changed. Required: productId.
update_promotion(code, name, type, value, endsAt, status, startsAt, promotionId, usageLimitTotal, usageLimitPerCustomer)
Update an existing promotion. Pass only the fields you want to change. Required: promotionId.
update_segment(name, criteria, segmentId, description, segmentType)
Update an existing customer segment by id. Pass only the fields to change; criteria replaces the existing rules. Required: segmentId.
update_service(name, price, status, capacity, serviceId, categoryId, visibility, description, requireLogin, requiresStaff, commissionType, commissionValue, cooldownMinutes, durationMinutes, requiresResource, commissionCurrency, requiresConfirmation)
Update an existing booking service. Pass only the fields you want to change. Required: serviceId.
update_service_package(name, price, status, packageId, validDays, description, sessionCount, applicableType, applicableItems)
Update an existing service package. Pass only the fields you want to change. Required: packageId.
update_service_schedule(date, notes, endTime, staffId, byWeekday, startTime, recurrence, resourceId, scheduleId, maxCapacity, recurrenceEndDate, recurrenceInterval)
Update a service schedule window. Pass only fields to change. Required: scheduleId.
update_survey(slug, title, openAt, status, closeAt, settings, surveyId, visibility, description, questionBlocks)
Update a survey draft or publishing configuration. Use questionBlocks to replace the ordered form block list. Required: surveyId.
update_tag(name, color, tagId)
Rename or recolor an existing CRM tag. Required: tagId.
update_task(title, status, taskId, dueDate, priority, assigneeId, description)
Update a task (status, priority, assignee, due date, completion). Required: taskId.
update_ticket_status(status, ticketId)
Update the status of an existing support ticket. Required: ticketId, status.
upload_post_cover_from_url(postId, sourceUrl)
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. Required: postId, sourceUrl.
upsert_survey_workflow(name, graph, status, trigger, surveyId, workflowId)
Create or update a survey automation workflow, usually triggered by survey_response_submitted. Required: surveyId, name, graph.
validate_campaign(campaignId)
Validate a campaign before sending. Resolves contactable recipient count and previews the final email subject/body without sending. Required: campaignId.
validate_promotion(amount, channel, accountId, promotionCode)
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. Required: promotionCode, channel, amount.
void_invoice(invoiceId)
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. Required: invoiceId.

Last successful function declaration observed on . Source: https://api.favcrm.io/mcp. We list what the server declared; we do not call any of these functions.

Endpoint status observed on . Source: https://api.favcrm.io/mcp.

Signals

These are separate measurements of different things. They are deliberately not combined into one score, because a popularity number that mixes website traffic with saves and stars cannot be checked or acted on.

Signal Value What it measures Window Observed Source
GitHub stars 0 Number of GitHub accounts that bookmarked this repository since it was created. It is a bookmark count, not installs, not active users and not quality. cumulative, all time GitHub
Last commit 2026-06-26 Date of the most recent push to any branch. This is the strongest cheap indicator of whether the project is still maintained. point in time GitHub
Open issues 2 Open issues plus open pull requests, as GitHub counts them together. A high number can mean an active project or an abandoned one. as of fetch GitHub
Latest published version 1.0.0 Latest version string the maintainer published to the registry. as of fetch Model Context Protocol
Registry record last updated 2026-06-08 When the registry record was last updated by its maintainer. point in time Model Context Protocol
License MIT Licence GitHub detected in the repository. Detection can be wrong; the LICENSE file is authoritative. as of fetch GitHub
First listed in the MCP Registry 2026-06-08 Date this server was first published to the official MCP Registry. Not a usage or quality measure. point in time Model Context Protocol
repository status active The repository exists on GitHub and is not archived. This says nothing about how recently it was worked on. as of fetch GitHub
mcp tools declared 223 tools Number of functions the server itself declared when asked to list them. This is what the server offers an agent, not a measure of how well any of them work. as of probe api.favcrm.io
mcp endpoint status ok The server listed 223 functions when asked. as of probe api.favcrm.io

Where to get it

Related, by what their authors tagged them

  • favcrm-mcp-favcrm-agentic-registration — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use when a new user wants to register for FavCRM from inside an MCP client, create a FavCRM workspace, request or verif…
  • favcrm-mcp-favcrm-billing-commerce — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use for invoices, payments, products, orders, promotions, subscriptions, overdue follow-up, and commerce operations in…
  • favcrm-mcp-favcrm-booking-operator — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use for service setup, availability, booking lifecycle, cancellations, no-shows, reminders, and daily booking operation…
  • favcrm-mcp-favcrm-business-reporting — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use for FavCRM dashboards, weekly snapshots, KPI summaries, revenue, bookings, invoices, subscriptions, customer growth…
  • favcrm-mcp-favcrm-channel-setup — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use when checking or connecting FavCRM communication channels, especially WhatsApp Business Embedded Signup from an MCP…
  • favcrm-mcp-favcrm-comms-approval — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use for FavCRM marketing campaigns, customer reactivation, broadcasts, WhatsApp, SMS, email, inbox replies, and approva…
  • favcrm-mcp-favcrm-content-publisher — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use for FavCRM blog posts, CMS content blocks, landing-page content, AI-generated images, post publishing, post updates…
  • favcrm-mcp-favcrm-customer-lifecycle — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use for customer search, member profiles, tags, tiers, loyalty, segments, onboarding, retention, and customer 360 summa…
  • favcrm-mcp-favcrm-knowledge-training — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use for training the FavCRM AI agent with URLs or pasted text, listing knowledge documents, checking ingestion status,…
  • favcrm-mcp-favcrm-sales-ops — last commit 2026-06-26, shares agentic-workflows, ai-agent-skills, cursorrules
    Use for FavCRM deals, pipeline stages, internal tasks, follow-ups, owners, workspace switching, and operational handoff…

These share tags the maintainers applied themselves, such as agentic-workflows, ai-agent-skills, cursorrules, windsurf. Common tags like "mcp" or "ai" are ignored for this: agreeing with six hundred other projects is not a similarity.

This is not a recommendation and not a test result. It is a map of what the authors said their work is about.

Also from favcrm

  • favcrm-mcp-favcrm-team-onboarding — last commit 2026-06-26
    Use when inviting a teammate to FavCRM, generating a one-time team invite token, accepting an invite, verifying an emai…

How the author describes it

Topics the maintainer set on GitHub: agentic-workflows, ai-agent-skills, claude-code, cursorrules, mcp, mcp-server, windsurf.

This record as data

Every field on this page, with its source and observation date, is in the catalog JSON. Fetch the whole kind at once instead of parsing this HTML.

GET /api/v1/entries/mcp_server.json

Sources

  1. Tools declared by the MCP server at https://api.favcrm.io/mcp — api.favcrm.io, observed , trust tier 4.
  2. favcrm/mcp on GitHub — GitHub, observed , trust tier 3.
  3. Official MCP Registry — Model Context Protocol, observed , trust tier 1.