vantage-peers-mcp 2.9.0 → 2.10.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/CHANGELOG.md +48 -0
- package/README.md +1 -1
- package/dist/server.js +1 -1
- package/dist/src/tools.js +112 -10
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,53 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.10.0] — 2026-06-14 — Day 102 CRUD baseline PR-C: rename-only safe subset (mission k575kc1ryps0n8br95jw3q7d0x88m2v9)
|
|
4
|
+
|
|
5
|
+
Mission `mcp-crud-baseline-standard` PR-C under T2. Third of 4 sub-PRs aligning the MCP surface with the Day 101 doctrine `j57dhrmkzjerjtssnr0z9ba57n88n7q7`. Sigma autonomous default after arbitrage timeout on the original "13-entity search_by_keyword cluster" scope — that fuller scope requires a backend search-infrastructure decision (RAG-index per entity vs Convex `.searchIndex()` per table) that is NOT a thin-wrapper PR. PR-C ships the rename-only safe subset now to keep doctrine velocity; the full cluster is deferred to a backend-RFC mission.
|
|
6
|
+
|
|
7
|
+
### Added (2 canonical search tools)
|
|
8
|
+
|
|
9
|
+
- **`search_components_by_keyword`** — BM25 / substring search over components by name or team. Wire-identical to `search_components` (same Convex query `components:search` 1:1, same scope filter, same defaults). `readOnlyHint=true`.
|
|
10
|
+
- **`search_fix_patterns_by_semantic`** — semantic embedding-similarity search over fix patterns. Wire-identical to `search_fix_patterns` (same Convex action `search:searchFixPatterns` 1:1, same scope filter, same defaults). `readOnlyHint=true`. Note: the canonical suffix is `_by_semantic` (NOT `_by_keyword`) because the underlying ranker is embedding-cosine, not BM25 — naming follows behavior, not entity convention.
|
|
11
|
+
|
|
12
|
+
### Deprecated (alias-only, removal target 2.11.0)
|
|
13
|
+
|
|
14
|
+
- **`search_components`** — alias of `search_components_by_keyword`. Description leads with `DEPRECATED ALIAS …`.
|
|
15
|
+
- **`search_fix_patterns`** — alias of `search_fix_patterns_by_semantic`. Description leads with `DEPRECATED ALIAS …`.
|
|
16
|
+
|
|
17
|
+
### Re-targeted deprecations (FOLLOW-UP from Eta PR #750 review)
|
|
18
|
+
|
|
19
|
+
- **`text_search`** — 2.8.0 originally targeted removal at 2.9.0; episode-only PR-B did not include the removal. Source comments + this entry re-target removal to **2.11.0**.
|
|
20
|
+
- **`recall`** — same re-target rationale, removal now **2.11.0**.
|
|
21
|
+
|
|
22
|
+
Both `text_search` and `recall` remain wire-identical to their canonical successors (`search_memories_by_keyword` / `search_memories_by_semantic`). Closes FOLLOW-UP task `k1754apqtcjpre2vd5ghbkcmzn88mhwf`.
|
|
23
|
+
|
|
24
|
+
### Scope NOT in this PR (deferred)
|
|
25
|
+
|
|
26
|
+
The original PR-C "13-entity search_by_keyword cluster" required adding BM25 / search infrastructure to 10+ entities that currently have NO backend search index (`grep searchIndex convex/schema.ts` → zero hits; only `memories` is indexed, via `@convex-dev/rag`). Two backend paths exist:
|
|
27
|
+
|
|
28
|
+
- **Path A** — extend RAG indexing to each entity (heavy: per-table embedding pipeline, RAG namespace per entity, vector cost; gets hybrid search for free).
|
|
29
|
+
- **Path B** — Convex native `.searchIndex()` per table (lightweight: schema migration + one query per entity, BM25-only, no embeddings).
|
|
30
|
+
|
|
31
|
+
Either path is a multi-day backend RFC, NOT a thin-wrapper PR. Sigma sent the arbitrage to Pi (msg `jn75zy4g7bhj95bhyz2zvv6n8d88na6s`) and defaulted to PR-C path C (rename-only) after 2 cron ticks of no reply. A follow-up mission to scope the backend search infrastructure is the next mission proposal.
|
|
32
|
+
|
|
33
|
+
### Version sync
|
|
34
|
+
|
|
35
|
+
- `mcp-server/server.ts:115` SERVER_VERSION 2.9.0 → 2.10.0
|
|
36
|
+
- `mcp-server/package.json` → 2.10.0
|
|
37
|
+
- README + 4 cloud docs bumped to 2.10.0 markers (`enforce-release-sync` v1.0.1 gate).
|
|
38
|
+
|
|
39
|
+
### Test fixture catch-up
|
|
40
|
+
|
|
41
|
+
- `READ_ONLY_TOOLS` set in `mcp-server/src/__tests__/chatgpt-tool-annotations.test.ts` extended with the 2 new canonical names.
|
|
42
|
+
|
|
43
|
+
### Refs
|
|
44
|
+
|
|
45
|
+
- Mission `k575kc1ryps0n8br95jw3q7d0x88m2v9` (MCP CRUD Baseline Standard).
|
|
46
|
+
- Pi authorization msg `jn74q7twhr3s1s8dvqxbzvky9588msdd` ("next: T2-PR-C 13-entity search_by_keyword cluster post #750 merge").
|
|
47
|
+
- Sigma arbitrage msg to Pi: `jn75zy4g7bhj95bhyz2zvv6n8d88na6s` (3 paths A/B/C).
|
|
48
|
+
- FOLLOW-UP task: `k1754apqtcjpre2vd5ghbkcmzn88mhwf` (text_search/recall deprecation slipped).
|
|
49
|
+
- Audit T1: `analysis/mcp-crud-baseline-vp-audit-2026-06-14.md` § 4.
|
|
50
|
+
|
|
3
51
|
## [2.9.0] — 2026-06-14 — Day 102 CRUD baseline PR-B: episode entity 5-op surface (mission k575kc1ryps0n8br95jw3q7d0x88m2v9)
|
|
4
52
|
|
|
5
53
|
Mission `mcp-crud-baseline-standard` PR-B under T2. Second of 4 sub-PRs aligning the MCP surface with the Day 101 doctrine `j57dhrmkzjerjtssnr0z9ba57n88n7q7` ("5 ops per entity"). PR-B adds the missing read/list/search facades for the `episode` entity, completing the 5-op surface (the write side `store_episode` already existed since the 8-Sins doctrine).
|
package/README.md
CHANGED
|
@@ -242,7 +242,7 @@ Example:
|
|
|
242
242
|
### Session (1)
|
|
243
243
|
`set_summary`
|
|
244
244
|
|
|
245
|
-
## Compact payloads and status aliases (v2.
|
|
245
|
+
## Compact payloads and status aliases (v2.10.0 — feature since v2.3.0)
|
|
246
246
|
|
|
247
247
|
### `fields=lite` — reduced token payloads
|
|
248
248
|
|
package/dist/server.js
CHANGED
|
@@ -102,7 +102,7 @@ const convexUrl = loadConvexUrl();
|
|
|
102
102
|
const convex = new ConvexHttpClient(convexUrl);
|
|
103
103
|
const server = new McpServer({
|
|
104
104
|
name: "vantage-peers",
|
|
105
|
-
version: "2.
|
|
105
|
+
version: "2.10.0",
|
|
106
106
|
});
|
|
107
107
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
108
108
|
// Helper: structured error response for MCP tool handlers
|
package/dist/src/tools.js
CHANGED
|
@@ -917,8 +917,9 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
917
917
|
});
|
|
918
918
|
// ── recall ──────────────────────────────────────────────────────────────────
|
|
919
919
|
// DEPRECATED (Day 101 v2.8.0) — alias of search_memories_by_semantic. Retained
|
|
920
|
-
//
|
|
921
|
-
//
|
|
920
|
+
// as a back-compat shim. New callers should use `search_memories_by_semantic`.
|
|
921
|
+
// Removal target re-targeted to 2.11.0 (slipped past 2.9.0 — episode-only PR;
|
|
922
|
+
// see FOLLOW-UP task k1754apqtcjpre2vd5ghbkcmzn88mhwf for arbitrage).
|
|
922
923
|
server.tool("recall", "DEPRECATED ALIAS of search_memories_by_semantic — semantic vector search over VantagePeers memories, ranked by cosine similarity. " +
|
|
923
924
|
"WHEN: use at session start or before decisions — prefer over text_search for intent-based queries. New callers: use search_memories_by_semantic. " +
|
|
924
925
|
"EXAMPLE: recall query='Pi feedback rules' namespace='global' type='feedback' limit=20.", {
|
|
@@ -975,8 +976,9 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
975
976
|
});
|
|
976
977
|
// ── text_search ─────────────────────────────────────────────────────────────
|
|
977
978
|
// DEPRECATED (Day 101 v2.8.0) — alias of search_memories_by_keyword. Retained
|
|
978
|
-
//
|
|
979
|
-
//
|
|
979
|
+
// as a back-compat shim. New callers should use `search_memories_by_keyword`.
|
|
980
|
+
// Removal target re-targeted to 2.11.0 (slipped past 2.9.0 — episode-only PR;
|
|
981
|
+
// see FOLLOW-UP task k1754apqtcjpre2vd5ghbkcmzn88mhwf for arbitrage).
|
|
980
982
|
server.tool("text_search", "DEPRECATED ALIAS of search_memories_by_keyword — BM25 full-text keyword search over VantagePeers memories for exact term matching. " +
|
|
981
983
|
"WHEN: use when search_memories_by_semantic returns too-broad results and you need a specific exact phrase or ID. New callers: use search_memories_by_keyword. " +
|
|
982
984
|
"EXAMPLE: text_search query='Day 92 C3 descriptions' namespace='project/vantage-peers' limit=10.", {
|
|
@@ -1025,7 +1027,7 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
1025
1027
|
// ── search_memories_by_keyword ─────────────────────────────────────────────
|
|
1026
1028
|
// Day 101 v2.8.0 — canonical name under MCP CRUD baseline doctrine.
|
|
1027
1029
|
// Mirrors text_search 1:1 (same Convex action `search:textSearch`).
|
|
1028
|
-
// text_search is retained as a deprecated alias
|
|
1030
|
+
// text_search is retained as a deprecated alias (removal re-targeted 2.11.0).
|
|
1029
1031
|
server.tool("search_memories_by_keyword", "BM25 full-text keyword search over VantagePeers memories for exact term matching. " +
|
|
1030
1032
|
"WHEN: use when search_memories_by_semantic returns too-broad results and you need a specific exact phrase or ID. " +
|
|
1031
1033
|
"EXAMPLE: search_memories_by_keyword query='Day 92 C3 descriptions' namespace='project/vantage-peers' limit=10.", {
|
|
@@ -1074,7 +1076,7 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
1074
1076
|
// ── search_memories_by_semantic ────────────────────────────────────────────
|
|
1075
1077
|
// Day 101 v2.8.0 — canonical name under MCP CRUD baseline doctrine.
|
|
1076
1078
|
// Mirrors recall 1:1 (same Convex action `search:recall`).
|
|
1077
|
-
// recall is retained as a deprecated alias
|
|
1079
|
+
// recall is retained as a deprecated alias (removal re-targeted 2.11.0).
|
|
1078
1080
|
server.tool("search_memories_by_semantic", "Semantic vector search over VantagePeers memories, ranked by cosine similarity. " +
|
|
1079
1081
|
"WHEN: use at session start or before decisions — prefer over search_memories_by_keyword for intent-based queries. " +
|
|
1080
1082
|
"EXAMPLE: search_memories_by_semantic query='Pi feedback rules' namespace='global' type='feedback' limit=20.", {
|
|
@@ -3726,6 +3728,9 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
3726
3728
|
}
|
|
3727
3729
|
});
|
|
3728
3730
|
// ── search_components ───────────────────────────────────────────────────────
|
|
3731
|
+
// DEPRECATED (Day 102 v2.10.0) — alias of search_components_by_keyword.
|
|
3732
|
+
// Retained for one minor version as a back-compat shim. New callers should
|
|
3733
|
+
// use `search_components_by_keyword`. To be removed in 2.11.0.
|
|
3729
3734
|
server.tool("search_components",
|
|
3730
3735
|
// S3.3 B8 follow-up batch 3 FINAL — DOCTRINE EXCEPTION.
|
|
3731
3736
|
// @cursorPagingException relevance-ranked-not-chronological
|
|
@@ -3733,8 +3738,8 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
3733
3738
|
// anchor would skip high-relevance older matches in favor of newer
|
|
3734
3739
|
// low-relevance ones, breaking the search contract. Pagination on
|
|
3735
3740
|
// semantic search should be score-based (offset / topK), not time-based.
|
|
3736
|
-
"
|
|
3737
|
-
"WHEN: use before register_component to check if a similar component already exists in the registry. " +
|
|
3741
|
+
"DEPRECATED ALIAS of search_components_by_keyword — search components by name or team substring with optional type filter. " +
|
|
3742
|
+
"WHEN: use before register_component to check if a similar component already exists in the registry. New callers: use search_components_by_keyword. " +
|
|
3738
3743
|
"EXAMPLE: search_components query='check-tasks' type='skill' limit=10.", {
|
|
3739
3744
|
query: z
|
|
3740
3745
|
.string()
|
|
@@ -3776,6 +3781,52 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
3776
3781
|
return mcpConvexError(error);
|
|
3777
3782
|
}
|
|
3778
3783
|
});
|
|
3784
|
+
// ── search_components_by_keyword ───────────────────────────────────────────
|
|
3785
|
+
// Day 102 v2.10.0 — canonical name under MCP CRUD baseline doctrine (PR-C).
|
|
3786
|
+
// Mirrors search_components 1:1 (same Convex query `components:search`).
|
|
3787
|
+
// search_components is retained as a deprecated alias until 2.11.0.
|
|
3788
|
+
server.tool("search_components_by_keyword", "BM25 / substring keyword search over components by name or team with optional type filter. " +
|
|
3789
|
+
"WHEN: use before register_component to check if a similar component already exists in the registry. " +
|
|
3790
|
+
"EXAMPLE: search_components_by_keyword query='check-tasks' type='skill' limit=10.", {
|
|
3791
|
+
query: z
|
|
3792
|
+
.string()
|
|
3793
|
+
.describe("Search term to match against component name or team"),
|
|
3794
|
+
type: componentTypeSchema.optional().describe("Filter by component type"),
|
|
3795
|
+
limit: z
|
|
3796
|
+
.number()
|
|
3797
|
+
.int()
|
|
3798
|
+
.min(1)
|
|
3799
|
+
.max(200)
|
|
3800
|
+
.optional()
|
|
3801
|
+
.describe("Max items to return. Default 20 (envelope-safe). Cap 200."),
|
|
3802
|
+
fields: z
|
|
3803
|
+
.enum(["lite", "full"])
|
|
3804
|
+
.optional()
|
|
3805
|
+
.describe("'lite' returns compact payload (less tokens), 'full' is default."),
|
|
3806
|
+
}, {
|
|
3807
|
+
readOnlyHint: true,
|
|
3808
|
+
openWorldHint: false,
|
|
3809
|
+
destructiveHint: false,
|
|
3810
|
+
title: "Search components by keyword",
|
|
3811
|
+
}, async ({ query, type, limit, fields }) => {
|
|
3812
|
+
try {
|
|
3813
|
+
const results = await convex.query("components:search", {
|
|
3814
|
+
query,
|
|
3815
|
+
type,
|
|
3816
|
+
limit: limit ?? 20,
|
|
3817
|
+
fields: fields ?? "lite",
|
|
3818
|
+
});
|
|
3819
|
+
const filteredResults = scopeFilterList(oauthCtx, Array.isArray(results) ? results : []);
|
|
3820
|
+
return {
|
|
3821
|
+
content: [
|
|
3822
|
+
{ type: "text", text: JSON.stringify(filteredResults, null, 2) },
|
|
3823
|
+
],
|
|
3824
|
+
};
|
|
3825
|
+
}
|
|
3826
|
+
catch (error) {
|
|
3827
|
+
return mcpConvexError(error);
|
|
3828
|
+
}
|
|
3829
|
+
});
|
|
3779
3830
|
// ── create_recurring_task ───────────────────────────────────────────────────
|
|
3780
3831
|
server.tool("create_recurring_task", "Create a recurring task template that auto-generates tasks on a cron schedule. " +
|
|
3781
3832
|
"WHEN: use for daily standups, weekly reviews, or any repeating work item pattern. " +
|
|
@@ -5197,14 +5248,18 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
5197
5248
|
}
|
|
5198
5249
|
});
|
|
5199
5250
|
// ── search_fix_patterns ─────────────────────────────────────────────────────
|
|
5251
|
+
// DEPRECATED (Day 102 v2.10.0) — alias of search_fix_patterns_by_semantic.
|
|
5252
|
+
// Underlying behavior is embedding-similarity ranking (NOT BM25), hence
|
|
5253
|
+
// "_by_semantic" is the canonical suffix per the CRUD baseline doctrine.
|
|
5254
|
+
// To be removed in 2.11.0.
|
|
5200
5255
|
server.tool("search_fix_patterns",
|
|
5201
5256
|
// S3.3 B8 follow-up batch 3 FINAL — DOCTRINE EXCEPTION.
|
|
5202
5257
|
// @cursorPagingException semantic-action-not-chronological
|
|
5203
5258
|
// Rationale: backed by `convex.action("search:searchFixPatterns")` which
|
|
5204
5259
|
// runs an embedding-similarity ranker; cursor paging by `createdBefore`
|
|
5205
5260
|
// would corrupt relevance ordering. Same rationale as search_components.
|
|
5206
|
-
"
|
|
5207
|
-
"WHEN: call BEFORE fixing any bug to check if a matching pattern exists and reuse the validated fix. " +
|
|
5261
|
+
"DEPRECATED ALIAS of search_fix_patterns_by_semantic — semantic search over fix patterns by symptom description, ranked by relevance. " +
|
|
5262
|
+
"WHEN: call BEFORE fixing any bug to check if a matching pattern exists and reuse the validated fix. New callers: use search_fix_patterns_by_semantic. " +
|
|
5208
5263
|
"EXAMPLE: search_fix_patterns query='message disappears after sending on mobile' limit=5.", {
|
|
5209
5264
|
query: z
|
|
5210
5265
|
.string()
|
|
@@ -5247,6 +5302,53 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
5247
5302
|
return mcpConvexError(error);
|
|
5248
5303
|
}
|
|
5249
5304
|
});
|
|
5305
|
+
// ── search_fix_patterns_by_semantic ────────────────────────────────────────
|
|
5306
|
+
// Day 102 v2.10.0 — canonical name under MCP CRUD baseline doctrine (PR-C).
|
|
5307
|
+
// Mirrors search_fix_patterns 1:1 (same Convex action `search:searchFixPatterns`).
|
|
5308
|
+
// search_fix_patterns is retained as a deprecated alias until 2.11.0.
|
|
5309
|
+
server.tool("search_fix_patterns_by_semantic", "Semantic vector search over fix patterns by symptom description, ranked by relevance. " +
|
|
5310
|
+
"WHEN: call BEFORE fixing any bug to check if a matching pattern exists and reuse the validated fix. " +
|
|
5311
|
+
"EXAMPLE: search_fix_patterns_by_semantic query='message disappears after sending on mobile' limit=5.", {
|
|
5312
|
+
query: z
|
|
5313
|
+
.string()
|
|
5314
|
+
.describe("Describe the problem — e.g. 'message disappears after sending'"),
|
|
5315
|
+
limit: z
|
|
5316
|
+
.number()
|
|
5317
|
+
.int()
|
|
5318
|
+
.min(1)
|
|
5319
|
+
.max(200)
|
|
5320
|
+
.optional()
|
|
5321
|
+
.describe("Max items to return. Default 20 (envelope-safe). Cap 200."),
|
|
5322
|
+
fields: z
|
|
5323
|
+
.enum(["lite", "full"])
|
|
5324
|
+
.optional()
|
|
5325
|
+
.describe("'lite' returns compact payload (less tokens), 'full' is default."),
|
|
5326
|
+
}, {
|
|
5327
|
+
readOnlyHint: true,
|
|
5328
|
+
openWorldHint: false,
|
|
5329
|
+
destructiveHint: false,
|
|
5330
|
+
title: "Search fix patterns by semantic",
|
|
5331
|
+
}, async ({ query, limit, fields }) => {
|
|
5332
|
+
try {
|
|
5333
|
+
const results = await convex.action("search:searchFixPatterns", {
|
|
5334
|
+
query,
|
|
5335
|
+
limit: limit ?? 20,
|
|
5336
|
+
fields: fields ?? "lite",
|
|
5337
|
+
});
|
|
5338
|
+
const filteredResults = scopeFilterList(oauthCtx, Array.isArray(results) ? results : []);
|
|
5339
|
+
return {
|
|
5340
|
+
content: [
|
|
5341
|
+
{
|
|
5342
|
+
type: "text",
|
|
5343
|
+
text: JSON.stringify(filteredResults, null, 2),
|
|
5344
|
+
},
|
|
5345
|
+
],
|
|
5346
|
+
};
|
|
5347
|
+
}
|
|
5348
|
+
catch (error) {
|
|
5349
|
+
return mcpConvexError(error);
|
|
5350
|
+
}
|
|
5351
|
+
});
|
|
5250
5352
|
// ── list_fix_patterns ───────────────────────────────────────────────────────
|
|
5251
5353
|
server.tool("list_fix_patterns", "List fix patterns filtered by source project, newest first with cursor paging support. " +
|
|
5252
5354
|
"WHEN: use to audit the knowledge base or review all patterns for a specific project. " +
|
package/package.json
CHANGED