PayPal MCP server for AI agents

Live

REST API APP (CLIENT CREDENTIALS)

PAYMENTS

Accounting & Finance

PayPal gives your agent payment operations on your PayPal account: create and send invoices, capture and refund orders, run subscription plans, send payouts, respond to disputes, and add shipment tracking.

  • One app connection: PayPal is connected once with a service account, not per user.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
PayPal
agent · Acme Q3
Run
Which disputes are still open, and how much money is involved?
S
paypal_disputes_list
138ms
Payments agent
3 disputes are open, totaling $1,284. The largest, $940, is an item not received claim from 12 days ago.
Sources: PayPal disputes, last 180 days
paypal
3 disputes
18:29
Message Claude...

Tools your payments agent reaches for on PayPal, scope checked on every call.

CALL ANY TOOL
63 tools for payments on PayPal: create, send, and remind invoices, create, capture, and refund orders, run subscription plans, send payouts, handle disputes, and track shipments.
paypal_authorization_capture
Capture authorization
Capture all or part of an authorized PayPal payment, moving the held funds to the merchant. Returns the capture with its id, status and amount. Use authorization_capture after order_authorize; leave the amount empty to capture the full authorized amount. Use order_capture for orders created with intent CAPTURE.
Parameters
Name
Type
Required
Description
authorization_id
string
Required
The PayPal authorization ID, found in purchase_units[].payments.authorizations[].id of the order returned by order_authorize or order_get. Example: 0VF52814937998046
amount_value
string
Optional
Amount to capture. Leave empty to capture the full authorized amount as a decimal string in the currency's units, for example 10.50 for ten dollars and fifty cents. Use whole numbers for currencies without decimals such as JPY. Set currency_code together with this field.
currency_code
string
Optional
Three-letter ISO 4217 currency code for the capture amount, in upper case. Required whenever an amount is given. Example: USD
final_capture
boolean
Optional
Set to true if you will not capture any more against this authorization, which releases the remaining hold. Defaults to false.
invoice_id
string
Optional
Your own invoice number for this capture, shown in the buyer's transaction history. Up to 127 characters. Example: INV-1001
note_to_payer
string
Optional
A note about this capture shown to the buyer in their transaction history and email. Up to 255 characters. Example: Thanks for your order
request_id
string
Optional
Optional idempotency key sent as the PayPal-Request-Id header. If a request with the same key was already processed, PayPal returns the original result instead of repeating the operation, so retries are safe. Use any unique string up to 108 characters, such as a UUID. Example: 7b92603e-77ed-4896-8e78-5dea2050476a
soft_descriptor
string
Optional
Text that appears on the buyer's card or bank statement, up to 22 characters. Example: ACME*ORDER1001
paypal_authorization_get
Get authorization
paypal_authorization_void
Void authorization
paypal_balances_list
List balances
paypal_dispute_escalate
Dispute escalate
paypal_dispute_get
Get dispute
paypal_invoice_cancel
Cancel invoice
paypal_invoice_create
Create invoice
paypal_invoice_number_generate
Generate invoice number
paypal_invoice_qr_code_generate
Generate invoice qr code
paypal_invoice_remind
Invoice remind
paypal_invoice_send
Send invoice
paypal_invoice_template_get
Get invoice template
paypal_invoice_template_update
Update invoice template
paypal_invoice_templates_list
List invoice templates
paypal_invoices_search
Search invoices
paypal_order_capture
Capture order
paypal_order_create
Create order
paypal_order_tracker_update
Update order tracker
paypal_order_tracking_add
Add order tracking
paypal_payout_get
Get payout
paypal_plan_create
Create plan
paypal_plan_deactivate
Deactivate plan
paypal_plan_get
Get plan
paypal_plan_pricing_update
Update plan pricing
paypal_plans_list
List plans
paypal_product_update
Update product
paypal_refund_get
Get refund
paypal_subscription_capture
Capture subscription
paypal_subscription_transactions_list
List subscription transactions

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// PayPal tools available to this agent
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["paypal"], toolNames: [
    "paypal_invoices_search",
    "paypal_invoice_remind",
    "paypal_disputes_list"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Send a reminder for every unpaid invoice older than 30 days and list open disputes" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["paypal"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Send a reminder for every unpaid invoice older than 30 days and list open disputes" }],
  tools,
});

