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
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools