formpaste

Create and wire up contact forms from your coding agent. Forms, snippets, and submissions.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
88%
Naming quality
100%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool 'get_snippet' description contains placeholder textin get_snippet
  • INFOTool description contains placeholder or incomplete textin get_snippet

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~991Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (0.77% of 128k context)

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

npmformpaste-mcp1.0.1stdio

Remote endpoints

https://api.formpaste.com/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools