Koskamo

Zovo PDF Form Fill MCP

This MCP server lists and fills fields in standard fillable PDF forms. It identifies field types, maps user answers to correct fields, validates constraints, and returns a filled PDF with an optional download link.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Zovo PDF Form Fill MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-08Published by Zovo
You need:No sign-in is needed.
MCP endpoint (Streamable HTTP)
https://pdf-form-fill.zovo.one/mcp
Vendor documentation

What its tools do

2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

2 of 2 have a description · 2 of 2 declare behavior hints · 2 of 2 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • List fields in a PDF form
  • Fill form with user answers
  • Flatten filled PDF to lock values

Source and maintenance

Community listingRegistry 1.0.0

Protocol and capabilities

Server
pdf-form-fill 1.0.0
MCP protocol negotiated in check
2025-11-25
Tools
2 advertised
Resources
1 advertised
Resource templates
1 advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "resources": {
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Zovo PDF Form Fill lists the fields of a fillable PDF form (name, type, options, limits and the printed label next to each field) and fills them. Call list_form_fields first to learn the field names, then fill_pdf_form with a value for each field. The filled PDF is read back to check each value before the download link is given. It does not sign signature fields and does not fill XFA-only forms.

Tools

2 advertised

list_form_fields — List PDF form fields
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user attaches a fillable PDF form and wants to see its fields or wants it filled. It returns each AcroForm field with its full name, type (text, checkbox, radio, dropdown, listbox, signature), current value, options, required flag, maximum length, page and the printed label next to it, 40 fields at a time (use start for more). Does not change the PDF. Does not read XFA-only forms or scanned paper forms with no fields.

list_form_fields input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "file"
  ],
  "properties": {
    "file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "file_name": {
          "type": "string",
          "description": "Original file name if known, e.g. statement.pdf."
        },
        "mime_type": {
          "type": "string",
          "description": "Media type if known, e.g. application/pdf."
        },
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        }
      },
      "description": "The fillable PDF form, e.g. volunteer-form.pdf."
    },
    "page": {
      "type": "integer",
      "maximum": 10000,
      "minimum": 1,
      "description": "Only list fields on this page, e.g. 2. Default: all pages."
    },
    "start": {
      "type": "integer",
      "maximum": 2000,
      "minimum": 0,
      "description": "Skip this many fields for long forms, e.g. 40 to see fields 41-80. Default 0."
    }
  }
}
list_form_fields output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "file",
    "page_count",
    "fields_total",
    "fields_listed",
    "start",
    "page_filter",
    "counts",
    "required_empty",
    "fields",
    "next_start",
    "labels_read",
    "notes",
    "status"
  ],
  "properties": {
    "file": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "start": {
      "type": "number"
    },
    "counts": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "number"
      }
    },
    "fields": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "type",
          "label",
          "value",
          "required",
          "page"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "page": {
            "type": [
              "number",
              "null"
            ]
          },
          "type": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "value": {},
          "options": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tooltip": {
            "type": "string"
          },
          "editable": {
            "type": "boolean"
          },
          "required": {
            "type": "boolean"
          },
          "multiline": {
            "type": "boolean"
          },
          "read_only": {
            "type": "boolean"
          },
          "max_length": {
            "type": "number"
          },
          "multi_select": {
            "type": "boolean"
          },
          "option_labels": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      }
    },
    "status": {
      "type": "string"
    },
    "next_start": {
      "type": [
        "number",
        "null"
      ]
    },
    "page_count": {
      "type": "number"
    },
    "labels_read": {
      "type": "boolean"
    },
    "page_filter": {
      "type": [
        "number",
        "null"
      ]
    },
    "fields_total": {
      "type": "number"
    },
    "fields_listed": {
      "type": "number"
    },
    "preview_count": {
      "type": "object",
      "required": [
        "shown",
        "total"
      ],
      "properties": {
        "shown": {
          "type": "number"
        },
        "total": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "required_empty": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
list_form_fields annotations
{
  "title": "List PDF form fields",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
fill_pdf_form — Fill a PDF form
Advertised by the server during the last successful anonymous check.
Advertised read-only

Use this when the user wants to fill in a fillable PDF form with given answers. Pass the attached PDF and a list of {field, value} using the field names from list_form_fields: text for text fields, true/false for checkboxes, one listed option for radio groups and dropdowns (case-insensitive matches are reported), a list for multi-select list boxes. Unknown names, options that are not listed and text over a field's maximum length are refused with the reason, and nothing is filled. Returns a new filled PDF (fields editable, or flattened when flatten is true), read back to confirm each value, plus required fields still empty. Does not sign signature fields, does not change the user's original file, and does not fill XFA-only forms.

fill_pdf_form input schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "file",
    "values"
  ],
  "properties": {
    "file": {
      "type": "object",
      "required": [
        "download_url",
        "file_id"
      ],
      "properties": {
        "file_id": {
          "type": "string",
          "description": "ChatGPT file id, e.g. file_abc123."
        },
        "file_name": {
          "type": "string",
          "description": "Original file name if known, e.g. statement.pdf."
        },
        "mime_type": {
          "type": "string",
          "description": "Media type if known, e.g. application/pdf."
        },
        "download_url": {
          "type": "string",
          "description": "Temporary download link for the file, supplied by ChatGPT."
        }
      },
      "description": "The fillable PDF form to fill, e.g. w9-like.pdf."
    },
    "values": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "field",
          "value"
        ],
        "properties": {
          "field": {
            "type": "string",
            "maxLength": 500,
            "minLength": 1,
            "description": "Field name as list_form_fields shows it, e.g. full_name or topmostSubform[0].Page1[0].f1_01[0]."
          },
          "value": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 2000
              },
              {
                "type": "boolean"
              },
              {
                "type": "number"
              },
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 500
                },
                "maxItems": 100
              }
            ],
            "description": "Text for a text field (e.g. Jane Doe), true/false for a checkbox, one option for a radio group or dropdown (e.g. Evening), or a list of options for a multi-select list box (e.g. [\"Kitchen\",\"Garden\"]). An empty string clears the field."
          }
        }
      },
      "maxItems": 2000,
      "minItems": 1,
      "description": "The values to put in the form, e.g. [{\"field\":\"full_name\",\"value\":\"Jane Doe\"},{\"field\":\"agree\",\"value\":true}]."
    },
    "flatten": {
      "type": "boolean",
      "description": "true: make the filled values part of the page so they are no longer editable. Default false (fields stay editable)."
    }
  }
}
fill_pdf_form output schema
{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "required": [
    "file",
    "output_file",
    "fields_total",
    "filled_count",
    "filled",
    "skipped",
    "empty_required",
    "unsigned_signature_fields",
    "verified",
    "flattened",
    "notes",
    "downloads",
    "expires_in_hours"
  ],
  "properties": {
    "file": {
      "type": "string"
    },
    "notes": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "filled": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "field",
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "field": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "skipped": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "field",
          "reason"
        ],
        "properties": {
          "field": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    },
    "verified": {
      "type": "object",
      "required": [
        "checked",
        "matched",
        "mismatched",
        "cleaned"
      ],
      "properties": {
        "checked": {
          "type": "number"
        },
        "cleaned": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "matched": {
          "type": "number"
        },
        "mismatched": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false
    },
    "downloads": {
      "type": "object",
      "required": [
        "pdf"
      ],
      "properties": {
        "pdf": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "flattened": {
      "type": "boolean"
    },
    "output_file": {
      "type": "string"
    },
    "fields_total": {
      "type": "number"
    },
    "filled_count": {
      "type": "number"
    },
    "preview_count": {
      "type": "object",
      "required": [
        "shown",
        "total"
      ],
      "properties": {
        "shown": {
          "type": "number"
        },
        "total": {
          "type": "number"
        }
      },
      "additionalProperties": false
    },
    "empty_required": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "expires_in_hours": {
      "type": "number"
    },
    "unsigned_signature_fields": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "additionalProperties": false
}
fill_pdf_form annotations
{
  "title": "Fill a PDF form",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

pdf-form-fill-widget — Zovo PDF Form Fill view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo PDF Form Fill.

pdf-form-fill-widget URI
ui://widget/pdf-form-fill-v1-1.0.0-846cd69fec01011cc65d9cf8dc39b665a5e5da9e20193c6be345b5c9ff46897e.html

MIME type: text/html;profile=mcp-app

pdf-form-fill-widget-legacy — Zovo PDF Form Fill view (previous versions)

Advertised by the server during the last successful anonymous check.

pdf-form-fill-widget-legacy URI template
ui://widget/pdf-form-fill-{version}.html

MIME type: text/html;profile=mcp-app

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2150 ms
95th percentile latency
2150 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2150 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zovo-pdf-form-fill-mcp https://pdf-form-fill.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zovo-pdf-form-fill-mcp --url https://pdf-form-fill.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zovo-pdf-form-fill-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zovo-pdf-form-fill-mcp": {
      "url": "https://pdf-form-fill.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zovo-pdf-form-fill-mcp": {
      "type": "streamableHttp",
      "url": "https://pdf-form-fill.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-pdf-form-fill-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-pdf-form-fill-mcp": {
      "type": "http",
      "url": "https://pdf-form-fill.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zovo-pdf-form-fill-mcp https://pdf-form-fill.zovo.one/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://pdf-form-fill.zovo.one/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "zovo-pdf-form-fill-mcp": {
      "serverUrl": "https://pdf-form-fill.zovo.one/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Zovo PDF Form Fill MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.