helius-mcp 0.5.3 → 1.2.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 (67) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/LICENSE +1 -1
  3. package/README.md +97 -21
  4. package/dist/http.d.ts +1 -0
  5. package/dist/http.js +2 -0
  6. package/dist/index.js +93 -2
  7. package/dist/scripts/validate-catalog.d.ts +13 -0
  8. package/dist/scripts/validate-catalog.js +76 -0
  9. package/dist/tools/accounts.js +114 -204
  10. package/dist/tools/assets.js +109 -123
  11. package/dist/tools/auth.d.ts +2 -0
  12. package/dist/tools/auth.js +459 -0
  13. package/dist/tools/balance.js +28 -32
  14. package/dist/tools/blocks.js +68 -87
  15. package/dist/tools/config.js +18 -79
  16. package/dist/tools/das-extras.js +56 -41
  17. package/dist/tools/docs.js +12 -54
  18. package/dist/tools/enhanced-websockets.js +104 -74
  19. package/dist/tools/fees.js +42 -61
  20. package/dist/tools/guides.js +126 -515
  21. package/dist/tools/index.js +50 -2
  22. package/dist/tools/laserstream.js +107 -53
  23. package/dist/tools/network.js +47 -69
  24. package/dist/tools/plans.d.ts +21 -0
  25. package/dist/tools/plans.js +105 -246
  26. package/dist/tools/product-catalog.d.ts +10 -0
  27. package/dist/tools/product-catalog.js +123 -0
  28. package/dist/tools/recommend.d.ts +4 -0
  29. package/dist/tools/recommend.js +233 -0
  30. package/dist/tools/shared.js +8 -3
  31. package/dist/tools/solana-knowledge.d.ts +2 -0
  32. package/dist/tools/solana-knowledge.js +544 -0
  33. package/dist/tools/tokens.js +17 -18
  34. package/dist/tools/transactions.js +232 -302
  35. package/dist/tools/transfers.d.ts +2 -0
  36. package/dist/tools/transfers.js +270 -0
  37. package/dist/tools/wallet.js +175 -177
  38. package/dist/tools/webhooks.js +80 -82
  39. package/dist/types/transaction-types.d.ts +1 -1
  40. package/dist/types/transaction-types.js +2 -1
  41. package/dist/utils/config.d.ts +27 -0
  42. package/dist/utils/config.js +76 -0
  43. package/dist/utils/docs.d.ts +24 -0
  44. package/dist/utils/docs.js +72 -0
  45. package/dist/utils/errors.d.ts +32 -0
  46. package/dist/utils/errors.js +157 -0
  47. package/dist/utils/feedback.d.ts +16 -0
  48. package/dist/utils/feedback.js +87 -0
  49. package/dist/utils/formatters.d.ts +0 -1
  50. package/dist/utils/formatters.js +0 -3
  51. package/dist/utils/helius.d.ts +15 -5
  52. package/dist/utils/helius.js +52 -45
  53. package/dist/version.d.ts +1 -0
  54. package/dist/version.js +1 -0
  55. package/package.json +17 -7
  56. package/system-prompts/helius/claude.system.md +170 -0
  57. package/system-prompts/helius/full.md +2868 -0
  58. package/system-prompts/helius/openai.developer.md +170 -0
  59. package/system-prompts/helius-dflow/claude.system.md +290 -0
  60. package/system-prompts/helius-dflow/full.md +3647 -0
  61. package/system-prompts/helius-dflow/openai.developer.md +290 -0
  62. package/system-prompts/helius-phantom/claude.system.md +348 -0
  63. package/system-prompts/helius-phantom/full.md +5472 -0
  64. package/system-prompts/helius-phantom/openai.developer.md +348 -0
  65. package/system-prompts/svm/claude.system.md +174 -0
  66. package/system-prompts/svm/full.md +699 -0
  67. package/system-prompts/svm/openai.developer.md +174 -0
@@ -1,274 +1,133 @@
1
1
  import { z } from 'zod';
