PayPal MCP server integration for invoices, payments, subscriptions, disputes, and transaction reporting via @paypal/mcp.
PayPal MCP server integration for invoices, payments, subscriptions, disputes, and transaction reporting via @paypal/mcp.
Trit: 0 (ERGODIC)
Role: Coordinator - orchestrates payment flows between crypto and fiat
Color: #26D826 (green)
{
"paypal": {
"command": "npx",
"args": ["-y", "@paypal/mcp", "--tools=all"],
"env": {
"PAYPAL_ACCESS_TOKEN": "${PAYPAL_ACCESS_TOKEN}",
"PAYPAL_ENVIRONMENT": "SANDBOX"
}
}
}
{
"mcpServers": {
"paypal": {
"command": "npx",
"args": ["-y", "@paypal/mcp", "--tools=all"],
"env": {
"PAYPAL_ACCESS_TOKEN": "${PAYPAL_ACCESS_TOKEN}",
"PAYPAL_ENVIRONMENT": "PRODUCTION"
}
}
}
}
PayPal requires OAuth2 access tokens. Token validity:
# Sandbox
curl -X POST https://api-m.sandbox.paypal.com/v1/oauth2/token \
-H "Accept: application/json" \
-H "Accept-Language: en_US" \
-u "${PAYPAL_CLIENT_ID}:${PAYPAL_CLIENT_SECRET}" \
-d "grant_type=client_credentials"
# Production
curl -X POST https://api-m.paypal.com/v1/oauth2/token \
-H "Accept: application/json" \
-H "Accept-Language: en_US" \
-u "${PAYPAL_CLIENT_ID}:${PAYPAL_CLIENT_SECRET}" \
-d "grant_type=client_credentials"
#!/bin/bash
# paypal-token-refresh.sh
export PAYPAL_ACCESS_TOKEN=$(curl -s -X POST \
"https://api-m.${PAYPAL_ENVIRONMENT:-sandbox}.paypal.com/v1/oauth2/token" \
-H "Accept: application/json" \
-u "${PAYPAL_CLIENT_ID}:${PAYPAL_CLIENT_SECRET}" \
-d "grant_type=client_credentials" | jq -r '.access_token')
echo "Token refreshed: ${PAYPAL_ACCESS_TOKEN:0:20}..."
| Tool | Description |
|------|-------------|
| create_invoice | Create a new invoice |
| list_invoices | List all invoices |
| get_invoice | Get invoice details by ID |
| send_invoice | Send invoice to recipient |
| send_invoice_reminder | Send payment reminder |
| cancel_sent_invoice | Cancel a sent invoice |
| generate_invoice_qr_code | Generate QR code for invoice payment |
| Tool | Description |
|------|-------------|
| create_order | Create a payment order |
| get_order | Get order details |
| pay_order | Capture/execute payment |
| create_refund | Issue a refund |
| get_refund | Get refund status |
| Tool | Description |
|------|-------------|
| list_disputes | List all disputes |
| get_dispute | Get dispute details |
| accept_dispute_claim | Accept a dispute claim |
| Tool | Description |
|------|-------------|
| create_shipment_tracking | Add tracking info to transaction |
| get_shipment_tracking | Get tracking status |
| Tool | Description |
|------|-------------|
| create_product | Create product in catalog |
| list_products | List all products |
| show_product_details | Get product details |
| update_product | Update product info |
| Tool | Description |
|------|-------------|
| create_subscription_plan | Create billing plan |
| update_plan | Update plan details |
| list_subscription_plans | List all plans |
| show_subscription_plan_details | Get plan details |
| create_subscription | Create subscription for customer |
| show_subscription_details | Get subscription status |
| update_subscription | Modify subscription |
| cancel_subscription | Cancel active subscription |
| Tool | Description |
|------|-------------|
| list_transactions | List transactions with filters |
User: Create an invoice for $150 consulting fee to client@example.com
Agent Flow:
1. create_invoice(amount: 150, currency: "USD", recipient: "client@example.com", description: "Consulting services")
2. send_invoice(invoice_id: "<returned_id>")
3. generate_invoice_qr_code(invoice_id: "<returned_id>")
User: Create an order for $99.99 and capture payment
Agent Flow:
1. create_order(amount: 99.99, currency: "USD", intent: "CAPTURE")
2. get_order(order_id: "<returned_id>") -- verify status
3. pay_order(order_id: "<returned_id>") -- capture funds
User: Show me transactions from the last 7 days
Agent Flow:
1. list_transactions(start_date: "2024-12-24", end_date: "2024-12-31")
User: Create a monthly $29 subscription plan
Agent Flow:
1. create_product(name: "Premium Service", type: "SERVICE")
2. create_subscription_plan(product_id: "<id>", name: "Monthly Premium", billing_cycles: [{frequency: "MONTH", price: 29}])
3. create_subscription(plan_id: "<plan_id>", subscriber_email: "user@example.com")
Bridge crypto (Aptos) to fiat (PayPal) via PYUSD stablecoin:
┌─────────────────────────────────────────────────────────────────┐
│ APT → PYUSD → PAYPAL FLOW │
└─────────────────────────────────────────────────────────────────┘
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ APT │────▶│ DEX │────▶│ PYUSD │────▶│ PayPal │
│ Wallet │ │ Swap │ │ Bridge │ │ Payout │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│ │ │ │
│ aptos_swap │ liquidswap │ pyusd_redeem │ create_order
│ │ │ │ pay_order
;; +1 GENERATOR: Aptos swap APT→PYUSD
(aptos_swap {:from "APT" :to "PYUSD" :amount 100})
;; 0 COORDINATOR: Bridge PYUSD to PayPal (this skill)
(create_order {:amount 100 :currency "USD" :funding "PYUSD"})
;; -1 VALIDATOR: Verify settlement
(get_order {:order_id order-id}) ;; Confirm COMPLETED status
CREATE TABLE paypal_bridge_txns (
txn_id VARCHAR PRIMARY KEY,
aptos_txn_hash VARCHAR,
pyusd_amount DECIMAL(18,6),
usd_amount DECIMAL(10,2),
paypal_order_id VARCHAR,
status VARCHAR, -- PENDING, BRIDGED, SETTLED, FAILED
created_at TIMESTAMP,
settled_at TIMESTAMP,
gf3_trit INT CHECK (gf3_trit IN (-1, 0, 1))
);
| Variable | Required | Description |
|----------|----------|-------------|
| PAYPAL_ACCESS_TOKEN | Yes | OAuth2 access token |
| PAYPAL_ENVIRONMENT | Yes | SANDBOX or PRODUCTION |
| PAYPAL_CLIENT_ID | For refresh | App client ID |
| PAYPAL_CLIENT_SECRET | For refresh | App client secret |
Common PayPal API errors:
AUTHENTICATION_FAILURE - Token expired, refresh requiredINVALID_RESOURCE_ID - Invoice/order not foundPERMISSION_DENIED - Scope not authorizedRATE_LIMIT_REACHED - Too many requests, backoffPayPal-MCP as ERGODIC (0) coordinator in payment triads:
┌─────────────────────────────────────────────────────────────────┐
│ PAYMENT TRIAD │
├─────────────────────────────────────────────────────────────────┤
│ +1 GENERATOR │ aptos-agent │ Create crypto txn │
│ 0 COORDINATOR │ paypal-mcp │ Bridge to fiat │
│ -1 VALIDATOR │ duckdb-ies │ Verify settlement │
├─────────────────────────────────────────────────────────────────┤
│ Σ trits = (+1) + (0) + (-1) = 0 ≡ 0 (mod 3) ✓ │
└─────────────────────────────────────────────────────────────────┘
aptos-agent - Aptos blockchain interactionsaptos-trading - DEX swaps for APT→PYUSDduckdb-ies - Transaction tracking and analyticsgoogle-workspace - Invoice delivery via GmailSearch for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer