@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/README.md CHANGED
@@ -27,14 +27,14 @@ Users can ask ordinary questions:
27
27
  - "How much are my USD-denominated assets together?"
28
28
  - "What is the shortfall?"
29
29
 
30
- This document describes `@zktx.io/sui-mcp@0.6.2`. Confirm that version is
30
+ This document describes `@zktx.io/sui-mcp@0.7.0`. Confirm that version is
31
31
  published before using npm installation commands. For a local build, follow
32
32
  [Developer Checkout Setup](docs/MCP_SETUP.md#developer-checkout-setup).
33
33
 
34
34
  ## Product Scope in Two Layers
35
35
 
36
36
  - **Implemented:** Sui mainnet read evidence, non-signable external proposal review, and account-bound DeepBook swap review using protocol-agnostic adapters. Six internal cards use the same SQLite state and permission model. The backend verifies stored material, ownership, quote/policy provenance, human-readable facts, simulation and PTB evidence before an explicit user request. WalletConnect carries bytes only between the backend and wallet; ordinary MCP responses expose facts, request status and observed execution results. Settings owns endpoint and read-address controls, local backup/import/reset, and explicit connection-service recovery. Settings operations require scoped user confirmation; ordinary MCP calls only create the card or read settings.
37
- - **Never (permanently unsupported at every layer):** no private-key custody, no MCP or AI autonomous execution, no forwarding of opaque external transaction bytes to a wallet, no silent settlement-token or route choice, no fiat cash-out, no P&L, no peg guarantee.
37
+ - **Safety boundaries:** no private-key custody, no MCP or AI autonomous execution, no forwarding of opaque external transaction bytes to a wallet, and no peg guarantee. The current product does not silently choose settlement tokens or routes. It does not provide fiat cash-out, P&L, tax or cost-basis support.
38
38
 
39
39
  DeepBook provides the current scoped Sui conversion, price, and orderbook
40
40
  evidence through the shared protocol adapter contracts. Wallet and Sui balance reads
@@ -107,7 +107,7 @@ user to confirm its exact target. Connection is not transaction approval.
107
107
 
108
108
  **Review and result.** The internal Review card automatically prepares and renews verified conditions for one selected wallet/account. Users inspect its transaction graph, amounts and costs, then choose Request wallet approval and approve in their wallet. One wallet connection is used at a time; choose among its approved addresses when needed. Conflicting saved connections must be resolved through targeted disconnection. Failed preparation has an explicit retry. Receipt and completed Review show the executed transaction graph, actual asset changes and net network fee. Supplementary facts are in one Details slide; earlier estimates in Review remain distinct from actual chain results. Missing graph or receipt data is marked unavailable. Cards use a single document layout without nested card panels.
109
109
 
110
- **DeepBook USDC chart.** `ui.open_chart` opens an internal MCP Apps card with
110
+ **DeepBook USDC chart.** `ui_open_chart` opens an internal MCP Apps card with
111
111
  official DeepBookV3 Indexer candles and volume for one selected USDC pool.
112
112
  The saved result shows the selected pair, interval, UTC period and source time. Limited and empty results are identified.
113
113
 
@@ -156,11 +156,11 @@ These product behaviors are out of scope in the current release by design:
156
156
 
157
157
  ### Quote Response Limits
158
158
 
159
- Quote tools such as `read.quote_deepbook_action` and
160
- `read.quote_deepbook_display_amount` return scoped quote facts and raw quote
159
+ Quote tools such as `read_quote_deepbook_action` and
160
+ `read_quote_deepbook_display_amount` return scoped quote facts and raw quote
161
161
  evidence only.
162
162
 
163
- Their semantics mark quote output as price evidence, not payment coverage or shortfall evidence. Coverage and shortfall answers come from `read.preview_intent_evidence.responseSummary`.
163
+ Their semantics mark quote output as price evidence, not payment coverage or shortfall evidence. Coverage and shortfall answers come from `read_preview_intent_evidence.responseSummary`.
164
164
 
165
165
  For quote responses alone, these conclusions are unsupported:
166
166
 
@@ -198,7 +198,8 @@ The npm package is `@zktx.io/sui-mcp`, and its repository is
198
198
  your client registration.
199
199
 
200
200
  Use the full scoped package name: the unscoped `sui-mcp` package is a different
201
- project. Keep the MCP registration name `sui-mcp`, without a suffix. Compatible
201
+ project. Use `sui-mcp` as the default MCP registration name. A client-defined registration
202
+ alias is a local label, not server identity or authorization. Compatible
202
203
  updates preserve the current data directory. Incompatible databases and backups
203
204
  are rejected without conversion, and files are left in place. Data from a
204
205
  different package is not discovered or imported. See the
@@ -217,11 +218,11 @@ Unsupported protocol experiments are not product functionality and are not inclu
217
218
 
218
219
  The canonical MCP API reference lives in [docs/MCP_TOOLS.md](docs/MCP_TOOLS.md).
219
220
 
220
- The server also exposes `read.get_server_status`. It returns the package version, evidence policy version, `implementedToolsCount`, and implemented tool list at runtime.
221
+ The server also exposes `read_get_server_status`. It returns the package version, evidence policy version, `implementedToolsCount`, and implemented tool list at runtime.
221
222
 
222
- DeepBook pool-price context is exposed through `read.get_deepbook_mid_price`. Use `docs/MCP_TOOLS.md` for the response fields and unsupported conclusions.
223
+ DeepBook pool-price context is exposed through `read_get_deepbook_mid_price`. Use `docs/MCP_TOOLS.md` for the response fields and unsupported conclusions.
223
224
 
224
- Tool names use dot prefixes because the MCP spec recommends ASCII letters, digits, underscore, hyphen, and dot for tool names. `action.prepare_sui_action_review` returns a `reviewSessionId` and an internal `card`; it does not return executable transaction bytes.
225
+ Tool names use `domain_verb_object`. Names identify an operation; its schema, card visibility and permission checks define its authority. `action_start_review` returns a `reviewSessionId` and an internal `card`; it does not request a signature, submit a transaction or return executable transaction bytes.
225
226
 
226
227
  ## Documentation Map
227
228
 
@@ -237,7 +238,7 @@ Runtime-facing MCP resources currently include:
237
238
  - `protocols/deepbook-v3.md`;
238
239
  - `protocols/deepbook-margin.md`.
239
240
 
240
- Protocol resources are explanatory references. Current support is declared by `read.get_server_status`, `read.list_supported_protocols`, concrete tool schemas, and concrete tool responses, not by protocol Markdown alone.
241
+ Protocol resources are explanatory references. Current support is declared by `read_get_server_status`, `read_list_supported_protocols`, concrete tool schemas, and concrete tool responses, not by protocol Markdown alone.
241
242
 
242
243
  Development-only or release-review documents can define contributor rules and checks.
243
244
 
@@ -248,7 +249,7 @@ AI client answer behavior must be mirrored in runtime-facing instructions, resou
248
249
  - `docs/MCP_TOOLS.md`: API reference: tool contracts, response fields, statuses, follow-up fields, and output boundaries.
249
250
  - `docs/AGENT_BEHAVIOR.md`: Answer playbook: user-question flows, tool selection, and response wording boundaries.
250
251
  - `docs/WALLET_CONNECTION.md`: Wallet connection reference: active read context, private SDK ownership and user-approved transaction requests.
251
- - `protocols/deepbook-v3.md`: Protocol reference only; use MCP tool responses and read.list_supported_protocols for current support.
252
+ - `protocols/deepbook-v3.md`: Protocol reference only; use MCP tool responses and read_list_supported_protocols for current support.
252
253
  - `protocols/deepbook-margin.md`: Protocol reference only; no margin MCP read tools or signable actions are exposed in this release.
253
254
  - `docs/TRANSACTION_ACTIVITY_LOG.md`: transaction activity evidence, storage, scan, and summary boundaries.
254
255
  - `docs/UTILITY_INDEX.md`: manual maintainer and developer utilities. Utility rows are not MCP tools unless they explicitly name an MCP tool, and source-checkout scripts are not packaged product commands.
@@ -35,6 +35,6 @@ export const ADAPTER_PROMPT_SURFACES = [
35
35
  description: 'Prepare a reviewable DeepBook mainnet swap from a one-line intent, e.g. "10 sui to usdc".',
36
36
  intentArgDescription: 'Swap intent in one line, any language, e.g. "10 sui to usdc" or "10 수이 usdc로 환전"',
37
37
  exampleIntents: ["10 sui to usdc", "10 수이 usdc로 환전"],
38
- toolName: "action.prepare_sui_action_review"
38
+ toolName: "action_start_review"
39
39
  }
40
40
  ];
