# PayPal, guarded (npm · fizzl-paypal-guard-mcp)

PayPal's Agent Toolkit with limits on refunds and the owner's Approve/Deny above them.

- Trust score: 76/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-24

## Components

- npm · `fizzl-paypal-guard-mcp`: 76/100 (this document), [markdown](https://verifymcp.io/servers/fizzl13-paypal-guard/fizzl-paypal-guard-mcp.md), [page](https://verifymcp.io/servers/fizzl13-paypal-guard/fizzl-paypal-guard-mcp)

## Channel facts

- Registry: `npm`
- Package: `fizzl-paypal-guard-mcp`
- Version: `0.2.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-24.

- **Supply Chain Security**: 89/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects @langchain/core 0.3.6, reached via @paypal/agent-toolkit > @langchain/core. A fixed version is available.
  - No install/post-install scripts declared.
  - 77 of 246 dependencies flagged as unhealthy (2 deprecated).
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to Fizzl13/x402-examples).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 1 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 61/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 8191 tokens (~167/item across 49 items; 49 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 98/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 94% of tool parameters carry a description.
- **Tool Safety**: 97/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 7 of 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "get_refund" implies "refund" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 50 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the PayPal, guarded MCP server?

PayPal, guarded runs locally as an npm package, launched with npx -y fizzl-paypal-guard-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add fizzl13-paypal-guard -- npx -y fizzl-paypal-guard-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "fizzl13-paypal-guard": {
      "command": "npx",
      "args": [
        "-y",
        "fizzl-paypal-guard-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "fizzl13-paypal-guard": {
      "command": "npx",
      "args": [
        "-y",
        "fizzl-paypal-guard-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add fizzl13-paypal-guard -- npx -y fizzl-paypal-guard-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "fizzl13-paypal-guard": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "fizzl-paypal-guard-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add fizzl13-paypal-guard --command npx --arg -y --arg fizzl-paypal-guard-mcp
```

### Hermes

```yaml
mcp_servers:
  fizzl13-paypal-guard:
    command: "npx"
    args: ["-y", "fizzl-paypal-guard-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "fizzl13-paypal-guard": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "fizzl-paypal-guard-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add fizzl13-paypal-guard -t stdio -c npx -a -y fizzl-paypal-guard-mcp
```

### Other

```json
{
  "mcpServers": {
    "fizzl13-paypal-guard": {
      "command": "npx",
      "args": [
        "-y",
        "fizzl-paypal-guard-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-24 (score 76, 0)

- [security regression] CVE-2023-54404 affects this package: high

### 2026-10-23 (score 76, +38)

- [security regression] CVE-2026-41907 affects this package: high
- [security regression] CVE-2026-41139 affects this package: high
- [security regression] CVE-2026-40897 affects this package: high
- [security regression] CVE-2025-9910 affects this package: high
- [security regression] CVE-2026-8657 affects this package: high
- [security regression] CVE-2026-8769 affects this package: high
- [security regression] CVE-2025-68665 affects this package: high
- [security regression] CVE-2026-40190 affects this package: high
- [security regression] CVE-2026-45134 affects this package: high
- [security regression] CVE-2026-41182 affects this package: high
- [security regression] CVE-2025-48985 affects this package: high
- [security regression] Known CVEs: unverified → fail
- [security improvement] Injection markers: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Stability: unverified → 0.07
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Dependency health: unverified → 0.85
- [functional] Package version: 0.1.1 → 0.2.1

### 2026-10-22 (score 38, −29)

- [security regression] CVE-2026-41907 affects this package: high
- [security regression] CVE-2026-41139 affects this package: high
- [security regression] CVE-2026-40897 affects this package: high
- [security regression] CVE-2025-9910 affects this package: high
- [security regression] CVE-2026-8657 affects this package: high
- [security regression] CVE-2026-8769 affects this package: high
- [security regression] CVE-2025-68665 affects this package: high
- [security regression] CVE-2026-40190 affects this package: high
- [security regression] CVE-2026-45134 affects this package: high
- [security regression] CVE-2026-41182 affects this package: high
- [security regression] CVE-2025-48985 affects this package: high
- [security regression] Known CVEs: unverified → fail
- [security regression] Stability: 0.00 → unverified
- [security regression] Tool safety: pass → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Dependency health: unverified → 0.85
- [functional] First check of Schema quality: unverified
- [functional] Package version: 0.1.1 → 0.2.1
- [functional] Package version: 0.1.1 → 0.2.0

### 2026-10-21 (score 67)

First indexed and scored.

## MCP tools (49)

### `create_invoice` (~770 tokens)

Create Invoices on PayPal.

This function creates a draft invoice, specifying a currency code, the invoicer's business information, one or more recipients to bill, and line items. Once created, the invoice can be sent to the customer for payment.

primary_recipients and items use PayPal's real nested shape (billing_info/shipping_info for recipients; unit_amount/tax/discount for items); other fields use a simplified flat shape.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `allow_partial_payment` (boolean): Whether the invoice allows a partial payment. If false, the invoice must be paid in full. If true, the invoice allows partial payments. Not available for users in India, Brazil, or Israel.
- `allow_tip` (boolean): Whether the payer can add a tip when paying. Not available in Hong Kong, Taiwan, India, or Japan.
- `currency_code` (string, required): The three-character ISO-4217 currency code for the invoice (for example, USD). Applies to every monetary amount on the invoice.
- `enable_pay_by_bank` (boolean): Whether to enable PAY_BY_BANK as a payment method for this invoice, letting the payer pay directly from their bank account. Available only for US-based merchants and invoices with USD currency.
- `invoice_date` (string): The invoice date in yyyy-MM-DD format.
- `invoice_number` (string): The invoice number. If omitted, PayPal auto-increments from the last invoice number used.
- `invoicer_address_line_1` (string): The first line of the invoicer's address, for example, number and street.
- `invoicer_address_line_2` (string): The second line of the invoicer's address, for example, suite or apartment number.
- `invoicer_business_name` (string): The business name of the invoicer.
- `invoicer_city` (string): The city, town, or village of the invoicer's address.
- `invoicer_country_code` (string): The two-character ISO 3166-1 country code of the invoicer's address (for example, US or GB).
- `invoicer_email_address` (string): The email address of the invoicer.
- `invoicer_given_name` (string): The first name of the invoicer.
- `invoicer_postal_code` (string): The postal code of the invoicer's address.
- `invoicer_state` (string): The state or province of the invoicer's address.
- `invoicer_surname` (string): The last name of the invoicer.
- `invoicer_tax_id` (string): The invoicer's tax ID.
- `items` (array, required): The line items on the invoice.
- `minimum_partial_payment_amount` (string): The minimum amount allowed for a partial payment, in the invoice's currency_code. Valid only when allow_partial_payment is true.
- `note` (string): A note to the invoice recipient. Also appears on the invoice notification email.
- `pay_by_bank_exclusive_above_threshold` (boolean): When true, PAY_BY_BANK becomes the only available payment method once the invoice total exceeds PayPal's system-defined threshold ($1000), disabling all other payment methods above that threshold.
- `primary_recipients` (array, required): The recipients who will be billed for this invoice.
- `reference` (string): A reference value, such as a purchase order number.
- `shipping_cost` (string): The shipping cost for the invoice, in the invoice's currency_code.
- `theme_color` (string): The primary color used to render the invoice, as a hex color code (e.g. #000000). If omitted, the default theme is used.

### `create_recurring_series` (~744 tokens)

Create a recurring invoice series on PayPal.

This function creates a recurring invoice series that automatically generates and sends invoices to a customer on a schedule, specifying a billing frequency, a start date, a currency code, a primary recipient, and line items for the series template.

primary_recipients and items use PayPal's real nested shape (billing_info/shipping_info for recipients; unit_amount/tax/discount for items); other fields use a simplified flat shape.

A newly created series is in DRAFT status and will not generate invoices until activated -- call activate_recurring_series with the returned series ID to activate it.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `allow_partial_payment` (boolean): Whether each generated invoice allows a partial payment. If false, each invoice must be paid in full. If true, each invoice allows partial payments. Not available for users in India, Brazil, or Israe…
- `allow_tip` (boolean): Whether the payer can add a tip when paying. Not available in Hong Kong, Taiwan, India, or Japan.
- `currency_code` (string, required): Currency code of the recurring invoice series
- `interval_count` (integer, required): The number of intervals between each recurring invoice cycle. For example, an interval_count of 2 with interval_unit of MONTH means the invoice recurs every 2 months
- `interval_unit` (string, required): The time unit for the recurring invoice cycle interval
- `invoicer_address_line_1` (string): The first line of the invoicer's address, for example, number and street.
- `invoicer_address_line_2` (string): The second line of the invoicer's address, for example, suite or apartment number.
- `invoicer_business_name` (string): The business name of the invoicer.
- `invoicer_city` (string): The city, town, or village of the invoicer's address.
- `invoicer_country_code` (string): The two-character ISO 3166-1 country code of the invoicer's address (for example, US or GB).
- `invoicer_email_address` (string): The email address of the invoicer.
- `invoicer_given_name` (string): The first name of the invoicer.
- `invoicer_postal_code` (string): The postal code of the invoicer's address.
- `invoicer_state` (string): The state or province of the invoicer's address.
- `invoicer_surname` (string): The last name of the invoicer.
- `invoicer_tax_id` (string): The invoicer's tax ID.
- `items` (array): The line items that will appear on each invoice in the recurring series
- `minimum_partial_payment_amount` (string): The minimum amount allowed for a partial payment on each generated invoice, in the series' currency_code. Valid only when allow_partial_payment is true.
- `note` (string): A note to the invoice recipient. Also appears on the invoice notification email.
- `primary_recipients` (array, required): The primary recipient of the recurring invoices
- `reference` (string): A reference value, such as a purchase order number.
- `shipping_cost` (string): The shipping cost for each generated invoice, in the series' currency_code.
- `start_series_date` (string, required): The date when the recurring series begins and the first invoice is generated, in yyyy-MM-DD format. Cannot be a past date.
- `total_cycles` (integer): The total number of invoices to generate in the series. If omitted, the series runs indefinitely until cancelled.

### `activate_recurring_series` (~115 tokens)

Activate a recurring invoice series on PayPal.

This function activates a recurring invoice series by its ID, moving it out of DRAFT status. Once activated, PayPal automatically generates and sends invoices to the customer based on the series' configured schedule. Call this after create_recurring_series to make the series active.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `recurring_series_id` (string, required): The ID of the recurring invoice series to activate.

### `get_recurring_series` (~63 tokens)

Get a recurring invoice series from PayPal.

This function retrieves details of a specific recurring invoice series using its ID, including its schedule, status, template, and recipient information.

Input parameters:

- `recurring_series_id` (string, required): The ID of the recurring invoice series to retrieve.

### `cancel_recurring_series` (~95 tokens)

Cancel a recurring invoice series on PayPal.

This function cancels a recurring invoice series by its ID. Once cancelled, PayPal stops generating and sending further invoices for the series. This action cannot be undone.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `recurring_series_id` (string, required): The ID of the recurring invoice series to cancel.

### `delete_recurring_series` (~126 tokens)

Delete a recurring invoice series on PayPal.

This function permanently deletes a recurring invoice series by its ID. Only series in DRAFT status can be deleted -- for a series that has already been activated, use cancel_recurring_series instead. This action cannot be undone.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `recurring_series_id` (string, required): The ID of the recurring invoice series to delete. Only series in DRAFT status can be deleted; use cancel_recurring_series for an activated series.

### `list_invoices` (~82 tokens)

List invoices from PayPal.

This function retrieves a list of invoices with optional pagination parameters.

Input parameters:

- `page` (number): The page number of the result set to fetch.
- `page_size` (number): The number of records to return per page (maximum 100).
- `total_required` (boolean): Indicates whether the response should include the total count of items.

### `get_invoice` (~42 tokens)

Get an invoice from PayPal.

This function retrieves details of a specific invoice using its ID.

Input parameters:

- `invoice_id` (string, required): The ID of the invoice to retrieve.

### `send_invoice` (~118 tokens)

Send an invoice to the recipient(s).

This function sends a previously created invoice to its intended recipients.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `additional_recipients` (array): Additional email addresses to which to send the invoice.
- `invoice_id` (string, required): The ID of the invoice to send.
- `note` (string): A note to the recipient.
- `send_to_recipient` (boolean): Indicates whether to send the invoice to the recipient.

### `send_invoice_reminder` (~99 tokens)

Send a reminder for an invoice.

This function sends a reminder for an invoice that has already been sent but hasn't been paid yet.

Input parameters:

- `additional_recipients` (array): Additional email addresses to which to send the reminder.
- `invoice_id` (string, required): The ID of the invoice for which to send a reminder.
- `note` (string): A note to the recipient.
- `subject` (string): The subject of the reminder email.

### `cancel_sent_invoice` (~121 tokens)

Cancel a sent invoice.

This function cancels an invoice that has already been sent to the recipient(s).

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `additional_recipients` (array): Additional email addresses to which to send the cancellation.
- `invoice_id` (string, required): The ID of the invoice to cancel.
- `note` (string): A cancellation note to the recipient.
- `send_to_recipient` (boolean): Indicates whether to send the cancellation to the recipient.

### `delete_invoice` (~120 tokens)

Delete a draft or scheduled invoice on PayPal.

This function permanently deletes an invoice that is in the draft or scheduled state, by ID. It does not work on invoices that have already been sent -- use cancel_sent_invoice for those instead. After deletion, the invoice's details can no longer be retrieved, but its invoice number can be reused.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `invoice_id` (string, required): The ID of the draft or scheduled invoice to delete.

### `setup_invoice_auto_reminders` (~113 tokens)

Initialize the invoice auto reminder configuration for the merchant's PayPal account.

This function sets up automatic reminders for unpaid invoices, for BEFORE_DUE and/or AFTER_DUE reminder types.

Input parameters:

- `configurations` (array): An array of up to two invoice auto reminder configurations, one for BEFORE_DUE and one for AFTER_DUE. If omitted, both reminder types are created with the default configuration in INACTIVE state. If…

### `update_invoice_auto_reminder` (~137 tokens)

Update an existing invoice auto reminder configuration by its configuration ID.

This function performs a full update of the reminder configuration's timing interval, repetition count and notification preferences.

Input parameters:

- `interval` (object, required): The interval at which to send the reminder. The interval unit is always DAY.
- `notification` (object): Notification settings for the reminder.
- `reminder_configuration_id` (string, required): The ID of the auto reminder configuration to update.
- `repetition` (integer, required): The number of times to send the reminder. Must be 1 for BEFORE_DUE reminders.
- `status` (string): Select an option.
- `type` (string, required)

### `search_invoicing` (~224 tokens)

Search for invoices or recurring invoice series on PayPal.

Use resource_type "invoice" with invoice_filters, or "recurring_series" with recurring_series_filters -- only set the matching filters object. Recurring series search covers only the past 3 years.

Input parameters:

- `invoice_filters` (object): Filters to apply when resource_type is 'invoice'. Must not be set when resource_type is 'recurring_series'.
- `page` (integer): The page number of the result set to fetch.
- `page_size` (integer): The number of records to return per page (maximum 100).
- `recurring_series_filters` (object): Filters to apply when resource_type is 'recurring_series'. Must not be set when resource_type is 'invoice'.
- `resource_type` (string, required): Which resource type to search. 'invoice' searches individual invoices using invoice_filters; 'recurring_series' searches recurring invoice series using recurring_series_filters.
- `total_required` (boolean): Indicates whether the response should include the total count of matching invoices. Only applies when resource_type is 'invoice'.

### `update_invoicing` (~155 tokens)

Update an existing invoice or recurring invoice series on PayPal.

For invoices, the recipient (primary_recipients) can only be changed 2 times within any 72-hour window -- avoid unnecessary recipient edits.

Checked by fizzl-paypal-guard before it runs: the owner approves or denies each one.

Input parameters:

- `invoice_update` (object): Full replacement content for the invoice. Set only when resource_type is 'invoice'.
- `recurring_series_update` (object): Full replacement content for the recurring series. Set only when resource_type is 'recurring_series'.
- `resource_type` (string, required): Which kind of resource to update. 'invoice' updates an individual invoice; 'recurring_series' updates a recurring invoice series.

### `cancel_invoice_auto_reminder` (~102 tokens)

Cancel all scheduled automatic reminders for an invoice.

This function permanently cancels every automatic reminder scheduled for a specific invoice, by invoice ID. This action is irreversible -- once cancelled, automatic reminders cannot be re-enabled for that invoice.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `invoice_id` (string, required): The ID of the invoice for which to cancel all scheduled automatic reminders.

### `generate_invoice_qr_code` (~83 tokens)

Generate a QR code for an invoice.

This function generates a QR code for an invoice, which can be used to pay the invoice using a mobile device or scanning app.

Input parameters:

- `height` (number): The QR code height
- `invoice_id` (string, required): The invoice id to generate QR code for
- `width` (number): The QR code width

### `generate_invoice_number` (~63 tokens)

Generate the next invoice number available to the merchant.

This function generates the next invoice number by using the prefix and suffix from the merchant's last invoice number and incrementing the numeric portion by one (e.g. INVOICE-1234 -> INVOICE-1235).

### `record_payment_for_invoice` (~338 tokens)

Record a payment for an invoice on PayPal.

This function records an external or manual payment (for example, cash, check, bank transfer, or a PayPal transaction) against an invoice, by invoice ID. If the recorded amount covers the full amount due, PayPal marks the invoice PAID; otherwise it is marked PARTIALLY_PAID. This does not process a new payment -- it only logs one that was already collected.

method is required. payment_id applies only to PAYPAL-type payments.

Checked by fizzl-paypal-guard before it runs: the owner approves or denies each one.

Input parameters:

- `amount` (object): The currency and amount for a financial transaction.
- `invoice_id` (string, required): The ID of the invoice to record the payment against.
- `method` (string, required): The payment mode or method through which the invoicer can accept the payments.
- `note` (string): A note associated with an external cash or check payment.
- `payment_date` (string): The date when the invoicer recorded the payment, in yyyy-MM-dd format.
- `payment_date_time` (string): The date and time when the invoicer recorded the payment, in Internet date and time format (ISO 8601), for example 2018-05-13T21:20:00Z or 2018-05-13T21:20:00.000-08:00. Seconds are required.
- `payment_id` (string): The ID for a PayPal payment transaction. Required for the PAYPAL payment type.
- `shipping_info` (object): The shipping information associated with this payment.

### `record_refund_for_invoice` (~181 tokens)

Record a refund for an invoice on PayPal.

This function records a refund against an invoice, by invoice ID. If all payments made against the invoice are refunded, PayPal marks the invoice REFUNDED; otherwise it is marked PARTIALLY_REFUNDED. This does not process a new refund -- it only logs one that was already issued.

method is required.

Checked by fizzl-paypal-guard before it runs: the owner approves or denies each one.

Input parameters:

- `amount` (object): The currency and amount for a financial transaction.
- `invoice_id` (string, required): The ID of the invoice to mark as refunded.
- `method` (string, required): The payment mode or method through which the invoicer can accept the payments.
- `refund_date` (string): The date when the invoicer recorded the refund, in yyyy-MM-dd format.

### `create_conditional_rules_for_invoice` (~61 tokens)

Create conditional rules for an invoice on PayPal.

Input parameters:

- `invoice_id` (string, required): The ID of the invoice for which the conditional rules are to be created.
- `rules` (array, required): The list of conditional rules to create for the invoice.

### `create_product` (~320 tokens)

Create a product in PayPal using product catalog - create products API.
This function creates a new product that will be used in subscription plans, subscriptions.
Required parameters are: name (product name), type (product type).
High level: 
    - id: (auto-generated or specify SKU of the product) The ID of the product
    - name: {product_name} (required) 
    - description: {product_description} (optional)
    - type {DIGITAL | PHYSICAL | SERVICE} (required)
    - category: {product_category} (optional) 
    - image_url: {image_url} (optional)
    - home_url: {home_url} (optional)

Below is the payload request structure:
{
    "id": "#PROD-XYAB12ABSB7868434",
    "name": "Video Streaming Service",
    "description": "Service for streaming latest series, movies etc.",
    "type": "SERVICE",
    "category": "SOFTWARE",
    "image_url": "https://example.com/streaming.jpg",
    "home_url": "https://example.com/home"
}

Input parameters:

- `category` (string): The product category.
- `description` (string): The product description.
- `home_url` (string): The home page URL for the product.
- `image_url` (string): The image URL for the product.
- `name` (string, required): The product name.
- `type` (string, required): The product type. Value is PHYSICAL, DIGITAL, or SERVICE.

### `list_products` (~81 tokens)

List products from PayPal.

This function retrieves a list of products with optional pagination parameters.

Input parameters:

- `page` (number): The page number of the result set to fetch.
- `page_size` (number): The number of records to return per page (maximum 100).
- `total_required` (boolean): Indicates whether the response should include the total count of products.

### `update_product` (~76 tokens)

Update a product in PayPal.

This function updates an existing product using JSON Patch operations.

Checked by fizzl-paypal-guard before it runs: the owner approves or denies each one.

Input parameters:

- `operations` (array, required): The PATCH operations to perform on the product.
- `product_id` (string, required): The ID of the product to update.

### `show_product_details` (~42 tokens)

List products from PayPal.

This function retrieves a list of products with optional pagination parameters.

Input parameters:

- `product_id` (string, required): The ID of the product to update.

### `create_subscription_plan` (~227 tokens)

Create a subsctiption plan in PayPal using subscription - create plan API.
This function creates a new subscription plan that defines pricing and billing cycle details for subscriptions.
Required parameters are: product_id (the ID of the product for which to create the plan), name (subscription plan name), billing_cycles (billing cycle details).
High level: product_id, name, description, taxes, status: {CREATED|INACTIVE|ACTIVE}, billing_cycles, payment_preferences are required in json object.
While creating billing_cycles object, trial(second) billing cycle should precede regular billing cycle.

Checked by fizzl-paypal-guard before it runs: the owner approves or denies each one.

Input parameters:

- `billing_cycles` (array, required): The billing cycles of the plan.
- `description` (string): The subscription plan description.
- `name` (string, required): The subscription plan name.
- `payment_preferences` (object): The payment preferences for the subscription plan.
- `product_id` (string, required): The ID of the product for which to create the plan.
- `taxes` (object): The tax details.

### `list_subscription_plans` (~107 tokens)

List subscription plans from PayPal.

This function retrieves a list of subscription plans with optional product filtering and pagination parameters.

Input parameters:

- `page` (number): The page number of the result set to fetch.
- `page_size` (number): The number of records to return per page (maximum 100).
- `product_id` (string): The ID of the product for which to get subscription plans.
- `total_required` (boolean): Indicates whether the response should include the total count of plans.

### `show_subscription_plan_details` (~62 tokens)

Show subscription plan details from PayPal.
This function retrieves the details of a specific subscription plan using its ID.
Required parameters are: plan_id (the ID of the subscription plan).

Input parameters:

- `plan_id` (string, required): The ID of the subscription plan to show.

### `create_subscription` (~239 tokens)

Create a subscription in PayPal using the subscription - create subscription API.
This function allows you to create a new subscription for a specific plan, enabling the management of recurring payments.
The only required parameter is plan_id (the ID of the subscription plan). All other fields are optional and can be omitted if not provided.
The subscriber field is optional. If no subscriber information is provided, omit the subscriber field in the request payload.
The shipping address is optional. If no shipping address is provided, set the shipping_preference to GET_FROM_FILE in the application context.
The application context is also optional. If no application context information is provided, omit the application context field in the request payload.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `application_context` (object): The application context for the subscription.
- `plan_id` (string, required): The ID of the subscription plan to create.
- `quantity` (number): The quantity of the product in the subscription.
- `shipping_amount` (object): The shipping amount for the subscription.
- `subscriber` (object): The subscriber details.

### `show_subscription_details` (~75 tokens)

Show subscription details from PayPal.
This function retrieves the details of a specific subscription using its ID.
Required parameters are: subscription_id (the ID of the subscription).

Input parameters:

- `get_additional_details` (boolean): Get all detailed information for the subscription.
- `subscription_id` (string, required): The ID of the subscription to show details.

### `cancel_subscription` (~154 tokens)

Cancel a customer subscription in PayPal.

This function cancels an active subscription for a customer. It requires the subscription ID and an optional reason for cancellation.
Required parameters are: subscription_id (the ID of the subscription to be canceled).
Below is the payload request structure:
{
    "reason": "Customer requested cancellation"
}
You MUST ask the user for: 
 \- subscription_id
 \- reason for cancellation.

Return all of the above as structured JSON in your response.

Checked by fizzl-paypal-guard before it runs: within the owner's limits; above them the owner approves or denies.

Input parameters:

- `payload` (object, required): Payload for subscription cancellation.
- `subscription_id` (string, required): The ID of the subscription to show details.

### `update_subscription` (~255 tokens)

Update a customer subscription in PayPal.

This function updates an active or suspended subscription for a customer. It requires the subscription ID and payload of allowed keys to update to the subscription.
Required parameters are: subscription_id (the ID of the subscription to be updated), and at-least one key to update

Return response as structured JSON in your response.

Checked by fizzl-paypal-guard before it runs: the owner approves or denies each one.

Input parameters:

- `auto_bill_outstanding` (boolean): Indicates whether to automatically bill outstanding amounts.
- `currency_code` (string): Currency code of the amount.
- `custom_id` (string): The custom id for the subscription
- `fixed_price` (object): The fixed price for a billing cycle.
- `outstanding_balance` (string): Outstanding Balance in the subscription
- `payment_failure_threshold` (number): The number of failed payments before the subscription is canceled.
- `shipping_address` (object): The shipping address.
- `shipping_amount` (string): The value of the shipping amount.
- `subscription_id` (string, required): The ID of the subscription to update.
- `taxes_inclusive` (boolean): Indicates whether the tax is inclusive.
- `taxes_percentage` (string): The tax percentage.

### `create_shipment_tracking` (~331 tokens)

Create a shipment for a transaction in PayPal.
This function creates a shipment record for a specific transaction, allowing you to track the shipment status and details.
The transaction_id can fetch from the captured payment details in the order information.
Required parameters are: tracking_number (the tracking number for the shipment), transaction_id (the transaction ID associated with the shipment). 
High level: tracking_number, transaction_id, status (optional), carrier (optional) are required json objects.
Below is the payload request structure:
{
    "tracking_number": "1234567890",
    "transaction_id": "9XJ12345ABC67890",
    "status": "SHIPPED", // Required: ON_HOLD, SHIPPED, DELIVERED, CANCELLED
    "carrier": "UPS" // Required: The carrier handling the shipment. Link to supported carriers: http://developer.paypal.com/docs/tracking/reference/carriers/
}

Input parameters:

- `carrier` (string): The carrier handling the shipment.
- `order_id` (string): The ID of the order for which to create a shipment
- `status` (string): The status of the shipment. It can be "ON_HOLD", "SHIPPED", "DELIVERED", or "CANCELLED".
- `tracking_number` (string, required): The tracking number for the shipment. Id is provided by the shipper. This is required to create a shipment.
- `transaction_id` (string, required): The transaction ID associated with the shipment. Transaction id available after the order is paid or captured. This is required to create a shipment.

### `get_shipment_tracking` (~95 tokens)

Get tracking information for a shipment by ID.
This function retrieves tracking information for a specific shipment using the transaction ID and tracking number.
The transaction_id can fetch from the captured payment details in the order information.
Below is the payload request structure:

Input parameters:

- `order_id` (string): The ID of the order for which to create a shipment.
- `transaction_id` (string): The transaction ID associated with the shipment tracking to retrieve.

### `update_shipment_tracking` (~153 tokens)

Update tracking information for a shipment by ID and status. 

This tool updates tracking information such as the carrier or the tracking number for a specific shipment using the transaction ID and status.

Input parameters:

- `carrier` (string): The carrier handling the shipment.
- `new_tracking_number` (string): The new tracking number for the shipment if being updated.
- `status` (string, required): The status of the item shipment. It can be "CANCELLED", "DELIVERED", "LOCAL_PICKUP", "ON_HOLD", or "SHIPPED".
- `tracking_number` (string, required): The tracking number that you want to update.
- `transaction_id` (string, required): The transaction ID associated with the shipment tracking to retrieve.

### `create_order` (~148 tokens)

Create an order in PayPal.

This tool is used to create a new order in PayPal. This is typically the first step in initiating a payment flow. It sets up an order with specified details such as item(s) to be purchased, quantity, amount, currency, and other details.

Input parameters:

- `cancelUrl` (string)
- `currencyCode` (string, required): Currency code of the amount.
- `discount` (number): The discount amount for the order.
- `items` (array, required)
- `notes`
- `returnUrl` (string)
- `shippingAddress`: The shipping address for the order.
- `shippingCost` (number): The cost of shipping for the order.

### `get_order` (~69 tokens)

Retrieves the order details from PayPal for a given order ID.

This tool is used to retrieve details of an existing order in PayPal. It provides information about the order, including items, amounts, status, and other relevant details.

Input parameters:

- `id` (string, required): The order id generated during create call

### `pay_order` (~60 tokens)

Capture a payment for an order.

This tool is used to capture a payment for an order. It allows you to capture funds that have been authorized for a specific order but not yet captured.

Input parameters:

- `id` (string, required): The order id generated during create call

### `list_disputes` (~64 tokens)

List disputes from PayPal.

This function retrieves a list of disputes with optional pagination and filtering parameters.

Input parameters:

- `dispute_state` (string): OPEN_INQUIRIES
- `disputed_transaction_id`
- `page` (number)
- `page_size` (number)

### `get_dispute` (~80 tokens)

Get details for a specific dispute from PayPal.

This tool is used to lists disputes with a summary set of details, which shows the dispute_id, reason, status, dispute_state, dispute_life_cycle_stage, dispute_channel, dispute_amount, create_time and update_time fields.

Input parameters:

- `dispute_id` (string, required): The order id generated during create call

### `accept_dispute_claim` (~105 tokens)

Accept liability for a dispute claim.

This tool is used to accept liability for a dispute claim. When you accept liability for a dispute claim, the dispute closes in the customer's favor and PayPal automatically refunds money to the customer from the merchant's account.

Checked by fizzl-paypal-guard before it runs: the owner approves or denies each one.

Input parameters:

- `dispute_id` (string, required)
- `note` (string, required): A note about why the seller is accepting the claim

### `list_transactions` (~345 tokens)

List transactions from PayPal.

This tool is used to list transactions with optional filtering parameters within a date range of 31 days. This tool can also be used to list details of a transaction given the transaction ID.

\- The start_date and end_date should be specified in ISO8601 date and time format. Example dates: 1996-12-19T16:39:57-08:00, 1985-04-12T23:20:50.52Z, 1990-12-31T23:59:60Z
\- The transaction_status accepts the following 4 values:
    1. "D" - represents denied transactions.
    2. "P" - represents pending transactions.
    3. "S" - represents successful transactions.
    4. "V" - represents transactions that were reversed.
\- The transaction_id is the unique identifier for the transaction.

Input parameters:

- `end_date` (string): Filters the transactions in the response by an end date and time, in ISO8601 date and time format. Seconds are required. Fractional seconds are optional. The maximum supported range is 31 days.
- `page` (number)
- `page_size` (number)
- `search_months` (number): Number of months to search back for a transaction by ID. Default is 12 months.
- `start_date` (string): Filters the transactions in the response by a start date and time, in ISO8601 date and time format. Seconds are required. Fractional seconds are optional.
- `transaction_id`: The ID of the transaction to retrieve.
- `transaction_status` (string)

### `update_plan` (~230 tokens)

Update a billing plan in PayPal using the Plans API (PATCH).

This function updates an existing plan with status CREATED or ACTIVE. For INACTIVE plans, only status updates are allowed.
You can patch the following attributes and objects in one call:

    - name
    - description
    - payment_preferences.auto_bill_outstanding
    - payment_preferences.payment_failure_threshold
    - payment_preferences.setup_fee
    - payment_preferences.setup_fee_failure_action
    - taxes.percentage

Checked by fizzl-paypal-guard before it runs: the owner approves or denies each one.

Input parameters:

- `auto_bill_outstanding` (string): Auto bill outstanding
- `description` (string): Plan description.
- `name` (string): Plan name
- `operations` (string, required): The PATCH operations to perform on the plan
- `payment_failure_threshold` (string): Payment failure threshold
- `percentage` (string): Taxes percentage
- `plan_id` (string, required): The ID of the plan to update.
- `setup_fee` (object): Setup fee
- `setup_fee_failure_action` (string): Setup fee failure action

### `create_refund` (~272 tokens)

Initiate a refund for a PayPal payment capture.
If you have an order ID instead of a capture ID, first use the get order tool to obtain the capture ID from the order details.
This function allows you to return funds to a customer by refunding a previously captured payment. You can issue a full refund or specify a partial amount. If multiple captures exist for an order, request clarification on which specific capture to refund.
Required parameters:
\- Capture ID: The ID of the capture to refund
\- Amount (optional): For partial refunds, specify the amount to refund (must be less than or equal to the captured amount)
\- Note to Payer (optional): Additional explanation visible to the customer
Response details include:
\- Refund ID and status
\- Refunded amount and currency

Checked by fizzl-paypal-guard before it runs: never more than is left of the payment, within the owner's limits; above them the owner approves or denies.

Input parameters:

- `amount` (object): The amount to refund. If not specified, the full captured amount is refunded.
- `capture_id` (string, required): The ID of the capture to refund.
- `invoice_id` (string): The invoice ID that is used to track this payment.
- `note_to_payer` (string): A note to the payer.

### `get_refund` (~142 tokens)

Retrieve detailed information about a PayPal payment refund.
If you have an order ID instead of a refund ID, first use the get order tool to obtain the refund ID from the order details. 
This function returns comprehensive details about a refund, including its current status (completed, pending, cancelled), refunded amount, and processing information.
When multiple refunds exist for an order or capture, request clarification on which specific refund to retrieve. 
Response details include:
\- Refund status and ID
\- Refunded amount and currency
\- Reason for refund (if provided)
\- Source transaction details

Input parameters:

- `refund_id` (string, required): The ID of the refund to get details for.

### `get_merchant_insights` (~153 tokens)

Retrieve business intelligence metrics and analytics for a merchant, filtered by start date, end date, insight type, and time interval.

This tool returns actionable insights into orders and sales data, supporting data-driven business decisions.

Input parameters:

- `end_date` (string, required): The end date range to filter insights
- `insight_type` (string, required): The type of insight to retrieve. It can be "ORDERS" or "SALES"
- `start_date` (string, required): The start date range to filter insights
- `time_interval` (string, required): The time periods used for segmenting metrics data. It can be "DAILY", "WEEKLY", "MONTHLY", "QUARTERLY", or "YEARLY"

### `paypal_guard_status` (~82 tokens)

What fizzl-paypal-guard allows and has done: the owner's limits, how much of today's limits is used, approvals waiting for the owner, and the latest decisions (from a log the agent doesn't write). With approval_id: what became of that one approval.

Input parameters:

- `approval_id` (string): An approvalId from a result with "waiting": true

### `paypal_guard_check` (~92 tokens)

Dry run: what fizzl-paypal-guard would decide for a PayPal tool call (allow, ask the owner, or deny, and why), without running it, counting it or asking anyone. Reads the payment, invoice or dispute at PayPal.

Input parameters:

- `arguments` (object): The arguments you would pass to it
- `tool` (string, required): A PayPal tool name, like create_refund

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/fizzl13-paypal-guard/fizzl-paypal-guard-mcp#diagnostics

## Score history

- 2026-10-24: 76
- 2026-10-23: 76
- 2026-10-22: 38
- 2026-10-21: 67

## Common questions

### What is the PayPal, guarded MCP server?

PayPal, guarded is an MCP server listed in the public MCP registry as io.github.Fizzl13/paypal-guard. PayPal's Agent Toolkit with limits on refunds and the owner's Approve/Deny above them. This page covers its npm package (fizzl-paypal-guard-mcp).

### Is the PayPal, guarded MCP server safe to use?

PayPal, guarded scores 76 out of 100 on VerifyMCP. We recorded 12 known advisories against it as of 24 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the PayPal, guarded MCP server expose?

PayPal, guarded exposes 49 tools: create_invoice, create_recurring_series, activate_recurring_series, get_recurring_series, cancel_recurring_series, and 44 more. Their descriptions and schemas cost roughly 8,011 tokens of context every time the server is loaded.

### Is the PayPal, guarded MCP server still maintained?

PayPal, guarded is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the PayPal, guarded MCP server under?

PayPal, guarded declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/fizzl-paypal-guard-mcp
- Socket report: https://socket.dev/npm/package/fizzl-paypal-guard-mcp
- Repository: https://github.com/Fizzl13/x402-examples
- Website: https://fizzl-paypal-demo.onrender.com/
- Changelog RSS feed: https://verifymcp.io/servers/fizzl13-paypal-guard/fizzl-paypal-guard-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/fizzl13-paypal-guard/fizzl-paypal-guard-mcp.json
- HTML version of this page: https://verifymcp.io/servers/fizzl13-paypal-guard/fizzl-paypal-guard-mcp