// Execute the tool call with the vaulted PayPal service account credentials
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["paypal"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Send a reminder for every unpaid invoice older than 30 days and list open disputes" }],
  tools,
});

// Tool call runs with the vaulted PayPal service account credentials
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["paypal"] }, pageSize: 100,
});

const agent = new Agent({
  name: "payments_agent",
  model: "gemini-2.5-pro",
  instruction: "PayPal tools available to this agent",
  tools,
});

await agent.run("Send a reminder for every unpaid invoice older than 30 days and list open disputes");
Try these prompts
Copy any prompt into your agent. Each maps directly to a PayPal tool. Click to copy, paste into your agent, done.
Invoices
Copy the prompt
Copied
Create a draft invoice for jordan@example.com for 3 hours of design work at $120.
Copy the prompt
Copied
Send a reminder for every unpaid invoice older than 30 days.
Copy the prompt
Copied
Record a $500 bank transfer payment against this invoice.
Orders and refunds
Copy the prompt
Copied
Capture the authorized payment on this order.
Copy the prompt
Copied
Refund $25 of this captured payment.
Copy the prompt
Copied
Add UPS tracking number 1Z999AA10123456784 to this order.
Subscriptions and payouts
Copy the prompt
Copied
Create a monthly plan at $29 for our Analytics product.
Copy the prompt
Copied
Suspend this subscription.
Copy the prompt
Copied
Send $150 payouts to these 4 affiliates by email.
SEE HOW AUTH WORKS
You connect PayPal once with a service account, and Scalekit authenticates every call. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
PayPal
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
PayPal
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
PayPal
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
PayPal
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same auth pattern across other accounting and finance connectors.
GTM and RevOps Teams
Revenue forecast commentary
Pulls open pipeline from Salesforce and HubSpot, calculates coverage against quota, flags at-risk stages, posts commentary to Slack, and logs every snapshot to Google Sheets.
GTM and RevOps Teams
CRM AI agent
Reads the Granola transcript after every call, extracts next steps and updates the HubSpot record, drafts the follow-up in Gmail, and confirms in Slack, all on the rep's own delegated OAuth.
Test other agents
See the same auth pattern across other accounting and finance connectors.
GTM
Revenue forecast agent
Score pipeline coverage against quota across Salesforce and HubSpot, post forecast commentary to Slack, log snapshots to Sheets.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
PayPal sees every call from one REST API app, so a refund or payout looks the same no matter who asked for it. Scalekit logs which user triggered each agent call, so your audit trail still shows who did what.
// paypal sees
caller → rest_api_app

// scalekit log
caller → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
PayPal today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access PayPal through a service account?
Yes. You connect PayPal once with a service account, and Scalekit authenticates every call. The connection uses a PayPal REST API app's client credentials, so every tool acts on the PayPal account that owns that app. Scalekit logs which user's agent made each call.
Where are the PayPal service account credentials stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in PayPal?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the list and get tools without paypal_payout_create, which sends money to recipients, or paypal_capture_refund, which refunds a captured payment. Scalekit also enforces scope checks before every API call.
What happens when PayPal access is turned off?
Disable the connection in the Scalekit dashboard and the next tool call fails closed with a clear error. Other tenants are unaffected, and the change is logged.
Which PayPal account does the agent work on?
The PayPal account that owns the REST API app behind the connection. paypal_balances_list returns its balances per currency, and paypal_transactions_list searches its transaction history between two dates up to 31 days apart.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""paypal"": {
""url"": ""https://mcp.scalekit.com/paypal"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.paypal]
url = ""https://mcp.scalekit.com/paypal""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""paypal"": {
""url"": ""https://mcp.scalekit.com/paypal"",
""type"": ""http""
}
}
}