PayPal
PayPal's own MCP server gives an agent refunds, invoices, orders and disputes, with no limit or approval of its own. Shotoku sits in front of it.
Shotoku never moves the money. It decides whether each call may run, and records the answer in the local ledger.
Setup
Wrap @paypal/mcpas an upstream of the Shotoku MCP server and name the PayPal pricer. Use your PayPal app's client ID and secret: Shotoku mints an access token each time it starts and gives the PayPal server only the token.
Point SHOTOKU_MCP_UPSTREAMS at that file. Each PayPal tool then appears to the agent as paypal__<tool>. See MCP: putting a price on wrapped tools.
A policy for a support agent
Reads are free. Refunds up to $100 go through; a bigger one waits for a human. Anything else PayPal offers is held for review.
How calls are priced
| Tool | Priced at |
|---|---|
| create_refund with amount | That amount. |
| create_refund without amount | The full capture, looked up from PayPal: that is what PayPal refunds. |
| accept_dispute_claim | The disputed amount, looked up from PayPal. |
| Every other tool | $0. None of them sends money out. |
A call that cannot be priced gets no amount, never zero, so a limited rule holds it for a human.
Run the demo
The repository ships a demo that runs against the PayPal sandbox in a few minutes: two orders paid with PayPal's test card, a customer email, and either a scripted agent or a real one.
See examples/paypal for the full walkthrough.