Mergewell Mail Merge
Mail merge from Excel or CSV to PDF, right in the chat.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (3)
- HIGH
- MEDIUMin generate_merged_documents
- INFOin generate_merged_documents
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"mail-merge": {
"url": "https://mail-merge.zovo.one/mcp"
}
}
}Remote-Endpunkte
https://mail-merge.zovo.one/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (2)
🟢preview_mail_merge(document_type, file, sheet, csv_text, records, ...)
Use this when the user wants to check a mail merge before printing: see how their spreadsheet (CSV or Excel) or list fills a letter, certificate or envelope template, which template fields like {{First Name}} have no matching column, which columns were matched by a similar name (first_name for First Name), and which records have empty values. Returns the first 3 merged records (or from preview_from) and a missing-field report; no files. Does not send email, print, or make labels. Do not use for Outlook or Gmail email merges.
Eingabe-Schema
{
"type": "object",
"properties": {
"document_type": {
"type": "string",
"enum": [
"letter",
"certificate",
"envelope"
],
"description": "What to merge into: letter (US business letter, one per row), certificate (landscape award/completion/participation certificate, one per row), or envelope (#10 envelope with recipient and return address). Example: letter."
},
"file": {
"type": "object",
"properties": {
"download_url": {
"type": "string",
"description": "Temporary download link for the file, supplied by ChatGPT."
},
"file_id": {
"type": "string",
"description": "ChatGPT file id, e.g. file_abc123."
},
"mime_type": {
"description": "Media type if known, e.g. application/pdf.",
"type": "string"
},
"file_name": {
"description": "Original file name if known, e.g. statement.pdf.",
"type": "string"
}
},
"required": [
"download_url",
"file_id"
],
"description": "The spreadsheet with one row per recipient: Excel .xlsx, CSV or TSV, first row = column headers, e.g. donors.xlsx."
},
"sheet": {
"description": "For an .xlsx file: the sheet (tab) name to use, e.g. Donors. Defaults to the first sheet that has data.",
"type": "string",
"maxLength": 100
},
"csv_text": {
"description": "Alternative to a file: the list pasted as CSV or tab-separated text with a header row, e.g. \"First Name,Last Name,City\\nAna,Lopez,Austin\".",
"type": "string",
"maxLength": 400000
},
"records": {
"description": "Alternative to a file: the recipients typed as objects with the same keys, e.g. [{\"First Name\": \"Ana\", \"Last Name\": \"Lopez\", \"Amount\": 250}].",
"maxItems": 5000,
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean",
"null"
]
}
}
},
"names": {
"description": "Shortcut for a plain list of names (one column called Name), e.g. [\"Ana Lopez\", \"Ben Okafor\"]. Handy for certificates.",
"maxItems": 5000,
"type": "array",
"items": {
"type": "string",
"maxLength": 200
}
},
"has_header": {
"description": "Set false if the first row of the file is data, not column names (columns are then called Column A, Column B, ...). Default true.",
"type": "boolean"
},
"template": {
"description": "Letters: the letter text from the salutation to the last paragraph, with merge fields, e.g. \"Dear {{First Name|Friend}},\\n\\nThank you for your gift of {{Amount:currency}} on {{Gift Date:date}}.{{#if Company}} Please thank everyone at {{Company}}.{{/if}}\". Syntax: {{Field}}, {{Field|default}}, {{Field:format}} with formats currency, number, integer, ordinal, date, short_date, iso_date, upper, lower, title, first_word, last_word; {{#if Field}}...{{else}}...{{/if}}, {{#if Field = value}}, {{#if Gift > 0}} (also !=, <, >=, <=; numbers or dates), {{#unless Field}}...{{/unless}}; {{today}} is the document date.",
"type": "string",
"maxLength": 20000
},
"subject": {
"description": "Letters: optional subject line printed as \"Re: ...\", may contain fields, e.g. \"Your {{Year}} giving statement\".",
"type": "string",
"maxLength": 300
},
"address_template": {
"description": "Optional recipient address block (letters: inside address; envelopes: delivery address), one line per row, e.g. \"{{First Name}} {{Last Name}}\\n{{Street}}\\n{{City}}, {{State}} {{ZIP}}\". Defaults to one built from the name, company and address columns.",
"type": "string",
"maxLength": 1000
},
"include_address": {
"description": "Letters: print the recipient address block above the salutation. Default true when the sheet has address columns.",
"type": "boolean"
},
"sender": {
"description": "Letters: your name/organization and address at the top. Envelopes: the return address. One line per entry, e.g. [\"Riverbend Animal Shelter\", \"120 Elm St\", \"Springfield, IL 62701\"].",
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"maxLength": 120
}
},
"date": {
"description": "Date printed on letters and certificates and used for {{today}}, as YYYY-MM-DD, e.g. 2026-10-03. Defaults to today (US Eastern time); pass the user's local date when known.",
"type": "string",
"maxLength": 30
},
"closing": {
"description": "Letters: closing line, e.g. \"With gratitude,\". Defaults to \"Sincerely,\" unless the template already ends with a closing. Use \"\" for none.",
"type": "string",
"maxLength": 60
},
"signature_name": {
"description": "Letters: name printed under the closing, e.g. Maria Chen.",
"type": "string",
"maxLength": 100
},
"signature_title": {
"description": "Letters: title under the signature name, e.g. Executive Director.",
"type": "string",
"maxLength": 120
},
"certificate_kind": {
"description": "Certificates: sets the default title and wording, e.g. completion -> \"Certificate of Completion\". Default achievement.",
"type": "string",
"enum": [
"achievement",
"completion",
"participation",
"appreciation",
"recognition",
"excellence"
]
},
"certificate_title": {
"description": "Certificates: custom title, e.g. \"Certificate of Appreciation\" or \"Volunteer of the Year\".",
"type": "string",
"maxLength": 80
},
"recipient_template": {
"description": "Certificates: the name line, e.g. \"{{First Name}} {{Last Name}}\". Defaults to the Name column (or First + Last).",
"type": "string",
"maxLength": 200
},
"body_template": {
"description": "Certificates: the line under the name, may contain fields, e.g. \"for completing {{Course}} ({{Hours}} hours) on {{Completed:date}}\".",
"type": "string",
"maxLength": 600
},
"presented_line": {
"description": "Certificates: the line above the name. Default \"This certificate is proudly presented to\" (\"This certifies that\" for completion).",
"type": "string",
"maxLength": 120
},
"organization": {
"description": "Certificates: issuing organization printed at the top, e.g. Lincoln Elementary School.",
"type": "string",
"maxLength": 120
},
"signers": {
"description": "Certificates: up to 3 signature lines, e.g. [{\"name\": \"Alan Brooks\", \"title\": \"Principal\"}].",
"maxItems": 3,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 80,
"description": "Signer name, e.g. Dr. Alan Brooks."
},
"title": {
"description": "Signer title, e.g. Principal.",
"type": "string",
"maxLength": 80
}
},
"required": [
"name"
]
}
},
"style": {
"description": "Certificates: design style: classic (navy double border), gold (cream with gold seal), modern (teal geometric), deco (burgundy art deco). Default classic.",
"type": "string",
"enum": [
"classic",
"gold",
"modern",
"deco"
]
},
"envelope_size": {
"description": "Envelopes: \"10\" for a #10 business envelope 4-1/8 x 9-1/2 in (default) or \"a7\" for a 5-1/4 x 7-1/4 in invitation envelope.",
"type": "string",
"enum": [
"10",
"a7"
]
},
"usps_style": {
"description": "Envelopes: print the delivery address in USPS style (uppercase, no periods or commas). Default false.",
"type": "boolean"
},
"field_map": {
"description": "Optional explicit links from template fields to column names when names differ, e.g. {\"Gift\": \"Donation Amount (USD)\"}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"missing_values": {
"description": "What to do when a record has an empty value for a field with no default: leave_blank (default), skip_record (leave that record out), or placeholder (print [Field Name] for proofreading).",
"type": "string",
"enum": [
"leave_blank",
"skip_record",
"placeholder"
]
},
"preview_from": {
"description": "Record number to start the preview at, e.g. 1 (default) or 25 to check later rows.",
"type": "integer",
"minimum": 1,
"maximum": 20000
}
},
"required": [
"document_type"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"document_type": {
"type": "string"
},
"summary": {
"type": "string"
},
"source": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"sheet": {
"type": [
"string",
"null"
]
},
"sheets": {
"type": "array",
"items": {
"type": "string"
}
},
"columns": {
"type": "array",
"items": {
"type": "string"
}
},
"rows": {
"type": "number"
},
"blank_rows_ignored": {
"type": "number"
}
},
"required": [
"type",
"name",
"sheet",
"sheets",
"columns",
"rows",
"blank_rows_ignored"
],
"additionalProperties": false
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"column": {
"type": [
"string",
"null"
]
},
"match": {
"type": "string"
},
"formats": {
"type": "array",
"items": {
"type": "string"
}
},
"has_default": {
"type": "boolean"
}
},
"required": [
"field",
"column",
"match",
"formats",
"has_default"
],
"additionalProperties": false
}
},
"unmatched_fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"suggestion": {
"type": [
"string",
"null"
]
}
},
"required": [
"field",
"suggestion"
],
"additionalProperties": false
}
},
"needs_confirmation": {
"type": "array",
"items": {
"type": "string"
}
},
"counts": {
"type": "object",
"properties": {
"records": {
"type": "number"
},
"in_batch": {
"type": "number"
},
"merged": {
"type": "number"
},
"skipped": {
"type": "number"
},
"with_missing": {
"type": "number"
},
"documents": {
"type": "number"
},
"pages": {
"type": "number"
}
},
"required": [
"records",
"in_batch",
"merged",
"skipped",
"with_missing",
"documents",
"pages"
],
"additionalProperties": false
},
"batch": {
"type": "object",
"properties": {
"from": {
"type": "number"
},
"to": {
"type": "number"
},
"next_start": {
"type": [
"number",
"null"
]
}
},
"required": [
"from",
"to",
"next_start"
],
"additionalProperties": false
},
"missing": {
"type": "array",
"items": {
"type": "object",
"properties": {
"record": {
"type": "number"
},
"label": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"record",
"label",
"fields"
],
"additionalProperties": false
}
},
"missing_total": {
"type": "number"
},
"preview": {
"type": "array",
"items": {
"type": "object",
"properties": {
"record": {
"type": "number"
},
"label": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"record",
"label",
"text"
],
"additionalProperties": false
}
},
"style": {
"type": [
"string",
"null"
]
},
"paper": {
"type": "string"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"downloads": {
"type": "object",
"properties": {
"pdf": {
"type": "string"
},
"csv": {
"type": "string"
}
},
"additionalProperties": false
}
},
"required": [
"document_type",
"summary",
"source",
"fields",
"unmatched_fields",
"needs_confirmation",
"counts",
"batch",
"missing",
"missing_total",
"preview",
"style",
"paper",
"warnings",
"downloads"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢generate_merged_documents(document_type, file, sheet, csv_text, records, ...)
Use this when the user wants to mail merge from Excel or CSV to PDF: personalized letters from a spreadsheet (thank-you letters for each donor, the same letter to 200 people with their names), certificates in bulk from a name list (award, completion, participation), or envelopes from a contact list (#10 with return address). Fills {{Field}} placeholders with defaults, formats and {{#if}} conditions for each row and returns ONE combined PDF (one document per record, up to 2,000 per batch) plus a per-record merge report CSV. Does not send email, mail, or print anything, and does not make mailing labels. Do not use for Outlook or Gmail bulk email.
Eingabe-Schema
{
"type": "object",
"properties": {
"document_type": {
"type": "string",
"enum": [
"letter",
"certificate",
"envelope"
],
"description": "What to merge into: letter (US business letter, one per row), certificate (landscape award/completion/participation certificate, one per row), or envelope (#10 envelope with recipient and return address). Example: letter."
},
"file": {
"type": "object",
"properties": {
"download_url": {
"type": "string",
"description": "Temporary download link for the file, supplied by ChatGPT."
},
"file_id": {
"type": "string",
"description": "ChatGPT file id, e.g. file_abc123."
},
"mime_type": {
"description": "Media type if known, e.g. application/pdf.",
"type": "string"
},
"file_name": {
"description": "Original file name if known, e.g. statement.pdf.",
"type": "string"
}
},
"required": [
"download_url",
"file_id"
],
"description": "The spreadsheet with one row per recipient: Excel .xlsx, CSV or TSV, first row = column headers, e.g. donors.xlsx."
},
"sheet": {
"description": "For an .xlsx file: the sheet (tab) name to use, e.g. Donors. Defaults to the first sheet that has data.",
"type": "string",
"maxLength": 100
},
"csv_text": {
"description": "Alternative to a file: the list pasted as CSV or tab-separated text with a header row, e.g. \"First Name,Last Name,City\\nAna,Lopez,Austin\".",
"type": "string",
"maxLength": 400000
},
"records": {
"description": "Alternative to a file: the recipients typed as objects with the same keys, e.g. [{\"First Name\": \"Ana\", \"Last Name\": \"Lopez\", \"Amount\": 250}].",
"maxItems": 5000,
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean",
"null"
]
}
}
},
"names": {
"description": "Shortcut for a plain list of names (one column called Name), e.g. [\"Ana Lopez\", \"Ben Okafor\"]. Handy for certificates.",
"maxItems": 5000,
"type": "array",
"items": {
"type": "string",
"maxLength": 200
}
},
"has_header": {
"description": "Set false if the first row of the file is data, not column names (columns are then called Column A, Column B, ...). Default true.",
"type": "boolean"
},
"template": {
"description": "Letters: the letter text from the salutation to the last paragraph, with merge fields, e.g. \"Dear {{First Name|Friend}},\\n\\nThank you for your gift of {{Amount:currency}} on {{Gift Date:date}}.{{#if Company}} Please thank everyone at {{Company}}.{{/if}}\". Syntax: {{Field}}, {{Field|default}}, {{Field:format}} with formats currency, number, integer, ordinal, date, short_date, iso_date, upper, lower, title, first_word, last_word; {{#if Field}}...{{else}}...{{/if}}, {{#if Field = value}}, {{#if Gift > 0}} (also !=, <, >=, <=; numbers or dates), {{#unless Field}}...{{/unless}}; {{today}} is the document date.",
"type": "string",
"maxLength": 20000
},
"subject": {
"description": "Letters: optional subject line printed as \"Re: ...\", may contain fields, e.g. \"Your {{Year}} giving statement\".",
"type": "string",
"maxLength": 300
},
"address_template": {
"description": "Optional recipient address block (letters: inside address; envelopes: delivery address), one line per row, e.g. \"{{First Name}} {{Last Name}}\\n{{Street}}\\n{{City}}, {{State}} {{ZIP}}\". Defaults to one built from the name, company and address columns.",
"type": "string",
"maxLength": 1000
},
"include_address": {
"description": "Letters: print the recipient address block above the salutation. Default true when the sheet has address columns.",
"type": "boolean"
},
"sender": {
"description": "Letters: your name/organization and address at the top. Envelopes: the return address. One line per entry, e.g. [\"Riverbend Animal Shelter\", \"120 Elm St\", \"Springfield, IL 62701\"].",
"maxItems": 6,
"type": "array",
"items": {
"type": "string",
"maxLength": 120
}
},
"date": {
"description": "Date printed on letters and certificates and used for {{today}}, as YYYY-MM-DD, e.g. 2026-10-03. Defaults to today (US Eastern time); pass the user's local date when known.",
"type": "string",
"maxLength": 30
},
"closing": {
"description": "Letters: closing line, e.g. \"With gratitude,\". Defaults to \"Sincerely,\" unless the template already ends with a closing. Use \"\" for none.",
"type": "string",
"maxLength": 60
},
"signature_name": {
"description": "Letters: name printed under the closing, e.g. Maria Chen.",
"type": "string",
"maxLength": 100
},
"signature_title": {
"description": "Letters: title under the signature name, e.g. Executive Director.",
"type": "string",
"maxLength": 120
},
"certificate_kind": {
"description": "Certificates: sets the default title and wording, e.g. completion -> \"Certificate of Completion\". Default achievement.",
"type": "string",
"enum": [
"achievement",
"completion",
"participation",
"appreciation",
"recognition",
"excellence"
]
},
"certificate_title": {
"description": "Certificates: custom title, e.g. \"Certificate of Appreciation\" or \"Volunteer of the Year\".",
"type": "string",
"maxLength": 80
},
"recipient_template": {
"description": "Certificates: the name line, e.g. \"{{First Name}} {{Last Name}}\". Defaults to the Name column (or First + Last).",
"type": "string",
"maxLength": 200
},
"body_template": {
"description": "Certificates: the line under the name, may contain fields, e.g. \"for completing {{Course}} ({{Hours}} hours) on {{Completed:date}}\".",
"type": "string",
"maxLength": 600
},
"presented_line": {
"description": "Certificates: the line above the name. Default \"This certificate is proudly presented to\" (\"This certifies that\" for completion).",
"type": "string",
"maxLength": 120
},
"organization": {
"description": "Certificates: issuing organization printed at the top, e.g. Lincoln Elementary School.",
"type": "string",
"maxLength": 120
},
"signers": {
"description": "Certificates: up to 3 signature lines, e.g. [{\"name\": \"Alan Brooks\", \"title\": \"Principal\"}].",
"maxItems": 3,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 80,
"description": "Signer name, e.g. Dr. Alan Brooks."
},
"title": {
"description": "Signer title, e.g. Principal.",
"type": "string",
"maxLength": 80
}
},
"required": [
"name"
]
}
},
"style": {
"description": "Certificates: design style: classic (navy double border), gold (cream with gold seal), modern (teal geometric), deco (burgundy art deco). Default classic.",
"type": "string",
"enum": [
"classic",
"gold",
"modern",
"deco"
]
},
"envelope_size": {
"description": "Envelopes: \"10\" for a #10 business envelope 4-1/8 x 9-1/2 in (default) or \"a7\" for a 5-1/4 x 7-1/4 in invitation envelope.",
"type": "string",
"enum": [
"10",
"a7"
]
},
"usps_style": {
"description": "Envelopes: print the delivery address in USPS style (uppercase, no periods or commas). Default false.",
"type": "boolean"
},
"field_map": {
"description": "Optional explicit links from template fields to column names when names differ, e.g. {\"Gift\": \"Donation Amount (USD)\"}.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"missing_values": {
"description": "What to do when a record has an empty value for a field with no default: leave_blank (default), skip_record (leave that record out), or placeholder (print [Field Name] for proofreading).",
"type": "string",
"enum": [
"leave_blank",
"skip_record",
"placeholder"
]
},
"start_record": {
"description": "For lists over 2,000 records: first record of this batch, e.g. 2001 for the second batch. Default 1.",
"type": "integer",
"minimum": 1,
"maximum": 20000
},
"max_documents": {
"description": "How many records to put in this PDF (1-2000), e.g. 500. Default all, up to 2,000 per PDF.",
"type": "integer",
"minimum": 1,
"maximum": 2000
}
},
"required": [
"document_type"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"document_type": {
"type": "string"
},
"summary": {
"type": "string"
},
"source": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"sheet": {
"type": [
"string",
"null"
]
},
"sheets": {
"type": "array",
"items": {
"type": "string"
}
},
"columns": {
"type": "array",
"items": {
"type": "string"
}
},
"rows": {
"type": "number"
},
"blank_rows_ignored": {
"type": "number"
}
},
"required": [
"type",
"name",
"sheet",
"sheets",
"columns",
"rows",
"blank_rows_ignored"
],
"additionalProperties": false
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"column": {
"type": [
"string",
"null"
]
},
"match": {
"type": "string"
},
"formats": {
"type": "array",
"items": {
"type": "string"
}
},
"has_default": {
"type": "boolean"
}
},
"required": [
"field",
"column",
"match",
"formats",
"has_default"
],
"additionalProperties": false
}
},
"unmatched_fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"suggestion": {
"type": [
"string",
"null"
]
}
},
"required": [
"field",
"suggestion"
],
"additionalProperties": false
}
},
"needs_confirmation": {
"type": "array",
"items": {
"type": "string"
}
},
"counts": {
"type": "object",
"properties": {
"records": {
"type": "number"
},
"in_batch": {
"type": "number"
},
"merged": {
"type": "number"
},
"skipped": {
"type": "number"
},
"with_missing": {
"type": "number"
},
"documents": {
"type": "number"
},
"pages": {
"type": "number"
}
},
"required": [
"records",
"in_batch",
"merged",
"skipped",
"with_missing",
"documents",
"pages"
],
"additionalProperties": false
},
"batch": {
"type": "object",
"properties": {
"from": {
"type": "number"
},
"to": {
"type": "number"
},
"next_start": {
"type": [
"number",
"null"
]
}
},
"required": [
"from",
"to",
"next_start"
],
"additionalProperties": false
},
"missing": {
"type": "array",
"items": {
"type": "object",
"properties": {
"record": {
"type": "number"
},
"label": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"record",
"label",
"fields"
],
"additionalProperties": false
}
},
"missing_total": {
"type": "number"
},
"preview": {
"type": "array",
"items": {
"type": "object",
"properties": {
"record": {
"type": "number"
},
"label": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"record",
"label",
"text"
],
"additionalProperties": false
}
},
"style": {
"type": [
"string",
"null"
]
},
"paper": {
"type": "string"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"downloads": {
"type": "object",
"properties": {
"pdf": {
"type": "string"
},
"csv": {
"type": "string"
}
},
"additionalProperties": false
}
},
"required": [
"document_type",
"summary",
"source",
"fields",
"unmatched_fields",
"needs_confirmation",
"counts",
"batch",
"missing",
"missing_total",
"preview",
"style",
"paper",
"warnings",
"downloads"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Community
Nachweis