As agent-initiated payments scale via MPP, there are security gaps at the protocol layer that restricted API keys don't address.
No per-agent spend limits
Restricted keys control which operations an agent can perform, but not how much it can spend. An agent with payment_intents:write permission can create unlimited payment intents of any amount. There's no mechanism to say "this agent can spend up to $100 per transaction and $500 per day."
No cryptographic proof of which agent authorised a payment
In multi-agent systems, multiple agents share the same API key. When a payment is created, there's no signed record of which specific agent instance initiated it. For PSD2 compliance and fraud investigation, this is a gap.
No replay protection at the application layer
A captured create_payment_intent request can be re-sent. TLS protects the transport, but after termination at load balancers, proxies, and middleware, the payload is vulnerable to replay.
No tamper detection on payment parameters
Between the agent deciding to pay $50 and the API receiving the request, there's no integrity verification that the amount, recipient, or currency weren't modified by compromised middleware.
These map to OWASP MCP Top 10 risks MCP-01 (tool poisoning), MCP-04 (rug pulls), MCP-07 (auth gaps), and MCP-08 (logging gaps).
Possible approaches
- Per-agent identity tokens (separate from API keys) with embedded spend policies
- Application-layer message signing (ECDSA or HMAC) on payment tool calls
- Nonce and timestamp replay protection in the agent toolkit
- Structured audit events linking agent identity to payment actions
The IETF has a relevant draft addressing this for MCP: https://datatracker.ietf.org/doc/draft-sharif-mcps-secure-mcp/
The OWASP MCP Security Cheat Sheet also covers message-level integrity requirements for tool calls.
Would the Stripe team consider adding optional security middleware to the agent toolkit? Happy to contribute.
As agent-initiated payments scale via MPP, there are security gaps at the protocol layer that restricted API keys don't address.
No per-agent spend limits
Restricted keys control which operations an agent can perform, but not how much it can spend. An agent with payment_intents:write permission can create unlimited payment intents of any amount. There's no mechanism to say "this agent can spend up to $100 per transaction and $500 per day."
No cryptographic proof of which agent authorised a payment
In multi-agent systems, multiple agents share the same API key. When a payment is created, there's no signed record of which specific agent instance initiated it. For PSD2 compliance and fraud investigation, this is a gap.
No replay protection at the application layer
A captured create_payment_intent request can be re-sent. TLS protects the transport, but after termination at load balancers, proxies, and middleware, the payload is vulnerable to replay.
No tamper detection on payment parameters
Between the agent deciding to pay $50 and the API receiving the request, there's no integrity verification that the amount, recipient, or currency weren't modified by compromised middleware.
These map to OWASP MCP Top 10 risks MCP-01 (tool poisoning), MCP-04 (rug pulls), MCP-07 (auth gaps), and MCP-08 (logging gaps).
Possible approaches
The IETF has a relevant draft addressing this for MCP: https://datatracker.ietf.org/doc/draft-sharif-mcps-secure-mcp/
The OWASP MCP Security Cheat Sheet also covers message-level integrity requirements for tool calls.
Would the Stripe team consider adding optional security middleware to the agent toolkit? Happy to contribute.