formpaste
Create and wire up contact forms from your coding agent. Forms, snippets, and submissions.
Should I use this
Quality & Safety
Findings (3)
- HIGH
- MEDIUMin get_snippet
- INFOin get_snippet
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"formpaste": {
"command": "npx",
"args": [
"formpaste-mcp"
]
}
}
}Runnable packages
1.0.1stdioRemote endpoints
https://api.formpaste.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟡create_form(name, destinationEmail, framework)
Create a Formpaste form and return its access key + a wired snippet. Triggers destination verification for a new address (the owner completes it in the dashboard); an already-verified destination delivers immediately. Errors with: unauthorized, upgrade_required.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "A human-readable name for the form, e.g. \"Contact form\"."
},
"destinationEmail": {
"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,}$",
"description": "Where submissions are emailed. Must be verified before delivery starts."
},
"framework": {
"description": "Target framework for the returned snippet. Defaults to html.",
"type": "string",
"enum": [
"html",
"react",
"nextjs",
"astro",
"vue",
"svelte"
]
}
},
"required": [
"name",
"destinationEmail"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_snippet(framework, formId)
Return a copy-paste form snippet for a framework (html, react, nextjs, astro, vue, svelte). Pass formId to fill in a real access key; otherwise a placeholder is used. Errors with: unauthorized, invalid_framework.
Input Schema
{
"type": "object",
"properties": {
"framework": {
"type": "string",
"enum": [
"html",
"react",
"nextjs",
"astro",
"vue",
"svelte"
],
"description": "Target framework for the snippet."
},
"formId": {
"description": "An owned form id to fill in the real access key; omit for a placeholder.",
"type": "string"
}
},
"required": [
"framework"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡list_submissions(formId, folder, limit, includeContent)
List submissions for one of your forms. Returns counts + per-submission metadata by default; set includeContent to include message bodies (third-party PII). Errors with: unauthorized, not_found, forbidden. Requires a full-access token.
Input Schema
{
"type": "object",
"properties": {
"formId": {
"type": "string",
"description": "A form id from create_form or list_forms, e.g. frm_..."
},
"folder": {
"description": "Which folder to list. Defaults to inbox.",
"type": "string",
"enum": [
"inbox",
"spam"
]
},
"limit": {
"description": "Maximum number of submissions to return.",
"type": "number"
},
"includeContent": {
"description": "Include full submission message bodies (third-party PII). Defaults to false.",
"type": "boolean"
}
},
"required": [
"formId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_forms
List all forms on your account, each with its id, name, access_key, and inbox/spam counts. Use this to discover form ids or confirm a form you just created exists. Errors with: unauthorized.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_form(formId)
Read one of your forms to verify it is wired correctly: returns its access_key, destination_email, destination_verified (whether submissions will be emailed yet), allowed_domains, and notification/autoresponder/webhook config. Never returns the webhook signing secret. Errors with: unauthorized, not_found.
Input Schema
{
"type": "object",
"properties": {
"formId": {
"type": "string",
"description": "A form id from create_form or list_forms, e.g. frm_..."
}
},
"required": [
"formId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡send_test_submission(formId, fields)
Store a TEST submission so you can prove a form is live and receiving. Stored only: it appears in the owner's Inbox with a Test badge but sends NO email, runs NO spam scoring, and never counts toward quota. Optionally pass sample fields; omit to use a default payload. Capped at the 5 newest test rows per form. Errors with: unauthorized, not_found, invalid_input, too_many_fields, field_too_large.
Input Schema
{
"type": "object",
"properties": {
"formId": {
"type": "string",
"description": "A form id from create_form or list_forms, e.g. frm_..."
},
"fields": {
"description": "Optional sample form fields as a flat string map, e.g. { name, email, message }. Omit to use a default test payload.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"formId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence