{"serverId":"mcp-registry/com.shipmyform/shipmyform","tools":[{"name":"add_connector","fixed":{"name":"add_connector","description":"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.","inputSchema":{"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"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add a connector"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":202,"tokensAfter":202},{"name":"create_api_key","fixed":{"name":"create_api_key","description":"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.","inputSchema":{"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."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create an API key"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":252,"tokensAfter":252},{"name":"create_form","fixed":{"name":"create_form","description":"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.","inputSchema":{"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."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a form"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":197,"tokensAfter":197},{"name":"delete_form","fixed":{"name":"delete_form","description":"Delete a form; its endpoint stops accepting submissions.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["formId"],"properties":{"formId":{"type":"string","description":"Form id, e.g. frm_abc123"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete form"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":81,"tokensAfter":81},{"name":"delete_submissions","fixed":{"name":"delete_submissions","description":"Permanently delete submissions (and their files).","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["ids"],"properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":200,"minItems":1}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete submissions"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":82,"tokensAfter":82},{"name":"export_submissions","fixed":{"name":"export_submissions","description":"All of a form's submissions (up to 2,000) as CSV text, optionally filtered by status.","inputSchema":{"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"}}},"annotations":{"readOnlyHint":true},"title":"Export submissions as CSV"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"get_account","fixed":{"name":"get_account","description":"The account's email, verification state, plan, limits, usage and dashboard URL.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get account"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":62,"tokensAfter":62},{"name":"get_billing_portal","fixed":{"name":"get_billing_portal","description":"A self-service billing portal URL: change plan, update the card, cancel.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true},"title":"Billing portal link"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":62,"tokensAfter":62},{"name":"get_form","fixed":{"name":"get_form","description":"A form's full configuration, connectors and hosted-page status.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["formId"],"properties":{"formId":{"type":"string","description":"Form id, e.g. frm_abc123"}}},"annotations":{"readOnlyHint":true},"title":"Get form"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":82,"tokensAfter":82},{"name":"get_form_snippet","fixed":{"name":"get_form_snippet","description":"A copy-paste form snippet for a framework (html, react, vue, or fetch) wired to the form's endpoint.","inputSchema":{"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"}}},"annotations":{"readOnlyHint":true},"title":"Get form snippet"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"get_submission","fixed":{"name":"get_submission","description":"One submission with spam signals and delivery history.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["submissionId"],"properties":{"submissionId":{"type":"string"}}},"annotations":{"readOnlyHint":true},"title":"Get a submission"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"get_submission_stats","fixed":{"name":"get_submission_stats","description":"Delivered / spam-held / flagged counts for a form, plus workspace quota usage. Works on every plan.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["formId"],"properties":{"formId":{"type":"string","description":"Form id, e.g. frm_abc123"}}},"annotations":{"readOnlyHint":true},"title":"Get submission stats"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"list_api_keys","fixed":{"name":"list_api_keys","description":"API keys on this workspace (metadata only).","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true},"title":"List API keys"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":53,"tokensAfter":53},{"name":"list_connector_types","fixed":{"name":"list_connector_types","description":"Every destination submissions can be routed to, with the config fields each needs and which plan it requires.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true},"title":"List connector types"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"list_connectors","fixed":{"name":"list_connectors","description":"Connectors on a form with their status and last error.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["formId"],"properties":{"formId":{"type":"string","description":"Form id, e.g. frm_abc123"}}},"annotations":{"readOnlyHint":true},"title":"List a form's connectors"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":81,"tokensAfter":81},{"name":"list_forms","fixed":{"name":"list_forms","description":"The workspace's forms with their public endpoint URLs.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","properties":{}},"annotations":{"readOnlyHint":true},"title":"List forms"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":55,"tokensAfter":55},{"name":"list_submissions","fixed":{"name":"list_submissions","description":"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.","inputSchema":{"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"}}},"annotations":{"readOnlyHint":true},"title":"List submissions"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":298,"tokensAfter":298},{"name":"publish_hosted_page","fixed":{"name":"publish_hosted_page","description":"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.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["formId"],"properties":{"formId":{"type":"string","description":"Form id, e.g. frm_abc123"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Publish a hosted form page"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":121,"tokensAfter":121},{"name":"remove_connector","fixed":{"name":"remove_connector","description":"","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["connectorId"],"properties":{"connectorId":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Remove a connector"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":58,"tokensAfter":58},{"name":"revoke_api_key","fixed":{"name":"revoke_api_key","description":"Revoke a key by id. The key in use on this connection cannot revoke itself.","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["keyId"],"properties":{"keyId":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false},"title":"Revoke an API key"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":75,"tokensAfter":75},{"name":"set_connector_active","fixed":{"name":"set_connector_active","description":"","inputSchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["connectorId","active"],"properties":{"active":{"type":"boolean"},"connectorId":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Enable or disable a connector"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":69,"tokensAfter":69},{"name":"sign_up","fixed":{"name":"sign_up","description":"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).","inputSchema":{"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}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create an account"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":327,"tokensAfter":327},{"name":"start_upgrade","fixed":{"name":"start_upgrade","description":"Get a hosted checkout URL for the Starter or Business plan. Payment is completed by a person on that page; the plan activates automatically afterwards (check with get_account).","inputSchema":{"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"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Start a paid plan"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"update_form","fixed":{"name":"update_form","description":"Change any subset of a form's settings: name, purpose, allowedDomains, redirectUrl, spamMode, active, storeSubmissions, validation rules, blocklist, autoResponder (Pro).","inputSchema":{"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":["minimal","relaxed","standard","strict"],"type":"string","description":"How hard this form filters: minimal (nothing is filtered, paid plans only), relaxed (flag but always deliver), standard, strict. Abuse protection — rate limits, honeypot — is unaffected."},"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"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Update form settings"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":470,"tokensAfter":470}],"toolsChanged":24,"tokensSaved":0,"todo":[{"tool":"create_api_key","params":["name"]},{"tool":"delete_submissions","params":["ids"]},{"tool":"export_submissions","params":["status"]},{"tool":"get_form_snippet","params":["framework"]},{"tool":"get_submission","params":["submissionId"]},{"tool":"label_submissions","params":["ids","label"]},{"tool":"list_submissions","params":["sort","limit","offset","status","hasFiles","deliveryFailed"]},{"tool":"remove_connector","params":["connectorId"]},{"tool":"revoke_api_key","params":["keyId"]},{"tool":"set_connector_active","params":["active","connectorId"]},{"tool":"sign_up","params":["workspaceName"]},{"tool":"start_upgrade","params":["plan","period"]},{"tool":"test_connector","params":["connectorId"]},{"tool":"update_form","params":["name","active","purpose","autoResponder","allowedDomains","storeSubmissions"]},{"tool":"verify_account","params":["code","agent"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}