@curless/clubmed-demo 0.2.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,11 +26,17 @@ The server talks to `https://mcp.curless.ai` by default — no need to configure
26
26
 
27
27
  ## Tools
28
28
 
29
- - `list_clubmed_resorts` — browse resorts across Europe and the Mediterranean
30
- (filter by country / ski|sun); shows the per-person/week price.
29
+ - `list_clubmed_resorts` — browse resorts worldwide (Alps & Japan ski;
30
+ Mediterranean, Indian Ocean, Caribbean & Americas sun filter by country /
31
+ ski|sun); shows the per-person/week price.
31
32
  - `get_clubmed_resort` — one resort by sku.
32
- - `book_clubmed_resort` — book via an ACP checkout (moves money on the configured
33
- rail; sandbox default token `pm_card_visa`).
33
+ - `book_clubmed_resort` — books in two steps: the merchant backend
34
+ (`mcp.curless.ai/clubmed`) opens a merchant-quoted ACP checkout session, then
35
+ this buyer agent completes it with its own card token — a real charge on the
36
+ configured rail. The buyer never touches the merchant's keys.
34
37
 
35
- Env: `CLUBMED_MERCHANT_ID` (default `429488`). For local dev, set
36
- `AGENTBANK_API_URL=http://localhost:3000` to point at a local API.
38
+ Optional env:
39
+ - `AGENTBANK_API_URL` override the gateway base URL (default
40
+ `https://mcp.curless.ai`); set to `http://localhost:3000` for local dev.
41
+ - `AGENTBANK_PAYMENT_TOKEN` — the card token the buyer pays with (default
42
+ `pm_card_visa`, the Stripe sandbox test card).
package/dist/index.js CHANGED
@@ -1,26 +1,37 @@
1
1
  #!/usr/bin/env node
2
+ import { randomBytes } from 'node:crypto';
2
3
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
4
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
5
  import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
6
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
7
+ import { base, baseSepolia } from 'viem/chains';
5
8
  // @curless/clubmed-demo — a SIMULATED "Club Med" storefront MCP for the BUYER.
6
- // It browses Club Med resorts and starts a booking by calling Club Med's own
7
- // merchant backend (mcp.curless.ai/clubmed) NOT the agentbank gateway
8
- // directly. The backend owns the catalog + prices the booking + opens a
9
- // merchant-quoted checkout with its own key; this storefront holds NO secret.
10
- // Payment is completed by the customer at the returned hosted checkout link.
9
+ // Booking is end-to-end agentic:
10
+ // 1. browse + start a booking via Club Med's merchant backend
11
+ // (mcp.curless.ai/clubmed) the merchant prices it and opens a
12
+ // merchant-quoted ACP checkout session with its own key;
13
+ // 2. THIS buyer agent completes the charge over ACP with its own payment
14
+ // credential (test card) — the merchant set the price, the agent pays.
15
+ // The storefront never sees the merchant's key; it holds only its OWN buyer
16
+ // token, exactly like a real agent buyer.
11
17
  //
12
18
  // Run (Claude Desktop / any MCP client):
13
19
  // npx -y @curless/clubmed-demo
14
- // with env (all optional):
15
- // AGENTBANK_API_URL base URL (default https://mcp.curless.ai; set
16
- // http://localhost:3000 for local dev). The Club Med
17
- // backend lives under <base>/clubmed.
20
+ // with env:
21
+ // AGENTBANK_AGENT_TOKEN the buyer's agentbank agent key (agb_…, agent:execute).
22
+ // Use a TEST, no-org key (the demo org is shared).
23
+ // AGENTBANK_API_URL base URL (default https://mcp.curless.ai; set
24
+ // http://localhost:3000 for local dev).
25
+ // AGENTBANK_PAYMENT_TOKEN delegated card token (default pm_card_visa).
18
26
  //
19
27
  // IMPORTANT: only JSON-RPC may be written to stdout (the MCP stdio transport).
20
28
  // Never console.log here — diagnostics go to stderr.
21
29
  const API_BASE = (process.env.AGENTBANK_API_URL ?? 'https://mcp.curless.ai').replace(/\/$/, '');
22
30
  const CLUBMED = `${API_BASE}/clubmed`;
23
- const api = async (path, init = {}) => {
31
+ const TOKEN = process.env.AGENTBANK_AGENT_TOKEN;
32
+ const PAYMENT_TOKEN = process.env.AGENTBANK_PAYMENT_TOKEN ?? 'pm_card_visa';
33
+ // Club Med backend (public — no buyer token; the merchant key lives there).
34
+ const backend = async (path, init = {}) => {
24
35
  const res = await fetch(`${CLUBMED}${path}`, {
25
36
  ...init,
26
37
  headers: { 'content-type': 'application/json', ...(init.headers ?? {}) },
@@ -30,6 +41,66 @@ const api = async (path, init = {}) => {
30
41
  }
31
42
  return (await res.json());
32
43
  };
44
+ // --- x402 (stablecoin) payment --------------------------------------------
45
+ // Club Med prices in EUR; x402 settles USDC, so convert. Fixed demo rate (a
46
+ // real integration uses a live FX feed); USDC is dollar-pegged 1:1.
47
+ const EUR_TO_USD = 1.08;
48
+ // EUR minor units (2 dp) → USDC base units (6 dp), at the demo rate.
49
+ const eurToUsdcBase = (eurCents) => Math.round(eurCents * EUR_TO_USD * 1e4);
50
+ const CHAINS = { base: base.id, 'base-sepolia': baseSepolia.id };
51
+ // Answer an x402 402 challenge: sign an EIP-3009 transferWithAuthorization and
52
+ // return the base64 X-PAYMENT header. A generated key signs (no funds needed
53
+ // under the STUB facilitator); set X402_PAYER_PRIVATE_KEY for a real funded
54
+ // payer once a mainnet facilitator is wired.
55
+ const signX402 = async (r) => {
56
+ const key = process.env.X402_PAYER_PRIVATE_KEY ?? generatePrivateKey();
57
+ const payer = privateKeyToAccount(key);
58
+ const validBefore = BigInt(Math.floor(Date.now() / 1000) + r.maxTimeoutSeconds + 600);
59
+ const nonce = `0x${randomBytes(32).toString('hex')}`;
60
+ const signature = await payer.signTypedData({
61
+ domain: {
62
+ name: r.extra?.name ?? 'USDC',
63
+ version: r.extra?.version ?? '2',
64
+ chainId: CHAINS[r.network] ?? base.id,
65
+ verifyingContract: r.asset,
66
+ },
67
+ types: {
68
+ TransferWithAuthorization: [
69
+ { name: 'from', type: 'address' },
70
+ { name: 'to', type: 'address' },
71
+ { name: 'value', type: 'uint256' },
72
+ { name: 'validAfter', type: 'uint256' },
73
+ { name: 'validBefore', type: 'uint256' },
74
+ { name: 'nonce', type: 'bytes32' },
75
+ ],
76
+ },
77
+ primaryType: 'TransferWithAuthorization',
78
+ message: {
79
+ from: payer.address,
80
+ to: r.payTo,
81
+ value: BigInt(r.maxAmountRequired),
82
+ validAfter: 0n,
83
+ validBefore,
84
+ nonce,
85
+ },
86
+ });
87
+ return Buffer.from(JSON.stringify({
88
+ x402Version: 1,
89
+ scheme: r.scheme,
90
+ network: r.network,
91
+ payload: {
92
+ signature,
93
+ authorization: {
94
+ from: payer.address,
95
+ to: r.payTo,
96
+ value: r.maxAmountRequired,
97
+ validAfter: '0',
98
+ validBefore: validBefore.toString(),
99
+ nonce,
100
+ },
101
+ },
102
+ })).toString('base64');
103
+ };
33
104
  const TOOLS = [
34
105
  {
35
106
  name: 'list_clubmed_resorts',
@@ -53,7 +124,19 @@ const TOOLS = [
53
124
  },
54
125
  {
55
126
  name: 'book_clubmed_resort',
56
- description: "Book a Club Med resort — charges the full per-person/week price and confirms the booking in one step (Stripe test mode). Club Med's backend prices the resort and completes the payment; returns the booked order.",
127
+ description: 'Book a Club Med resort — charges the full per-person/week price and confirms the booking (Stripe test mode). Club Med prices the resort; this agent completes the payment with its card credential. Returns the booked order.',
128
+ inputSchema: {
129
+ type: 'object',
130
+ required: ['sku'],
131
+ properties: {
132
+ sku: { type: 'string' },
133
+ quantity: { type: 'integer', description: 'number of guests/weeks (default 1)' },
134
+ },
135
+ },
136
+ },
137
+ {
138
+ name: 'book_clubmed_resort_x402',
139
+ description: "Book a Club Med resort and pay in USDC over x402 (HTTP 402 + a signed EIP-3009 authorization). The resort's EUR price is converted to USDC and the merchant receives the stablecoin at its on-chain address. Returns the booking + the USDC amount paid.",
57
140
  inputSchema: {
58
141
  type: 'object',
59
142
  required: ['sku'],
@@ -67,7 +150,7 @@ const TOOLS = [
67
150
  const text = (value) => ({
68
151
  content: [{ type: 'text', text: JSON.stringify(value, null, 2) }],
69
152
  });
70
- const server = new Server({ name: 'clubmed', version: '0.2.1' }, { capabilities: { tools: {} } });
153
+ const server = new Server({ name: 'clubmed', version: '0.4.0' }, { capabilities: { tools: {} } });
71
154
  server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
72
155
  server.setRequestHandler(CallToolRequestSchema, async (req) => {
73
156
  const args = (req.params.arguments ?? {});
@@ -75,27 +158,103 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
75
158
  if (req.params.name === 'list_clubmed_resorts') {
76
159
  const country = typeof args.country === 'string' ? args.country.toUpperCase() : undefined;
77
160
  const kind = typeof args.kind === 'string' ? `?kind=${encodeURIComponent(args.kind)}` : '';
78
- const { items } = await api(`/catalog${kind}`);
161
+ const { items } = await backend(`/catalog${kind}`);
79
162
  const resorts = country ? items.filter((r) => r.country === country) : items;
80
163
  return text({ currency: 'EUR', count: resorts.length, resorts });
81
164
  }
82
165
  if (req.params.name === 'get_clubmed_resort') {
83
166
  const sku = String(args.sku ?? '');
84
- const resort = await api(`/catalog/${encodeURIComponent(sku)}`);
167
+ const resort = await backend(`/catalog/${encodeURIComponent(sku)}`);
85
168
  return text(resort);
86
169
  }
87
170
  if (req.params.name === 'book_clubmed_resort') {
171
+ if (!TOKEN) {
172
+ return {
173
+ content: [{ type: 'text', text: 'set AGENTBANK_AGENT_TOKEN (a test agent:execute key)' }],
174
+ isError: true,
175
+ };
176
+ }
177
+ const sku = String(args.sku ?? '');
178
+ const quantity = Math.max(Number(args.quantity) || 1, 1);
179
+ // 1. Club Med prices the resort + opens a merchant-quoted ACP session.
180
+ const session = await backend('/checkout', { method: 'POST', body: JSON.stringify({ sku, quantity }) });
181
+ // 2. This buyer agent completes the charge over ACP with its card token.
182
+ const url = `${API_BASE}/acp/${encodeURIComponent(session.merchantId)}/checkout_sessions/${encodeURIComponent(session.sessionId)}/complete`;
183
+ const res = await fetch(url, {
184
+ method: 'POST',
185
+ headers: { 'content-type': 'application/json', authorization: `Bearer ${TOKEN}` },
186
+ body: JSON.stringify({ payment_data: { token: PAYMENT_TOKEN, provider: 'stripe' } }),
187
+ });
188
+ if (!res.ok) {
189
+ throw new Error(`acp complete -> ${res.status}: ${await res.text().catch(() => '')}`);
190
+ }
191
+ const order = (await res.json());
192
+ return text({
193
+ booked: order.status === 'completed',
194
+ resort: session.name,
195
+ quantity,
196
+ total: session.amountDisplay,
197
+ status: order.status,
198
+ orderId: order.order?.id,
199
+ message: `Booked ${session.name} × ${quantity} — ${session.amountDisplay} charged (${order.status}).`,
200
+ });
201
+ }
202
+ if (req.params.name === 'book_clubmed_resort_x402') {
203
+ if (!TOKEN) {
204
+ return {
205
+ content: [{ type: 'text', text: 'set AGENTBANK_AGENT_TOKEN (a test agent:execute key)' }],
206
+ isError: true,
207
+ };
208
+ }
88
209
  const sku = String(args.sku ?? '');
89
210
  const quantity = Math.max(Number(args.quantity) || 1, 1);
90
- const booking = await api('/checkout', { method: 'POST', body: JSON.stringify({ sku, quantity }) });
211
+ // Club Med prices the resort in EUR; convert that price to USDC for x402.
212
+ const resort = await backend(`/catalog/${encodeURIComponent(sku)}`);
213
+ const { merchantId } = await backend('/health');
214
+ const eurCents = resort.price * quantity;
215
+ const usdcBase = eurToUsdcBase(eurCents);
216
+ const url = `${API_BASE}/x402/${encodeURIComponent(merchantId)}/checkout`;
217
+ const headers = {
218
+ 'content-type': 'application/json',
219
+ authorization: `Bearer ${TOKEN}`,
220
+ 'idempotency-key': `clubmed-x402-${sku}-${Date.now()}`,
221
+ };
222
+ // The EUR price (converted to USDC) is the explicit amount — 429488 is
223
+ // merchant-quoted, with no gateway catalog to price from.
224
+ const body = JSON.stringify({ items: [{ id: sku, quantity }], amount: usdcBase });
225
+ // 1. challenge → 402 + payment requirements (payTo = merchant's USDC address).
226
+ const ch = await fetch(url, { method: 'POST', headers, body });
227
+ if (ch.status !== 402) {
228
+ throw new Error(`x402 challenge expected 402, got ${ch.status}: ${await ch.text().catch(() => '')}`);
229
+ }
230
+ const challenge = (await ch.json());
231
+ const reqs = challenge.accepts?.[0];
232
+ if (!reqs)
233
+ throw new Error('x402 challenge missing payment requirements');
234
+ // 2. sign EIP-3009 → 3. paid retry (agentbank verifies + settles via the rail).
235
+ const xPayment = await signX402(reqs);
236
+ const paidRes = await fetch(url, {
237
+ method: 'POST',
238
+ headers: { ...headers, 'x-payment': xPayment },
239
+ body,
240
+ });
241
+ const paid = (await paidRes.json());
242
+ if (paidRes.status !== 200) {
243
+ throw new Error(`x402 settle -> ${paidRes.status}: ${JSON.stringify(paid)}`);
244
+ }
245
+ const usdc = (usdcBase / 1e6).toFixed(2);
91
246
  return text({
92
- booked: booking.booked,
93
- resort: booking.name,
247
+ booked: paid.status === 'captured',
248
+ resort: resort.name,
94
249
  quantity,
95
- total: booking.amountDisplay,
96
- status: booking.status,
97
- paymentIntentId: booking.paymentIntentId,
98
- message: `Booked ${booking.name} × ${quantity} — ${booking.amountDisplay} charged (${booking.status}).`,
250
+ priceEur: resort.priceDisplay ?? `€${(eurCents / 100).toFixed(2)}`,
251
+ paidUsdc: `${usdc} USDC`,
252
+ payTo: reqs.payTo,
253
+ network: reqs.network,
254
+ status: paid.status,
255
+ txHash: paid.txHash,
256
+ paymentIntentId: paid.paymentIntentId,
257
+ message: `Booked ${resort.name} × ${quantity} — paid ${usdc} USDC via x402 to ${reqs.payTo} (${paid.status}).`,
99
258
  });
100
259
  }
101
260
  return { content: [{ type: 'text', text: `unknown tool: ${req.params.name}` }], isError: true };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@curless/clubmed-demo",
3
- "version": "0.2.1",
4
- "description": "Demo Club Med storefront MCP — browse resorts worldwide and book them in one step via Club Med's merchant backend (mcp.curless.ai/clubmed), which prices and charges the booking server-side.",
3
+ "version": "0.4.0",
4
+ "description": "Demo Club Med storefront MCP — browse resorts worldwide and book them end-to-end: Club Med's merchant backend (mcp.curless.ai/clubmed) prices the resort and opens a merchant-quoted ACP session; the buyer agent completes the payment with a card (ACP) or in USDC over x402.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "bin": {
@@ -14,7 +14,8 @@
14
14
  "README.md"
15
15
  ],
16
16
  "dependencies": {
17
- "@modelcontextprotocol/sdk": "^1.0.4"
17
+ "@modelcontextprotocol/sdk": "^1.0.4",
18
+ "viem": "^2.50.4"
18
19
  },
19
20
  "devDependencies": {
20
21
  "@types/node": "^22.10.1",
@@ -35,7 +36,7 @@
35
36
  "repository": {
36
37
  "type": "git",
37
38
  "url": "git+https://gitlab.com/robin-ruan/agentbank.git",
38
- "directory": "packages/clubmed-demo"
39
+ "directory": "examples/clubmed-demo"
39
40
  },
40
41
  "author": "robin",
41
42
  "scripts": {