@vapi-network/mcp 0.7.0 → 0.9.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/server.d.ts CHANGED
@@ -1,15 +1,17 @@
1
- import { type SecretStore, type VapiPaymentAccount, type VapiConfig, type WalletStore } from "@vapi-network/core";
1
+ import { type SecretStore, type SwarmCapitalDeps, type VapiPaymentAccount, type VapiConfig, type WalletStore } from "@vapi-network/core";
2
2
  import { z } from "zod";
3
+ import { type Runtime } from "./agent/runtime.js";
3
4
  import { callService, type CallToolInput, type CallToolResult } from "./tools/call.js";
4
5
  import { type AccountsToolOverrides } from "./tools/accounts.js";
5
6
  import { type AuthAgentLinkOverrides } from "./tools/auth.js";
6
7
  import { type RouterCoreOverrides } from "./tools/router.js";
8
+ import { type TasksOverrides } from "./tools/tasks.js";
7
9
  import { type StatusCoreOverrides } from "./tools/status.js";
8
10
  export { callService, type CallToolInput, type CallToolResult };
9
11
  export type VapiServerOptions = {
10
12
  /** The account opened before stdio was connected. */
11
- account: VapiPaymentAccount;
12
- config: VapiConfig;
13
+ account?: VapiPaymentAccount;
14
+ config?: VapiConfig;
13
15
  fetchImpl?: typeof fetch;
14
16
  ledgerPath?: string;
15
17
  receiptsPath?: string;
@@ -28,10 +30,16 @@ export type VapiServerOptions = {
28
30
  agentLink?: AuthAgentLinkOverrides | undefined;
29
31
  /** Core Router functions overridden by deterministic tests. */
30
32
  router?: RouterCoreOverrides | undefined;
33
+ /** Task transport, chain adapter and clocks overridden by deterministic tests. */
34
+ tasks?: TasksOverrides | undefined;
31
35
  /** Status probes and clock overridden by deterministic tests. */
32
36
  status?: StatusCoreOverrides | undefined;
33
37
  /** Account-link functions, device identity and clock overridden by deterministic tests. */
34
38
  accounts?: AccountsToolOverrides | undefined;
39
+ /** Swarm capital seams overridden by deterministic tests. */
40
+ swarm?: Pick<SwarmCapitalDeps, "balanceReader" | "transfer" | "randomId" | "randomNonce"> | undefined;
41
+ /** Background runtime used by detached swarm runs. */
42
+ runtime?: Runtime | undefined;
35
43
  };
36
44
  type ToolResult = {
37
45
  isError?: boolean;
@@ -69,7 +77,7 @@ export declare class VapiMcpServer {
69
77
  connectStdio(): void;
70
78
  close(): Promise<void>;
71
79
  }
72
- export declare function createVapiServer(options: VapiServerOptions): VapiMcpServer;
80
+ export declare function createVapiServer(options?: VapiServerOptions): VapiMcpServer;
73
81
  export declare function startStdioServer(options: VapiServerOptions): Promise<VapiMcpServer>;
74
82
  export declare function loadServerConfig(): Promise<{
75
83
  discoveryUrl: string;
@@ -93,5 +101,10 @@ export declare function loadServerConfig(): Promise<{
93
101
  marketplaceDiscoveryUrl: string;
94
102
  }[] | undefined;
95
103
  allowPrivateNetwork?: boolean | undefined;
104
+ tasksEscrowDurationOverrides?: Record<string, {
105
+ workDurationSeconds?: number | undefined;
106
+ reviewWindowSeconds?: number | undefined;
107
+ }> | undefined;
108
+ tasksEscrowFactoryOverrides?: Record<string, string> | undefined;
96
109
  device?: string | undefined;
97
110
  }>;
@@ -1,6 +1,8 @@
1
1
  import { type AddAccountArgs, type SecretStore, type TransferArgs, type WalletStore } from "@vapi-network/core";
2
2
  import { z } from "zod";
3
+ import type { AccountsPort } from "../actions/context.js";
3
4
  import type { WalletSession } from "../wallet-session.js";
5
+ export { accountsSendInputSchema, accountsSendOutputSchema } from "../actions/accounts.js";
4
6
  export declare const accountsAddTool: {
5
7
  description: string;
6
8
  strictInput: boolean;
@@ -108,6 +110,7 @@ export type AccountsToolsOptions = AccountsToolOverrides & {
108
110
  env?: NodeJS.ProcessEnv | undefined;
109
111
  signal?: AbortSignal | undefined;
110
112
  };
113
+ export type CreateAccountsPortOptions = Pick<AccountsToolsOptions, "session" | "secrets" | "wallets" | "fetchImpl" | "apiBase" | "now" | "nonce">;
111
114
  type ToolResult = {
112
115
  structuredContent: Record<string, unknown>;
113
116
  content: Array<{
@@ -138,11 +141,5 @@ export declare function createAccountsTools(options: AccountsToolsOptions): {
138
141
  perDayUsd?: number;
139
142
  ceilingUsd?: number | "off";
140
143
  }): Promise<ToolResult>;
141
- send(input: {
142
- from: string;
143
- to: string;
144
- amountUsd: string | number;
145
- network?: "base" | "arc";
146
- }): Promise<ToolResult>;
147
144
  };
148
- export {};
145
+ export declare function createAccountsPort(options: CreateAccountsPortOptions): AccountsPort;
@@ -1,4 +1,4 @@
1
- import { type ListingVerification, type LookupFn, type MarketplaceHit, type CeilingSweepHook, type SpendCaps, type VapiPaymentAccount, type VapiConfig, type WalletName } from "@vapi-network/core";
1
+ import { type ListingVerification, type LookupFn, type MarketplaceHit, type RunBudget, type RunRef, type CeilingSweepHook, type SpendCaps, type VapiPaymentAccount, type VapiConfig, type WalletName } from "@vapi-network/core";
2
2
  export type CallToolInput = {
3
3
  id?: string;
4
4
  url?: string;
@@ -44,6 +44,8 @@ export declare class VapiCallError extends Error {
44
44
  export type CallToolResult = {
45
45
  status: number;
46
46
  body: unknown;
47
+ /** The final resource URL after guarded redirects, present when a payment settled. */
48
+ resourceUrl?: string;
47
49
  /**
48
50
  * How far the paid listing got through vAPI review. Absent when there was no
49
51
  * listing to disclose — a call made against an explicit URL.
@@ -78,8 +80,11 @@ export type CallServiceArgs = {
78
80
  /** The caps of that wallet. Without it, the machine-wide config caps apply. */
79
81
  spendCaps?: SpendCaps;
80
82
  now?: Date;
83
+ allowanceExpiresAt?: Date;
81
84
  nowMs?: () => number;
82
85
  timeoutMs?: number;
86
+ runBudget?: RunBudget;
87
+ run?: RunRef;
83
88
  /** Best-effort account ceiling enforcement after decisive settlement. */
84
89
  ceilingSweep?: CeilingSweepHook | false;
85
90
  };
@@ -0,0 +1,36 @@
1
+ import { type DocsReadResponse, type DocsSearchResponse } from "@vapi-network/core";
2
+ import { z } from "zod";
3
+ export declare const docsSearchTool: {
4
+ description: string;
5
+ inputSchema: {
6
+ query: z.ZodString;
7
+ };
8
+ outputSchema: z.ZodObject<{
9
+ results: z.ZodArray<z.ZodObject<{
10
+ title: z.ZodString;
11
+ url: z.ZodString;
12
+ excerpt: z.ZodString;
13
+ }, z.core.$strip>>;
14
+ }, z.core.$strip>;
15
+ };
16
+ export declare const docsReadTool: {
17
+ description: string;
18
+ inputSchema: {
19
+ url: z.ZodString;
20
+ };
21
+ outputSchema: z.ZodObject<{
22
+ url: z.ZodString;
23
+ markdown: z.ZodString;
24
+ }, z.core.$strip>;
25
+ };
26
+ export declare function createDocsTools(options: {
27
+ fetchImpl?: typeof fetch;
28
+ env?: NodeJS.ProcessEnv;
29
+ }): {
30
+ search(input: {
31
+ query: string;
32
+ }): Promise<DocsSearchResponse>;
33
+ read(input: {
34
+ url: string;
35
+ }): Promise<DocsReadResponse>;
36
+ };
@@ -35,8 +35,8 @@ export declare const vapiStatusTool: {
35
35
  link: z.ZodEnum<{
36
36
  unknown: "unknown";
37
37
  paused: "paused";
38
- active: "active";
39
38
  not_linked: "not_linked";
39
+ active: "active";
40
40
  revoked: "revoked";
41
41
  }>;
42
42
  }, z.core.$strip>>;
@@ -71,8 +71,8 @@ export declare const vapiAccountsTool: {
71
71
  link: z.ZodEnum<{
72
72
  unknown: "unknown";
73
73
  paused: "paused";
74
- active: "active";
75
74
  not_linked: "not_linked";
75
+ active: "active";
76
76
  revoked: "revoked";
77
77
  }>;
78
78
  }, z.core.$strip>>;
@@ -0,0 +1,377 @@
1
+ import { type SecretStore, type WalletStore } from "@vapi-network/core";
2
+ import { type TasksChain, type TasksClient, type TasksClientOptions } from "@vapi-network/core/tasks";
3
+ import { z } from "zod";
4
+ import type { WalletSession } from "../wallet-session.js";
5
+ export declare const tasksSearchTool: {
6
+ description: string;
7
+ inputSchema: {
8
+ open: z.ZodOptional<z.ZodBoolean>;
9
+ minUsd: z.ZodOptional<z.ZodString>;
10
+ tab: z.ZodOptional<z.ZodEnum<{
11
+ paid: "paid";
12
+ trending: "trending";
13
+ new: "new";
14
+ closing: "closing";
15
+ }>>;
16
+ limit: z.ZodOptional<z.ZodNumber>;
17
+ };
18
+ strictInput: true;
19
+ };
20
+ export declare const tasksShowTool: {
21
+ description: string;
22
+ inputSchema: {
23
+ wallet: z.ZodOptional<z.ZodString>;
24
+ id: z.ZodUUID;
25
+ };
26
+ strictInput: true;
27
+ };
28
+ export declare const tasksPostTool: {
29
+ description: string;
30
+ inputSchema: {
31
+ title: z.ZodString;
32
+ brief: z.ZodString;
33
+ amountUsd: z.ZodString;
34
+ deadline: z.ZodString;
35
+ intake: z.ZodOptional<z.ZodEnum<{
36
+ proposals: "proposals";
37
+ submissions: "submissions";
38
+ }>>;
39
+ maxAwards: z.ZodOptional<z.ZodNumber>;
40
+ webhookUrl: z.ZodOptional<z.ZodURL>;
41
+ wallet: z.ZodOptional<z.ZodString>;
42
+ };
43
+ strictInput: true;
44
+ };
45
+ export declare const tasksProposeTool: {
46
+ description: string;
47
+ inputSchema: {
48
+ priceUsd: z.ZodString;
49
+ duration: z.ZodString;
50
+ note: z.ZodString;
51
+ wallet: z.ZodOptional<z.ZodString>;
52
+ id: z.ZodUUID;
53
+ };
54
+ strictInput: true;
55
+ };
56
+ export declare const tasksSubmitTool: {
57
+ description: string;
58
+ inputSchema: {
59
+ proofUrls: z.ZodArray<z.ZodURL>;
60
+ files: z.ZodOptional<z.ZodArray<z.ZodString>>;
61
+ wallet: z.ZodOptional<z.ZodString>;
62
+ id: z.ZodUUID;
63
+ };
64
+ strictInput: true;
65
+ };
66
+ export declare const tasksAwardTool: {
67
+ description: string;
68
+ inputSchema: {
69
+ proposalId: z.ZodUUID;
70
+ wallet: z.ZodOptional<z.ZodString>;
71
+ id: z.ZodUUID;
72
+ };
73
+ strictInput: true;
74
+ };
75
+ export declare const tasksSignTool: {
76
+ description: string;
77
+ inputSchema: {
78
+ counterparty: z.ZodOptional<z.ZodString>;
79
+ wallet: z.ZodOptional<z.ZodString>;
80
+ id: z.ZodUUID;
81
+ };
82
+ strictInput: true;
83
+ };
84
+ export declare const tasksFundTool: {
85
+ description: string;
86
+ inputSchema: {
87
+ counterparty: z.ZodOptional<z.ZodString>;
88
+ wallet: z.ZodOptional<z.ZodString>;
89
+ id: z.ZodUUID;
90
+ };
91
+ strictInput: true;
92
+ };
93
+ export declare const tasksDeliverTool: {
94
+ description: string;
95
+ inputSchema: {
96
+ files: z.ZodArray<z.ZodString>;
97
+ note: z.ZodString;
98
+ counterparty: z.ZodOptional<z.ZodString>;
99
+ wallet: z.ZodOptional<z.ZodString>;
100
+ id: z.ZodUUID;
101
+ };
102
+ strictInput: true;
103
+ };
104
+ export declare const tasksReleaseTool: {
105
+ description: string;
106
+ inputSchema: {
107
+ counterparty: z.ZodOptional<z.ZodString>;
108
+ wallet: z.ZodOptional<z.ZodString>;
109
+ id: z.ZodUUID;
110
+ };
111
+ strictInput: true;
112
+ };
113
+ export declare const tasksRefundTool: {
114
+ description: string;
115
+ inputSchema: {
116
+ counterparty: z.ZodOptional<z.ZodString>;
117
+ wallet: z.ZodOptional<z.ZodString>;
118
+ id: z.ZodUUID;
119
+ };
120
+ strictInput: true;
121
+ };
122
+ export declare const tasksDisputeTool: {
123
+ description: string;
124
+ inputSchema: {
125
+ evidenceHash: z.ZodString;
126
+ counterparty: z.ZodOptional<z.ZodString>;
127
+ wallet: z.ZodOptional<z.ZodString>;
128
+ id: z.ZodUUID;
129
+ };
130
+ strictInput: true;
131
+ };
132
+ export declare const tasksCounterEvidenceTool: {
133
+ description: string;
134
+ inputSchema: {
135
+ evidenceHash: z.ZodString;
136
+ counterparty: z.ZodOptional<z.ZodString>;
137
+ wallet: z.ZodOptional<z.ZodString>;
138
+ id: z.ZodUUID;
139
+ };
140
+ strictInput: true;
141
+ };
142
+ export declare const tasksResolveUnmatchedTool: {
143
+ description: string;
144
+ inputSchema: {
145
+ counterparty: z.ZodOptional<z.ZodString>;
146
+ wallet: z.ZodOptional<z.ZodString>;
147
+ id: z.ZodUUID;
148
+ };
149
+ strictInput: true;
150
+ };
151
+ export declare const tasksMessageTool: {
152
+ description: string;
153
+ inputSchema: {
154
+ text: z.ZodString;
155
+ wallet: z.ZodOptional<z.ZodString>;
156
+ id: z.ZodUUID;
157
+ };
158
+ strictInput: true;
159
+ };
160
+ export declare const tasksThreadTool: {
161
+ description: string;
162
+ inputSchema: {
163
+ after: z.ZodOptional<z.ZodNumber>;
164
+ wallet: z.ZodOptional<z.ZodString>;
165
+ id: z.ZodUUID;
166
+ };
167
+ strictInput: true;
168
+ };
169
+ export declare const tasksWatchTool: {
170
+ description: string;
171
+ inputSchema: {
172
+ after: z.ZodDefault<z.ZodNumber>;
173
+ until: z.ZodOptional<z.ZodEnum<{
174
+ paid: "paid";
175
+ cancelled: "cancelled";
176
+ open: "open";
177
+ awarded: "awarded";
178
+ funded: "funded";
179
+ delivered: "delivered";
180
+ released: "released";
181
+ refunded: "refunded";
182
+ disputed: "disputed";
183
+ expired: "expired";
184
+ closed: "closed";
185
+ completed: "completed";
186
+ }>>;
187
+ waitSeconds: z.ZodDefault<z.ZodNumber>;
188
+ wallet: z.ZodOptional<z.ZodString>;
189
+ id: z.ZodUUID;
190
+ };
191
+ strictInput: true;
192
+ };
193
+ export declare const tasksStatusTool: {
194
+ description: string;
195
+ inputSchema: {
196
+ id: z.ZodUUID;
197
+ };
198
+ strictInput: true;
199
+ };
200
+ export type TasksOverrides = {
201
+ client?: TasksClient | ((options: TasksClientOptions) => TasksClient);
202
+ chain?: TasksChain;
203
+ randomUUID?: () => string;
204
+ now?: () => Date;
205
+ sleep?: (ms: number) => Promise<void>;
206
+ };
207
+ type TasksToolsOptions = TasksOverrides & {
208
+ session: WalletSession;
209
+ secrets: SecretStore;
210
+ wallets?: WalletStore | undefined;
211
+ fetchImpl: typeof fetch;
212
+ apiBase: string;
213
+ ledgerPath?: string | undefined;
214
+ };
215
+ type Input<T extends {
216
+ inputSchema: z.ZodRawShape;
217
+ }> = z.infer<z.ZodObject<T["inputSchema"]>>;
218
+ export declare function createTasksTools(options: TasksToolsOptions): {
219
+ search(input: Input<typeof tasksSearchTool>): Promise<{
220
+ structuredContent: {};
221
+ content: {
222
+ type: "text";
223
+ text: string;
224
+ }[];
225
+ isError?: true | undefined;
226
+ }>;
227
+ show(input: Input<typeof tasksShowTool>): Promise<{
228
+ structuredContent: {};
229
+ content: {
230
+ type: "text";
231
+ text: string;
232
+ }[];
233
+ isError?: true | undefined;
234
+ }>;
235
+ post(input: Input<typeof tasksPostTool>): Promise<{
236
+ structuredContent: {};
237
+ content: {
238
+ type: "text";
239
+ text: string;
240
+ }[];
241
+ isError?: true | undefined;
242
+ }>;
243
+ propose(input: Input<typeof tasksProposeTool>): Promise<{
244
+ structuredContent: {};
245
+ content: {
246
+ type: "text";
247
+ text: string;
248
+ }[];
249
+ isError?: true | undefined;
250
+ }>;
251
+ submit(input: Input<typeof tasksSubmitTool>): Promise<{
252
+ structuredContent: {};
253
+ content: {
254
+ type: "text";
255
+ text: string;
256
+ }[];
257
+ isError?: true | undefined;
258
+ }>;
259
+ award(input: Input<typeof tasksAwardTool>): Promise<{
260
+ structuredContent: {};
261
+ content: {
262
+ type: "text";
263
+ text: string;
264
+ }[];
265
+ isError?: true | undefined;
266
+ }>;
267
+ sign(input: Input<typeof tasksSignTool>): Promise<{
268
+ structuredContent: {};
269
+ content: {
270
+ type: "text";
271
+ text: string;
272
+ }[];
273
+ isError?: true | undefined;
274
+ } | {
275
+ isError: true;
276
+ content: {
277
+ type: "text";
278
+ text: string;
279
+ }[];
280
+ }>;
281
+ fund(input: Input<typeof tasksFundTool>): Promise<{
282
+ structuredContent: {};
283
+ content: {
284
+ type: "text";
285
+ text: string;
286
+ }[];
287
+ isError?: true | undefined;
288
+ }>;
289
+ deliver(input: Input<typeof tasksDeliverTool>): Promise<{
290
+ structuredContent: {};
291
+ content: {
292
+ type: "text";
293
+ text: string;
294
+ }[];
295
+ isError?: true | undefined;
296
+ }>;
297
+ release(input: Input<typeof tasksReleaseTool>): Promise<{
298
+ structuredContent: {};
299
+ content: {
300
+ type: "text";
301
+ text: string;
302
+ }[];
303
+ isError?: true | undefined;
304
+ }>;
305
+ refund(input: Input<typeof tasksRefundTool>): Promise<{
306
+ structuredContent: {};
307
+ content: {
308
+ type: "text";
309
+ text: string;
310
+ }[];
311
+ isError?: true | undefined;
312
+ }>;
313
+ dispute(input: Input<typeof tasksDisputeTool>): Promise<{
314
+ structuredContent: {};
315
+ content: {
316
+ type: "text";
317
+ text: string;
318
+ }[];
319
+ isError?: true | undefined;
320
+ }>;
321
+ counterEvidence(input: Input<typeof tasksCounterEvidenceTool>): Promise<{
322
+ structuredContent: {};
323
+ content: {
324
+ type: "text";
325
+ text: string;
326
+ }[];
327
+ isError?: true | undefined;
328
+ }>;
329
+ resolveUnmatched(input: Input<typeof tasksResolveUnmatchedTool>): Promise<{
330
+ structuredContent: {};
331
+ content: {
332
+ type: "text";
333
+ text: string;
334
+ }[];
335
+ isError?: true | undefined;
336
+ }>;
337
+ message(input: Input<typeof tasksMessageTool>): Promise<{
338
+ structuredContent: {};
339
+ content: {
340
+ type: "text";
341
+ text: string;
342
+ }[];
343
+ isError?: true | undefined;
344
+ }>;
345
+ thread(input: Input<typeof tasksThreadTool>): Promise<{
346
+ structuredContent: {};
347
+ content: {
348
+ type: "text";
349
+ text: string;
350
+ }[];
351
+ isError?: true | undefined;
352
+ }>;
353
+ watch(input: Input<typeof tasksWatchTool>): Promise<{
354
+ structuredContent: {};
355
+ content: {
356
+ type: "text";
357
+ text: string;
358
+ }[];
359
+ isError?: true | undefined;
360
+ }>;
361
+ status(input: Input<typeof tasksStatusTool>): Promise<{
362
+ structuredContent: {};
363
+ content: {
364
+ type: "text";
365
+ text: string;
366
+ }[];
367
+ isError?: true | undefined;
368
+ }>;
369
+ };
370
+ export declare function tasksErrorResult(error: unknown, extra?: Record<string, unknown>): {
371
+ isError: true;
372
+ content: {
373
+ type: "text";
374
+ text: string;
375
+ }[];
376
+ };
377
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vapi-network/mcp",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "description": "Local, non-custodial MCP server for discovering and paying x402 APIs",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {