Skip to content

Paperform MCP by usefulapi

by usefulapi.io · remote · no sign-in to list tools · v1.4.3 · published by io.usefulapi

Read Paperform forms, submissions, products and coupons, Papersign documents, and manage coupons.

Deletes · 4Changes · 1

23 tools: 4 can delete or cancel things, 1 change things and 18 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http paperform https://paperform.usefulapi.io/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "paperform_get_coupon" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "paperform_get_coupon" says "get": a word for reading.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

23 tools

Deletes or cancels 4Claude Code: deny
  • paperform_create_couponWRITE: create a coupon code on a form, with a fixed discountAmount or a discountPercentage (not both), an optional target (price or subscription) and expiry.No findings

    Why it is in this group

    • The name "paperform_create_coupon" says "create": a word for a change.
    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: create a coupon code on a form, with a fixed discountAmount or a discountPercentage (not both), an optional target (price or subscription) and expiry. Respondents can use it at checkout as soon as it is enabled. Undo: paperform_update_coupon with enabled=false. Paperform: POST /forms/{slug_or_id}/coupons.

    Annotations the server declares

    • title: Create a form coupon
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
  • paperform_set_product_quantityWRITE: set how many units of a form product are available (its stock quantity), e.g.No findings

    Why it is in this group

    • The name "paperform_set_product_quantity" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: set how many units of a form product are available (its stock quantity), e.g. after restocking. Replaces the current value; read it first with paperform_get_product. Not atomic: it overwrites rather than adjusts, so a sale between your read and this write is lost. Paperform: PUT /forms/{slug_or_id}/products/{sku}/quantity.

    Annotations the server declares

    • title: Set a product's stock quantity
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
  • paperform_set_product_soldWRITE: set the number of units of a form product recorded as sold (e.g.No findings

    Why it is in this group

    • The name "paperform_set_product_sold" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: set the number of units of a form product recorded as sold (e.g. to correct it after a refund or an offline sale). Replaces the current value; read it first with paperform_get_product. Not atomic: it overwrites rather than adjusts, so a sale between your read and this write is lost. Paperform: PUT /forms/{slug_or_id}/products/{sku}/sold.

    Annotations the server declares

    • title: Set a product's sold count
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
  • paperform_update_couponWRITE: change a coupon on a form — enable or disable it, change its discount (amount or percentage), target or expiry (null = never expires).No findings

    Why it is in this group

    • The name "paperform_update_coupon" says "update": a word for a change.
    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    WRITE: change a coupon on a form — enable or disable it, change its discount (amount or percentage), target or expiry (null = never expires). Only the fields you pass are sent. Paperform: PUT /forms/{slug_or_id}/coupons/{code}.

    Annotations the server declares

    • title: Update a form coupon
    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
Changes things 1Claude Code: ask
  • paperform_get_couponFetch one coupon on a form by code.1 finding

    Why it is in this group

    • The name "paperform_get_coupon" says "get": a word for reading.
    • The input takes a statement or command to run (input.code), which can change anything it can reach.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "paperform_get_coupon" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "paperform_get_coupon" says "get": a word for reading.

      What this check looks for
    Description, as the server wrote it
    Fetch one coupon on a form by code. Paperform: GET /forms/{slug_or_id}/coupons/{code}.

    Annotations the server declares

    • title: Get a form coupon
    • readOnlyHint: true
    • openWorldHint: true
Only reads 18Claude Code: allow
  • paperform_get_formFetch one form by slug, custom slug or id: title, description, url, live flag, tags, submission_count, space and dates.No findings

    Why it is in this group

    • The name "paperform_get_form" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one form by slug, custom slug or id: title, description, url, live flag, tags, submission_count, space and dates. Paperform: GET /forms/{slug_or_id}.

    Annotations the server declares

    • title: Get a form
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_get_papersign_documentFetch one Papersign document by id: status, signers and their progress, variables, folder, space and dates.No findings

    Why it is in this group

    • The name "paperform_get_papersign_document" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one Papersign document by id: status, signers and their progress, variables, folder, space and dates. Needs the Papersign API. Paperform: GET /papersign/documents/{id}.

    Annotations the server declares

    • title: Get a Papersign document
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_get_partial_submissionFetch one partial submission by id, with the answers given so far.No findings

    Why it is in this group

    • The name "paperform_get_partial_submission" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one partial submission by id, with the answers given so far. It may have been completed since (submitted_at set); submitted_at null means abandoned. Paperform: GET /partial-submissions/{id}.

    Annotations the server declares

    • title: Get a partial submission
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_get_productFetch one product on a form by SKU: price, quantity in stock, sold count, limits.No findings

    Why it is in this group

    • The name "paperform_get_product" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one product on a form by SKU: price, quantity in stock, sold count, limits. Paperform: GET /forms/{slug_or_id}/products/{sku}.

    Annotations the server declares

    • title: Get a form product
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_get_signed_document_urlGet a download link for a completed (fully signed) Papersign document as a PDF.No findings

    Why it is in this group

    • The name "paperform_get_signed_document_url" says "get": a word for reading.
    Description, as the server wrote it
    Get a download link for a completed (fully signed) Papersign document as a PDF. A fresh link is made on each call and is valid for one week (expires_at_utc). Needs the Papersign API. Paperform: GET /papersign/documents/{id}/completed-document-url.

    Annotations the server declares

    • title: Get the signed PDF link
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_get_submissionFetch one submission by id, with every answer, device info, payment charge and PDFs.No findings

    Why it is in this group

    • The name "paperform_get_submission" says "get": a word for reading.
    Description, as the server wrote it
    Fetch one submission by id, with every answer, device info, payment charge and PDFs. Paperform: GET /submissions/{id}.

    Annotations the server declares

    • title: Get a submission
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_couponsList a form's coupon codes (code, enabled, target, discountAmount or discountPercentage, expiresAt).No findings

    Why it is in this group

    • The name "paperform_list_coupons" says "list": a word for reading.
    Description, as the server wrote it
    List a form's coupon codes (code, enabled, target, discountAmount or discountPercentage, expiresAt). Paperform: GET /forms/{slug_or_id}/coupons.

    Annotations the server declares

    • title: List form coupons
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_form_fieldsList a form's questions (key, title, type, required, custom_key, description, options).No findings

    Why it is in this group

    • The name "paperform_list_form_fields" says "list": a word for reading.
    Description, as the server wrote it
    List a form's questions (key, title, type, required, custom_key, description, options). The field keys are the keys of a submission's `data` object, so read this to interpret answers. Paperform: GET /forms/{slug_or_id}/fields.

    Annotations the server declares

    • title: List form fields
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_formsList the forms in the Paperform account (id, slug, custom_slug, title, url, live, tags, submission_count, space_id, dates), newest first.No findings

    Why it is in this group

    • The name "paperform_list_forms" says "list": a word for reading.
    Description, as the server wrote it
    List the forms in the Paperform account (id, slug, custom_slug, title, url, live, tags, submission_count, space_id, dates), newest first. Search by title, or also by slug/custom_slug with search_fields. Start here to find the slug or id the other tools need. Paperform: GET /forms.

    Annotations the server declares

    • title: List forms
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_papersign_documentsList Papersign e-signature documents (id, name, status, folder, space, signers, variables, source form/submission, sent/completed dates), filtered by name, status, folder, space or…No findings

    Why it is in this group

    • The name "paperform_list_papersign_documents" says "list": a word for reading.
    Description, as the server wrote it
    List Papersign e-signature documents (id, name, status, folder, space, signers, variables, source form/submission, sent/completed dates), filtered by name, status, folder, space or the Paperform submission that created them. Needs the Papersign API. Paperform: GET /papersign/documents.

    Annotations the server declares

    • title: List Papersign documents
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_papersign_foldersList Papersign folders (id, name, parent_id, space_id), optionally inside one space or folder.No findings

    Why it is in this group

    • The name "paperform_list_papersign_folders" says "list": a word for reading.
    Description, as the server wrote it
    List Papersign folders (id, name, parent_id, space_id), optionally inside one space or folder. Needs the Papersign API. Paperform: GET /papersign/folders.

    Annotations the server declares

    • title: List Papersign folders
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_papersign_spacesList Papersign spaces (id, name, root_folder_id).No findings

    Why it is in this group

    • The name "paperform_list_papersign_spaces" says "list": a word for reading.
    Description, as the server wrote it
    List Papersign spaces (id, name, root_folder_id). Needs the Papersign API. Paperform: GET /papersign/spaces.

    Annotations the server declares

    • title: List Papersign spaces
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_partial_submissionsList one page of a form's partial submissions (someone started the form), newest first: answers so far, last_answered field, dates.No findings

    Why it is in this group

    • The name "paperform_list_partial_submissions" says "list": a word for reading.
    Description, as the server wrote it
    List one page of a form's partial submissions (someone started the form), newest first: answers so far, last_answered field, dates. Partials that were later completed stay in the list with submitted_at set; only those with submitted_at null are abandoned. Useful for drop-off analysis and follow-ups. Paperform: GET /forms/{slug_or_id}/partial-submissions.

    Annotations the server declares

    • title: List partial submissions
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_productsList the products sold on a form (SKU, name, price, quantity in stock, sold, minimum/maximum, discountable, images).No findings

    Why it is in this group

    • The name "paperform_list_products" says "list": a word for reading.
    Description, as the server wrote it
    List the products sold on a form (SKU, name, price, quantity in stock, sold, minimum/maximum, discountable, images). Paperform: GET /forms/{slug_or_id}/products.

    Annotations the server declares

    • title: List form products
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_space_formsList the forms in one space.No findings

    Why it is in this group

    • The name "paperform_list_space_forms" says "list": a word for reading.
    Description, as the server wrote it
    List the forms in one space. Needs the Business API. Paperform: GET /spaces/{id}/forms.

    Annotations the server declares

    • title: List the forms in a space
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_spacesList the account's spaces (folders that group forms): id, name, dates.No findings

    Why it is in this group

    • The name "paperform_list_spaces" says "list": a word for reading.
    Description, as the server wrote it
    List the account's spaces (folders that group forms): id, name, dates. Needs the Business API. Paperform: GET /spaces.

    Annotations the server declares

    • title: List spaces
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_submissionsList one page of a form's completed submissions, newest first: answers (`data`, keyed by field key — see paperform_list_form_fields), device and UTM info, payment `charge`, generat…No findings

    Why it is in this group

    • The name "paperform_list_submissions" says "list": a word for reading.
    Description, as the server wrote it
    List one page of a form's completed submissions, newest first: answers (`data`, keyed by field key — see paperform_list_form_fields), device and UTM info, payment `charge`, generated PDFs and created_at. Page with skip/next_skip or after_id/last_id; filter by date. Paperform: GET /forms/{slug_or_id}/submissions.

    Annotations the server declares

    • title: List submissions
    • readOnlyHint: true
    • openWorldHint: true
  • paperform_list_webhooksList the webhooks on a form (id, target_url, triggers: submission / partial_submission, dates).No findings

    Why it is in this group

    • The name "paperform_list_webhooks" says "list": a word for reading.
    Description, as the server wrote it
    List the webhooks on a form (id, target_url, triggers: submission / partial_submission, dates). Needs the Business API. Paperform: GET /forms/{slug_or_id}/webhooks.

    Annotations the server declares

    • title: List form webhooks
    • readOnlyHint: true
    • openWorldHint: true

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.4.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http paperform https://paperform.usefulapi.io/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__paperform__paperform_list_forms",
      "mcp__paperform__paperform_get_form",
      "mcp__paperform__paperform_list_form_fields",
      "mcp__paperform__paperform_list_submissions",
      "mcp__paperform__paperform_get_submission",
      "mcp__paperform__paperform_list_partial_submissions",
      "mcp__paperform__paperform_get_partial_submission",
      "mcp__paperform__paperform_list_products",
      "mcp__paperform__paperform_get_product",
      "mcp__paperform__paperform_list_coupons",
      "mcp__paperform__paperform_list_webhooks",
      "mcp__paperform__paperform_list_spaces",
      "mcp__paperform__paperform_list_space_forms",
      "mcp__paperform__paperform_list_papersign_documents",
      "mcp__paperform__paperform_get_papersign_document",
      "mcp__paperform__paperform_get_signed_document_url",
      "mcp__paperform__paperform_list_papersign_folders",
      "mcp__paperform__paperform_list_papersign_spaces"
    ],
    "ask": [
      "mcp__paperform__paperform_get_coupon"
    ],
    "deny": [
      "mcp__paperform__paperform_create_coupon",
      "mcp__paperform__paperform_update_coupon",
      "mcp__paperform__paperform_set_product_quantity",
      "mcp__paperform__paperform_set_product_sold"
    ]
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as paperform. Review it before you use it.