@suisei-mcp/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.
Files changed (128) hide show
  1. package/README.md +199 -0
  2. package/dist/coins.d.ts +21 -0
  3. package/dist/coins.js +59 -0
  4. package/dist/coins.js.map +1 -0
  5. package/dist/deepbook.d.ts +20 -0
  6. package/dist/deepbook.js +63 -0
  7. package/dist/deepbook.js.map +1 -0
  8. package/dist/http.d.ts +24 -0
  9. package/dist/http.js +42 -0
  10. package/dist/http.js.map +1 -0
  11. package/dist/index.d.ts +14 -0
  12. package/dist/index.js +19 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/node.d.ts +12 -0
  15. package/dist/node.js +54 -0
  16. package/dist/node.js.map +1 -0
  17. package/dist/serve.d.ts +13 -0
  18. package/dist/serve.js +25 -0
  19. package/dist/serve.js.map +1 -0
  20. package/dist/server.d.ts +20 -0
  21. package/dist/server.js +569 -0
  22. package/dist/server.js.map +1 -0
  23. package/dist/sui-client.d.ts +16 -0
  24. package/dist/sui-client.js +64 -0
  25. package/dist/sui-client.js.map +1 -0
  26. package/dist/tools/agent_wallet_fund.d.ts +11 -0
  27. package/dist/tools/agent_wallet_fund.js +31 -0
  28. package/dist/tools/agent_wallet_fund.js.map +1 -0
  29. package/dist/tools/agent_wallet_status.d.ts +6 -0
  30. package/dist/tools/agent_wallet_status.js +22 -0
  31. package/dist/tools/agent_wallet_status.js.map +1 -0
  32. package/dist/tools/agent_wallet_sweep.d.ts +11 -0
  33. package/dist/tools/agent_wallet_sweep.js +34 -0
  34. package/dist/tools/agent_wallet_sweep.js.map +1 -0
  35. package/dist/tools/sui_decode_tx_bytes.d.ts +15 -0
  36. package/dist/tools/sui_decode_tx_bytes.js +140 -0
  37. package/dist/tools/sui_decode_tx_bytes.js.map +1 -0
  38. package/dist/tools/sui_deepbook_quote.d.ts +12 -0
  39. package/dist/tools/sui_deepbook_quote.js +72 -0
  40. package/dist/tools/sui_deepbook_quote.js.map +1 -0
  41. package/dist/tools/sui_deepbook_swap.d.ts +15 -0
  42. package/dist/tools/sui_deepbook_swap.js +72 -0
  43. package/dist/tools/sui_deepbook_swap.js.map +1 -0
  44. package/dist/tools/sui_dry_run.d.ts +6 -0
  45. package/dist/tools/sui_dry_run.js +24 -0
  46. package/dist/tools/sui_dry_run.js.map +1 -0
  47. package/dist/tools/sui_execute_signed_tx.d.ts +6 -0
  48. package/dist/tools/sui_execute_signed_tx.js +25 -0
  49. package/dist/tools/sui_execute_signed_tx.js.map +1 -0
  50. package/dist/tools/sui_get_all_balances.d.ts +5 -0
  51. package/dist/tools/sui_get_all_balances.js +21 -0
  52. package/dist/tools/sui_get_all_balances.js.map +1 -0
  53. package/dist/tools/sui_get_balance.d.ts +1 -0
  54. package/dist/tools/sui_get_balance.js +17 -0
  55. package/dist/tools/sui_get_balance.js.map +1 -0
  56. package/dist/tools/sui_get_coin_metadata.d.ts +10 -0
  57. package/dist/tools/sui_get_coin_metadata.js +38 -0
  58. package/dist/tools/sui_get_coin_metadata.js.map +1 -0
  59. package/dist/tools/sui_get_coins.d.ts +6 -0
  60. package/dist/tools/sui_get_coins.js +31 -0
  61. package/dist/tools/sui_get_coins.js.map +1 -0
  62. package/dist/tools/sui_get_dynamic_fields.d.ts +6 -0
  63. package/dist/tools/sui_get_dynamic_fields.js +30 -0
  64. package/dist/tools/sui_get_dynamic_fields.js.map +1 -0
  65. package/dist/tools/sui_get_object.d.ts +5 -0
  66. package/dist/tools/sui_get_object.js +37 -0
  67. package/dist/tools/sui_get_object.js.map +1 -0
  68. package/dist/tools/sui_get_owned_badges.d.ts +1 -0
  69. package/dist/tools/sui_get_owned_badges.js +64 -0
  70. package/dist/tools/sui_get_owned_badges.js.map +1 -0
  71. package/dist/tools/sui_get_owned_objects.d.ts +5 -0
  72. package/dist/tools/sui_get_owned_objects.js +32 -0
  73. package/dist/tools/sui_get_owned_objects.js.map +1 -0
  74. package/dist/tools/sui_get_reference_gas_price.d.ts +5 -0
  75. package/dist/tools/sui_get_reference_gas_price.js +15 -0
  76. package/dist/tools/sui_get_reference_gas_price.js.map +1 -0
  77. package/dist/tools/sui_get_stakes.d.ts +11 -0
  78. package/dist/tools/sui_get_stakes.js +54 -0
  79. package/dist/tools/sui_get_stakes.js.map +1 -0
  80. package/dist/tools/sui_get_transaction.d.ts +6 -0
  81. package/dist/tools/sui_get_transaction.js +26 -0
  82. package/dist/tools/sui_get_transaction.js.map +1 -0
  83. package/dist/tools/sui_get_validator.d.ts +8 -0
  84. package/dist/tools/sui_get_validator.js +43 -0
  85. package/dist/tools/sui_get_validator.js.map +1 -0
  86. package/dist/tools/sui_get_validators.d.ts +9 -0
  87. package/dist/tools/sui_get_validators.js +46 -0
  88. package/dist/tools/sui_get_validators.js.map +1 -0
  89. package/dist/tools/sui_get_validators_apy.d.ts +10 -0
  90. package/dist/tools/sui_get_validators_apy.js +37 -0
  91. package/dist/tools/sui_get_validators_apy.js.map +1 -0
  92. package/dist/tools/sui_mint_badge.d.ts +7 -0
  93. package/dist/tools/sui_mint_badge.js +35 -0
  94. package/dist/tools/sui_mint_badge.js.map +1 -0
  95. package/dist/tools/sui_move_call.d.ts +18 -0
  96. package/dist/tools/sui_move_call.js +88 -0
  97. package/dist/tools/sui_move_call.js.map +1 -0
  98. package/dist/tools/sui_pay_many.d.ts +10 -0
  99. package/dist/tools/sui_pay_many.js +40 -0
  100. package/dist/tools/sui_pay_many.js.map +1 -0
  101. package/dist/tools/sui_query_events.d.ts +12 -0
  102. package/dist/tools/sui_query_events.js +59 -0
  103. package/dist/tools/sui_query_events.js.map +1 -0
  104. package/dist/tools/sui_resolve_address.d.ts +6 -0
  105. package/dist/tools/sui_resolve_address.js +22 -0
  106. package/dist/tools/sui_resolve_address.js.map +1 -0
  107. package/dist/tools/sui_resolve_coin.d.ts +9 -0
  108. package/dist/tools/sui_resolve_coin.js +26 -0
  109. package/dist/tools/sui_resolve_coin.js.map +1 -0
  110. package/dist/tools/sui_stake.d.ts +6 -0
  111. package/dist/tools/sui_stake.js +29 -0
  112. package/dist/tools/sui_stake.js.map +1 -0
  113. package/dist/tools/sui_transfer.d.ts +5 -0
  114. package/dist/tools/sui_transfer.js +34 -0
  115. package/dist/tools/sui_transfer.js.map +1 -0
  116. package/dist/tools/sui_unstake.d.ts +6 -0
  117. package/dist/tools/sui_unstake.js +27 -0
  118. package/dist/tools/sui_unstake.js.map +1 -0
  119. package/dist/tools/walrus_fetch.d.ts +1 -0
  120. package/dist/tools/walrus_fetch.js +18 -0
  121. package/dist/tools/walrus_fetch.js.map +1 -0
  122. package/dist/tools/walrus_publish.d.ts +1 -0
  123. package/dist/tools/walrus_publish.js +42 -0
  124. package/dist/tools/walrus_publish.js.map +1 -0
  125. package/dist/tx.d.ts +12 -0
  126. package/dist/tx.js +18 -0
  127. package/dist/tx.js.map +1 -0
  128. package/package.json +63 -0
