此 MCP 可以做什么
Provisions and manages form backends for websites, including form definitions, embed snippets, submissions, email notifications, spam controls, uploads, and signed webhooks.
工具
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['client_id'], 'properties': {'client_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Client id from list_clients or create_client.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['form_id'], 'properties': {'form_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Form id from list_forms, create_form, or bootstrap_site.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project (website) id from list_projects, create_project, or bootstrap_site.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'slug'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Client (company) display name.'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 80, 'minLength': 1, 'description': 'Lowercase hyphenated identifier, unique per team. Used for idempotent re-runs.'}, 'email': {'type': 'object', 'properties': {'intro': {'anyOf': [{'type': 'string', 'maxLength': 4000}, {'type': 'null'}], 'description': 'Plain-text paragraph above the submitted fields. Supports {{tokens}}. Null removes it.'}, 'subject': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'Notification email subject. Supports {{tokens}} such as {{form.name}} or {{name}}.'}, 'from_name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Display name on the From line of notification emails.'}, 'footer_mode': {'enum': ['furrow', 'minimal', 'off'], 'type': 'string', 'description': 'furrow shows the Furrow footer, minimal shows a one-line footer, off hides it (yearly plans only).'}, 'include_meta': {'type': 'boolean', 'description': 'Include submission metadata (IP, user agent, referrer, timestamp) below the fields.'}}, 'description': 'Notification email template for the project: subject, from_name, intro, footer_mode, include_meta.'}, 'forms': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'slug'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Form display name, e.g. Contact or Quote request.'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 80, 'minLength': 1, 'description': 'Lowercase hyphenated identifier, unique per project. Used for idempotent re-runs.'}, 'email': {'type': 'object', 'properties': {'intro': {'anyOf': [{'type': 'string', 'maxLength': 4000}, {'type': 'null'}], 'description': 'Per-form intro override. Supports {{tokens}}. Null falls back to the project intro.'}, 'subject': {'anyOf': [{'type': 'string', 'maxLength': 300, 'minLength': 1}, {'type': 'null'}], 'description': 'Per-form subject override. Supports {{tokens}}. Null falls back to the project subject.'}}, 'description': 'Per-form subject and intro overrides for the notification email.'}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'Posted field name. HTML checkbox groups / multi-select must end in [] (services[]) or only the last value is stored. JSON arrays omit the brackets.'}, 'type': {'type': 'string', 'maxLength': 40, 'minLength': 1, 'description': 'text, email, textarea, file, etc. type=file emits a file input in get_snippet.'}, 'label': {'anyOf': [{'type': 'string', 'maxLength': 120, 'minLength': 1}, {'type': 'null'}], 'description': 'Human label used in the snippet and notification email. Defaults to the field name.'}, 'report': {'type': 'boolean', 'default': False, 'description': 'Include this field in dashboard summaries and reports.'}}}, 'description': 'Shorthand for field_contract: the fields this form posts.'}, 'field_contract': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'Posted field name. HTML checkbox groups / multi-select must end in [] (services[]) or only the last value is stored. JSON arrays omit the brackets.'}, 'type': {'type': 'string', 'maxLength': 40, 'minLength': 1, 'description': 'text, email, textarea, file, etc. type=file emits a file input in get_snippet.'}, 'label': {'anyOf': [{'type': 'string', 'maxLength': 120, 'minLength': 1}, {'type': 'null'}], 'description': 'Human label used in the snippet and notification email. Defaults to the field name.'}, 'report': {'type': 'boolean', 'default': False, 'description': 'Include this field in dashboard summaries and reports.'}}}}, {'type': 'null'}], 'description': 'Declared fields (name, type, label, report). Drives get_snippet and the email layout. Null clears it.'}, 'webhook_url_override': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Webhook endpoint for this form only. Null inherits the project webhook.'}, 'redirect_url_override': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Success redirect for this form only. Null inherits default_redirect_url.'}, 'notify_emails_override': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'maxItems': 10}, {'type': 'null'}], 'description': "Recipients for this form only. Null inherits the project's notify_emails."}, 'webhook_secret_override': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': "HMAC secret for this form's webhook. Null inherits the project secret."}, 'require_turnstile_override': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'description': 'Force Turnstile on or off for this form. Null inherits the project setting.'}}}, 'default': [], 'description': 'Forms to create or update on the site, matched by slug. Re-running is safe.'}, 'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}, 'from_name': {'anyOf': [{'type': 'string', 'maxLength': 120, 'minLength': 1}, {'type': 'null'}], 'description': 'Legacy From display name. Prefer email.from_name.'}, 'webhook_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Public https endpoint that receives a signed JSON POST per clean submission. Null disables it.'}, 'project_name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Website display name. Defaults to the client name.'}, 'project_slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 80, 'minLength': 1, 'description': 'Website slug. Defaults to the client slug.'}, 'notify_emails': {'type': 'array', 'items': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'default': [], 'maxItems': 10, 'description': 'Addresses that receive each clean submission (max 10). Inherited by every form.'}, 'honeypot_field': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'Name of the hidden honeypot input the snippet emits. Defaults to _gotcha.'}, 'webhook_secret': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'HMAC-SHA256 secret for the X-Furrow-Signature header. Omit to have one generated and returned.'}, 'allowed_domains': {'type': 'array', 'items': {'type': 'string', 'maxLength': 253, 'minLength': 1}, 'description': "Hostnames allowed to post to this project's forms (example.com, www.example.com). Empty accepts any origin."}, 'uploads_enabled': {'type': 'boolean', 'description': "Accept multipart file fields on this project's forms."}, 'turnstile_secret': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'Cloudflare Turnstile secret used to verify tokens server-side. Null removes it.'}, 'upload_max_files': {'type': 'integer', 'maximum': 20, 'description': 'Max files per submission (up to 20).', 'exclusiveMinimum': 0}, 'rate_limit_per_ip': {'type': 'integer', 'maximum': 1000, 'description': 'Max submissions per IP within rate_limit_window_s.', 'exclusiveMinimum': 0}, 'require_turnstile': {'type': 'boolean', 'description': 'Reject submissions that lack a valid Turnstile token.'}, 'turnstile_site_key': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'Cloudflare Turnstile site key for the frontend widget. Null removes it.'}, 'rate_limit_window_s': {'type': 'integer', 'maximum': 86400, 'description': 'Rate-limit window in seconds (max 86400).', 'exclusiveMinimum': 0}, 'default_redirect_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Where classic HTML posts redirect after success. Null returns JSON/inline success instead.'}, 'upload_allowed_types': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9.+-]+\\/[a-z0-9.+*-]+$', 'maxLength': 80, 'minLength': 3}, 'maxItems': 20, 'minItems': 1, 'description': 'Allowed upload MIME types, e.g. application/pdf or image/*.'}, 'upload_max_file_bytes': {'type': 'integer', 'maximum': 26214400, 'description': 'Max bytes per file (up to 25 MB).', 'exclusiveMinimum': 0}, 'upload_max_total_bytes': {'type': 'integer', 'maximum': 52428800, 'description': 'Max total upload bytes per submission (up to 50 MB).', 'exclusiveMinimum': 0}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'slug'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Client (company) display name.'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 80, 'minLength': 1, 'description': 'Lowercase hyphenated identifier, unique per team. Used for idempotent re-runs.'}, 'strict': {'type': 'boolean', 'default': False, 'description': 'When true, fail if the slug already exists instead of returning the existing record.'}, 'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'slug', 'project_id'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Form display name, e.g. Contact or Quote request.'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 80, 'minLength': 1, 'description': 'Lowercase hyphenated identifier, unique per project. Used for idempotent re-runs.'}, 'email': {'type': 'object', 'properties': {'intro': {'anyOf': [{'type': 'string', 'maxLength': 4000}, {'type': 'null'}], 'description': 'Per-form intro override. Supports {{tokens}}. Null falls back to the project intro.'}, 'subject': {'anyOf': [{'type': 'string', 'maxLength': 300, 'minLength': 1}, {'type': 'null'}], 'description': 'Per-form subject override. Supports {{tokens}}. Null falls back to the project subject.'}}, 'description': 'Per-form subject and intro overrides for the notification email.'}, 'strict': {'type': 'boolean', 'default': False, 'description': 'When true, fail if the slug already exists instead of returning the existing record.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project (website) id from list_projects, create_project, or bootstrap_site.'}, 'field_contract': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'Posted field name. HTML checkbox groups / multi-select must end in [] (services[]) or only the last value is stored. JSON arrays omit the brackets.'}, 'type': {'type': 'string', 'maxLength': 40, 'minLength': 1, 'description': 'text, email, textarea, file, etc. type=file emits a file input in get_snippet.'}, 'label': {'anyOf': [{'type': 'string', 'maxLength': 120, 'minLength': 1}, {'type': 'null'}], 'description': 'Human label used in the snippet and notification email. Defaults to the field name.'}, 'report': {'type': 'boolean', 'default': False, 'description': 'Include this field in dashboard summaries and reports.'}}}}, {'type': 'null'}], 'description': 'Declared fields (name, type, label, report). Drives get_snippet and the email layout. Null clears it.'}, 'webhook_url_override': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Webhook endpoint for this form only. Null inherits the project webhook.'}, 'redirect_url_override': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Success redirect for this form only. Null inherits default_redirect_url.'}, 'notify_emails_override': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'maxItems': 10}, {'type': 'null'}], 'description': "Recipients for this form only. Null inherits the project's notify_emails."}, 'webhook_secret_override': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': "HMAC secret for this form's webhook. Null inherits the project secret."}, 'require_turnstile_override': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'description': 'Force Turnstile on or off for this form. Null inherits the project setting.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'slug', 'client_id'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Project (website) display name.'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 80, 'minLength': 1, 'description': 'Lowercase hyphenated identifier, unique per client. Used for idempotent re-runs.'}, 'email': {'type': 'object', 'properties': {'intro': {'anyOf': [{'type': 'string', 'maxLength': 4000}, {'type': 'null'}], 'description': 'Plain-text paragraph above the submitted fields. Supports {{tokens}}. Null removes it.'}, 'subject': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'Notification email subject. Supports {{tokens}} such as {{form.name}} or {{name}}.'}, 'from_name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Display name on the From line of notification emails.'}, 'footer_mode': {'enum': ['furrow', 'minimal', 'off'], 'type': 'string', 'description': 'furrow shows the Furrow footer, minimal shows a one-line footer, off hides it (yearly plans only).'}, 'include_meta': {'type': 'boolean', 'description': 'Include submission metadata (IP, user agent, referrer, timestamp) below the fields.'}}, 'description': 'Notification email template for the project: subject, from_name, intro, footer_mode, include_meta.'}, 'strict': {'type': 'boolean', 'default': False, 'description': 'When true, fail if the slug already exists instead of returning the existing record.'}, 'client_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Client id from list_clients or create_client.'}, 'from_name': {'anyOf': [{'type': 'string', 'maxLength': 120, 'minLength': 1}, {'type': 'null'}], 'description': 'Legacy From display name. Prefer email.from_name.'}, 'webhook_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Public https endpoint that receives a signed JSON POST per clean submission. Null disables it.'}, 'notify_emails': {'type': 'array', 'items': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'default': [], 'maxItems': 10, 'description': 'Addresses that receive each clean submission (max 10). Inherited by every form.'}, 'honeypot_field': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'Name of the hidden honeypot input the snippet emits. Defaults to _gotcha.'}, 'webhook_secret': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'HMAC-SHA256 secret for the X-Furrow-Signature header. Omit to have one generated and returned.'}, 'allowed_domains': {'type': 'array', 'items': {'type': 'string', 'maxLength': 253, 'minLength': 1}, 'description': "Hostnames allowed to post to this project's forms (example.com, www.example.com). Empty accepts any origin."}, 'uploads_enabled': {'type': 'boolean', 'description': "Accept multipart file fields on this project's forms."}, 'turnstile_secret': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'Cloudflare Turnstile secret used to verify tokens server-side. Null removes it.'}, 'upload_max_files': {'type': 'integer', 'maximum': 20, 'description': 'Max files per submission (up to 20).', 'exclusiveMinimum': 0}, 'rate_limit_per_ip': {'type': 'integer', 'maximum': 1000, 'description': 'Max submissions per IP within rate_limit_window_s.', 'exclusiveMinimum': 0}, 'require_turnstile': {'type': 'boolean', 'description': 'Reject submissions that lack a valid Turnstile token.'}, 'turnstile_site_key': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'Cloudflare Turnstile site key for the frontend widget. Null removes it.'}, 'rate_limit_window_s': {'type': 'integer', 'maximum': 86400, 'description': 'Rate-limit window in seconds (max 86400).', 'exclusiveMinimum': 0}, 'default_redirect_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Where classic HTML posts redirect after success. Null returns JSON/inline success instead.'}, 'upload_allowed_types': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9.+-]+\\/[a-z0-9.+*-]+$', 'maxLength': 80, 'minLength': 3}, 'maxItems': 20, 'minItems': 1, 'description': 'Allowed upload MIME types, e.g. application/pdf or image/*.'}, 'upload_max_file_bytes': {'type': 'integer', 'maximum': 26214400, 'description': 'Max bytes per file (up to 25 MB).', 'exclusiveMinimum': 0}, 'upload_max_total_bytes': {'type': 'integer', 'maximum': 52428800, 'description': 'Max total upload bytes per submission (up to 50 MB).', 'exclusiveMinimum': 0}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'product': {'enum': ['yearly', 'expansion'], 'type': 'string', 'description': 'yearly starts the $199/year plan; expansion adds a $99/year 5,000-submission pack to a yearly team.'}, 'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['client_id'], 'properties': {'client_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Client id from list_clients or create_client.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['form_id'], 'properties': {'form_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Form id from list_forms, create_form, or bootstrap_site.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project (website) id from list_projects, create_project, or bootstrap_site.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['form_id', 'framework'], 'properties': {'form_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Form id from list_forms, create_form, or bootstrap_site.'}, 'framework': {'enum': ['html', 'astro', 'next'], 'type': 'string', 'description': 'Snippet flavor: html (plain form), astro (component), or next (React client component).'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['submission_id'], 'properties': {'submission_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Submission id from list_submissions or a webhook payload.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'description': 'Page size, max 100.', 'exclusiveMinimum': 0}, 'cursor': {'type': 'string', 'minLength': 1, 'description': "Opaque cursor from the previous page's next_cursor."}, 'status': {'enum': ['active', 'archived', 'all'], 'type': 'string', 'description': 'Filter by archive state. Defaults to active.'}, 'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'description': 'Page size, max 100.', 'exclusiveMinimum': 0}, 'cursor': {'type': 'string', 'minLength': 1, 'description': "Opaque cursor from the previous page's next_cursor."}, 'status': {'enum': ['active', 'archived', 'all'], 'type': 'string', 'description': 'Filter by archive state. Defaults to active.'}, 'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}, 'client_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Only forms under this client's projects."}, 'project_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Only forms in this project.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'description': 'Page size, max 100.', 'exclusiveMinimum': 0}, 'cursor': {'type': 'string', 'minLength': 1, 'description': "Opaque cursor from the previous page's next_cursor."}, 'status': {'enum': ['active', 'archived', 'all'], 'type': 'string', 'description': 'Filter by archive state. Defaults to active.'}, 'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}, 'client_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Only projects under this client.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'spam': {'enum': ['clean', 'spam', 'unknown', 'all'], 'type': 'string', 'default': 'clean', 'description': 'Which submissions to return. Defaults to clean.'}, 'limit': {'type': 'integer', 'maximum': 100, 'description': 'Page size, max 100.', 'exclusiveMinimum': 0}, 'since': {'type': 'string', 'minLength': 1, 'description': 'ISO 8601 timestamp; only submissions created after this instant.'}, 'cursor': {'type': 'string', 'minLength': 1, 'description': "Opaque cursor from the previous page's next_cursor."}, 'form_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Only submissions to this form.'}, 'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Only submissions in this project.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project (website) id from list_projects, create_project, or bootstrap_site.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project (website) id from list_projects, create_project, or bootstrap_site.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'ai': {'type': 'object', 'properties': {'typesafe_api_key': {'anyOf': [{'type': 'string', 'maxLength': 500}, {'type': 'null'}], 'description': 'TypeSafe API key for the AI spam filter. Send null or an empty string to remove it. The key is write-only and never returned.'}, 'notify_suspected_spam': {'type': 'boolean', 'description': 'When true (the default), submissions the AI flags as spam still email notify addresses with a Potential spam label and send no webhook. Set false to silence those emails.'}}, 'description': 'AI spam filter. Off until this team saves its own TypeSafe key. One Jev call per heuristics-clean submission.'}, 'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'New workspace display name.'}, 'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}, 'branding': {'type': 'object', 'properties': {'mode': {'enum': ['furrow', 'off', 'agency'], 'type': 'string', 'description': 'furrow shows Furrow branding, off hides it, agency shows your own name/link/logo. Only yearly plans may change this.'}, 'logo_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Optional http(s) logo image URL when mode is agency. Null clears it.'}, 'agency_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Optional http(s) link for the agency name when mode is agency. Null clears it.'}, 'agency_name': {'anyOf': [{'type': 'string', 'maxLength': 120, 'minLength': 1}, {'type': 'null'}], 'description': 'Agency name shown when mode is agency. Null clears it.'}}, 'description': 'Account-wide branding for notification emails and hosted pages.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['client_id'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'New client display name.'}, 'client_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Client id from list_clients or create_client.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['form_id'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'New form display name.'}, 'email': {'type': 'object', 'properties': {'intro': {'anyOf': [{'type': 'string', 'maxLength': 4000}, {'type': 'null'}], 'description': 'Per-form intro override. Supports {{tokens}}. Null falls back to the project intro.'}, 'subject': {'anyOf': [{'type': 'string', 'maxLength': 300, 'minLength': 1}, {'type': 'null'}], 'description': 'Per-form subject override. Supports {{tokens}}. Null falls back to the project subject.'}}, 'description': 'Per-form subject and intro overrides for the notification email.'}, 'form_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Form id from list_forms, create_form, or bootstrap_site.'}, 'field_contract': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'Posted field name. HTML checkbox groups / multi-select must end in [] (services[]) or only the last value is stored. JSON arrays omit the brackets.'}, 'type': {'type': 'string', 'maxLength': 40, 'minLength': 1, 'description': 'text, email, textarea, file, etc. type=file emits a file input in get_snippet.'}, 'label': {'anyOf': [{'type': 'string', 'maxLength': 120, 'minLength': 1}, {'type': 'null'}], 'description': 'Human label used in the snippet and notification email. Defaults to the field name.'}, 'report': {'type': 'boolean', 'default': False, 'description': 'Include this field in dashboard summaries and reports.'}}}}, {'type': 'null'}], 'description': 'Declared fields (name, type, label, report). Drives get_snippet and the email layout. Null clears it.'}, 'webhook_url_override': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Webhook endpoint for this form only. Null inherits the project webhook.'}, 'redirect_url_override': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Success redirect for this form only. Null inherits default_redirect_url.'}, 'notify_emails_override': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'maxItems': 10}, {'type': 'null'}], 'description': "Recipients for this form only. Null inherits the project's notify_emails."}, 'webhook_secret_override': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': "HMAC secret for this form's webhook. Null inherits the project secret."}, 'require_turnstile_override': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'description': 'Force Turnstile on or off for this form. Null inherits the project setting.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['project_id'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'New project display name.'}, 'email': {'type': 'object', 'properties': {'intro': {'anyOf': [{'type': 'string', 'maxLength': 4000}, {'type': 'null'}], 'description': 'Plain-text paragraph above the submitted fields. Supports {{tokens}}. Null removes it.'}, 'subject': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'Notification email subject. Supports {{tokens}} such as {{form.name}} or {{name}}.'}, 'from_name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Display name on the From line of notification emails.'}, 'footer_mode': {'enum': ['furrow', 'minimal', 'off'], 'type': 'string', 'description': 'furrow shows the Furrow footer, minimal shows a one-line footer, off hides it (yearly plans only).'}, 'include_meta': {'type': 'boolean', 'description': 'Include submission metadata (IP, user agent, referrer, timestamp) below the fields.'}}, 'description': 'Notification email template for the project: subject, from_name, intro, footer_mode, include_meta.'}, 'branding': {'type': 'object', 'properties': {'mode': {'enum': ['furrow', 'off', 'agency'], 'type': 'string', 'description': 'furrow shows Furrow branding, off hides it, agency shows your own name/link/logo. Only yearly plans may change this.'}, 'logo_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Optional http(s) logo image URL when mode is agency. Null clears it.'}, 'agency_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Optional http(s) link for the agency name when mode is agency. Null clears it.'}, 'agency_name': {'anyOf': [{'type': 'string', 'maxLength': 120, 'minLength': 1}, {'type': 'null'}], 'description': 'Agency name shown when mode is agency. Null clears it.'}}, 'description': 'Per-project branding override for notification emails and hosted pages.'}, 'from_name': {'anyOf': [{'type': 'string', 'maxLength': 120, 'minLength': 1}, {'type': 'null'}], 'description': 'Legacy From display name. Prefer email.from_name.'}, 'project_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project (website) id from list_projects, create_project, or bootstrap_site.'}, 'webhook_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Public https endpoint that receives a signed JSON POST per clean submission. Null disables it.'}, 'notify_emails': {'type': 'array', 'items': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'maxItems': 10, 'description': 'Replace the notification recipients (max 10).'}, 'honeypot_field': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': 'Name of the hidden honeypot input the snippet emits. Defaults to _gotcha.'}, 'webhook_secret': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'HMAC-SHA256 secret for the X-Furrow-Signature header. Omit to have one generated and returned.'}, 'allowed_domains': {'type': 'array', 'items': {'type': 'string', 'maxLength': 253, 'minLength': 1}, 'description': 'Replace the allowed hostnames. Empty array accepts any origin.'}, 'uploads_enabled': {'type': 'boolean', 'description': "Accept multipart file fields on this project's forms."}, 'turnstile_secret': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'Cloudflare Turnstile secret used to verify tokens server-side. Null removes it.'}, 'upload_max_files': {'type': 'integer', 'maximum': 20, 'description': 'Max files per submission (up to 20).', 'exclusiveMinimum': 0}, 'rate_limit_per_ip': {'type': 'integer', 'maximum': 1000, 'description': 'Max submissions per IP within rate_limit_window_s.', 'exclusiveMinimum': 0}, 'require_turnstile': {'type': 'boolean', 'description': 'Reject submissions that lack a valid Turnstile token.'}, 'turnstile_site_key': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'Cloudflare Turnstile site key for the frontend widget. Null removes it.'}, 'rate_limit_window_s': {'type': 'integer', 'maximum': 86400, 'description': 'Rate-limit window in seconds (max 86400).', 'exclusiveMinimum': 0}, 'default_redirect_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Where classic HTML posts redirect after success. Null returns JSON/inline success instead.'}, 'upload_allowed_types': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9.+-]+\\/[a-z0-9.+*-]+$', 'maxLength': 80, 'minLength': 3}, 'maxItems': 20, 'minItems': 1, 'description': 'Allowed upload MIME types, e.g. application/pdf or image/*.'}, 'upload_max_file_bytes': {'type': 'integer', 'maximum': 26214400, 'description': 'Max bytes per file (up to 25 MB).', 'exclusiveMinimum': 0}, 'upload_max_total_bytes': {'type': 'integer', 'maximum': 52428800, 'description': 'Max total upload bytes per submission (up to 50 MB).', 'exclusiveMinimum': 0}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'New team (workspace) display name.'}, 'team_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Team id from list_teams. Required for operator tokens and OAuth logins; team-scoped frw_ tokens may omit it.'}}}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['webhook_url', 'project_id'], 'properties': {'project_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project (website) id from list_projects, create_project, or bootstrap_site.'}, 'webhook_url': {'anyOf': [{'type': 'string', 'format': 'uri'}, {'type': 'null'}], 'description': 'Public https endpoint that receives a signed JSON POST per clean submission. Null disables it.'}, 'webhook_secret': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': 'HMAC-SHA256 secret for X-Furrow-Signature. Omit to have one generated and returned.'}}}
近期工具变更
类似的 MCP 服务器
独行录 / opcmenu
Supports founder and company discovery, collaboration goals and tasks, events and signups, networking, messaging, profiles, produ…
Courier
Provides notification delivery infrastructure for users, tenants, lists, templates, preferences, journeys, automations, brands, a…
Odichat
Manages WhatsApp, Instagram, and Facebook inboxes with contacts, conversations, agents, automation rules, labels, canned response…
shiply
Publishes and manages web applications with SQL databases, serverless functions, domains, email tests, client intake, contracts, …
ALM X++ MCP Server
Supports D365 Finance and Operations development with X++ and AOT search, code analysis, Azure DevOps workflows, telemetry querie…
KaiCalls
Provides AI phone reception, outbound calling campaigns, call transcripts and recordings, lead management, routing, staff alerts,…
anima
Provides agent-owned email inboxes, phone and SMS identities, email drafting and sending, message search and threading, domains, …
SubmitraX
Manages forms, submissions, webhooks, workspaces, templates, exports, and public form rendering for static sites.