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 +0 -2
- package/dist/src/tools.js +20 -7
- package/package.json +1 -1
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
|
|
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
|
-
//
|
|
2159
|
-
|
|
2160
|
-
// Non-master:
|
|
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
|
-
|
|
2163
|
-
|
|
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
|
|
2179
|
+
orchestrator,
|
|
2180
|
+
createdBy,
|
|
2168
2181
|
limit: limit ?? 20,
|
|
2169
2182
|
});
|
|
2170
2183
|
return {
|
package/package.json
CHANGED