@opvs-ai/mcp 2.10.0 → 2.11.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 CHANGED
@@ -1,6 +1,9 @@
1
1
  # @opvs-ai/mcp
2
2
 
3
- OPVS MCP server for the **on-demand model** — 16 tools that give any MCP host (Claude Desktop, Cursor, Antigravity, Windsurf, Claude Code) the same surface OPVS-hosted agents see: 10 always-on marketplace tools, `sandbox_chat` (a vendor test mode), and 5 **fleet** tools for machines and slots. Everything else is reached through `tool_call` indirection so the package fits under the ~100-tool cap every current MCP client enforces.
3
+ OPVS MCP server for the **on-demand model** — native marketplace, board, fleet,
4
+ typed-memory, and code-index tools for any MCP host (Claude Desktop, Cursor,
5
+ Antigravity, Windsurf, Claude Code). Marketplace skills remain reachable through
6
+ `tool_call` indirection, keeping the package under the tool cap enforced by MCP clients.
4
7
 
5
8
  | Tool | Wraps | Purpose |
6
9
  |------|-------|---------|
@@ -15,6 +18,35 @@ OPVS MCP server for the **on-demand model** — 16 tools that give any MCP host
15
18
  | `whoami` | `/auth/me` | Session probe — brand, agent, workspace |
16
19
  | `board_as_markdown` | `/board/boards/{id}/export?format=md` | A whole AgentBoard as a Markdown plan in one call (`detail` summary/standard/full, `columns` filter). A board over the server's 1 MiB export ceiling is **refused, not truncated** — the refusal carries `actual_bytes`/`limit_bytes`/`retry_with` as fields. It does **not** silently retry at a lower detail: the tool promises these exact bytes, so substituting a different document is the caller's decision |
17
20
 
21
+ ### Code index — read-only
22
+
23
+ Every code tool requires an AgentBoard `project_id`. The PAT pins the brand;
24
+ there is no `brand_id` input. If the index is unavailable, the tools explicitly
25
+ tell the caller to continue without it and do not retry.
26
+
27
+ | Tool | Route | Use |
28
+ |------|-------|-----|
29
+ | `code_context` | `GET /code/{project_id}/context` | Pre-write symbol and concept search |
30
+ | `code_summary` | `GET /code/{project_id}/summary` | Languages, entry points, tests, and counts |
31
+ | `code_tree` | `GET /code/{project_id}/tree` | Directory structure and freshness |
32
+ | `code_files` | `GET /code/{project_id}/files` | Files beneath a directory, including path paging |
33
+ | `code_symbols` | `GET /code/{project_id}/symbols` | Declarations in one file |
34
+ | `code_resolve` | `POST /code/{project_id}/nodes/resolve` | Stable anchors to current nodes |
35
+ | `code_changes` | `GET /code/{project_id}/nodes/changes` | Stable-node history in ascending or descending order |
36
+ | `code_graph` | `GET /code/{project_id}/graph` | One node's IMPORTS neighbourhood (Python and TS/JS only) |
37
+ | `code_graph_folders` | `GET /code/{project_id}/graph/folders` | Folder IMPORTS, hubs, and mutual pairs (Python and TS/JS only) |
38
+
39
+ ### Typed memory — read-only
40
+
41
+ | Tool | Route | Use |
42
+ |------|-------|-----|
43
+ | `memory_search` | `GET /memory/entries/search` | Search typed memories |
44
+ | `memory_context` | `GET /memory/entries/search` | Bounded repository-aware context |
45
+ | `memory_request_pin` | `GET /memory/entries/{id}` | Verify and prepare a human pin request |
46
+ | `memory_near` | `POST /memory/entries:near` | Lessons on code and its nearby graph |
47
+ | `memory_similar` | `POST /memory/entries:similar` | Near-duplicate check before writing a lesson |
48
+ | `memory_anchors` | `POST /memory/anchors:lookup` | Lessons attached to known stable node ids |
49
+
18
50
  ### Fleet — machines and slots
19
51
 
20
52
  The environment layer had **no agent-reachable surface at all** until these landed, so
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "stamp_version": 1,
3
3
  "package": "@opvs-ai/mcp",