package/dist/server.js ADDED
@@ -0,0 +1,569 @@
1
+ /**
2
+ * @suisei-mcp/mcp — server factory.
3
+ *
4
+ * Builds the Suisei MCP server with the full Sui-stack tool registry.
5
+ * Transport is chosen by the entrypoint: `index.ts` (stdio) for local
6
+ * hosts like Claude Desktop and Cursor; `http.ts` (Streamable HTTP) for
7
+ * remote hosts like Claude's Custom Connectors (web + mobile). Both call
8
+ * createServer() so there is exactly one tool registry.
9
+ *
10
+ * Write tools never hold keys — they return unsigned tx bytes for the
11
+ * host to sign, then sui_execute_signed_tx submits the signed result.
12
+ *
13
+ * The server identifies itself as "suisei" over the MCP protocol; tool
14
+ * names keep the sui_ prefix because they wrap the Sui chain, not the
15
+ * Suisei brand. Suisei is the agent toolkit; Sui is the chain it speaks.
16
+ */
17
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
18
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
19
+ import { z } from 'zod';
20
+ import { suiResolveAddress } from './tools/sui_resolve_address.js';
21
+ import { suiGetBalance } from './tools/sui_get_balance.js';
22
+ import { suiGetAllBalances } from './tools/sui_get_all_balances.js';
23
+ import { suiGetObject } from './tools/sui_get_object.js';
24
+ import { suiGetOwnedObjects } from './tools/sui_get_owned_objects.js';
25
+ import { suiGetOwnedBadges } from './tools/sui_get_owned_badges.js';
26
+ import { suiGetCoins } from './tools/sui_get_coins.js';
27
+ import { suiGetTransaction } from './tools/sui_get_transaction.js';
28
+ import { suiGetReferenceGasPrice } from './tools/sui_get_reference_gas_price.js';
29
+ import { suiGetDynamicFields } from './tools/sui_get_dynamic_fields.js';
30
+ import { suiGetStakes } from './tools/sui_get_stakes.js';
31
+ import { suiGetValidatorsApy } from './tools/sui_get_validators_apy.js';
32
+ import { suiGetValidators } from './tools/sui_get_validators.js';
33
+ import { suiMintBadge } from './tools/sui_mint_badge.js';
34
+ import { suiMoveCall } from './tools/sui_move_call.js';
35
+ import { suiTransfer } from './tools/sui_transfer.js';
36
+ import { suiStake } from './tools/sui_stake.js';
37
+ import { suiUnstake } from './tools/sui_unstake.js';
38
+ import { suiDeepbookQuote } from './tools/sui_deepbook_quote.js';
39
+ import { suiDeepbookSwap } from './tools/sui_deepbook_swap.js';
40
+ import { suiQueryEvents } from './tools/sui_query_events.js';
41
+ import { suiGetCoinMetadata } from './tools/sui_get_coin_metadata.js';
42
+ import { suiResolveCoin } from './tools/sui_resolve_coin.js';
43
+ import { suiGetValidator } from './tools/sui_get_validator.js';
44
+ import { suiPayMany } from './tools/sui_pay_many.js';
45
+ import { suiDecodeTxBytes } from './tools/sui_decode_tx_bytes.js';
46
+ import { agentWalletFund } from './tools/agent_wallet_fund.js';
47
+ import { agentWalletSweep } from './tools/agent_wallet_sweep.js';
48
+ import { agentWalletStatus } from './tools/agent_wallet_status.js';
49
+ import { suiDryRun } from './tools/sui_dry_run.js';
50
+ import { suiExecuteSignedTx } from './tools/sui_execute_signed_tx.js';
51
+ import { walrusPublish } from './tools/walrus_publish.js';
52
+ import { walrusFetch } from './tools/walrus_fetch.js';
53
+ export const PKG_VERSION = '0.1.0';
54
+ /** Shared network selector — every tool defaults to testnet. */
55
+ const networkSchema = z
56
+ .enum(['testnet', 'mainnet', 'devnet'])
57
+ .default('testnet')
58
+ .describe('Sui network to query.');
59
+ const tools = [
60
+ {
61
+ name: 'sui_resolve_address',
62
+ description: 'Resolve a Sui address from a SuiNS name (e.g. "alice.sui") or echo back a 0x address if already canonical. Use this whenever the user gives you a human-readable name.',
63
+ inputSchema: z.object({
64
+ name_or_address: z.string().describe('A SuiNS name or 0x… address.'),
65
+ network: networkSchema,
66
+ }),
67
+ handler: suiResolveAddress,
68
+ },
69
+ {
70
+ name: 'sui_get_balance',
71
+ description: 'Get the SUI balance of an address. Returns balance in MIST (1 SUI = 10^9 MIST) and a human-readable SUI value.',
72
+ inputSchema: z.object({
73
+ address: z.string().describe('A 0x Sui address.'),
74
+ network: networkSchema,
75
+ }),
76
+ handler: suiGetBalance,
77
+ },
78
+ {
79
+ name: 'sui_get_all_balances',
80
+ description: 'List every coin balance an address holds (not just SUI). Returns coin type, balance in MIST, and object count per coin. Use when a wallet may hold tokens beyond the native coin.',
81
+ inputSchema: z.object({
82
+ address: z.string().describe('A 0x Sui address.'),
83
+ network: networkSchema,
84
+ }),
85
+ handler: suiGetAllBalances,
86
+ },
87
+ {
88
+ name: 'sui_get_object',
89
+ description: "Read any on-chain object: its Move type, owner, version, content fields, and Display metadata. The general read primitive — use it to inspect any object id.",
90
+ inputSchema: z.object({
91
+ object_id: z.string().describe('The 0x object id to read.'),
92
+ network: networkSchema,
93
+ }),
94
+ handler: suiGetObject,
95
+ },
96
+ {
97
+ name: 'sui_get_owned_objects',
98
+ description: 'List objects owned by an address, optionally filtered to one Move struct type (e.g. "0x2::coin::Coin<0x2::sui::SUI>"). Paginated — pass the returned next_cursor to continue.',
99
+ inputSchema: z.object({
100
+ address: z.string().describe('Wallet address whose objects to list.'),
101
+ struct_type: z
102
+ .string()
103
+ .optional()
104
+ .describe('Fully-qualified Move struct type to filter by.'),
105
+ cursor: z.string().optional().describe('Pagination cursor from a previous call.'),
106
+ limit: z.number().int().min(1).max(50).default(50),
107
+ network: networkSchema,
108
+ }),
109
+ handler: suiGetOwnedObjects,
110
+ },
111
+ {
112
+ name: 'sui_get_owned_badges',
113
+ description: "Lists Suisei badges (soulbound quest-completion NFTs) owned by an address. Each badge proves the user completed a specific Suisei quest. Useful for showing a wallet's curriculum progress.",
114
+ inputSchema: z.object({
115
+ address: z.string().describe('Wallet address whose badges to list.'),
116
+ badge_package: z
117
+ .string()
118
+ .optional()
119
+ .describe('Badge package id (the Move package with the badge module). Defaults to the canonical Suisei package on the chosen network.'),
120
+ network: networkSchema,
121
+ }),
122
+ handler: suiGetOwnedBadges,
123
+ },
124
+ {
125
+ name: 'sui_get_coins',
126
+ description: 'List individual coin objects of one type held by an address (not a summed balance). Returns the concrete coin_object_id values an agent needs to spend or split in a transaction. Defaults to native SUI; pass coin_type for any other coin. Paginated.',
127
+ inputSchema: z.object({
128
+ address: z.string().describe('Wallet address whose coins to list.'),
129
+ coin_type: z
130
+ .string()
131
+ .optional()
132
+ .describe('Fully-qualified coin type, e.g. "0x2::sui::SUI". Defaults to SUI.'),
133
+ cursor: z.string().optional().describe('Pagination cursor from a previous call.'),
134
+ limit: z.number().int().min(1).max(50).default(50),
135
+ network: networkSchema,
136
+ }),
137
+ handler: suiGetCoins,
138
+ },
139
+ {
140
+ name: 'sui_get_transaction',
141
+ description: 'Fetch a finalized transaction by digest: execution status, gas used, balance changes, and event count. Use to inspect the result of a transaction submitted earlier (the digest sui_execute_signed_tx returns).',
142
+ inputSchema: z.object({
143
+ digest: z.string().describe('The transaction digest to look up.'),
144
+ network: networkSchema,
145
+ }),
146
+ handler: suiGetTransaction,
147
+ },
148
+ {
149
+ name: 'sui_get_reference_gas_price',
150
+ description: 'Get the current reference gas price (in MIST) for the network. Use to estimate fees or set a gas price before building a transaction.',
151
+ inputSchema: z.object({
152
+ network: networkSchema,
153
+ }),
154
+ handler: suiGetReferenceGasPrice,
155
+ },
156
+ {
157
+ name: 'sui_get_dynamic_fields',
158
+ description: 'List the dynamic fields attached to a parent object — how Sui stores Tables, Bags, and other on-chain collections. Returns each field name, type, and child object id. Paginated.',
159
+ inputSchema: z.object({
160
+ parent_id: z.string().describe('Object id whose dynamic fields to list.'),
161
+ cursor: z.string().optional().describe('Pagination cursor from a previous call.'),
162
+ limit: z.number().int().min(1).max(50).optional(),
163
+ network: networkSchema,
164
+ }),
165
+ handler: suiGetDynamicFields,
166
+ },
167
+ {
168
+ name: 'sui_get_stakes',
169
+ description: "List an address's active native stakes, grouped by validator. For each StakedSui returns the principal, the rewards accrued so far (estimated), the activation epoch, and the staked_sui_id you pass to sui_unstake. Read-only. Use this to show a wallet's staking positions and earned rewards.",
170
+ inputSchema: z.object({
171
+ address: z.string().describe('Wallet address whose stakes to list.'),
172
+ network: networkSchema,
173
+ }),
174
+ handler: suiGetStakes,
175
+ },
176
+ {
177
+ name: 'sui_get_validators_apy',
178
+ description: 'Current APY for active validators, as the network computes it from recent epoch rewards. Read-only. apy is a fraction (0.041 = 4.1%), with apy_percent for display. Pass validator for one, sort=true to rank highest-first, limit to cap. This is the APR feed for picking a validator before sui_stake.',
179
+ inputSchema: z.object({
180
+ validator: z
181
+ .string()
182
+ .optional()
183
+ .describe('Filter to a single validator 0x address.'),
184
+ sort: z.boolean().optional().describe('Sort highest APY first.'),
185
+ limit: z.number().int().min(1).max(150).optional().describe('Cap the number returned.'),
186
+ network: networkSchema,
187
+ }),
188
+ handler: suiGetValidatorsApy,
189
+ },
190
+ {
191
+ name: 'sui_get_validators',
192
+ description: 'The active validator set plus epoch context (epoch number, duration, total stake). For each validator: name, staking address (what sui_stake expects), commission rate, and total stake. Read-only, sorted largest-first. Match validator_address against sui_get_validators_apy to render a full validator picker.',
193
+ inputSchema: z.object({
194
+ limit: z.number().int().min(1).max(150).optional().describe('Cap the number returned.'),
195
+ network: networkSchema,
196
+ }),
197
+ handler: suiGetValidators,
198
+ },
199
+ {
200
+ name: 'sui_get_validator',
201
+ description: 'One validator with APY merged: name, address, commission, total stake, voting power, project URL, and the live APY the chain computes from recent rewards. Fuses sui_get_validators + sui_get_validators_apy into a single read so a staking app doesn’t join them by hand.',
202
+ inputSchema: z.object({
203
+ validator_address: z.string().describe('Validator 0x address.'),
204
+ network: networkSchema,
205
+ }),
206
+ handler: suiGetValidator,
207
+ },
208
+ {
209
+ name: 'sui_query_events',
210
+ description: 'Query historical Move events. Powers reactive agents — react to swaps, mints, transfers, anything that emits an event. Filter by event_type (full type), package+module (both required together), sender, or transaction. Paginated; pass back next_cursor_tx_digest + next_cursor_event_seq to continue. At least one filter is required.',
211
+ inputSchema: z.object({
212
+ event_type: z.string().optional().describe('Full Move event type, e.g. "0x2::coin::CurrencyCreated<0x2::sui::SUI>".'),
213
+ package: z.string().optional().describe('Package id to filter by.'),
214
+ module: z.string().optional().describe('Module name (must accompany package).'),
215
+ sender: z.string().optional().describe('Address that emitted the event.'),
216
+ transaction: z.string().optional().describe('Transaction digest to filter to.'),
217
+ cursor_tx_digest: z.string().optional().describe('Pagination cursor from a previous call.'),
218
+ cursor_event_seq: z.string().optional().describe('Pagination cursor from a previous call.'),
219
+ limit: z.number().int().min(1).max(50).optional(),
220
+ descending: z.boolean().optional().describe('Default true (newest first).'),
221
+ network: networkSchema,
222
+ }),
223
+ handler: suiQueryEvents,
224
+ },
225
+ {
226
+ name: 'sui_get_coin_metadata',
227
+ description: "Live coin metadata: symbol, name, decimals, description, icon URL. Pass coin_type ('0x…') or symbol ('USDC'); a symbol resolves via the local registry first. Decimals are critical for every DeFi flow — '5 USDC' = 5e6 smallest units (6 decimals), not 5e9.",
228
+ inputSchema: z.object({
229
+ coin_type: z.string().optional().describe('Fully-qualified coin type.'),
230
+ symbol: z.string().optional().describe('Symbol to look up in the local registry (e.g. "USDC").'),
231
+ network: networkSchema,
232
+ }),
233
+ handler: suiGetCoinMetadata,
234
+ },
235
+ {
236
+ name: 'sui_resolve_coin',
237
+ description: 'Resolve a coin symbol (e.g. "USDC", "DEEP", "SUI") to its fully-qualified coin type on the chosen network, or — with no symbol — list every known symbol. Stops agents from hallucinating coin types.',
238
+ inputSchema: z.object({
239
+ symbol: z.string().optional().describe('Symbol to resolve. Omit to list known symbols.'),
240
+ network: networkSchema,
241
+ }),
242
+ handler: suiResolveCoin,
243
+ },
244
+ {
245
+ name: 'sui_mint_badge',
246
+ description: 'Build (do not execute) a PTB that mints a Suisei completion badge to a recipient. Returns base64 tx bytes; the caller signs and submits separately. Use this when an agent wants to issue its own badges through the canonical badge module.',
247
+ inputSchema: z.object({
248
+ recipient: z.string().describe('0x address receiving the badge.'),
249
+ quest_id: z
250
+ .string()
251
+ .describe('Quest identifier, e.g. "zklogin", "sponsored".'),
252
+ quest_number: z.number().int().min(1).max(255),
253
+ badge_package: z.string(),
254
+ network: networkSchema,
255
+ }),
256
+ handler: suiMintBadge,
257
+ },
258
+ {
259
+ name: 'sui_move_call',
260
+ description: 'Build (do not sign) a transaction calling ANY Move entry function — the universal write primitive. Each argument is a string: "object:<id>", or "pure:<type>:<value>" where type is address|id|bool|string|u8|u16|u32|u64|u128|u256. Vectors/structs are out of scope; use a dedicated tool for those. Returns base64 tx bytes.',
261
+ inputSchema: z.object({
262
+ target: z
263
+ .string()
264
+ .describe('Move target as "0xpkg::module::function".'),
265
+ type_arguments: z
266
+ .array(z.string())
267
+ .default([])
268
+ .describe('Type arguments for generic functions, e.g. ["0x2::sui::SUI"].'),
269
+ arguments: z
270
+ .array(z.string())
271
+ .default([])
272
+ .describe('Encoded call arguments, e.g. ["object:0xabc", "pure:u64:100"].'),
273
+ sender: z.string().describe('0x address that will sign and pay for the tx.'),
274
+ network: networkSchema,
275
+ }),
276
+ handler: suiMoveCall,
277
+ },
278
+ {
279
+ name: 'sui_transfer',
280
+ description: 'Build (do not sign) a transfer. Provide amount_mist to send SUI (split from gas) and/or object_ids to send whole objects to a recipient. Returns base64 tx bytes.',
281
+ inputSchema: z.object({
282
+ sender: z.string().describe('0x address sending and paying for the tx.'),
283
+ recipient: z.string().describe('0x address receiving the funds/objects.'),
284
+ amount_mist: z
285
+ .string()
286
+ .optional()
287
+ .describe('Amount of SUI to send, in MIST (as a string to avoid precision loss).'),
288
+ object_ids: z
289
+ .array(z.string())
290
+ .optional()
291
+ .describe('Object ids to transfer whole.'),
292
+ network: networkSchema,
293
+ }),
294
+ handler: suiTransfer,
295
+ },
296
+ {
297
+ name: 'sui_pay_many',
298
+ description: 'Build (do not sign) a batch SUI payout in one PTB: split N coins from gas and send each to its matching recipient. Powers airdrops, payroll, refunds, splitters. recipients and amounts_mist must be the same length and order. All payouts settle atomically.',
299
+ inputSchema: z.object({
300
+ sender: z.string().describe('0x address sending and paying for the tx.'),
301
+ recipients: z.array(z.string()).describe('Recipient 0x addresses, one per amount.'),
302
+ amounts_mist: z
303
+ .array(z.string())
304
+ .describe('Amounts in MIST (as strings), same length and order as recipients.'),
305
+ network: networkSchema,
306
+ }),
307
+ handler: suiPayMany,
308
+ },
309
+ {
310
+ name: 'sui_stake',
311
+ description: 'Build (do not sign) a native staking tx: split amount_mist from gas and delegate to a validator via 0x3::sui_system. Returns base64 tx bytes; the resulting StakedSui object lands in the sender once signed.',
312
+ inputSchema: z.object({
313
+ sender: z.string().describe('0x address staking and paying for the tx.'),
314
+ amount_mist: z.string().describe('Amount to stake, in MIST (as a string).'),
315
+ validator: z.string().describe('0x address of the validator to delegate to.'),
316
+ network: networkSchema,
317
+ }),
318
+ handler: suiStake,
319
+ },
320
+ {
321
+ name: 'sui_unstake',
322
+ description: 'Build (do not sign) a withdraw-stake tx for a StakedSui object via 0x3::sui_system. Returns base64 tx bytes; principal plus rewards return to the sender once signed.',
323
+ inputSchema: z.object({
324
+ sender: z.string().describe('0x address that owns the StakedSui and pays for the tx.'),
325
+ staked_sui_id: z.string().describe('Object id of the StakedSui to withdraw.'),
326
+ network: networkSchema,
327
+ }),
328
+ handler: suiUnstake,
329
+ },
330
+ {
331
+ name: 'sui_deepbook_quote',
332
+ description: 'Read-only DeepBook v3 quote (no gas, no signing). Given an input amount and direction, returns the expected output and the DEEP fee required, so you can size min_out before calling sui_deepbook_swap. Pass a known pool key (e.g. "SUI_DBUSDC" testnet, "SUI_USDC" mainnet) or explicit pool_id + base_type + quote_type. amount is raw smallest-units; all outputs are raw smallest-units too.',
333
+ inputSchema: z.object({
334
+ direction: z
335
+ .enum(['base_to_quote', 'quote_to_base'])
336
+ .describe('Quote selling the base coin for quote, or quote for base.'),
337
+ amount: z.string().describe('Input amount in the coin\'s smallest unit (as a string).'),
338
+ pool: z.string().optional().describe('Known pool key for the network (e.g. SUI_DBUSDC).'),
339
+ pool_id: z.string().optional().describe('Pool object id (overrides the pool key).'),
340
+ base_type: z.string().optional().describe('Base coin type (required with pool_id).'),
341
+ quote_type: z.string().optional().describe('Quote coin type (required with pool_id).'),
342
+ deepbook_package: z.string().optional().describe('Override the DeepBook package id.'),
343
+ network: networkSchema,
344
+ }),
345
+ handler: suiDeepbookQuote,
346
+ },
347
+ {
348
+ name: 'sui_deepbook_swap',
349
+ description: 'Build (do not sign) a DeepBook v3 market swap — the universal liquidity primitive. Pass a known pool key (e.g. "SUI_DBUSDC" on testnet, "SUI_USDC" on mainnet) or explicit pool_id + base_type + quote_type. amount and min_out are raw smallest-unit strings (caller handles decimals and slippage). DeepBook charges fees in DEEP: whitelisted pools take deep_amount "0", others require the sender to hold DEEP. Returns base64 tx bytes.',
350
+ inputSchema: z.object({
351
+ sender: z.string().describe('0x address that will sign, pay, and receive the output.'),
352
+ direction: z
353
+ .enum(['base_to_quote', 'quote_to_base'])
354
+ .describe('Swap the base coin for the quote coin, or vice versa.'),
355
+ amount: z.string().describe('Input amount in the coin\'s smallest unit (as a string).'),
356
+ min_out: z
357
+ .string()
358
+ .default('0')
359
+ .describe('Minimum acceptable output in smallest units (slippage floor). 0 = no floor.'),
360
+ deep_amount: z
361
+ .string()
362
+ .default('0')
363
+ .describe('DEEP to spend on fees, smallest units. 0 works for whitelisted pools.'),
364
+ pool: z
365
+ .string()
366
+ .optional()
367
+ .describe('Known pool key for the network (e.g. SUI_DBUSDC). Or pass pool_id below.'),
368
+ pool_id: z.string().optional().describe('Pool object id (overrides the pool key).'),
369
+ base_type: z.string().optional().describe('Base coin type (required with pool_id).'),
370
+ quote_type: z.string().optional().describe('Quote coin type (required with pool_id).'),
371
+ deepbook_package: z.string().optional().describe('Override the DeepBook package id.'),
372
+ deep_type: z.string().optional().describe('Override the DEEP coin type.'),
373
+ network: networkSchema,
374
+ }),
375
+ handler: suiDeepbookSwap,
376
+ },
377
+ {
378
+ name: 'agent_wallet_status',
379
+ description: "Read an agent wallet's spendable state: native SUI balance, coin object count, and whether it's funded. Read-only. Check this before asking the agent to spend, to confirm the allowance isn't empty. The agent wallet is a normal Sui address the agent controls; its spending power is bounded by this balance.",
380
+ inputSchema: z.object({
381
+ agent: z.string().describe('The agent wallet 0x address.'),
382
+ network: networkSchema,
383
+ }),
384
+ handler: agentWalletStatus,
385
+ },
386
+ {
387
+ name: 'agent_wallet_fund',
388
+ description: "Build (do not sign) a tx that funds an agent wallet: split amount_mist from the OWNER's gas and send it to the agent address. The owner signs this with their own wallet — the agent never touches the owner's key. This sets the agent's allowance: its spending power is bounded by what's funded here. Returns base64 tx bytes.",
389
+ inputSchema: z.object({
390
+ owner: z.string().describe("0x address of the owner funding (signs and pays)."),
391
+ agent: z.string().describe('0x address of the agent wallet to fund.'),
392
+ amount_mist: z.string().describe('Amount to fund, in MIST (as a string).'),
393
+ network: networkSchema,
394
+ }),
395
+ handler: agentWalletFund,
396
+ },
397
+ {
398
+ name: 'agent_wallet_sweep',
399
+ description: "Build (do not sign) the agent-wallet kill switch: send the agent's entire native SUI balance back to the owner (via the gas-coin leftover), optionally plus specific object_ids. The agent signs this with its own key. Sweeping + not refunding is how an owner revokes a Tier-1 allowance wallet. Returns base64 tx bytes.",
400
+ inputSchema: z.object({
401
+ agent: z.string().describe('0x address of the agent wallet (signs and pays).'),
402
+ owner: z.string().describe('0x address to return funds to.'),
403
+ object_ids: z
404
+ .array(z.string())
405
+ .optional()
406
+ .describe('Optional non-SUI object ids to also return to the owner.'),
407
+ network: networkSchema,
408
+ }),
409
+ handler: agentWalletSweep,
410
+ },
411
+ {
412
+ name: 'sui_dry_run',
413
+ description: 'Simulate a built (unsigned) transaction without spending gas. Returns execution status, gas cost, and balance/object changes. Use to verify a tx-builder result before asking the host to sign it.',
414
+ inputSchema: z.object({
415
+ tx_bytes_base64: z.string().describe('Base64 tx bytes from a tx-builder tool.'),
416
+ network: networkSchema,
417
+ }),
418
+ handler: suiDryRun,
419
+ },
420
+ {
421
+ name: 'sui_decode_tx_bytes',
422
+ description: 'Decode unsigned tx bytes (from any builder tool) into a structured, human-readable summary: sender, gas data, inputs, and a step-by-step list of commands ("split N MIST from gas", "transfer to 0x…", "call pkg::module::fn(…)"). The "look before you sign" tool — verifies a built tx matches its stated intent. Pure offline decode, no RPC.',
423
+ inputSchema: z.object({
424
+ tx_bytes_base64: z.string().describe('Base64 tx bytes from a builder tool.'),
425
+ }),
426
+ handler: suiDecodeTxBytes,
427
+ },
428
+ {
429
+ name: 'sui_execute_signed_tx',
430
+ description: 'Submit a host-signed transaction. The toolkit holds no keys: the caller signs tx bytes from a builder tool and passes the signature(s) here. Returns the digest and execution effects.',
431
+ inputSchema: z.object({
432
+ tx_bytes_base64: z.string().describe('Base64 tx bytes that were signed.'),
433
+ signatures: z
434
+ .array(z.string())
435
+ .describe('One or more base64 signatures over the tx bytes (usually one).'),
436
+ network: networkSchema,
437
+ }),
438
+ handler: suiExecuteSignedTx,
439
+ },
440
+ {
441
+ name: 'walrus_publish',
442
+ description: 'Publish a blob to Walrus testnet/mainnet. Returns the Walrus blob id, which is content-addressable and durable. Use this when the user wants to store arbitrary bytes on a decentralized network instead of S3.',
443
+ inputSchema: z.object({
444
+ content: z
445
+ .string()
446
+ .describe('Content to publish. UTF-8 string or base64 if `encoding=base64`.'),
447
+ encoding: z.enum(['utf8', 'base64']).default('utf8'),
448
+ epochs: z
449
+ .number()
450
+ .int()
451
+ .min(1)
452
+ .default(5)
453
+ .describe('How many Walrus epochs to keep the blob alive.'),
454
+ publisher_url: z
455
+ .string()
456
+ .optional()
457
+ .describe('Override the Walrus publisher endpoint.'),
458
+ }),
459
+ handler: walrusPublish,
460
+ },
461
+ {
462
+ name: 'walrus_fetch',
463
+ description: 'Fetch a blob from Walrus by id. Returns UTF-8 text or base64 bytes depending on `as`.',
464
+ inputSchema: z.object({
465
+ blob_id: z.string().describe('The Walrus blob id returned by walrus_publish.'),
466
+ as: z.enum(['utf8', 'base64']).default('utf8'),
467
+ aggregator_url: z
468
+ .string()
469
+ .optional()
470
+ .describe('Override the Walrus aggregator endpoint.'),
471
+ }),
472
+ handler: walrusFetch,
473
+ },
474
+ ];
475
+ /** Build a fresh MCP server with every Sui-stack tool registered. */
476
+ export function createServer() {
477
+ const server = new Server({ name: 'suisei', version: PKG_VERSION }, { capabilities: { tools: {} } });
478
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
479
+ tools: tools.map((t) => ({
480
+ name: t.name,
481
+ description: t.description,
482
+ inputSchema: zodToJsonSchema(t.inputSchema),
483
+ })),
484
+ }));
485
+ server.setRequestHandler(CallToolRequestSchema, async (req) => {
486
+ const tool = tools.find((t) => t.name === req.params.name);
487
+ if (!tool) {
488
+ return {
489
+ content: [{ type: 'text', text: `Unknown tool: ${req.params.name}` }],
490
+ isError: true,
491
+ };
492
+ }
493
+ const parsed = tool.inputSchema.safeParse(req.params.arguments ?? {});
494
+ if (!parsed.success) {
495
+ return {
496
+ content: [
497
+ {
498
+ type: 'text',
499
+ text: `Bad arguments for ${tool.name}: ${parsed.error.message}`,
500
+ },
501
+ ],
502
+ isError: true,
503
+ };
504
+ }
505
+ try {
506
+ const text = await tool.handler(parsed.data);
507
+ return { content: [{ type: 'text', text }] };
508
+ }
509
+ catch (e) {
510
+ return {
511
+ content: [
512
+ {
513
+ type: 'text',
514
+ text: `Tool ${tool.name} failed: ${e instanceof Error ? e.message : String(e)}`,
515
+ },
516
+ ],
517
+ isError: true,
518
+ };
519
+ }
520
+ });
521
+ return server;
522
+ }
523
+ /**
524
+ * Minimal Zod → JSON-Schema converter for the inputs we actually use
525
+ * here. Avoids pulling a 50KB schema library into a server that just
526
+ * needs to describe a handful of flat tool-input objects.
527
+ */
528
+ function zodToJsonSchema(schema) {
529
+ const shape = schema.shape;
530
+ const properties = {};
531
+ const required = [];
532
+ for (const [key, field] of Object.entries(shape)) {
533
+ properties[key] = describeField(field);
534
+ if (!(field instanceof z.ZodOptional) && !(field instanceof z.ZodDefault)) {
535
+ required.push(key);
536
+ }
537
+ }
538
+ return {
539
+ type: 'object',
540
+ properties,
541
+ required,
542
+ additionalProperties: false,
543
+ };
544
+ }
545
+ function describeField(field) {
546
+ const description = field.description ?? undefined;
547
+ const base = (out) => (description ? { ...out, description } : out);
548
+ if (field instanceof z.ZodString)
549
+ return base({ type: 'string' });
550
+ if (field instanceof z.ZodNumber)
551
+ return base({ type: 'number' });
552
+ if (field instanceof z.ZodBoolean)
553
+ return base({ type: 'boolean' });
554
+ if (field instanceof z.ZodEnum) {
555
+ return base({ type: 'string', enum: field.options });
556
+ }
557
+ if (field instanceof z.ZodArray) {
558
+ return base({ type: 'array', items: describeField(field.element) });
559
+ }
560
+ if (field instanceof z.ZodOptional) {
561
+ return describeField(field.unwrap());
562
+ }
563
+ if (field instanceof z.ZodDefault) {
564
+ const inner = describeField(field._def.innerType);
565
+ return { ...inner, default: field._def.defaultValue() };
566
+ }
567
+ return base({});
568
+ }
569
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { SuiClient } from '@mysten/sui/client';
2
+ import { SuiGrpcClient } from '@mysten/sui/grpc';
3
+ export type Network = 'testnet' | 'mainnet' | 'devnet';
4
+ /**
5
+ * The build-capable client every tool uses today. JSON-RPC until the SDK
6
+ * supports transaction resolution over gRPC/GraphQL (see note above).
7
+ */
8
+ export declare function clientFor(network: Network): SuiClient;
9
+ /**
10
+ * gRPC client — the forward-looking transport. Reads (balances, coins,
11
+ * owned objects, dynamic fields, gas price, getTransaction, dryRun,
12
+ * execute) work today; transaction *building* does not yet. Exposed so
13
+ * read tools can migrate incrementally and so the eventual cutover is a
14
+ * one-line change in `clientFor`.
15
+ */
16
+ export declare function grpcClientFor(network: Network): SuiGrpcClient;