@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 +12 -6
- package/dist/index.js +180 -21
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
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
|
|
30
|
-
|
|
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` —
|
|
33
|
-
|
|
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
|
-
|
|
36
|
-
`AGENTBANK_API_URL
|
|
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
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
//
|
|
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
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
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
|
|
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:
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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:
|
|
93
|
-
resort:
|
|
247
|
+
booked: paid.status === 'captured',
|
|
248
|
+
resort: resort.name,
|
|
94
249
|
quantity,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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.
|
|
4
|
-
"description": "Demo Club Med storefront MCP — browse resorts worldwide and book them
|
|
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": "
|
|
39
|
+
"directory": "examples/clubmed-demo"
|
|
39
40
|
},
|
|
40
41
|
"author": "robin",
|
|
41
42
|
"scripts": {
|