kaleido-mcp 0.1.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/LICENSE +17 -0
- package/README.md +55 -0
- package/dist/clients/market-client.d.ts +33 -0
- package/dist/clients/market-client.js +72 -0
- package/dist/clients/market-client.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/mpp-client.d.ts +80 -0
- package/dist/mpp-client.js +186 -0
- package/dist/mpp-client.js.map +1 -0
- package/dist/server.d.ts +58 -0
- package/dist/server.js +106 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/kaleidoswap-tools.d.ts +3 -0
- package/dist/tools/kaleidoswap-tools.js +263 -0
- package/dist/tools/kaleidoswap-tools.js.map +1 -0
- package/dist/tools/market-tools.d.ts +2 -0
- package/dist/tools/market-tools.js +49 -0
- package/dist/tools/market-tools.js.map +1 -0
- package/dist/tools/mpp-tools.d.ts +2 -0
- package/dist/tools/mpp-tools.js +133 -0
- package/dist/tools/mpp-tools.js.map +1 -0
- package/dist/tools/rln-tools.d.ts +3 -0
- package/dist/tools/rln-tools.js +245 -0
- package/dist/tools/rln-tools.js.map +1 -0
- package/dist/tools/spark-tools.d.ts +2 -0
- package/dist/tools/spark-tools.js +218 -0
- package/dist/tools/spark-tools.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spark L2 wallet tools — Lightning pay/receive, fee-free transfers, BTC bridge.
|
|
3
|
+
* These extend the WDK built-in WALLET_TOOLS (which handle generic wallet access)
|
|
4
|
+
* with the canonical `spark_*` contract exposed by `wdk-wallet-spark-mcp`.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
export function registerSparkTools(server, usdtToken) {
|
|
8
|
+
const getAccount = async () => {
|
|
9
|
+
const wdk = server.wdk;
|
|
10
|
+
if (!wdk)
|
|
11
|
+
throw new Error('WDK not initialized — call useWdk() first');
|
|
12
|
+
return wdk.getAccount('spark', 0);
|
|
13
|
+
};
|
|
14
|
+
// -----------------------------------------------------------------------
|
|
15
|
+
server.tool('spark_get_balance', 'Get the Spark L2 wallet balance in satoshis. Spark transactions are fee-free. Use this to check available BTC on Spark before making payments or swaps via Lightning.', {}, async () => {
|
|
16
|
+
const account = await getAccount();
|
|
17
|
+
const balanceSats = await account.getBalance();
|
|
18
|
+
return t(JSON.stringify({
|
|
19
|
+
balance_sats: Number(balanceSats),
|
|
20
|
+
balance_btc: Number(balanceSats) / 1e8,
|
|
21
|
+
note: 'Spark L2 balance — fee-free transfers on Spark network',
|
|
22
|
+
}, null, 2));
|
|
23
|
+
});
|
|
24
|
+
// -----------------------------------------------------------------------
|
|
25
|
+
server.tool('spark_get_address', 'Get the Spark L2 address for this wallet. Use this to receive sats or tokens directly on Spark from another Spark wallet (fee-free).', {}, async () => {
|
|
26
|
+
const account = await getAccount();
|
|
27
|
+
const address = await account.getAddress();
|
|
28
|
+
return t(JSON.stringify({ spark_address: address }, null, 2));
|
|
29
|
+
});
|
|
30
|
+
// -----------------------------------------------------------------------
|
|
31
|
+
server.tool('spark_get_token_balance', 'Get the balance of a Spark token (e.g. USDT) by its token identifier. Returns balance as a bigint string. Use SPARK_USDT_TOKEN env var or pass the token address directly.', {
|
|
32
|
+
token: z
|
|
33
|
+
.string()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Spark token identifier (e.g. btkn1...). Omit to use the configured USDT token.'),
|
|
36
|
+
}, async ({ token }) => {
|
|
37
|
+
const tokenAddr = token ?? usdtToken;
|
|
38
|
+
if (!tokenAddr) {
|
|
39
|
+
return t(JSON.stringify({
|
|
40
|
+
error: 'No token provided. Pass a token identifier or set SPARK_USDT_TOKEN env var.',
|
|
41
|
+
}, null, 2));
|
|
42
|
+
}
|
|
43
|
+
const account = await getAccount();
|
|
44
|
+
const balance = await account.getTokenBalance(tokenAddr);
|
|
45
|
+
return t(JSON.stringify({ token: tokenAddr, balance: balance.toString() }, null, 2));
|
|
46
|
+
});
|
|
47
|
+
// -----------------------------------------------------------------------
|
|
48
|
+
server.tool('spark_get_deposit_address', 'Generate a Bitcoin L1 address to bridge BTC into the Spark L2 wallet. Funds sent on-chain are bridged to Spark automatically.', { reusable: z.boolean().optional().describe('Return a static reusable address (default: false = single-use)') }, async ({ reusable = false }) => {
|
|
49
|
+
const account = await getAccount();
|
|
50
|
+
const address = reusable
|
|
51
|
+
? await account.getStaticDepositAddress()
|
|
52
|
+
: await account.getSingleUseDepositAddress();
|
|
53
|
+
return t(JSON.stringify({
|
|
54
|
+
btc_l1_deposit_address: address,
|
|
55
|
+
type: reusable ? 'static_reusable' : 'single_use',
|
|
56
|
+
note: 'Send BTC on-chain to this address — it bridges to your Spark L2 wallet',
|
|
57
|
+
}, null, 2));
|
|
58
|
+
});
|
|
59
|
+
// -----------------------------------------------------------------------
|
|
60
|
+
server.tool('spark_create_lightning_invoice', 'Create a BOLT11 Lightning invoice to receive BTC into the Spark L2 wallet via Lightning Network. BTC received lands in Spark balance instantly. Use this to receive KaleidoSwap BTC payouts directly into Spark.', {
|
|
61
|
+
amount_sats: z.number().int().positive().optional().describe('Amount in satoshis to receive. Omit for any-amount invoice.'),
|
|
62
|
+
memo: z.string().optional().describe('Invoice description'),
|
|
63
|
+
}, async ({ amount_sats, memo }) => {
|
|
64
|
+
const account = await getAccount();
|
|
65
|
+
const req = await account.createLightningInvoice({
|
|
66
|
+
...(amount_sats !== undefined ? { amountSats: amount_sats } : {}),
|
|
67
|
+
...(memo ? { memo } : {}),
|
|
68
|
+
});
|
|
69
|
+
const encodedInvoice = req?.invoice?.encodedInvoice ?? req?.invoice ?? null;
|
|
70
|
+
return t(JSON.stringify({
|
|
71
|
+
invoice: encodedInvoice,
|
|
72
|
+
id: req.id,
|
|
73
|
+
amount_sats: req.amountSats ?? amount_sats ?? null,
|
|
74
|
+
memo: memo ?? null,
|
|
75
|
+
note: 'Pay this BOLT11 from any Lightning wallet to receive into Spark L2',
|
|
76
|
+
}, null, 2));
|
|
77
|
+
});
|
|
78
|
+
// -----------------------------------------------------------------------
|
|
79
|
+
server.tool('spark_pay_lightning_invoice', 'Pay a BOLT11 Lightning invoice from the Spark L2 wallet. Use this to pay KaleidoSwap deposit invoices when RLN channels are low or unavailable. No Lightning channels needed on the Spark side.', {
|
|
80
|
+
invoice: z.string().describe('BOLT11 invoice (lnbc... or lntb...)'),
|
|
81
|
+
max_fee_sats: z.number().int().positive().optional().describe('Maximum fee in satoshis'),
|
|
82
|
+
}, async ({ invoice, max_fee_sats }) => {
|
|
83
|
+
const account = await getAccount();
|
|
84
|
+
const req = await account.payLightningInvoice({
|
|
85
|
+
encodedInvoice: invoice,
|
|
86
|
+
...(max_fee_sats !== undefined ? { maxFeeSats: max_fee_sats } : {}),
|
|
87
|
+
});
|
|
88
|
+
return t(JSON.stringify({
|
|
89
|
+
id: req.id,
|
|
90
|
+
invoice: req.invoice,
|
|
91
|
+
status: req.status,
|
|
92
|
+
max_fee_sats: req.maxFeeSats ?? null,
|
|
93
|
+
note: 'Lightning payment initiated from Spark L2',
|
|
94
|
+
}, null, 2));
|
|
95
|
+
});
|
|
96
|
+
// -----------------------------------------------------------------------
|
|
97
|
+
server.tool('spark_quote_lightning_payment', 'Estimate the Lightning routing fee for paying a BOLT11 invoice from Spark.', { invoice: z.string().describe('BOLT11 invoice to quote') }, async ({ invoice }) => {
|
|
98
|
+
const account = await getAccount();
|
|
99
|
+
const fee = await account.quotePayLightningInvoice({ encodedInvoice: invoice });
|
|
100
|
+
return t(JSON.stringify({ estimated_fee_sats: Number(fee), invoice }, null, 2));
|
|
101
|
+
});
|
|
102
|
+
// -----------------------------------------------------------------------
|
|
103
|
+
server.tool('spark_send_sats', 'Send satoshis to another Spark L2 address. Spark transfers are completely fee-free. Use this for direct Spark-to-Spark sats movement.', {
|
|
104
|
+
to: z.string().describe('Destination Spark address (spark1...)'),
|
|
105
|
+
amount_sats: z.number().int().positive().describe('Amount in satoshis to send'),
|
|
106
|
+
}, async ({ to, amount_sats }) => {
|
|
107
|
+
const account = await getAccount();
|
|
108
|
+
const result = await account.sendTransaction({ to, value: amount_sats });
|
|
109
|
+
return t(JSON.stringify({
|
|
110
|
+
hash: result.hash,
|
|
111
|
+
fee_sats: Number(result.fee),
|
|
112
|
+
sent_sats: amount_sats,
|
|
113
|
+
to,
|
|
114
|
+
note: 'Spark L2 transfer — fee-free',
|
|
115
|
+
}, null, 2));
|
|
116
|
+
});
|
|
117
|
+
// -----------------------------------------------------------------------
|
|
118
|
+
server.tool('spark_transfer_token', 'Transfer a Spark token (e.g. USDT) to another Spark address. Fee-free. Use this to send USDT on Spark L2 without transaction fees.', {
|
|
119
|
+
to: z.string().describe('Destination Spark address (spark1...)'),
|
|
120
|
+
amount: z
|
|
121
|
+
.string()
|
|
122
|
+
.describe('Amount to send as a string integer in base units, e.g. "1000000" for 1 USDT with 6 decimals'),
|
|
123
|
+
token: z
|
|
124
|
+
.string()
|
|
125
|
+
.optional()
|
|
126
|
+
.describe('Spark token identifier. Omit to use the configured USDT token (SPARK_USDT_TOKEN).'),
|
|
127
|
+
}, async ({ to, amount, token }) => {
|
|
128
|
+
const tokenAddr = token ?? usdtToken;
|
|
129
|
+
if (!tokenAddr) {
|
|
130
|
+
return t(JSON.stringify({
|
|
131
|
+
error: 'No token provided. Pass token or set SPARK_USDT_TOKEN env var.',
|
|
132
|
+
}, null, 2));
|
|
133
|
+
}
|
|
134
|
+
const account = await getAccount();
|
|
135
|
+
const result = await account.transfer({
|
|
136
|
+
token: tokenAddr,
|
|
137
|
+
amount: BigInt(amount),
|
|
138
|
+
recipient: to,
|
|
139
|
+
});
|
|
140
|
+
return t(JSON.stringify({
|
|
141
|
+
hash: result.hash,
|
|
142
|
+
fee: result.fee.toString(),
|
|
143
|
+
token: tokenAddr,
|
|
144
|
+
amount,
|
|
145
|
+
to,
|
|
146
|
+
note: 'Spark token transfer — fee-free',
|
|
147
|
+
}, null, 2));
|
|
148
|
+
});
|
|
149
|
+
// -----------------------------------------------------------------------
|
|
150
|
+
server.tool('spark_quote_withdraw', 'Get a fee quote for withdrawing BTC from Spark L2 back to Bitcoin L1 (cooperative exit). Call before spark_withdraw.', {
|
|
151
|
+
onchain_address: z.string().describe('Destination Bitcoin L1 address'),
|
|
152
|
+
amount_sats: z.number().int().positive().describe('Amount in satoshis to withdraw'),
|
|
153
|
+
}, async ({ onchain_address, amount_sats }) => {
|
|
154
|
+
const account = await getAccount();
|
|
155
|
+
const quote = await account.quoteWithdraw({
|
|
156
|
+
withdrawalAddress: onchain_address,
|
|
157
|
+
amountSats: amount_sats,
|
|
158
|
+
});
|
|
159
|
+
return t(JSON.stringify({ ...quote, onchain_address, amount_sats }, null, 2));
|
|
160
|
+
});
|
|
161
|
+
// -----------------------------------------------------------------------
|
|
162
|
+
server.tool('spark_withdraw', 'Withdraw BTC from Spark L2 to a Bitcoin L1 address (cooperative exit). Use spark_quote_withdraw first to check fees. exitSpeed: FAST | MEDIUM | SLOW', {
|
|
163
|
+
onchain_address: z.string().describe('Destination Bitcoin L1 address'),
|
|
164
|
+
amount_sats: z.number().int().positive().optional().describe('Amount in satoshis (omit to withdraw all)'),
|
|
165
|
+
exit_speed: z.enum(['FAST', 'MEDIUM', 'SLOW']).optional().describe('Exit speed (default: MEDIUM)'),
|
|
166
|
+
}, async ({ onchain_address, amount_sats, exit_speed = 'MEDIUM', }) => {
|
|
167
|
+
const account = await getAccount();
|
|
168
|
+
const result = await account.withdraw({
|
|
169
|
+
onchainAddress: onchain_address,
|
|
170
|
+
exitSpeed: exit_speed,
|
|
171
|
+
...(amount_sats !== undefined ? { amountSats: amount_sats } : {}),
|
|
172
|
+
});
|
|
173
|
+
return t(JSON.stringify({
|
|
174
|
+
...result,
|
|
175
|
+
amount_sats: amount_sats ?? null,
|
|
176
|
+
onchain_address,
|
|
177
|
+
note: 'Cooperative exit to Bitcoin L1 initiated',
|
|
178
|
+
}, null, 2));
|
|
179
|
+
});
|
|
180
|
+
// -----------------------------------------------------------------------
|
|
181
|
+
server.tool('spark_get_transfers', 'List recent Spark L2 transfer history (Lightning payments, token transfers, BTC bridge events).', {
|
|
182
|
+
direction: z.enum(['all', 'incoming', 'outgoing']).optional().describe("Direction filter (default: 'all')"),
|
|
183
|
+
limit: z.number().int().positive().optional().describe('Max results (default: 20)'),
|
|
184
|
+
}, async ({ direction = 'all', limit = 20 }) => {
|
|
185
|
+
const account = await getAccount();
|
|
186
|
+
const transfers = await account.getTransfers({ direction, limit, skip: 0 });
|
|
187
|
+
return t(JSON.stringify({ count: transfers.length, transfers }, null, 2));
|
|
188
|
+
});
|
|
189
|
+
// -----------------------------------------------------------------------
|
|
190
|
+
server.tool('spark_mpp_pay', 'Pay an MPP (Machine Payments Protocol) Lightning challenge from the Spark wallet. Use to access 402index.io or other payment-gated APIs when RLN has low outbound liquidity.', {
|
|
191
|
+
invoice: z.string().describe('BOLT11 invoice from mpp_request_challenge'),
|
|
192
|
+
challenge_id: z.string().optional().describe('MPP challenge_id'),
|
|
193
|
+
macaroon: z.string().optional().describe('Macaroon for L402-compatible servers'),
|
|
194
|
+
max_fee_sats: z.number().int().positive().optional(),
|
|
195
|
+
}, async ({ invoice, challenge_id, macaroon, max_fee_sats, }) => {
|
|
196
|
+
const account = await getAccount();
|
|
197
|
+
const req = await account.payLightningInvoice({
|
|
198
|
+
encodedInvoice: invoice,
|
|
199
|
+
...(max_fee_sats !== undefined ? { maxFeeSats: max_fee_sats } : {}),
|
|
200
|
+
});
|
|
201
|
+
const cred = { method: 'lightning' };
|
|
202
|
+
if (challenge_id)
|
|
203
|
+
cred.challenge_id = challenge_id;
|
|
204
|
+
if (req?.id)
|
|
205
|
+
cred.payment_id = req.id;
|
|
206
|
+
if (macaroon)
|
|
207
|
+
cred.macaroon = macaroon;
|
|
208
|
+
return t(JSON.stringify({
|
|
209
|
+
paid: true,
|
|
210
|
+
payment_id: req?.id,
|
|
211
|
+
status: req?.status,
|
|
212
|
+
credential: JSON.stringify(cred),
|
|
213
|
+
note: 'Credential ready — pass to mpp_submit_credential',
|
|
214
|
+
}, null, 2));
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
const t = (content) => ({ content: [{ type: 'text', text: content }] });
|
|
218
|
+
//# sourceMappingURL=spark-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spark-tools.js","sourceRoot":"","sources":["../../src/tools/spark-tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "kaleido-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Unified MCP server for KaleidoSwap — WDK Spark wallet, RLN node, KaleidoSwap DEX, MPP/L402 payments, and 402index discovery in a single server",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/kaleidoswap/kaleido-mcp"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/kaleidoswap/kaleido-mcp#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/kaleidoswap/kaleido-mcp/issues"
|
|
14
|
+
},
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"default": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./mpp-client": {
|
|
22
|
+
"import": "./dist/mpp-client.js",
|
|
23
|
+
"types": "./dist/mpp-client.d.ts",
|
|
24
|
+
"default": "./dist/mpp-client.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"bin": "dist/index.js",
|
|
28
|
+
"files": ["dist/", "README.md"],
|
|
29
|
+
"publishConfig": { "access": "public" },
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"dev": "tsx src/index.ts",
|
|
33
|
+
"start": "node dist/index.js",
|
|
34
|
+
"test:contract": "node --test tests/*.test.mjs",
|
|
35
|
+
"test": "npm run test:contract"
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@modelcontextprotocol/sdk": "^1.10.1",
|
|
39
|
+
"@tetherto/wdk": "^1.0.0-beta.5",
|
|
40
|
+
"@tetherto/wdk-mcp-toolkit": "github:tetherto/wdk-mcp-toolkit",
|
|
41
|
+
"@tetherto/wdk-wallet-spark": "^1.0.0-beta.11",
|
|
42
|
+
"kaleido-sdk": "0.1.0",
|
|
43
|
+
"zod": "^3.24.2"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/node": "^22.13.14",
|
|
47
|
+
"tsx": "^4.19.3",
|
|
48
|
+
"typescript": "^5.8.2"
|
|
49
|
+
},
|
|
50
|
+
"engines": { "node": ">=20" }
|
|
51
|
+
}
|