@zktx.io/sui-mcp 0.6.2 → 0.7.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 (42) hide show
  1. package/README.md +13 -12
  2. package/dist/adapters/adapterPromptSurfaces.js +1 -1
  3. package/dist/core/read/deepbookReadHelpers.js +1 -1
  4. package/dist/core/read/readResponseGuidance.js +6 -6
  5. package/dist/core/session/settingsFileProtocol.js +1 -1
  6. package/dist/mcp/prompts.js +10 -4
  7. package/dist/mcp/resources.js +1 -1
  8. package/dist/mcp/server.js +2 -2
  9. package/dist/mcp/serverInfo.js +13 -12
  10. package/dist/mcp/toolNames.js +46 -46
  11. package/dist/mcp/tools/action/prepareSuiActionReview.js +4 -4
  12. package/dist/mcp/tools/read/deepbookReadTools.js +1 -1
  13. package/dist/mcp/tools/read/index.js +2 -2
  14. package/dist/mcp/tools/read/readToolHelpers.js +1 -1
  15. package/dist/mcp/tools/read/serverStatusTools.js +4 -5
  16. package/dist/mcp/tools/read/transactionActivityTools.js +3 -3
  17. package/dist/mcp/tools/session/walletConnectionTools.js +5 -5
  18. package/dist/mcp-app/account.html +1 -1
  19. package/dist/mcp-app/chart.html +1 -1
  20. package/dist/mcp-app/connect.html +1 -1
  21. package/dist/mcp-app/receipt.html +1 -1
  22. package/dist/mcp-app/review.html +1 -1
  23. package/dist/mcp-app/settings.html +1 -1
  24. package/dist/runtime/application.js +2 -2
  25. package/dist/runtime/config.js +3 -6
  26. package/dist/runtime/localSettingsService.js +4 -4
  27. package/dist/runtime/shared/control.js +2 -2
  28. package/dist/runtime/smokeMainnetRead.js +18 -18
  29. package/dist/runtime/smokeReview.js +7 -7
  30. package/dist/runtime/start.js +1 -1
  31. package/docs/AGENT_BEHAVIOR.md +78 -77
  32. package/docs/LOCAL_DB_ARCHITECTURE.md +5 -7
  33. package/docs/MCP_SETUP.md +76 -73
  34. package/docs/MCP_TOOLS.md +103 -102
  35. package/docs/SDK_API.md +8 -5
  36. package/docs/SIGNABLE_ADAPTER_CONTRACT.md +6 -6
  37. package/docs/TRANSACTION_ACTIVITY_LOG.md +7 -7
  38. package/docs/UTILITY_INDEX.md +59 -59
  39. package/docs/WALLET_CONNECTION.md +6 -5
  40. package/package.json +1 -1
  41. package/protocols/deepbook-margin.md +1 -1
  42. package/protocols/deepbook-v3.md +2 -2
package/docs/MCP_TOOLS.md CHANGED
@@ -6,7 +6,7 @@ This document is the MCP API reference. It owns tool contracts, response fields,
6
6
 
7
7
  It does not own installation steps or user-question playbooks. Installation and client setup live in `docs/MCP_SETUP.md`. User-question flows and response wording live in `docs/AGENT_BEHAVIOR.md`.
8
8
 
9
- Tool names use dot prefixes and avoid arbitrary shell, arbitrary Move calls, and private-key handling.
9
+ Tool names use `domain_verb_object`. A name does not grant authority; input schemas, card visibility and scoped permission checks define the allowed effects. Tools do not expose arbitrary shell commands, arbitrary Move calls or private-key handling.
10
10
 
11
11
  The local stdio gateway forwards each request through authenticated internal
12
12
  HTTP. A request body must fit within 4 MiB, including the entire MCP JSON-RPC
@@ -37,32 +37,32 @@ not grant input permission; a saved card is read through its bound resource.
37
37
 
38
38
  | Tool | Status | Purpose |
39
39
  | --- | --- | --- |
40
- | `read.get_server_status` | Implemented | Returns package, version, evidence policy, network, runtime, `implementedToolsCount`, resources, prompts, and tool implementation status. |
41
- | `read.list_supported_protocols` | Implemented | Lists current mainnet protocol surfaces and support levels. |
42
- | `read.list_deepbook_pools` | Implemented | Lists DeepBook mainnet pools from pinned `@mysten/deepbook-v3` constants. |
43
- | `read.list_deepbook_tokens` | Implemented | Lists DeepBook mainnet tokens from pinned `@mysten/deepbook-v3` constants. |
44
- | `read.inspect_deepbook_orderbook` | Implemented | Uses pinned DeepBook SDK read methods over Sui gRPC simulation reads with an internal sender placeholder; `ticks` is capped at 50. |
45
- | `read.get_deepbook_mid_price` | Implemented | Returns a DeepBook pool mid price snapshot from pinned SDK simulation reads. |
46
- | `read.get_deepbook_usdc_price_history` | Implemented | Returns DeepBookV3 official Indexer USDC candle evidence for a requested official interval. |
47
- | `read.get_deepbook_usdc_price_at_time` | Implemented | Returns the DeepBookV3 official Indexer USDC candle for or nearest to one target UTC time. |
48
- | `read.quote_deepbook_action` | Implemented | Quotes raw integer DeepBook quantities through pinned SDK transaction builders and raw `u64` simulation return values with an internal sender placeholder. |
49
- | `read.quote_deepbook_display_amount` | Implemented | Converts an explicit display source amount through pinned DeepBook token units, then returns scoped display quote facts plus raw quote evidence. |
50
- | `read.summarize_deepbook_account_inventory` | Implemented | Summarizes active-account DeepBook BalanceManager inventory through pinned SDK simulation reads. |
51
- | `read.summarize_wallet_assets` | Implemented | Reads coin balances for an explicit address or the active account through Sui gRPC `client.core.listBalances`; accepts `cursor` for pagination. |
52
- | `read.classify_wallet_assets` | Implemented | Classifies coin balances for an explicit address or the active account by balanceStatus and coin-balance roles; accepts `cursor` for pagination. |
53
- | `read.list_settlement_asset_groups` | Implemented | Lists supported settlement asset groups derived from pinned mainnet SDK registries. |
54
- | `read.summarize_settlement_asset_group_parity` | Implemented | Summarizes direct DeepBook mid-price parity across a supported settlement asset group against a declared measurement reference. |
55
- | `read.preview_intent_evidence` | Implemented | Builds current wallet and DeepBook evidence for a natural-language settlement intent; not transaction building or signing. |
56
- | `read.list_review_activity` | Implemented | Lists local Sui MCP review evidence for one account. |
57
- | `read.summarize_review_funnel` | Implemented | Summarizes local review lifecycle counts, status distribution, and review timing. |
58
- | `read.get_review_session_detail` | Implemented | Returns stored local evidence for one Sui MCP review session. |
59
- | `read.inspect_sui_transaction` | Implemented | Looks up one Sui transaction digest and stores normalized facts only when the transaction sender or a returned balance-change owner matches a known local wallet. |
60
- | `read.scan_sui_account_activity` | Implemented | Runs a bounded GraphQL activity scan for a known or explicit Sui account. |
61
- | `read.summarize_sui_activity_scan` | Implemented | Runs a bounded Sui activity scan and returns requested-account facts plus deterministic normalized-fact analysis without full details. |
62
- | `read.scan_sui_function_activity` | Implemented | Runs a bounded GraphQL scan for transactions the account sent that called one full `package::module::function`. |
63
- | `read.summarize_sui_function_activity_scan` | Implemented | Runs the sent-function activity scan and returns requested-account facts plus deterministic normalized-fact analysis without full details. |
64
- | `read.summarize_sui_account_activity` | Implemented | Summarizes stored normalized Sui activity facts from local SQLite. |
65
- | `read.get_account_asset_timeline` | Implemented | Builds stored local account asset net-flow bars from normalized activity facts and optional DeepBook USDC token-denominated candle references. Not held balances or complete wallet history. |
40
+ | `read_get_server_status` | Implemented | Returns package, version, evidence policy, network, runtime, `implementedToolsCount`, resources, prompts, and tool implementation status. |
41
+ | `read_list_supported_protocols` | Implemented | Lists current mainnet protocol surfaces and support levels. |
42
+ | `read_list_deepbook_pools` | Implemented | Lists DeepBook mainnet pools from pinned `@mysten/deepbook-v3` constants. |
43
+ | `read_list_deepbook_tokens` | Implemented | Lists DeepBook mainnet tokens from pinned `@mysten/deepbook-v3` constants. |
44
+ | `read_inspect_deepbook_orderbook` | Implemented | Uses pinned DeepBook SDK read methods over Sui gRPC simulation reads with an internal sender placeholder; `ticks` is capped at 50. |
45
+ | `read_get_deepbook_mid_price` | Implemented | Returns a DeepBook pool mid price snapshot from pinned SDK simulation reads. |
46
+ | `read_get_deepbook_usdc_price_history` | Implemented | Returns DeepBookV3 official Indexer USDC candle evidence for a requested official interval. |
47
+ | `read_get_deepbook_usdc_price_at_time` | Implemented | Returns the DeepBookV3 official Indexer USDC candle for or nearest to one target UTC time. |
48
+ | `read_quote_deepbook_action` | Implemented | Quotes raw integer DeepBook quantities through pinned SDK transaction builders and raw `u64` simulation return values with an internal sender placeholder. |
49
+ | `read_quote_deepbook_display_amount` | Implemented | Converts an explicit display source amount through pinned DeepBook token units, then returns scoped display quote facts plus raw quote evidence. |
50
+ | `read_summarize_deepbook_account_inventory` | Implemented | Summarizes active-account DeepBook BalanceManager inventory through pinned SDK simulation reads. |
51
+ | `read_summarize_wallet_assets` | Implemented | Reads coin balances for an explicit address or the active account through Sui gRPC `client.core.listBalances`; accepts `cursor` for pagination. |
52
+ | `read_classify_wallet_assets` | Implemented | Classifies coin balances for an explicit address or the active account by balanceStatus and coin-balance roles; accepts `cursor` for pagination. |
53
+ | `read_list_settlement_asset_groups` | Implemented | Lists supported settlement asset groups derived from pinned mainnet SDK registries. |
54
+ | `read_summarize_settlement_asset_group_parity` | Implemented | Summarizes direct DeepBook mid-price parity across a supported settlement asset group against a declared measurement reference. |
55
+ | `read_preview_intent_evidence` | Implemented | Builds current wallet and DeepBook evidence for a natural-language settlement intent; not transaction building or signing. |
56
+ | `read_list_review_activity` | Implemented | Lists local Sui MCP review evidence for one account. |
57
+ | `read_summarize_review_funnel` | Implemented | Summarizes local review lifecycle counts, status distribution, and review timing. |
58
+ | `read_get_review_session_detail` | Implemented | Returns stored local evidence for one Sui MCP review session. |
59
+ | `read_inspect_sui_transaction` | Implemented | Looks up one Sui transaction digest and stores normalized facts only when the transaction sender or a returned balance-change owner matches a known local wallet. |
60
+ | `read_scan_sui_account_activity` | Implemented | Runs a bounded GraphQL activity scan for a known or explicit Sui account. |
61
+ | `read_summarize_sui_activity_scan` | Implemented | Runs a bounded Sui activity scan and returns requested-account facts plus deterministic normalized-fact analysis without full details. |
62
+ | `read_scan_sui_function_activity` | Implemented | Runs a bounded GraphQL scan for transactions the account sent that called one full `package::module::function`. |
63
+ | `read_summarize_sui_function_activity_scan` | Implemented | Runs the sent-function activity scan and returns requested-account facts plus deterministic normalized-fact analysis without full details. |
64
+ | `read_summarize_sui_account_activity` | Implemented | Summarizes stored normalized Sui activity facts from local SQLite. |
65
+ | `read_get_account_asset_timeline` | Implemented | Builds stored local account asset net-flow bars from normalized activity facts and optional DeepBook USDC token-denominated candle references. Not held balances or complete wallet history. |
66
66
 
