@curless/agentbank-merchant-mcp 0.0.1
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 +41 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
package/README.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# @curless/agentbank-merchant-mcp
|
|
2
|
+
|
|
3
|
+
Merchant-side MCP server for [agentbank](https://gitlab.com/robin-ruan/agentbank).
|
|
4
|
+
Lets a merchant read **their own orders and balance** from an MCP client (Claude
|
|
5
|
+
Desktop) — the agentbank ledger (pending/payable/settled) **and the live Curless
|
|
6
|
+
wallet** (real funds settled into the merchant's Curless account).
|
|
7
|
+
|
|
8
|
+
Authenticated by a **merchant token via env — no OAuth.** (The OAuth route is the
|
|
9
|
+
remote `/mcp` connector added by URL in claude.ai; this is the simple token-based
|
|
10
|
+
path for Claude Desktop / stdio clients.) Kept separate from the buyer's
|
|
11
|
+
`@curless/agentbank-mcp` so the two personas don't share a tool surface.
|
|
12
|
+
|
|
13
|
+
## Tools
|
|
14
|
+
|
|
15
|
+
- **`list_orders`** — this merchant's orders (what agents have paid), newest first.
|
|
16
|
+
- **`get_balance`** — balance per currency: the agentbank ledger **and** the live
|
|
17
|
+
Curless wallet.
|
|
18
|
+
|
|
19
|
+
## Use (Claude Desktop `claude_desktop_config.json`)
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"mcpServers": {
|
|
24
|
+
"agentbank-merchant": {
|
|
25
|
+
"command": "/usr/local/bin/npx",
|
|
26
|
+
"args": ["-y", "@curless/agentbank-merchant-mcp"],
|
|
27
|
+
"env": {
|
|
28
|
+
"AGENTBANK_API_URL": "https://mcp.curless.ai",
|
|
29
|
+
"AGENTBANK_MERCHANT_TOKEN": "agb_test_…",
|
|
30
|
+
"AGENTBANK_MERCHANT_ID": "curless_mch_clubmed_eu"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
| env | what |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| `AGENTBANK_API_URL` | agentbank base URL (default `http://localhost:3000`) |
|
|
40
|
+
| `AGENTBANK_MERCHANT_TOKEN` | a merchant key (`agb_…`) with `merchant:read` |
|
|
41
|
+
| `AGENTBANK_MERCHANT_ID` | your merchant id, e.g. `curless_mch_clubmed_eu` |
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
// @curless/agentbank-merchant-mcp — MERCHANT-side stdio MCP for agentbank.
|
|
6
|
+
// Lets a merchant read THEIR OWN orders + balance (the agentbank ledger AND the
|
|
7
|
+
// real Curless wallet) from an MCP client (Claude Desktop), authenticated by a
|
|
8
|
+
// merchant token passed via env — NO OAuth. (The OAuth route is the remote
|
|
9
|
+
// /mcp connector; this is the simple token-based path.) Kept separate from the
|
|
10
|
+
// buyer's @curless/agentbank-mcp so the two personas don't share a tool surface.
|
|
11
|
+
//
|
|
12
|
+
// Run (Claude Desktop / any MCP client):
|
|
13
|
+
// npx -y @curless/agentbank-merchant-mcp
|
|
14
|
+
// with env:
|
|
15
|
+
// AGENTBANK_API_URL (default http://localhost:3000; e.g. https://mcp.curless.ai)
|
|
16
|
+
// AGENTBANK_MERCHANT_TOKEN an agentbank merchant key (agb_...) with merchant:read
|
|
17
|
+
// AGENTBANK_MERCHANT_ID the merchant id, e.g. curless_mch_clubmed_eu
|
|
18
|
+
//
|
|
19
|
+
// IMPORTANT: only JSON-RPC may be written to stdout (the MCP stdio transport).
|
|
20
|
+
// Never console.log here — diagnostics go to stderr.
|
|
21
|
+
const API_BASE = process.env.AGENTBANK_API_URL ?? 'http://localhost:3000';
|
|
22
|
+
const TOKEN = process.env.AGENTBANK_MERCHANT_TOKEN;
|
|
23
|
+
const MERCHANT = process.env.AGENTBANK_MERCHANT_ID;
|
|
24
|
+
// Minor-unit integer → human decimal string, per currency.
|
|
25
|
+
const DECIMALS = { USD: 2, EUR: 2, USDC: 6, USDT: 6, EURC: 6 };
|
|
26
|
+
const fmt = (minor, currency) => {
|
|
27
|
+
const d = DECIMALS[currency] ?? 2;
|
|
28
|
+
const neg = minor < 0;
|
|
29
|
+
const s = String(Math.abs(minor)).padStart(d + 1, '0');
|
|
30
|
+
const whole = s.slice(0, s.length - d);
|
|
31
|
+
const frac = d > 0 ? `.${s.slice(s.length - d)}` : '';
|
|
32
|
+
return `${neg ? '-' : ''}${whole}${frac} ${currency}`;
|
|
33
|
+
};
|
|
34
|
+
const api = async (path) => {
|
|
35
|
+
if (!TOKEN)
|
|
36
|
+
throw new Error('set AGENTBANK_MERCHANT_TOKEN (a merchant:read agentbank key)');
|
|
37
|
+
if (!MERCHANT)
|
|
38
|
+
throw new Error('set AGENTBANK_MERCHANT_ID (e.g. curless_mch_clubmed_eu)');
|
|
39
|
+
const res = await fetch(`${API_BASE}${path}`, {
|
|
40
|
+
headers: { 'content-type': 'application/json', authorization: `Bearer ${TOKEN}` },
|
|
41
|
+
});
|
|
42
|
+
if (!res.ok) {
|
|
43
|
+
throw new Error(`agentbank ${path} -> ${res.status}: ${await res.text().catch(() => '')}`);
|
|
44
|
+
}
|
|
45
|
+
return (await res.json());
|
|
46
|
+
};
|
|
47
|
+
const mPath = (suffix) => `/v1/merchant/${encodeURIComponent(MERCHANT ?? '')}${suffix}`;
|
|
48
|
+
const TOOLS = [
|
|
49
|
+
{
|
|
50
|
+
name: 'list_orders',
|
|
51
|
+
description: "List this merchant's orders (what agents have paid you), newest first. Optional limit/offset.",
|
|
52
|
+
inputSchema: {
|
|
53
|
+
type: 'object',
|
|
54
|
+
properties: {
|
|
55
|
+
limit: { type: 'number', description: 'max rows (default 50, cap 200)' },
|
|
56
|
+
offset: { type: 'number', description: 'rows to skip' },
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
name: 'get_balance',
|
|
62
|
+
description: "This merchant's balance per currency: the agentbank ledger (pending / payable / settled) AND the live Curless wallet (real funds settled into your Curless account).",
|
|
63
|
+
inputSchema: { type: 'object', properties: {} },
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
const text = (value) => ({
|
|
67
|
+
content: [{ type: 'text', text: JSON.stringify(value, null, 2) }],
|
|
68
|
+
});
|
|
69
|
+
const server = new Server({ name: 'agentbank-merchant', version: '0.0.1' }, { capabilities: { tools: {} } });
|
|
70
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
71
|
+
server.setRequestHandler(CallToolRequestSchema, async (req) => {
|
|
72
|
+
const args = (req.params.arguments ?? {});
|
|
73
|
+
try {
|
|
74
|
+
if (req.params.name === 'list_orders') {
|
|
75
|
+
const limit = Math.min(Number(args.limit) || 50, 200);
|
|
76
|
+
const offset = Math.max(Number(args.offset) || 0, 0);
|
|
77
|
+
const res = await api(mPath(`/orders?limit=${limit}&offset=${offset}`));
|
|
78
|
+
const orders = res.data.map((o) => ({
|
|
79
|
+
id: o.id,
|
|
80
|
+
date: o.createdAt,
|
|
81
|
+
amount: fmt(o.amount, o.currency),
|
|
82
|
+
status: o.status,
|
|
83
|
+
items: o.lineItems,
|
|
84
|
+
}));
|
|
85
|
+
return text({ merchant: MERCHANT, count: res.pagination?.count ?? orders.length, orders });
|
|
86
|
+
}
|
|
87
|
+
if (req.params.name === 'get_balance') {
|
|
88
|
+
const b = await api(mPath('/balance'));
|
|
89
|
+
return text({
|
|
90
|
+
merchant: MERCHANT,
|
|
91
|
+
mode: b.mode,
|
|
92
|
+
agentbank_ledger: b.balances.map((x) => ({
|
|
93
|
+
currency: x.currency,
|
|
94
|
+
pending: fmt(x.pending, x.currency),
|
|
95
|
+
payable: fmt(x.payable, x.currency),
|
|
96
|
+
settled: fmt(x.settled, x.currency),
|
|
97
|
+
})),
|
|
98
|
+
curless_wallet: b.curlessWallet
|
|
99
|
+
? b.curlessWallet.map((x) => ({
|
|
100
|
+
currency: x.currency,
|
|
101
|
+
available: fmt(x.available, x.currency),
|
|
102
|
+
frozen: fmt(x.frozen, x.currency),
|
|
103
|
+
channel: x.channel,
|
|
104
|
+
}))
|
|
105
|
+
: null,
|
|
106
|
+
note: 'ledger = funds agentbank is settling to you (pending → payable → settled); curless_wallet = real money already in your Curless account',
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return { content: [{ type: 'text', text: `unknown tool: ${req.params.name}` }], isError: true };
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
return { content: [{ type: 'text', text: `Error: ${err.message}` }], isError: true };
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
await server.connect(new StdioServerTransport());
|
|
116
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@curless/agentbank-merchant-mcp",
|
|
3
|
+
"version": "0.0.1",
|
|
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
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"agentbank-merchant-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@modelcontextprotocol/sdk": "^1.0.4"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/node": "^22.10.1",
|
|
21
|
+
"tsx": "^4.19.2",
|
|
22
|
+
"typescript": "^5.6.3"
|
|
23
|
+
},
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": ">=18"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"mcp",
|
|
29
|
+
"agentbank",
|
|
30
|
+
"merchant",
|
|
31
|
+
"claude",
|
|
32
|
+
"curless"
|
|
33
|
+
],
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://gitlab.com/robin-ruan/agentbank.git",
|
|
37
|
+
"directory": "packages/agentbank-merchant-mcp"
|
|
38
|
+
},
|
|
39
|
+
"author": "robin",
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc",
|
|
42
|
+
"dev": "tsx src/index.ts",
|
|
43
|
+
"start": "node dist/index.js",
|
|
44
|
+
"typecheck": "tsc --noEmit",
|
|
45
|
+
"clean": "rm -rf dist"
|
|
46
|
+
}
|
|
47
|
+
}
|