drain-mcp 0.2.1 → 0.2.2

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.
package/dist/index.js CHANGED
@@ -7,59 +7,59 @@
7
7
  */
8
8
  const args = process.argv.slice(2);
9
9
  if (args.includes('--help') || args.includes('-h')) {
10
- console.log(`
11
- drain-mcp — MCP server for the DRAIN payment protocol
12
-
13
- WHAT IS THIS?
14
- drain-mcp is a Model Context Protocol (MCP) server. It runs inside any
15
- MCP-compatible client and gives agents tools to discover service providers,
16
- open USDC payment channels on Polygon, and call any service — LLM, image
17
- generation, web scraping, VPN, and more. Pay per use, no API keys.
18
-
19
- COMPATIBLE CLIENTS:
20
- Cursor, Claude Desktop, Cline, Windsurf, OpenAI Agents, or any MCP client.
21
-
22
- CONFIGURATION:
23
- {
24
- "mcpServers": {
25
- "drain": {
26
- "command": "drain-mcp",
27
- "env": {
28
- "DRAIN_PRIVATE_KEY": "0x_your_polygon_wallet_private_key"
29
- }
30
- }
31
- }
32
- }
33
-
34
- ENVIRONMENT VARIABLES:
35
- DRAIN_PRIVATE_KEY (required) Polygon wallet private key
36
- DRAIN_CHAIN_ID 137 (Polygon, default) or 80002 (Amoy testnet)
37
- DRAIN_RPC_URL Custom RPC endpoint
38
- DRAIN_DIRECTORY_URL Provider directory URL
39
- DRAIN_MARKETPLACE_URL Marketplace base URL
40
-
41
- MCP TOOLS PROVIDED:
42
- drain_providers List service providers (filter by model, category)
43
- drain_provider_info Provider details + usage instructions (docs)
44
- drain_balance Check wallet USDC balance and allowance
45
- drain_approve Approve USDC spending for the DRAIN contract
46
- drain_open_channel Open a payment channel with a provider
47
- drain_close_channel Close expired channel and reclaim funds
48
- drain_cooperative_close Close channel immediately (provider co-signs)
49
- drain_channel_status Check channel status and balance
50
- drain_channels List all known channels with status
51
- drain_chat Send a paid request to a provider
52
-
53
- PROVIDER CATEGORIES:
54
- llm, image, audio, code, scraping, vpn, multi-modal, other
55
- Each provider has a docs endpoint explaining how to format requests.
56
-
57
- LINKS:
58
- Marketplace: https://handshake58.com
59
- Docs: https://handshake58.com/skill.md
60
- Providers: https://handshake58.com/api/mcp/providers
61
- npm: https://www.npmjs.com/package/drain-mcp
62
- Source: https://github.com/kimbo128/DRAIN
10
+ console.log(`
11
+ drain-mcp — MCP server for the DRAIN payment protocol
12
+
13
+ WHAT IS THIS?
14
+ drain-mcp is a Model Context Protocol (MCP) server. It runs inside any
15
+ MCP-compatible client and gives agents tools to discover service providers,
16
+ open USDC payment channels on Polygon, and call any service — LLM, image
17
+ generation, web scraping, VPN, and more. Pay per use, no API keys.
18
+
19
+ COMPATIBLE CLIENTS:
20
+ Cursor, Claude Desktop, Cline, Windsurf, OpenAI Agents, or any MCP client.
21
+
22
+ CONFIGURATION:
23
+ {
24
+ "mcpServers": {
25
+ "drain": {
26
+ "command": "drain-mcp",
27
+ "env": {
28
+ "DRAIN_PRIVATE_KEY": "0x_your_polygon_wallet_private_key"
29
+ }
30
+ }
31
+ }
32
+ }
33
+
34
+ ENVIRONMENT VARIABLES:
35
+ DRAIN_PRIVATE_KEY (required) Polygon wallet private key
36
+ DRAIN_CHAIN_ID 137 (Polygon, default) or 80002 (Amoy testnet)
37
+ DRAIN_RPC_URL Custom RPC endpoint
38
+ DRAIN_DIRECTORY_URL Provider directory URL
39
+ DRAIN_MARKETPLACE_URL Marketplace base URL
40
+
41
+ MCP TOOLS PROVIDED:
42
+ drain_providers List service providers (filter by model, category)
43
+ drain_provider_info Provider details + usage instructions (docs)
44
+ drain_balance Check wallet USDC balance and allowance
45
+ drain_approve Approve USDC spending for the DRAIN contract
46
+ drain_open_channel Open a payment channel with a provider
47
+ drain_close_channel Close expired channel and reclaim funds
48
+ drain_cooperative_close Close channel immediately (provider co-signs)
49
+ drain_channel_status Check channel status and balance
50
+ drain_channels List all known channels with status
51
+ drain_chat Send a paid request to a provider
52
+
53
+ PROVIDER CATEGORIES:
54
+ llm, image, audio, code, scraping, vpn, multi-modal, other
55
+ Each provider has a docs endpoint explaining how to format requests.
56
+
57
+ LINKS:
58
+ Marketplace: https://handshake58.com
59
+ Docs: https://handshake58.com/skill.md
60
+ Providers: https://handshake58.com/api/mcp/providers
61
+ npm: https://www.npmjs.com/package/drain-mcp
62
+ Source: https://github.com/kimbo128/DRAIN
63
63
  `);
64
64
  process.exit(0);
65
65
  }
@@ -239,7 +239,7 @@ catch (error) {
239
239
  console.error(`\n drain-mcp: ${msg}\n`);
240
240
  console.error(' Setup:');
241
241
  console.error(' 1. Create a Polygon wallet (MetaMask, Rabby, or any EVM wallet)');
242
- console.error(' 2. Fund it with $1-5 USDC + $0.10 POL for gas');
242
+ console.error(' 2. Fund it with $5+ USDC (gas provided free via handshake58.com/api/gas-station)');
243
243
  console.error(' 3. Add drain-mcp to your MCP client config:\n');
244
244
  console.error(' {');
245
245
  console.error(' "mcpServers": {');
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/tools/balance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;GAEG;AACH,wBAAsB,UAAU,CAC9B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CA4BjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAGD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;IAkCxB,CAAC"}
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../src/tools/balance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD;;GAEG;AACH,wBAAsB,UAAU,CAC9B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAGD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;IAkCxB,CAAC"}
@@ -12,24 +12,42 @@ export async function getBalance(walletService, config) {
12
12
  const network = config.chainId === 137 ? 'Polygon Mainnet' : 'Polygon Amoy Testnet';
13
13
  const hasGas = parseFloat(nativeBalance.formatted) > 0.01;
14
14
  const hasAllowance = parseFloat(allowance.formatted) > 0;
15
- return `# Wallet Status
16
-
17
- **Address:** \`${address}\`
18
- **Network:** ${network}
19
-
20
- ## Balances
21
- - **USDC:** $${usdcBalance.formatted}
22
- - **POL (for gas):** ${nativeBalance.formatted} POL
23
-
24
- ## DRAIN Contract
25
- - **Allowance:** $${allowance.formatted} USDC
26
- - **Contract:** \`${config.drainAddress}\`
27
-
28
- ## Status
29
- ${parseFloat(usdcBalance.formatted) > 0 ? '✅' : '⚠️'} USDC Balance: ${parseFloat(usdcBalance.formatted) > 0 ? 'OK' : 'LOW - need USDC to open channels'}
30
- ${hasGas ? '✅' : '⚠️'} Gas: ${hasGas ? 'OK' : 'LOW - need POL for transactions'}
31
- ${hasAllowance ? '✅' : 'ℹ️'} Allowance: ${hasAllowance ? 'Approved' : 'Not yet approved - will need to approve before opening channel'}
15
+ let result = `# Wallet Status
16
+
17
+ **Address:** \`${address}\`
18
+ **Network:** ${network}
19
+
20
+ ## Balances
21
+ - **USDC:** $${usdcBalance.formatted}
22
+ - **POL (for gas):** ${nativeBalance.formatted} POL
23
+
24
+ ## DRAIN Contract
25
+ - **Allowance:** $${allowance.formatted} USDC
26
+ - **Contract:** \`${config.drainAddress}\`
27
+
28
+ ## Status
29
+ ${parseFloat(usdcBalance.formatted) > 0 ? '✅' : '⚠️'} USDC Balance: ${parseFloat(usdcBalance.formatted) > 0 ? 'OK' : 'LOW - need USDC to open channels. Get free credits with an invite code at handshake58.com/join/<code>'}
30
+ ${hasGas ? '✅' : '⚠️'} Gas: ${hasGas ? 'OK' : `LOW - need POL for transactions${parseFloat(usdcBalance.formatted) >= 5 ? ' — requesting from Gas Station...' : '. Fund with $5+ USDC and gas is provided free, or use an invite code at handshake58.com/join/<code>'}`}
31
+ ${hasAllowance ? '✅' : 'ℹ️'} Allowance: ${hasAllowance ? 'Approved' : 'Not yet approved - will need to approve before opening channel'}
32
32
  `;
33
+ if (!hasGas && parseFloat(usdcBalance.formatted) >= 5) {
34
+ try {
35
+ const gasRes = await fetch(`${config.marketplaceBaseUrl || 'https://handshake58.com'}/api/gas-station`, {
36
+ method: 'POST',
37
+ headers: { 'Content-Type': 'application/json' },
38
+ body: JSON.stringify({ address }),
39
+ });
40
+ const gasData = await gasRes.json();
41
+ if (gasRes.ok && gasData.success) {
42
+ result += `\n🔋 **Gas Station:** 0.1 POL sent automatically! TX: \`${gasData.txHash}\`\nWait ~5 seconds, then proceed with drain_approve and drain_open_channel.`;
43
+ }
44
+ else if (gasData.error) {
45
+ result += `\nℹ️ Gas Station: ${gasData.error}`;
46
+ }
47
+ }
48
+ catch { }
49
+ }
50
+ return result;
33
51
  }
34
52
  /**
35
53
  * Approve USDC spending
@@ -49,13 +67,13 @@ export async function approveUsdc(walletService, args) {
49
67
  export const balanceTools = [
50
68
  {
51
69
  name: 'drain_balance',
52
- description: `Check wallet balance, USDC allowance, and readiness for DRAIN protocol.
53
-
54
- Use this to verify:
55
- - You have enough USDC to open channels
56
- - You have enough POL for gas fees
57
- - USDC is approved for the DRAIN contract
58
-
70
+ description: `Check wallet balance, USDC allowance, and readiness for DRAIN protocol.
71
+
72
+ Use this to verify:
73
+ - You have enough USDC to open channels
74
+ - You have enough POL for gas fees
75
+ - USDC is approved for the DRAIN contract
76
+
59
77
  Returns: Wallet address, balances, and status indicators.`,
60
78
  inputSchema: {
61
79
  type: 'object',
@@ -64,11 +82,11 @@ Returns: Wallet address, balances, and status indicators.`,
64
82
  },
65
83
  {
66
84
  name: 'drain_approve',
67
- description: `Approve USDC spending for the DRAIN contract.
68
-
69
- Required before opening payment channels. Only needed once — after approval you can open unlimited channels.
70
- If no amount is specified, approves unlimited spending (recommended).
71
-
85
+ description: `Approve USDC spending for the DRAIN contract.
86
+
87
+ Required before opening payment channels. Only needed once — after approval you can open unlimited channels.
88
+ If no amount is specified, approves unlimited spending (recommended).
89
+
72
90
  Returns: Transaction hash of the approval.`,
73
91
  inputSchema: {
74
92
  type: 'object',
@@ -1 +1 @@
1
- {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/tools/balance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,aAA4B,EAC5B,MAAmB;IAEnB,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,CAAC;IACzD,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,gBAAgB,EAAE,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,YAAY,EAAE,CAAC;IAErD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,sBAAsB,CAAC;IACpF,MAAM,MAAM,GAAG,UAAU,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAC1D,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEzD,OAAO;;iBAEQ,OAAO;eACT,OAAO;;;eAGP,WAAW,CAAC,SAAS;uBACb,aAAa,CAAC,SAAS;;;oBAG1B,SAAS,CAAC,SAAS;oBACnB,MAAM,CAAC,YAAY;;;EAGrC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,kBAAkB,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kCAAkC;EACrJ,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC;EAC7E,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,eAAe,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gEAAgE;CACrI,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,aAA4B,EAC5B,IAAyB;IAEzB,IAAI,MAAc,CAAC;IAEnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,OAAO,cAAc,IAAI,CAAC,MAAM,+CAA+C,MAAM,IAAI,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;QAC1C,OAAO,mEAAmE,MAAM,IAAI,CAAC;IACvF,CAAC;AACH,CAAC;AAED,2BAA2B;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE;;;;;;;0DAOyC;QACtD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf;KACF;IACD;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE;;;;;2CAK0B;QACvC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0EAA0E;iBACxF;aACF;SACF;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/tools/balance.ts"],"names":[],"mappings":"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"}
@@ -67,31 +67,31 @@ export async function openChannel(channelService, providerService, args) {
67
67
  docsSection = `\n## Provider Documentation\nBefore sending requests, read the provider docs: ${docsUrl}\n`;
68
68
  }
69
69
  }
70
- return `# Channel Opened
71
-
72
- **Channel ID:** \`${result.channelId}\`
73
- **Transaction:** \`${result.txHash}\`
74
-
75
- ## Details
76
- - **Provider:** ${providerName} (${resolvedProvider?.category || 'llm'})
77
- - **Deposit:** $${args.amount} USDC
78
- - **Duration:** ${hours} hours
79
- - **Expires:** ${expiryDate}
80
- ${docsSection}
81
- ## Next Steps
82
- Use \`drain_chat\` to send requests through this channel.
83
-
70
+ return `# Channel Opened
71
+
72
+ **Channel ID:** \`${result.channelId}\`
73
+ **Transaction:** \`${result.txHash}\`
74
+
75
+ ## Details
76
+ - **Provider:** ${providerName} (${resolvedProvider?.category || 'llm'})
77
+ - **Deposit:** $${args.amount} USDC
78
+ - **Duration:** ${hours} hours
79
+ - **Expires:** ${expiryDate}
80
+ ${docsSection}
81
+ ## Next Steps
82
+ Use \`drain_chat\` to send requests through this channel.
83
+
84
84
  **FUND RECOVERY:** After expiry (${expiryDate}), call \`drain_close_channel\` to reclaim unspent USDC. Funds do NOT return automatically. If you have cron/scheduling, set a timer for the expiry time.`;
85
85
  }
86
86
  export async function closeChannel(channelService, args) {
87
87
  const channelId = args.channelId;
88
88
  const result = await channelService.closeChannel(channelId);
89
- return `# Channel Closed
90
-
91
- **Channel ID:** \`${channelId}\`
92
- **Transaction:** \`${result.txHash}\`
93
- **Refunded:** $${result.refundAmount} USDC
94
-
89
+ return `# Channel Closed
90
+
91
+ **Channel ID:** \`${channelId}\`
92
+ **Transaction:** \`${result.txHash}\`
93
+ **Refunded:** $${result.refundAmount} USDC
94
+
95
95
  The remaining balance has been returned to your wallet.`;
96
96
  }
97
97
  export async function cooperativeClose(channelService, providerService, args) {
@@ -115,16 +115,16 @@ export async function cooperativeClose(channelService, providerService, args) {
115
115
  'The channel may have been opened outside this session.');
116
116
  }
117
117
  const result = await channelService.cooperativeCloseChannel(channelId, providerUrl);
118
- return `# Channel Cooperatively Closed
119
-
120
- **Channel ID:** \`${channelId}\`
121
- **Transaction:** \`${result.txHash}\`
122
-
123
- ## Settlement
124
- - **Provider Payout:** $${result.payout} USDC
125
- - **Protocol Fee (2%):** $${result.fee} USDC
126
- - **Refunded to You:** $${result.refundAmount} USDC
127
-
118
+ return `# Channel Cooperatively Closed
119
+
120
+ **Channel ID:** \`${channelId}\`
121
+ **Transaction:** \`${result.txHash}\`
122
+
123
+ ## Settlement
124
+ - **Provider Payout:** $${result.payout} USDC
125
+ - **Protocol Fee (2%):** $${result.fee} USDC
126
+ - **Refunded to You:** $${result.refundAmount} USDC
127
+
128
128
  Channel closed immediately without waiting for expiry.`;
129
129
  }
130
130
  export async function getChannelStatus(channelService, args) {
@@ -134,21 +134,21 @@ export async function getChannelStatus(channelService, args) {
134
134
  const hoursRemaining = Math.floor(channel.secondsRemaining / 3600);
135
135
  const minutesRemaining = Math.floor((channel.secondsRemaining % 3600) / 60);
136
136
  const statusLabel = channel.isExpired ? 'EXPIRED' : 'ACTIVE';
137
- return `# Channel Status
138
-
139
- **Channel ID:** \`${channel.id}\`
140
- **Status:** ${statusLabel}
141
-
142
- ## Balances
143
- - **Deposit:** $${channel.deposit} USDC
144
- - **Claimed by Provider:** $${channel.claimed} USDC
145
- - **Remaining:** $${channel.remaining} USDC
146
- - **Local Spending (this session):** $${localSpending} USDC
147
-
148
- ## Timing
149
- - **Expires:** ${channel.expiry.toISOString()}
150
- - **Time Remaining:** ${channel.isExpired ? 'EXPIRED' : `${hoursRemaining}h ${minutesRemaining}m`}
151
-
137
+ return `# Channel Status
138
+
139
+ **Channel ID:** \`${channel.id}\`
140
+ **Status:** ${statusLabel}
141
+
142
+ ## Balances
143
+ - **Deposit:** $${channel.deposit} USDC
144
+ - **Claimed by Provider:** $${channel.claimed} USDC
145
+ - **Remaining:** $${channel.remaining} USDC
146
+ - **Local Spending (this session):** $${localSpending} USDC
147
+
148
+ ## Timing
149
+ - **Expires:** ${channel.expiry.toISOString()}
150
+ - **Time Remaining:** ${channel.isExpired ? 'EXPIRED' : `${hoursRemaining}h ${minutesRemaining}m`}
151
+
152
152
  ${channel.isExpired ? 'Channel has expired. Call drain_close_channel to reclaim remaining funds.' : ''}`;
153
153
  }
154
154
  export async function listChannels(channelService) {
@@ -182,17 +182,17 @@ export async function listChannels(channelService) {
182
182
  export const channelTools = [
183
183
  {
184
184
  name: 'drain_open_channel',
185
- description: `Open a payment channel with a provider. Deposits USDC into the smart contract.
186
-
187
- Prerequisites:
188
- 1. Sufficient USDC (drain_balance to check)
189
- 2. USDC approved for contract (drain_approve, one-time)
190
- 3. Small amount of POL for gas (~$0.02)
191
-
192
- The response includes the channel expiry time and provider usage instructions.
193
-
194
- FUND RECOVERY: After expiry, you MUST call drain_close_channel to reclaim unspent USDC. Funds do NOT auto-return. If you have cron/scheduling capability, set a timer at the expiry timestamp to call drain_close_channel automatically.
195
-
185
+ description: `Open a payment channel with a provider. Deposits USDC into the smart contract.
186
+
187
+ Prerequisites:
188
+ 1. Sufficient USDC (drain_balance to check)
189
+ 2. USDC approved for contract (drain_approve, one-time)
190
+ 3. Small amount of POL for gas (~$0.02)
191
+
192
+ The response includes the channel expiry time and provider usage instructions.
193
+
194
+ FUND RECOVERY: After expiry, you MUST call drain_close_channel to reclaim unspent USDC. Funds do NOT auto-return. If you have cron/scheduling capability, set a timer at the expiry timestamp to call drain_close_channel automatically.
195
+
196
196
  You can have multiple channels to different providers simultaneously.`,
197
197
  inputSchema: {
198
198
  type: 'object',
@@ -215,12 +215,12 @@ You can have multiple channels to different providers simultaneously.`,
215
215
  },
216
216
  {
217
217
  name: 'drain_close_channel',
218
- description: `Close an expired channel and reclaim unspent USDC.
219
-
220
- Only callable after the channel has expired. Returns remaining deposit to wallet.
221
-
222
- Schedule this at channel-open time. If you have cron/timer capability, set it for the expiry timestamp from drain_open_channel. Unclosed expired channels = locked funds.
223
-
218
+ description: `Close an expired channel and reclaim unspent USDC.
219
+
220
+ Only callable after the channel has expired. Returns remaining deposit to wallet.
221
+
222
+ Schedule this at channel-open time. If you have cron/timer capability, set it for the expiry timestamp from drain_open_channel. Unclosed expired channels = locked funds.
223
+
224
224
  If "Channel not expired" -> wait until expiry, then retry.`,
225
225
  inputSchema: {
226
226
  type: 'object',
@@ -235,13 +235,13 @@ If "Channel not expired" -> wait until expiry, then retry.`,
235
235
  },
236
236
  {
237
237
  name: 'drain_channel_status',
238
- description: `Check current status and balance of a payment channel.
239
-
240
- Returns: deposit, spent, remaining balance, expiry time, and whether expired.
241
-
242
- Use this to:
243
- - Estimate remaining budget
244
- - Check if channel needs closing (expired)
238
+ description: `Check current status and balance of a payment channel.
239
+
240
+ Returns: deposit, spent, remaining balance, expiry time, and whether expired.
241
+
242
+ Use this to:
243
+ - Estimate remaining budget
244
+ - Check if channel needs closing (expired)
245
245
  - Decide whether to open a new channel (low balance)`,
246
246
  inputSchema: {
247
247
  type: 'object',
@@ -256,12 +256,12 @@ Use this to:
256
256
  },
257
257
  {
258
258
  name: 'drain_cooperative_close',
259
- description: `Close a payment channel IMMEDIATELY by requesting a cooperative close from the provider.
260
-
261
- Unlike drain_close_channel (which requires waiting for expiry), this contacts the provider's API to get a close signature, then settles on-chain right away. The provider gets paid for actual usage, the 2% protocol fee is deducted, and the remaining deposit is refunded to your wallet.
262
-
263
- Use this when you're done with a channel and want your funds back now.
264
-
259
+ description: `Close a payment channel IMMEDIATELY by requesting a cooperative close from the provider.
260
+
261
+ Unlike drain_close_channel (which requires waiting for expiry), this contacts the provider's API to get a close signature, then settles on-chain right away. The provider gets paid for actual usage, the 2% protocol fee is deducted, and the remaining deposit is refunded to your wallet.
262
+
263
+ Use this when you're done with a channel and want your funds back now.
264
+
265
265
  Falls back to drain_close_channel if the provider is offline or refuses.`,
266
266
  inputSchema: {
267
267
  type: 'object',
@@ -276,10 +276,10 @@ Falls back to drain_close_channel if the provider is offline or refuses.`,
276
276
  },
277
277
  {
278
278
  name: 'drain_channels',
279
- description: `List all known payment channels with their current status.
280
-
281
- Shows channels this wallet has opened: status (active/expired/closed), provider, category, remaining balance, and expiry.
282
-
279
+ description: `List all known payment channels with their current status.
280
+
281
+ Shows channels this wallet has opened: status (active/expired/closed), provider, category, remaining balance, and expiry.
282
+
283
283
  Use this to find expired channels that need closing to recover funds. If any channel shows EXPIRED, call drain_close_channel immediately.`,
284
284
  inputSchema: {
285
285
  type: 'object',
@@ -40,9 +40,9 @@ export async function chat(channelService, providerService, inferenceService, ar
40
40
  const assistantMessage = response.choices[0]?.message?.content ?? '';
41
41
  const cost = response.drain?.cost ?? 'unknown';
42
42
  const totalSpent = response.drain?.totalSpent ?? 'unknown';
43
- return `${assistantMessage}
44
-
45
- ---
43
+ return `${assistantMessage}
44
+
45
+ ---
46
46
  *Cost: $${formatCost(cost)} USDC | Total spent: $${formatCost(totalSpent)} USDC | Tokens: ${response.usage.total_tokens}*`;
47
47
  }
48
48
  /**
@@ -61,18 +61,18 @@ function formatCost(cost) {
61
61
  export const chatTools = [
62
62
  {
63
63
  name: 'drain_chat',
64
- description: `Send a paid request to a provider through an open payment channel.
65
-
66
- Works for ALL provider types — not just LLM chat:
67
- - LLM providers (category "llm"): Standard chat messages [{role, content}]
68
- - Non-LLM providers (scraping, image, VPN, etc.): Put structured JSON in the user message content. The expected format is in the provider's docs — call drain_provider_info first.
69
-
70
- Payment is automatic: signs a voucher, deducts from channel balance, returns the response.
71
-
72
- Requires an open, non-expired channel with sufficient balance.
73
-
74
- If "Channel expired" -> open a new channel.
75
- If "Insufficient balance" -> open a new channel with more funds.
64
+ description: `Send a paid request to a provider through an open payment channel.
65
+
66
+ Works for ALL provider types — not just LLM chat:
67
+ - LLM providers (category "llm"): Standard chat messages [{role, content}]
68
+ - Non-LLM providers (scraping, image, VPN, etc.): Put structured JSON in the user message content. The expected format is in the provider's docs — call drain_provider_info first.
69
+
70
+ Payment is automatic: signs a voucher, deducts from channel balance, returns the response.
71
+
72
+ Requires an open, non-expired channel with sufficient balance.
73
+
74
+ If "Channel expired" -> open a new channel.
75
+ If "Insufficient balance" -> open a new channel with more funds.
76
76
  If "Provider offline" -> use drain_providers to find an alternative.`,
77
77
  inputSchema: {
78
78
  type: 'object',
@@ -14,21 +14,21 @@ function formatProvider(p) {
14
14
  const latency = p.status.latencyMs ? `${p.status.latencyMs}ms` : 'N/A';
15
15
  const docsUrl = p.docsUrl || `${p.apiUrl}/v1/docs`;
16
16
  const models = p.models.map(m => ` - ${m.name} (${formatPricing(m)})`).join('\n');
17
- return `
18
- ## ${p.name}
19
- - **ID:** ${p.id}
20
- - **Category:** ${p.category || 'llm'}
21
- - **Status:** ${status}
22
- - **Latency:** ${latency}
23
- - **Address:** ${p.providerAddress}
24
- - **API:** ${p.apiUrl}
25
- - **Docs:** ${docsUrl}
26
- - **Chain:** ${p.chainId === 137 ? 'Polygon Mainnet' : 'Polygon Amoy'}
27
-
28
- **Description:** ${p.description}
29
-
30
- **Models / Services:**
31
- ${models}
17
+ return `
18
+ ## ${p.name}
19
+ - **ID:** ${p.id}
20
+ - **Category:** ${p.category || 'llm'}
21
+ - **Status:** ${status}
22
+ - **Latency:** ${latency}
23
+ - **Address:** ${p.providerAddress}
24
+ - **API:** ${p.apiUrl}
25
+ - **Docs:** ${docsUrl}
26
+ - **Chain:** ${p.chainId === 137 ? 'Polygon Mainnet' : 'Polygon Amoy'}
27
+
28
+ **Description:** ${p.description}
29
+
30
+ **Models / Services:**
31
+ ${models}
32
32
  `.trim();
33
33
  }
34
34
  export async function listProviders(providerService, args) {
@@ -76,14 +76,14 @@ export async function getProvider(providerService, args) {
76
76
  export const providerTools = [
77
77
  {
78
78
  name: 'drain_providers',
79
- description: `List available service providers on the DRAIN marketplace.
80
-
81
- Providers offer diverse services by category: llm, image, audio, code, scraping, vpn, multi-modal, other. Each provider has a docs endpoint with usage instructions for that service.
82
-
83
- For any provider that is not category "llm", read its docs (via drain_provider_info) before sending requests to learn the expected message format.
84
-
85
- You can open channels to multiple providers simultaneously for multi-service workflows.
86
-
79
+ description: `List available service providers on the DRAIN marketplace.
80
+
81
+ Providers offer diverse services by category: llm, image, audio, code, scraping, vpn, multi-modal, other. Each provider has a docs endpoint with usage instructions for that service.
82
+
83
+ For any provider that is not category "llm", read its docs (via drain_provider_info) before sending requests to learn the expected message format.
84
+
85
+ You can open channels to multiple providers simultaneously for multi-service workflows.
86
+
87
87
  Returns: Providers with category, models/services, pricing, docs URL, and online status.`,
88
88
  inputSchema: {
89
89
  type: 'object',
@@ -105,10 +105,10 @@ Returns: Providers with category, models/services, pricing, docs URL, and online
105
105
  },
106
106
  {
107
107
  name: 'drain_provider_info',
108
- description: `Get detailed information about a provider including usage instructions.
109
-
110
- Returns provider details, available models/services, pricing, and docs content.
111
- The docs explain how to format the messages parameter in drain_chat for this provider.
108
+ description: `Get detailed information about a provider including usage instructions.
109
+
110
+ Returns provider details, available models/services, pricing, and docs content.
111
+ The docs explain how to format the messages parameter in drain_chat for this provider.
112
112
  For non-LLM providers this is essential — the docs specify the expected JSON payload.`,
113
113
  inputSchema: {
114
114
  type: 'object',