67
67
  Read-only tools split by address requirement.
68
68
 
@@ -112,15 +112,15 @@ Token list entries are keyed by SDK symbol and include the pool keys that refere
112
112
 
113
113
  Token entries include `decimals` derived only from pinned `mainnetCoins.scalar` when every scalar is a power of ten. If that invariant fails, the token registry tool fails closed instead of guessing.
114
114
 
115
- `read.get_deepbook_mid_price` returns `priceDirection: "quote_per_base"`, so a `SUI_USDC` result is USDC per SUI.
115
+ `read_get_deepbook_mid_price` returns `priceDirection: "quote_per_base"`, so a `SUI_USDC` result is USDC per SUI.
116
116
 
117
117
  The price is the pinned SDK `midPrice` result with `source.precision: "deepbook_v3_to_fixed_9_js_number"`.
118
118
 
119
119
  The response includes `priceSemantics` and `userAnswerUse.cannotAnswer` for unsupported conclusions. It is a DeepBook pool snapshot, not a global market price, fiat USD cash-out estimate, external market-price conversion, USDC/USD peg assumption, quote-vs-mid slippage calculation, effective quote price, price-impact calculation, venue comparison, best-route claim, route recommendation, transaction-building input, signing data, signing readiness, P&L, or cost basis.
120
120
 
121
- If the SDK returns a non-positive or non-finite mid price, both `read.get_deepbook_mid_price` and `read.inspect_deepbook_orderbook` fail closed with `quote_unavailable`.
121
+ If the SDK returns a non-positive or non-finite mid price, both `read_get_deepbook_mid_price` and `read_inspect_deepbook_orderbook` fail closed with `quote_unavailable`.
122
122
 
123
- `read.get_deepbook_usdc_price_history` returns DeepBookV3 official Indexer USDC candle evidence for a requested official interval.
123
+ `read_get_deepbook_usdc_price_history` returns DeepBookV3 official Indexer USDC candle evidence for a requested official interval.
124
124
 
125
125
  Inputs require `start` and `end` as canonical ISO 8601 UTC timestamps and exactly one selector: `poolName`, `assetSymbol`, or `coinType`. Optional `interval` accepts only official Indexer interval values and defaults to `15m`.
126
126
 
@@ -148,7 +148,7 @@ USDC in this tool is the token-denominated quote asset for the returned official
148
148
 
149
149
  This output is not a live quote, execution price, historical mid price, global market price, fiat USD cash-out estimate, external market-price conversion, USDC/USD peg assumption, route recommendation, best route, transaction-building input, signing data, signing readiness, P&L, tax evidence, cost basis, user-account transaction history, or user-account balance history.
150
150
 
151
- `read.get_deepbook_usdc_price_at_time` uses the same official Indexer candle source and selector rules, but accepts one `targetTime` instead of a range. Optional `interval` defaults to `15m`. Optional `maxDistanceMinutes` limits how far from the target time the tool may select a candle.
151
+ `read_get_deepbook_usdc_price_at_time` uses the same official Indexer candle source and selector rules, but accepts one `targetTime` instead of a range. Optional `interval` defaults to `15m`. Optional `maxDistanceMinutes` limits how far from the target time the tool may select a candle.
152
152
 
153
153
  Successful at-time responses return:
154
154
 
@@ -162,13 +162,13 @@ Successful at-time responses return:
162
162
 
163
163
  `status: "no_price_in_search_window"` means no official Indexer candle was available inside the bounded search window. The tool does not synthesize a price, interpolate, carry forward a previous candle outside the search window, or perform an on-demand chain-history scan.
164
164
 
165
- Internal read cards are opened with `ui.open_account`, `ui.open_receipt`, and `ui.open_chart`. They require a client that provides MCP Apps. A client without that UI receives `ui_unavailable`; ordinary MCP read tools remain available.
165
+ Internal read cards are opened with `ui_open_account`, `ui_open_receipt`, and `ui_open_chart`. They require a client that provides MCP Apps. A client without that UI receives `ui_unavailable`; ordinary MCP read tools remain available.
166
166
 
