vantage-peers-mcp 1.0.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/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # VantagePeers MCP Server
2
+
3
+ MCP server that exposes VantagePeers Convex functions as Claude Code tools via stdio transport.
4
+
5
+ ## Prerequisites
6
+
7
+ - [Bun](https://bun.sh) installed
8
+ - Convex deployment running (`CONVEX_URL` set)
9
+ - OpenAI API key set as Convex env var (`AI_GATEWAY_API_KEY`)
10
+
11
+ ## Setup
12
+
13
+ Add to `~/.claude/settings.json` (user-scoped) or `.claude/settings.json` (project-scoped):
14
+
15
+ ```json
16
+ {
17
+ "mcpServers": {
18
+ "vantage-memory": {
19
+ "command": "bun",
20
+ "args": ["/path/to/vantage-memory/mcp-server/server.ts"],
21
+ "env": {
22
+ "CONVEX_URL": "https://your-deployment.convex.cloud"
23
+ }
24
+ }
25
+ }
26
+ }
27
+ ```
28
+
29
+ Or omit `CONVEX_URL` and let the server read it from `.env.local` in the project root.
30
+
31
+ ## Verify
32
+
33
+ ```bash
34
+ bun run mcp-server/server.ts
35
+ ```
36
+
37
+ The server waits for MCP JSON-RPC messages on stdin. No output = healthy.
38
+
39
+ ## 27 Tools
40
+
41
+ See the main [README](../README.md) for the complete tool reference.
@@ -0,0 +1,499 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * Generated `api` utility.
4
+ *
5
+ * THIS CODE IS AUTOMATICALLY GENERATED.
6
+ *
7
+ * To regenerate, run `npx convex dev`.
8
+ * @module
9
+ */
10
+
11
+ import type * as briefingNotes from "../briefingNotes.js";
12
+ import type * as businessUnits from "../businessUnits.js";
13
+ import type * as components_ from "../components.js";
14
+ import type * as crons from "../crons.js";
15
+ import type * as dashboard from "../dashboard.js";
16
+ import type * as diary from "../diary.js";
17
+ import type * as episodes from "../episodes.js";
18
+ import type * as errorMonitor from "../errorMonitor.js";
19
+ import type * as errorMonitorActions from "../errorMonitorActions.js";
20
+ import type * as fixPatterns from "../fixPatterns.js";
21
+ import type * as githubComments from "../githubComments.js";
22
+ import type * as githubRepoMapping from "../githubRepoMapping.js";
23
+ import type * as http from "../http.js";
24
+ import type * as issues from "../issues.js";
25
+ import type * as mandates from "../mandates.js";
26
+ import type * as memories from "../memories.js";
27
+ import type * as messages from "../messages.js";
28
+ import type * as migrations from "../migrations.js";
29
+ import type * as missionTemplates from "../missionTemplates.js";
30
+ import type * as missions from "../missions.js";
31
+ import type * as profiles from "../profiles.js";
32
+ import type * as ragSync from "../ragSync.js";
33
+ import type * as recurringTasks from "../recurringTasks.js";
34
+ import type * as search from "../search.js";
35
+ import type * as tasks from "../tasks.js";
36
+
37
+ import type {
38
+ ApiFromModules,
39
+ FilterApi,
40
+ FunctionReference,
41
+ } from "convex/server";
42
+
43
+ declare const fullApi: ApiFromModules<{
44
+ briefingNotes: typeof briefingNotes;
45
+ businessUnits: typeof businessUnits;
46
+ components: typeof components_;
47
+ crons: typeof crons;
48
+ dashboard: typeof dashboard;
49
+ diary: typeof diary;
50
+ episodes: typeof episodes;
51
+ errorMonitor: typeof errorMonitor;
52
+ errorMonitorActions: typeof errorMonitorActions;
53
+ fixPatterns: typeof fixPatterns;
54
+ githubComments: typeof githubComments;
55
+ githubRepoMapping: typeof githubRepoMapping;
56
+ http: typeof http;
57
+ issues: typeof issues;
58
+ mandates: typeof mandates;
59
+ memories: typeof memories;
60
+ messages: typeof messages;
61
+ migrations: typeof migrations;
62
+ missionTemplates: typeof missionTemplates;
63
+ missions: typeof missions;
64
+ profiles: typeof profiles;
65
+ ragSync: typeof ragSync;
66
+ recurringTasks: typeof recurringTasks;
67
+ search: typeof search;
68
+ tasks: typeof tasks;
69
+ }>;
70
+
71
+ /**
72
+ * A utility for referencing Convex functions in your app's public API.
73
+ *
74
+ * Usage:
75
+ * ```js
76
+ * const myFunctionReference = api.myModule.myFunction;
77
+ * ```
78
+ */
79
+ export declare const api: FilterApi<
80
+ typeof fullApi,
81
+ FunctionReference<any, "public">
82
+ >;
83
+
84
+ /**
85
+ * A utility for referencing Convex functions in your app's internal API.
86
+ *
87
+ * Usage:
88
+ * ```js
89
+ * const myFunctionReference = internal.myModule.myFunction;
90
+ * ```
91
+ */
92
+ export declare const internal: FilterApi<
93
+ typeof fullApi,
94
+ FunctionReference<any, "internal">
95
+ >;
96
+
97
+ export declare const components: {
98
+ rag: {
99
+ chunks: {
100
+ insert: FunctionReference<
101
+ "mutation",
102
+ "internal",
103
+ {
104
+ chunks: Array<{
105
+ content: { metadata?: Record<string, any>; text: string };
106
+ embedding: Array<number>;
107
+ searchableText?: string;
108
+ }>;
109
+ entryId: string;
110
+ startOrder: number;
111
+ },
112
+ { status: "pending" | "ready" | "replaced" }
113
+ >;
114
+ list: FunctionReference<
115
+ "query",
116
+ "internal",
117
+ {
118
+ entryId: string;
119
+ order: "desc" | "asc";
120
+ paginationOpts: {
121
+ cursor: string | null;
122
+ endCursor?: string | null;
123
+ id?: number;
124
+ maximumBytesRead?: number;
125
+ maximumRowsRead?: number;
126
+ numItems: number;
127
+ };
128
+ },
129
+ {
130
+ continueCursor: string;
131
+ isDone: boolean;
132
+ page: Array<{
133
+ metadata?: Record<string, any>;
134
+ order: number;
135
+ state: "pending" | "ready" | "replaced";
136
+ text: string;
137
+ }>;
138
+ pageStatus?: "SplitRecommended" | "SplitRequired" | null;
139
+ splitCursor?: string | null;
140
+ }
141
+ >;
142
+ replaceChunksPage: FunctionReference<
143
+ "mutation",
144
+ "internal",
145
+ { entryId: string; startOrder: number },
146
+ { nextStartOrder: number; status: "pending" | "ready" | "replaced" }
147
+ >;
148
+ };
149
+ entries: {
150
+ add: FunctionReference<
151
+ "mutation",
152
+ "internal",
153
+ {
154
+ allChunks?: Array<{
155
+ content: { metadata?: Record<string, any>; text: string };
156
+ embedding: Array<number>;
157
+ searchableText?: string;
158
+ }>;
159
+ entry: {
160
+ contentHash?: string;
161
+ filterValues: Array<{ name: string; value: any }>;
162
+ importance: number;
163
+ key?: string;
164
+ metadata?: Record<string, any>;
165
+ namespaceId: string;
166
+ title?: string;
167
+ };
168
+ onComplete?: string;
169
+ },
170
+ {
171
+ created: boolean;
172
+ entryId: string;
173
+ status: "pending" | "ready" | "replaced";
174
+ }
175
+ >;
176
+ addAsync: FunctionReference<
177
+ "mutation",
178
+ "internal",
179
+ {
180
+ chunker: string;
181
+ entry: {
182
+ contentHash?: string;
183
+ filterValues: Array<{ name: string; value: any }>;
184
+ importance: number;
185
+ key?: string;
186
+ metadata?: Record<string, any>;
187
+ namespaceId: string;
188
+ title?: string;
189
+ };
190
+ onComplete?: string;
191
+ },
192
+ { created: boolean; entryId: string; status: "pending" | "ready" }
193
+ >;
194
+ deleteAsync: FunctionReference<
195
+ "mutation",
196
+ "internal",
197
+ { entryId: string; startOrder: number },
198
+ null
199
+ >;
200
+ deleteByKeyAsync: FunctionReference<
201
+ "mutation",
202
+ "internal",
203
+ { beforeVersion?: number; key: string; namespaceId: string },
204
+ null
205
+ >;
206
+ deleteByKeySync: FunctionReference<
207
+ "action",
208
+ "internal",
209
+ { key: string; namespaceId: string },
210
+ null
211
+ >;
212
+ deleteSync: FunctionReference<
213
+ "action",
214
+ "internal",
215
+ { entryId: string },
216
+ null
217
+ >;
218
+ findByContentHash: FunctionReference<
219
+ "query",
220
+ "internal",
221
+ {
222
+ contentHash: string;
223
+ dimension: number;
224
+ filterNames: Array<string>;
225
+ key: string;
226
+ modelId: string;
227
+ namespace: string;
228
+ },
229
+ {
230
+ contentHash?: string;
231
+ entryId: string;
232
+ filterValues: Array<{ name: string; value: any }>;
233
+ importance: number;
234
+ key?: string;
235
+ metadata?: Record<string, any>;
236
+ replacedAt?: number;
237
+ status: "pending" | "ready" | "replaced";
238
+ title?: string;
239
+ } | null
240
+ >;
241
+ get: FunctionReference<
242
+ "query",
243
+ "internal",
244
+ { entryId: string },
245
+ {
246
+ contentHash?: string;
247
+ entryId: string;
248
+ filterValues: Array<{ name: string; value: any }>;
249
+ importance: number;
250
+ key?: string;
251
+ metadata?: Record<string, any>;
252
+ replacedAt?: number;
253
+ status: "pending" | "ready" | "replaced";
254
+ title?: string;
255
+ } | null
256
+ >;
257
+ list: FunctionReference<
258
+ "query",
259
+ "internal",
260
+ {
261
+ namespaceId?: string;
262
+ order?: "desc" | "asc";
263
+ paginationOpts: {
264
+ cursor: string | null;
265
+ endCursor?: string | null;
266
+ id?: number;
267
+ maximumBytesRead?: number;
268
+ maximumRowsRead?: number;
269
+ numItems: number;
270
+ };
271
+ status: "pending" | "ready" | "replaced";
272
+ },
273
+ {
274
+ continueCursor: string;
275
+ isDone: boolean;
276
+ page: Array<{
277
+ contentHash?: string;
278
+ entryId: string;
279
+ filterValues: Array<{ name: string; value: any }>;
280
+ importance: number;
281
+ key?: string;
282
+ metadata?: Record<string, any>;
283
+ replacedAt?: number;
284
+ status: "pending" | "ready" | "replaced";
285
+ title?: string;
286
+ }>;
287
+ pageStatus?: "SplitRecommended" | "SplitRequired" | null;
288
+ splitCursor?: string | null;
289
+ }
290
+ >;
291
+ promoteToReady: FunctionReference<
292
+ "mutation",
293
+ "internal",
294
+ { entryId: string },
295
+ {
296
+ replacedEntry: {
297
+ contentHash?: string;
298
+ entryId: string;
299
+ filterValues: Array<{ name: string; value: any }>;
300
+ importance: number;
301
+ key?: string;
302
+ metadata?: Record<string, any>;
303
+ replacedAt?: number;
304
+ status: "pending" | "ready" | "replaced";
305
+ title?: string;
306
+ } | null;
307
+ }
308
+ >;
309
+ };
310
+ namespaces: {
311
+ deleteNamespace: FunctionReference<
312
+ "mutation",
313
+ "internal",
314
+ { namespaceId: string },
315
+ {
316
+ deletedNamespace: null | {
317
+ createdAt: number;
318
+ dimension: number;
319
+ filterNames: Array<string>;
320
+ modelId: string;
321
+ namespace: string;
322
+ namespaceId: string;
323
+ status: "pending" | "ready" | "replaced";
324
+ version: number;
325
+ };
326
+ }
327
+ >;
328
+ deleteNamespaceSync: FunctionReference<
329
+ "action",
330
+ "internal",
331
+ { namespaceId: string },
332
+ null
333
+ >;
334
+ get: FunctionReference<
335
+ "query",
336
+ "internal",
337
+ {
338
+ dimension: number;
339
+ filterNames: Array<string>;
340
+ modelId: string;
341
+ namespace: string;
342
+ },
343
+ null | {
344
+ createdAt: number;
345
+ dimension: number;
346
+ filterNames: Array<string>;
347
+ modelId: string;
348
+ namespace: string;
349
+ namespaceId: string;
350
+ status: "pending" | "ready" | "replaced";
351
+ version: number;
352
+ }
353
+ >;
354
+ getOrCreate: FunctionReference<
355
+ "mutation",
356
+ "internal",
357
+ {
358
+ dimension: number;
359
+ filterNames: Array<string>;
360
+ modelId: string;
361
+ namespace: string;
362
+ onComplete?: string;
363
+ status: "pending" | "ready";
364
+ },
365
+ { namespaceId: string; status: "pending" | "ready" }
366
+ >;
367
+ list: FunctionReference<
368
+ "query",
369
+ "internal",
370
+ {
371
+ paginationOpts: {
372
+ cursor: string | null;
373
+ endCursor?: string | null;
374
+ id?: number;
375
+ maximumBytesRead?: number;
376
+ maximumRowsRead?: number;
377
+ numItems: number;
378
+ };
379
+ status: "pending" | "ready" | "replaced";
380
+ },
381
+ {
382
+ continueCursor: string;
383
+ isDone: boolean;
384
+ page: Array<{
385
+ createdAt: number;
386
+ dimension: number;
387
+ filterNames: Array<string>;
388
+ modelId: string;
389
+ namespace: string;
390
+ namespaceId: string;
391
+ status: "pending" | "ready" | "replaced";
392
+ version: number;
393
+ }>;
394
+ pageStatus?: "SplitRecommended" | "SplitRequired" | null;
395
+ splitCursor?: string | null;
396
+ }
397
+ >;
398
+ listNamespaceVersions: FunctionReference<
399
+ "query",
400
+ "internal",
401
+ {
402
+ namespace: string;
403
+ paginationOpts: {
404
+ cursor: string | null;
405
+ endCursor?: string | null;
406
+ id?: number;
407
+ maximumBytesRead?: number;
408
+ maximumRowsRead?: number;
409
+ numItems: number;
410
+ };
411
+ },
412
+ {
413
+ continueCursor: string;
414
+ isDone: boolean;
415
+ page: Array<{
416
+ createdAt: number;
417
+ dimension: number;
418
+ filterNames: Array<string>;
419
+ modelId: string;
420
+ namespace: string;
421
+ namespaceId: string;
422
+ status: "pending" | "ready" | "replaced";
423
+ version: number;
424
+ }>;
425
+ pageStatus?: "SplitRecommended" | "SplitRequired" | null;
426
+ splitCursor?: string | null;
427
+ }
428
+ >;
429
+ lookup: FunctionReference<
430
+ "query",
431
+ "internal",
432
+ {
433
+ dimension: number;
434
+ filterNames: Array<string>;
435
+ modelId: string;
436
+ namespace: string;
437
+ },
438
+ null | string
439
+ >;
440
+ promoteToReady: FunctionReference<
441
+ "mutation",
442
+ "internal",
443
+ { namespaceId: string },
444
+ {
445
+ replacedNamespace: null | {
446
+ createdAt: number;
447
+ dimension: number;
448
+ filterNames: Array<string>;
449
+ modelId: string;
450
+ namespace: string;
451
+ namespaceId: string;
452
+ status: "pending" | "ready" | "replaced";
453
+ version: number;
454
+ };
455
+ }
456
+ >;
457
+ };
458
+ search: {
459
+ search: FunctionReference<
460
+ "action",
461
+ "internal",
462
+ {
463
+ chunkContext?: { after: number; before: number };
464
+ dimension?: number;
465
+ embedding?: Array<number>;
466
+ filters: Array<{ name: string; value: any }>;
467
+ limit: number;
468
+ modelId: string;
469
+ namespace: string;
470
+ searchType?: "vector" | "text" | "hybrid";
471
+ textQuery?: string;
472
+ textWeight?: number;
473
+ vectorScoreThreshold?: number;
474
+ vectorWeight?: number;
475
+ },
476
+ {
477
+ entries: Array<{
478
+ contentHash?: string;
479
+ entryId: string;
480
+ filterValues: Array<{ name: string; value: any }>;
481
+ importance: number;
482
+ key?: string;
483
+ metadata?: Record<string, any>;
484
+ replacedAt?: number;
485
+ status: "pending" | "ready" | "replaced";
486
+ title?: string;
487
+ }>;
488
+ results: Array<{
489
+ content: Array<{ metadata?: Record<string, any>; text: string }>;
490
+ entryId: string;
491
+ order: number;
492
+ score: number;
493
+ startOrder: number;
494
+ }>;
495
+ }
496
+ >;
497
+ };
498
+ };
499
+ };
@@ -0,0 +1,23 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * Generated `api` utility.
4
+ *
5
+ * THIS CODE IS AUTOMATICALLY GENERATED.
6
+ *
7
+ * To regenerate, run `npx convex dev`.
8
+ * @module
9
+ */
10
+
11
+ import { anyApi, componentsGeneric } from "convex/server";
12
+
13
+ /**
14
+ * A utility for referencing Convex functions in your app's API.
15
+ *
16
+ * Usage:
17
+ * ```js
18
+ * const myFunctionReference = api.myModule.myFunction;
19
+ * ```
20
+ */
21
+ export const api = anyApi;
22
+ export const internal = anyApi;
23
+ export const components = componentsGeneric();
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * VantagePeers MCP Server
4
+ * Exposes Convex memory functions as Claude Code tools via stdio transport.
5
+ *
6
+ * Tools:
7
+ * store_memory — create a typed memory entry
8
+ * recall — semantic vector search over memories
9
+ * store_episode — create an episodic memory with structured fields
10
+ * get_profile — fetch an orchestrator profile
11
+ * update_profile — upsert an orchestrator profile
12
+ * list_memories — list memories by namespace with optional type filter
13
+ */
14
+ export {};