Server definition
- Hash
- sha256:ecac1863d247f612591b8965e2c66a449e94294cf0d4ff7977b1fcdcae0ddbf6
- What it is
- What a remote MCP server returned when asked what it offers: 29 tools
The blob, as servednamed by its sha256
{
"instructions": "ShipMyForm is an AI-native form backend: forms POST to https://shipmyform.com/f/<formId>; submissions are spam-filtered, stored, and routed to email, Slack, Sheets, Notion, webhooks and more. Everything the dashboard does is a tool here. No account yet? Ask the user for their email and call sign_up (never invent an address), keep the returned API key, reconnect with it, then verify_account with the emailed code. Then create_form → get_form_snippet to wire a site, add_connector to route submissions, publish_hosted_page for a standalone page. Free plans can do all of that; reading, classifying (label_submissions) and exporting submissions needs a paid plan, which start_upgrade sets up. Keys are scoped: get_account shows what yours may do, and a tool refusing with a scope error means you need a key the user creates — you cannot widen your own. When you only need to wire a form up, ask for preset 'wiring' at sign_up so you never hold access to the user's submissions. Docs: https://shipmyform.com/docs/mcp",
"tools": [
{
"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": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"config": {
"additionalProperties": {},
"description": "Field values keyed by the config field names",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
},
"type": {
"description": "Connector type from list_connector_types, e.g. 'slack'",
"type": "string"
}
},
"required": [
"formId",
"type",
"config"
],
"type": "object"
},
"name": "add_connector",
"outputSchema": null
},
{
"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": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"preset": {
"description": "Named scope bundle: full (everything), wiring (forms only, no submission access), readonly, triage",
"enum": [
"full",
"wiring",
"readonly",
"triage"
],
"type": "string"
},
"scopes": {
"description": "Explicit scopes, instead of a preset. Ignored where it would exceed the calling key's own scopes.",
"items": {
"enum": [
"forms:read",
"forms:write",
"forms:delete",
"submissions:read",
"submissions:write",
"submissions:delete",
"account:manage"
],
"type": "string"
},
"type": "array"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_api_key",
"outputSchema": null
},
{
"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": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"allowedDomains": {
"description": "Sites allowed to submit, e.g. ['example.com']. Empty = any.",
"items": {
"type": "string"
},
"maxItems": 20,
"type": "array"
},
"name": {
"description": "Human-readable form name, e.g. 'Contact form'",
"maxLength": 80,
"minLength": 1,
"type": "string"
},
"purpose": {
"description": "What the form is for, in a sentence. Helps the spam classifier.",
"maxLength": 500,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_form",
"outputSchema": null
},
{
"description": "Delete a form; its endpoint stops accepting submissions.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
}
},
"required": [
"formId"
],
"type": "object"
},
"name": "delete_form",
"outputSchema": null
},
{
"description": "Permanently delete submissions (and their files).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"items": {
"type": "string"
},
"maxItems": 200,
"minItems": 1,
"type": "array"
}
},
"required": [
"ids"
],
"type": "object"
},
"name": "delete_submissions",
"outputSchema": null
},
{
"description": "All of a form's submissions (up to 2,000) as CSV text, optionally filtered by status.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
},
"status": {
"enum": [
"ok",
"spam",
"flagged"
],
"type": "string"
}
},
"required": [
"formId"
],
"type": "object"
},
"name": "export_submissions",
"outputSchema": null
},
{
"description": "The account's email, verification state, plan, limits, usage and dashboard URL.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "get_account",
"outputSchema": null
},
{
"description": "A self-service billing portal URL: change plan, update the card, cancel.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "get_billing_portal",
"outputSchema": null
},
{
"description": "A form's full configuration, connectors and hosted-page status.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
}
},
"required": [
"formId"
],
"type": "object"
},
"name": "get_form",
"outputSchema": null
},
{
"description": "A copy-paste form snippet for a framework (html, react, vue, or fetch) wired to the form's endpoint.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
},
"framework": {
"default": "html",
"enum": [
"html",
"react",
"vue",
"fetch"
],
"type": "string"
}
},
"required": [
"formId"
],
"type": "object"
},
"name": "get_form_snippet",
"outputSchema": null
},
{
"description": "One submission with spam signals and delivery history.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"submissionId": {
"type": "string"
}
},
"required": [
"submissionId"
],
"type": "object"
},
"name": "get_submission",
"outputSchema": null
},
{
"description": "Delivered / spam-held / flagged counts for a form, plus workspace quota usage. Works on every plan.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
}
},
"required": [
"formId"
],
"type": "object"
},
"name": "get_submission_stats",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"items": {
"type": "string"
},
"maxItems": 200,
"minItems": 1,
"type": "array"
},
"label": {
"enum": [
"ok",
"spam",
"flagged"
],
"type": "string"
}
},
"required": [
"ids",
"label"
],
"type": "object"
},
"name": "label_submissions",
"outputSchema": null
},
{
"description": "API keys on this workspace (metadata only).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "list_api_keys",
"outputSchema": null
},
{
"description": "Every destination submissions can be routed to, with the config fields each needs and which plan it requires.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "list_connector_types",
"outputSchema": null
},
{
"description": "Connectors on a form with their status and last error.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
}
},
"required": [
"formId"
],
"type": "object"
},
"name": "list_connectors",
"outputSchema": null
},
{
"description": "The workspace's forms with their public endpoint URLs.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "list_forms",
"outputSchema": null
},
{
"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": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"countries": {
"description": "ISO 3166 alpha-2 codes",
"items": {
"type": "string"
},
"type": "array"
},
"deliveryFailed": {
"type": "boolean"
},
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
},
"hasFiles": {
"type": "boolean"
},
"limit": {
"default": 25,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"offset": {
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"q": {
"description": "Free-text search across field values",
"type": "string"
},
"since": {
"description": "ISO date; received on/after",
"type": "string"
},
"sort": {
"enum": [
"newest",
"oldest",
"score"
],
"type": "string"
},
"status": {
"enum": [
"ok",
"spam",
"flagged"
],
"type": "string"
},
"until": {
"description": "ISO date; received before",
"type": "string"
}
},
"type": "object"
},
"name": "list_submissions",
"outputSchema": null
},
{
"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": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
}
},
"required": [
"formId"
],
"type": "object"
},
"name": "publish_hosted_page",
"outputSchema": null
},
{
"description": null,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"connectorId": {
"type": "string"
}
},
"required": [
"connectorId"
],
"type": "object"
},
"name": "remove_connector",
"outputSchema": null
},
{
"description": "Email a fresh 6-digit verification code to the account's address.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "resend_verification_code",
"outputSchema": null
},
{
"description": "Revoke a key by id. The key in use on this connection cannot revoke itself.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"keyId": {
"type": "string"
}
},
"required": [
"keyId"
],
"type": "object"
},
"name": "revoke_api_key",
"outputSchema": null
},
{
"description": null,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"active": {
"type": "boolean"
},
"connectorId": {
"type": "string"
}
},
"required": [
"connectorId",
"active"
],
"type": "object"
},
"name": "set_connector_active",
"outputSchema": null
},
{
"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": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"agent": {
"description": "Your name, e.g. 'Claude Code', shown in the verification email.",
"maxLength": 40,
"type": "string"
},
"email": {
"description": "The user's email address. Ask for it; never invent one.",
"type": "string"
},
"preset": {
"description": "Named scope bundle: full (everything), wiring (forms only, no submission access), readonly, triage",
"enum": [
"full",
"wiring",
"readonly",
"triage"
],
"type": "string"
},
"scopes": {
"description": "Explicit scopes, instead of a preset. Ignored where it would exceed the calling key's own scopes.",
"items": {
"enum": [
"forms:read",
"forms:write",
"forms:delete",
"submissions:read",
"submissions:write",
"submissions:delete",
"account:manage"
],
"type": "string"
},
"type": "array"
},
"workspaceName": {
"maxLength": 80,
"type": "string"
}
},
"required": [
"email"
],
"type": "object"
},
"name": "sign_up",
"outputSchema": null
},
{
"description": "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).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"period": {
"default": "monthly",
"enum": [
"monthly",
"annual"
],
"type": "string"
},
"plan": {
"enum": [
"starter",
"pro"
],
"type": "string"
}
},
"required": [
"plan"
],
"type": "object"
},
"name": "start_upgrade",
"outputSchema": null
},
{
"description": "Send a test delivery through a connector and report the result.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"connectorId": {
"type": "string"
}
},
"required": [
"connectorId"
],
"type": "object"
},
"name": "test_connector",
"outputSchema": null
},
{
"description": null,
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
}
},
"required": [
"formId"
],
"type": "object"
},
"name": "unpublish_hosted_page",
"outputSchema": null
},
{
"description": "Change any subset of a form's settings: name, purpose, allowedDomains, redirectUrl, spamMode, active, storeSubmissions, validation rules, blocklist, autoResponder (Pro).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"active": {
"type": "boolean"
},
"allowedDomains": {
"items": {
"type": "string"
},
"type": "array"
},
"autoResponder": {
"properties": {
"enabled": {
"type": "boolean"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"subject": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"type": "object"
},
"blocklist": {
"description": "Emails, @domains or keywords that mark a submission as spam",
"items": {
"type": "string"
},
"type": "array"
},
"formId": {
"description": "Form id, e.g. frm_abc123",
"type": "string"
},
"name": {
"type": "string"
},
"purpose": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"redirectUrl": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Absolute URL visitors are sent to after submitting"
},
"spamMode": {
"enum": [
"basic",
"strict"
],
"type": "string"
},
"storeSubmissions": {
"type": "boolean"
},
"validation": {
"anyOf": [
{
"additionalProperties": {
"additionalProperties": {},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"propertyNames": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"description": "Server-side rules by field, e.g. { \"email\": { \"required\": true, \"type\": \"email\" }, \"message\": { \"minLength\": 10 } }. null clears."
}
},
"required": [
"formId"
],
"type": "object"
},
"name": "update_form",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"agent": {
"maxLength": 40,
"type": "string"
},
"code": {
"maxLength": 6,
"minLength": 6,
"type": "string"
},
"email": {
"description": "Required when not yet connected with a key",
"type": "string"
},
"preset": {
"description": "Named scope bundle: full (everything), wiring (forms only, no submission access), readonly, triage",
"enum": [
"full",
"wiring",
"readonly",
"triage"
],
"type": "string"
},
"scopes": {
"description": "Explicit scopes, instead of a preset. Ignored where it would exceed the calling key's own scopes.",
"items": {
"enum": [
"forms:read",
"forms:write",
"forms:delete",
"submissions:read",
"submissions:write",
"submissions:delete",
"account:manage"
],
"type": "string"
},
"type": "array"
}
},
"required": [
"code"
],
"type": "object"
},
"name": "verify_account",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:ecac1863d247f612591b8965e2c66a449e94294cf0d4ff7977b1fcdcae0ddbf6 | sha256sum