167
167
  | Tool | Input and result |
168
168
  | --- | --- |
169
- | `ui.open_account` | Optional explicit Sui address; otherwise use the selected read account only when its wallet connection is currently usable. Missing input returns `input_required` with no card or source query. Shows name, address, coin totals, Display NFTs, other-object count, fetched time and enumeration limits; no address form. |
170
- | `ui.open_receipt` | A transaction digest is required for a query. Omission returns `input_required` with no card or source query. The result view shows execution outcome, balance changes, net gas, sender, digest and fetched time; no hash form. No wallet or active account is needed. Normalized receipt evidence and private display metadata remain available under their existing boundaries. |
171
- | `ui.open_chart` | Optional `poolName`, official Indexer interval, UTC `startTimeMs`/`endTimeMs`, and candle `limit`. Shows one selected USDC pool as candlesticks and volume. Range shortcuts fill these query fields. The initial time axis uses the saved request boundaries, with price-free whitespace at boundaries without candles; omitted boundaries use the returned data. |
169
+ | `ui_open_account` | Optional explicit Sui address; otherwise use the selected read account only when its wallet connection is currently usable. Missing input returns `input_required` with no card or source query. Shows name, address, coin totals, Display NFTs, other-object count, fetched time and enumeration limits; no address form. |
170
+ | `ui_open_receipt` | A transaction digest is required for a query. Omission returns `input_required` with no card or source query. The result view shows execution outcome, balance changes, net gas, sender, digest and fetched time; no hash form. No wallet or active account is needed. Normalized receipt evidence and private display metadata remain available under their existing boundaries. |
171
+ | `ui_open_chart` | Optional `poolName`, official Indexer interval, UTC `startTimeMs`/`endTimeMs`, and candle `limit`. Shows one selected USDC pool as candlesticks and volume. Range shortcuts fill these query fields. The initial time axis uses the saved request boundaries, with price-free whitespace at boundaries without candles; omitted boundaries use the returned data. |
172
172
 
173
173
  A missing Account/Receipt target returns `data: { kind, status: "input_required", field, message }`, with no permission, card ID, saved resource or query. A host-rendered view shows the message without input controls or polling. Other errors remain errors.
174
174
 
@@ -176,7 +176,7 @@ A successful card-creating response contains a `cardId`, `kind`, `state`, `revis
176
176
 
177
177
  When Chart pool choices cannot be prepared, the backend creates a `closed`/`failed` card with a readable error. No selection is admitted and no candles are requested. Reading that card again returns the stored failure; retrying the source requires an explicit request for a new card. A database access or write failure is a tool error, not a successfully stored failure card.
178
178
 
179
- `ui.read_card` and `ui.submit_card` are app-only operations. Permission travels in UI metadata and is absent from model content and public saved resources. Input submission carries card ID, permission, expected revision and typed input. There is no first-view ownership or open/close operation. Recreated frames and chat returns read the same DB record. Identical duplicate input returns the stored request; conflicting input returns `card_conflict` and the authenticated current snapshot in error details. Invalid input returns `invalid_card_input` without consuming a valid selection. Invalid permission exposes neither current state nor private display data.
179
+ `ui_read_card` and `ui_submit_card` are app-only operations. Permission travels in UI metadata and is absent from model content and public saved resources. Input submission carries card ID, permission, expected revision and typed input. There is no first-view ownership or open/close operation. Recreated frames and chat returns read the same DB record. Identical duplicate input returns the stored request; conflicting input returns `card_conflict` and the authenticated current snapshot in error details. Invalid input returns `invalid_card_input` without consuming a valid selection. Invalid permission exposes neither current state nor private display data.
180
180
 
181
181
  Receipt model results retain input kinds/indices/object references and identify input values and PTB as UI-only details. Receipt and completed Review show the executed transaction graph above their result summary when bound private metadata is available. Technical records are in one Details slide. Missing metadata leaves the saved result available without inventing a graph. The typed `sui-mcp/receipt-display` metadata binds display data to the same card ID, transaction digest and revision. It carries individual on-chain Pure input values and the graph derived from those inputs; never a serialized transaction, signature or wallet credential. Public saved resources contain only the model projection. A missing UI detail payload means unavailable display data, not that a transaction had no inputs.
182
182
 
@@ -249,7 +249,7 @@ For unadmitted disconnection or account selection, the exact target in
249
249
  card input remains available. An account returning later does not revive that
250
250
  attempt or clear its local automatic pause; the user can make a new selection.
251
251
  If an unknown result needs another lookup after the card's action period, request
252
- `session.open_review_management` with the same `reviewSessionId` and `attemptId`.
252
+ `session_open_review_management` with the same `reviewSessionId` and `attemptId`.
253
253
  It adds no signing authority and does not repeat the transaction.
254
254
 
255
255
  A confirmation that joins an older in-flight read retains its obligation. After
@@ -263,20 +263,20 @@ Review displays one current wallet candidate without a dropdown. Its current aut
263
263
  Cards provide no clipboard actions or copy buttons. Their text remains readable and selectable. Chart values remain USDC-denominated source candles, not fiat USD, peg guarantees, route advice, portfolio valuation or P&L. Cards do not fetch chain/Indexer endpoints directly or poll completed results.
264
264
 
265
265
 
266
- `read.quote_deepbook_action` and `read.quote_deepbook_display_amount` use the pinned DeepBook transaction builder quote functions.
266
+ `read_quote_deepbook_action` and `read_quote_deepbook_display_amount` use the pinned DeepBook transaction builder quote functions.
267
267
 
268
268
  Input kinds:
269
269
 
270
- - `read.quote_deepbook_action`: `quantitySemantics.inputAmountKind: "raw_u64"`.
271
- - `read.quote_deepbook_display_amount`: `inputAmountKind: "display_source_amount_converted_to_raw_u64"`.
270
+ - `read_quote_deepbook_action`: `quantitySemantics.inputAmountKind: "raw_u64"`.
271
+ - `read_quote_deepbook_display_amount`: `inputAmountKind: "display_source_amount_converted_to_raw_u64"`.
272
272
 
273
273
  Quote responses include `quantitySemantics` before the public quote values. The same response also includes `userAnswerUse.cannotAnswer` for unsupported conclusions such as payment coverage, shortfall contribution, route-dependent payment support, fiat USD cash-out, external market conversion or lookup, USDC/USD peg assumptions, P&L, cost basis, price impact, mid-price slippage, venue comparison, and route recommendation.
274
274
 
275
275
  `canUseForPaymentAnswer: false`, `canUseForShortfallAnswer: false`, `doNotCombineWithPaymentAnswer: true`, and `paymentAnswerUseBlockedReason` mean quote output is a price estimate only. Do not add it to the payment amount, coverage status, or shortfall amount in a user answer.
276
276
 
277
- `requiredPaymentAnswerTool: "read.preview_intent_evidence"` and `requiredPaymentAnswerField: "responseSummary"` identify the tool and field to use for payment amount and shortfall answers.
277
+ `requiredPaymentAnswerTool: "read_preview_intent_evidence"` and `requiredPaymentAnswerField: "responseSummary"` identify the tool and field to use for payment amount and shortfall answers.
278
278
 
279
- The same response-local rule is also exposed as `userAnswerUse.followUp.tool: "read.preview_intent_evidence"` and `userAnswerUse.followUp.answerFields: ["responseSummary"]`.
279
+ The same response-local rule is also exposed as `userAnswerUse.followUp.tool: "read_preview_intent_evidence"` and `userAnswerUse.followUp.answerFields: ["responseSummary"]`.
280
280
 
281
281
  Raw quote source:
282
282
 
@@ -287,7 +287,7 @@ Raw quote source:
287
287
 
288
288
  Returned raw fields are quote evidence only. They are not final min-out values, effective prices, price-impact calculations, venue comparisons, best-route claims, transaction-building inputs, signing data, or signing readiness.
289
289
 
290
- `read.quote_deepbook_display_amount` accepts `amountDisplay` as the source coin input amount for the requested `direction`.
290
+ `read_quote_deepbook_display_amount` accepts `amountDisplay` as the source coin input amount for the requested `direction`.
291
291
 
292
292
  It does not accept output target amounts or inverse quote requests.
293
293
 
@@ -310,7 +310,7 @@ This quote is not a settlement asset choice.
310
310
 
311
311
  ### DeepBook account inventory
312
312
 
313
- `read.summarize_deepbook_account_inventory` uses the selected account only when its current wallet connection is usable, to discover DeepBook BalanceManager addresses. It has no explicit public-address input. Without a usable default, a missing selection returns `active_account_not_set`, and a stored but ineligible selection returns `input_invalid`; both carry `details.reason: "connected_account_required"` and `details.followUp` naming `session.get_interaction_status` and its connection/availability/pending/default-account fields. These responses do not request an address. Unavailable wallet operations return `wallet_unavailable` with the existing safe reason and recovery message.
313
+ `read_summarize_deepbook_account_inventory` uses the selected account only when its current wallet connection is usable, to discover DeepBook BalanceManager addresses. It has no explicit public-address input. Without a usable default, a missing selection returns `active_account_not_set`, and a stored but ineligible selection returns `input_invalid`; both carry `details.reason: "connected_account_required"` and `details.followUp` naming `session_get_interaction_status` and its connection/availability/pending/default-account fields. These responses do not request an address. Unavailable wallet operations return `wallet_unavailable` with the existing safe reason and recovery message.
314
314
 
315
315
  With both `poolKey` and `managerAddress`, it checks pool account existence and returns display-like account inventory:
316
316
 
@@ -332,9 +332,9 @@ Returned `quantitySemantics.kind: "deepbook_display_number"` means these `number
332
332
 
333
333
  They are not raw balances, route liquidity, funding sources, withdrawal readiness, transaction-building inputs, signing data, or signing readiness.
334
334
 
335
- `read.summarize_wallet_assets` accepts an optional `account` input for public-address coin balance snapshots.
335
+ `read_summarize_wallet_assets` accepts an optional `account` input for public-address coin balance snapshots.
336
336
 
337
- When `account` is omitted, it uses the same connection-qualified default as `session.get_interaction_status.assetReadAccount`. No stored selection returns `active_account_not_set` with `details.action: "provide_account"`; a stored but ineligible selection returns `input_invalid` with `details.reason: "address_required"`. Both request an explicit address. SDK unavailability is not reported as absence of a stored account.
337
+ When `account` is omitted, it uses the same connection-qualified default as `session_get_interaction_status.assetReadAccount`. No stored selection returns `active_account_not_set` with `details.action: "provide_account"`; a stored but ineligible selection returns `input_invalid` with `details.reason: "address_required"`. Both request an explicit address. SDK unavailability is not reported as absence of a stored account.
338
338
 
339
339
  An explicit `account` read does not prove ownership, store the address as a known wallet, or create active account context.
340
340
 
@@ -356,7 +356,7 @@ If Sui metadata is unavailable, DeepBook-registered tokens can use pinned scalar
356
356
 
357
357
  If no verified decimals exist, `unit.status` is `unavailable` and clients must not infer decimals from the token symbol.
358
358
 
359
- `read.classify_wallet_assets` reuses the same explicit-address or active-account balance, unit, display, metadata cache behavior, and wallet snapshot quantity semantics as `read.summarize_wallet_assets`.
359
+ `read_classify_wallet_assets` reuses the same explicit-address or active-account balance, unit, display, metadata cache behavior, and wallet snapshot quantity semantics as `read_summarize_wallet_assets`.
360
360
 
361
361
  It wraps each coin balance in `classification.assetClass: "coin_balance"`, `classification.balanceStatus`, and role labels such as `gas_candidate` or `deepbook_registered`.
362
362
 
@@ -372,7 +372,7 @@ It also would not make them route liquidity, payment readiness, portfolio comple
372
372
 
373
373
  The classifier does not create funding plans, choose routes, create review sessions, return transaction bytes, or produce signing material.
374
374
 
375
- `read.list_settlement_asset_groups` returns the supported natural-language settlement asset groups.
375
+ `read_list_settlement_asset_groups` returns the supported natural-language settlement asset groups.
376
376
 
377
377
  In this release, `SUI_USD_SETTLEMENT_ASSETS` maps aliases such as dollar, dollars, USD, USD-like, stablecoin, stablecoins, and Korean dollar-word wording.
378
378
 
@@ -382,7 +382,7 @@ The asset group output includes included assets, excluded assets, source authori
382
382
 
383
383
  This is static SDK registry evidence, not live liquidity, fiat USD support, payment execution, route recommendation, or signing readiness.
384
384
 
385
- `read.summarize_settlement_asset_group_parity` returns internal parity evidence for a supported settlement asset group.
385
+ `read_summarize_settlement_asset_group_parity` returns internal parity evidence for a supported settlement asset group.
386
386
 
387
387
  In this release it measures USD-denominated group assets against a declared reference asset. The default reference is USDC, but only as `measurement_reference_not_settlement_choice`.
388
388
 
@@ -398,7 +398,7 @@ Use `responseSummary` for questions about internal USD-denominated parity, highe
398
398
 
399
399
  This tool is not settlement-token choice, fiat USD cash-out, external market lookup, USDC/USD peg assumption, payment readiness, best route, route recommendation, transaction building, signing readiness, P&L, or cost basis.
400
400
 
401
- `read.preview_intent_evidence` accepts natural-language settlement evidence intents.
401
+ `read_preview_intent_evidence` accepts natural-language settlement evidence intents.
402
402
 
403
403
  Use it this way:
404
404
 
@@ -410,7 +410,7 @@ For settlement-asset-only coverage, shortfall, and balance-total answers, use `r
410
410
 
411
411
  The response also exposes `userAnswerUse.answerFields` with the response-specific answer path.
412
412
 
413
- `responseSummary.answerCompleteness.answerCompleteFor` names the answer class. `responseSummary.answerCompleteness.requiredAnswerFields` names the fields required for that class. Do not call quote tools for the same question when `responseSummary.doNotCallQuoteToolsForThisQuestion` is `true`. If `toolAvailability.requiredToolsAvailable` is also `true`, answer from `responseSummary` and do not call `read.classify_wallet_assets`, `read.summarize_wallet_assets`, or quote tools to look for other source tokens for that same coverage, balance-total, or shortfall question. If quote tools were already called, do not use quote output for the payment amount, coverage status, or shortfall.
413
+ `responseSummary.answerCompleteness.answerCompleteFor` names the answer class. `responseSummary.answerCompleteness.requiredAnswerFields` names the fields required for that class. Do not call quote tools for the same question when `responseSummary.doNotCallQuoteToolsForThisQuestion` is `true`. If `toolAvailability.requiredToolsAvailable` is also `true`, answer from `responseSummary` and do not call `read_classify_wallet_assets`, `read_summarize_wallet_assets`, or quote tools to look for other source tokens for that same coverage, balance-total, or shortfall question. If quote tools were already called, do not use quote output for the payment amount, coverage status, or shortfall.
414
414
 
415
415
  `responseSummary` exposes:
416
416
 
@@ -460,7 +460,7 @@ The current `lowSampleThreshold` is 5 local records, from `REVIEW_ACTIVITY_LOW_S
460
460
 
461
461
  When `lowSampleWarning` is true, treat counts as sparse local evidence and avoid drawing behavior patterns.
462
462
 
463
- For `read.list_review_activity`, `dataScope.recordCount` is the full matching local review count.
463
+ For `read_list_review_activity`, `dataScope.recordCount` is the full matching local review count.
464
464
 
465
465
  The returned `activities` array can be shorter when `truncated.activities: true`.
466
466
 
@@ -468,25 +468,25 @@ The returned `activities` array can be shorter when `truncated.activities: true`
468
468
 
469
469
  MCP error responses intentionally omit `structuredContent`; clients should read the JSON error payload from `content[0].text`.
470
470
 