2
- // Helius plan details (as of 2024)
3
- const HELIUS_PLANS = {
2
+ import { fetchDoc, extractSections } from '../utils/docs.js';
3
+ import { mcpError } from '../utils/errors.js';
4
+ import { getJwt } from '../utils/config.js';
5
+ import { listProjects } from 'helius-sdk/auth/listProjects';
6
+ import { getProject } from 'helius-sdk/auth/getProject';
7
+ import { MCP_USER_AGENT } from '../http.js';
8
+ /**
9
+ * Static plan metadata — NOT the source of truth for pricing or billing data.
10
+ *
11
+ * Remaining uses (no billing data should be served from here):
12
+ * 1. Plan name lookup in auth.ts getAccountStatus
13
+ * 2. Feature-gate booleans in recommend.ts derivePlanLimitations()
14
+ * 3. Validation of minimumPlan keys in validate-catalog.ts
15
+ *
16
+ * All user-facing billing data (prices, credits, rate limits) is fetched live
17
+ * from the billing docs via fetchDoc('billing').
18
+ */
19
+ export const HELIUS_PLANS = {
4
20
  free: {
5
21
  name: 'Free',
6
- price: '$0/month',
7
- credits: '1M/month',
8
- additionalCredits: 'N/A',
9
- rateLimit: {
10
- rpc: '10 RPS',
11
- sendTransaction: '1/sec',
12
- getProgramAccounts: '5/sec',
13
- das: '2/sec',
14
- },
15
- connections: {
16
- websocket: 5,
17
- enhancedWebsocket: 0,
18
- },
19
- features: {
20
- webhooks: true,
21
- standardWebSockets: true,
22
- enhancedWebSockets: false,
23
- laserstream: false,
24
- stakedConnections: true,
25
- archivalData: true,
26
- },
27
- support: 'Community (Discord)',
28
- sla: 'N/A',
22
+ features: { webhooks: true, standardWebSockets: true, enhancedWebSockets: false, laserstream: false, stakedConnections: true, archivalData: true },
29
23
  },
30
24
  developer: {
31
25
  name: 'Developer',
32
- price: '$49/month',
33
- credits: '10M/month',
34
- additionalCredits: '$5 per million',
35
- rateLimit: {
36
- rpc: '50 RPS',
37
- sendTransaction: '5/sec',
38
- getProgramAccounts: '25/sec',
39
- das: '10/sec',
40
- },
41
- connections: {
42
- websocket: 150,
43
- enhancedWebsocket: 0,
44
- },
45
- features: {
46
- webhooks: true,
47
- standardWebSockets: true,
48
- enhancedWebSockets: false,
49
- laserstream: 'Devnet only',
50
- stakedConnections: true,
51
- archivalData: true,
52
- },
53
- support: 'Chat support',
54
- sla: '24-hour response',
26
+ features: { webhooks: true, standardWebSockets: true, enhancedWebSockets: false, laserstream: 'Devnet only', stakedConnections: true, archivalData: true },
55
27
  },
56
28
  business: {
57
29
  name: 'Business',
58
- price: '$499/month',
59
- credits: '100M/month',
60
- additionalCredits: '$5 per million',
61
- rateLimit: {
62
- rpc: '200 RPS',
63
- sendTransaction: '50/sec',
64
- getProgramAccounts: '50/sec',
65
- das: '50/sec',
66
- },
67
- connections: {
68
- websocket: 250,
69
- enhancedWebsocket: 100,
70
- },
71
- features: {
72
- webhooks: true,
73
- standardWebSockets: true,
74
- enhancedWebSockets: true,
75
- laserstream: 'Devnet only',
76
- stakedConnections: true,
77
- archivalData: true,
78
- },
79
- support: 'Priority chat',
80
- sla: '12-hour response',
30
+ features: { webhooks: true, standardWebSockets: true, enhancedWebSockets: true, laserstream: 'Devnet only', stakedConnections: true, archivalData: true },
81
31
  },
82
32
  professional: {
83
33
  name: 'Professional',
84
- price: '$999/month',
85
- credits: '200M/month',
86
- additionalCredits: '$5 per million',
87
- rateLimit: {
88
- rpc: '500 RPS (+100 RPS for $100/mo)',
89
- sendTransaction: '100/sec',
90
- getProgramAccounts: '75/sec',
91
- das: '100/sec',
92
- },
93
- connections: {
94
- websocket: 250,
95
- enhancedWebsocket: 100,
96
- },
97
- features: {
98
- webhooks: true,
99
- standardWebSockets: true,
100
- enhancedWebSockets: true,
101
- laserstream: 'Full access (mainnet + devnet, data add-ons $500+/mo)',
102
- stakedConnections: true,
103
- archivalData: true,
104
- },
105
- support: 'Dedicated Slack + Telegram',
106
- sla: '8-hour response',
34
+ features: { webhooks: true, standardWebSockets: true, enhancedWebSockets: true, laserstream: 'Full access (mainnet + devnet)', stakedConnections: true, archivalData: true },
107
35
  },
108
36
  };
109
- function formatPlanDetails(planKey) {
110
- const plan = HELIUS_PLANS[planKey];
111
- const lines = [
112
- `## ${plan.name} Plan`,
113
- '',
114
- `**Price:** ${plan.price}`,
115
- `**Credits:** ${plan.credits}`,
116
- `**Additional Credits:** ${plan.additionalCredits}`,
117
- '',
118
- '### Rate Limits',
119
- `- RPC Requests: ${plan.rateLimit.rpc}`,
120
- `- sendTransaction: ${plan.rateLimit.sendTransaction}`,
121
- `- getProgramAccounts: ${plan.rateLimit.getProgramAccounts}`,
122
- `- DAS Requests: ${plan.rateLimit.das}`,
123
- '',
124
- '### Connection Limits',
125
- `- Standard WebSocket Connections: ${plan.connections.websocket}`,
126
- `- Enhanced WebSocket Connections: ${plan.connections.enhancedWebsocket}`,
127
- '',
128
- '### Features',
129
- `- Webhooks: ${plan.features.webhooks ? 'Yes' : 'No'}`,
130
- `- Standard WebSockets: ${plan.features.standardWebSockets ? 'Yes' : 'No'}`,
131
- `- Enhanced WebSockets: ${typeof plan.features.enhancedWebSockets === 'string' ? plan.features.enhancedWebSockets : plan.features.enhancedWebSockets ? 'Yes' : 'No'}`,
132
- `- Laserstream: ${typeof plan.features.laserstream === 'string' ? plan.features.laserstream : plan.features.laserstream ? 'Yes' : 'No'}`,
133
- `- Staked Connections: ${plan.features.stakedConnections ? 'Yes' : 'No'}`,
134
- `- Archival Data: ${plan.features.archivalData ? 'Yes' : 'No'}`,
135
- ];
136
- if ('soc2Compliance' in plan.features) {
137
- lines.push(`- SOC 2 Compliance: Yes`);
37
+ const BILLING_FETCH_ERROR = 'Could not fetch live billing data. Try:\n' +
38
+ '- `lookupHeliusDocs({ topic: \'billing\' })` for full billing documentation\n' +
39
+ '- Visit https://www.helius.dev/docs/billing directly';
40
+ /**
41
+ * Detect the user's current Helius plan from their JWT session.
42
+ * Returns the plan key (e.g. "developer") or undefined if unavailable.
43
+ * Best-effort — never throws.
44
+ */
45
+ export async function detectCurrentPlan() {
46
+ const jwt = getJwt();
47
+ if (!jwt)
48
+ return undefined;
49
+ try {
50
+ const projects = await listProjects(jwt, MCP_USER_AGENT);
51
+ if (projects.length > 0) {
52
+ const details = await getProject(jwt, projects[0].id, MCP_USER_AGENT);
53
+ const raw = details.subscriptionPlanDetails?.currentPlan?.trim().toLowerCase();
54
+ if (raw && raw in HELIUS_PLANS)
55
+ return raw;
56
+ }
138
57
  }
139
- if ('customInfrastructure' in plan.features) {
140
- lines.push(`- Custom Infrastructure: Yes`);
58
+ catch {
59
+ // Best-effort don't block the response
141
60
  }
142
- lines.push('', '### Support');
143
- lines.push(`- Channel: ${plan.support}`);
144
- lines.push(`- SLA: ${plan.sla}`);
145
- return lines.join('\n');
61
+ return undefined;
146
62
  }
147
63
  export function registerPlanTools(server) {
148
- server.tool('getHeliusPlanInfo', 'Get detailed Helius plan information including pricing, credits, rate limits, and feature availability. Shows what features are available on each tier (Free, Developer, Business, Professional). Useful for understanding WebSocket limits, Laserstream access, and API rate limits per plan.', {
149
- plan: z.enum(['free', 'developer', 'business', 'professional', 'all']).optional().default('all').describe('Specific plan to show details for, or "all" for comparison')
64
+ server.tool('getHeliusPlanInfo', 'BEST FOR: pricing and plan questions. PREFER compareHeliusPlans for side-by-side category comparisons, getRateLimitInfo for per-method credit costs. Get Helius plan pricing, credits, rate limits, and feature availability. Fetches live from billing docs.', {
65
+ plan: z.enum(['free', 'developer', 'business', 'professional', 'all']).optional().default('all').describe('Specific plan to show details for, or "all" for comparison'),
150
66
  }, async ({ plan }) => {
67
+ let billingDoc;
151
68
  try {
152
- if (plan === 'all') {
153
- const lines = [
154
- '# Helius Plans Overview',
155
- '',
156
- '| Feature | Free | Developer | Business | Professional |',
157
- '|---------|------|-----------|----------|--------------|',
158
- '| **Price** | $0/mo | $49/mo | $499/mo | $999/mo |',
159
- '| **Credits** | 1M | 10M | 100M | 200M |',
160
- '| **RPC RPS** | 10 | 50 | 200 | 500 |',
161
- '| **sendTransaction** | 1/s | 5/s | 50/s | 100/s |',
162
- '| **DAS Requests** | 2/s | 10/s | 50/s | 100/s |',
163
- '| **WS Connections** | 5 | 150 | 250 | 250 |',
164
- '| **Enhanced WS** | No | No | Yes (100) | Yes (100) |',
165
- '| **Laserstream** | No | Devnet | Devnet | Full |',
166
- '| **Support SLA** | — | 24hr | 12hr | 8hr |',
167
- '',
168
- '---',
169
- '',
170
- '## Key Differences',
171
- '',
172
- '### WebSocket Connection Limits',
173
- '- **Free:** 5 simultaneous connections',
174
- '- **Developer:** 150 connections',
175
- '- **Business/Professional:** 250 standard, 100 enhanced each',
176
- '',
177
- '### Enhanced WebSockets',
178
- '- **Available on:** Business, Professional',
179
- '- **Connection limit:** 100 (Business/Pro)',
180
- '- **Speed:** 1.5-2x faster than standard WebSockets',
181
- '- **Filtering:** Up to 50,000 addresses per filter',
182
- '- **Subscriptions:** transactionSubscribe, accountSubscribe',
183
- '- **Timeout:** 10 min inactivity (ping every 30-60s)',
184
- '- **Cost:** 1 credit to open, 3 credits per 0.1 MB streamed',
185
- '',
186
- '### Laserstream (gRPC)',
187
- '- **Developer/Business:** Devnet only',
188
- '- **Professional:** Full access (mainnet + devnet)',
189
- '- **Data add-ons:** Starting at $500/mo for Professional',
190
- '- **Features:** 24h historical replay, lowest latency',
191
- '',
192
- '### Credit Costs (from docs)',
193
- '- **0 credits**: Helius Sender',
194
- '- **1 credit**: Standard RPC, sendTransaction, Priority Fee API, webhook events',
195
- '- **3 credits**: per 0.1 MB streamed (LaserStream, Enhanced WS)',
196
- '- **10 credits**: getProgramAccounts, historical data (getBlock, getTransaction, etc.), DAS API',
197
- '- **100 credits**: Enhanced Transactions, Wallet API, getValidityProof (ZK), webhook management',
198
- '- **Additional credits**: $5 per million (all paid plans)',
199
- '',
200
- '**Docs:** https://www.helius.dev/pricing',
201
- ];
202
- return { content: [{ type: 'text', text: lines.join('\n') }] };
203
- }
204
- const planDetails = formatPlanDetails(plan);
205
- return { content: [{ type: 'text', text: planDetails }] };
69
+ billingDoc = await fetchDoc('billing');
70
+ }
71
+ catch {
72
+ return mcpError(BILLING_FETCH_ERROR);
73
+ }
74
+ // Required: plans table
75
+ const plansTable = extractSections(billingDoc, ['standard plans', 'standard pricing'], { includeLooseMatches: false });
76
+ if (!plansTable) {
77
+ return mcpError(BILLING_FETCH_ERROR);
78
+ }
79
+ // Optional sections
80
+ const credits = extractSections(billingDoc, ['credits system', 'credit costs'], { includeLooseMatches: false });
81
+ const addOns = extractSections(billingDoc, ['data add-ons', 'add-ons'], { includeLooseMatches: false });
82
+ const rateLimits = extractSections(billingDoc, ['rate limits', 'standard rate limits'], { includeLooseMatches: false });
83
+ const sections = [];
84
+ const currentPlanKey = await detectCurrentPlan();
85
+ if (currentPlanKey) {
86
+ const displayName = HELIUS_PLANS[currentPlanKey]?.name ?? currentPlanKey;
87
+ sections.push(`**Your current plan: ${displayName}**`, '');
206
88
  }
207
- catch (err) {
208
- const errorMsg = err instanceof Error ? err.message : String(err);
209
- return { content: [{ type: 'text', text: `Error: ${errorMsg}` }], isError: true };
89
+ if (plan !== 'all') {
90
+ const planInfo = HELIUS_PLANS[plan];
91
+ const displayName = planInfo ? planInfo.name : plan;
92
+ sections.push(`## ${displayName} Plan`, `See the "${plan}" column in the tables below.`, '');
210
93
  }
94
+ sections.push(plansTable);
95
+ if (credits)
96
+ sections.push('', credits);
97
+ if (addOns)
98
+ sections.push('', addOns);
99
+ if (rateLimits)
100
+ sections.push('', rateLimits);
101
+ sections.push('', '---', '', '## Actions', '', '- To upgrade, use the `upgradePlan` tool with a plan name (developer, business, professional)', '- To preview pricing before upgrading, use the `previewUpgrade` tool', '', 'Source: https://www.helius.dev/docs/billing (fetched live)');
102
+ return { content: [{ type: 'text', text: sections.join('\n') }] };
211
103
  });
212
- server.tool('compareHeliusPlans', 'Compare specific Helius plans side-by-side for a specific feature category (rate limits, features, connections, or pricing).', {
213
- category: z.enum(['rates', 'features', 'connections', 'pricing', 'support']).describe('Category to compare'),
214
- plans: z.array(z.enum(['free', 'developer', 'business', 'professional'])).optional().describe('Plans to compare (default: all)')
215
- }, async ({ category, plans }) => {
216
- const plansToCompare = plans || ['free', 'developer', 'business', 'professional'];
104
+ server.tool('compareHeliusPlans', 'BEST FOR: side-by-side plan comparison in a specific category. Compare Helius plans for rate limits, features, or pricing. Fetches live from billing docs.', {
105
+ category: z.enum(['rates', 'features', 'pricing']).describe('Category to compare'),
106
+ }, async ({ category }) => {
107
+ let billingDoc;
108
+ try {
109
+ billingDoc = await fetchDoc('billing');
110
+ }
111
+ catch {
112
+ return mcpError(BILLING_FETCH_ERROR);
113
+ }
114
+ const sectionMap = {
115
+ rates: ['rate limits', 'standard rate limits', 'special rate limits'],
116
+ features: ['standard plans', 'standard pricing'],
117
+ pricing: ['credits system', 'credit costs', 'data add-ons'],
118
+ };
119
+ const extracted = extractSections(billingDoc, sectionMap[category], { includeLooseMatches: false });
120
+ if (!extracted) {
121
+ return mcpError(BILLING_FETCH_ERROR);
122
+ }
217
123
  const lines = [];
218
- switch (category) {
219
- case 'rates':
220
- lines.push('# Rate Limits Comparison', '');
221
- lines.push('| Plan | RPC RPS | sendTx | getProgramAccounts | DAS |');
222
- lines.push('|------|---------|--------|-------------------|-----|');
223
- for (const p of plansToCompare) {
224
- const plan = HELIUS_PLANS[p];
225
- lines.push(`| ${plan.name} | ${plan.rateLimit.rpc} | ${plan.rateLimit.sendTransaction} | ${plan.rateLimit.getProgramAccounts} | ${plan.rateLimit.das} |`);
226
- }
227
- break;
228
- case 'features':
229
- lines.push('# Features Comparison', '');
230
- lines.push('| Plan | Enhanced WS | Laserstream | Staked | Archival |');
231
- lines.push('|------|-------------|-------------|--------|----------|');
232
- for (const p of plansToCompare) {
233
- const plan = HELIUS_PLANS[p];
234
- const ews = typeof plan.features.enhancedWebSockets === 'string' ? plan.features.enhancedWebSockets : plan.features.enhancedWebSockets ? 'Yes' : 'No';
235
- const ls = typeof plan.features.laserstream === 'string' ? plan.features.laserstream : plan.features.laserstream ? 'Yes' : 'No';
236
- lines.push(`| ${plan.name} | ${ews} | ${ls} | Yes | Yes |`);
237
- }
238
- break;
239
- case 'connections':
240
- lines.push('# Connection Limits Comparison', '');
241
- lines.push('| Plan | Standard WS | Enhanced WS |');
242
- lines.push('|------|-------------|-------------|');
243
- for (const p of plansToCompare) {
244
- const plan = HELIUS_PLANS[p];
245
- lines.push(`| ${plan.name} | ${plan.connections.websocket} | ${plan.connections.enhancedWebsocket} |`);
246
- }
247
- lines.push('', '**Notes:**');
248
- lines.push('- Enhanced WS requires Business+ plan');
249
- lines.push('- Opening a connection costs 1 credit');
250
- lines.push('- Enhanced WS data: 3 credits per 0.1 MB streamed');
251
- lines.push('- 10-minute inactivity timeout (ping every 30-60s)');
252
- break;
253
- case 'pricing':
254
- lines.push('# Pricing Comparison', '');
255
- lines.push('| Plan | Price | Credits | Extra Credits |');
256
- lines.push('|------|-------|---------|---------------|');
257
- for (const p of plansToCompare) {
258
- const plan = HELIUS_PLANS[p];
259
- lines.push(`| ${plan.name} | ${plan.price} | ${plan.credits} | ${plan.additionalCredits} |`);
260
- }
261
- break;
262
- case 'support':
263
- lines.push('# Support Comparison', '');
264
- lines.push('| Plan | Channel | SLA |');
265
- lines.push('|------|---------|-----|');
266
- for (const p of plansToCompare) {
267
- const plan = HELIUS_PLANS[p];
268
- lines.push(`| ${plan.name} | ${plan.support} | ${plan.sla} |`);
269
- }
270
- break;
124
+ const currentPlanKey = await detectCurrentPlan();
125
+ if (currentPlanKey) {
126
+ const displayName = HELIUS_PLANS[currentPlanKey]?.name ?? currentPlanKey;
127
+ lines.push(`**Your current plan: ${displayName}**`, '');
271
128
  }
129
+ lines.push(extracted);
130
+ lines.push('', '---', 'Source: https://www.helius.dev/docs/billing (fetched live)');
272
131
  return { content: [{ type: 'text', text: lines.join('\n') }] };
273
132
  });
274
133
  }
@@ -0,0 +1,10 @@
1
+ export interface CatalogProduct {
2
+ name: string;
3
+ mcpTools: string[];
4
+ creditCostPerCall: string;
5
+ minimumPlan: string;
6
+ docKey: string;
7
+ referenceFile?: string;
8
+ description: string;
9
+ }
10
+ export declare const PRODUCT_CATALOG: Record<string, CatalogProduct>;
@@ -0,0 +1,123 @@
1
+ // ─── Product Catalog ───
2
+ //
3
+ // Centralized product definitions — each Helius product defined once with its
4
+ // invariant properties. The recommend tool groups products by minimumPlan into
5
+ // tiers and uses the description field to give AI consumers rich context.
6
+ export const PRODUCT_CATALOG = {
7
+ 'das-api': {
8
+ name: 'DAS API',
9
+ mcpTools: ['getAssetsByOwner', 'getAssetsByGroup', 'searchAssets', 'getAsset', 'getTokenBalances', 'getTokenAccounts'],
10
+ creditCostPerCall: '10 credits',
11
+ minimumPlan: 'free',
12
+ docKey: 'das',
13
+ referenceFile: 'references/das.md',
14
+ description: 'Query tokens, NFTs, collections, and digital assets. Fetches wallet token holdings with names, symbols, and prices. Browse NFT collections, search assets by creator/authority/owner.',
15
+ },
16
+ 'standard-rpc': {
17
+ name: 'Standard RPC',
18
+ mcpTools: ['getBalance', 'getAccountInfo', 'getBlock', 'getNetworkStatus'],
19
+ creditCostPerCall: '1-10 credits',
20
+ minimumPlan: 'free',
21
+ docKey: 'rpc',
22
+ description: 'Core Solana RPC for native SOL balances, account data, block info, and network status. Foundation for any Solana app.',
23
+ },
24
+ 'enhanced-transactions': {
25
+ name: 'Enhanced Transactions API',
26
+ mcpTools: ['parseTransactions', 'getTransactionHistory'],
27
+ creditCostPerCall: '100 credits',
28
+ minimumPlan: 'free',
29
+ docKey: 'enhanced-transactions',
30
+ referenceFile: 'references/enhanced-transactions.md',
31
+ description: 'Parse any transaction into human-readable format with types (SWAP, TRANSFER, NFT_SALE), descriptions, token transfers, and fees. Powers transaction history views and trade verification.',
32
+ },
33
+ 'wallet-api': {
34
+ name: 'Wallet API',
35
+ mcpTools: ['getWalletBalances', 'getWalletHistory', 'getWalletTransfers', 'getWalletIdentity', 'batchWalletIdentity', 'getWalletFundedBy'],
36
+ creditCostPerCall: '100 credits',
37
+ minimumPlan: 'developer',
38
+ docKey: 'wallet-api',
39
+ referenceFile: 'references/wallet-api.md',
40
+ description: 'Portfolio balances with USD prices sorted by value, transfer history with sender/receiver, entity identification (exchanges, protocols, whales), and wallet funding source tracking. Purpose-built for wallet-centric features \u2014 more data in fewer calls than DAS + RPC.',
41
+ },
42
+ 'webhooks': {
43
+ name: 'Webhooks',
44
+ mcpTools: ['createWebhook', 'getAllWebhooks', 'updateWebhook', 'deleteWebhook'],
45
+ creditCostPerCall: '100 credits to create, 1 credit per event',
46
+ minimumPlan: 'free',
47
+ docKey: 'webhooks',
48
+ referenceFile: 'references/webhooks.md',
49
+ description: 'HTTP POST notifications when monitored addresses have on-chain activity. Event-driven architecture without polling. Monitor up to 100k addresses per webhook. Filter by 150+ transaction types (SWAP, NFT_SALE, TRANSFER, etc.).',
50
+ },
51
+ 'enhanced-websockets': {
52
+ name: 'Enhanced WebSockets',
53
+ mcpTools: ['transactionSubscribe', 'accountSubscribe', 'getEnhancedWebSocketInfo'],
54
+ creditCostPerCall: '3 credits per 0.1 MB streamed',
55
+ minimumPlan: 'business',
56
+ docKey: 'enhanced-websockets',
57
+ referenceFile: 'references/websockets.md',
58
+ description: 'Real-time transaction and account streaming over persistent WebSocket connections. 1.5-2x faster than standard WebSockets with advanced filtering (up to 50k addresses per filter). Powers live dashboards and real-time UIs.',
59
+ },
60
+ 'helius-sender': {
61
+ name: 'Helius Sender',
62
+ mcpTools: ['getSenderInfo'],
63
+ creditCostPerCall: '0 credits',
64
+ minimumPlan: 'free',
65
+ docKey: 'sender',
66
+ referenceFile: 'references/sender.md',
67
+ description: 'Submit transactions with SWQoS routing, staked connections, and Jito tip integration for optimal landing rates. Essential for trading bots, token launches, and any app that sends transactions.',
68
+ },
69
+ 'priority-fee': {
70
+ name: 'Priority Fee API',
71
+ mcpTools: ['getPriorityFeeEstimate'],
72
+ creditCostPerCall: '1 credit',
73
+ minimumPlan: 'free',
74
+ docKey: 'priority-fee',
75
+ referenceFile: 'references/priority-fees.md',
76
+ description: 'Real-time fee estimates for transaction prioritization during network congestion. Returns recommended fees at multiple priority levels (Min, Low, Medium, High, VeryHigh).',
77
+ },
78
+ 'standard-websockets': {
79
+ name: 'Standard WebSockets',
80
+ mcpTools: ['transactionSubscribe'],
81
+ creditCostPerCall: '3 credits per 0.1 MB streamed',
82
+ minimumPlan: 'free',
83
+ docKey: 'websocket',
84
+ referenceFile: 'references/websockets.md',
85
+ description: 'Persistent connection for real-time transaction and account updates using standard Solana WebSocket subscriptions. Good for confirmation tracking and basic streaming.',
86
+ },
87
+ 'laserstream-devnet': {
88
+ name: 'Laserstream (Devnet)',
89
+ mcpTools: ['laserstreamSubscribe', 'getLaserstreamInfo'],
90
+ creditCostPerCall: '3 credits per 0.1 MB streamed',
91
+ minimumPlan: 'developer',
92
+ docKey: 'laserstream',
93
+ referenceFile: 'references/laserstream.md',
94
+ description: 'High-performance gRPC streaming for development and testing. Subscribe to slots, accounts, transactions, blocks, or entries. Test streaming pipelines with production-grade infrastructure on devnet.',
95
+ },
96
+ 'laserstream-mainnet': {
97
+ name: 'Laserstream (Mainnet)',
98
+ mcpTools: ['laserstreamSubscribe', 'getLaserstreamInfo'],
99
+ creditCostPerCall: '3 credits per 0.1 MB streamed',
100
+ minimumPlan: 'professional',
101
+ docKey: 'laserstream',
102
+ referenceFile: 'references/laserstream.md',
103
+ description: 'Lowest-latency gRPC streaming with 24h historical replay for production indexers, trading infrastructure, and data pipelines. Subscribe to all transactions, accounts, blocks, or entries on mainnet.',
104
+ },
105
+ 'token-transfers': {
106
+ name: 'Token Transfers',
107
+ mcpTools: ['transferSol', 'transferToken'],
108
+ creditCostPerCall: '~3-13 credits + on-chain fees',
109
+ minimumPlan: 'free',
110
+ docKey: 'sender',
111
+ referenceFile: 'references/sender.md',
112
+ description: 'Send native SOL or SPL tokens from the MCP keypair to any Solana address. Uses Helius Sender for optimal landing rates. Requires a configured keypair.',
113
+ },
114
+ 'token-holders': {
115
+ name: 'Token Holders',
116
+ mcpTools: ['getTokenHolders'],
117
+ creditCostPerCall: '20 credits',
118
+ minimumPlan: 'free',
119
+ docKey: 'das',
120
+ referenceFile: 'references/das.md',
121
+ description: 'Top 20 holders of any SPL token. Check token distribution, find whale wallets, verify decentralization. Useful for token launches and analytics.',
122
+ },
123
+ };
@@ -0,0 +1,4 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare const KNOWN_TOOLS: Set<string>;
3
+ export declare const PLAN_RANK: Record<string, number>;
4
+ export declare function registerRecommendTools(server: McpServer): void;