vantage-peers-mcp 2.4.6 → 2.4.8

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
@@ -9,8 +9,6 @@ MCP server for [VantagePeers](https://vantagepeers.com) — shared memory, messa
9
9
 
10
10
  84 tools across 18 categories: memory, profiles, tasks, missions, mission templates, messages, diary, briefing notes, search (RAG), issues, fix patterns, error monitoring, deployments, business units, components, mandates, recurring tasks, and session. All tools ship with ChatGPT Apps SDK annotations (`readOnlyHint`, `openWorldHint`, `destructiveHint`) for native UX in ChatGPT custom connectors.
11
11
 
12
- **Companion plugin — 32 skills (target v2.7.0):** the `vantage-peers` Claude Code plugin wraps these 84 tools with 32 high-level skills split across three phases — Phase A (11 skills, v2.5.0): `dispatch-message`, `dispatch-task-create`, `dispatch-task-complete`, `dispatch-task-start`, `dispatch-subagent`, `identity-set`, `mission-bootstrap`, `check-messages` v5.1, `check-tasks` v2, `daily-start` v3, `close-day` v2 — Phase B (10 skills, v2.6.0): `memory-write`, `briefing-write`, `mission-template-apply`, `task-structure`, `component-register`, `component-discover`, `issue-triage`, `fix-pattern-cycle`, `episode-log`, `recall-deep` — Phase C (11 skills, v2.7.0): `briefing-recall`, `repo-link`, `recurring-schedule`, `deploy-track`, `profile-lookup`, `peers-discovery`, `mandate-lifecycle`, `bu-manage`, `messages-history`, `memory-edit`, `diary-discover`.
13
-
14
12
  ## Quick start
15
13
 
16
14
  ```bash
package/dist/src/tools.js CHANGED
@@ -2062,12 +2062,19 @@ export function registerTools(server, convex, oauthCtx) {
2062
2062
  const fromDenied = guardFrom(orchestrator);
2063
2063
  if (fromDenied)
2064
2064
  return fromDenied;
2065
+ // v2.4.8: derive createdBy from auth context (oauthCtx.userId).
2066
+ // This is the anti-spoof authored-by — distinct from orchestrator
2067
+ // (writer-intent label, client-supplied). On the no-auth path
2068
+ // (master-scope bearer / local dev), oauthCtx is undefined and
2069
+ // createdBy gracefully degrades to undefined (transition period).
2070
+ const createdBy = oauthCtx?.userId;
2065
2071
  const diaryId = await convex.mutation("diary:write", {
2066
2072
  date,
2067
2073
  orchestrator,
2068
2074
  content,
2069
2075
  highlights: toArray(highlights),
2070
2076
  blockers: toArray(blockers),
2077
+ createdBy,
2071
2078
  });
2072
2079
  return {
2073
2080
  content: [
@@ -2139,7 +2146,7 @@ export function registerTools(server, convex, oauthCtx) {
2139
2146
  .describe("Filter to a specific orchestrator — omit for all"),
2140
2147
  createdBy: assigneeSchema
2141
2148
  .optional()
2142
- .describe("Filter by creator/orchestrator role alias of `orchestrator` for cross-tool consistency (mirrors list_tasks pattern). If both are passed, `createdBy` wins."),
2149
+ .describe("Filter by auth-derived author (v2.4.8+, anti-spoof). Distinct from `orchestrator` which is the writer-intent label. Pre-v2.4.8 entries are backfilled with orchestrator as best-guess."),
2143
2150
  limit: z
2144
2151
  .number()
2145
2152
  .int()
@@ -2155,16 +2162,22 @@ export function registerTools(server, convex, oauthCtx) {
2155
2162
  title: "List diary entries",
2156
2163
  }, async ({ orchestrator, createdBy, limit }) => {
2157
2164
  try {
2158
- // createdBy is an alias of orchestrator (diary's author field). If both set, createdBy wins.
2159
- const effectiveOrchestrator = createdBy ?? orchestrator;
2160
- // Non-master: must scope to own orchestrator id.
2165
+ // v2.4.8: orchestrator (writer-intent) and createdBy (auth-derived
2166
+ // author) are separate filters — NOT aliases. Forward both independently.
2167
+ // Non-master: REQUIRE at least one explicit self-scope undefined passes
2168
+ // through are forbidden. Mirrors v2.4.7 effectiveOrchestrator shortcircuit:
2169
+ // undefined !== myId → Forbidden. No silent fleet-read for non-master callers.
2161
2170
  if (oauthCtx && !isMasterScope(oauthCtx)) {
2162
- if (effectiveOrchestrator !== oauthCtx.userId) {
2163
- return mcpError(`Forbidden: list_diaries requires orchestrator='${oauthCtx.userId}' for non-master scope (current: ${oauthCtx.scopeProfile}).`);
2171
+ const myId = oauthCtx.userId;
2172
+ const orchestratorScoped = orchestrator === myId;
2173
+ const createdByScoped = createdBy === myId;
2174
+ if (!orchestratorScoped && !createdByScoped) {
2175
+ return mcpError(`Forbidden: list_diaries requires orchestrator='${myId}' OR createdBy='${myId}' for non-master scope (current scope: ${oauthCtx.scopeProfile}).`);
2164
2176
  }
2165
2177
  }
2166
2178
  const entries = await convex.query("diary:list", {
2167
- orchestrator: effectiveOrchestrator,
2179
+ orchestrator,
2180
+ createdBy,
2168
2181
  limit: limit ?? 20,
2169
2182
  });
2170
2183
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vantage-peers-mcp",
3
- "version": "2.4.6",
3
+ "version": "2.4.8",
4
4
  "description": "MCP server for VantagePeers — shared memory, messaging, and task coordination for AI agent teams",
5
5
  "type": "module",
6
6
  "main": "./dist/server.js",