471
- `read.get_review_session_detail` transition rows include `isNoOp`.
471
+ `read_get_review_session_detail` transition rows include `isNoOp`.
472
472
 
473
473
  A no-op transition is an observed lifecycle call whose stored status did not change, such as a repeated open or reconnect event.
474
474
 
475
- `read.get_review_session_detail.userAnswerUse.answerFields` lists `execution` only when the response includes an `execution` object. If `execution` is absent and `userAnswerUse.cannotAnswer` includes `stored_review_execution_result_without_execution_field`, the response cannot answer a stored execution-result question.
475
+ `read_get_review_session_detail.userAnswerUse.answerFields` lists `execution` only when the response includes an `execution` object. If `execution` is absent and `userAnswerUse.cannotAnswer` includes `stored_review_execution_result_without_execution_field`, the response cannot answer a stored execution-result question.
476
476
 
477
477
  Funnel summaries count distinct reviews and do not treat repeated no-op rows as additional completed steps.
478
478
 
479
479
  Sui activity tools are user-requested read surfaces, not a background indexer.
480
480
 
481
- Summary activity tools omit full transaction details by design. Digest-level detail is exposed by `read.inspect_sui_transaction`.
481
+ Summary activity tools omit full transaction details by design. Digest-level detail is exposed by `read_inspect_sui_transaction`.
482
482
 
483
483
  Tool roles:
484
484
 
485
- - `read.inspect_sui_transaction` performs a single digest lookup.
486
- - `read.scan_sui_account_activity` requests up to 100 account transactions for `affected` or `sent` relationship.
487
- - `read.summarize_sui_activity_scan` reuses the live scan path and adds deterministic `analysis` without returning full `details`.
488
- - `read.scan_sui_function_activity` and `read.summarize_sui_function_activity_scan` return transactions the selected account sent that called one full `package::module::function`.
489
- - `read.summarize_sui_account_activity` reads only local SQLite stored facts.
485
+ - `read_inspect_sui_transaction` performs a single digest lookup.
486
+ - `read_scan_sui_account_activity` requests up to 100 account transactions for `affected` or `sent` relationship.
487
+ - `read_summarize_sui_activity_scan` reuses the live scan path and adds deterministic `analysis` without returning full `details`.
488
+ - `read_scan_sui_function_activity` and `read_summarize_sui_function_activity_scan` return transactions the selected account sent that called one full `package::module::function`.
489
+ - `read_summarize_sui_account_activity` reads only local SQLite stored facts.
490
490
 
491
491
  This is a bounded provider page, not complete wallet history.
492
492
 
@@ -512,7 +512,7 @@ Stored summary boundaries:
512
512
  - Stored summaries aggregate local account-level facts from digest lookups, account scans, or sent-function scans.
513
513
  - Scan kind is internal provenance.
514
514
  - Stored summary input does not accept `kind`, `function`, or function-history filters.
515
- - Legacy `summary` is the backward-compatible shallow count block.
515
+ - `summary` contains the stored transaction counts.
516
516
  - `analysis.overview.transactionCount` mirrors the stored count.
517
517
  - `analysis.overview.analyzedTransactionCount` reports how many returned rows fed the richer aggregations.
518
518
  - `transactionDetailAvailability` counts returned stored rows with `details`. `userAnswerUse.answerFields` includes `transactions[].compact` and `transactions[].details` only when `transactionDetailAvailability.allReturnedTransactionsHaveDetails: true`.
@@ -653,7 +653,7 @@ The local sender check is defensive. A non-conforming provider row is dropped fr
653
653
 
654
654
  For a stored known-account scan, the dropped row contributes only to skipped counts. It is not treated as valid function history.
655
655
 
656
- `read.scan_sui_account_activity` and `read.scan_sui_function_activity` return pagination and coverage fields:
656
+ `read_scan_sui_account_activity` and `read_scan_sui_function_activity` return pagination and coverage fields:
657
657
 
658
658
  - `hasMore`;
659
659
  - `continuationCursor`;
@@ -671,18 +671,18 @@ Provider cursors are opaque and best-effort. Cursor rejection returns a safe err
671
671
 
672
672
  Tool source comparison:
673
673
 
674
- - `read.scan_sui_account_activity`, `read.scan_sui_function_activity`, `read.summarize_sui_activity_scan`, and `read.summarize_sui_function_activity_scan` return live GraphQL row facts.
674
+ - `read_scan_sui_account_activity`, `read_scan_sui_function_activity`, `read_summarize_sui_activity_scan`, and `read_summarize_sui_function_activity_scan` return live GraphQL row facts.
675
675
  - Those live rows include requested-account fields, transaction context, and `detailLookup` references but no full `details`.
676
676
  - The summary tools also return deterministic `analysis`.
677
- - `read.inspect_sui_transaction` is the full normalized detail path for a specific digest.
678
- - `read.summarize_sui_account_activity` reads only stored normalized facts from local SQLite.
679
- - `read.get_account_asset_timeline` reads only stored normalized facts from local SQLite, then can attach DeepBookV3 official Indexer USDC candle references for supported USDC-quoted assets.
677
+ - `read_inspect_sui_transaction` is the full normalized detail path for a specific digest.
678
+ - `read_summarize_sui_account_activity` reads only stored normalized facts from local SQLite.
679
+ - `read_get_account_asset_timeline` reads only stored normalized facts from local SQLite, then can attach DeepBookV3 official Indexer USDC candle references for supported USDC-quoted assets.
680
680
 
681
- If stored or summary details are missing or capped, use the digest metadata with `read.inspect_sui_transaction` instead of inferring missing calls, balances, objects, events, gas, or errors.
681
+ If stored or summary details are missing or capped, use the digest metadata with `read_inspect_sui_transaction` instead of inferring missing calls, balances, objects, events, gas, or errors.
682
682
 
683
683
  ### Stored Account Asset Timeline
684
684
 
685
- `read.get_account_asset_timeline` returns a stored local account asset-flow timeline for one account and UTC range.
685
+ `read_get_account_asset_timeline` returns a stored local account asset-flow timeline for one account and UTC range.
686
686
 
687
687
  Inputs:
688
688
 
@@ -694,7 +694,7 @@ Output fields:
694
694
 
695
695
  - `coverage` describes whether stored scan rows prove the requested range is complete, partial, or absent.
696
696
  - `status: "account_not_known"` means the explicit account is not a known local wallet in the local activity store. In that status the tool does not return `scanNeeded`.
697
- - `scanNeeded`, when present, names `read.scan_sui_account_activity` as the bounded scan tool that can gather local evidence for a known account.
697
+ - `scanNeeded`, when present, names `read_scan_sui_account_activity` as the bounded scan tool that can gather local evidence for a known account.
698
698
  - `netFlowBars` are observed account-scoped raw token balance-change bars from stored normalized activity rows.
699
699
  - `balanceStatus` is currently `unavailable_no_balance_anchor`, and `balanceBars` is empty. Do not present net-flow bars as held balances.
700
700
  - `sourceTransactions` reports how many stored rows were read, returned, truncated, and detail-covered.
@@ -708,19 +708,19 @@ This tool does not run scans, start a background indexer, create a price cache,
708
708
 
709
709
  | Tool | Status | Purpose |
710
710
  | --- | --- | --- |
711
- | `action.prepare_sui_action_review` | Signable internal Review card | Creates a local review session and internal Review card for a supported swap action proposal. Account-bound DeepBook reviews may build local unsigned transaction material inside the review server, internally bind a Sui transaction digest to it, and derive object ownership, quote/policy, human-readable review, review-time simulation, and PTB visualization evidence. When every required evidence stage completes, an explicit Review card selection can admit backend-mediated WalletConnect approval for that exact transaction. The MCP tool does not return transaction bytes, signing data, or signing readiness. |
712
- | `action.prepare_external_proposal_review` | Non-signable review | Creates a local review session and internal Review card from an untrusted structured external proposal. It does not return transaction bytes. |
711
+ | `action_start_review` | Internal swap Review card | Creates a local review session and internal Review card for a supported swap action proposal. Account-bound DeepBook reviews may build local unsigned transaction material inside the review server, internally bind a Sui transaction digest to it, and derive object ownership, quote/policy, human-readable review, review-time simulation, and PTB visualization evidence. When every required evidence stage completes, an explicit Review card selection can admit backend-mediated WalletConnect approval for that exact transaction. The MCP tool does not return transaction bytes, signing data, or signing readiness. |
712
+ | `action_create_proposal_review` | Non-signable review | Creates a local review session and internal Review card from an untrusted structured external proposal. It does not return transaction bytes. |
713
713
 
