drain-mcp 0.2.5 → 0.3.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.
- package/dist/index.js +25 -7
- package/dist/index.js.map +1 -1
- package/dist/services/provider.d.ts +3 -0
- package/dist/services/provider.d.ts.map +1 -1
- package/dist/services/provider.js.map +1 -1
- package/dist/services/telemetry.d.ts +27 -0
- package/dist/services/telemetry.d.ts.map +1 -0
- package/dist/services/telemetry.js +31 -0
- package/dist/services/telemetry.js.map +1 -0
- package/dist/tools/chat.d.ts +2 -1
- package/dist/tools/chat.d.ts.map +1 -1
- package/dist/tools/chat.js +34 -20
- package/dist/tools/chat.js.map +1 -1
- package/dist/tools/feedback.d.ts +43 -0
- package/dist/tools/feedback.d.ts.map +1 -0
- package/dist/tools/feedback.js +87 -0
- package/dist/tools/feedback.js.map +1 -0
- package/dist/tools/mpp.d.ts +60 -0
- package/dist/tools/mpp.d.ts.map +1 -0
- package/dist/tools/mpp.js +161 -0
- package/dist/tools/mpp.js.map +1 -0
- package/dist/tools/providers.d.ts +7 -0
- package/dist/tools/providers.d.ts.map +1 -1
- package/dist/tools/providers.js +25 -7
- package/dist/tools/providers.js.map +1 -1
- package/package.json +6 -4
package/dist/index.js
CHANGED
|
@@ -39,7 +39,7 @@ ENVIRONMENT VARIABLES:
|
|
|
39
39
|
DRAIN_MARKETPLACE_URL Marketplace base URL
|
|
40
40
|
|
|
41
41
|
MCP TOOLS PROVIDED:
|
|
42
|
-
drain_providers List service providers (filter by model, category)
|
|
42
|
+
drain_providers List service providers (filter by model, category, protocol)
|
|
43
43
|
drain_provider_info Provider details + usage instructions (docs)
|
|
44
44
|
drain_balance Check wallet USDC balance and allowance
|
|
45
45
|
drain_approve Approve USDC spending for the DRAIN contract
|
|
@@ -48,7 +48,13 @@ MCP TOOLS PROVIDED:
|
|
|
48
48
|
drain_cooperative_close Close channel immediately (provider co-signs)
|
|
49
49
|
drain_channel_status Check channel status and balance
|
|
50
50
|
drain_channels List all known channels with status
|
|
51
|
-
drain_chat Send a paid request
|
|
51
|
+
drain_chat Send a paid request via DRAIN channel
|
|
52
|
+
mpp_chat Send a per-request payment to an MPP provider
|
|
53
|
+
drain_feedback Report quality feedback (success/failure)
|
|
54
|
+
|
|
55
|
+
PROTOCOLS:
|
|
56
|
+
DRAIN — Payment channels on Polygon. Use drain_open_channel -> drain_chat.
|
|
57
|
+
MPP — Per-request HTTP 402 payments. Use mpp_chat directly.
|
|
52
58
|
|
|
53
59
|
PROVIDER CATEGORIES:
|
|
54
60
|
llm, image, audio, code, scraping, vpn, multi-modal, other
|
|
@@ -71,10 +77,13 @@ import { WalletService } from './services/wallet.js';
|
|
|
71
77
|
import { ChannelService } from './services/channel.js';
|
|
72
78
|
import { ProviderService } from './services/provider.js';
|
|
73
79
|
import { InferenceService } from './services/inference.js';
|
|
80
|
+
import { TelemetryService } from './services/telemetry.js';
|
|
74
81
|
import { providerTools, listProviders, getProvider } from './tools/providers.js';
|
|
75
82
|
import { balanceTools, getBalance, approveUsdc } from './tools/balance.js';
|
|
76
83
|
import { channelTools, openChannel, closeChannel, cooperativeClose, getChannelStatus, listChannels } from './tools/channel.js';
|
|
77
84
|
import { chatTools, chat } from './tools/chat.js';
|
|
85
|
+
import { mppTools, mppChat } from './tools/mpp.js';
|
|
86
|
+
import { feedbackTools, submitFeedback } from './tools/feedback.js';
|
|
78
87
|
// ============================================================================
|
|
79
88
|
// SERVER SETUP
|
|
80
89
|
// ============================================================================
|
|
@@ -85,20 +94,19 @@ class DrainMcpServer {
|
|
|
85
94
|
channelService;
|
|
86
95
|
providerService;
|
|
87
96
|
inferenceService;
|
|
97
|
+
telemetryService;
|
|
88
98
|
constructor() {
|
|
89
|
-
// Load configuration
|
|
90
99
|
this.config = loadConfig();
|
|
91
|
-
// Create clients
|
|
92
100
|
const { account, walletClient, publicClient } = createClients(this.config);
|
|
93
|
-
// Initialize services
|
|
94
101
|
this.walletService = new WalletService(publicClient, walletClient, account, this.config);
|
|
95
102
|
this.channelService = new ChannelService(publicClient, walletClient, account, this.config);
|
|
96
103
|
this.providerService = new ProviderService(this.config);
|
|
97
104
|
this.inferenceService = new InferenceService(this.channelService);
|
|
105
|
+
this.telemetryService = new TelemetryService(this.config, account.address);
|
|
98
106
|
// Create MCP server
|
|
99
107
|
this.server = new Server({
|
|
100
108
|
name: 'drain-mcp',
|
|
101
|
-
version: '0.
|
|
109
|
+
version: '0.3.0',
|
|
102
110
|
}, {
|
|
103
111
|
capabilities: {
|
|
104
112
|
tools: {},
|
|
@@ -115,6 +123,8 @@ class DrainMcpServer {
|
|
|
115
123
|
...balanceTools,
|
|
116
124
|
...channelTools,
|
|
117
125
|
...chatTools,
|
|
126
|
+
...mppTools,
|
|
127
|
+
...feedbackTools,
|
|
118
128
|
],
|
|
119
129
|
}));
|
|
120
130
|
// Handle tool calls
|
|
@@ -155,7 +165,15 @@ class DrainMcpServer {
|
|
|
155
165
|
break;
|
|
156
166
|
// Chat tools
|
|
157
167
|
case 'drain_chat':
|
|
158
|
-
result = await chat(this.channelService, this.providerService, this.inferenceService, args);
|
|
168
|
+
result = await chat(this.channelService, this.providerService, this.inferenceService, this.telemetryService, args);
|
|
169
|
+
break;
|
|
170
|
+
// MPP tools
|
|
171
|
+
case 'mpp_chat':
|
|
172
|
+
result = await mppChat(this.providerService, this.telemetryService, args);
|
|
173
|
+
break;
|
|
174
|
+
// Feedback tools
|
|
175
|
+
case 'drain_feedback':
|
|
176
|
+
result = await submitFeedback(this.config, args);
|
|
159
177
|
break;
|
|
160
178
|
default:
|
|
161
179
|
throw new Error(`Unknown tool: ${name}`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/services/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC;AAEjH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,qBAAa,eAAe;IAMd,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAAkC;gBAE/B,MAAM,EAAE,WAAW;IAEvC;;OAEG;IACG,YAAY,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAkC7D;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAK/D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAOvD;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK/C;;;OAGG;IACG,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkB3D;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAiBlE"}
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/services/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,CAAC;AAEjH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,MAAM,EAAE,OAAO,CAAC;QAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,qBAAa,eAAe;IAMd,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAAkC;gBAE/B,MAAM,EAAE,WAAW;IAEvC;;OAEG;IACG,YAAY,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAkC7D;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAK/D;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAOvD;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK/C;;;OAGG;IACG,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAkB3D;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAiBlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/services/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/services/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry Service
|
|
3
|
+
*
|
|
4
|
+
* Fire-and-forget reporting of agent usage data to the marketplace.
|
|
5
|
+
* Never blocks or throws — failures are silently ignored.
|
|
6
|
+
*/
|
|
7
|
+
import type { DrainConfig } from '../config.js';
|
|
8
|
+
interface TelemetryEvent {
|
|
9
|
+
providerId: string;
|
|
10
|
+
latencyMs: number;
|
|
11
|
+
httpStatus: number;
|
|
12
|
+
costUsdc: number;
|
|
13
|
+
protocol: string;
|
|
14
|
+
timestamp: string;
|
|
15
|
+
agentId?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class TelemetryService {
|
|
18
|
+
private endpoint;
|
|
19
|
+
private agentId;
|
|
20
|
+
constructor(config: DrainConfig, agentAddress?: string);
|
|
21
|
+
/**
|
|
22
|
+
* Report a provider interaction. Fire-and-forget — never blocks, never throws.
|
|
23
|
+
*/
|
|
24
|
+
report(event: Omit<TelemetryEvent, 'timestamp' | 'agentId'>): void;
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/services/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,UAAU,cAAc;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAqB;gBAExB,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM;IAKtD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,SAAS,CAAC,GAAG,IAAI;CAcnE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry Service
|
|
3
|
+
*
|
|
4
|
+
* Fire-and-forget reporting of agent usage data to the marketplace.
|
|
5
|
+
* Never blocks or throws — failures are silently ignored.
|
|
6
|
+
*/
|
|
7
|
+
export class TelemetryService {
|
|
8
|
+
endpoint;
|
|
9
|
+
agentId;
|
|
10
|
+
constructor(config, agentAddress) {
|
|
11
|
+
this.endpoint = `${config.marketplaceBaseUrl}/api/telemetry`;
|
|
12
|
+
this.agentId = agentAddress;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Report a provider interaction. Fire-and-forget — never blocks, never throws.
|
|
16
|
+
*/
|
|
17
|
+
report(event) {
|
|
18
|
+
const payload = {
|
|
19
|
+
...event,
|
|
20
|
+
timestamp: new Date().toISOString(),
|
|
21
|
+
agentId: this.agentId,
|
|
22
|
+
};
|
|
23
|
+
fetch(this.endpoint, {
|
|
24
|
+
method: 'POST',
|
|
25
|
+
headers: { 'Content-Type': 'application/json' },
|
|
26
|
+
body: JSON.stringify(payload),
|
|
27
|
+
signal: AbortSignal.timeout(5000),
|
|
28
|
+
}).catch(() => { });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/services/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,CAAS;IACjB,OAAO,CAAqB;IAEpC,YAAY,MAAmB,EAAE,YAAqB;QACpD,IAAI,CAAC,QAAQ,GAAG,GAAG,MAAM,CAAC,kBAAkB,gBAAgB,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAoD;QACzD,MAAM,OAAO,GAAmB;YAC9B,GAAG,KAAK;YACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;QAEF,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC;CACF"}
|
package/dist/tools/chat.d.ts
CHANGED
|
@@ -6,10 +6,11 @@
|
|
|
6
6
|
import type { ChannelService } from '../services/channel.js';
|
|
7
7
|
import type { ProviderService } from '../services/provider.js';
|
|
8
8
|
import type { InferenceService, ChatMessage } from '../services/inference.js';
|
|
9
|
+
import type { TelemetryService } from '../services/telemetry.js';
|
|
9
10
|
/**
|
|
10
11
|
* Make a chat completion request
|
|
11
12
|
*/
|
|
12
|
-
export declare function chat(channelService: ChannelService, providerService: ProviderService, inferenceService: InferenceService, args: {
|
|
13
|
+
export declare function chat(channelService: ChannelService, providerService: ProviderService, inferenceService: InferenceService, telemetryService: TelemetryService, args: {
|
|
13
14
|
channelId: string;
|
|
14
15
|
model: string;
|
|
15
16
|
messages: ChatMessage[];
|
package/dist/tools/chat.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/tools/chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/tools/chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE;;GAEG;AACH,wBAAsB,IAAI,CACxB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE;IACJ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACA,OAAO,CAAC,MAAM,CAAC,CA6DjB;AAaD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DrB,CAAC"}
|
package/dist/tools/chat.js
CHANGED
|
@@ -6,15 +6,13 @@
|
|
|
6
6
|
/**
|
|
7
7
|
* Make a chat completion request
|
|
8
8
|
*/
|
|
9
|
-
export async function chat(channelService, providerService, inferenceService, args) {
|
|
9
|
+
export async function chat(channelService, providerService, inferenceService, telemetryService, args) {
|
|
10
10
|
const channelId = args.channelId;
|
|
11
|
-
|
|
11
|
+
const start = Date.now();
|
|
12
12
|
const channel = await channelService.getChannel(channelId);
|
|
13
13
|
if (channel.isExpired) {
|
|
14
14
|
throw new Error('Channel has expired. Open a new channel to continue.');
|
|
15
15
|
}
|
|
16
|
-
// Find provider — prefer stored ID (handles multiple providers sharing one wallet),
|
|
17
|
-
// fall back to address match for channels opened before this fix
|
|
18
16
|
const providers = await providerService.getProviders();
|
|
19
17
|
const storedProviderId = channelService.getProviderId(channelId);
|
|
20
18
|
const provider = storedProviderId
|
|
@@ -23,27 +21,43 @@ export async function chat(channelService, providerService, inferenceService, ar
|
|
|
23
21
|
if (!provider) {
|
|
24
22
|
throw new Error(`Provider ${channel.provider} not found in directory. The channel may be for an unlisted provider.`);
|
|
25
23
|
}
|
|
26
|
-
// Check model is available
|
|
27
24
|
const modelInfo = provider.models.find(m => m.id === args.model);
|
|
28
25
|
if (!modelInfo) {
|
|
29
26
|
const availableModels = provider.models.map(m => m.id).join(', ');
|
|
30
27
|
throw new Error(`Model "${args.model}" not available from this provider. Available: ${availableModels}`);
|
|
31
28
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
29
|
+
try {
|
|
30
|
+
const response = await inferenceService.chat(provider, channelId, {
|
|
31
|
+
model: args.model,
|
|
32
|
+
messages: args.messages,
|
|
33
|
+
max_tokens: args.maxTokens,
|
|
34
|
+
temperature: args.temperature,
|
|
35
|
+
});
|
|
36
|
+
const latency = Date.now() - start;
|
|
37
|
+
const cost = response.drain?.cost ?? '0';
|
|
38
|
+
const costUsdc = parseFloat(cost) / 1_000_000;
|
|
39
|
+
telemetryService.report({
|
|
40
|
+
providerId: provider.id,
|
|
41
|
+
latencyMs: latency,
|
|
42
|
+
httpStatus: 200,
|
|
43
|
+
costUsdc: isNaN(costUsdc) ? 0 : costUsdc,
|
|
44
|
+
protocol: 'drain',
|
|
45
|
+
});
|
|
46
|
+
const assistantMessage = response.choices[0]?.message?.content ?? '';
|
|
47
|
+
const totalSpent = response.drain?.totalSpent ?? 'unknown';
|
|
48
|
+
return `${assistantMessage}\n\n---\n*Cost: $${formatCost(cost)} USDC | Total spent: $${formatCost(totalSpent)} USDC | Tokens: ${response.usage.total_tokens}*`;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
const latency = Date.now() - start;
|
|
52
|
+
telemetryService.report({
|
|
53
|
+
providerId: provider.id,
|
|
54
|
+
latencyMs: latency,
|
|
55
|
+
httpStatus: 0,
|
|
56
|
+
costUsdc: 0,
|
|
57
|
+
protocol: 'drain',
|
|
58
|
+
});
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
47
61
|
}
|
|
48
62
|
/**
|
|
49
63
|
* Format cost for display
|
package/dist/tools/chat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/tools/chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/tools/chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,cAA8B,EAC9B,eAAgC,EAChC,gBAAkC,EAClC,gBAAkC,EAClC,IAMC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAiB,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAE3D,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,CAAC;IACvD,MAAM,gBAAgB,GAAG,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,gBAAgB;QAC/B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC;QAChD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAE5F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,QAAQ,uEAAuE,CAAC,CAAC;IACvH,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,kDAAkD,eAAe,EAAE,CAAC,CAAC;IAC3G,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE;YAChE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,CAAC;QACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;QAE9C,gBAAgB,CAAC,MAAM,CAAC;YACtB,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;YACxC,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QACrE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,UAAU,IAAI,SAAS,CAAC;QAE3D,OAAO,GAAG,gBAAgB,oBAAoB,UAAU,CAAC,IAAI,CAAC,yBAAyB,UAAU,CAAC,UAAU,CAAC,mBAAmB,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC;IACjK,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,gBAAgB,CAAC,MAAM,CAAC;YACtB,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,2BAA2B;IACrE,IAAI,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5B,IAAI,GAAG,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,GAAG,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE;;;;;;;;;;;;qEAYoD;QACjE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,uCAAuC;iBACrD;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,+EAA+E;iBAC7F;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,oJAAoJ;oBACjK,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,IAAI,EAAE;gCACJ,IAAI,EAAE,QAAQ;gCACd,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC;gCACrC,WAAW,EAAE,cAAc;6BAC5B;4BACD,OAAO,EAAE;gCACP,IAAI,EAAE,QAAQ;gCACd,WAAW,EAAE,mEAAmE;6BACjF;yBACF;wBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;qBAC9B;iBACF;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,2DAA2D;iBACzE;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yDAAyD;iBACvE;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC;SAC7C;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Tool
|
|
3
|
+
*
|
|
4
|
+
* Optional quality report after using a provider.
|
|
5
|
+
* Agents report success/failure + optional failure reason.
|
|
6
|
+
*/
|
|
7
|
+
import type { DrainConfig } from '../config.js';
|
|
8
|
+
export declare function submitFeedback(config: DrainConfig, args: {
|
|
9
|
+
providerId: string;
|
|
10
|
+
outcome: 'success' | 'failure';
|
|
11
|
+
reason?: string;
|
|
12
|
+
protocol?: string;
|
|
13
|
+
}): Promise<string>;
|
|
14
|
+
export declare const feedbackTools: {
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: string;
|
|
19
|
+
properties: {
|
|
20
|
+
providerId: {
|
|
21
|
+
type: string;
|
|
22
|
+
description: string;
|
|
23
|
+
};
|
|
24
|
+
outcome: {
|
|
25
|
+
type: string;
|
|
26
|
+
enum: string[];
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
reason: {
|
|
30
|
+
type: string;
|
|
31
|
+
enum: string[];
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
protocol: {
|
|
35
|
+
type: string;
|
|
36
|
+
enum: string[];
|
|
37
|
+
description: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
required: string[];
|
|
41
|
+
};
|
|
42
|
+
}[];
|
|
43
|
+
//# sourceMappingURL=feedback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/tools/feedback.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,wBAAsB,cAAc,CAClC,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IACJ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,MAAM,CAAC,CAwCjB;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCzB,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feedback Tool
|
|
3
|
+
*
|
|
4
|
+
* Optional quality report after using a provider.
|
|
5
|
+
* Agents report success/failure + optional failure reason.
|
|
6
|
+
*/
|
|
7
|
+
export async function submitFeedback(config, args) {
|
|
8
|
+
if (!args.providerId) {
|
|
9
|
+
return 'Error: providerId is required.';
|
|
10
|
+
}
|
|
11
|
+
if (args.outcome !== 'success' && args.outcome !== 'failure') {
|
|
12
|
+
return 'Error: outcome must be "success" or "failure".';
|
|
13
|
+
}
|
|
14
|
+
const validReasons = ['quality', 'timeout', 'error', 'format', 'unavailable'];
|
|
15
|
+
if (args.reason && !validReasons.includes(args.reason)) {
|
|
16
|
+
return `Error: reason must be one of: ${validReasons.join(', ')}`;
|
|
17
|
+
}
|
|
18
|
+
if (args.outcome === 'success' && args.reason) {
|
|
19
|
+
return 'Error: reason should only be provided for failures.';
|
|
20
|
+
}
|
|
21
|
+
const body = {
|
|
22
|
+
providerId: args.providerId,
|
|
23
|
+
outcome: args.outcome,
|
|
24
|
+
protocol: args.protocol || 'drain',
|
|
25
|
+
};
|
|
26
|
+
if (args.reason)
|
|
27
|
+
body.reason = args.reason;
|
|
28
|
+
try {
|
|
29
|
+
const res = await fetch(`${config.marketplaceBaseUrl}/api/feedback`, {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
headers: { 'Content-Type': 'application/json' },
|
|
32
|
+
body: JSON.stringify(body),
|
|
33
|
+
signal: AbortSignal.timeout(5000),
|
|
34
|
+
});
|
|
35
|
+
if (!res.ok) {
|
|
36
|
+
const data = await res.json().catch(() => ({}));
|
|
37
|
+
return `Feedback rejected: ${data.error || res.statusText}`;
|
|
38
|
+
}
|
|
39
|
+
return `Feedback submitted: ${args.outcome}${args.reason ? ` (${args.reason})` : ''} for provider ${args.providerId}`;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return 'Feedback could not be submitted (network error). This is non-critical.';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export const feedbackTools = [
|
|
46
|
+
{
|
|
47
|
+
name: 'drain_feedback',
|
|
48
|
+
description: `Report quality feedback for a provider interaction. Optional but encouraged.
|
|
49
|
+
|
|
50
|
+
Use this after completing a session with a provider to report whether the interaction was successful or not. This helps improve provider quality scores on the marketplace.
|
|
51
|
+
|
|
52
|
+
For failures, include a reason to help diagnose issues:
|
|
53
|
+
- "quality" — output was incorrect or low quality
|
|
54
|
+
- "timeout" — provider took too long to respond
|
|
55
|
+
- "error" — provider returned an error
|
|
56
|
+
- "format" — response format was wrong or unparseable
|
|
57
|
+
- "unavailable" — provider was unreachable
|
|
58
|
+
|
|
59
|
+
Works for both DRAIN and MPP providers.`,
|
|
60
|
+
inputSchema: {
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {
|
|
63
|
+
providerId: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
description: 'The provider ID (from drain_providers output)',
|
|
66
|
+
},
|
|
67
|
+
outcome: {
|
|
68
|
+
type: 'string',
|
|
69
|
+
enum: ['success', 'failure'],
|
|
70
|
+
description: 'Whether the interaction was successful',
|
|
71
|
+
},
|
|
72
|
+
reason: {
|
|
73
|
+
type: 'string',
|
|
74
|
+
enum: ['quality', 'timeout', 'error', 'format', 'unavailable'],
|
|
75
|
+
description: 'Failure reason (only for outcome="failure")',
|
|
76
|
+
},
|
|
77
|
+
protocol: {
|
|
78
|
+
type: 'string',
|
|
79
|
+
enum: ['drain', 'mpp'],
|
|
80
|
+
description: 'Protocol used (defaults to "drain")',
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
required: ['providerId', 'outcome'],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
//# sourceMappingURL=feedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/tools/feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPP Chat Tool
|
|
3
|
+
*
|
|
4
|
+
* Per-request payments via HTTP 402 protocol.
|
|
5
|
+
* Calls MPP-compatible endpoints without payment channels.
|
|
6
|
+
*/
|
|
7
|
+
import type { ProviderService } from '../services/provider.js';
|
|
8
|
+
import type { TelemetryService } from '../services/telemetry.js';
|
|
9
|
+
import type { ChatMessage } from '../services/inference.js';
|
|
10
|
+
export declare function mppChat(providerService: ProviderService, telemetryService: TelemetryService, args: {
|
|
11
|
+
provider: string;
|
|
12
|
+
messages: ChatMessage[];
|
|
13
|
+
model?: string;
|
|
14
|
+
maxTokens?: number;
|
|
15
|
+
temperature?: number;
|
|
16
|
+
}): Promise<string>;
|
|
17
|
+
export declare const mppTools: {
|
|
18
|
+
name: string;
|
|
19
|
+
description: string;
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: string;
|
|
22
|
+
properties: {
|
|
23
|
+
provider: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
messages: {
|
|
28
|
+
type: string;
|
|
29
|
+
description: string;
|
|
30
|
+
items: {
|
|
31
|
+
type: string;
|
|
32
|
+
properties: {
|
|
33
|
+
role: {
|
|
34
|
+
type: string;
|
|
35
|
+
enum: string[];
|
|
36
|
+
};
|
|
37
|
+
content: {
|
|
38
|
+
type: string;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
required: string[];
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
model: {
|
|
45
|
+
type: string;
|
|
46
|
+
description: string;
|
|
47
|
+
};
|
|
48
|
+
maxTokens: {
|
|
49
|
+
type: string;
|
|
50
|
+
description: string;
|
|
51
|
+
};
|
|
52
|
+
temperature: {
|
|
53
|
+
type: string;
|
|
54
|
+
description: string;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
required: string[];
|
|
58
|
+
};
|
|
59
|
+
}[];
|
|
60
|
+
//# sourceMappingURL=mpp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mpp.d.ts","sourceRoot":"","sources":["../../src/tools/mpp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,wBAAsB,OAAO,CAC3B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE;IACJ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACA,OAAO,CAAC,MAAM,CAAC,CAiHjB;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDpB,CAAC"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MPP Chat Tool
|
|
3
|
+
*
|
|
4
|
+
* Per-request payments via HTTP 402 protocol.
|
|
5
|
+
* Calls MPP-compatible endpoints without payment channels.
|
|
6
|
+
*/
|
|
7
|
+
export async function mppChat(providerService, telemetryService, args) {
|
|
8
|
+
if (!args.provider) {
|
|
9
|
+
return 'Error: provider is required (provider ID or MPP endpoint URL).';
|
|
10
|
+
}
|
|
11
|
+
let endpoint;
|
|
12
|
+
let providerId;
|
|
13
|
+
if (args.provider.startsWith('http')) {
|
|
14
|
+
endpoint = args.provider;
|
|
15
|
+
providerId = args.provider;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
const p = await providerService.getProvider(args.provider);
|
|
19
|
+
if (!p)
|
|
20
|
+
return `Error: Provider "${args.provider}" not found.`;
|
|
21
|
+
endpoint = p.mppEndpoint || `${p.apiUrl}/v1/chat/completions`;
|
|
22
|
+
providerId = p.id;
|
|
23
|
+
}
|
|
24
|
+
const body = {
|
|
25
|
+
messages: args.messages,
|
|
26
|
+
};
|
|
27
|
+
if (args.model)
|
|
28
|
+
body.model = args.model;
|
|
29
|
+
if (args.maxTokens)
|
|
30
|
+
body.max_tokens = args.maxTokens;
|
|
31
|
+
if (args.temperature !== undefined)
|
|
32
|
+
body.temperature = args.temperature;
|
|
33
|
+
const start = Date.now();
|
|
34
|
+
let httpStatus = 0;
|
|
35
|
+
try {
|
|
36
|
+
const res = await fetch(endpoint, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: { 'Content-Type': 'application/json' },
|
|
39
|
+
body: JSON.stringify(body),
|
|
40
|
+
});
|
|
41
|
+
httpStatus = res.status;
|
|
42
|
+
const latency = Date.now() - start;
|
|
43
|
+
if (res.status === 402) {
|
|
44
|
+
const wwwAuth = res.headers.get('www-authenticate') || '';
|
|
45
|
+
const paymentInfo = res.headers.get('x-payment') || '';
|
|
46
|
+
telemetryService.report({
|
|
47
|
+
providerId,
|
|
48
|
+
latencyMs: latency,
|
|
49
|
+
httpStatus: 402,
|
|
50
|
+
costUsdc: 0,
|
|
51
|
+
protocol: 'mpp',
|
|
52
|
+
});
|
|
53
|
+
return [
|
|
54
|
+
'Payment required (HTTP 402). This MPP provider requires per-request payment.',
|
|
55
|
+
'',
|
|
56
|
+
wwwAuth ? `WWW-Authenticate: ${wwwAuth}` : '',
|
|
57
|
+
paymentInfo ? `X-Payment: ${paymentInfo}` : '',
|
|
58
|
+
'',
|
|
59
|
+
'To complete the payment, the agent needs an MPP payment handler (e.g. mppx).',
|
|
60
|
+
'For providers using Tempo/Stripe, configure payment credentials in your environment.',
|
|
61
|
+
].filter(Boolean).join('\n');
|
|
62
|
+
}
|
|
63
|
+
if (!res.ok) {
|
|
64
|
+
const errorData = await res.json().catch(() => ({}));
|
|
65
|
+
const errorMsg = typeof errorData.error === 'string'
|
|
66
|
+
? errorData.error
|
|
67
|
+
: errorData.error?.message ?? res.statusText;
|
|
68
|
+
telemetryService.report({
|
|
69
|
+
providerId,
|
|
70
|
+
latencyMs: latency,
|
|
71
|
+
httpStatus: res.status,
|
|
72
|
+
costUsdc: 0,
|
|
73
|
+
protocol: 'mpp',
|
|
74
|
+
});
|
|
75
|
+
return `Error from MPP provider: ${errorMsg} (HTTP ${res.status})`;
|
|
76
|
+
}
|
|
77
|
+
const data = await res.json();
|
|
78
|
+
const costHeader = res.headers.get('x-cost') || res.headers.get('x-drain-cost');
|
|
79
|
+
const cost = costHeader ? parseFloat(costHeader) / 1_000_000 : 0;
|
|
80
|
+
telemetryService.report({
|
|
81
|
+
providerId,
|
|
82
|
+
latencyMs: latency,
|
|
83
|
+
httpStatus: 200,
|
|
84
|
+
costUsdc: cost,
|
|
85
|
+
protocol: 'mpp',
|
|
86
|
+
});
|
|
87
|
+
const content = data.choices?.[0]?.message?.content
|
|
88
|
+
?? data.result
|
|
89
|
+
?? JSON.stringify(data);
|
|
90
|
+
const tokens = data.usage?.total_tokens ?? '';
|
|
91
|
+
const costStr = cost > 0 ? ` | Cost: $${cost.toFixed(6)}` : '';
|
|
92
|
+
const tokenStr = tokens ? ` | Tokens: ${tokens}` : '';
|
|
93
|
+
return `${content}\n\n---\n*MPP request completed in ${latency}ms${costStr}${tokenStr}*`;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
const latency = Date.now() - start;
|
|
97
|
+
telemetryService.report({
|
|
98
|
+
providerId,
|
|
99
|
+
latencyMs: latency,
|
|
100
|
+
httpStatus: httpStatus || 0,
|
|
101
|
+
costUsdc: 0,
|
|
102
|
+
protocol: 'mpp',
|
|
103
|
+
});
|
|
104
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
105
|
+
return `MPP request failed: ${msg}`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
export const mppTools = [
|
|
109
|
+
{
|
|
110
|
+
name: 'mpp_chat',
|
|
111
|
+
description: `Send a per-request payment call to an MPP provider (HTTP 402 protocol).
|
|
112
|
+
|
|
113
|
+
No payment channel needed. Each request is paid individually.
|
|
114
|
+
|
|
115
|
+
Use this for providers with protocol="mpp" in drain_providers output.
|
|
116
|
+
For DRAIN providers, use drain_chat instead (requires an open channel).
|
|
117
|
+
|
|
118
|
+
If the provider returns HTTP 402, payment details will be shown.
|
|
119
|
+
Some MPP providers may respond directly without 402 if pre-authorized.`,
|
|
120
|
+
inputSchema: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
provider: {
|
|
124
|
+
type: 'string',
|
|
125
|
+
description: 'Provider ID (from drain_providers) or direct MPP endpoint URL',
|
|
126
|
+
},
|
|
127
|
+
messages: {
|
|
128
|
+
type: 'array',
|
|
129
|
+
description: 'Chat messages [{role, content}] or structured request',
|
|
130
|
+
items: {
|
|
131
|
+
type: 'object',
|
|
132
|
+
properties: {
|
|
133
|
+
role: {
|
|
134
|
+
type: 'string',
|
|
135
|
+
enum: ['system', 'user', 'assistant'],
|
|
136
|
+
},
|
|
137
|
+
content: {
|
|
138
|
+
type: 'string',
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
required: ['role', 'content'],
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
model: {
|
|
145
|
+
type: 'string',
|
|
146
|
+
description: 'Model ID (optional, depends on provider)',
|
|
147
|
+
},
|
|
148
|
+
maxTokens: {
|
|
149
|
+
type: 'number',
|
|
150
|
+
description: 'Maximum tokens (optional)',
|
|
151
|
+
},
|
|
152
|
+
temperature: {
|
|
153
|
+
type: 'number',
|
|
154
|
+
description: 'Temperature 0-2 (optional)',
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
required: ['provider', 'messages'],
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
];
|
|
161
|
+
//# sourceMappingURL=mpp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mpp.js","sourceRoot":"","sources":["../../src/tools/mpp.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ export declare function listProviders(providerService: ProviderService, args: {
|
|
|
6
6
|
onlineOnly?: boolean;
|
|
7
7
|
model?: string;
|
|
8
8
|
category?: string;
|
|
9
|
+
protocol?: string;
|
|
9
10
|
}): Promise<string>;
|
|
10
11
|
export declare function getProvider(providerService: ProviderService, args: {
|
|
11
12
|
provider?: string;
|
|
@@ -29,6 +30,11 @@ export declare const providerTools: ({
|
|
|
29
30
|
type: string;
|
|
30
31
|
description: string;
|
|
31
32
|
};
|
|
33
|
+
protocol: {
|
|
34
|
+
type: string;
|
|
35
|
+
enum: string[];
|
|
36
|
+
description: string;
|
|
37
|
+
};
|
|
32
38
|
provider?: undefined;
|
|
33
39
|
};
|
|
34
40
|
required?: undefined;
|
|
@@ -46,6 +52,7 @@ export declare const providerTools: ({
|
|
|
46
52
|
onlineOnly?: undefined;
|
|
47
53
|
model?: undefined;
|
|
48
54
|
category?: undefined;
|
|
55
|
+
protocol?: undefined;
|
|
49
56
|
};
|
|
50
57
|
required: string[];
|
|
51
58
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,yBAAyB,CAAC;AAsCzE,wBAAsB,aAAa,CACjC,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACnF,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED,wBAAsB,WAAW,CAC/B,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuDzB,CAAC"}
|
package/dist/tools/providers.js
CHANGED
|
@@ -14,14 +14,19 @@ 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
|
+
const protocol = p.protocol || 'drain';
|
|
18
|
+
const quality = p.qualityScore && p.qualityScore > 0 ? ` | Q: ${p.qualityScore.toFixed(2)}` : '';
|
|
19
|
+
const tool = protocol === 'mpp' ? 'mpp_chat' : 'drain_chat';
|
|
17
20
|
return `
|
|
18
21
|
## ${p.name}
|
|
19
|
-
- **ID:** \`${p.id}\` ← use this with drain_provider_info / drain_open_channel
|
|
22
|
+
- **ID:** \`${p.id}\` ← use this with drain_provider_info / ${protocol === 'mpp' ? 'mpp_chat' : 'drain_open_channel'}
|
|
23
|
+
- **Protocol:** ${protocol.toUpperCase()}${quality}
|
|
20
24
|
- **Category:** ${p.category || 'llm'}
|
|
21
25
|
- **Status:** ${status}
|
|
22
26
|
- **Latency:** ${latency}
|
|
23
27
|
- **Docs:** ${docsUrl}
|
|
24
|
-
- **
|
|
28
|
+
- **Tool:** ${tool}
|
|
29
|
+
${p.mppEndpoint ? `- **MPP Endpoint:** ${p.mppEndpoint}` : `- **Chain:** ${p.chainId === 137 ? 'Polygon Mainnet' : 'Polygon Amoy'}`}
|
|
25
30
|
|
|
26
31
|
**Description:** ${p.description}
|
|
27
32
|
|
|
@@ -43,6 +48,9 @@ export async function listProviders(providerService, args) {
|
|
|
43
48
|
if (args.category) {
|
|
44
49
|
providers = providers.filter(p => (p.category || 'llm') === args.category);
|
|
45
50
|
}
|
|
51
|
+
if (args.protocol) {
|
|
52
|
+
providers = providers.filter(p => (p.protocol || 'drain') === args.protocol);
|
|
53
|
+
}
|
|
46
54
|
if (providers.length === 0) {
|
|
47
55
|
if (args.model) {
|
|
48
56
|
return `No providers found supporting model "${args.model}".`;
|
|
@@ -50,10 +58,13 @@ export async function listProviders(providerService, args) {
|
|
|
50
58
|
if (args.category) {
|
|
51
59
|
return `No providers found in category "${args.category}".`;
|
|
52
60
|
}
|
|
61
|
+
if (args.protocol) {
|
|
62
|
+
return `No providers found with protocol "${args.protocol}".`;
|
|
63
|
+
}
|
|
53
64
|
return 'No providers available in the directory.';
|
|
54
65
|
}
|
|
55
66
|
const formatted = providers.map(formatProvider).join('\n\n---\n\n');
|
|
56
|
-
return `#
|
|
67
|
+
return `# Providers\n\nFound ${providers.length} provider(s).\n\n**DRAIN providers:** Use \`drain_open_channel\` → \`drain_chat\` → \`drain_cooperative_close\`\n**MPP providers:** Use \`mpp_chat\` directly (no channel needed)\n\n${formatted}`;
|
|
57
68
|
}
|
|
58
69
|
export async function getProvider(providerService, args) {
|
|
59
70
|
const id = args.provider || args.providerId;
|
|
@@ -77,15 +88,17 @@ export async function getProvider(providerService, args) {
|
|
|
77
88
|
export const providerTools = [
|
|
78
89
|
{
|
|
79
90
|
name: 'drain_providers',
|
|
80
|
-
description: `List available service providers on the
|
|
91
|
+
description: `List available service providers on the Handshake58 marketplace.
|
|
92
|
+
|
|
93
|
+
Supports two payment protocols:
|
|
94
|
+
- DRAIN: Payment channels on Polygon. Use drain_open_channel → drain_chat → drain_cooperative_close.
|
|
95
|
+
- MPP: Per-request HTTP 402 payments. Use mpp_chat directly (no channel needed).
|
|
81
96
|
|
|
82
97
|
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.
|
|
83
98
|
|
|
84
99
|
For any provider that is not category "llm", read its docs (via drain_provider_info) before sending requests to learn the expected message format.
|
|
85
100
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
Returns: Providers with category, models/services, pricing, docs URL, and online status.`,
|
|
101
|
+
Returns: Providers with protocol, category, quality score, pricing, and online status.`,
|
|
89
102
|
inputSchema: {
|
|
90
103
|
type: 'object',
|
|
91
104
|
properties: {
|
|
@@ -101,6 +114,11 @@ Returns: Providers with category, models/services, pricing, docs URL, and online
|
|
|
101
114
|
type: 'string',
|
|
102
115
|
description: 'Filter by service category: llm, image, audio, code, scraping, vpn, multi-modal, other',
|
|
103
116
|
},
|
|
117
|
+
protocol: {
|
|
118
|
+
type: 'string',
|
|
119
|
+
enum: ['drain', 'mpp'],
|
|
120
|
+
description: 'Filter by payment protocol: "drain" (channels) or "mpp" (per-request)',
|
|
121
|
+
},
|
|
104
122
|
},
|
|
105
123
|
},
|
|
106
124
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,SAAS,aAAa,CAAC,CAAwB;IAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvD,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,sBAAsB,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,UAAU,CAAC,CAAC,OAAO,CAAC,iBAAiB,oBAAoB,CAAC;AACjG,CAAC;AAED,SAAS,cAAc,CAAC,CAAW;IACjC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;IAC5D,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACvE,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,MAAM,UAAU,CAAC;IACnD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/tools/providers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "drain-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"mcpName": "io.github.kimbo128/drain-mcp",
|
|
5
|
-
"description": "MCP server for
|
|
5
|
+
"description": "MCP server for the Handshake58 AI marketplace. DRAIN payment channels, MPP per-request payments, quality feedback. Agents discover providers, pay, and report.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "https://github.com/kimbo128/DRAIN.git"
|
|
@@ -22,13 +22,15 @@
|
|
|
22
22
|
"mcp",
|
|
23
23
|
"model-context-protocol",
|
|
24
24
|
"drain",
|
|
25
|
+
"mpp",
|
|
25
26
|
"ai-agent",
|
|
26
27
|
"ai-payments",
|
|
28
|
+
"ai-marketplace",
|
|
27
29
|
"micropayments",
|
|
28
30
|
"polygon",
|
|
29
31
|
"usdc",
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
+
"http-402",
|
|
33
|
+
"quality-oracle"
|
|
32
34
|
],
|
|
33
35
|
"author": "Handshake58",
|
|
34
36
|
"license": "MIT",
|