Skip to main content
The Paubox MCP Server exposes 30 tools across three areas: Email, Forms, and Email Marketing. Each tool maps to an underlying Paubox API operation. All 30 tools are available over both transports — the hosted HTTP server at https://mcp.paubox.com/mcp and the @paubox/mcp stdio package. How each one receives your API key is the only difference.
The optional apiKey parameter listed on every tool below exists only on the HTTP transport. Over stdio the key comes from the PAUBOX_API_KEY environment variable and the parameter is not accepted; omit it. Over HTTP the key is resolved from the OAuth token, the x-paubox-api-key header, or that parameter.Parameters use camelCase (formId, subscriptionListId) even where the underlying REST API uses snake_case.

Email

send_secure_email

Sends a single HIPAA compliant email through the Paubox Email API. The sender address must belong to a domain you have verified in the Paubox dashboard. Example payload
Response: returns a sourceTrackingId string you can pass to check_email_status.

check_email_status

Retrieves the current delivery status of a message sent via send_secure_email. Example payload
Response: returns an object with delivery disposition details and a timestamp.

validate_credentials

Verifies that the Paubox API credentials are present and valid by making a live check against the Paubox API. Useful as a first step before sending email. When connecting via stdio (Claude Code), the API key comes from an environment variable and no parameters are needed. Example payload
Response: returns a confirmation with a masked API key on success, or an error description if the API key is missing or invalid.

Forms

The two tools below need no credentials. Everything after them manages forms and submissions and requires an API key carrying the forms scope, sent as a Bearer token; scoped keys are managed in the Paubox admin dashboard. See Forms authentication.

get_form

Retrieves the full definition of a Paubox Form, including its title, description, and field schema, so an agent can present the form questions in a conversation. No authentication is required for active forms. When an API key carrying the forms scope is available, inactive and archived forms become retrievable too. Example payload
Response: returns a form object including title, description, form_json (field definitions), and metadata fields (active, signable, submission_count, created_at, updated_at).

submit_form

Submits a completed response to a Paubox Form. No authentication is required for this tool. Example payload: text fields only
Example payload: with attachment
Response: returns a success confirmation message on success.

list_forms

Lists a customer’s Paubox Forms with search, filtering, ordering, and pagination. Example payload
Response: returns a paginated list of form objects with title, status, and submission counts.

create_form

Creates a new Paubox Form. Example payload
Response: returns the created form, including its UUID.
Because formJson is just a field schema, an agent can build one from a fillable PDF’s extracted fields and create a matching Paubox Form in a single conversation.

update_form

Updates an existing Paubox Form. Only the fields you provide change; omitted fields stay as they are. Example payload
Response: returns the updated form.

archive_form

Archives a Paubox Form. This sets archived to true and active to false. Response: returns the archived form.

unarchive_form

Restores a previously archived Paubox Form. Response: returns the restored form.

copy_form

Duplicates an existing Paubox Form under a new title. Response: returns the new form, including its UUID.

get_form_stats

Returns aggregate Paubox Forms statistics: active form count, total submission count, and submissions in the last 7 days. Response: returns active_form_count, submission_count, and submissions_last_7_days.

list_form_submissions

Lists a form’s submissions, with each submission’s form_data parsed into structured key/value pairs. Response: returns submissions with parsed field data, submitter email, and attachment info.

export_submissions_csv

Exports a form’s submissions as CSV text. Response: returns CSV text.

export_submission_pdf

Exports a single form submission as a PDF. Response: returns the PDF, base64-encoded.

Email Marketing

These tools read and write Paubox Email Marketing data. They use the same API key as the email tools — no additional scope is required — but the account must have Email Marketing provisioned. Call validate_marketing_access first if another marketing tool reports that no marketing customer was found.
This set is read-only plus safe subscriber and list writes. Campaign sending and bulk deletion are deliberately not exposed over MCP.
Every tool below accepts an optional apiKey string parameter, which behaves as described above; it is omitted from the tables that have no other parameters.

validate_marketing_access

Checks whether the account has Email Marketing provisioned and returns the marketing customer profile. Example payload
Response: returns the marketing customer name, from_name, from_email, physical address, and global unsubscribe setting.

list_subscribers

Lists Email Marketing subscribers. Omit subscriptionListId to search the account’s default “All contacts” list. Response: returns a paginated list of subscribers.

get_subscriber

Retrieves one subscriber by UUID, including custom field values and subscription list memberships. Response: returns the subscriber object.

create_subscriber

Adds a subscriber. Requires an email address or a phone number. The subscriber always joins the default “All contacts” list, plus subscriptionListId when given. An existing subscriber matching the same email or phone is updated rather than duplicated. Custom field names that do not exist yet are created automatically. * One of email or phoneNumber is required. Example payload
Response: returns the created or updated subscriber.

update_subscriber

Updates an existing subscriber by UUID. Only the fields you provide change. Response: returns the updated subscriber.

get_subscribed_count

Counts currently subscribed contacts on a list, excluding unsubscribed and deleted contacts. Response: returns the subscribed contact count.

list_subscriber_custom_fields

Lists the custom subscriber field types defined for the account. Use this to discover which custom field names create_subscriber and update_subscriber can set. Example payload
Response: returns the account’s custom field definitions.

list_marketing_lists

Lists all audiences — both static subscription lists and filter-based dynamic lists — in one view with subscriber counts. Use list_subscription_lists or list_dynamic_lists when you need one kind specifically. Response: returns all audiences with their kind, ID, and subscriber count.

list_subscription_lists

Lists static subscription lists with their integer IDs, subscriber counts, and which one is the default “All contacts” list. The IDs returned here are what subscriptionListId expects elsewhere. Response: returns subscription lists with integer IDs and subscriber counts.

create_subscription_list

Creates a new, empty subscription list. Response: returns the new list’s integer ID, for use with create_subscriber and list_subscribers.

list_dynamic_lists

Lists dynamic lists — filter-based segments that recompute their membership — with their UUIDs, filter definitions, and subscriber counts. Response: returns dynamic lists with UUIDs, filter definitions, and subscriber counts.

list_campaign_sends

Lists campaign sends — each time a marketing email went out to a list — with per-send counts for delivered, viewed, clicked, bounced, and unsubscribed. Response: returns campaign sends with their integer IDs and per-send engagement counts.

list_campaign_deliveries

Lists individual deliveries — one row per recipient per campaign — showing what happened to each message. Response: returns per-recipient delivery rows.

get_campaign_analytics

Runs an Email Marketing analytics report. Example payload
Response: returns the requested report rows.

get_marketing_bulk_job

Checks the progress of an asynchronous bulk job. Bulk subscriber imports and CSV exports return a job ID (jid or bid) instead of a result; pass it here. Response: returns total, pending, and failed counts for the job.