# mcp-a2a-ap2-im-hungry ππ³
MCP server with **A2A protocol** (food delivery) + **AP2 protocol** (payments with Mandates).
## Demo

## Flow

## Quick Start
```bash
git clone https://github.com/tas1337/mcp-a2a-ap2-im-hungry.git
cd mcp-a2a-ap2-im-hungry
npm start
```
**Services:**
- MCP Server: `http://localhost:8000/mcp`
- Registry: `http://localhost:8004`
- DoorDash/UberEats/Grubhub: `8001-8003` (A2A)
- Stripe: `http://localhost:8005` (AP2)
## What's Different from mcp-a2a-im-hungry?
| mcp-a2a-im-hungry | This project |
|-------------------|--------------|
| A2A only | A2A + **AP2** |
| No payments | Stripe payments |
| β | **Mandates** (signed authorization) |
## What is AP2?
Problem: AI agents spending money. Who approved it?
**AP2 = Payments with Mandates** β cryptographically signed proof of user intent.
```
MANDATE = { userId, maxAmount, expires, signature }
```
**Flow (matches real-world AP2):**
1. User asks for cheeseburger π
2. Your agent searches restaurants via A2A (discovers DoorDash/UberEats/Grubhub agents)
3. Your agent gets menus and delivery estimates
4. Your agent decides which restaurant (cheapest/fastest)
5. **User authorizes payment** β User's authorization service creates mandate (signed with user's private key)
6. **Your agent requests authorization** β Receives mandate from user
7. **Your agent sends payment request WITH mandate to Stripe agent** (via A2A)
8. **Stripe agent VERIFIES mandate** (signature valid? not expired? amount ok?)
9. If valid β Stripe processes payment β
10. **Your agent places order with food delivery agent** (DoorDash/UberEats/Grubhub via A2A)
11. π Burger incoming!
**Key Point:** The agent NEVER creates mandates. User authorization creates them. Agent only uses them.
## Project Structure
```
src/
βββ a2a-client.ts # Calls ANY agent (food or Stripe)
βββ tools.ts # Food tools
βββ ap2-tools.ts # Payment tools (requests user authorization)
βββ user-authorization.ts # User creates mandates (real-world: wallet/auth service)
mock-agents/
βββ food-delivery/ # DoorDash, UberEats, Grubhub
βββ payments/ # Stripe (verifies mandates!)
βββ registry/ # Agent discovery
```
## Tools
| Tool | Description |
|------|-------------|
| `search_restaurants` | Search food (A2A) |
| `get_menu` | Get menu (A2A) |
| `place_order` | Order food (A2A) |
| `process_payment` | Pay via Stripe (AP2 + Mandate) |
| `process_refund` | Refund via Stripe (AP2 + Mandate) |
## Connect to Cursor
```json
{
"mcpServers": {
"mcp-a2a-ap2-im-hungry": {
"url": "http://localhost:8000/mcp"
}
}
}
```
## Resources
- [A2A Protocol (Google)](https://developers.googleblog.com/a2a-a-new-era-of-agent-interoperability/)
- [MCP Specification](https://modelcontextprotocol.io)
- [AP2 Protocol (Google)](https://cloud.google.com/blog/products/ai-machine-learning/announcing-agents-to-payments-ap2-protocol)