FavCRM
REMOTE · API.FAVCRM.IO · SCANNED SEP 20
Agentic CRM for service businesses — bookings, customers, WhatsApp, loyalty, invoicing.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token. See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability87
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 19709 tokens (~83/item across 235 items; 230 tools + 5 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 99% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 20 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 231 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the FavCRM MCP server?
FavCRM is a hosted endpoint at https://api.favcrm.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.favcrm.io
claude mcp add --transport http io-favcrm-favcrm 'https://api.favcrm.io/mcp'
{
"mcpServers": {
"io-favcrm-favcrm": {
"url": "https://api.favcrm.io/mcp"
}
}
} {
"servers": {
"io-favcrm-favcrm": {
"type": "http",
"url": "https://api.favcrm.io/mcp"
}
}
} [mcp_servers.io-favcrm-favcrm] url = "https://api.favcrm.io/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"io-favcrm-favcrm": {
"type": "remote",
"url": "https://api.favcrm.io/mcp",
"enabled": true
}
}
} openclaw mcp add io-favcrm-favcrm --url 'https://api.favcrm.io/mcp' --transport streamable-http
mcp_servers:
io-favcrm-favcrm:
url: "https://api.favcrm.io/mcp" {
"McpServers": {
"io-favcrm-favcrm": {
"Transport": "http",
"Url": "https://api.favcrm.io/mcp"
}
}
} assistant mcp add io-favcrm-favcrm -t streamable-http -u 'https://api.favcrm.io/mcp'
{
"mcpServers": {
"io-favcrm-favcrm": {
"type": "http",
"url": "https://api.favcrm.io/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 12 Sept 26 0
- Stability: fail → pass ▲ security
- 5 Sept 26 0
- “create_broadcast” reworded the description of “recipientFilter” cosmetic
1 cosmetic change on this day. Switch on “Show cosmetic changes” to see it.
- 4 Sept 26 0
- Tool “create_campaign” rewrote its description, which is the text the model reads security
- Tool “list_campaigns” rewrote its description, which is the text the model reads security
- Tool “update_campaign” rewrote its description, which is the text the model reads security
- New tool “get_campaign” functional
- New tool “get_event_campaign_exclusions” functional
- New tool “list_event_registrations” functional
- New tool “undo_campaign_send” functional
- “create_campaign” added an optional parameter “audienceExclusions” cosmetic
- “update_campaign” added an optional parameter “audienceExclusions” cosmetic
- “request_send_approval” reworded the description of “payload” cosmetic
- “update_campaign” reworded the description of “recipientIds” cosmetic
- “update_campaign” reworded the description of “recipientSource” cosmetic
- “update_campaign” reworded the description of “status” cosmetic
- 29 Aug 26 0
- Tool “switch_company” rewrote its description, which is the text the model reads security
- New tool “copy_service_tier_pricing” functional
- New tool “get_service_tier_pricing” functional
- New tool “set_service_tier_pricing” functional
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 96 to 100.
- 19 Aug 26 0
- “update_booking_settings” added an optional parameter “accessPassAfterMinutes” cosmetic
- “update_booking_settings” added an optional parameter “accessPassBeforeMinutes” cosmetic
2 cosmetic changes on this day. Switch on “Show cosmetic changes” to see them.
- 17 Aug 26 0
- Tool “convert_lead” rewrote its description, which is the text the model reads security
- “convert_lead” reworded the description of “createDeal” cosmetic
- “convert_lead” reworded the description of “dealStage” cosmetic
- “update_deal_stage” reworded the description of “stage” cosmetic
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Probed https://api.favcrm.io/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=favcrm.io | CN=WE1,O=Google Trust Services,C=US | 11 Aug 2026 | 9 Nov 2026 | ECDSA 256 | ECDSA-SHA256 | 1a2258781be3bc150e2b980c2873f303 |
| SANs: favcrm.io, api.favcrm.io, *.api.favcrm.io | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.favcrm.io. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| io. | present | 57355 | 8 | Verified |
| favcrm.io. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Challenged, unverified
The endpoint asked for a token, but we could not retrieve and validate the RFC 9728 metadata that tells a client how to obtain one.
| Result | Challenged, unverified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000 |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | no-referrer |
Protected resource metadata
| Retrieved | No |
|---|---|
| Problem | no_resource_metadata |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.favcrm.io/mcp | Verified | 200 | |
| http (plaintext) | http://api.favcrm.io/mcp | HTTPS enforced | 301 | https://api.favcrm.io/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
accept_team_invite_request ~79
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.
| Name | Type | Req | Description |
|---|---|---|---|
| token | string | yes | Invite token returned by create_team_member_invite or from the invite link |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
accept_team_invite_verify ~98
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.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | 6-digit code from the invite email |
| name | string | – | Optional display name when creating a new user |
| token | string | yes | Invite token returned by create_team_member_invite or from the invite link |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
add_knowledge_text ~82
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.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Document body text |
| name | string | yes | Friendly title for the document |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
append_post_block ~102
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.
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | array | yes | Block(s) to append |
| postId | string | yes | The post ID |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
archive_survey ~32
Archive a survey and remove it from active survey lists.
| Name | Type | Req | Description |
|---|---|---|---|
| surveyId | string | yes | Survey ID to archive |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
assign_staff_to_service ~53
Assign a staff member to a booking service. Pass users.id from list_staff.userId.
| Name | Type | Req | Description |
|---|---|---|---|
| serviceId | string | yes | Service ID |
| userId | string | yes | users.id from list_staff.userId |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
attach_post_cover_from_job ~193
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.
| Name | Type | Req | Description |
|---|---|---|---|
| assetIndex | integer | – | Which asset to use when the job produced multiple outputs. Default 0. |
| jobId | string | yes | The ai-media job ID (from generate_image, generate_post_cover, or POST /v6/merchant/ai-media/generate) |
| pollIfRunning | boolean | – | When true, advance polling once if the job is still running. Default true. |
| pollTimeoutMs | integer | – | When pollIfRunning is true, wait up to this long for terminal state. Default 30000. |
| postId | string | yes | The post ID |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
attach_tags ~55
Attach one or more tags to a member/account. Useful for segmenting members after filtering.
| Name | Type | Req | Description |
|---|---|---|---|
| accountIds | array | yes | Member/account IDs to tag (max 100) |
| tagId | string | yes | Tag ID to attach |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
cancel_booking ~95
Cancel a booking and create a durable refund receipt. Uses the merchant refund setting unless refundMethod is provided.
| Name | Type | Req | Description |
|---|---|---|---|
| bookingId | string | yes | The booking ID to cancel |
| idempotencyKey | string | yes | Unique key for this cancellation attempt; reuse it only when retrying the same request |
| reason | string | – | Cancellation reason |
| refundMethod | string | – | Refund cash manually or convert refundable cash to member credit |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
cancel_subscription ~44
Cancel a subscription. Destructive — turns off auto-renew and prevents further billing cycles. Existing paid periods stay valid until end.
| Name | Type | Req | Description |
|---|---|---|---|
| subscriptionId | string | yes | Subscription ID |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
check_plan_operation ~125
Preflight whether an intended operation is allowed by token scopes, enabled modules, subscription state, and quota. Provide toolName, quotaCode, or moduleCode.
| Name | Type | Req | Description |
|---|---|---|---|
| delta | integer | – | Planned usage increment. Currently quota checks are single-resource preflights. |
| moduleCode | string | – | Module code to check, e.g. whatsapp or crm |
| quotaCode | string | – | Quota code to check, e.g. contacts or mcp_calls_per_minute |
| toolName | string | – | MCP tool name to preflight, e.g. create_account |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
clone ~93
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.
| Name | Type | Req | Description |
|---|---|---|---|
| entityId | string | yes | ID of the entity to clone |
| entityType | string | yes | Type of entity to clone |
| name | string | – | Override the name of the cloned entity (defaults to "Original Name (Copy)") |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
commit_customer_import ~65
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.
| Name | Type | Req | Description |
|---|---|---|---|
| rows | array | yes | – |
| sessionId | string | yes | sessionId from preview_customer_import |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
complete_booking ~34
Mark a booking as completed. Triggers commission calculation if configured.
| Name | Type | Req | Description |
|---|---|---|---|
| bookingId | string | yes | The booking ID to complete |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
confirm_booking ~26
Confirm a pending booking.
| Name | Type | Req | Description |
|---|---|---|---|
| bookingId | string | yes | The booking ID to confirm |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
convert_lead ~161
Convert an account: qualify its open lead (creating one if needed) and link exactly one pipeline deal. Also promotes lifeStage lead -> active. Safe to repeat — a second call lands on the same lead and deal. Works on accounts that are already active.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Lead account ID |
| createDeal | boolean | – | Deprecated and ignored — a convert always links a deal |
| dealAmount | number | – | Optional deal amount |
| dealClosingDate | string | – | Optional deal close date |
| dealName | string | – | Optional deal name |
| dealStage | string | – | Optional initial deal stage ("lead" is an alias of "discovery") |
| lifeStage | string | – | Lifecycle after convert (default active) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
copy_service_tier_pricing ~70
Copy the complete pricing and booking-policy configuration from one membership tier to another on the same booking service.
| Name | Type | Req | Description |
|---|---|---|---|
| serviceId | string | yes | Booking service ID |
| sourceTierId | string | yes | Membership tier to copy from |
| targetTierId | string | yes | Membership tier to replace |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_account ~205
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.
| Name | Type | Req | Description |
|---|---|---|---|
| address | object | – | Postal address |
| string | – | Email address | |
| enrollMembership | boolean | – | Whether to create an active membership immediately |
| expiresAt | string | – | Optional ISO expiry for the membership |
| firstName | string | – | First name for individual accounts |
| lastName | string | – | Last name for individual accounts |
| lifeStage | string | – | CRM life stage. Defaults to active. |
| name | string | yes | Account/customer display name |
| notes | string | – | Internal notes |
| phone | string | – | Phone number |
| source | string | – | Acquisition source. Defaults to api. |
| tierId | string | – | Membership tier ID to enroll into. If omitted, the company default tier may apply. |
| type | string | – | Account type. Defaults to individual. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_booking ~138
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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | The member/account ID |
| bookingDate | string | yes | Date in YYYY-MM-DD format |
| endTime | string | yes | End time in HH:MM format |
| notes | string | – | Booking notes |
| resourceId | string | – | Resource ID |
| serviceId | string | yes | The service ID |
| staffId | string | – | Staff member ID |
| startTime | string | yes | Start time in HH:MM format |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_broadcast ~133
Create a DRAFT WhatsApp or SMS broadcast campaign. The broadcast is NOT sent — admin must review and send it from the Broadcasts page.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | – | Channel (default whatsapp) |
| name | string | yes | Campaign name |
| recipientFilter | – | – | Audience for this draft. Omit for all customers, use { tagIds: ["..."] } for the legacy tag filter, or provide recipientType with the required recipientIds, segmentId, or tierId. |
| scheduledAt | string | – | ISO date to schedule the broadcast |
| templateId | string | – | Message template ID to use |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_campaign ~261
Create an email, SMS, WhatsApp, or push campaign in DRAFT. audienceExclusions can omit specific account IDs and recipients of previous campaign IDs. For email channelConfig, use subject + htmlBody + optional plainTextBody. recipientSource="list" is accepted as an alias for "individual".
| Name | Type | Req | Description |
|---|---|---|---|
| audienceExclusions | object | – | Optional exclusions: accountIds contains specific customer account IDs; campaignIds contains previous campaign IDs whose accepted recipients must be omitted. A recipient matching any rule is excluded. |
| channel | string | yes | email | sms | whatsapp | push |
| channelConfig | object | – | Channel-specific config: subject + htmlBody for email, body for sms/whatsapp, templateId, etc. Legacy email html is normalized to htmlBody. |
| name | string | yes | Campaign name (internal) |
| recipientIds | array | – | Required if recipientSource="individual", "list", or "csv"; values are account IDs |
| recipientSource | string | – | Where to source recipients from. "list" is normalized to "individual". |
| scheduledAt | – | – | ISO datetime for scheduled send (status must be SCHEDULED) |
| segmentId | – | – | Required if recipientSource="segment" |
| status | string | – | Default DRAFT |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_category ~84
Create a CMS post category (e.g. "Equipment", "Injection — Botox"). For sub-categories, use namespaced names — the table is flat.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Description |
| name | string | yes | Category name |
| slug | string | – | Auto-generated from name if omitted. |
| sortOrder | number | – | Sort order (lower = earlier) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_contact ~76
Create a contact on an existing CRM account.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Owning account ID |
| string | – | ||
| isPrimary | boolean | – | Mark as primary contact |
| jobTitle | string | – | Job title |
| name | string | yes | Contact name |
| phone | string | – | Phone |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_custom_field ~130
Create a custom field definition for CRM entities. Use options for select or multiselect fields.
| Name | Type | Req | Description |
|---|---|---|---|
| entityType | string | yes | Entity type, e.g. account, contact, deal, booking |
| fieldLabel | string | yes | Human-readable label, e.g. Preferred branch |
| fieldName | string | yes | Stable machine name, e.g. preferred_branch |
| fieldType | string | yes | Field type |
| isRequired | boolean | – | Whether this field is required |
| options | array | – | Allowed values for select/multiselect fields |
| sortOrder | number | – | Display order |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_deal ~118
Create a CRM sales pipeline deal, optionally linked to a customer account and contact.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | – | – | Linked CRM account ID |
| amount | – | – | Deal amount |
| closingDate | – | – | Expected closing date |
| contactId | – | – | Linked contact ID |
| dealType | – | – | Deal type/category |
| description | – | – | Deal notes or description |
| name | string | yes | Deal name |
| ownerId | – | – | Owner user/team member ID |
| probability | – | – | Win probability, e.g. 25 |
| stage | – | – | Pipeline stage |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_inbox_reply_suggestion ~135
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.
| Name | Type | Req | Description |
|---|---|---|---|
| agentId | string | yes | AI colleague ID creating the suggestion |
| body | string | yes | Draft reply text for the merchant to review |
| conversationId | string | yes | Inbox conversation ID |
| metadata | object | – | Optional metadata such as rationale, confidence, or source refs |
| sourceMessageId | string | – | Inbound message ID this draft responds to |
| subject | string | – | Optional email subject suggestion |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_invoice ~106
Create a new invoice for a customer. Optionally include line items inline. Returns the new invoiceId.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Customer accountId (CRM account) |
| currency | string | – | ISO currency code (defaults to company default) |
| dueDate | string | – | Due date (ISO 8601 date) |
| lineItems | array | – | Line items to bill — totals are computed server-side |
| notes | string | – | Free-form notes shown on the invoice |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_note ~68
Add a note to a member/account, booking, ticket, or invoice.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Note content |
| entityId | string | yes | The entity ID |
| entityType | string | yes | Type of entity |
| isPinned | boolean | – | Pin this note to the top |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_offer_rule ~110
Create an upsell/cross-sell offer rule as draft. Specify trigger type, conditions, and suggested products with optional discounts.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Rule description |
| name | string | yes | Rule name |
| products | array | – | Products to suggest with optional discounts |
| triggerConfig | object | – | Trigger-specific configuration |
| triggerType | string | yes | When the offer triggers |
| type | string | yes | Rule type: upsell, cross_sell, bundle, or post_purchase |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_outlet ~135
Create a shop outlet/location. Optionally pass id to preserve a legacy UUID during migration.
| Name | Type | Req | Description |
|---|---|---|---|
| acceptsOrders | boolean | – | Whether outlet accepts online orders (default true) |
| address | – | – | Street address |
| id | string | – | Optional outlet UUID (for legacy migration; non-standard formats accepted) |
| isActive | boolean | – | Whether outlet is active (default true) |
| latitude | – | – | Latitude |
| logoUrl | – | – | Logo URL |
| longitude | – | – | Longitude |
| name | string | yes | Outlet name |
| phone | – | – | Contact phone |
| sortOrder | integer | – | Display sort order (default 0) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_plan_upgrade_link ~141
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.
| Name | Type | Req | Description |
|---|---|---|---|
| billingCycle | string | – | – |
| confirm | boolean | – | Required true to create a Stripe-hosted payment or billing link. |
| planCode | string | – | Target plan code, e.g. favcrm-lite. Either planId or planCode is required. |
| planId | string | – | Target plan ID. Use list_plan_options first if unknown. |
| returnUrl | string | – | Where Stripe should return after checkout/portal. Defaults to merchant billing settings. |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_post ~428
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.
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | array | – | 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, callo… |
| categoryIds | array | – | Category IDs (post types with supportsCategories only) |
| excerpt | string | – | Plain-text summary only — never JSON. Auto-derived from the first paragraph/heading block if omitted and the post type supports excerpts. |
| featuredImage | string | – | Cover image URL |
| meta | object | – | 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. |
| parentId | – | – | Parent post ID for nested types (e.g. pages). |
| publishedAt | – | – | ISO timestamp; required when status=scheduled. |
| seoDescription | string | – | SEO meta description |
| seoTitle | string | – | SEO title override |
| slug | string | – | URL slug. Auto-generated from title if omitted; collisions get -2, -3 suffix. |
| sortOrder | number | – | Sort order (lower = earlier) |
| status | string | – | Status (default draft) |
| tagIds | array | – | Tag IDs to attach to the post |
| title | string | yes | Post title |
| type | string | yes | Post type slug (e.g. blog_post, page, treatment). Must exist in post_types for this company. |
| visibility | string | – | Visibility (default public) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_post_type ~204
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.
| Name | Type | Req | Description |
|---|---|---|---|
| icon | – | – | Icon name or URL |
| label | string | yes | Singular UI label, e.g. "Treatment" |
| labelPlural | string | yes | Plural UI label, e.g. "Treatments" |
| slug | string | yes | Lowercase identifier, e.g. "treatment". Auto-derived from label if omitted. |
| sortOrder | number | – | Sort order (lower = earlier) |
| supportsBlocks | boolean | – | Default true |
| supportsCategories | boolean | – | Default true |
| supportsExcerpt | boolean | – | Default true |
| supportsFeaturedImage | boolean | – | Default true |
| supportsNesting | boolean | – | Default false |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_post_type_field ~287
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.
| Name | Type | Req | Description |
|---|---|---|---|
| fieldType | string | yes | Field type: text | textarea | richtext | number | boolean | date | datetime | select | multiselect | url | email | image | file | gallery | attachments | repeater |
| fields | array | – | Required for fieldType="repeater". Defines the child fields stored in each row object. |
| helpText | string | – | Optional hint shown in the UI |
| key | string | – | snake_case key used in meta. Auto-derived from label if omitted. |
| label | string | yes | Human-readable field label, e.g. "Tagline" |
| options | object | – | 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 merc… |
| postTypeId | string | yes | Post type ID (from list_post_types) |
| required | boolean | – | Whether the field is required on post creation (default false) |
| sortOrder | number | – | Sort order (lower = earlier) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_product ~122
Create a new shop product as DRAFT. Merchant can review and activate from the portal.
| Name | Type | Req | Description |
|---|---|---|---|
| categoryIds | array | – | Category IDs (first is primary) |
| description | string | – | Product description |
| discountPrice | string | – | Discounted price |
| memberPrice | string | – | Members-only price |
| name | string | yes | Product name |
| price | string | yes | Price as decimal string (e.g. "29.99") |
| productType | string | – | Product type (default one_time) |
| sku | string | – | SKU code |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_product_category ~84
Create a product category. Use parentId to create subcategories under an existing category.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Category description |
| name | string | yes | Category name |
| onlineEnabled | boolean | – | Show in online store (default true) |
| parentId | number | – | Parent category ID for subcategories |
| sortOrder | number | – | Display sort order |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_promotion ~254
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.
| Name | Type | Req | Description |
|---|---|---|---|
| bookingEnabled | boolean | – | Allow on bookings |
| code | string | yes | Coupon code customers enter at checkout (auto-uppercased) |
| description | string | – | Description |
| endsAt | – | – | ISO datetime — when the promo expires |
| eventEnabled | boolean | – | Allow on event registrations |
| maximumDiscount | – | – | Cap on percentage discounts, decimal string |
| minimumAmount | – | – | Minimum order amount required, decimal string |
| minimumQuantity | – | – | Minimum item count required |
| name | string | yes | Promotion name (internal) |
| onlineEnabled | boolean | – | Allow on online shop orders |
| posEnabled | boolean | – | Allow at POS |
| startsAt | – | – | ISO datetime — when the promo becomes valid |
| status | string | – | Default active |
| type | string | – | Default percentage |
| usageLimitPerCustomer | – | – | Max uses per single customer |
| usageLimitTotal | – | – | Max total uses across all customers |
| value | string | yes | Discount value as decimal string |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_resource ~98
Create a bookable resource (room, equipment, vehicle). Used by services that have requiresResource=true.
| Name | Type | Req | Description |
|---|---|---|---|
| capacity | number | – | How many concurrent bookings (default 1) |
| description | string | – | Description |
| name | string | yes | Resource name (e.g. "Treatment Room A") |
| status | string | – | Default active |
| type | string | yes | Free-form type label, e.g. "room", "equipment" |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_segment ~72
Create a new customer segment. Use STATIC for manual member lists, DYNAMIC for criteria-based auto-filtering.
| Name | Type | Req | Description |
|---|---|---|---|
| criteria | object | – | Dynamic segment criteria |
| description | string | – | Segment description |
| name | string | yes | Segment name |
| segmentType | string | – | Segment type (default DYNAMIC) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_service ~319
Create a bookable service. Sets duration, price, capacity, and policies. Use list_service_categories first if you want to attach to an existing category.
| Name | Type | Req | Description |
|---|---|---|---|
| allowedTierIds | array | – | Required when visibility=members_only |
| capacity | number | – | How many participants per slot (default 1) |
| categoryId | string | – | Existing service category ID |
| commissionCurrency | – | – | Commission currency (ISO code) |
| commissionType | – | – | Commission type: "fixed" or "percentage" |
| commissionValue | – | – | Commission amount as decimal string |
| cooldownMinutes | number | – | Minimum gap before bookings can be cancelled (default 0) |
| currency | string | – | ISO currency code, default HKD |
| description | string | – | Description |
| durationMinutes | number | yes | Duration of one booking in minutes |
| name | string | yes | Service name |
| price | string | – | Decimal string, e.g. "80.00". Defaults to "0". |
| requireLogin | boolean | – | Default true — guests cannot book |
| requiresConfirmation | boolean | – | If true, bookings start as pending and need confirm_booking |
| requiresResource | boolean | – | Whether the service requires a resource (room/equipment) |
| requiresStaff | boolean | – | Whether the service requires staff assignment |
| sortOrder | number | – | Sort order (lower = earlier) |
| status | string | – | Default active |
| type | string | – | Default one_on_one |
| visibility | string | – | Visibility: public | members_only | hidden |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_service_category ~61
Create a service category (e.g. "Treatments", "Classes") to group bookable services.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Description |
| name | string | yes | Category name |
| sortOrder | number | – | Sort order (lower = earlier) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_service_package ~127
Create a service package/prepaid session bundle. Use applicableType=SELECTED with applicableItems to limit the package to specific booking services or events.
| Name | Type | Req | Description |
|---|---|---|---|
| applicableItems | array | – | Items used when applicableType=SELECTED |
| applicableType | string | – | Default ALL |
| description | string | – | Description |
| name | string | yes | Package name |
| price | number | yes | Package price |
| sessionCount | integer | yes | Number of included sessions |
| status | string | – | Default ACTIVE |
| validDays | integer | yes | Validity window after purchase, in days |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_service_schedule ~203
Create a bookable schedule window for a service, including recurring weekly/daily availability.
| Name | Type | Req | Description |
|---|---|---|---|
| byWeekday | array | – | Weekdays for weekly recurrence: 0=Mon, 1=Tue, ... 6=Sun |
| date | string | yes | Start date or one-off date (YYYY-MM-DD) |
| endTime | string | yes | HH:MM (24h) |
| maxCapacity | number | – | Max bookings per generated slot |
| notes | string | – | Free-form notes |
| recurrence | string | – | Default none |
| recurrenceEndDate | string | – | YYYY-MM-DD |
| recurrenceInterval | number | – | Default 1 |
| resourceId | string | – | Optional resource ID to bind this schedule to a room/resource |
| serviceId | string | yes | Service ID |
| staffId | string | – | Optional companyMembers.id to bind this schedule to staff |
| startTime | string | yes | HH:MM (24h) |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
create_subscription ~169
Create a manual, non-renewing subscription record for a member. Use a subscription action link for provider-backed recurring billing.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Customer accountId |
| amount | number | – | Override amount per cycle (otherwise derived from tier) |
| autoRenew | boolean | – | Manual records cannot auto-renew |
| billingCycle | string | – | Billing cycle (default monthly) |
| currency | string | – | ISO currency code (otherwise derived from tier or company default) |
| currentPeriodEnd | string | – | Period end (ISO 8601). Defaults to start + cycle. |
| currentPeriodStart | string | – | Period start (ISO 8601). Defaults to now. |
| tierId | string | – | Membership tier ID — if set, amount/currency default from the tier |
| Name | Type | Req | Description |
|---|---|---|---|
| data | – | yes | Tool result payload — shape varies per tool, see the tool description |
| renderType | string | yes | UI rendering hint for the result |
| summary | string | yes | One-line human-readable summary of the action |
No examples provided.
What is the FavCRM MCP server?
FavCRM is an MCP server listed in the public MCP registry as io.favcrm/favcrm. Agentic CRM for service businesses, bookings, customers, WhatsApp, loyalty, invoicing. This page covers its hosted endpoint (https://api.favcrm.io/mcp).
Is the FavCRM MCP server safe to use?
FavCRM scores 93 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the FavCRM MCP server expose?
FavCRM exposes 230 tools: search_members, get_member_profile, preview_customer_import, commit_customer_import, create_account, and 225 more. Their descriptions and schemas cost roughly 19,599 tokens of context every time the server is loaded.
Does the FavCRM MCP server require authentication?
Yes. FavCRM asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the FavCRM MCP server still maintained?
FavCRM is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.