@curless/agentbank-merchant-mcp 0.0.2 → 0.0.3
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.generated.js","sourceRoot":"","sources":["../src/card.generated.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,8EAA8E;AAC9E,gFAAgF;AAChF,MAAM,CAAC,MAAM,kBAAkB,GAAW,MAAM,CAAC,IAAI,CACnD,sphcAAsphc,EACtphc,QAAQ,CACT,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
-
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
import { MERCHANT_CARD_HTML } from './card.generated.js';
|
|
5
6
|
// @curless/agentbank-merchant-mcp — MERCHANT-side stdio MCP for agentbank.
|
|
6
7
|
// Lets a merchant read THEIR OWN orders + balance (the agentbank ledger AND the
|
|
7
8
|
// real Curless wallet) from an MCP client (Claude Desktop), authenticated by a
|
|
@@ -45,6 +46,12 @@ const api = async (path) => {
|
|
|
45
46
|
return (await res.json());
|
|
46
47
|
};
|
|
47
48
|
const mPath = (suffix) => `/v1/merchant/${encodeURIComponent(MERCHANT ?? '')}${suffix}`;
|
|
49
|
+
// MCP Apps card (a ui:// resource). Tools link to it via _meta.ui.resourceUri;
|
|
50
|
+
// a UI-capable host (Claude Desktop) renders it as a widget, others fall back to
|
|
51
|
+
// the text content. Same card the remote /mcp kit uses (built in apps/api/mcp-ui).
|
|
52
|
+
const CARD_URI = 'ui://agentbank-merchant/card-v1.html';
|
|
53
|
+
const CARD_MIME = 'text/html;profile=mcp-app';
|
|
54
|
+
const UI_META = { ui: { resourceUri: CARD_URI }, 'ui/resourceUri': CARD_URI };
|
|
48
55
|
const TOOLS = [
|
|
49
56
|
{
|
|
50
57
|
name: 'list_orders',
|
|
@@ -56,18 +63,36 @@ const TOOLS = [
|
|
|
56
63
|
offset: { type: 'number', description: 'rows to skip' },
|
|
57
64
|
},
|
|
58
65
|
},
|
|
66
|
+
_meta: UI_META,
|
|
59
67
|
},
|
|
60
68
|
{
|
|
61
69
|
name: 'get_balance',
|
|
62
|
-
description: "This merchant's
|
|
70
|
+
description: "This merchant's live Curless wallet balance, per currency.",
|
|
63
71
|
inputSchema: { type: 'object', properties: {} },
|
|
72
|
+
_meta: UI_META,
|
|
64
73
|
},
|
|
65
74
|
];
|
|
66
75
|
const text = (value) => ({
|
|
67
76
|
content: [{ type: 'text', text: JSON.stringify(value, null, 2) }],
|
|
68
77
|
});
|
|
69
|
-
|
|
78
|
+
// Tool result that links the card (structuredContent feeds the widget; the text
|
|
79
|
+
// stays as the universal fallback for non-UI hosts).
|
|
80
|
+
const card = (value, structured) => ({
|
|
81
|
+
content: [{ type: 'text', text: JSON.stringify(value, null, 2) }],
|
|
82
|
+
structuredContent: structured,
|
|
83
|
+
_meta: UI_META,
|
|
84
|
+
});
|
|
85
|
+
const server = new Server({ name: 'agentbank-merchant', version: '0.0.3' }, { capabilities: { tools: {}, resources: {} } });
|
|
70
86
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
87
|
+
// The card resource (MCP Apps): advertise + serve the self-contained HTML.
|
|
88
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
89
|
+
resources: [{ uri: CARD_URI, name: 'Merchant card', mimeType: CARD_MIME }],
|
|
90
|
+
}));
|
|
91
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (req) => {
|
|
92
|
+
if (req.params.uri !== CARD_URI)
|
|
93
|
+
throw new Error(`unknown resource: ${req.params.uri}`);
|
|
94
|
+
return { contents: [{ uri: CARD_URI, mimeType: CARD_MIME, text: MERCHANT_CARD_HTML }] };
|
|
95
|
+
});
|
|
71
96
|
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
72
97
|
const args = (req.params.arguments ?? {});
|
|
73
98
|
try {
|
|
@@ -82,20 +107,30 @@ server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
|
82
107
|
status: o.status,
|
|
83
108
|
items: o.lineItems,
|
|
84
109
|
}));
|
|
85
|
-
return
|
|
110
|
+
return card({ merchant: MERCHANT, count: res.pagination?.count ?? orders.length, orders }, { merchantId: MERCHANT, orders: res.data });
|
|
86
111
|
}
|
|
87
112
|
if (req.params.name === 'get_balance') {
|
|
88
113
|
const b = await api(mPath('/balance'));
|
|
89
114
|
// Show ONLY the Curless wallet (real settled funds), per currency — no
|
|
90
|
-
// agentbank ledger, no channel.
|
|
91
|
-
|
|
115
|
+
// agentbank ledger, no channel. structuredContent carries raw minor units
|
|
116
|
+
// for the card; the text is the formatted fallback.
|
|
117
|
+
const wallet = b.curlessWallet ?? [];
|
|
118
|
+
return card({
|
|
92
119
|
merchant: MERCHANT,
|
|
93
120
|
mode: b.mode,
|
|
94
|
-
curless_wallet:
|
|
121
|
+
curless_wallet: wallet.map((x) => ({
|
|
95
122
|
currency: x.currency,
|
|
96
123
|
available: fmt(x.available, x.currency),
|
|
97
124
|
frozen: fmt(x.frozen, x.currency),
|
|
98
125
|
})),
|
|
126
|
+
}, {
|
|
127
|
+
merchantId: MERCHANT,
|
|
128
|
+
mode: b.mode,
|
|
129
|
+
curlessWallet: wallet.map((x) => ({
|
|
130
|
+
currency: x.currency,
|
|
131
|
+
available: x.available,
|
|
132
|
+
frozen: x.frozen,
|
|
133
|
+
})),
|
|
99
134
|
});
|
|
100
135
|
}
|
|
101
136
|
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":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@curless/agentbank-merchant-mcp",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Merchant-side MCP server for agentbank — read your orders + balance (agentbank ledger and live Curless wallet) from Claude, authenticated by a merchant token via env (no OAuth).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|