helius-mcp 1.3.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CHANGELOG.md +151 -79
  2. package/LICENSE +21 -21
  3. package/README.md +144 -132
  4. package/dist/http.d.ts +1 -1
  5. package/dist/index.js +2 -56
  6. package/dist/results/store.d.ts +8 -0
  7. package/dist/results/store.js +72 -0
  8. package/dist/results/types.d.ts +47 -0
  9. package/dist/results/types.js +1 -0
  10. package/dist/router/action-groups.d.ts +6 -0
  11. package/dist/router/action-groups.js +32 -0
  12. package/dist/router/action-handlers.d.ts +20 -0
  13. package/dist/router/action-handlers.js +125 -0
  14. package/dist/router/actions.d.ts +12 -0
  15. package/dist/router/actions.js +125 -0
  16. package/dist/router/catalog.d.ts +6 -0
  17. package/dist/router/catalog.js +394 -0
  18. package/dist/router/context.d.ts +5 -0
  19. package/dist/router/context.js +10 -0
  20. package/dist/router/dispatch.d.ts +4 -0
  21. package/dist/router/dispatch.js +276 -0
  22. package/dist/router/instructions.d.ts +1 -0
  23. package/dist/router/instructions.js +25 -0
  24. package/dist/router/register.d.ts +2 -0
  25. package/dist/router/register.js +15 -0
  26. package/dist/router/required-params.d.ts +9 -0
  27. package/dist/router/required-params.js +68 -0
  28. package/dist/router/responses.d.ts +29 -0
  29. package/dist/router/responses.js +186 -0
  30. package/dist/router/schemas.d.ts +224 -0
  31. package/dist/router/schemas.js +204 -0
  32. package/dist/router/telemetry.d.ts +27 -0
  33. package/dist/router/telemetry.js +52 -0
  34. package/dist/router/types.d.ts +46 -0
  35. package/dist/router/types.js +1 -0
  36. package/dist/scripts/validate-catalog.d.ts +2 -2
  37. package/dist/scripts/validate-catalog.js +10 -10
  38. package/dist/tools/accounts.js +5 -5
  39. package/dist/tools/assets.js +5 -5
  40. package/dist/tools/auth.js +392 -319
  41. package/dist/tools/config.js +3 -3
  42. package/dist/tools/das-extras.js +6 -6
  43. package/dist/tools/docs.js +55 -41
  44. package/dist/tools/enhanced-websockets.js +13 -13
  45. package/dist/tools/fees.js +3 -3
  46. package/dist/tools/index.d.ts +1 -1
  47. package/dist/tools/index.js +2 -80
  48. package/dist/tools/laserstream.js +20 -23
  49. package/dist/tools/network.js +10 -4
  50. package/dist/tools/plans.d.ts +0 -5
  51. package/dist/tools/plans.js +167 -12
  52. package/dist/tools/product-catalog.d.ts +1 -0
  53. package/dist/tools/product-catalog.js +52 -17
  54. package/dist/tools/recommend.d.ts +0 -1
  55. package/dist/tools/recommend.js +9 -28
  56. package/dist/tools/shared.d.ts +1 -0
  57. package/dist/tools/shared.js +21 -13
  58. package/dist/tools/solana-knowledge.js +23 -7
  59. package/dist/tools/staking.d.ts +2 -0
  60. package/dist/tools/staking.js +268 -0
  61. package/dist/tools/transactions.js +256 -3
  62. package/dist/tools/transfers.js +38 -43
  63. package/dist/tools/wallet.js +77 -17
  64. package/dist/tools/webhooks.js +3 -3
  65. package/dist/tools/zk-compression.d.ts +2 -0
  66. package/dist/tools/zk-compression.js +781 -0
  67. package/dist/utils/config.d.ts +2 -2
  68. package/dist/utils/config.js +68 -6
  69. package/dist/utils/errors.d.ts +10 -1
  70. package/dist/utils/errors.js +46 -12
  71. package/dist/utils/feedback.js +1 -4
  72. package/dist/utils/helius.js +25 -14
  73. package/dist/utils/ows.d.ts +74 -0
  74. package/dist/utils/ows.js +155 -0
  75. package/dist/utils/resilience.d.ts +39 -0
  76. package/dist/utils/resilience.js +130 -0
  77. package/dist/version.d.ts +1 -1
  78. package/dist/version.js +1 -1
  79. package/package.json +63 -64
  80. package/system-prompts/helius/claude.system.md +200 -170
  81. package/system-prompts/helius/full.md +3236 -2869
  82. package/system-prompts/helius/openai.developer.md +200 -170
  83. package/system-prompts/helius-dflow/claude.system.md +324 -290
  84. package/system-prompts/helius-dflow/full.md +4160 -3648
  85. package/system-prompts/helius-dflow/openai.developer.md +324 -290
  86. package/system-prompts/helius-jupiter/claude.system.md +333 -0
  87. package/system-prompts/helius-jupiter/full.md +5133 -0
  88. package/system-prompts/helius-jupiter/openai.developer.md +333 -0
  89. package/system-prompts/helius-okx/claude.system.md +182 -0
  90. package/system-prompts/helius-okx/full.md +584 -0
  91. package/system-prompts/helius-okx/openai.developer.md +182 -0
  92. package/system-prompts/helius-phantom/claude.system.md +345 -333
  93. package/system-prompts/helius-phantom/full.md +5649 -5473
  94. package/system-prompts/helius-phantom/openai.developer.md +345 -333
  95. package/system-prompts/svm/claude.system.md +159 -159
  96. package/system-prompts/svm/full.md +631 -631
  97. package/system-prompts/svm/openai.developer.md +159 -159
  98. package/dist/scripts/test-htmltotext.d.ts +0 -5
  99. package/dist/scripts/test-htmltotext.js +0 -67
  100. package/dist/scripts/test-solana-knowledge.d.ts +0 -9
  101. package/dist/scripts/test-solana-knowledge.js +0 -272
  102. package/dist/scripts/validate-templates.d.ts +0 -12
  103. package/dist/scripts/validate-templates.js +0 -94
@@ -0,0 +1 @@
1
+ export declare const ROUTER_INSTRUCTIONS = "Helius MCP exposes 10 public tools total: 9 routed domain tools plus `expandResult`.\n\nChoose tools by user intent, not by name similarity.\n\nRouting:\n- Account setup, API keys, signup, plans, billing: `heliusAccount`\n- Wallet-centric balances, holdings, identity, wallet history: `heliusWallet`\n- Assets, NFTs, collections, token holders: `heliusAsset`\n- Parsed transactions or wallet transaction history: `heliusTransaction`\n- Raw chain state, token accounts, stake reads, blocks, network status, priority fees, transaction simulation: `heliusChain`\n- Webhook CRUD or live subscription configuration: `heliusStreaming`\n- Docs, guides, pricing references, troubleshooting, source, blog, SIMDs: `heliusKnowledge`\n- SOL/token transfers or staking mutations: `heliusWrite`\n- Compressed account, proof, balance, compression history: `heliusCompression`\n\nRules:\n- Use the chosen routed tool plus the Helius action name in `action`.\n- Wallet holdings use `heliusWallet.getTokenBalances`; raw token accounts use `heliusChain.getTokenAccounts`.\n- Parsed transaction details use `heliusTransaction.parseTransactions`; wallet activity listing uses `heliusTransaction.getTransactionHistory`; per-transfer rows (token + SOL with mint/direction/counterparty filters) use `heliusTransaction.getTransfersByAddress`.\n- Streaming or webhook setup guides live under `heliusKnowledge`; actual webhook/subscription config lives under `heliusStreaming`.\n- Pricing and plan selection start with `heliusAccount.getHeliusPlanInfo`; per-method credit costs or rate limits use `heliusKnowledge.getRateLimitInfo` or `heliusKnowledge.getHeliusCreditsInfo`.\n- Read queries stay on domain tools; sends and staking mutations use `heliusWrite`.\n- Heavy content is summary-first. Use `expandResult` with the returned `resultId` for sections, ranges, pages, or continuation.\n- Set `_feedback` to a short reason for the call or takeaway from the previous result. Avoid placeholders like `first_call`.\n- Set `_feedbackTool` to the current `publicTool.action`, e.g. `heliusWallet.getBalance`. Always send `_model`.";
@@ -0,0 +1,25 @@
1
+ export const ROUTER_INSTRUCTIONS = `Helius MCP exposes 10 public tools total: 9 routed domain tools plus \`expandResult\`.
2
+
3
+ Choose tools by user intent, not by name similarity.
4
+
5
+ Routing:
6
+ - Account setup, API keys, signup, plans, billing: \`heliusAccount\`
7
+ - Wallet-centric balances, holdings, identity, wallet history: \`heliusWallet\`
8
+ - Assets, NFTs, collections, token holders: \`heliusAsset\`
9
+ - Parsed transactions or wallet transaction history: \`heliusTransaction\`
10
+ - Raw chain state, token accounts, stake reads, blocks, network status, priority fees, transaction simulation: \`heliusChain\`
11
+ - Webhook CRUD or live subscription configuration: \`heliusStreaming\`
12
+ - Docs, guides, pricing references, troubleshooting, source, blog, SIMDs: \`heliusKnowledge\`
13
+ - SOL/token transfers or staking mutations: \`heliusWrite\`
14
+ - Compressed account, proof, balance, compression history: \`heliusCompression\`
15
+
16
+ Rules:
17
+ - Use the chosen routed tool plus the Helius action name in \`action\`.
18
+ - Wallet holdings use \`heliusWallet.getTokenBalances\`; raw token accounts use \`heliusChain.getTokenAccounts\`.
19
+ - Parsed transaction details use \`heliusTransaction.parseTransactions\`; wallet activity listing uses \`heliusTransaction.getTransactionHistory\`; per-transfer rows (token + SOL with mint/direction/counterparty filters) use \`heliusTransaction.getTransfersByAddress\`.
20
+ - Streaming or webhook setup guides live under \`heliusKnowledge\`; actual webhook/subscription config lives under \`heliusStreaming\`.
21
+ - Pricing and plan selection start with \`heliusAccount.getHeliusPlanInfo\`; per-method credit costs or rate limits use \`heliusKnowledge.getRateLimitInfo\` or \`heliusKnowledge.getHeliusCreditsInfo\`.
22
+ - Read queries stay on domain tools; sends and staking mutations use \`heliusWrite\`.
23
+ - Heavy content is summary-first. Use \`expandResult\` with the returned \`resultId\` for sections, ranges, pages, or continuation.
24
+ - Set \`_feedback\` to a short reason for the call or takeaway from the previous result. Avoid placeholders like \`first_call\`.
25
+ - Set \`_feedbackTool\` to the current \`publicTool.action\`, e.g. \`heliusWallet.getBalance\`. Always send \`_model\`.`;
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerRouterTools(server: McpServer): void;
@@ -0,0 +1,15 @@
1
+ import { dispatchRoutedTool, expandStoredResult } from './dispatch.js';
2
+ import { withTelemetryHandler } from './telemetry.js';
3
+ import { EXPAND_RESULT_SCHEMA, HELIUS_ACCOUNT_SCHEMA, HELIUS_ASSET_SCHEMA, HELIUS_CHAIN_SCHEMA, HELIUS_COMPRESSION_SCHEMA, HELIUS_KNOWLEDGE_SCHEMA, HELIUS_STREAMING_SCHEMA, HELIUS_TRANSACTION_SCHEMA, HELIUS_WALLET_SCHEMA, HELIUS_WRITE_SCHEMA, } from './schemas.js';
4
+ export function registerRouterTools(server) {
5
+ server.tool('heliusAccount', 'Account setup, API keys, signup, plans, and billing. Use for pricing or account state, not per-method rate limits.', HELIUS_ACCOUNT_SCHEMA, withTelemetryHandler('heliusAccount', (params, extra) => dispatchRoutedTool('heliusAccount', params, extra)));
6
+ server.tool('heliusWallet', 'Wallet-centric balances, holdings, identity, and wallet history. Use for portfolio views, not raw token accounts.', HELIUS_WALLET_SCHEMA, withTelemetryHandler('heliusWallet', (params, extra) => dispatchRoutedTool('heliusWallet', params, extra)));
7
+ server.tool('heliusAsset', 'Assets, NFTs, collections, proofs, and token holders. Use for DAS ownership or metadata, not transaction history.', HELIUS_ASSET_SCHEMA, withTelemetryHandler('heliusAsset', (params, extra) => dispatchRoutedTool('heliusAsset', params, extra)));
8
+ server.tool('heliusTransaction', 'Parsed transactions and wallet transaction history. Use for activity analysis, not raw account state.', HELIUS_TRANSACTION_SCHEMA, withTelemetryHandler('heliusTransaction', (params, extra) => dispatchRoutedTool('heliusTransaction', params, extra)));
9
+ server.tool('heliusChain', 'Raw chain state, token accounts, stake reads, blocks, network status, priority fees, and transaction simulation. Use for token accounts or blocks, not wallet portfolio summaries.', HELIUS_CHAIN_SCHEMA, withTelemetryHandler('heliusChain', (params, extra) => dispatchRoutedTool('heliusChain', params, extra)));
10
+ server.tool('heliusStreaming', 'Webhook CRUD and live subscription configuration. Use for actual webhook/subscription setup, not how-to guides.', HELIUS_STREAMING_SCHEMA, withTelemetryHandler('heliusStreaming', (params, extra) => dispatchRoutedTool('heliusStreaming', params, extra)));
11
+ server.tool('heliusKnowledge', 'Docs, guides, pricing references, troubleshooting, source, blog, and SIMD research. Use for guides, rate limits, or errors, not live mutations.', HELIUS_KNOWLEDGE_SCHEMA, withTelemetryHandler('heliusKnowledge', (params, extra) => dispatchRoutedTool('heliusKnowledge', params, extra)));
12
+ server.tool('heliusWrite', 'Mutating SOL/token transfer and staking actions. Use for sends or staking, not read-only queries.', HELIUS_WRITE_SCHEMA, withTelemetryHandler('heliusWrite', (params, extra) => dispatchRoutedTool('heliusWrite', params, extra)));
13
+ server.tool('heliusCompression', 'Compressed account, proof, balance, and compression history queries. Use for zk-compression state, not standard DAS assets.', HELIUS_COMPRESSION_SCHEMA, withTelemetryHandler('heliusCompression', (params, extra) => dispatchRoutedTool('heliusCompression', params, extra)));
14
+ server.tool('expandResult', 'Expand a prior summary-first result by resultId, section, range, page, or continuation.', EXPAND_RESULT_SCHEMA, withTelemetryHandler('expandResult', (params, extra) => expandStoredResult(params, extra)));
15
+ }
@@ -0,0 +1,9 @@
1
+ import type { ActionName } from './actions.js';
2
+ /**
3
+ * Map of actions to their required top-level parameters.
4
+ *
5
+ * Only actions with unambiguous required fields are listed here.
6
+ * Actions with "one-of" requirements (e.g. getAsset needs `id` OR `ids`)
7
+ * or no required params are omitted — those rely on bespoke handler validation.
8
+ */
9
+ export declare const ACTION_REQUIRED_PARAMS: Partial<Record<ActionName, string[]>>;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Map of actions to their required top-level parameters.
3
+ *
4
+ * Only actions with unambiguous required fields are listed here.
5
+ * Actions with "one-of" requirements (e.g. getAsset needs `id` OR `ids`)
6
+ * or no required params are omitted — those rely on bespoke handler validation.
7
+ */
8
+ export const ACTION_REQUIRED_PARAMS = {
9
+ // Wallet
10
+ getBalance: ['address'],
11
+ getTokenBalances: ['address'],
12
+ getWalletBalances: ['address'],
13
+ getWalletBalanceAt: ['address', 'mint'],
14
+ getWalletHistory: ['address'],
15
+ getWalletTransfers: ['address'],
16
+ getWalletIdentity: ['address'],
17
+ batchWalletIdentity: ['addresses'],
18
+ getWalletFundedBy: ['address'],
19
+ // Transaction
20
+ parseTransactions: ['signatures'],
21
+ getTransactionHistory: ['address'],
22
+ getTransfersByAddress: ['address'],
23
+ // Asset
24
+ getAssetsByOwner: ['address'],
25
+ getAssetsByGroup: ['groupKey', 'groupValue'],
26
+ getAssetProof: ['id'],
27
+ getAssetProofBatch: ['ids'],
28
+ getSignaturesForAsset: ['id'],
29
+ getNftEditions: ['mint'],
30
+ // Chain
31
+ getTokenHolders: ['mint'],
32
+ getProgramAccounts: ['programId'],
33
+ getBlock: ['slot'],
34
+ simulateTransaction: ['transaction'],
35
+ getWithdrawableAmount: ['stakeAccount'],
36
+ // Streaming
37
+ createWebhook: ['webhookURL', 'accountAddresses'],
38
+ getWebhookByID: ['webhookID'],
39
+ updateWebhook: ['webhookID'],
40
+ deleteWebhook: ['webhookID'],
41
+ accountSubscribe: ['account'],
42
+ // Knowledge
43
+ troubleshootError: ['errorCode'],
44
+ recommendStack: ['description'],
45
+ getSIMD: ['number'],
46
+ searchSolanaDocs: ['query'],
47
+ readSolanaSourceFile: ['path'],
48
+ compareHeliusPlans: ['category'],
49
+ // Write
50
+ transferSol: ['recipientAddress'],
51
+ transferToken: ['recipientAddress', 'mintAddress'],
52
+ stakeSOL: ['amount'],
53
+ unstakeSOL: ['stakeAccount'],
54
+ withdrawStake: ['stakeAccount'],
55
+ // Compression
56
+ getCompressedAccountsByOwner: ['owner'],
57
+ getCompressedBalanceByOwner: ['owner'],
58
+ getCompressedMintTokenHolders: ['mint'],
59
+ getCompressedTokenAccountsByOwner: ['owner'],
60
+ getCompressedTokenAccountsByDelegate: ['delegate'],
61
+ getCompressedTokenBalancesByOwnerV2: ['owner'],
62
+ getCompressedAccountProof: ['hash'],
63
+ getCompressionSignaturesForAccount: ['hash'],
64
+ getCompressionSignaturesForAddress: ['address'],
65
+ getCompressionSignaturesForOwner: ['owner'],
66
+ getCompressionSignaturesForTokenOwner: ['owner'],
67
+ getTransactionWithCompressionInfo: ['signature'],
68
+ };
@@ -0,0 +1,29 @@
1
+ import type { DetailLevel, ResponseFamily } from './types.js';
2
+ export type RouterResponse = {
3
+ content: Array<{
4
+ type: 'text';
5
+ text: string;
6
+ }>;
7
+ isError?: boolean;
8
+ _meta?: Record<string, unknown>;
9
+ };
10
+ export declare function getFamilyLimit(family: ResponseFamily, detail: DetailLevel): number;
11
+ export declare function toPlainText(response: {
12
+ content?: Array<{
13
+ type?: string;
14
+ text?: string;
15
+ }>;
16
+ structuredContent?: unknown;
17
+ }): string;
18
+ export declare function compactErrorText(text: string, maxChars?: number): string;
19
+ export declare function cleanText(text: string): string;
20
+ export declare function truncateText(text: string, limit: number): string;
21
+ export declare function buildTextVariant(family: ResponseFamily, detail: DetailLevel, text: string): string;
22
+ export declare function estimateRenderedSize(text: string): number;
23
+ export declare function collectSectionHints(text: string): string[];
24
+ export declare function applySectionSelection(text: string, section?: string): string;
25
+ export declare function applyItemSelection(text: string, item?: number): string;
26
+ export declare function applyRangeSelection(text: string, range?: string): string;
27
+ export declare function mcpText(text: string, meta?: Record<string, unknown>): RouterResponse;
28
+ export declare function mcpErrorCompact(text: string, meta?: Record<string, unknown>): RouterResponse;
29
+ export declare function mcpResultHandle(summary: string, resultId: string, availableExpansions: string[], meta?: Record<string, unknown>): RouterResponse;
@@ -0,0 +1,186 @@
1
+ import { extractSections } from '../utils/docs.js';
2
+ const FAMILY_LIMITS = {
3
+ scalar: { summary: 800, standard: 1200, full: 1200 },
4
+ mutationReceipt: { summary: 1000, standard: 1500, full: 1500 },
5
+ record: { summary: 1500, standard: 3000, full: 8000 },
6
+ list: { summary: 2500, standard: 4500, full: 12000 },
7
+ history: { summary: 2500, standard: 4500, full: 12000 },
8
+ document: { summary: 2500, standard: 5000, full: 12000 },
9
+ streamingConfig: { summary: 2500, standard: 5000, full: 12000 },
10
+ catalog: { summary: 2500, standard: 5000, full: 12000 },
11
+ };
12
+ export function getFamilyLimit(family, detail) {
13
+ return FAMILY_LIMITS[family][detail];
14
+ }
15
+ export function toPlainText(response) {
16
+ const text = response.content
17
+ ?.filter((item) => item.type === 'text' || item.type === undefined)
18
+ .map((item) => item.text ?? '')
19
+ .join('\n\n')
20
+ .trim();
21
+ if (text) {
22
+ return text;
23
+ }
24
+ if (response.structuredContent !== undefined) {
25
+ return JSON.stringify(response.structuredContent, null, 2);
26
+ }
27
+ return '';
28
+ }
29
+ export function compactErrorText(text, maxChars = 1200) {
30
+ const withoutMeta = text
31
+ .replace(/^```json[\s\S]*?```\n*/i, '')
32
+ .replace(/\n{3,}/g, '\n\n')
33
+ .trim();
34
+ return truncateText(withoutMeta, maxChars);
35
+ }
36
+ export function cleanText(text) {
37
+ return text
38
+ .replace(/\r\n/g, '\n')
39
+ .replace(/\n{3,}/g, '\n\n')
40
+ .trim();
41
+ }
42
+ export function truncateText(text, limit) {
43
+ if (text.length <= limit) {
44
+ return text;
45
+ }
46
+ const truncated = text.slice(0, limit);
47
+ const boundary = Math.max(truncated.lastIndexOf('\n## '), truncated.lastIndexOf('\n### '), truncated.lastIndexOf('\n---\n'), truncated.lastIndexOf('\n\n'));
48
+ const cut = boundary > limit * 0.55 ? boundary : limit;
49
+ return `${truncated.slice(0, cut).trim()}\n\n[truncated]`;
50
+ }
51
+ function stripExampleCode(text) {
52
+ const markers = ['**Example Code:**', '**Example:**', '```typescript', '```ts', '```javascript', '```js'];
53
+ let cut = text.length;
54
+ for (const marker of markers) {
55
+ const index = text.indexOf(marker);
56
+ if (index >= 0) {
57
+ cut = Math.min(cut, index);
58
+ }
59
+ }
60
+ return cut === text.length ? text : text.slice(0, cut).trim();
61
+ }
62
+ function summarizeDocument(text, limit) {
63
+ const headings = Array.from(text.matchAll(/^#{1,3}\s+.+$/gm))
64
+ .map((match) => match[0])
65
+ .slice(0, 5);
66
+ const intro = text
67
+ .split('\n\n')
68
+ .map((part) => part.trim())
69
+ .filter(Boolean)
70
+ .slice(0, 3)
71
+ .join('\n\n');
72
+ const body = headings.length > 0 ? `${headings.join('\n')}\n\n${intro}` : intro || text;
73
+ return truncateText(body, limit);
74
+ }
75
+ function summarizeListLike(text, limit) {
76
+ const sections = text.split(/\n---\n|\n\n(?=\*\*|\p{Emoji_Presentation}|\p{Emoji}\s)/u);
77
+ const picked = [];
78
+ let current = 0;
79
+ for (const section of sections) {
80
+ const trimmed = section.trim();
81
+ if (!trimmed) {
82
+ continue;
83
+ }
84
+ const nextLength = current + trimmed.length + 2;
85
+ if (picked.length > 0 && nextLength > limit) {
86
+ break;
87
+ }
88
+ picked.push(trimmed);
89
+ current = nextLength;
90
+ }
91
+ const summary = picked.join('\n\n');
92
+ return truncateText(summary || text, limit);
93
+ }
94
+ export function buildTextVariant(family, detail, text) {
95
+ const limit = getFamilyLimit(family, detail);
96
+ const cleaned = cleanText(text);
97
+ if (!cleaned) {
98
+ return '';
99
+ }
100
+ if (detail === 'full') {
101
+ return truncateText(cleaned, limit);
102
+ }
103
+ switch (family) {
104
+ case 'streamingConfig':
105
+ return truncateText(stripExampleCode(cleaned), limit);
106
+ case 'document':
107
+ return summarizeDocument(stripExampleCode(cleaned), limit);
108
+ case 'list':
109
+ case 'history':
110
+ case 'catalog':
111
+ return summarizeListLike(stripExampleCode(cleaned), limit);
112
+ case 'scalar':
113
+ case 'mutationReceipt':
114
+ case 'record':
115
+ default:
116
+ return truncateText(stripExampleCode(cleaned), limit);
117
+ }
118
+ }
119
+ export function estimateRenderedSize(text) {
120
+ return cleanText(text).length;
121
+ }
122
+ export function collectSectionHints(text) {
123
+ return Array.from(text.matchAll(/^#{1,3}\s+(.+)$/gm))
124
+ .map((match) => match[1].trim())
125
+ .filter(Boolean)
126
+ .slice(0, 12);
127
+ }
128
+ export function applySectionSelection(text, section) {
129
+ if (!section) {
130
+ return text;
131
+ }
132
+ const extracted = extractSections(text, section, { includeLooseMatches: true });
133
+ if (extracted) {
134
+ return extracted;
135
+ }
136
+ return `No section matching "${section}" was found.\n\n${text}`;
137
+ }
138
+ export function applyItemSelection(text, item) {
139
+ if (item === undefined) {
140
+ return text;
141
+ }
142
+ const sections = text
143
+ .split(/\n---\n|\n\n(?=\*\*|\p{Emoji_Presentation}|\p{Emoji}\s)/u)
144
+ .map((part) => part.trim())
145
+ .filter(Boolean);
146
+ const index = item - 1;
147
+ if (index < 0 || index >= sections.length) {
148
+ return `Item ${item} was not found.\n\n${text}`;
149
+ }
150
+ return sections[index];
151
+ }
152
+ export function applyRangeSelection(text, range) {
153
+ if (!range) {
154
+ return text;
155
+ }
156
+ const match = range.match(/^(\d+):(\d+)$/);
157
+ if (!match) {
158
+ return `Invalid range "${range}". Expected "start:end".\n\n${text}`;
159
+ }
160
+ const start = Number(match[1]);
161
+ const end = Number(match[2]);
162
+ if (!Number.isInteger(start) || !Number.isInteger(end) || start < 0 || end <= start) {
163
+ return `Invalid range "${range}". Expected "start:end" with start >= 0 and end > start.\n\n${text}`;
164
+ }
165
+ return text.slice(start, end);
166
+ }
167
+ export function mcpText(text, meta) {
168
+ return {
169
+ content: [{ type: 'text', text }],
170
+ ...(meta === undefined ? {} : { _meta: meta }),
171
+ };
172
+ }
173
+ export function mcpErrorCompact(text, meta) {
174
+ return {
175
+ content: [{ type: 'text', text }],
176
+ isError: true,
177
+ ...(meta === undefined ? {} : { _meta: meta }),
178
+ };
179
+ }
180
+ export function mcpResultHandle(summary, resultId, availableExpansions, meta) {
181
+ const lines = [summary, '', `resultId: ${resultId}`];
182
+ if (availableExpansions.length > 0) {
183
+ lines.push(`expand: ${availableExpansions.join(', ')}`);
184
+ }
185
+ return mcpText(lines.join('\n'), meta);
186
+ }
@@ -0,0 +1,224 @@
1
+ import { z } from 'zod';
2
+ export declare const HeliusAccountActionSchema: z.ZodEnum<["getStarted", "setHeliusApiKey", "generateKeypair", "signup", "getAccountStatus", "getAccountPlan", "getHeliusPlanInfo", "compareHeliusPlans", "previewUpgrade", "upgradePlan", "payRenewal", "purchaseCredits"]>;
3
+ export declare const HeliusWalletActionSchema: z.ZodEnum<["getBalance", "getTokenBalances", "getWalletBalances", "getWalletBalanceAt", "getWalletHistory", "getWalletTransfers", "getWalletIdentity", "batchWalletIdentity", "getWalletFundedBy"]>;
4
+ export declare const HeliusAssetActionSchema: z.ZodEnum<["getAsset", "getAssetsByOwner", "searchAssets", "getAssetsByGroup", "getAssetProof", "getAssetProofBatch", "getSignaturesForAsset", "getNftEditions", "getTokenHolders"]>;
5
+ export declare const HeliusTransactionActionSchema: z.ZodEnum<["parseTransactions", "getTransactionHistory", "getTransfersByAddress"]>;
6
+ export declare const HeliusChainActionSchema: z.ZodEnum<["getAccountInfo", "getTokenAccounts", "getProgramAccounts", "getBlock", "getNetworkStatus", "getPriorityFeeEstimate", "simulateTransaction", "getStakeAccounts", "getWithdrawableAmount"]>;
7
+ export declare const HeliusStreamingActionSchema: z.ZodEnum<["createWebhook", "getAllWebhooks", "getWebhookByID", "updateWebhook", "deleteWebhook", "transactionSubscribe", "accountSubscribe", "laserstreamSubscribe"]>;
8
+ export declare const HeliusKnowledgeActionSchema: z.ZodEnum<["lookupHeliusDocs", "listHeliusDocTopics", "getHeliusCreditsInfo", "getRateLimitInfo", "troubleshootError", "recommendStack", "getSIMD", "listSIMDs", "searchSolanaDocs", "readSolanaSourceFile", "fetchHeliusBlog", "getPumpFunGuide", "getSenderInfo", "getWebhookGuide", "getLatencyComparison", "getEnhancedWebSocketInfo", "getLaserstreamInfo"]>;
9
+ export declare const HeliusWriteActionSchema: z.ZodEnum<["transferSol", "transferToken", "stakeSOL", "unstakeSOL", "withdrawStake"]>;
10
+ export declare const HeliusCompressionActionSchema: z.ZodEnum<["getCompressedAccount", "getCompressedAccountsByOwner", "getMultipleCompressedAccounts", "getCompressedBalance", "getCompressedBalanceByOwner", "getCompressedMintTokenHolders", "getCompressedTokenAccountBalance", "getCompressedTokenAccountsByOwner", "getCompressedTokenAccountsByDelegate", "getCompressedTokenBalancesByOwnerV2", "getCompressedAccountProof", "getMultipleCompressedAccountProofs", "getMultipleNewAddressProofs", "getCompressionSignaturesForAccount", "getCompressionSignaturesForAddress", "getCompressionSignaturesForOwner", "getCompressionSignaturesForTokenOwner", "getLatestCompressionSignatures", "getLatestNonVotingSignatures", "getTransactionWithCompressionInfo", "getValidityProof", "getIndexerHealth", "getIndexerSlot"]>;
11
+ export declare const HELIUS_ACCOUNT_SCHEMA: {
12
+ action: z.ZodEnum<["getStarted", "setHeliusApiKey", "generateKeypair", "signup", "getAccountStatus", "getAccountPlan", "getHeliusPlanInfo", "compareHeliusPlans", "previewUpgrade", "upgradePlan", "payRenewal", "purchaseCredits"]>;
13
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
14
+ args: z.ZodOptional<z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodPipeline<z.ZodEffects<z.ZodString, any, string>, z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>]>>;
15
+ apiKey: z.ZodOptional<z.ZodString>;
16
+ network: z.ZodOptional<z.ZodString>;
17
+ paymentIntentId: z.ZodOptional<z.ZodString>;
18
+ plan: z.ZodOptional<z.ZodString>;
19
+ period: z.ZodOptional<z.ZodString>;
20
+ couponCode: z.ZodOptional<z.ZodString>;
21
+ email: z.ZodOptional<z.ZodString>;
22
+ firstName: z.ZodOptional<z.ZodString>;
23
+ lastName: z.ZodOptional<z.ZodString>;
24
+ discoveryPath: z.ZodOptional<z.ZodString>;
25
+ frictionPoints: z.ZodOptional<z.ZodString>;
26
+ } & {
27
+ readonly _feedback: z.ZodString;
28
+ readonly _feedbackTool: z.ZodString;
29
+ readonly _model: z.ZodString;
30
+ };
31
+ export declare const HELIUS_WALLET_SCHEMA: {
32
+ action: z.ZodEnum<["getBalance", "getTokenBalances", "getWalletBalances", "getWalletBalanceAt", "getWalletHistory", "getWalletTransfers", "getWalletIdentity", "batchWalletIdentity", "getWalletFundedBy"]>;
33
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
34
+ args: z.ZodOptional<z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodPipeline<z.ZodEffects<z.ZodString, any, string>, z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>]>>;
35
+ address: z.ZodOptional<z.ZodString>;
36
+ addresses: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
37
+ mint: z.ZodOptional<z.ZodString>;
38
+ time: z.ZodOptional<z.ZodNumber>;
39
+ datetime: z.ZodOptional<z.ZodString>;
40
+ slot: z.ZodOptional<z.ZodNumber>;
41
+ limit: z.ZodOptional<z.ZodNumber>;
42
+ page: z.ZodOptional<z.ZodNumber>;
43
+ cursor: z.ZodOptional<z.ZodString>;
44
+ before: z.ZodOptional<z.ZodString>;
45
+ after: z.ZodOptional<z.ZodString>;
46
+ showNfts: z.ZodOptional<z.ZodBoolean>;
47
+ showZeroBalance: z.ZodOptional<z.ZodBoolean>;
48
+ showNative: z.ZodOptional<z.ZodBoolean>;
49
+ } & {
50
+ readonly _feedback: z.ZodString;
51
+ readonly _feedbackTool: z.ZodString;
52
+ readonly _model: z.ZodString;
53
+ };
54
+ export declare const HELIUS_ASSET_SCHEMA: {
55
+ action: z.ZodEnum<["getAsset", "getAssetsByOwner", "searchAssets", "getAssetsByGroup", "getAssetProof", "getAssetProofBatch", "getSignaturesForAsset", "getNftEditions", "getTokenHolders"]>;
56
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
57
+ args: z.ZodOptional<z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodPipeline<z.ZodEffects<z.ZodString, any, string>, z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>]>>;
58
+ id: z.ZodOptional<z.ZodString>;
59
+ ids: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
60
+ address: z.ZodOptional<z.ZodString>;
61
+ ownerAddress: z.ZodOptional<z.ZodString>;
62
+ creatorAddress: z.ZodOptional<z.ZodString>;
63
+ authorityAddress: z.ZodOptional<z.ZodString>;
64
+ groupKey: z.ZodOptional<z.ZodString>;
65
+ groupValue: z.ZodOptional<z.ZodString>;
66
+ mint: z.ZodOptional<z.ZodString>;
67
+ limit: z.ZodOptional<z.ZodNumber>;
68
+ page: z.ZodOptional<z.ZodNumber>;
69
+ name: z.ZodOptional<z.ZodString>;
70
+ compressed: z.ZodOptional<z.ZodBoolean>;
71
+ burnt: z.ZodOptional<z.ZodBoolean>;
72
+ frozen: z.ZodOptional<z.ZodBoolean>;
73
+ onlyVerified: z.ZodOptional<z.ZodBoolean>;
74
+ } & {
75
+ readonly _feedback: z.ZodString;
76
+ readonly _feedbackTool: z.ZodString;
77
+ readonly _model: z.ZodString;
78
+ };
79
+ export declare const HELIUS_TRANSACTION_SCHEMA: {
80
+ action: z.ZodEnum<["parseTransactions", "getTransactionHistory", "getTransfersByAddress"]>;
81
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
82
+ args: z.ZodOptional<z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodPipeline<z.ZodEffects<z.ZodString, any, string>, z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>]>>;
83
+ address: z.ZodOptional<z.ZodString>;
84
+ signature: z.ZodOptional<z.ZodString>;
85
+ signatures: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
86
+ limit: z.ZodOptional<z.ZodNumber>;
87
+ before: z.ZodOptional<z.ZodString>;
88
+ until: z.ZodOptional<z.ZodString>;
89
+ paginationToken: z.ZodOptional<z.ZodString>;
90
+ sortOrder: z.ZodOptional<z.ZodString>;
91
+ status: z.ZodOptional<z.ZodString>;
92
+ mode: z.ZodOptional<z.ZodString>;
93
+ transactionDetails: z.ZodOptional<z.ZodString>;
94
+ tokenAccounts: z.ZodOptional<z.ZodString>;
95
+ } & {
96
+ readonly _feedback: z.ZodString;
97
+ readonly _feedbackTool: z.ZodString;
98
+ readonly _model: z.ZodString;
99
+ };
100
+ export declare const HELIUS_CHAIN_SCHEMA: {
101
+ action: z.ZodEnum<["getAccountInfo", "getTokenAccounts", "getProgramAccounts", "getBlock", "getNetworkStatus", "getPriorityFeeEstimate", "simulateTransaction", "getStakeAccounts", "getWithdrawableAmount"]>;
102
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
103
+ args: z.ZodOptional<z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodPipeline<z.ZodEffects<z.ZodString, any, string>, z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>]>>;
104
+ address: z.ZodOptional<z.ZodString>;
105
+ addresses: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
106
+ programId: z.ZodOptional<z.ZodString>;
107
+ slot: z.ZodOptional<z.ZodNumber>;
108
+ limit: z.ZodOptional<z.ZodNumber>;
109
+ page: z.ZodOptional<z.ZodNumber>;
110
+ stakeAccount: z.ZodOptional<z.ZodString>;
111
+ accountKeys: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
112
+ priorityLevel: z.ZodOptional<z.ZodString>;
113
+ includeAllLevels: z.ZodOptional<z.ZodBoolean>;
114
+ encoding: z.ZodOptional<z.ZodString>;
115
+ dataSize: z.ZodOptional<z.ZodNumber>;
116
+ owner: z.ZodOptional<z.ZodString>;
117
+ mint: z.ZodOptional<z.ZodString>;
118
+ transaction: z.ZodOptional<z.ZodString>;
119
+ sigVerify: z.ZodOptional<z.ZodBoolean>;
120
+ replaceRecentBlockhash: z.ZodOptional<z.ZodBoolean>;
121
+ commitment: z.ZodOptional<z.ZodString>;
122
+ } & {
123
+ readonly _feedback: z.ZodString;
124
+ readonly _feedbackTool: z.ZodString;
125
+ readonly _model: z.ZodString;
126
+ };
127
+ export declare const HELIUS_STREAMING_SCHEMA: {
128
+ action: z.ZodEnum<["createWebhook", "getAllWebhooks", "getWebhookByID", "updateWebhook", "deleteWebhook", "transactionSubscribe", "accountSubscribe", "laserstreamSubscribe"]>;
129
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
130
+ args: z.ZodOptional<z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodPipeline<z.ZodEffects<z.ZodString, any, string>, z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>]>>;
131
+ account: z.ZodOptional<z.ZodString>;
132
+ accountAddresses: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
133
+ webhookID: z.ZodOptional<z.ZodString>;
134
+ webhookURL: z.ZodOptional<z.ZodString>;
135
+ transactionTypes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
136
+ signature: z.ZodOptional<z.ZodString>;
137
+ encoding: z.ZodOptional<z.ZodString>;
138
+ commitment: z.ZodOptional<z.ZodString>;
139
+ region: z.ZodOptional<z.ZodString>;
140
+ webhookType: z.ZodOptional<z.ZodString>;
141
+ accountInclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
142
+ accountExclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
143
+ accountRequired: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
144
+ subscribeAccounts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
145
+ accountOwners: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
146
+ transactionAccountInclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
147
+ transactionAccountExclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
148
+ transactionAccountRequired: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
149
+ } & {
150
+ readonly _feedback: z.ZodString;
151
+ readonly _feedbackTool: z.ZodString;
152
+ readonly _model: z.ZodString;
153
+ };
154
+ export declare const HELIUS_KNOWLEDGE_SCHEMA: {
155
+ action: z.ZodEnum<["lookupHeliusDocs", "listHeliusDocTopics", "getHeliusCreditsInfo", "getRateLimitInfo", "troubleshootError", "recommendStack", "getSIMD", "listSIMDs", "searchSolanaDocs", "readSolanaSourceFile", "fetchHeliusBlog", "getPumpFunGuide", "getSenderInfo", "getWebhookGuide", "getLatencyComparison", "getEnhancedWebSocketInfo", "getLaserstreamInfo"]>;
156
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
157
+ args: z.ZodOptional<z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodPipeline<z.ZodEffects<z.ZodString, any, string>, z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>]>>;
158
+ topic: z.ZodOptional<z.ZodString>;
159
+ section: z.ZodOptional<z.ZodString>;
160
+ query: z.ZodOptional<z.ZodString>;
161
+ slug: z.ZodOptional<z.ZodString>;
162
+ number: z.ZodOptional<z.ZodString>;
163
+ path: z.ZodOptional<z.ZodString>;
164
+ category: z.ZodOptional<z.ZodString>;
165
+ repo: z.ZodOptional<z.ZodString>;
166
+ branch: z.ZodOptional<z.ZodString>;
167
+ description: z.ZodOptional<z.ZodString>;
168
+ budget: z.ZodOptional<z.ZodString>;
169
+ complexity: z.ZodOptional<z.ZodString>;
170
+ scale: z.ZodOptional<z.ZodString>;
171
+ remember: z.ZodOptional<z.ZodBoolean>;
172
+ errorCode: z.ZodOptional<z.ZodString>;
173
+ } & {
174
+ readonly _feedback: z.ZodString;
175
+ readonly _feedbackTool: z.ZodString;
176
+ readonly _model: z.ZodString;
177
+ };
178
+ export declare const HELIUS_WRITE_SCHEMA: {
179
+ action: z.ZodEnum<["transferSol", "transferToken", "stakeSOL", "unstakeSOL", "withdrawStake"]>;
180
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
181
+ args: z.ZodOptional<z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodPipeline<z.ZodEffects<z.ZodString, any, string>, z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>]>>;
182
+ recipientAddress: z.ZodOptional<z.ZodString>;
183
+ mintAddress: z.ZodOptional<z.ZodString>;
184
+ amount: z.ZodOptional<z.ZodNumber>;
185
+ sendMax: z.ZodOptional<z.ZodBoolean>;
186
+ stakeAccount: z.ZodOptional<z.ZodString>;
187
+ destination: z.ZodOptional<z.ZodString>;
188
+ owsWallet: z.ZodOptional<z.ZodString>;
189
+ } & {
190
+ readonly _feedback: z.ZodString;
191
+ readonly _feedbackTool: z.ZodString;
192
+ readonly _model: z.ZodString;
193
+ };
194
+ export declare const HELIUS_COMPRESSION_SCHEMA: {
195
+ action: z.ZodEnum<["getCompressedAccount", "getCompressedAccountsByOwner", "getMultipleCompressedAccounts", "getCompressedBalance", "getCompressedBalanceByOwner", "getCompressedMintTokenHolders", "getCompressedTokenAccountBalance", "getCompressedTokenAccountsByOwner", "getCompressedTokenAccountsByDelegate", "getCompressedTokenBalancesByOwnerV2", "getCompressedAccountProof", "getMultipleCompressedAccountProofs", "getMultipleNewAddressProofs", "getCompressionSignaturesForAccount", "getCompressionSignaturesForAddress", "getCompressionSignaturesForOwner", "getCompressionSignaturesForTokenOwner", "getLatestCompressionSignatures", "getLatestNonVotingSignatures", "getTransactionWithCompressionInfo", "getValidityProof", "getIndexerHealth", "getIndexerSlot"]>;
196
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
197
+ args: z.ZodOptional<z.ZodUnion<[z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>, z.ZodPipeline<z.ZodEffects<z.ZodString, any, string>, z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>>]>>;
198
+ address: z.ZodOptional<z.ZodString>;
199
+ addresses: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
200
+ hash: z.ZodOptional<z.ZodString>;
201
+ hashes: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
202
+ owner: z.ZodOptional<z.ZodString>;
203
+ delegate: z.ZodOptional<z.ZodString>;
204
+ mint: z.ZodOptional<z.ZodString>;
205
+ limit: z.ZodOptional<z.ZodNumber>;
206
+ cursor: z.ZodOptional<z.ZodString>;
207
+ } & {
208
+ readonly _feedback: z.ZodString;
209
+ readonly _feedbackTool: z.ZodString;
210
+ readonly _model: z.ZodString;
211
+ };
212
+ export declare const EXPAND_RESULT_SCHEMA: {
213
+ resultId: z.ZodString;
214
+ section: z.ZodOptional<z.ZodString>;
215
+ item: z.ZodOptional<z.ZodNumber>;
216
+ page: z.ZodOptional<z.ZodNumber>;
217
+ range: z.ZodOptional<z.ZodString>;
218
+ continuation: z.ZodOptional<z.ZodString>;
219
+ detail: z.ZodOptional<z.ZodEnum<["summary", "standard", "full"]>>;
220
+ } & {
221
+ readonly _feedback: z.ZodString;
222
+ readonly _feedbackTool: z.ZodString;
223
+ readonly _model: z.ZodString;
224
+ };