@aibtc/mcp-server 1.71.0 → 1.72.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 +36 -3
- package/dist/bridge/index.js +2 -2
- package/dist/config/networks.js +4 -1
- package/dist/index.js +118 -42
- package/dist/tools/arxiv-research.tools.d.ts +1 -1
- package/dist/tools/arxiv-research.tools.js +6 -6
- package/dist/tools/at-stake-legion.tools.d.ts +1 -1
- package/dist/tools/at-stake-legion.tools.js +14 -14
- package/dist/tools/at-stake.tools.d.ts +1 -1
- package/dist/tools/at-stake.tools.js +17 -17
- package/dist/tools/bitcoin.tools.d.ts +1 -1
- package/dist/tools/bitcoin.tools.js +12 -12
- package/dist/tools/bitflow.tools.d.ts +1 -1
- package/dist/tools/bitflow.tools.js +21 -21
- package/dist/tools/bns.tools.d.ts +1 -1
- package/dist/tools/bns.tools.js +18 -18
- package/dist/tools/bounty-hint.d.ts +1 -1
- package/dist/tools/bounty-scanner.tools.d.ts +1 -1
- package/dist/tools/bounty-scanner.tools.js +20 -20
- package/dist/tools/child-inscription.tools.d.ts +1 -1
- package/dist/tools/child-inscription.tools.js +6 -6
- package/dist/tools/competition.tools.d.ts +1 -1
- package/dist/tools/competition.tools.js +4 -4
- package/dist/tools/contract.tools.d.ts +1 -1
- package/dist/tools/contract.tools.js +8 -8
- package/dist/tools/credentials.tools.d.ts +1 -1
- package/dist/tools/credentials.tools.js +8 -8
- package/dist/tools/defi.tools.d.ts +1 -1
- package/dist/tools/defi.tools.js +21 -21
- package/dist/tools/dual-stacking.tools.d.ts +1 -1
- package/dist/tools/dual-stacking.tools.js +7 -7
- package/dist/tools/earning.tools.d.ts +1 -1
- package/dist/tools/earning.tools.js +2 -2
- package/dist/tools/endpoint.tools.d.ts +1 -1
- package/dist/tools/endpoint.tools.js +14 -13
- package/dist/tools/identity.tools.d.ts +1 -1
- package/dist/tools/identity.tools.js +19 -19
- package/dist/tools/inbox-x402.tools.d.ts +1 -1
- package/dist/tools/inbox-x402.tools.js +2 -2
- package/dist/tools/inbox.tools.d.ts +1 -1
- package/dist/tools/inbox.tools.js +2 -2
- package/dist/tools/index.d.ts +6 -3
- package/dist/tools/index.js +69 -58
- package/dist/tools/inference-marketplace.tools.d.ts +1 -1
- package/dist/tools/inference-marketplace.tools.js +10 -10
- package/dist/tools/jingswap.tools.d.ts +1 -1
- package/dist/tools/jingswap.tools.js +30 -30
- package/dist/tools/legion.tools.d.ts +1 -1
- package/dist/tools/legion.tools.js +20 -20
- package/dist/tools/lightning.tools.d.ts +1 -1
- package/dist/tools/lightning.tools.js +14 -14
- package/dist/tools/mempool.tools.d.ts +1 -1
- package/dist/tools/mempool.tools.js +5 -5
- package/dist/tools/news.tools.d.ts +1 -1
- package/dist/tools/news.tools.js +2 -1
- package/dist/tools/nft.tools.d.ts +1 -1
- package/dist/tools/nft.tools.js +12 -12
- package/dist/tools/nonce.tools.d.ts +1 -1
- package/dist/tools/nonce.tools.js +8 -8
- package/dist/tools/nostr.tools.d.ts +1 -1
- package/dist/tools/nostr.tools.js +12 -12
- package/dist/tools/openrouter.tools.d.ts +1 -1
- package/dist/tools/openrouter.tools.js +4 -4
- package/dist/tools/ordinals-marketplace.tools.d.ts +1 -1
- package/dist/tools/ordinals-marketplace.tools.js +10 -10
- package/dist/tools/ordinals-p2p.tools.d.ts +1 -1
- package/dist/tools/ordinals-p2p.tools.js +18 -18
- package/dist/tools/ordinals.tools.d.ts +1 -1
- package/dist/tools/ordinals.tools.js +8 -8
- package/dist/tools/pillar-direct.tools.d.ts +1 -1
- package/dist/tools/pillar-direct.tools.js +36 -36
- package/dist/tools/pillar.tools.d.ts +1 -1
- package/dist/tools/pillar.tools.js +28 -26
- package/dist/tools/profiles.d.ts +51 -0
- package/dist/tools/profiles.js +111 -0
- package/dist/tools/psbt.tools.d.ts +1 -1
- package/dist/tools/psbt.tools.js +8 -8
- package/dist/tools/query.tools.d.ts +1 -1
- package/dist/tools/query.tools.js +12 -12
- package/dist/tools/relay-diagnostic.tools.d.ts +1 -1
- package/dist/tools/relay-diagnostic.tools.js +3 -3
- package/dist/tools/reputation.tools.d.ts +1 -1
- package/dist/tools/reputation.tools.js +22 -22
- package/dist/tools/runes.tools.d.ts +1 -1
- package/dist/tools/runes.tools.js +18 -18
- package/dist/tools/sbtc.tools.d.ts +1 -1
- package/dist/tools/sbtc.tools.js +12 -12
- package/dist/tools/scaffold.tools.d.ts +1 -1
- package/dist/tools/scaffold.tools.js +4 -4
- package/dist/tools/settings.tools.d.ts +1 -1
- package/dist/tools/settings.tools.js +9 -9
- package/dist/tools/signing.tools.d.ts +1 -1
- package/dist/tools/signing.tools.js +20 -20
- package/dist/tools/souldinals.tools.d.ts +1 -1
- package/dist/tools/souldinals.tools.js +10 -10
- package/dist/tools/stacking-lottery.tools.d.ts +1 -1
- package/dist/tools/stacking-lottery.tools.js +11 -11
- package/dist/tools/stacking.tools.d.ts +1 -1
- package/dist/tools/stacking.tools.js +13 -13
- package/dist/tools/stacks-market.tools.d.ts +1 -1
- package/dist/tools/stacks-market.tools.js +22 -22
- package/dist/tools/styx.tools.d.ts +1 -1
- package/dist/tools/styx.tools.js +11 -11
- package/dist/tools/taproot-multisig.tools.d.ts +1 -1
- package/dist/tools/taproot-multisig.tools.js +5 -5
- package/dist/tools/tenero.tools.d.ts +1 -1
- package/dist/tools/tenero.tools.js +22 -22
- package/dist/tools/tokens.tools.d.ts +1 -1
- package/dist/tools/tokens.tools.js +10 -10
- package/dist/tools/transfer.tools.d.ts +1 -1
- package/dist/tools/transfer.tools.js +4 -4
- package/dist/tools/wallet-management.tools.d.ts +1 -1
- package/dist/tools/wallet-management.tools.js +16 -16
- package/dist/tools/wallet.tools.d.ts +1 -1
- package/dist/tools/wallet.tools.js +2 -2
- package/dist/tools/yield-dashboard.tools.d.ts +1 -1
- package/dist/tools/yield-dashboard.tools.js +5 -5
- package/dist/tools/yield-hunter.tools.d.ts +1 -1
- package/dist/tools/yield-hunter.tools.js +6 -6
- package/dist/utils/fee.js +1 -1
- package/package.json +4 -3
- package/skill/SKILL.md +1 -1
|
@@ -60,9 +60,9 @@ export function registerJingswapTools(server) {
|
|
|
60
60
|
description: "Get the current Jingswap auction cycle state including phase (deposit/buffer/settle), " +
|
|
61
61
|
"blocks elapsed, cycle totals (token B + sBTC deposited), and minimum deposit requirements. " +
|
|
62
62
|
"Use this to understand where the auction currently stands.",
|
|
63
|
-
inputSchema: {
|
|
63
|
+
inputSchema: z.object({
|
|
64
64
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
65
|
-
},
|
|
65
|
+
}),
|
|
66
66
|
}, async ({ market }) => {
|
|
67
67
|
try {
|
|
68
68
|
const m = getMarket(market);
|
|
@@ -88,10 +88,10 @@ export function registerJingswapTools(server) {
|
|
|
88
88
|
server.registerTool("jingswap_get_depositors", {
|
|
89
89
|
description: "Get the list of token B and sBTC depositors for a specific auction cycle. " +
|
|
90
90
|
"Returns arrays of Stacks addresses on each side. Max 50 depositors per side.",
|
|
91
|
-
inputSchema: {
|
|
91
|
+
inputSchema: z.object({
|
|
92
92
|
cycle: z.number().describe("Cycle number to query"),
|
|
93
93
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
94
|
-
},
|
|
94
|
+
}),
|
|
95
95
|
}, async ({ cycle, market }) => {
|
|
96
96
|
try {
|
|
97
97
|
const m = getMarket(market);
|
|
@@ -105,11 +105,11 @@ export function registerJingswapTools(server) {
|
|
|
105
105
|
// ── User Deposit ─────────────────────────────────────────────
|
|
106
106
|
server.registerTool("jingswap_get_user_deposit", {
|
|
107
107
|
description: "Get a specific user's deposit amounts (token B and sBTC) for a given auction cycle.",
|
|
108
|
-
inputSchema: {
|
|
108
|
+
inputSchema: z.object({
|
|
109
109
|
cycle: z.number().describe("Cycle number"),
|
|
110
110
|
address: z.string().describe("Stacks address of the depositor"),
|
|
111
111
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
112
|
-
},
|
|
112
|
+
}),
|
|
113
113
|
}, async ({ cycle, address, market }) => {
|
|
114
114
|
try {
|
|
115
115
|
const m = getMarket(market);
|
|
@@ -125,10 +125,10 @@ export function registerJingswapTools(server) {
|
|
|
125
125
|
description: "Get settlement details for a completed auction cycle. Returns clearing price, " +
|
|
126
126
|
"amounts cleared, fees, and the block height at which settlement occurred. " +
|
|
127
127
|
"Returns null settlement if the cycle hasn't been settled yet.",
|
|
128
|
-
inputSchema: {
|
|
128
|
+
inputSchema: z.object({
|
|
129
129
|
cycle: z.number().describe("Cycle number to query"),
|
|
130
130
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
131
|
-
},
|
|
131
|
+
}),
|
|
132
132
|
}, async ({ cycle, market }) => {
|
|
133
133
|
try {
|
|
134
134
|
const m = getMarket(market);
|
|
@@ -144,9 +144,9 @@ export function registerJingswapTools(server) {
|
|
|
144
144
|
description: "Get the full history of all auction cycles from cycle 0 to the current cycle. " +
|
|
145
145
|
"Each entry includes settlement data (if settled) and cycle totals. " +
|
|
146
146
|
"Useful for analyzing historical auction performance and volume.",
|
|
147
|
-
inputSchema: {
|
|
147
|
+
inputSchema: z.object({
|
|
148
148
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
149
|
-
},
|
|
149
|
+
}),
|
|
150
150
|
}, async ({ market }) => {
|
|
151
151
|
try {
|
|
152
152
|
const m = getMarket(market);
|
|
@@ -161,10 +161,10 @@ export function registerJingswapTools(server) {
|
|
|
161
161
|
server.registerTool("jingswap_get_user_activity", {
|
|
162
162
|
description: "Get a user's auction activity history — deposits, cancellations, fills, and settlements. " +
|
|
163
163
|
"Indexed from on-chain contract events.",
|
|
164
|
-
inputSchema: {
|
|
164
|
+
inputSchema: z.object({
|
|
165
165
|
address: z.string().describe("Stacks address to query"),
|
|
166
166
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
167
|
-
},
|
|
167
|
+
}),
|
|
168
168
|
}, async ({ address, market }) => {
|
|
169
169
|
try {
|
|
170
170
|
const m = getMarket(market);
|
|
@@ -197,10 +197,10 @@ export function registerJingswapTools(server) {
|
|
|
197
197
|
server.registerTool("jingswap_deposit_stx", {
|
|
198
198
|
description: "Deposit the token-B side (STX or USDCx depending on market) into the current Jingswap auction cycle. " +
|
|
199
199
|
"Only works during the deposit phase. Amount is in human units (e.g. 10 for 10 STX, or 10 for 10 USDCx).",
|
|
200
|
-
inputSchema: {
|
|
200
|
+
inputSchema: z.object({
|
|
201
201
|
amount: z.number().positive().describe("Amount of token B to deposit (human units)"),
|
|
202
202
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
203
|
-
},
|
|
203
|
+
}),
|
|
204
204
|
}, async ({ amount, market }) => {
|
|
205
205
|
try {
|
|
206
206
|
const m = getMarket(market);
|
|
@@ -247,10 +247,10 @@ export function registerJingswapTools(server) {
|
|
|
247
247
|
description: "Deposit sBTC into the current Jingswap auction cycle. " +
|
|
248
248
|
"Only works during the deposit phase. Amount is in satoshis (e.g. 1000 for 1000 sats). " +
|
|
249
249
|
"Works the same for both sbtc-stx and sbtc-usdcx markets.",
|
|
250
|
-
inputSchema: {
|
|
250
|
+
inputSchema: z.object({
|
|
251
251
|
amount: z.number().int().positive().describe("Amount of sBTC in satoshis"),
|
|
252
252
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
253
|
-
},
|
|
253
|
+
}),
|
|
254
254
|
}, async ({ amount, market }) => {
|
|
255
255
|
try {
|
|
256
256
|
const m = getMarket(market);
|
|
@@ -287,9 +287,9 @@ export function registerJingswapTools(server) {
|
|
|
287
287
|
server.registerTool("jingswap_cancel_stx", {
|
|
288
288
|
description: "Cancel your token-B deposit (STX or USDCx depending on market) from the current Jingswap auction cycle " +
|
|
289
289
|
"and get a full refund. Only works during the deposit phase.",
|
|
290
|
-
inputSchema: {
|
|
290
|
+
inputSchema: z.object({
|
|
291
291
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
292
|
-
},
|
|
292
|
+
}),
|
|
293
293
|
}, async ({ market }) => {
|
|
294
294
|
try {
|
|
295
295
|
const m = getMarket(market);
|
|
@@ -320,9 +320,9 @@ export function registerJingswapTools(server) {
|
|
|
320
320
|
server.registerTool("jingswap_cancel_sbtc", {
|
|
321
321
|
description: "Cancel your sBTC deposit from the current Jingswap auction cycle and get a full refund. " +
|
|
322
322
|
"Only works during the deposit phase. Works the same for both markets.",
|
|
323
|
-
inputSchema: {
|
|
323
|
+
inputSchema: z.object({
|
|
324
324
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
325
|
-
},
|
|
325
|
+
}),
|
|
326
326
|
}, async ({ market }) => {
|
|
327
327
|
try {
|
|
328
328
|
const m = getMarket(market);
|
|
@@ -355,9 +355,9 @@ export function registerJingswapTools(server) {
|
|
|
355
355
|
"Before calling, check jingswap_get_cycle_state to verify: phase is 0 (deposit), " +
|
|
356
356
|
"blocksElapsed >= 150 (DEPOSIT_MIN_BLOCKS), and both sides meet minimums. " +
|
|
357
357
|
"Anyone can call this. Transitions to buffer phase.",
|
|
358
|
-
inputSchema: {
|
|
358
|
+
inputSchema: z.object({
|
|
359
359
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
360
|
-
},
|
|
360
|
+
}),
|
|
361
361
|
}, async ({ market }) => {
|
|
362
362
|
try {
|
|
363
363
|
const m = getMarket(market);
|
|
@@ -394,9 +394,9 @@ export function registerJingswapTools(server) {
|
|
|
394
394
|
"WARNING: This will almost always fail because stored prices go stale quickly. " +
|
|
395
395
|
"Prefer jingswap_settle_with_refresh instead — it fetches fresh prices and is much more reliable. " +
|
|
396
396
|
"Only works after deposits have been closed (buffer/settle phase).",
|
|
397
|
-
inputSchema: {
|
|
397
|
+
inputSchema: z.object({
|
|
398
398
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
399
|
-
},
|
|
399
|
+
}),
|
|
400
400
|
}, async ({ market }) => {
|
|
401
401
|
try {
|
|
402
402
|
const m = getMarket(market);
|
|
@@ -446,9 +446,9 @@ export function registerJingswapTools(server) {
|
|
|
446
446
|
"Settlement distributes funds to all depositors so post conditions are in Allow mode. " +
|
|
447
447
|
"There is no guarantee settlement succeeds (e.g. if oracle update fails), but this is " +
|
|
448
448
|
"the most reliable path. Only works after deposits have been closed (buffer/settle phase).",
|
|
449
|
-
inputSchema: {
|
|
449
|
+
inputSchema: z.object({
|
|
450
450
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
451
|
-
},
|
|
451
|
+
}),
|
|
452
452
|
}, async ({ market }) => {
|
|
453
453
|
try {
|
|
454
454
|
const m = getMarket(market);
|
|
@@ -502,9 +502,9 @@ export function registerJingswapTools(server) {
|
|
|
502
502
|
"(BUFFER_BLOCKS 30 + CANCEL_THRESHOLD 500). " +
|
|
503
503
|
"Rolls all deposits into the next cycle — no refunds, users can withdraw " +
|
|
504
504
|
"individually during the next deposit phase. This is the safety valve.",
|
|
505
|
-
inputSchema: {
|
|
505
|
+
inputSchema: z.object({
|
|
506
506
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
507
|
-
},
|
|
507
|
+
}),
|
|
508
508
|
}, async ({ market }) => {
|
|
509
509
|
try {
|
|
510
510
|
const m = getMarket(market);
|
|
@@ -540,9 +540,9 @@ export function registerJingswapTools(server) {
|
|
|
540
540
|
description: "Get current oracle and DEX prices used by the Jingswap auction. " +
|
|
541
541
|
"Returns Pyth oracle prices (BTC/USD, STX/USD with confidence and freshness), " +
|
|
542
542
|
"on-chain DEX prices (XYK pool with TVL, DLMM), and the derived price ratio.",
|
|
543
|
-
inputSchema: {
|
|
543
|
+
inputSchema: z.object({
|
|
544
544
|
market: z.string().optional().describe('Market: "sbtc-stx" (default) or "sbtc-usdcx"'),
|
|
545
|
-
},
|
|
545
|
+
}),
|
|
546
546
|
}, async ({ market }) => {
|
|
547
547
|
try {
|
|
548
548
|
const m = getMarket(market);
|
|
@@ -20,6 +20,6 @@
|
|
|
20
20
|
*
|
|
21
21
|
* Fund-moving calls sign in DENY mode with an exact post-condition.
|
|
22
22
|
*/
|
|
23
|
-
import { McpServer } from "@modelcontextprotocol/
|
|
23
|
+
import { McpServer } from "@modelcontextprotocol/server";
|
|
24
24
|
export declare function registerLegionTools(server: McpServer): void;
|
|
25
25
|
//# sourceMappingURL=legion.tools.d.ts.map
|
|
@@ -152,7 +152,7 @@ export function registerLegionTools(server) {
|
|
|
152
152
|
"No story can be proposed until the legion reaches its member threshold, so check " +
|
|
153
153
|
"`membership.activated` before planning to publish.\n\n" +
|
|
154
154
|
`Reads only. Runs on Stacks ${LEGION_NETWORK} regardless of this server's NETWORK.`,
|
|
155
|
-
inputSchema: { era: eraInput },
|
|
155
|
+
inputSchema: z.object({ era: eraInput }),
|
|
156
156
|
}, async ({ era: eraArg }) => {
|
|
157
157
|
try {
|
|
158
158
|
const era = resolveEra(eraArg);
|
|
@@ -262,7 +262,7 @@ export function registerLegionTools(server) {
|
|
|
262
262
|
"Phases: `pending` (filed, voting not open yet), `voting`, `concludable`, " +
|
|
263
263
|
"`passed`/`failed` (settled), `expired` (nobody concluded in time; can no longer pay).\n\n" +
|
|
264
264
|
"Reads only.",
|
|
265
|
-
inputSchema: {
|
|
265
|
+
inputSchema: z.object({
|
|
266
266
|
phase: z
|
|
267
267
|
.enum([
|
|
268
268
|
"all",
|
|
@@ -284,7 +284,7 @@ export function registerLegionTools(server) {
|
|
|
284
284
|
.optional()
|
|
285
285
|
.describe("How many proposals to scan back from the newest (default 10)"),
|
|
286
286
|
era: eraInput,
|
|
287
|
-
},
|
|
287
|
+
}),
|
|
288
288
|
}, async ({ phase = "all", limit = 10, era: eraArg }) => {
|
|
289
289
|
try {
|
|
290
290
|
const era = resolveEra(eraArg);
|
|
@@ -377,10 +377,10 @@ export function registerLegionTools(server) {
|
|
|
377
377
|
"timeline, what `conclude` would decide now, and whether you have voted.\n\n" +
|
|
378
378
|
"Read this before voting — the contract cannot read the inscription, so judging the " +
|
|
379
379
|
"work is the voter's job.\n\nReads only.",
|
|
380
|
-
inputSchema: {
|
|
380
|
+
inputSchema: z.object({
|
|
381
381
|
proposalId: z.number().int().positive().describe("The proposal id"),
|
|
382
382
|
era: eraInput,
|
|
383
|
-
},
|
|
383
|
+
}),
|
|
384
384
|
}, async ({ proposalId, era: eraArg }) => {
|
|
385
385
|
try {
|
|
386
386
|
const era = resolveEra(eraArg);
|
|
@@ -497,7 +497,7 @@ export function registerLegionTools(server) {
|
|
|
497
497
|
description: "Your weight, share, weight lock, sBTC balance, and every propose precondition folded " +
|
|
498
498
|
"from the contract's `propose-status` — so a blocked propose names the gate to wait on.\n\n" +
|
|
499
499
|
"Requires an unlocked wallet. Signs nothing.",
|
|
500
|
-
inputSchema: { era: eraInput },
|
|
500
|
+
inputSchema: z.object({ era: eraInput }),
|
|
501
501
|
}, async ({ era: eraArg }) => {
|
|
502
502
|
try {
|
|
503
503
|
const era = resolveEra(eraArg);
|
|
@@ -571,13 +571,13 @@ export function registerLegionTools(server) {
|
|
|
571
571
|
"Crossing the minimum weight also makes you a MEMBER, which is what unlocks proposals " +
|
|
572
572
|
"for the whole legion once enough members join.\n\n" +
|
|
573
573
|
"Requires an unlocked wallet.",
|
|
574
|
-
inputSchema: {
|
|
574
|
+
inputSchema: z.object({
|
|
575
575
|
sats: z
|
|
576
576
|
.number()
|
|
577
577
|
.int()
|
|
578
578
|
.positive()
|
|
579
579
|
.describe("Amount of sBTC to contribute, in sats"),
|
|
580
|
-
},
|
|
580
|
+
}),
|
|
581
581
|
}, async ({ sats }) => {
|
|
582
582
|
try {
|
|
583
583
|
const account = await getLegionAccount();
|
|
@@ -656,7 +656,7 @@ export function registerLegionTools(server) {
|
|
|
656
656
|
"identity. SPENDS REAL sBTC AND IS FINAL: no refund path exists.\n\n" +
|
|
657
657
|
"Metered against the wallet's `sats` spending limit before signing.\n\n" +
|
|
658
658
|
"Requires an unlocked wallet.",
|
|
659
|
-
inputSchema: {
|
|
659
|
+
inputSchema: z.object({
|
|
660
660
|
sats: z
|
|
661
661
|
.number()
|
|
662
662
|
.int()
|
|
@@ -677,7 +677,7 @@ export function registerLegionTools(server) {
|
|
|
677
677
|
.max(MAX_SPONSOR_MEMO_LENGTH)
|
|
678
678
|
.optional()
|
|
679
679
|
.describe(`Optional free-form note on the record (ASCII, ≤${MAX_SPONSOR_MEMO_LENGTH} chars)`),
|
|
680
|
-
},
|
|
680
|
+
}),
|
|
681
681
|
}, async ({ sats, name, link, memo }) => {
|
|
682
682
|
try {
|
|
683
683
|
assertAscii(name, "name", MAX_SPONSOR_NAME_LENGTH);
|
|
@@ -751,7 +751,7 @@ export function registerLegionTools(server) {
|
|
|
751
751
|
"proposal per principal; the lock is never spent and releases on every outcome.\n\n" +
|
|
752
752
|
"Pre-flights every precondition and refuses locally with the specific blocker.\n\n" +
|
|
753
753
|
"Requires an unlocked wallet.",
|
|
754
|
-
inputSchema: {
|
|
754
|
+
inputSchema: z.object({
|
|
755
755
|
link: z
|
|
756
756
|
.string()
|
|
757
757
|
.min(1)
|
|
@@ -768,7 +768,7 @@ export function registerLegionTools(server) {
|
|
|
768
768
|
.optional()
|
|
769
769
|
.describe(`Why this piece is worth paying for (ASCII, ≤${MAX_DESCRIPTION_LENGTH} chars). ` +
|
|
770
770
|
"Stored on chain but not emitted in the event — voters read it via legion_get_story."),
|
|
771
|
-
},
|
|
771
|
+
}),
|
|
772
772
|
}, async ({ link, title, description }) => {
|
|
773
773
|
try {
|
|
774
774
|
const normalizedLink = normalizeOrdinalsLink(link);
|
|
@@ -848,7 +848,7 @@ export function registerLegionTools(server) {
|
|
|
848
848
|
"Voting no is the ONLY way to stop a piece — this legion has no veto.\n\n" +
|
|
849
849
|
"Read the inscription first — legion_get_story gives you the link.\n\n" +
|
|
850
850
|
"Pre-flights phase, weight and prior vote. Requires an unlocked wallet.",
|
|
851
|
-
inputSchema: {
|
|
851
|
+
inputSchema: z.object({
|
|
852
852
|
proposalId: z.number().int().positive().describe("The proposal id"),
|
|
853
853
|
support: z
|
|
854
854
|
.boolean()
|
|
@@ -859,7 +859,7 @@ export function registerLegionTools(server) {
|
|
|
859
859
|
.max(MAX_RATIONALE_LENGTH)
|
|
860
860
|
.describe(`Why you voted this way, recorded on chain (ASCII, ≤${MAX_RATIONALE_LENGTH} chars). ` +
|
|
861
861
|
"Required and must be non-empty — the contract rejects a blank one (u440)."),
|
|
862
|
-
},
|
|
862
|
+
}),
|
|
863
863
|
}, async ({ proposalId, support, rationale }) => {
|
|
864
864
|
try {
|
|
865
865
|
const account = await getLegionAccount();
|
|
@@ -949,9 +949,9 @@ export function registerLegionTools(server) {
|
|
|
949
949
|
"concluded after. Concluding late pays what concluding early would; the payout was " +
|
|
950
950
|
"snapshotted at propose time.\n\n" +
|
|
951
951
|
"Requires an unlocked wallet — caller pays gas, proposer gets the payout.",
|
|
952
|
-
inputSchema: {
|
|
952
|
+
inputSchema: z.object({
|
|
953
953
|
proposalId: z.number().int().positive().describe("The proposal id"),
|
|
954
|
-
},
|
|
954
|
+
}),
|
|
955
955
|
}, async ({ proposalId }) => {
|
|
956
956
|
try {
|
|
957
957
|
const account = await getLegionAccount();
|
|
@@ -1042,7 +1042,7 @@ export function registerLegionTools(server) {
|
|
|
1042
1042
|
"signing. `dryRun` prices it without broadcasting.\n\n" +
|
|
1043
1043
|
"Returns without waiting. After the commit confirms, call legion_inscribe_reveal.\n\n" +
|
|
1044
1044
|
"Requires an unlocked managed wallet with funded UTXOs.",
|
|
1045
|
-
inputSchema: {
|
|
1045
|
+
inputSchema: z.object({
|
|
1046
1046
|
title: z
|
|
1047
1047
|
.string()
|
|
1048
1048
|
.min(1)
|
|
@@ -1076,7 +1076,7 @@ export function registerLegionTools(server) {
|
|
|
1076
1076
|
.union([z.enum(["fast", "medium", "slow"]), z.number().positive()])
|
|
1077
1077
|
.optional()
|
|
1078
1078
|
.describe("Fee rate: 'fast', 'medium', 'slow', or a number in sat/vB (default: medium)"),
|
|
1079
|
-
},
|
|
1079
|
+
}),
|
|
1080
1080
|
}, async ({ title, body, parentInscriptionId, dryRun, confirmMainnetSpend, allowNonMainnet, feeRate }) => {
|
|
1081
1081
|
try {
|
|
1082
1082
|
// A testnet inscription is almost always a misconfiguration here: the
|
|
@@ -1256,7 +1256,7 @@ export function registerLegionTools(server) {
|
|
|
1256
1256
|
"No mainnet confirmation is asked for here, unlike the commit: those sats are already " +
|
|
1257
1257
|
"committed, and refusing the reveal would strand them rather than save them.\n\n" +
|
|
1258
1258
|
"Requires an unlocked managed wallet.",
|
|
1259
|
-
inputSchema: {
|
|
1259
|
+
inputSchema: z.object({
|
|
1260
1260
|
commitTxid: z
|
|
1261
1261
|
.string()
|
|
1262
1262
|
.length(64)
|
|
@@ -1275,7 +1275,7 @@ export function registerLegionTools(server) {
|
|
|
1275
1275
|
.union([z.enum(["fast", "medium", "slow"]), z.number().positive()])
|
|
1276
1276
|
.optional()
|
|
1277
1277
|
.describe("Fee rate for the reveal tx (default: medium)"),
|
|
1278
|
-
},
|
|
1278
|
+
}),
|
|
1279
1279
|
}, async ({ commitTxid, revealAmount, title, body, parentInscriptionId, feeRate }) => {
|
|
1280
1280
|
try {
|
|
1281
1281
|
const walletManager = getWalletManager();
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
* invoices. The L402 interceptor in src/services/x402.service.ts uses the
|
|
7
7
|
* same LightningProvider singleton to auto-pay invoice challenges on 402s.
|
|
8
8
|
*/
|
|
9
|
-
import { McpServer } from "@modelcontextprotocol/
|
|
9
|
+
import { McpServer } from "@modelcontextprotocol/server";
|
|
10
10
|
export declare function registerLightningTools(server: McpServer): void;
|
|
11
11
|
//# sourceMappingURL=lightning.tools.d.ts.map
|
|
@@ -23,13 +23,13 @@ export function registerLightningTools(server) {
|
|
|
23
23
|
"Generates a fresh BIP39 mnemonic (shown once), encrypts it with the " +
|
|
24
24
|
"provided password, and stores it at ~/.aibtc/lightning/keystore.json. " +
|
|
25
25
|
"Returns the deposit address for funding the wallet from L1 BTC.",
|
|
26
|
-
inputSchema: {
|
|
26
|
+
inputSchema: z.object({
|
|
27
27
|
name: z.string().describe("Name for the Lightning wallet (e.g., 'main')"),
|
|
28
28
|
password: z
|
|
29
29
|
.string()
|
|
30
30
|
.min(8)
|
|
31
31
|
.describe("Password to protect the Lightning wallet (minimum 8 characters) - WARNING: sensitive value"),
|
|
32
|
-
},
|
|
32
|
+
}),
|
|
33
33
|
}, async ({ name, password }) => {
|
|
34
34
|
try {
|
|
35
35
|
const manager = getLightningManager();
|
|
@@ -56,7 +56,7 @@ export function registerLightningTools(server) {
|
|
|
56
56
|
description: "Import an existing Lightning wallet into the embedded Spark-backed " +
|
|
57
57
|
"store from a BIP39 mnemonic phrase. Encrypted locally at " +
|
|
58
58
|
"~/.aibtc/lightning/keystore.json.",
|
|
59
|
-
inputSchema: {
|
|
59
|
+
inputSchema: z.object({
|
|
60
60
|
name: z.string().describe("Name for the Lightning wallet"),
|
|
61
61
|
mnemonic: z
|
|
62
62
|
.string()
|
|
@@ -65,7 +65,7 @@ export function registerLightningTools(server) {
|
|
|
65
65
|
.string()
|
|
66
66
|
.min(8)
|
|
67
67
|
.describe("Password to protect the Lightning wallet (minimum 8 characters) - WARNING: sensitive value"),
|
|
68
|
-
},
|
|
68
|
+
}),
|
|
69
69
|
}, async ({ name, mnemonic, password }) => {
|
|
70
70
|
try {
|
|
71
71
|
const manager = getLightningManager();
|
|
@@ -87,9 +87,9 @@ export function registerLightningTools(server) {
|
|
|
87
87
|
description: "Unlock the Lightning wallet for the current session. Required before " +
|
|
88
88
|
"paying or creating invoices, and before the L402 interceptor can " +
|
|
89
89
|
"auto-pay challenges.",
|
|
90
|
-
inputSchema: {
|
|
90
|
+
inputSchema: z.object({
|
|
91
91
|
password: z.string().describe("Wallet password - WARNING: sensitive value"),
|
|
92
|
-
},
|
|
92
|
+
}),
|
|
93
93
|
}, async ({ password }) => {
|
|
94
94
|
try {
|
|
95
95
|
const manager = getLightningManager();
|
|
@@ -144,7 +144,7 @@ export function registerLightningTools(server) {
|
|
|
144
144
|
"claimed to credit the Lightning balance (separate follow-up step; " +
|
|
145
145
|
"not automated in this PR). Requires the main wallet to be unlocked " +
|
|
146
146
|
"AND the Lightning wallet to be unlocked (to fetch the deposit address).",
|
|
147
|
-
inputSchema: {
|
|
147
|
+
inputSchema: z.object({
|
|
148
148
|
amountSats: z
|
|
149
149
|
.number()
|
|
150
150
|
.int()
|
|
@@ -158,7 +158,7 @@ export function registerLightningTools(server) {
|
|
|
158
158
|
.optional()
|
|
159
159
|
.default("medium")
|
|
160
160
|
.describe("Fee rate: 'fast' (~10 min), 'medium' (~30 min), 'slow' (~1 hr), or number in sat/vB"),
|
|
161
|
-
},
|
|
161
|
+
}),
|
|
162
162
|
}, async ({ amountSats, feeRate }) => {
|
|
163
163
|
try {
|
|
164
164
|
// Lightning wallet must be unlocked so we can fetch a deposit address.
|
|
@@ -236,7 +236,7 @@ export function registerLightningTools(server) {
|
|
|
236
236
|
"transaction has 3 confirmations. Fetches a signed quote from the " +
|
|
237
237
|
"SSP, submits the claim, and returns the credited sats + Spark " +
|
|
238
238
|
"transfer id. Requires an unlocked Lightning wallet.",
|
|
239
|
-
inputSchema: {
|
|
239
|
+
inputSchema: z.object({
|
|
240
240
|
transactionId: z
|
|
241
241
|
.string()
|
|
242
242
|
.describe("Bitcoin txid of the deposit transaction"),
|
|
@@ -246,7 +246,7 @@ export function registerLightningTools(server) {
|
|
|
246
246
|
.nonnegative()
|
|
247
247
|
.optional()
|
|
248
248
|
.describe("Vout index of the deposit output (default: SSP auto-detects)"),
|
|
249
|
-
},
|
|
249
|
+
}),
|
|
250
250
|
}, async ({ transactionId, outputIndex }) => {
|
|
251
251
|
try {
|
|
252
252
|
const manager = getLightningManager();
|
|
@@ -268,7 +268,7 @@ export function registerLightningTools(server) {
|
|
|
268
268
|
server.registerTool("lightning_pay_invoice", {
|
|
269
269
|
description: "Pay a BOLT-11 Lightning invoice from the embedded Lightning wallet. " +
|
|
270
270
|
"Returns the payment preimage (proof of payment) and fees paid.",
|
|
271
|
-
inputSchema: {
|
|
271
|
+
inputSchema: z.object({
|
|
272
272
|
bolt11: z
|
|
273
273
|
.string()
|
|
274
274
|
.describe("BOLT-11 encoded Lightning invoice (starts with lnbc... or lntb...)"),
|
|
@@ -278,7 +278,7 @@ export function registerLightningTools(server) {
|
|
|
278
278
|
.nonnegative()
|
|
279
279
|
.optional()
|
|
280
280
|
.describe("Maximum routing fee to pay in sats (provider default applies when omitted)"),
|
|
281
|
-
},
|
|
281
|
+
}),
|
|
282
282
|
}, async ({ bolt11, maxFeeSats }) => {
|
|
283
283
|
try {
|
|
284
284
|
const manager = getLightningManager();
|
|
@@ -328,7 +328,7 @@ export function registerLightningTools(server) {
|
|
|
328
328
|
server.registerTool("lightning_create_invoice", {
|
|
329
329
|
description: "Create a BOLT-11 Lightning invoice that can receive a payment into " +
|
|
330
330
|
"the embedded Lightning wallet.",
|
|
331
|
-
inputSchema: {
|
|
331
|
+
inputSchema: z.object({
|
|
332
332
|
amountSats: z
|
|
333
333
|
.number()
|
|
334
334
|
.int()
|
|
@@ -338,7 +338,7 @@ export function registerLightningTools(server) {
|
|
|
338
338
|
.string()
|
|
339
339
|
.optional()
|
|
340
340
|
.describe("Optional description attached to the invoice"),
|
|
341
|
-
},
|
|
341
|
+
}),
|
|
342
342
|
}, async ({ amountSats, memo }) => {
|
|
343
343
|
try {
|
|
344
344
|
const manager = getLightningManager();
|
|
@@ -8,6 +8,6 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Data is fetched from the public mempool.space API (no authentication required).
|
|
10
10
|
*/
|
|
11
|
-
import { McpServer } from "@modelcontextprotocol/
|
|
11
|
+
import { McpServer } from "@modelcontextprotocol/server";
|
|
12
12
|
export declare function registerMempoolTools(server: McpServer): void;
|
|
13
13
|
//# sourceMappingURL=mempool.tools.d.ts.map
|
|
@@ -56,7 +56,7 @@ export function registerMempoolTools(server) {
|
|
|
56
56
|
description: "Get current Bitcoin mempool statistics including transaction count, " +
|
|
57
57
|
"virtual size, total fees, and fee histogram. " +
|
|
58
58
|
"Useful for monitoring network congestion and estimating confirmation times.",
|
|
59
|
-
inputSchema: {},
|
|
59
|
+
inputSchema: z.object({}),
|
|
60
60
|
}, async () => {
|
|
61
61
|
try {
|
|
62
62
|
const api = new MempoolApi(NETWORK);
|
|
@@ -79,11 +79,11 @@ export function registerMempoolTools(server) {
|
|
|
79
79
|
description: "Get confirmation status and details for a Bitcoin transaction by txid. " +
|
|
80
80
|
"Returns whether the transaction is confirmed, block height, fee, size, and I/O summary. " +
|
|
81
81
|
"Works for both confirmed and unconfirmed (mempool) transactions.",
|
|
82
|
-
inputSchema: {
|
|
82
|
+
inputSchema: z.object({
|
|
83
83
|
txid: z
|
|
84
84
|
.string()
|
|
85
85
|
.describe("Bitcoin transaction ID (64 hex characters)"),
|
|
86
|
-
},
|
|
86
|
+
}),
|
|
87
87
|
}, async ({ txid }) => {
|
|
88
88
|
try {
|
|
89
89
|
const api = new MempoolApi(NETWORK);
|
|
@@ -102,9 +102,9 @@ export function registerMempoolTools(server) {
|
|
|
102
102
|
description: "Get recent transaction history for a Bitcoin address (last 25 transactions). " +
|
|
103
103
|
"Returns a summary of each transaction including confirmation status, fee, and amounts. " +
|
|
104
104
|
"Useful for monitoring address activity and verifying payment receipts.",
|
|
105
|
-
inputSchema: {
|
|
105
|
+
inputSchema: z.object({
|
|
106
106
|
address: z.string().describe("Bitcoin address (e.g. bc1... for mainnet, tb1... for testnet)"),
|
|
107
|
-
},
|
|
107
|
+
}),
|
|
108
108
|
}, async ({ address }) => {
|
|
109
109
|
try {
|
|
110
110
|
const api = new MempoolApi(NETWORK);
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
* registered so an agent that still calls one is told where the workflow moved
|
|
7
7
|
* (the legion_* tools) instead of getting "unknown tool".
|
|
8
8
|
*/
|
|
9
|
-
import { McpServer } from "@modelcontextprotocol/
|
|
9
|
+
import { McpServer } from "@modelcontextprotocol/server";
|
|
10
10
|
export declare function registerNewsTools(server: McpServer): void;
|
|
11
11
|
//# sourceMappingURL=news.tools.d.ts.map
|
package/dist/tools/news.tools.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* (the legion_* tools) instead of getting "unknown tool".
|
|
8
8
|
*/
|
|
9
9
|
import { createJsonResponse } from "../utils/index.js";
|
|
10
|
+
import { z } from "zod";
|
|
10
11
|
const MIGRATION_NOTE = "aibtc.news no longer runs an off-chain newsroom API — every endpoint returns 410 Gone. " +
|
|
11
12
|
"Pieces are now inscribed to Bitcoin and published through the News Legion governance " +
|
|
12
13
|
"contract (SP5Y3W3F78NKFH4HYFNDQMJC484VZWKDH35ZR2M9.aibtc-news-gov) on Stacks mainnet. " +
|
|
@@ -88,7 +89,7 @@ export function registerNewsTools(server) {
|
|
|
88
89
|
description: `⛔ DEPRECATED — do not use. This tool used to ${was} via the aibtc.news API, which ` +
|
|
89
90
|
`has been shut down (410 Gone). aibtc.news now runs on on-chain governance: use ` +
|
|
90
91
|
`${useInstead.join(", ")} instead (start with legion_status).`,
|
|
91
|
-
inputSchema: {},
|
|
92
|
+
inputSchema: z.object({}),
|
|
92
93
|
}, async () => createJsonResponse({
|
|
93
94
|
success: false,
|
|
94
95
|
deprecated: true,
|
package/dist/tools/nft.tools.js
CHANGED
|
@@ -7,7 +7,7 @@ export function registerNftTools(server) {
|
|
|
7
7
|
// Get NFT holdings
|
|
8
8
|
server.registerTool("get_nft_holdings", {
|
|
9
9
|
description: "List all NFTs owned by an address.",
|
|
10
|
-
inputSchema: {
|
|
10
|
+
inputSchema: z.object({
|
|
11
11
|
address: z
|
|
12
12
|
.string()
|
|
13
13
|
.optional()
|
|
@@ -15,7 +15,7 @@ export function registerNftTools(server) {
|
|
|
15
15
|
contractId: z.string().optional().describe("Filter by specific NFT collection contract"),
|
|
16
16
|
limit: z.number().optional().default(20).describe("Maximum number of results"),
|
|
17
17
|
offset: z.number().optional().default(0).describe("Offset for pagination"),
|
|
18
|
-
},
|
|
18
|
+
}),
|
|
19
19
|
}, async ({ address, contractId, limit, offset }) => {
|
|
20
20
|
try {
|
|
21
21
|
const nftService = getNftService(NETWORK);
|
|
@@ -38,10 +38,10 @@ export function registerNftTools(server) {
|
|
|
38
38
|
// Get NFT metadata
|
|
39
39
|
server.registerTool("get_nft_metadata", {
|
|
40
40
|
description: "Get metadata for a specific NFT (SIP-016).",
|
|
41
|
-
inputSchema: {
|
|
41
|
+
inputSchema: z.object({
|
|
42
42
|
contractId: z.string().describe("NFT collection contract ID"),
|
|
43
43
|
tokenId: z.number().describe("Token ID of the NFT"),
|
|
44
|
-
},
|
|
44
|
+
}),
|
|
45
45
|
}, async ({ contractId, tokenId }) => {
|
|
46
46
|
try {
|
|
47
47
|
const nftService = getNftService(NETWORK);
|
|
@@ -60,7 +60,7 @@ export function registerNftTools(server) {
|
|
|
60
60
|
// Transfer NFT
|
|
61
61
|
server.registerTool("transfer_nft", {
|
|
62
62
|
description: "Transfer an NFT (SIP-009) to a recipient address.",
|
|
63
|
-
inputSchema: {
|
|
63
|
+
inputSchema: z.object({
|
|
64
64
|
contractId: z.string().describe("NFT collection contract ID"),
|
|
65
65
|
tokenId: z.number().describe("Token ID of the NFT to transfer"),
|
|
66
66
|
recipient: z.string().describe("The recipient's Stacks address"),
|
|
@@ -68,7 +68,7 @@ export function registerNftTools(server) {
|
|
|
68
68
|
.string()
|
|
69
69
|
.optional()
|
|
70
70
|
.describe("Optional fee: 'low' | 'medium' | 'high' preset or micro-STX amount. If omitted, auto-estimated."),
|
|
71
|
-
},
|
|
71
|
+
}),
|
|
72
72
|
}, async ({ contractId, tokenId, recipient, fee }) => {
|
|
73
73
|
try {
|
|
74
74
|
const nftService = getNftService(NETWORK);
|
|
@@ -93,10 +93,10 @@ export function registerNftTools(server) {
|
|
|
93
93
|
// Get NFT owner
|
|
94
94
|
server.registerTool("get_nft_owner", {
|
|
95
95
|
description: "Get the current owner of a specific NFT.",
|
|
96
|
-
inputSchema: {
|
|
96
|
+
inputSchema: z.object({
|
|
97
97
|
contractId: z.string().describe("NFT collection contract ID"),
|
|
98
98
|
tokenId: z.number().describe("Token ID of the NFT"),
|
|
99
|
-
},
|
|
99
|
+
}),
|
|
100
100
|
}, async ({ contractId, tokenId }) => {
|
|
101
101
|
try {
|
|
102
102
|
const nftService = getNftService(NETWORK);
|
|
@@ -116,9 +116,9 @@ export function registerNftTools(server) {
|
|
|
116
116
|
// Get collection info
|
|
117
117
|
server.registerTool("get_collection_info", {
|
|
118
118
|
description: "Get information about an NFT collection.",
|
|
119
|
-
inputSchema: {
|
|
119
|
+
inputSchema: z.object({
|
|
120
120
|
contractId: z.string().describe("NFT collection contract ID"),
|
|
121
|
-
},
|
|
121
|
+
}),
|
|
122
122
|
}, async ({ contractId }) => {
|
|
123
123
|
try {
|
|
124
124
|
const nftService = getNftService(NETWORK);
|
|
@@ -135,11 +135,11 @@ export function registerNftTools(server) {
|
|
|
135
135
|
// Get NFT history
|
|
136
136
|
server.registerTool("get_nft_history", {
|
|
137
137
|
description: "Get the transfer history of NFTs in a collection.",
|
|
138
|
-
inputSchema: {
|
|
138
|
+
inputSchema: z.object({
|
|
139
139
|
contractId: z.string().describe("NFT collection contract ID"),
|
|
140
140
|
limit: z.number().optional().default(20).describe("Maximum number of results"),
|
|
141
141
|
offset: z.number().optional().default(0).describe("Offset for pagination"),
|
|
142
|
-
},
|
|
142
|
+
}),
|
|
143
143
|
}, async ({ contractId, limit, offset }) => {
|
|
144
144
|
try {
|
|
145
145
|
const nftService = getNftService(NETWORK);
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @see https://github.com/aibtcdev/aibtc-mcp-server/issues/413
|
|
8
8
|
*/
|
|
9
|
-
import { McpServer } from "@modelcontextprotocol/
|
|
9
|
+
import { McpServer } from "@modelcontextprotocol/server";
|
|
10
10
|
export declare function registerNonceTools(server: McpServer): void;
|
|
11
11
|
//# sourceMappingURL=nonce.tools.d.ts.map
|