MCP Server

ShipMyForm

com.shipmyform/shipmyform
Business & Operations Developer Tools Public & reachable MCP 2025-11-25

What this MCP does

Creates hosted or embeddable web form endpoints, manages submissions, exports data, and routes submissions to email, webhooks, and business applications.

add_connector
Add a connector
Route a form's submissions somewhere: email, webhook, Slack, Discord, Airtable, HubSpot, Telegram and more. Get the config fields from list_connector_types. OAuth connectors (Google Sheets, Notion) must be added in the dashboard.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId', 'type', 'config'], 'properties': {'type': {'type': 'string', 'description': "Connector type from list_connector_types, e.g. 'slack'"}, 'config': {'type': 'object', 'description': 'Field values keyed by the config field names', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}}}
create_api_key
Create an API key
Mint another API key for this workspace (shown once), optionally narrower than this one. A key can never grant scopes it does not itself hold, so this is the safe way to hand a limited key to another agent.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'preset': {'enum': ['full', 'wiring', 'readonly', 'triage'], 'type': 'string', 'description': 'Named scope bundle: full (everything), wiring (forms only, no submission access), readonly, triage'}, 'scopes': {'type': 'array', 'items': {'enum': ['forms:read', 'forms:write', 'forms:delete', 'submissions:read', 'submissions:write', 'submissions:delete', 'account:manage'], 'type': 'string'}, 'description': "Explicit scopes, instead of a preset. Ignored where it would exceed the calling key's own scopes."}}}
create_form
Create a form
Create a form and get its endpoint plus a paste-ready HTML snippet. Email notifications to the account owner are set up automatically. Works on every plan.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1, 'description': "Human-readable form name, e.g. 'Contact form'"}, 'purpose': {'type': 'string', 'maxLength': 500, 'description': 'What the form is for, in a sentence. Helps the spam classifier.'}, 'allowedDomains': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 20, 'description': "Sites allowed to submit, e.g. ['example.com']. Empty = any."}}}
delete_form
Delete form
Delete a form; its endpoint stops accepting submissions.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId'], 'properties': {'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}}}
delete_submissions
Delete submissions
Permanently delete submissions (and their files).
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['ids'], 'properties': {'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1}}}
export_submissions
Export submissions as CSV
All of a form's submissions (up to 2,000) as CSV text, optionally filtered by status.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId'], 'properties': {'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}, 'status': {'enum': ['ok', 'spam', 'flagged'], 'type': 'string'}}}
get_account
Get account
The account's email, verification state, plan, limits, usage and dashboard URL.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
get_billing_portal
Billing portal link
A self-service billing portal URL: change plan, update the card, cancel.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
get_form
Get form
A form's full configuration, connectors and hosted-page status.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId'], 'properties': {'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}}}
get_form_snippet
Get form snippet
A copy-paste form snippet for a framework (html, react, vue, or fetch) wired to the form's endpoint.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId'], 'properties': {'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}, 'framework': {'enum': ['html', 'react', 'vue', 'fetch'], 'type': 'string', 'default': 'html'}}}
get_submission
Get a submission
One submission with spam signals and delivery history.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['submissionId'], 'properties': {'submissionId': {'type': 'string'}}}
get_submission_stats
Get submission stats
Delivered / spam-held / flagged counts for a form, plus workspace quota usage. Works on every plan.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId'], 'properties': {'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}}}
label_submissions
Classify submissions
Mark submissions as spam, ok (not spam) or flagged. spam/ok also teach the classifier, so your judgement improves future filtering. This is how you triage in your own environment: list, decide, label.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['ids', 'label'], 'properties': {'ids': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 200, 'minItems': 1}, 'label': {'enum': ['ok', 'spam', 'flagged'], 'type': 'string'}}}
list_api_keys
List API keys
API keys on this workspace (metadata only).
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
list_connectors
List a form's connectors
Connectors on a form with their status and last error.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId'], 'properties': {'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}}}
list_connector_types
List connector types
Every destination submissions can be routed to, with the config fields each needs and which plan it requires.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
list_forms
List forms
The workspace's forms with their public endpoint URLs.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
list_submissions
List submissions
Read submissions across the workspace or for one form, with filters (status, date range, text search, country, attachments, failed deliveries) and paging. Spam is excluded unless status is 'spam'. Requires a paid plan.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Free-text search across field values'}, 'sort': {'enum': ['newest', 'oldest', 'score'], 'type': 'string'}, 'limit': {'type': 'integer', 'default': 25, 'maximum': 100, 'minimum': 1}, 'since': {'type': 'string', 'description': 'ISO date; received on/after'}, 'until': {'type': 'string', 'description': 'ISO date; received before'}, 'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0}, 'status': {'enum': ['ok', 'spam', 'flagged'], 'type': 'string'}, 'hasFiles': {'type': 'boolean'}, 'countries': {'type': 'array', 'items': {'type': 'string'}, 'description': 'ISO 3166 alpha-2 codes'}, 'deliveryFailed': {'type': 'boolean'}}}
publish_hosted_page
Publish a hosted form page
Publish a standalone page for the form on shipmyform.com (no website needed) and get its URL plus an embed script. Uses the designed page if one exists, otherwise a default email + message form.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId'], 'properties': {'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}}}
remove_connector
Remove a connector
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['connectorId'], 'properties': {'connectorId': {'type': 'string'}}}
resend_verification_code
Resend the verification code
Email a fresh 6-digit verification code to the account's address.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
revoke_api_key
Revoke an API key
Revoke a key by id. The key in use on this connection cannot revoke itself.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['keyId'], 'properties': {'keyId': {'type': 'string'}}}
set_connector_active
Enable or disable a connector
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['connectorId', 'active'], 'properties': {'active': {'type': 'boolean'}, 'connectorId': {'type': 'string'}}}
sign_up
Create an account
Start a ShipMyForm account from an email address, with no browser. A 6-digit code is emailed to the address; verify_account with { email, code } then returns the API key. Works without authentication. Also works for an existing account (the code approves API access).
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['email'], 'properties': {'agent': {'type': 'string', 'maxLength': 40, 'description': "Your name, e.g. 'Claude Code', shown in the verification email."}, 'email': {'type': 'string', 'description': "The user's email address. Ask for it; never invent one."}, 'preset': {'enum': ['full', 'wiring', 'readonly', 'triage'], 'type': 'string', 'description': 'Named scope bundle: full (everything), wiring (forms only, no submission access), readonly, triage'}, 'scopes': {'type': 'array', 'items': {'enum': ['forms:read', 'forms:write', 'forms:delete', 'submissions:read', 'submissions:write', 'submissions:delete', 'account:manage'], 'type': 'string'}, 'description': "Explicit scopes, instead of a preset. Ignored where it would exceed the calling key's own scopes."}, 'workspaceName': {'type': 'string', 'maxLength': 80}}}
start_upgrade
Start a paid plan
Get a hosted checkout URL for the Starter or Pro plan. Payment is completed by a person on that page; the plan activates automatically afterwards (check with get_account).
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['plan'], 'properties': {'plan': {'enum': ['starter', 'pro'], 'type': 'string'}, 'period': {'enum': ['monthly', 'annual'], 'type': 'string', 'default': 'monthly'}}}
test_connector
Test a connector
Send a test delivery through a connector and report the result.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['connectorId'], 'properties': {'connectorId': {'type': 'string'}}}
unpublish_hosted_page
Unpublish the hosted page
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId'], 'properties': {'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}}}
update_form
Update form settings
Change any subset of a form's settings: name, purpose, allowedDomains, redirectUrl, spamMode, active, storeSubmissions, validation rules, blocklist, autoResponder (Pro).
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['formId'], 'properties': {'name': {'type': 'string'}, 'active': {'type': 'boolean'}, 'formId': {'type': 'string', 'description': 'Form id, e.g. frm_abc123'}, 'purpose': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'spamMode': {'enum': ['basic', 'strict'], 'type': 'string'}, 'blocklist': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Emails, @domains or keywords that mark a submission as spam'}, 'validation': {'anyOf': [{'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, {'type': 'null'}], 'description': 'Server-side rules by field, e.g. { "email": { "required": true, "type": "email" }, "message": { "minLength": 10 } }. null clears.'}, 'redirectUrl': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Absolute URL visitors are sent to after submitting'}, 'autoResponder': {'type': 'object', 'properties': {'enabled': {'type': 'boolean'}, 'message': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'subject': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}, 'allowedDomains': {'type': 'array', 'items': {'type': 'string'}}, 'storeSubmissions': {'type': 'boolean'}}}
verify_account
Verify the account email
Prove the address with the 6-digit code emailed by sign_up. Without a key on the connection, pass the email too: on success this returns the API key (shown once). Turns on email notifications.
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['code'], 'properties': {'code': {'type': 'string', 'maxLength': 6, 'minLength': 6}, 'agent': {'type': 'string', 'maxLength': 40}, 'email': {'type': 'string', 'description': 'Required when not yet connected with a key'}, 'preset': {'enum': ['full', 'wiring', 'readonly', 'triage'], 'type': 'string', 'description': 'Named scope bundle: full (everything), wiring (forms only, no submission access), readonly, triage'}, 'scopes': {'type': 'array', 'items': {'enum': ['forms:read', 'forms:write', 'forms:delete', 'submissions:read', 'submissions:write', 'submissions:delete', 'account:manage'], 'type': 'string'}, 'description': "Explicit scopes, instead of a preset. Ignored where it would exceed the calling key's own scopes."}}}
Added
export_submissions
Oct. 1, 2026, 2:40 a.m.
Added
delete_submissions
Oct. 1, 2026, 2:40 a.m.
Added
label_submissions
Oct. 1, 2026, 2:40 a.m.
Added
get_submission
Oct. 1, 2026, 2:40 a.m.
Added
list_submissions
Oct. 1, 2026, 2:40 a.m.
Added
unpublish_hosted_page
Oct. 1, 2026, 2:40 a.m.
Added
publish_hosted_page
Oct. 1, 2026, 2:40 a.m.
Added
remove_connector
Oct. 1, 2026, 2:40 a.m.
Added
set_connector_active
Oct. 1, 2026, 2:40 a.m.
Added
test_connector
Oct. 1, 2026, 2:40 a.m.
Added
add_connector
Oct. 1, 2026, 2:40 a.m.
Added
list_connectors
Oct. 1, 2026, 2:40 a.m.
Added
list_connector_types
Oct. 1, 2026, 2:40 a.m.
Added
get_submission_stats
Oct. 1, 2026, 2:40 a.m.
Added
get_form_snippet
Oct. 1, 2026, 2:40 a.m.
Added
delete_form
Oct. 1, 2026, 2:40 a.m.
Added
update_form
Oct. 1, 2026, 2:40 a.m.
Added
get_form
Oct. 1, 2026, 2:40 a.m.
Added
create_form
Oct. 1, 2026, 2:40 a.m.
Added
list_forms
Oct. 1, 2026, 2:40 a.m.
Added
get_billing_portal
Oct. 1, 2026, 2:40 a.m.
Added
start_upgrade
Oct. 1, 2026, 2:40 a.m.
Added
revoke_api_key
Oct. 1, 2026, 2:40 a.m.
Added
list_api_keys
Oct. 1, 2026, 2:40 a.m.
Added
create_api_key
Oct. 1, 2026, 2:40 a.m.
Added
get_account
Oct. 1, 2026, 2:40 a.m.
Added
resend_verification_code
Oct. 1, 2026, 2:40 a.m.
Added
verify_account
Oct. 1, 2026, 2:40 a.m.
Added
sign_up
Oct. 1, 2026, 2:40 a.m.