4
- "version": "2.10.0",
5
- "source_digest": "b67e93f0d74035a1b1bf423e033385474691de3e7b75878f7284281a0cc71b91",
6
- "source_files": 9,
7
- "built_at": "2026-10-04T07:29:28.584Z",
4
+ "version": "2.11.0",
5
+ "source_digest": "53fde4d1149f048d0d91d84a40211a268e6bcf6c765598663927810f9b313478",
6
+ "source_files": 10,
7
+ "built_at": "2026-10-11T16:55:53.573Z",
8
8
  "node": "v22.23.3"
9
9
  }
package/dist/code.d.ts ADDED
@@ -0,0 +1,466 @@
1
+ import { type ToolResult } from "./http.js";
2
+ type Args = Record<string, unknown> & {
3
+ project_id?: string;
4
+ };
5
+ export declare const CODE_TOOLS: ({
6
+ name: string;
7
+ description: string;
8
+ inputSchema: {
9
+ type: string;
10
+ properties: {
11
+ project_id: {
12
+ type: string;
13
+ description: string;
14
+ };
15
+ query: {
16
+ type: string;
17
+ minLength: number;
18
+ maxLength: number;
19
+ description: string;
20
+ };
21
+ kind: {
22
+ type: string;
23
+ maxLength: number;
24
+ description: string;
25
+ };
26
+ branch: {
27
+ type: string;
28
+ description: string;
29
+ };
30
+ limit: {
31
+ type: string;
32
+ minimum: number;
33
+ description: string;
34
+ };
35
+ format: {
36
+ type: string;
37
+ enum: string[];
38
+ description: string;
39
+ };
40
+ depth?: undefined;
41
+ directory?: undefined;
42
+ direct?: undefined;
43
+ order?: undefined;
44
+ after?: undefined;
45
+ file_path?: undefined;
46
+ anchors?: undefined;
47
+ before?: undefined;
48
+ node_id?: undefined;
49
+ path_prefix?: undefined;
50
+ direction?: undefined;
51
+ dir?: undefined;
52
+ };
53
+ required: string[];
54
+ additionalProperties: boolean;
55
+ };
56
+ } | {
57
+ name: string;
58
+ description: string;
59
+ inputSchema: {
60
+ type: string;
61
+ properties: {
62
+ project_id: {
63
+ type: string;
64
+ description: string;
65
+ };
66
+ branch: {
67
+ type: string;
68
+ description: string;
69
+ };
70
+ format: {
71
+ type: string;
72
+ enum: string[];
73
+ description: string;
74
+ };
75
+ query?: undefined;
76
+ kind?: undefined;
77
+ limit?: undefined;
78
+ depth?: undefined;
79
+ directory?: undefined;
80
+ direct?: undefined;
81
+ order?: undefined;
82
+ after?: undefined;
83
+ file_path?: undefined;
84
+ anchors?: undefined;
85
+ before?: undefined;
86
+ node_id?: undefined;
87
+ path_prefix?: undefined;
88
+ direction?: undefined;
89
+ dir?: undefined;
90
+ };
91
+ required: string[];
92
+ additionalProperties: boolean;
93
+ };
94
+ } | {
95
+ name: string;
96
+ description: string;
97
+ inputSchema: {
98
+ type: string;
99
+ properties: {
100
+ project_id: {
101
+ type: string;
102
+ description: string;
103
+ };
104
+ branch: {
105
+ type: string;
106
+ description: string;
107
+ };
108
+ depth: {
109
+ type: string;
110
+ minimum: number;
111
+ maximum: number;
112
+ description: string;
113
+ };
114
+ format: {
115
+ type: string;
116
+ enum: string[];
117
+ description: string;
118
+ };
119
+ query?: undefined;
120
+ kind?: undefined;
121
+ limit?: undefined;
122
+ directory?: undefined;
123
+ direct?: undefined;
124
+ order?: undefined;
125
+ after?: undefined;
126
+ file_path?: undefined;
127
+ anchors?: undefined;
128
+ before?: undefined;
129
+ node_id?: undefined;
130
+ path_prefix?: undefined;
131
+ direction?: undefined;
132
+ dir?: undefined;
133
+ };
134
+ required: string[];
135
+ additionalProperties: boolean;
136
+ };
137
+ } | {
138
+ name: string;
139
+ description: string;
140
+ inputSchema: {
141
+ type: string;
142
+ properties: {
143
+ project_id: {
144
+ type: string;
145
+ description: string;
146
+ };
147
+ directory: {
148
+ type: string;
149
+ maxLength: number;
150
+ description: string;
151
+ };
152
+ direct: {
153
+ type: string;
154
+ description: string;
155
+ };
156
+ branch: {
157
+ type: string;
158
+ description: string;
159
+ };
160
+ limit: {
161
+ type: string;
162
+ minimum: number;
163
+ description: string;
164
+ };
165
+ order: {
166
+ type: string;
167
+ enum: string[];
168
+ description: string;
169
+ };
170
+ after: {
171
+ type: string;
172
+ minLength: number;
173
+ maxLength: number;
174
+ description: string;
175
+ minimum?: undefined;
176
+ };
177
+ format: {
178
+ type: string;
179
+ enum: string[];
180
+ description: string;
181
+ };
182
+ query?: undefined;
183
+ kind?: undefined;
184
+ depth?: undefined;
185
+ file_path?: undefined;
186
+ anchors?: undefined;
187
+ before?: undefined;
188
+ node_id?: undefined;
189
+ path_prefix?: undefined;
190
+ direction?: undefined;
191
+ dir?: undefined;
192
+ };
193
+ required: string[];
194
+ additionalProperties: boolean;
195
+ };
196
+ } | {
197
+ name: string;
198
+ description: string;
199
+ inputSchema: {
200
+ type: string;
201
+ properties: {
202
+ project_id: {
203
+ type: string;
204
+ description: string;
205
+ };
206
+ file_path: {
207
+ type: string;
208
+ minLength: number;
209
+ maxLength: number;
210
+ description: string;
211
+ };
212
+ branch: {
213
+ type: string;
214
+ description: string;
215
+ };
216
+ limit: {
217
+ type: string;
218
+ minimum: number;
219
+ description: string;
220
+ };
221
+ format: {
222
+ type: string;
223
+ enum: string[];
224
+ description: string;
225
+ };
226
+ query?: undefined;
227
+ kind?: undefined;
228
+ depth?: undefined;
229
+ directory?: undefined;
230
+ direct?: undefined;
231
+ order?: undefined;
232
+ after?: undefined;
233
+ anchors?: undefined;
234
+ before?: undefined;
235
+ node_id?: undefined;
236
+ path_prefix?: undefined;
237
+ direction?: undefined;
238
+ dir?: undefined;
239
+ };
240
+ required: string[];
241
+ additionalProperties: boolean;
242
+ };
243
+ } | {
244
+ name: string;
245
+ description: string;
246
+ inputSchema: {
247
+ type: string;
248
+ properties: {
249
+ project_id: {
250
+ type: string;
251
+ description: string;
252
+ };
253
+ anchors: {
254
+ type: string;
255
+ items: {
256
+ type: string;
257
+ };
258
+ maxItems: number;
259
+ description: string;
260
+ };
261
+ format: {
262
+ type: string;
263
+ enum: string[];
264
+ description: string;
265
+ };
266
+ query?: undefined;
267
+ kind?: undefined;
268
+ branch?: undefined;
269
+ limit?: undefined;
270
+ depth?: undefined;
271
+ directory?: undefined;
272
+ direct?: undefined;
273
+ order?: undefined;
274
+ after?: undefined;
275
+ file_path?: undefined;
276
+ before?: undefined;
277
+ node_id?: undefined;
278
+ path_prefix?: undefined;
279
+ direction?: undefined;
280
+ dir?: undefined;
281
+ };
282
+ required: string[];
283
+ additionalProperties: boolean;
284
+ };
285
+ } | {
286
+ name: string;
287
+ description: string;
288
+ inputSchema: {
289
+ type: string;
290
+ properties: {
291
+ project_id: {
292
+ type: string;
293
+ description: string;
294
+ };
295
+ order: {
296
+ type: string;
297
+ enum: string[];
298
+ description: string;
299
+ };
300
+ before: {
301
+ type: string;
302
+ minimum: number;
303
+ description: string;
304
+ };
305
+ after: {
306
+ type: string;
307
+ minimum: number;
308
+ description: string;
309
+ minLength?: undefined;
310
+ maxLength?: undefined;
311
+ };
312
+ node_id: {
313
+ type: string;
314
+ items: {
315
+ type: string;
316
+ };
317
+ maxItems: number;
318
+ description: string;
319
+ };
320
+ path_prefix: {
321
+ type: string;
322
+ maxLength: number;
323
+ description: string;
324
+ };
325
+ limit: {
326
+ type: string;
327
+ minimum: number;
328
+ description: string;
329
+ };
330
+ format: {
331
+ type: string;
332
+ enum: string[];
333
+ description: string;
334
+ };
335
+ query?: undefined;
336
+ kind?: undefined;
337
+ branch?: undefined;
338
+ depth?: undefined;
339
+ directory?: undefined;
340
+ direct?: undefined;
341
+ file_path?: undefined;
342
+ anchors?: undefined;
343
+ direction?: undefined;
344
+ dir?: undefined;
345
+ };
346
+ required: string[];
347
+ additionalProperties: boolean;
348
+ };
349
+ } | {
350
+ name: string;
351
+ description: string;
352
+ inputSchema: {
353
+ type: string;
354
+ properties: {
355
+ project_id: {
356
+ type: string;
357
+ description: string;
358
+ };
359
+ node_id: {
360
+ type: string;
361
+ description: string;
362
+ items?: undefined;
363
+ maxItems?: undefined;
364
+ };
365
+ direction: {
366
+ type: string;
367
+ enum: string[];
368
+ description: string;
369
+ };
370
+ depth: {
371
+ type: string;
372
+ minimum: number;
373
+ maximum: number;
374
+ description: string;
375
+ };
376
+ limit: {
377
+ type: string;
378
+ minimum: number;
379
+ description: string;
380
+ };
381
+ branch: {
382
+ type: string;
383
+ description: string;
384
+ };
385
+ format: {
386
+ type: string;
387
+ enum: string[];
388
+ description: string;
389
+ };
390
+ query?: undefined;
391
+ kind?: undefined;
392
+ directory?: undefined;
393
+ direct?: undefined;
394
+ order?: undefined;
395
+ after?: undefined;
396
+ file_path?: undefined;
397
+ anchors?: undefined;
398
+ before?: undefined;
399
+ path_prefix?: undefined;
400
+ dir?: undefined;
401
+ };
402
+ required: string[];
403
+ additionalProperties: boolean;
404
+ };
405
+ } | {
406
+ name: string;
407
+ description: string;
408
+ inputSchema: {
409
+ type: string;
410
+ properties: {
411
+ project_id: {
412
+ type: string;
413
+ description: string;
414
+ };
415
+ dir: {
416
+ type: string;
417
+ maxLength: number;
418
+ description: string;
419
+ };
420
+ depth: {
421
+ type: string;
422
+ minimum: number;
423
+ maximum: number;
424
+ description: string;
425
+ };
426
+ limit: {
427
+ type: string;
428
+ minimum: number;
429
+ description: string;
430
+ };
431
+ branch: {
432
+ type: string;
433
+ description: string;
434
+ };
435
+ format: {
436
+ type: string;
437
+ enum: string[];
438
+ description: string;
439
+ };
440
+ query?: undefined;
441
+ kind?: undefined;
442
+ directory?: undefined;
443
+ direct?: undefined;
444
+ order?: undefined;
445
+ after?: undefined;
446
+ file_path?: undefined;
447
+ anchors?: undefined;
448
+ before?: undefined;
449
+ node_id?: undefined;
450
+ path_prefix?: undefined;
451
+ direction?: undefined;
452
+ };
453
+ required: string[];
454
+ additionalProperties: boolean;
455
+ };
456
+ })[];
457
+ export declare function handleCodeContext(args: Args): Promise<ToolResult>;
458
+ export declare function handleCodeSummary(args: Args): Promise<ToolResult>;
459
+ export declare function handleCodeTree(args: Args): Promise<ToolResult>;
460
+ export declare function handleCodeFiles(args: Args): Promise<ToolResult>;
461
+ export declare function handleCodeSymbols(args: Args): Promise<ToolResult>;
462
+ export declare function handleCodeResolve(args: Args): Promise<ToolResult>;
463
+ export declare function handleCodeChanges(args: Args): Promise<ToolResult>;
464
+ export declare function handleCodeGraph(args: Args): Promise<ToolResult>;
465
+ export declare function handleCodeGraphFolders(args: Args): Promise<ToolResult>;
466
+ export {};