714
- `action.prepare_sui_action_review` is account-bound: a swap review computes
714
+ `action_start_review` is account-bound: a swap review computes
715
715
  its evidence (balances, transaction material, digest, simulation) for a
716
716
  specific sender, so the tool requires an active wallet account. Connect first
717
- with `session.create_wallet_connection`; with no active account the tool returns
717
+ with `session_open_wallet_connection_card`; with no active account the tool returns
718
718
  `active_account_not_set` with `details.action: "connect_wallet_connection"`
719
719
  instead of creating a proposal that can never be computed or signed. The
720
720
  Review card reads that account from the server as the single source of truth
721
721
  and never connects a wallet itself.
722
722
 
723
- `action.prepare_sui_action_review` accepts a protocol-neutral swap `intent`
723
+ `action_start_review` accepts a protocol-neutral swap `intent`
724
724
  (`type: "swap"`, `from.symbol`, `from.amount`, `to.symbol`,
725
725
  `maxSlippageBps`, optional `protocol`). The optional `protocol` field carries
726
726
  the protocol slug from the adapter registry (the same slug vocabulary as the
@@ -731,7 +731,7 @@ omitted; once several protocols support the same action the tool returns
731
731
  `intent.protocol` set - the server never picks a venue silently. An unknown
732
732
  slug returns `reason: "unknown_protocol"` with the available slugs.
733
733
 
734
- `action.prepare_external_proposal_review` accepts `proposal` with `type:
734
+ `action_create_proposal_review` accepts `proposal` with `type:
735
735
  "payment"` or `type: "sui_action"`.
736
736
 
737
737
  Common required fields are `id`, `source`, `network: "sui:mainnet"`,
@@ -792,7 +792,7 @@ cards display those facts; neither the model nor the card receives bytes or
792
792
  signatures. Ordinary MCP calls cannot authorize signing or submission.
793
793
 
794
794
  After the wallet account is bound to a supported swap review session, the
795
- Review card and `session.get_review_status` may show protocol-specific quote
795
+ Review card and `session_get_review_status` may show protocol-specific quote
796
796
  evidence and review-state checks for:
797
797
 
798
798
  - resolved DeepBook direct pool;
@@ -819,8 +819,9 @@ Completed stages are review progress only. If
819
819
  `transaction_material_build_or_verify` is completed, it means the local review
820
820
  server built unsigned transaction material and kept the bytes internal. If
821
821
  `digest_commitment` is completed, it means the server internally derived a Sui
822
- transaction digest from that stored material; the digest value and transaction
823
- bytes are not MCP or review-app outputs. Missing stages explain why the review
822
+ transaction digest from that stored material; the schema-validated transaction-review contract may expose its commitment
823
+ hash, while transaction bytes remain private. The hash is not signing authority
824
+ or a wallet handoff. Missing stages explain why the review
824
825
  remains blocked. This lifecycle covers review evidence producer stages through
825
826
  review-time simulation. Wallet requests, signature verification, submission and
826
827
  chain observation are platform responsibilities after review, separate from
@@ -943,14 +944,14 @@ It is not a signing readiness signal. Review-state checks are pre-signing review
943
944
 
944
945
  | Tool | Input and result |
945
946
  | --- | --- |
946
- | `session.create_wallet_connection` | Opens an internal card with `intent: connect`, `disconnect` or `manage` (default). A connect-intent View automatically starts pairing after authenticated state confirmation; manage pairs only after the user chooses Connect wallet. A disconnect-intent card opens confirmation for a unique connected target. Disconnection requires target-specific confirmation and does not revoke onchain permissions. |
947
- | `session.get_wallet_connection` | Reads one `cardId`; public response excludes pairing and permission. |
948
- | `session.wait_wallet_connection` | Waits on one `cardId`, with an optional timeout up to 55 seconds; stops when user input is needed or the admitted connection/disconnection operation ends. |
949
- | `session.open_review_management` | Opens management for exact `reviewSessionId` + `attemptId`; no refresh or signing authority. |
950
- | `session.get_interaction_status` | Stored `activeAccount`, current-owner `connections`, `assetReadAccount`, wallet availability, and bounded pending connection/review lists. `assetReadAccount` is `available` with an account only when that selected address has a usable current connection; otherwise `address_required`. Stored `activeAccount` does not prove a live connection. `address_required` reports that no implicit default is available; it does not add an address input to connected-account-only tools. When wallet availability is unavailable, connection rows are last recorded facts, not proof of presence or absence. |
951
- | `session.get_review_status` | Current preparation status, review revision, optional current request and chain execution. |
952
- | `session.get_execution_result` | Observes the current explicitly referenced attempt and may read its known digest; never submits again. |
953
- | `session.wait_execution_result` | Bounded wait on the same request, separate from its signing and chain-observation deadlines. |
947
+ | `session_open_wallet_connection_card` | Opens an internal card with `intent: connect`, `disconnect` or `manage` (default). A connect-intent View automatically starts pairing after authenticated state confirmation; manage pairs only after the user chooses Connect wallet. A disconnect-intent card opens confirmation for a unique connected target. Disconnection requires target-specific confirmation and does not revoke onchain permissions. |
948
+ | `session_get_wallet_connection_card` | Reads one `cardId`; public response excludes pairing and permission. |
949
+ | `session_wait_wallet_connection_card` | Waits on one `cardId`, with an optional timeout up to 55 seconds; stops when user input is needed or the admitted connection/disconnection operation ends. |
950
+ | `session_open_review_management` | Opens management for exact `reviewSessionId` + `attemptId`; no refresh or signing authority. |
951
+ | `session_get_interaction_status` | Stored `activeAccount`, current-owner `connections`, `assetReadAccount`, wallet availability, and bounded pending connection/review lists. `assetReadAccount` is `available` with an account only when that selected address has a usable current connection; otherwise `address_required`. Stored `activeAccount` does not prove a live connection. `address_required` reports that no implicit default is available; it does not add an address input to connected-account-only tools. When wallet availability is unavailable, connection rows are last recorded facts, not proof of presence or absence. |
952
+ | `session_get_review_status` | Current preparation status, review revision, optional current request and chain execution. |
953
+ | `session_get_execution_result` | Observes the current explicitly referenced attempt and may read its known digest; never submits again. |
954
+ | `session_wait_execution_result` | Bounded wait on the same request, separate from its signing and chain-observation deadlines. |
954
955
 
955
956
  `pendingWalletConnections.items[].status` is `input_required`,
956
957
  `awaiting_approval`, or `disconnect_pending`. The last value describes an
@@ -964,7 +965,7 @@ While its SDK callback remains pending, unavailable progress preserves the
964
965
  operation and its last recorded connection state. Repeating the same selection
965
966
  does not send another SDK request.
966
967
 
967
- `session.get_interaction_status` reconciles stored connections against current SDK sessions before reading dependent review/request facts. This can record a connection change and invalidate a review or interrupt an unsubmitted request under the existing rules. It preserves the stored account selection and submitted chain results; it does not start pairing, SDK disconnect, signing or submission.
968
+ `session_get_interaction_status` reconciles stored connections against current SDK sessions before reading dependent review/request facts. This can record a connection change and invalidate a review or interrupt an unsubmitted request under the existing rules. It preserves the stored account selection and submitted chain results; it does not start pairing, SDK disconnect, signing or submission.
968
969
 
969
970
  When a disconnect callback ended but its completion write failed, current reads
970
971
  reconcile that stored operation without another SDK disconnect. If the SDK is
@@ -1043,7 +1044,7 @@ The original request's stored deadlines are unchanged by a management card.
1043
1044
  A new signature requires a newly reviewed revision and explicit selection.
1044
1045
  Identical duplicate selections return the admitted attempt; no response-loss
1045
1046
  path replays a financial request. Model tools may open/read cards; only scoped
1046
- app-only `ui.act_card` performs a user selection. UI permission and pairing QR
1047
+ app-only `ui_act_card` performs a user selection. UI permission and pairing QR
1047
1048
  travel in private metadata. Bytes/signatures never reach the card or model.
1048
1049
 
1049
1050
  Connection observation uses 5 seconds and request observation 3 seconds.
@@ -1210,13 +1211,13 @@ retained when a later submission-admission check fails.
1210
1211
 
1211
1212
  ### Stored review activity
1212
1213
 
1213
- `read.list_review_activity` accepts account/time/limit and independent ANDed
1214
+ `read_list_review_activity` accepts account/time/limit and independent ANDed
1214
1215
  `reviewStatus`, `requestStatus`, `executionStatus` filters. One row represents
1215
1216
  one review session and its explicit current attempt, including optional
1216
1217
  `currentAttemptId`, `reviewRevision`, `transactionDigest`, request and chain
1217
1218
  status. `dataScope.recordCount` counts the complete filtered scope before limit.
1218
1219
 
1219
- `read.summarize_review_funnel` keeps the session denominator. `reviewStatusCounts`
1220
+ `read_summarize_review_funnel` keeps the session denominator. `reviewStatusCounts`
1220
1221
  is the preparation distribution; `requestStatusCounts` is a list of
1221
1222
  `{ requestStatus, count }` entries (including zero counts); `executionStatusCounts`
1222
1223
  has success/failure counts. Status strings are data values, not secret-like JSON
@@ -1237,7 +1238,7 @@ result counts as completed and as its verified chain outcome, but does not count
1237
1238
  as `everAwaitedChainResult` unless the session actually reached that stage in an
1238
1239
  attempt. This metric is neither a submission total nor a mandatory funnel step.
1239
1240
 
1240
- `read.get_review_session_detail` returns the current `request`, full
1241
+ `read_get_review_session_detail` returns the current `request`, full
1241
1242
  `requestCount`, capped `requests`, revision-bound state snapshots and transitions
1242
1243
  with `domain` and optional attemptId. Each request may contain a verified
1243
1244
  `execution`; absent execution does not imply failure. Current request is returned
@@ -1250,7 +1251,7 @@ facts actually exist.
1250
1251
 
1251
1252
  | Tool | Status | Purpose |
1252
1253
  | --- | --- | --- |
1253
- | `account.get_active_account` | Implemented | Reads the active wallet-account read context. |
1254
+ | `account_get_active_account` | Implemented | Reads the active wallet-account read context. |
1254
1255
 
1255
1256
  The user clears the default read address through a confirmed Settings card action. Ordinary MCP calls do not clear it.
1256
1257
 
@@ -1258,10 +1259,10 @@ The user clears the default read address through a confirmed Settings card actio
1258
1259
 
1259
1260
  | Tool | Status | Purpose |
1260
1261
  | --- | --- | --- |
1261
- | `settings.create_local_settings_session` | Implemented | Opens one internal Settings card with an unsubmitted draft. |
1262
- | `settings.get_local_settings` | Implemented | Reads stored/effective Sui gRPC and GraphQL endpoints, sources and pending restart information. |
1262
+ | `settings_create_local_settings_session` | Implemented | Opens one internal Settings card with an unsubmitted draft. |
1263
+ | `settings_get_local_settings` | Implemented | Reads stored/effective Sui gRPC and GraphQL endpoints, sources and pending restart information. |
1263
1264
 
1264
- The gateway name is preserved. Its result is a `kind: "settings"` card snapshot
1265
+ The result is a `kind: "settings"` card snapshot
1265
1266
  and a public saved-result link. Card permission is only in `sui-mcp/card` UI
1266
1267
  metadata. There is no `settingsUrl`, `openTarget`, external page, HTTP mutation
1267
1268
  API or compatibility alias. A client without internal cards receives
@@ -1271,7 +1272,7 @@ Settings groups Address for viewing assets, Local records, Troubleshooting and A
1271
1272
  settings. Confirmed changes are `clear_read_address`, `set_endpoint`,
1272
1273
  `restore_endpoint` (gRPC or GraphQL), `import_local_data`, `reset_local_data`
1273
1274
  and `restart_wallet_service`. Their preparation and confirmation use app-only
1274
- `ui.act_card` with card permission, revision, operation identity and the exact
1275
+ `ui_act_card` with card permission, revision, operation identity and the exact
1275
1276
  preparation identity. Choosing or checking data does not apply it, contact a
1276
1277
  wallet or restart the SDK. Duplicate confirmation returns the same admitted
1277
1278
  result; MCP JSON-RPC request IDs do not authorize another operation.
@@ -1429,13 +1430,13 @@ remains set; storing an endpoint does not modify that environment.
1429
1430
 
1430
1431
  Download creates and verifies one private snapshot with an exclusive generated
1431
1432
  file identity. Supported Host delivery does not publish a second permanent backup. Response or result
1432
- storage failure never regenerates that snapshot. `ui.read_settings_file` is
1433
+ storage failure never regenerates that snapshot. `ui_read_settings_file` is
1433
1434
  app-only and binds card/permission, operation, file, offset, verified hash/length
1434
1435
  and the current `attemptId` for a private download. Its ordinary content carries
1435
1436
  range metadata; Base64 bytes appear only in `sui-mcp/settings-file` UI metadata.
1436
1437
  The View checks the complete hash before standard Host delivery.
1437
1438
 
1438
- File continuations also use app-only `ui.act_card`:
1439
+ File continuations also use app-only `ui_act_card`:
1439
1440
 
1440
1441
  - `settings_retry_download`: `operationId`, `fileId`, `previousAttemptId` and a
1441
1442
  new `attemptId`; atomically advances one attempt on the same live snapshot.
@@ -1494,8 +1495,8 @@ and addresses. Historical disconnected/failed records do not prove a current
1494
1495
  connection or approval. The complete recorded impact remains bound to admission;
1495
1496
  the display does not filter it into a new wallet-eligibility rule.
1496
1497
 
1497
- Endpoint changes require fully quitting/reopening every participating app to
1498
- apply parent configuration. Restart connection service only replaces the SDK
1498
+ Endpoint changes require stopping all participating MCP connections and waiting
1499
+ for the shared parent to exit, then reopening them to apply its configuration. Restart connection service only replaces the SDK
1499
1500
  child. Installation environment overrides continue to take precedence. Custom
1500
1501
  providers affect read data quality; use trusted Sui mainnet providers.
1501
1502
 
@@ -1515,12 +1516,12 @@ permissions and display facts. Clients must use the returned URI/key values.
1515
1516
  | `suimcp://docs/mcp-tools` | API reference: tool contracts, response fields, statuses, follow-up fields, and output boundaries. |
1516
1517
  | `suimcp://docs/wallet-connection` | Wallet connection reference: active read context, private SDK ownership and user-approved transaction requests. |
1517
1518
  | `suimcp://docs/agent-behavior` | Answer playbook: user-question flows, tool selection, and response wording boundaries. |
1518
- | `suimcp://protocols/deepbook-v3` | Protocol reference only; use MCP tool responses and `read.list_supported_protocols` for current support. |
1519
+ | `suimcp://protocols/deepbook-v3` | Protocol reference only; use MCP tool responses and `read_list_supported_protocols` for current support. |
1519
1520
  | `suimcp://protocols/deepbook-margin` | Protocol reference only; no margin MCP read tools or signable actions are exposed in this release. |
1520
1521
 
1521
1522
  Only allowlisted mainnet protocol references are exposed as MCP resources.
1522
1523
 
1523
- Protocol resources are not runtime registries, supported-protocol lists, live liquidity sources, route recommendations, or signing-readiness signals. Use `read.get_server_status`, `read.list_supported_protocols`, concrete tool schemas, and concrete tool responses for current product support.
1524
+ Protocol resources are not runtime registries, supported-protocol lists, live liquidity sources, route recommendations, or signing-readiness signals. Use `read_get_server_status`, `read_list_supported_protocols`, concrete tool schemas, and concrete tool responses for current product support.
1524
1525
 
1525
1526
  MCP resources are runtime-facing references that connected AI clients can read.
1526
1527
 
package/docs/SDK_API.md CHANGED
@@ -72,8 +72,11 @@ file/mainnet rejection is independent of local-data confirmation revision and
72
72
  survives Back until explicit file selection changes. The View's current file-job
73
73
  progress describes communication only; it cannot grant restoration authority.
74
74
 
75
- Recorded backup locations use backend-native folder and file-name fields;
76
- optional `App.downloadFile` delivery remains separate from local publication.
75
+ Download backup prepares one verified snapshot and calls `App.downloadFile`.
76
+ Only that function's exact method-not-found result selects local publication of
77
+ the same snapshot. A possibly handled earlier attempt requires explicit local-copy
78
+ consent. Host acknowledgment does not prove a save destination or disk storage;
79
+ Folder and File name identify only a verified local backup result.
77
80
 
78
81
  The shared server uses the pinned MCP SDK Streamable HTTP transport behind authenticated loopback access. Stdio clients forward tool, resource and prompt requests with their original client identity and capabilities. The SDK limits each internal HTTP request body to 4 MiB, including its complete MCP JSON-RPC envelope and metadata. Oversized bodies are refused before tool or card dispatch. Card calls additionally have a 64 KiB envelope budget; ordinary MCP calls do not inherit that smaller limit. Restore uploads retain their 16 MiB file limit and are split into messages within the card budget. The SDK's internal HTTP batch guard does not expose a stdio batch feature. SDK HTTP errors expose the HTTP status separately from their local error code; the stdio forwarding boundary retains that numeric status in the MCP error. Handler cancellation and request identity use `context.mcpReq.signal` and `context.mcpReq.id`. The current private transport uses the SDK's default initialized connection behavior; it does not opt into automatic protocol probes or request retries.
79
82
 
@@ -142,7 +145,7 @@ Verified from `node_modules/@mysten/deepbook-v3/src/client.ts` and `node_modules
142
145
 
143
146
  The `address` is used by the SDK as the transaction simulation sender for read queries. For sender-independent DeepBook orderbook, raw-quantity quote, and display-amount quote reads, Sui MCP supplies an internal mainnet placeholder address. This placeholder is not user identity and must not be represented as wallet authorization.
144
147
 
145
- Account-bound DeepBook reads, such as `read.summarize_deepbook_account_inventory`, use the active account address as the simulation sender. The product filters manager detail reads through on-chain `getBalanceManagerIds(owner)` discovery before calling account-bound detail methods; this is active read context, not signing authorization or custody.
148
+ Account-bound DeepBook reads, such as `read_summarize_deepbook_account_inventory`, use the active account address as the simulation sender. The product filters manager detail reads through on-chain `getBalanceManagerIds(owner)` discovery before calling account-bound detail methods; this is active read context, not signing authorization or custody.
146
149
 
147
150
  Confirmed methods:
148
151
 
@@ -190,12 +193,12 @@ type BaseQuantityOut = {
190
193
  };
191
194
  ```
192
195
 
193
- The pinned SDK accepts `number | bigint` quote inputs. Its high-level quote query objects include an input echo field (`baseQuantity` or `quoteQuantity`) produced with `Number(inputRaw)`, plus display quote fields (`baseOut`, `quoteOut`, and `deepRequired`) produced after scalar division and `Number(...)` conversion. Sui MCP does not use those high-level query objects as the canonical quote source for adapter preparation. It uses the pinned SDK transaction builder quote functions, requests `client.core.simulateTransaction` command results, and parses raw `u64` return values. The simulated public Move entrypoint is `pool::get_quote_quantity_out` for base-to-quote reads and `pool::get_base_quantity_out` for quote-to-base reads; both delegate to `pool::get_quantity_out`, whose official Move source defines the return order as `base_quantity_out`, `quote_quantity_out`, and `deep_quantity_required`. Public `quote` fields are exact decimal display strings derived from those raw values through pinned DeepBook scalars; `rawQuote` carries the raw evidence. `read.quote_deepbook_action` marks the input as raw `u64`, while `read.quote_deepbook_display_amount` marks the input as a source display amount converted to raw `u64`. Raw quote evidence is not an effective price, price-impact calculation, quote-vs-mid slippage calculation, venue comparison, best-route claim, fiat cash-out estimate, external market lookup, USDC/USD peg assumption, P&L, cost basis, final min-out, signing data, or signing readiness. The account-bound DeepBook review may derive a fresh raw quote policy from this evidence and use that derived policy for local unsigned transaction material build, while keeping bytes private to the backend until a scoped user selection admits a WalletConnect request for that reviewed revision. MCP and ordinary review-status outputs still do not contain transaction bytes, signing data, or signing readiness. When the digest commitment stage completes, it is derived from the locally stored transaction bytes through pinned SDK `Transaction.from(...).getDigest()` and remains an internal binding, not a public signing artifact.
196
+ The pinned SDK accepts `number | bigint` quote inputs. Its high-level quote query objects include an input echo field (`baseQuantity` or `quoteQuantity`) produced with `Number(inputRaw)`, plus display quote fields (`baseOut`, `quoteOut`, and `deepRequired`) produced after scalar division and `Number(...)` conversion. Sui MCP does not use those high-level query objects as the canonical quote source for adapter preparation. It uses the pinned SDK transaction builder quote functions, requests `client.core.simulateTransaction` command results, and parses raw `u64` return values. The simulated public Move entrypoint is `pool::get_quote_quantity_out` for base-to-quote reads and `pool::get_base_quantity_out` for quote-to-base reads; both delegate to `pool::get_quantity_out`, whose official Move source defines the return order as `base_quantity_out`, `quote_quantity_out`, and `deep_quantity_required`. Public `quote` fields are exact decimal display strings derived from those raw values through pinned DeepBook scalars; `rawQuote` carries the raw evidence. `read_quote_deepbook_action` marks the input as raw `u64`, while `read_quote_deepbook_display_amount` marks the input as a source display amount converted to raw `u64`. Raw quote evidence is not an effective price, price-impact calculation, quote-vs-mid slippage calculation, venue comparison, best-route claim, fiat cash-out estimate, external market lookup, USDC/USD peg assumption, P&L, cost basis, final min-out, signing data, or signing readiness. The account-bound DeepBook review may derive a fresh raw quote policy from this evidence and use that derived policy for local unsigned transaction material build, while keeping bytes private to the backend until a scoped user selection admits a WalletConnect request for that reviewed revision. MCP and ordinary review-status outputs still do not contain transaction bytes, signing data, or signing readiness. When the digest commitment stage completes, it is derived from the locally stored transaction bytes through pinned SDK `Transaction.from(...).getDigest()` and remains an internal binding, not a public signing artifact.
194
197
 
195
198
  ## Runtime Boundary
196
199
 
197
200
  - JSON-RPC client imports are not used.
198
- - Sui gRPC and GraphQL endpoints are resolved from local SQLite settings by default. `SUI_GRPC_URL` and `SUI_GRAPHQL_URL` are advanced temporary overrides and do not mutate stored settings.
201
+ - Sui gRPC and GraphQL endpoints are resolved from local SQLite settings by default. `SUI_MCP_GRPC_URL` and `SUI_MCP_GRAPHQL_URL` are advanced temporary overrides and do not mutate stored settings.
199
202
  - Sui gRPC URLs must include an explicit port and no credentials, path, query string, or fragment.
200
203
  - Sui GraphQL URLs must use `https` and must not include credentials, query string, or fragment.
201
204
  - The gRPC endpoint is verified during runtime startup. The GraphQL endpoint is verified when saved, imported, or first used by Sui activity tools.