@curless/clubmed-demo 0.1.3 → 0.1.5
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 +5 -4
- package/dist/index.js +18 -23
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# @curless/clubmed-demo
|
|
2
2
|
|
|
3
|
-
A demo "Club Med
|
|
4
|
-
|
|
3
|
+
A demo "Club Med" storefront MCP server. Browses Club Med resorts worldwide
|
|
4
|
+
(Alps & Japan ski; Mediterranean, Indian Ocean, Caribbean & Americas sun) and
|
|
5
|
+
books them through [agentbank](https://gitlab.com/robin-ruan/agentbank)
|
|
5
6
|
acquiring (ACP). For demos/testing only.
|
|
6
7
|
|
|
7
8
|
## Use (Claude Desktop / any MCP client)
|
|
@@ -25,8 +26,8 @@ The server talks to `https://mcp.curless.ai` by default — no need to configure
|
|
|
25
26
|
|
|
26
27
|
## Tools
|
|
27
28
|
|
|
28
|
-
- `list_clubmed_resorts` — browse resorts
|
|
29
|
-
|
|
29
|
+
- `list_clubmed_resorts` — browse resorts across Europe and the Mediterranean
|
|
30
|
+
(filter by country / ski|sun); shows the per-person/week price.
|
|
30
31
|
- `get_clubmed_resort` — one resort by sku.
|
|
31
32
|
- `book_clubmed_resort` — book via an ACP checkout (moves money on the configured
|
|
32
33
|
rail; sandbox default token `pm_card_visa`).
|
package/dist/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
-
// @curless/clubmed-demo — a SIMULATED "Club Med
|
|
6
|
-
//
|
|
7
|
-
// acquiring (收单) over ACP. The resort catalog + its
|
|
5
|
+
// @curless/clubmed-demo — a SIMULATED "Club Med" storefront MCP. It browses
|
|
6
|
+
// Club Med resorts worldwide (ski + sun) + prices and books them through
|
|
7
|
+
// agentbank's acquiring (收单) over ACP. The resort catalog + its pricing live in
|
|
8
8
|
// the agentbank merchant `429488`; this server reads that
|
|
9
9
|
// catalog and books via an ACP checkout.
|
|
10
10
|
//
|
|
@@ -35,21 +35,16 @@ const api = async (path, init = {}) => {
|
|
|
35
35
|
return (await res.json());
|
|
36
36
|
};
|
|
37
37
|
const eur = (minor) => `€${(minor / 100).toLocaleString('en-IE', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
|
|
38
|
-
const view = (it) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
price: eur(it.price), // demo test charge = 1% of list
|
|
49
|
-
note: 'demo test price = 1% of list (so sandbox charges stay tiny)',
|
|
50
|
-
available: it.available,
|
|
51
|
-
};
|
|
52
|
-
};
|
|
38
|
+
const view = (it) => ({
|
|
39
|
+
sku: it.sku,
|
|
40
|
+
name: it.name,
|
|
41
|
+
country: it.attributes.country,
|
|
42
|
+
kind: it.attributes.kind,
|
|
43
|
+
description: it.description,
|
|
44
|
+
currency: it.currency,
|
|
45
|
+
price: eur(it.price), // full per-person/week price
|
|
46
|
+
available: it.available,
|
|
47
|
+
});
|
|
53
48
|
const loadCatalog = async () => {
|
|
54
49
|
const { items } = await api(`/v1/merchants/${encodeURIComponent(MERCHANT)}/catalog`);
|
|
55
50
|
return items;
|
|
@@ -57,18 +52,18 @@ const loadCatalog = async () => {
|
|
|
57
52
|
const TOOLS = [
|
|
58
53
|
{
|
|
59
54
|
name: 'list_clubmed_resorts',
|
|
60
|
-
description: 'Browse Club Med
|
|
55
|
+
description: 'Browse Club Med resorts worldwide (Alps & Japan ski; Mediterranean, Indian Ocean, Caribbean & Americas sun) — shows the per-person/week price. Optional country (ISO-2, e.g. FR/IT/JP/MV/MQ/MX) or kind (ski|sun) filter.',
|
|
61
56
|
inputSchema: {
|
|
62
57
|
type: 'object',
|
|
63
58
|
properties: {
|
|
64
|
-
country: { type: 'string', description: 'ISO-2, e.g. FR / IT /
|
|
59
|
+
country: { type: 'string', description: 'ISO-2, e.g. FR / IT / JP / MV / MU / MQ / MX' },
|
|
65
60
|
kind: { type: 'string', enum: ['ski', 'sun'] },
|
|
66
61
|
},
|
|
67
62
|
},
|
|
68
63
|
},
|
|
69
64
|
{
|
|
70
65
|
name: 'get_clubmed_resort',
|
|
71
|
-
description: 'Get one Club Med
|
|
66
|
+
description: 'Get one Club Med resort by its sku (from list_clubmed_resorts).',
|
|
72
67
|
inputSchema: {
|
|
73
68
|
type: 'object',
|
|
74
69
|
required: ['sku'],
|
|
@@ -77,7 +72,7 @@ const TOOLS = [
|
|
|
77
72
|
},
|
|
78
73
|
{
|
|
79
74
|
name: 'book_clubmed_resort',
|
|
80
|
-
description:
|
|
75
|
+
description: "Book a Club Med resort — this MOVES MONEY through agentbank acquiring (ACP). Creates a checkout session for the resort and pays it with a delegated token (sandbox default pm_card_visa). Returns the order. Charges the resort's full per-person/week price (Stripe test mode).",
|
|
81
76
|
inputSchema: {
|
|
82
77
|
type: 'object',
|
|
83
78
|
required: ['sku'],
|
|
@@ -92,7 +87,7 @@ const TOOLS = [
|
|
|
92
87
|
const text = (value) => ({
|
|
93
88
|
content: [{ type: 'text', text: JSON.stringify(value, null, 2) }],
|
|
94
89
|
});
|
|
95
|
-
const server = new Server({ name: 'clubmed
|
|
90
|
+
const server = new Server({ name: 'clubmed', version: '0.1.5' }, { capabilities: { tools: {} } });
|
|
96
91
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
97
92
|
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
98
93
|
const args = (req.params.arguments ?? {});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAEnG,
|
|
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.1.
|
|
4
|
-
"description": "Demo Club Med
|
|
3
|
+
"version": "0.1.5",
|
|
4
|
+
"description": "Demo Club Med storefront MCP — browse resorts worldwide and book them through agentbank acquiring (ACP).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|