drain-mcp 0.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 (46) hide show
  1. package/README.md +177 -0
  2. package/dist/config.d.ts +17530 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +74 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/constants.d.ts +174 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +119 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/index.d.ts +9 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +170 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/services/channel.d.ts +79 -0
  15. package/dist/services/channel.d.ts.map +1 -0
  16. package/dist/services/channel.js +190 -0
  17. package/dist/services/channel.js.map +1 -0
  18. package/dist/services/inference.d.ts +54 -0
  19. package/dist/services/inference.d.ts.map +1 -0
  20. package/dist/services/inference.js +81 -0
  21. package/dist/services/inference.js.map +1 -0
  22. package/dist/services/provider.d.ts +70 -0
  23. package/dist/services/provider.d.ts.map +1 -0
  24. package/dist/services/provider.js +84 -0
  25. package/dist/services/provider.js.map +1 -0
  26. package/dist/services/wallet.d.ts +48 -0
  27. package/dist/services/wallet.d.ts.map +1 -0
  28. package/dist/services/wallet.js +102 -0
  29. package/dist/services/wallet.js.map +1 -0
  30. package/dist/tools/balance.d.ts +40 -0
  31. package/dist/tools/balance.d.ts.map +1 -0
  32. package/dist/tools/balance.js +86 -0
  33. package/dist/tools/balance.js.map +1 -0
  34. package/dist/tools/channel.d.ts +67 -0
  35. package/dist/tools/channel.d.ts.map +1 -0
  36. package/dist/tools/channel.js +177 -0
  37. package/dist/tools/channel.js.map +1 -0
  38. package/dist/tools/chat.d.ts +64 -0
  39. package/dist/tools/chat.d.ts.map +1 -0
  40. package/dist/tools/chat.js +118 -0
  41. package/dist/tools/chat.js.map +1 -0
  42. package/dist/tools/providers.d.ts +54 -0
  43. package/dist/tools/providers.d.ts.map +1 -0
  44. package/dist/tools/providers.js +102 -0
  45. package/dist/tools/providers.js.map +1 -0
  46. package/package.json +43 -0
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Chat Tool
3
+ *
4
+ * The main tool: Make AI chat requests with DRAIN payment.
5
+ */
6
+ /**
7
+ * Make a chat completion request
8
+ */
9
+ export async function chat(channelService, providerService, inferenceService, args) {
10
+ const channelId = args.channelId;
11
+ // Get channel to find provider
12
+ const channel = await channelService.getChannel(channelId);
13
+ if (channel.isExpired) {
14
+ throw new Error('Channel has expired. Open a new channel to continue.');
15
+ }
16
+ // Find provider by address
17
+ const providers = await providerService.getProviders();
18
+ const provider = providers.find(p => p.providerAddress.toLowerCase() === channel.provider.toLowerCase());
19
+ if (!provider) {
20
+ throw new Error(`Provider ${channel.provider} not found in directory. The channel may be for an unlisted provider.`);
21
+ }
22
+ // Check model is available
23
+ const modelInfo = provider.models.find(m => m.id === args.model);
24
+ if (!modelInfo) {
25
+ const availableModels = provider.models.map(m => m.id).join(', ');
26
+ throw new Error(`Model "${args.model}" not available from this provider. Available: ${availableModels}`);
27
+ }
28
+ // Make the request
29
+ const response = await inferenceService.chat(provider, channelId, {
30
+ model: args.model,
31
+ messages: args.messages,
32
+ max_tokens: args.maxTokens,
33
+ temperature: args.temperature,
34
+ });
35
+ // Format response
36
+ const assistantMessage = response.choices[0]?.message?.content ?? '';
37
+ const cost = response.drain?.cost ?? 'unknown';
38
+ const totalSpent = response.drain?.totalSpent ?? 'unknown';
39
+ return `${assistantMessage}
40
+
41
+ ---
42
+ *Cost: $${formatCost(cost)} USDC | Total spent: $${formatCost(totalSpent)} USDC | Tokens: ${response.usage.total_tokens}*`;
43
+ }
44
+ /**
45
+ * Format cost for display
46
+ */
47
+ function formatCost(cost) {
48
+ const num = parseFloat(cost) / 1_000_000; // Convert from wei to USDC
49
+ if (isNaN(num))
50
+ return cost;
51
+ if (num < 0.0001)
52
+ return num.toFixed(6);
53
+ if (num < 0.01)
54
+ return num.toFixed(4);
55
+ return num.toFixed(4);
56
+ }
57
+ // Tool definition for MCP
58
+ export const chatTools = [
59
+ {
60
+ name: 'drain_chat',
61
+ description: `Send a chat completion request to an AI provider through DRAIN.
62
+
63
+ This is the main tool for AI inference. It:
64
+ 1. Uses your open payment channel
65
+ 2. Automatically signs a payment voucher
66
+ 3. Sends the request to the provider
67
+ 4. Returns the AI response
68
+
69
+ PREREQUISITES:
70
+ - You must have an open channel (use drain_open_channel first)
71
+ - The channel must have sufficient balance
72
+ - The channel must not be expired
73
+
74
+ The cost is automatically deducted from your channel balance.`,
75
+ inputSchema: {
76
+ type: 'object',
77
+ properties: {
78
+ channelId: {
79
+ type: 'string',
80
+ description: 'The payment channel ID to use (0x...)',
81
+ },
82
+ model: {
83
+ type: 'string',
84
+ description: 'Model ID to use (e.g., "gpt-4o", "gpt-4o-mini")',
85
+ },
86
+ messages: {
87
+ type: 'array',
88
+ description: 'Chat messages in OpenAI format',
89
+ items: {
90
+ type: 'object',
91
+ properties: {
92
+ role: {
93
+ type: 'string',
94
+ enum: ['system', 'user', 'assistant'],
95
+ description: 'Message role',
96
+ },
97
+ content: {
98
+ type: 'string',
99
+ description: 'Message content',
100
+ },
101
+ },
102
+ required: ['role', 'content'],
103
+ },
104
+ },
105
+ maxTokens: {
106
+ type: 'number',
107
+ description: 'Maximum tokens to generate (optional)',
108
+ },
109
+ temperature: {
110
+ type: 'number',
111
+ description: 'Sampling temperature 0-2 (optional)',
112
+ },
113
+ },
114
+ required: ['channelId', 'model', 'messages'],
115
+ },
116
+ },
117
+ ];
118
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/tools/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Provider Discovery Tools
3
+ *
4
+ * Tools for discovering and inspecting DRAIN AI providers.
5
+ */
6
+ import type { ProviderService } from '../services/provider.js';
7
+ /**
8
+ * List all available providers
9
+ */
10
+ export declare function listProviders(providerService: ProviderService, args: {
11
+ onlineOnly?: boolean;
12
+ model?: string;
13
+ }): Promise<string>;
14
+ /**
15
+ * Get details for a specific provider
16
+ */
17
+ export declare function getProvider(providerService: ProviderService, args: {
18
+ providerId: string;
19
+ }): Promise<string>;
20
+ export declare const providerTools: ({
21
+ name: string;
22
+ description: string;
23
+ inputSchema: {
24
+ type: string;
25
+ properties: {
26
+ onlineOnly: {
27
+ type: string;
28
+ description: string;
29
+ };
30
+ model: {
31
+ type: string;
32
+ description: string;
33
+ };
34
+ providerId?: undefined;
35
+ };
36
+ required?: undefined;
37
+ };
38
+ } | {
39
+ name: string;
40
+ description: string;
41
+ inputSchema: {
42
+ type: string;
43
+ properties: {
44
+ providerId: {
45
+ type: string;
46
+ description: string;
47
+ };
48
+ onlineOnly?: undefined;
49
+ model?: undefined;
50
+ };
51
+ required: string[];
52
+ };
53
+ })[];
54
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,yBAAyB,CAAC;AA0BzE;;GAEG;AACH,wBAAsB,aAAa,CACjC,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAC3B,OAAO,CAAC,MAAM,CAAC,CAQjB;AAGD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuCzB,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Provider Discovery Tools
3
+ *
4
+ * Tools for discovering and inspecting DRAIN AI providers.
5
+ */
6
+ /**
7
+ * Format provider for display
8
+ */
9
+ function formatProvider(p) {
10
+ const status = p.status.online ? '🟢 ONLINE' : '🔴 OFFLINE';
11
+ const latency = p.status.latencyMs ? `${p.status.latencyMs}ms` : 'N/A';
12
+ const models = p.models.map(m => ` - ${m.name} ($${m.pricing.inputPer1kTokens}/$${m.pricing.outputPer1kTokens} per 1k tokens)`).join('\n');
13
+ return `
14
+ ## ${p.name}
15
+ - **ID:** ${p.id}
16
+ - **Status:** ${status}
17
+ - **Latency:** ${latency}
18
+ - **Address:** ${p.providerAddress}
19
+ - **API:** ${p.apiUrl}
20
+ - **Chain:** ${p.chainId === 137 ? 'Polygon Mainnet' : 'Polygon Amoy'}
21
+
22
+ **Description:** ${p.description}
23
+
24
+ **Models:**
25
+ ${models}
26
+ `.trim();
27
+ }
28
+ /**
29
+ * List all available providers
30
+ */
31
+ export async function listProviders(providerService, args) {
32
+ let providers;
33
+ if (args.model) {
34
+ providers = await providerService.findByModel(args.model);
35
+ }
36
+ else if (args.onlineOnly) {
37
+ providers = await providerService.getOnlineProviders();
38
+ }
39
+ else {
40
+ providers = await providerService.getProviders();
41
+ }
42
+ if (providers.length === 0) {
43
+ if (args.model) {
44
+ return `No providers found supporting model "${args.model}".`;
45
+ }
46
+ return 'No providers available in the directory.';
47
+ }
48
+ const formatted = providers.map(formatProvider).join('\n\n---\n\n');
49
+ return `# DRAIN AI Providers\n\nFound ${providers.length} provider(s):\n\n${formatted}`;
50
+ }
51
+ /**
52
+ * Get details for a specific provider
53
+ */
54
+ export async function getProvider(providerService, args) {
55
+ const provider = await providerService.getProvider(args.providerId);
56
+ if (!provider) {
57
+ return `Provider "${args.providerId}" not found.`;
58
+ }
59
+ return formatProvider(provider);
60
+ }
61
+ // Tool definitions for MCP
62
+ export const providerTools = [
63
+ {
64
+ name: 'drain_providers',
65
+ description: `List available DRAIN AI providers.
66
+
67
+ These are AI services that accept DRAIN micropayments for inference.
68
+ Use this to discover which providers and models are available before opening a channel.
69
+
70
+ Returns: List of providers with their models, pricing, and status.`,
71
+ inputSchema: {
72
+ type: 'object',
73
+ properties: {
74
+ onlineOnly: {
75
+ type: 'boolean',
76
+ description: 'If true, only return providers that are currently online',
77
+ },
78
+ model: {
79
+ type: 'string',
80
+ description: 'Filter providers by model name (e.g., "gpt-4o", "gpt-3.5-turbo")',
81
+ },
82
+ },
83
+ },
84
+ },
85
+ {
86
+ name: 'drain_provider_info',
87
+ description: `Get detailed information about a specific DRAIN provider.
88
+
89
+ Returns: Provider details including all available models and their pricing.`,
90
+ inputSchema: {
91
+ type: 'object',
92
+ properties: {
93
+ providerId: {
94
+ type: 'string',
95
+ description: 'The provider ID to look up',
96
+ },
97
+ },
98
+ required: ['providerId'],
99
+ },
100
+ },
101
+ ];
102
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "drain-mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP Server for DRAIN Protocol - Autonomous AI payments",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "drain-mcp": "./dist/index.js"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "dev": "tsc --watch",
13
+ "start": "node dist/index.js",
14
+ "prepublishOnly": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "mcp",
18
+ "drain",
19
+ "ai",
20
+ "payments",
21
+ "micropayments",
22
+ "polygon",
23
+ "usdc",
24
+ "agent"
25
+ ],
26
+ "author": "",
27
+ "license": "MIT",
28
+ "dependencies": {
29
+ "@modelcontextprotocol/sdk": "^1.0.0",
30
+ "viem": "^2.21.0"
31
+ },
32
+ "devDependencies": {
33
+ "@types/node": "^22.0.0",
34
+ "typescript": "^5.6.0"
35
+ },
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "README.md"
42
+ ]
43
+ }