@@ -67,7 +67,7 @@ export function deepbookQuoteQuantitySemantics(inputAmountKind) {
67
67
  canUseForPaymentAnswer: false,
68
68
  canUseForShortfallAnswer: false,
69
69
  doNotCombineWithPaymentAnswer: true,
70
- requiredPaymentAnswerTool: "read.preview_intent_evidence",
70
+ requiredPaymentAnswerTool: "read_preview_intent_evidence",
71
71
  paymentAnswerUseBlockedReason: "quote_output_is_price_reference_not_payment_answer",
72
72
  requiredPaymentAnswerField: "responseSummary",
73
73
  fiatUsdCashOutAvailable: false,
@@ -35,7 +35,7 @@ export function walletBalanceUserAnswerUse() {
35
35
  ],
36
36
  diagnosticOnlyFields: ["source", "quantitySemantics", "hasNextPage", "cursor"],
37
37
  followUp: {
38
- tool: "read.preview_intent_evidence",
38
+ tool: "read_preview_intent_evidence",
39
39
  inputFields: ["account"],
40
40
  answerFields: ["responseSummary"],
41
41
  reason: "Use for USD-denominated payment coverage, balance-total, or shortfall answers; wallet balances are current coin snapshots only."
@@ -70,7 +70,7 @@ export function walletClassificationUserAnswerUse() {
70
70
  ],
71
71
  diagnosticOnlyFields: ["source", "quantitySemantics", "hasNextPage", "cursor"],
72
72
  followUp: {
73
- tool: "read.preview_intent_evidence",
73
+ tool: "read_preview_intent_evidence",
74
74
  inputFields: ["account"],
75
75
  answerFields: ["responseSummary"],
76
76
  reason: "Use for USD-denominated payment coverage, balance-total, or shortfall answers; classification labels are not payment evidence."
@@ -231,7 +231,7 @@ export function deepbookOrderbookUserAnswerUse() {
231
231
  ],
232
232
  diagnosticOnlyFields: ["source"],
233
233
  followUp: {
234
- tool: "read.quote_deepbook_display_amount",
234
+ tool: "read_quote_deepbook_display_amount",
235
235
  inputFields: ["poolKey"],
236
236
  answerFields: ["quote"],
237
237
  reason: "Use for an indicative DeepBook quote after the user supplies an explicit source amount, pool, and direction."
@@ -245,7 +245,7 @@ export function deepbookMidPriceUserAnswerUse() {
245
245
  answerFields: ["poolKey", "base", "quote", "price", "priceDirection", "priceType", "fetchedAt"],
246
246
  diagnosticOnlyFields: ["source", "priceSemantics"],
247
247
  followUp: {
248
- tool: "read.preview_intent_evidence",
248
+ tool: "read_preview_intent_evidence",
249
249
  answerFields: ["responseSummary"],
250
250
  reason: "Use for USD-denominated payment coverage, balance-total, or shortfall answers; mid price is pool price context only."
251
251
  }
@@ -343,7 +343,7 @@ export function deepbookQuoteUserAnswerUse(summaryKind) {
343
343
  "quantitySemantics.paymentAnswerUseBlockedReason"
344
344
  ],
345
345
  followUp: {
346
- tool: "read.preview_intent_evidence",
346
+ tool: "read_preview_intent_evidence",
347
347
  answerFields: ["responseSummary"],
348
348
  reason: "Use responseSummary for payment coverage, balance-total, or shortfall answers; if this quote was called during a payment question, do not combine its numbers into the conclusion."
349
349
  }
@@ -394,7 +394,7 @@ export function deepbookAccountInventoryUserAnswerUse(detailStatus) {
394
394
  preconditionFields: ["detailStatus"],
395
395
  diagnosticOnlyFields,
396
396
  followUp: {
397
- tool: "read.summarize_wallet_assets",
397
+ tool: "read_summarize_wallet_assets",
398
398
  answerFields: ["balances"],
399
399
  reason: "Use for current wallet coin-balance snapshots; DeepBook BalanceManager inventory is a separate account surface."
400
400
  }
@@ -9,7 +9,7 @@ export function settingsUploadMessageBudget(message) {
9
9
  if (!message || typeof message !== "object")
10
10
  return undefined;
11
11
  const envelope = structuredClone(message);
12
- if (envelope.method !== "tools/call" || envelope.params?.name !== "ui.act_card" ||
12
+ if (envelope.method !== "tools/call" || envelope.params?.name !== "ui_act_card" ||
13
13
  envelope.params.arguments?.input?.action !== "settings_upload_chunk")
14
14
  return undefined;
15
15
  envelope.id = Number.MAX_SAFE_INTEGER;
@@ -8,7 +8,7 @@ export const MCP_PROMPTS = [
8
8
  description: "Review current supported mainnet surfaces and tool status.",
9
9
  text: [
10
10
  "Inspect the Sui MCP server status and supported mainnet Sui protocol surfaces.",
11
- "Use read.get_server_status first, then read.list_supported_protocols.",
11
+ "Use read_get_server_status first, then read_list_supported_protocols.",
12
12
  "Report implemented tools separately from unavailable or blocked surfaces."
13
13
  ].join("\n")
14
14
  },
@@ -18,8 +18,8 @@ export const MCP_PROMPTS = [
18
18
  description: "Prepare a local review session for a supported action proposal.",
19
19
  text: [
20
20
  "Prepare a reviewable Sui action only through Sui MCP's review-session flow.",
21
- "Use action.prepare_external_proposal_review when the input is a structured external payment or Sui action proposal.",
22
- "External proposals get read-only local review and never become signing material. Use action.prepare_sui_action_review for a natural-language swap intent; after a wallet account is connected, account-bound review can reach ready_for_wallet_review, where an explicit Review card action can request approval in the user’s wallet through the backend.",
21
+ "Use action_create_proposal_review when the input is a structured external payment or Sui action proposal.",
22
+ "External proposals get read-only local review and never become signing material. Use action_start_review for a natural-language swap intent; after a wallet account is connected, account-bound review can reach ready_for_wallet_review, where an explicit Review card action can request approval in the user’s wallet through the backend.",
23
23
  "Present the internal Review card and summarize the returned review checks. This MCP response never contains signing data, transaction bytes, or signing readiness; only an explicit UI action and wallet approval authorize the backend request; request status is separate from server-verified chain execution facts."
24
24
  ].join("\n")
25
25
  }
@@ -56,6 +56,7 @@ function registerSurfacePrompt(server, name, surface, description) {
56
56
  }));
57
57
  }
58
58
  export function registerMcpPrompts(server, surfaces = []) {
59
+ const registeredNames = [];
59
60
  for (const prompt of MCP_PROMPTS) {
60
61
  server.registerPrompt(prompt.name, {
61
62
  title: prompt.title,
@@ -72,13 +73,18 @@ export function registerMcpPrompts(server, surfaces = []) {
72
73
  }
73
74
  ]
74
75
  }));
76
+ registeredNames.push(prompt.name);
75
77
  }
76
78
  for (const surface of surfaces) {
77
- registerSurfacePrompt(server, promptNameFor(surface), surface, surface.description);
79
+ const name = promptNameFor(surface);
80
+ registerSurfacePrompt(server, name, surface, surface.description);
81
+ registeredNames.push(name);
78
82
  }
79
83
  for (const [action, group] of actionGroups(surfaces)) {
80
84
  registerBareActionPrompt(server, action, group);
85
+ registeredNames.push(action);
81
86
  }
87
+ return registeredNames;
82
88
  }
83
89
  export function bareActionPromptText(action, group, intent, protocol) {
84
90
  const chosen = group.length === 1 ? group[0] : group.find((surface) => surface.protocolSlug === (protocol ?? "").trim());
@@ -42,7 +42,7 @@ export const MCP_RESOURCES = [
42
42
  name: "deepbook-v3",
43
43
  uri: "suimcp://protocols/deepbook-v3",
44
44
  title: "DeepBookV3",
45
- description: "Protocol reference only; use MCP tool responses and read.list_supported_protocols for current support.",
45
+ description: "Protocol reference only; use MCP tool responses and read_list_supported_protocols for current support.",
46
46
  path: "protocols/deepbook-v3.md"
47
47
  },
48
48
  {
@@ -19,9 +19,9 @@ export function createMcpServer(deps) {
19
19
  });
20
20
  registerMcpResources(server);
21
21
  registerReadCards(server, deps);
22
- registerMcpPrompts(server, deps.promptSurfaces ?? []);
22
+ const registeredPromptNames = registerMcpPrompts(server, deps.promptSurfaces ?? []);
23
23
  registerAccountTools(server, deps);
24
- registerReadTools(server, deps);
24
+ registerReadTools(server, deps, registeredPromptNames);
25
25
  registerSettingsTools(server, deps);
26
26
  registerActionTools(server, deps);
27
27
  registerSessionTools(server, deps);
@@ -7,6 +7,7 @@ const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
7
7
  const packageMetadata = JSON.parse(readFileSync(resolve(packageRoot, "package.json"), "utf8"));
8
8
  export const PACKAGE_NAME = packageMetadata.name;
9
9
  export const SERVER_NAME = "sui-mcp";
10
+ export const PRODUCT_DISPLAY_NAME = "Sui MCP";
10
11
  export const SERVER_VERSION = packageMetadata.version;
11
12
  export const SERVER_NETWORK = "mainnet";
12
13
  export const SERVER_RUNTIME = "local_stdio";
@@ -47,8 +48,8 @@ export const SERVER_INSTRUCTIONS = [
47
48
  "External proposals are untrusted facts; plans[].reviewModel is review context, not transaction material, route/settlement choice, signing/readiness, or execution readiness.",
48
49
  "PTB graphs are diagnostics only; not transaction input, wallet authorization, signing/readiness, execution readiness, route quality, or safety.",
49
50
  "Use response-local fields: userAnswerUse.answerFields/preconditionFields/conclusionRuleFields/cannotAnswer/diagnosticOnlyFields/followUp, pollingHint, and quantitySemantics.",
50
- "For USD-denominated payment coverage, balance total, or shortfall questions, call read.get_server_status, then read.list_settlement_asset_groups, then read.preview_intent_evidence. Use toolAvailability.requiredToolsAvailable and responseSummary.doNotCallQuoteToolsForThisQuestion; do not call wallet inventory or quote tools unless user asks a separate inventory or conversion question. For parity, use read.summarize_settlement_asset_group_parity. If toolAvailability cannot be used, say the current MCP server build cannot support the answer.",
51
- "The active account context is read-only, not login, custody or signing permission. Implicit asset reads require session.get_interaction_status.assetReadAccount: available. Otherwise ask for an address only if the tool accepts account; connected-only tools require connection/account selection or wallet recovery.",
51
+ "For USD-denominated payment coverage, balance total, or shortfall questions, call read_get_server_status, then read_list_settlement_asset_groups, then read_preview_intent_evidence. Use toolAvailability.requiredToolsAvailable and responseSummary.doNotCallQuoteToolsForThisQuestion; do not call wallet inventory or quote tools unless user asks a separate inventory or conversion question. For parity, use read_summarize_settlement_asset_group_parity. If toolAvailability cannot be used, say the current MCP server build cannot support the answer.",
52
+ "The active account context is read-only, not login, custody or signing permission. Implicit asset reads require session_get_interaction_status.assetReadAccount: available. Otherwise ask for an address only if the tool accepts account; connected-only tools require connection/account selection or wallet recovery.",
52
53
  "Unsupported: other chains, autonomous trading, alerts, investment advice, arbitrary Move/package calls, P&L/tax.",
53
54
  "One wallet connection at a time; docs: suimcp://docs/agent-behavior, suimcp://docs/mcp-tools."
54
55
  ].join("\n");
@@ -83,12 +84,12 @@ export const IMPLEMENTED_TOOLS = [
83
84
  TOOL_NAMES.readGetAccountAssetTimeline,
84
85
  TOOL_NAMES.settingsCreateLocalSettingsSession,
85
86
  TOOL_NAMES.settingsGetLocalSettings,
86
- TOOL_NAMES.actionPrepareSuiActionReview,
87
- TOOL_NAMES.actionPrepareExternalProposalReview,
87
+ TOOL_NAMES.actionStartReview,
88
+ TOOL_NAMES.actionCreateProposalReview,
88
89
  TOOL_NAMES.accountGetActiveAccount,
89
- TOOL_NAMES.sessionCreateWalletConnection,
90
- TOOL_NAMES.sessionGetWalletConnection,
91
- TOOL_NAMES.sessionWaitWalletConnection,
90
+ TOOL_NAMES.sessionOpenWalletConnectionCard,
91
+ TOOL_NAMES.sessionGetWalletConnectionCard,
92
+ TOOL_NAMES.sessionWaitWalletConnectionCard,
92
93
  TOOL_NAMES.sessionOpenReviewManagement,
93
94
  TOOL_NAMES.sessionGetInteractionStatus,
94
95
  TOOL_NAMES.sessionGetReviewStatus,
@@ -113,18 +114,18 @@ export function toolAvailability(requiredTools) {
113
114
  };
114
115
  }
115
116
  export const SERVER_LIMITATIONS = [
116
- "Current asset reads without a user-provided address require a selected account with a usable current wallet connection. session.get_interaction_status.assetReadAccount reports whether that default is available. Only tools with an account input accept explicit addresses; DeepBook account inventory requires a connected selected account. Explicit-address coin balance reads are public-address snapshots and do not create active account context. Active account is read context only, not signing authorization, login, custody, or persistent permission.",
117
+ "Current asset reads without a user-provided address require a selected account with a usable current wallet connection. session_get_interaction_status.assetReadAccount reports whether that default is available. Only tools with an account input accept explicit addresses; DeepBook account inventory requires a connected selected account. Explicit-address coin balance reads are public-address snapshots and do not create active account context. Active account is read context only, not signing authorization, login, custody, or persistent permission.",
117
118
  "Review activity tools summarize local Sui MCP review evidence only. Sui activity tools use user-requested bounded GraphQL reads and store normalized transaction facts only for known wallet context; function activity scans are sent-transaction scans only. They are not background indexers, complete history, balance history, complete gas history, affected-object history, or P&L.",
118
- `read.get_account_asset_timeline reads stored local account activity facts and returns observed raw net-flow bars with scan coverage. It does not start scans, prove complete wallet history, provide held balances without balanceBars, compute USD value, P&L, tax, cost basis, route advice, transaction-building input, signing data, or signing readiness. Optional USDC references are token-denominated ${DEEPBOOK_SOURCE_OWNER_RUNTIME_WORDING.officialIndexerCandleReferences} only, ${DEEPBOOK_SOURCE_OWNER_RUNTIME_WORDING.usdcNotFiatUsdAndNotPeg}.`,
119
+ `read_get_account_asset_timeline reads stored local account activity facts and returns observed raw net-flow bars with scan coverage. It does not start scans, prove complete wallet history, provide held balances without balanceBars, compute USD value, P&L, tax, cost basis, route advice, transaction-building input, signing data, or signing readiness. Optional USDC references are token-denominated ${DEEPBOOK_SOURCE_OWNER_RUNTIME_WORDING.officialIndexerCandleReferences} only, ${DEEPBOOK_SOURCE_OWNER_RUNTIME_WORDING.usdcNotFiatUsdAndNotPeg}.`,
119
120
  "Sui activity transactionContext facts are transaction-level facts without transaction-wide balance-change aggregates, and they are answer fields only when the response returns them. requestedAccountTransactionFacts, requestedAccount, and requestedAccountEffect are the account-specific balance-change surfaces. Activity quantitySemantics marks balance amountRaw fields as raw integers that require verified decimals for display conversion. accountBalanceChangeInferencePolicy marks whether returned account balance rows can be used or transaction-level context must not be used for account amount inference. Gas raw fields use MIST, and returned gasCost display facts use @mysten/sui MIST_PER_SUI.",
120
121
  "Wallet asset classification covers only current coin balances returned by Sui gRPC listBalances for an explicit address or the active account. Wallet balance quantitySemantics marks those reads as current snapshots, not transaction history, receipt proof, acquisition source, object provenance, P&L, cost basis, or signing material. DeepBook account inventory is a separate active-account read surface; neither surface creates routes, funding plans, portfolio plans, or signing material.",
121
122
  "High-risk read responses include userAnswerUse. Prefer userAnswerUse.preconditionFields before answering, userAnswerUse.answerFields for the answer path, userAnswerUse.conclusionRuleFields for conclusion limits, userAnswerUse.diagnosticOnlyFields for source or troubleshooting context, and userAnswerUse.followUp when a different tool and field are required. USD intent and parity responses also include toolAvailability as a precondition field for current server-build support.",
122
123
  "Intent evidence maps natural-language USD-denominated targets to pinned DeepBook SDK settlement asset groups and current wallet balance evidence. responseSummary.answerCompleteness names the answer class and required fields. Settlement-asset-only answers use responseSummary; selected-target evidence requires user selection provenance and also uses selectedTarget, candidateConversions, and requiredUserChoices when userAnswerUse.answerFields lists them. Direct pool quote evidence is returned and supported only when a quoted candidate exists. responseSummary.doNotUseForConclusion names quote results, outside-settlement-group assets, and route-dependent support as excluded from the conclusion. Intent evidence does not silently choose settlement assets, rank venues or routes, evaluate gas reserve, build transactions, or produce signing material.",
123
- "DeepBook quotes convert explicit raw or display source inputs through pinned token units and return scoped SDK simulation facts plus raw quote evidence. Their quantitySemantics says canUseForPaymentAnswer and canUseForShortfallAnswer are false, doNotCombineWithPaymentAnswer is true, requiredPaymentAnswerTool is read.preview_intent_evidence, and requiredPaymentAnswerField is responseSummary.",
124
+ "DeepBook quotes convert explicit raw or display source inputs through pinned token units and return scoped SDK simulation facts plus raw quote evidence. Their quantitySemantics says canUseForPaymentAnswer and canUseForShortfallAnswer are false, doNotCombineWithPaymentAnswer is true, requiredPaymentAnswerTool is read_preview_intent_evidence, and requiredPaymentAnswerField is responseSummary.",
124
125
  "Action preparation returns internal Review cards. A current card with valid UI permission automatically prepares and renews verified conditions for one selected wallet/account; only the explicit Request wallet approval action can request a signature. Supported DeepBook account-bound swap review verifies stored transaction material, digest, ownership, quote/policy, human-readable facts, simulation and PTB evidence. Only a scoped app-only user action and wallet approval authorize the backend WalletConnect request; ordinary MCP calls never sign or submit. Transaction bytes and signatures never enter card/model results. The backend verifies returned transaction digest and signer, submits once, and independently reads chain effects. requestStatus is separate from chain execution success/failure: stopped, request_failed and outcome_unknown do not prove a chain failure. Lost replies are resolved by reading the same request/digest, never automatic resubmission. External proposals remain non-signable. Receipts do not establish execution guarantees, route quality, fiat value, P&L, tax, peg proof or best-price advice.",
125
- "read.list_deepbook_pools and read.list_deepbook_tokens return static SDK registry metadata, not live liquidity, live token discovery, or active pool state.",
126
+ "read_list_deepbook_pools and read_list_deepbook_tokens return static SDK registry metadata, not live liquidity, live token discovery, or active pool state.",
126
127
  `DeepBook orderbook, mid-price, and quote outputs are ${DEEPBOOK_SOURCE_OWNER_RUNTIME_WORDING.pinnedSdkSnapshots} at fetchedAt; treat them as stale if the user delays.`,
127
128
  `DeepBook USDC price history and price-at-time reads use ${DEEPBOOK_SOURCE_OWNER_RUNTIME_WORDING.officialIndexerCandleData} for the requested official interval. They are external candle evidence only, not live quotes, historical mid prices, global market prices, fiat USD values, USDC/USD peg guarantees, route recommendations, transaction-building inputs, signing readiness, P&L, cost basis, user-account transaction history, or user-account balance history. Sui MCP does not independently recompute those candle values from chain history for the response.`,
128
- `ui.open_chart displays ${DEEPBOOK_SOURCE_OWNER_RUNTIME_WORDING.officialIndexerUsdcDenominatedCandles} in an internal read-only card. ui.open_account displays a public-address asset snapshot; ui.open_receipt displays the executed transaction graph when bound UI metadata is available, followed by on-chain facts and a Details slide. Card inputs end after backend admission, expiry or invalidation; chat navigation and frame recreation do not end valid unsubmitted input. Read the same DB state after a lost reply rather than resubmitting. Saved results do not authorize a new query or transaction. These cards are not live feeds, trading interfaces, route recommendations, fiat USD value, P&L, tax, cost basis, signing data, or signing readiness.`,
129
+ `ui_open_chart displays ${DEEPBOOK_SOURCE_OWNER_RUNTIME_WORDING.officialIndexerUsdcDenominatedCandles} in an internal read-only card. ui_open_account displays a public-address asset snapshot; ui_open_receipt displays the executed transaction graph when bound UI metadata is available, followed by on-chain facts and a Details slide. Card inputs end after backend admission, expiry or invalidation; chat navigation and frame recreation do not end valid unsubmitted input. Read the same DB state after a lost reply rather than resubmitting. Saved results do not authorize a new query or transaction. These cards are not live feeds, trading interfaces, route recommendations, fiat USD value, P&L, tax, cost basis, signing data, or signing readiness.`,
129
130
  "Settings uses an internal card. MCP settings tools create the card or read current settings; only the user's scoped card confirmation applies local changes or restarts the connection service. Backup bytes stay in app-only file transfer. No external Settings URL exists."
130
131
  ];
@@ -1,50 +1,50 @@
1
1
  export const TOOL_NAMES = {
2
- uiOpenAccount: "ui.open_account",
3
- uiOpenReceipt: "ui.open_receipt",
4
- uiOpenChart: "ui.open_chart",
5
- uiReadCard: "ui.read_card",
6
- uiSubmitCard: "ui.submit_card",
7
- uiActCard: "ui.act_card",
8
- uiReadSettingsFile: "ui.read_settings_file",
9
- sessionOpenReviewManagement: "session.open_review_management",
10
- readGetServerStatus: "read.get_server_status",
11
- readListSupportedProtocols: "read.list_supported_protocols",
12
- readListDeepbookPools: "read.list_deepbook_pools",
13
- readListDeepbookTokens: "read.list_deepbook_tokens",
14
- readInspectDeepbookOrderbook: "read.inspect_deepbook_orderbook",
15
- readGetDeepbookMidPrice: "read.get_deepbook_mid_price",
16
- readGetDeepbookUsdcPriceHistory: "read.get_deepbook_usdc_price_history",
17
- readGetDeepbookUsdcPriceAtTime: "read.get_deepbook_usdc_price_at_time",
18
- readQuoteDeepbookAction: "read.quote_deepbook_action",
19
- readQuoteDeepbookDisplayAmount: "read.quote_deepbook_display_amount",
20
- readSummarizeDeepbookAccountInventory: "read.summarize_deepbook_account_inventory",
21
- readSummarizeWalletAssets: "read.summarize_wallet_assets",
22
- readClassifyWalletAssets: "read.classify_wallet_assets",
23
- readListSettlementAssetGroups: "read.list_settlement_asset_groups",
24
- readSummarizeSettlementAssetGroupParity: "read.summarize_settlement_asset_group_parity",
25
- readPreviewIntentEvidence: "read.preview_intent_evidence",
26
- readListReviewActivity: "read.list_review_activity",
27
- readSummarizeReviewFunnel: "read.summarize_review_funnel",
28
- readGetReviewSessionDetail: "read.get_review_session_detail",
29
- readInspectSuiTransaction: "read.inspect_sui_transaction",
30
- readScanSuiAccountActivity: "read.scan_sui_account_activity",
31
- readSummarizeSuiActivityScan: "read.summarize_sui_activity_scan",
32
- readScanSuiFunctionActivity: "read.scan_sui_function_activity",
33
- readSummarizeSuiFunctionActivityScan: "read.summarize_sui_function_activity_scan",
34
- readSummarizeSuiAccountActivity: "read.summarize_sui_account_activity",
35
- readGetAccountAssetTimeline: "read.get_account_asset_timeline",
36
- settingsCreateLocalSettingsSession: "settings.create_local_settings_session",
37
- settingsGetLocalSettings: "settings.get_local_settings",
38
- actionPrepareSuiActionReview: "action.prepare_sui_action_review",
39
- actionPrepareExternalProposalReview: "action.prepare_external_proposal_review",
40
- sessionCreateWalletConnection: "session.create_wallet_connection",
41
- sessionGetWalletConnection: "session.get_wallet_connection",
42
- sessionWaitWalletConnection: "session.wait_wallet_connection",
43
- sessionGetInteractionStatus: "session.get_interaction_status",
44
- sessionGetReviewStatus: "session.get_review_status",
45
- sessionGetExecutionResult: "session.get_execution_result",
46
- sessionWaitExecutionResult: "session.wait_execution_result",
47
- accountGetActiveAccount: "account.get_active_account"
2
+ uiOpenAccount: "ui_open_account",
3
+ uiOpenReceipt: "ui_open_receipt",
4
+ uiOpenChart: "ui_open_chart",
5
+ uiReadCard: "ui_read_card",
6
+ uiSubmitCard: "ui_submit_card",
7
+ uiActCard: "ui_act_card",
8
+ uiReadSettingsFile: "ui_read_settings_file",
9
+ sessionOpenReviewManagement: "session_open_review_management",
10
+ readGetServerStatus: "read_get_server_status",
11
+ readListSupportedProtocols: "read_list_supported_protocols",
12
+ readListDeepbookPools: "read_list_deepbook_pools",
13
+ readListDeepbookTokens: "read_list_deepbook_tokens",
14
+ readInspectDeepbookOrderbook: "read_inspect_deepbook_orderbook",
15
+ readGetDeepbookMidPrice: "read_get_deepbook_mid_price",
16
+ readGetDeepbookUsdcPriceHistory: "read_get_deepbook_usdc_price_history",
17
+ readGetDeepbookUsdcPriceAtTime: "read_get_deepbook_usdc_price_at_time",
18
+ readQuoteDeepbookAction: "read_quote_deepbook_action",
19
+ readQuoteDeepbookDisplayAmount: "read_quote_deepbook_display_amount",
20
+ readSummarizeDeepbookAccountInventory: "read_summarize_deepbook_account_inventory",
21
+ readSummarizeWalletAssets: "read_summarize_wallet_assets",
22
+ readClassifyWalletAssets: "read_classify_wallet_assets",
23
+ readListSettlementAssetGroups: "read_list_settlement_asset_groups",
24
+ readSummarizeSettlementAssetGroupParity: "read_summarize_settlement_asset_group_parity",
25
+ readPreviewIntentEvidence: "read_preview_intent_evidence",
26
+ readListReviewActivity: "read_list_review_activity",
27
+ readSummarizeReviewFunnel: "read_summarize_review_funnel",
28
+ readGetReviewSessionDetail: "read_get_review_session_detail",
29
+ readInspectSuiTransaction: "read_inspect_sui_transaction",
30
+ readScanSuiAccountActivity: "read_scan_sui_account_activity",
31
+ readSummarizeSuiActivityScan: "read_summarize_sui_activity_scan",
32
+ readScanSuiFunctionActivity: "read_scan_sui_function_activity",
33
+ readSummarizeSuiFunctionActivityScan: "read_summarize_sui_function_activity_scan",
34
+ readSummarizeSuiAccountActivity: "read_summarize_sui_account_activity",
35
+ readGetAccountAssetTimeline: "read_get_account_asset_timeline",
36
+ settingsCreateLocalSettingsSession: "settings_create_local_settings_session",
37
+ settingsGetLocalSettings: "settings_get_local_settings",
38
+ actionStartReview: "action_start_review",
39
+ actionCreateProposalReview: "action_create_proposal_review",
40
+ sessionOpenWalletConnectionCard: "session_open_wallet_connection_card",
41
+ sessionGetWalletConnectionCard: "session_get_wallet_connection_card",
42
+ sessionWaitWalletConnectionCard: "session_wait_wallet_connection_card",
43
+ sessionGetInteractionStatus: "session_get_interaction_status",
44
+ sessionGetReviewStatus: "session_get_review_status",
45
+ sessionGetExecutionResult: "session_get_execution_result",
46
+ sessionWaitExecutionResult: "session_wait_execution_result",
47
+ accountGetActiveAccount: "account_get_active_account"
48
48
  };
49
49
  export function assertValidToolName(name) {
50
50
  if (!/^[A-Za-z0-9_.-]{1,128}$/.test(name)) {
@@ -13,8 +13,8 @@ import { activityStoreToolError, sessionStoreToolError } from "../../toolErrors.
13
13
  import { TOOL_NAMES } from "../../toolNames.js";
14
14
  import { userAnswerUseSchema } from "../read/commonSchemas.js";
15
15
  export function registerActionTools(server, deps) {
16
- server.registerTool(TOOL_NAMES.actionPrepareSuiActionReview, {
17
- title: "Prepare swap review",
16
+ server.registerTool(TOOL_NAMES.actionStartReview, {
17
+ title: "Start swap review",
18
18
  description: "Create a local swap review session on a supported protocol. Returns an internal review card.",
19
19
  inputSchema: z.object({
20
20
  intent: swapIntentInputSchema
@@ -82,8 +82,8 @@ export function registerActionTools(server, deps) {
82
82
  return sessionStoreToolError(error, deps.logger);
83
83
  }
84
84
  });
85
- registerSuiMcpTool(server, TOOL_NAMES.actionPrepareExternalProposalReview, {
86
- title: "Prepare external proposal review",
85
+ registerSuiMcpTool(server, TOOL_NAMES.actionCreateProposalReview, {
86
+ title: "Create external proposal review",
87
87
  description: "Create a local non-signable review session from an untrusted external Sui proposal.",
88
88
  inputSchema: z.object({
89
89
  proposal: externalProposalSchema
@@ -283,7 +283,7 @@ const deepbookQuoteQuantitySemanticsSchema = z.object({
283
283
  canUseForPaymentAnswer: z.literal(false),
284
284
  canUseForShortfallAnswer: z.literal(false),
285
285
  doNotCombineWithPaymentAnswer: z.literal(true),
286
- requiredPaymentAnswerTool: z.literal("read.preview_intent_evidence"),
286
+ requiredPaymentAnswerTool: z.literal("read_preview_intent_evidence"),
287
287
  paymentAnswerUseBlockedReason: z.literal("quote_output_is_price_reference_not_payment_answer"),
288
288
  requiredPaymentAnswerField: z.literal("responseSummary"),
289
289
  fiatUsdCashOutAvailable: z.literal(false),
@@ -4,8 +4,8 @@ import { registerServerStatusTools, SUPPORTED_PROTOCOLS } from "./serverStatusTo
4
4
  import { registerTransactionActivityTools } from "./transactionActivityTools.js";
5
5
  import { registerWalletReadTools } from "./walletReadTools.js";
6
6
  export { SUPPORTED_PROTOCOLS };
7
- export function registerReadTools(server, deps) {
8
- registerServerStatusTools(server);
7
+ export function registerReadTools(server, deps, registeredPromptNames) {
8
+ registerServerStatusTools(server, registeredPromptNames);
9
9
  registerDeepbookReadTools(server, deps);
10
10
  registerWalletReadTools(server, deps);
11
11
  registerReviewActivityListTool(server, deps);
@@ -56,7 +56,7 @@ export async function resolveExplicitOrActiveAccount(input, deps) {
56
56
  ...(context?.connectionReconciliationRequired ? { connectionReconciliationRequired: true } : {}),
57
57
  followUp: { tool: TOOL_NAMES.sessionGetInteractionStatus,
58
58
  answerFields: ["walletAvailability", "connections", "pendingWalletConnections", "assetReadAccount"],
59
- reason: `Check current connections and pending operations. Use pendingWalletConnections.items[].cardId with ${TOOL_NAMES.sessionGetWalletConnection} or ${TOOL_NAMES.sessionWaitWalletConnection}. If no operation is pending and the user requests connection or account selection, open ${TOOL_NAMES.sessionCreateWalletConnection}. Only the user may act in that card.` } } }) };
59
+ reason: `Check current connections and pending operations. Use pendingWalletConnections.items[].cardId with ${TOOL_NAMES.sessionGetWalletConnectionCard} or ${TOOL_NAMES.sessionWaitWalletConnectionCard}. If no operation is pending and the user requests connection or account selection, open ${TOOL_NAMES.sessionOpenWalletConnectionCard}. Only the user may act in that card.` } } }) };
60
60
  }
61
61
  const message = context?.connectionReconciliationRequired ? CONNECTION_RECONCILIATION_MESSAGE + " Provide a Sui address in chat for this public read." : context?.connectionConflict ? CONNECTION_CONFLICT_MESSAGE + " Provide a Sui address in chat for this public read." : availability.status !== "available"
62
62
  ? "The wallet connection cannot be checked. Please provide a Sui address in chat to view its assets."
@@ -1,7 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { noParamsInputSchema, successOutputSchema } from "../../schemas.js";
3
3
  import { okToolResult } from "../../result.js";
4
- import { MCP_PROMPTS } from "../../prompts.js";
5
4
  import { MCP_RESOURCES } from "../../resources.js";
6
5
  import { EVIDENCE_POLICY, FAIL_CLOSED_TOOLS, IMPLEMENTED_TOOLS, PACKAGE_NAME, SERVER_LIMITATIONS, SERVER_NAME, SERVER_NETWORK, SERVER_RUNTIME, SERVER_TRANSPORT, SERVER_VERSION } from "../../serverInfo.js";
7
6
  import { TOOL_NAMES } from "../../toolNames.js";
@@ -9,7 +8,7 @@ export const SUPPORTED_PROTOCOLS = [
9
8
  { id: "deepbook-v3", status: "mainnet", support: "read_and_local_review" },
10
9
  { id: "deepbook-margin", status: "mainnet", support: "protocol_notes_only" }
11
10
  ];
12
- export function registerServerStatusTools(server) {
11
+ export function registerServerStatusTools(server, registeredPromptNames) {
13
12
  server.registerTool(TOOL_NAMES.readGetServerStatus, {
14
13
  title: "Get server status",
15
14
  description: "Return package, runtime, tool, resource, and prompt status.",
@@ -45,7 +44,7 @@ export function registerServerStatusTools(server) {
45
44
  count: z.number().int().nonnegative(),
46
45
  names: z.array(z.string())
47
46
  }),
48
- protocolsTool: z.literal("read.list_supported_protocols"),
47
+ protocolsTool: z.literal("read_list_supported_protocols"),
49
48
  limitations: z.array(z.string())
50
49
  }),
51
50
  annotations: { readOnlyHint: true, openWorldHint: false }
@@ -75,8 +74,8 @@ export function registerServerStatusTools(server) {
75
74
  }))
76
75
  },
77
76
  prompts: {
78
- count: MCP_PROMPTS.length,
79
- names: MCP_PROMPTS.map((prompt) => prompt.name)
77
+ count: registeredPromptNames.length,
78
+ names: [...registeredPromptNames]
80
79
  },
81
80
  protocolsTool: TOOL_NAMES.readListSupportedProtocols,
82
81
  limitations: [...SERVER_LIMITATIONS]
@@ -171,7 +171,7 @@ const suiTransactionAuditFactSchema = z.object({
171
171
  requestedAccountEffect: transactionAccountEffectsSchema.optional(),
172
172
  transactionContext: requestedAccountTransactionContextSchema.optional(),
173
173
  detailLookup: z.object({
174
- tool: z.literal("read.inspect_sui_transaction"),
174
+ tool: z.literal("read_inspect_sui_transaction"),
175
175
  digest: z.string()
176
176
  })
177
177
  });
@@ -194,7 +194,7 @@ const requestedAccountTransactionFactSchema = z.object({
194
194
  requestedAccountEffect: transactionAccountEffectsSchema,
195
195
  transactionContext: requestedAccountTransactionContextSchema.optional(),
196
196
  detailLookup: z.object({
197
- tool: z.literal("read.inspect_sui_transaction"),
197
+ tool: z.literal("read_inspect_sui_transaction"),
198
198
  digest: z.string()
199
199
  })
200
200
  });
@@ -331,7 +331,7 @@ const externalActivityTransactionRecordSchema = z.object({
331
331
  compact: externalActivityTransactionCompactFactsSchema.optional(),
332
332
  details: externalActivityTransactionDetailSchema.optional(),
333
333
  detailLookup: z.object({
334
- tool: z.literal("read.inspect_sui_transaction"),
334
+ tool: z.literal("read_inspect_sui_transaction"),
335
335
  digest: z.string()
336
336
  }).optional()
337
337
  });
@@ -10,7 +10,7 @@ import { CardError } from "../../../core/session/cardSessionStore.js";
10
10
  import { sessionStoreToolError } from "../../toolErrors.js";
11
11
  export function registerWalletConnectionTools(server, deps) {
12
12
  const failure = (error) => sessionStoreToolError(error, deps.logger);
13
- server.registerTool(TOOL_NAMES.sessionCreateWalletConnection, {
13
+ server.registerTool(TOOL_NAMES.sessionOpenWalletConnectionCard, {
14
14
  title: "Open wallet connection controls", description: "Open a card for Sui wallet connection, disconnection and account selection.",
15
15
  inputSchema: z.object({ intent: z.enum(["manage", "connect", "disconnect"]).default("manage") }), outputSchema: successOutputSchema(cardSnapshotSchema.shape),
16
16
  _meta: cardMetadata("connect"), annotations: { readOnlyHint: false, openWorldHint: false }
@@ -20,8 +20,8 @@ export function registerWalletConnectionTools(server, deps) {
20
20
  catch (error) {
21
21
  return failure(error);
22
22
  } });
23
- server.registerTool(TOOL_NAMES.sessionGetWalletConnection, {
24
- title: "Get wallet connection", description: "Read the saved state of one wallet connection card.",
23
+ server.registerTool(TOOL_NAMES.sessionGetWalletConnectionCard, {
24
+ title: "Get wallet connection card", description: "Read the saved state of one wallet connection card.",
25
25
  inputSchema: z.object({ cardId: z.string().min(1) }), outputSchema: successOutputSchema(cardSnapshotSchema.shape),
26
26
  annotations: { readOnlyHint: false, openWorldHint: false }
27
27
  }, async ({ cardId }) => {
@@ -37,8 +37,8 @@ export function registerWalletConnectionTools(server, deps) {
37
37
  return failure(error);
38
38
  }
39
39
  });
40
- server.registerTool(TOOL_NAMES.sessionWaitWalletConnection, {
41
- title: "Wait for wallet connection", description: "Wait briefly for a wallet connection card's approval or required user input.",
40
+ server.registerTool(TOOL_NAMES.sessionWaitWalletConnectionCard, {
41
+ title: "Wait for wallet connection card", description: "Wait briefly for a wallet connection card's approval or required user input.",
42
42
  inputSchema: z.object({ cardId: z.string().min(1), timeoutMs: timeoutInputSchema }),
43
43
  outputSchema: successOutputSchema({ waitOutcome: z.enum(WAIT_OUTCOMES), card: cardSnapshotSchema }),
44
44
  annotations: { readOnlyHint: false, openWorldHint: false }