@opendatalabs/personal-server-ts-core 1.16.0 → 1.17.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/dist/api/index.d.ts +52 -4
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +26 -4
- package/dist/api/index.js.map +1 -1
- package/dist/api/raw-envelope.d.ts +3 -0
- package/dist/api/raw-envelope.d.ts.map +1 -0
- package/dist/api/raw-envelope.js +215 -0
- package/dist/api/raw-envelope.js.map +1 -0
- package/dist/contracts/sync.d.ts.map +1 -1
- package/dist/contracts/sync.js +1 -0
- package/dist/contracts/sync.js.map +1 -1
- package/dist/errors/catalog.d.ts +9 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/catalog.js +15 -0
- package/dist/errors/catalog.js.map +1 -1
- package/dist/keys/index.d.ts +1 -0
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +1 -1
- package/dist/keys/index.js.map +1 -1
- package/dist/keys/public-only-account.d.ts +8 -0
- package/dist/keys/public-only-account.d.ts.map +1 -0
- package/dist/keys/public-only-account.js +21 -0
- package/dist/keys/public-only-account.js.map +1 -0
- package/dist/mcp/connection-api.d.ts +20 -1
- package/dist/mcp/connection-api.d.ts.map +1 -1
- package/dist/mcp/connection-api.js +88 -7
- package/dist/mcp/connection-api.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/read-client.d.ts +2 -0
- package/dist/mcp/read-client.d.ts.map +1 -1
- package/dist/mcp/read-client.js +4 -1
- package/dist/mcp/read-client.js.map +1 -1
- package/dist/mcp/server.d.ts +17 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +154 -15
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/store.d.ts.map +1 -1
- package/dist/mcp/store.js +9 -0
- package/dist/mcp/store.js.map +1 -1
- package/dist/mcp/token-expiry.d.ts +38 -0
- package/dist/mcp/token-expiry.d.ts.map +1 -0
- package/dist/mcp/token-expiry.js +55 -0
- package/dist/mcp/token-expiry.js.map +1 -0
- package/dist/mcp/tools.d.ts +14 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +8 -3
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/types.d.ts +32 -4
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/policy/index.d.ts +1 -0
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +1 -0
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/signed-artifacts.d.ts +17 -0
- package/dist/policy/signed-artifacts.d.ts.map +1 -0
- package/dist/policy/signed-artifacts.js +110 -0
- package/dist/policy/signed-artifacts.js.map +1 -0
- package/dist/ports/index.d.ts +4 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js.map +1 -1
- package/dist/storage/adapters/vana.d.ts +2 -1
- package/dist/storage/adapters/vana.d.ts.map +1 -1
- package/dist/storage/adapters/vana.js +63 -0
- package/dist/storage/adapters/vana.js.map +1 -1
- package/dist/sync/engine/sync-manager.d.ts +6 -0
- package/dist/sync/engine/sync-manager.d.ts.map +1 -1
- package/dist/sync/engine/sync-manager.js +81 -38
- package/dist/sync/engine/sync-manager.js.map +1 -1
- package/dist/sync/types.d.ts +2 -0
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/workers/download.d.ts +7 -0
- package/dist/sync/workers/download.d.ts.map +1 -1
- package/dist/sync/workers/download.js +72 -0
- package/dist/sync/workers/download.js.map +1 -1
- package/dist/sync/workers/upload.d.ts +1 -1
- package/dist/sync/workers/upload.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/mcp/server.d.ts
CHANGED
|
@@ -13,11 +13,14 @@
|
|
|
13
13
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
14
14
|
import type { McpConnectionRecord } from "./types.js";
|
|
15
15
|
import type { McpDataReadClient } from "./read-client.js";
|
|
16
|
+
import { type PersonalServerReadReporterDeps } from "../api/index.js";
|
|
16
17
|
import type { McpActivityRecorder, McpActivityStatus } from "./activity.js";
|
|
17
18
|
export interface HandleMcpRequestOptions {
|
|
18
19
|
connection: McpConnectionRecord;
|
|
19
20
|
readClient: McpDataReadClient;
|
|
20
21
|
activityRecorder?: McpActivityRecorder;
|
|
22
|
+
/** Emits one access record per denied data tool call; see reportToolDenial. */
|
|
23
|
+
reporterDeps?: PersonalServerReadReporterDeps;
|
|
21
24
|
serverName?: string;
|
|
22
25
|
serverVersion?: string;
|
|
23
26
|
}
|
|
@@ -49,5 +52,19 @@ export declare function createMcpServerForConnection(options: HandleMcpRequestOp
|
|
|
49
52
|
* Returns a Web `Response` suitable to send back to the client.
|
|
50
53
|
*/
|
|
51
54
|
export declare function handleMcpStreamableHttpRequest(request: Request, options: HandleMcpRequestOptions): Promise<Response>;
|
|
55
|
+
/**
|
|
56
|
+
* True when every JSON-RPC message in `body` is one this file can answer
|
|
57
|
+
* without the owner's data — see `HANDSHAKE_METHODS`. A batch qualifies only
|
|
58
|
+
* as a whole, so a tool call travelling with a handshake still reaches the
|
|
59
|
+
* owner's server.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isMcpHandshake(body: unknown): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Answer a handshake request from the static tool table. Same server identity,
|
|
64
|
+
* same registered surface and same transport as the full engine, so the bytes
|
|
65
|
+
* match what a dispatched call returns; the tool handlers are unreachable
|
|
66
|
+
* because no handshake method invokes one.
|
|
67
|
+
*/
|
|
68
|
+
export declare function handleMcpHandshake(request: Request): Promise<Response>;
|
|
52
69
|
export {};
|
|
53
70
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,SAAS,EAEV,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,SAAS,EAEV,MAAM,yCAAyC,CAAC;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAQ1D,OAAO,EAGL,KAAK,8BAA8B,EACpC,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAM5E,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,8BAA8B,CAAC;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAuQD,UAAU,sBAAsB;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,UAAU,qBAAsB,SAAQ,sBAAsB;IAC5D,MAAM,EAAE,OAAO,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC9C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,uBAAuB,GAC/B;IACD,MAAM,EAAE,SAAS,CAAC;IAClB,uBAAuB,CACrB,QAAQ,CAAC,EAAE,IAAI,CACb,qBAAqB,EACrB,QAAQ,GAAG,WAAW,GAAG,cAAc,CACxC,GACA,IAAI,CAAC;CACT,CAoHA;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,QAAQ,CAAC,CAsBnB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAarD;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6B5E"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -12,10 +12,30 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { McpServer, ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
14
14
|
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
|
|
15
|
-
import { MAX_MCP_TOOL_TIMEOUT_MS, MCP_TOOLS, } from "./tools.js";
|
|
15
|
+
import { MAX_MCP_TOOL_TIMEOUT_MS, MCP_TOOLS, resolveGrantForScope, } from "./tools.js";
|
|
16
|
+
import { READ_FULFILLMENT_NONE, reportPersonalServerReadDenial, } from "../api/index.js";
|
|
16
17
|
import { RAW_SCOPE_RESOURCE_TEMPLATES, readRawScopeResource, } from "./resources.js";
|
|
17
18
|
const DEFAULT_SERVER_NAME = "vana-personal-server-mcp";
|
|
18
19
|
const DEFAULT_SERVER_VERSION = "0.0.1";
|
|
20
|
+
/** Stateless: no MCP session id is issued and POST answers with JSON, not SSE. */
|
|
21
|
+
const TRANSPORT_OPTIONS = {
|
|
22
|
+
sessionIdGenerator: undefined,
|
|
23
|
+
enableJsonResponse: true,
|
|
24
|
+
};
|
|
25
|
+
/** Methods whose answer is the same for every connection: the tool table is a
|
|
26
|
+
* static constant and no session is retained. e.g. a fresh remote connector
|
|
27
|
+
* probes with initialize + notifications/initialized + tools/list. */
|
|
28
|
+
const HANDSHAKE_METHODS = new Set([
|
|
29
|
+
"initialize",
|
|
30
|
+
"notifications/initialized",
|
|
31
|
+
"ping",
|
|
32
|
+
"tools/list",
|
|
33
|
+
]);
|
|
34
|
+
const RAW_SCOPE_RESOURCE_CONFIG = {
|
|
35
|
+
title: "Raw scope file",
|
|
36
|
+
description: "Original binary/unstructured file bytes for an approved Vana scope.",
|
|
37
|
+
mimeType: "application/octet-stream",
|
|
38
|
+
};
|
|
19
39
|
const DEFAULT_MCP_TOOL_TIMEOUT_MS = 30_000;
|
|
20
40
|
const MCP_TOOL_TIMEOUT_GRACE_MS = 1_000;
|
|
21
41
|
const QUERY_PREVIEW_CHARS = 120;
|
|
@@ -79,6 +99,88 @@ function buildActivityStartParams(tool, args) {
|
|
|
79
99
|
}
|
|
80
100
|
return params;
|
|
81
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Tools that reach the owner's data. Only these produce access records — the
|
|
104
|
+
* discovery tools (`list_granted_*`, `request_scope_access`) touch none.
|
|
105
|
+
*/
|
|
106
|
+
const DATA_TOOLS = new Set([
|
|
107
|
+
"get_scope_file",
|
|
108
|
+
"list_scope_blocks",
|
|
109
|
+
"read_scope",
|
|
110
|
+
"search_personal_context",
|
|
111
|
+
]);
|
|
112
|
+
/**
|
|
113
|
+
* Tool error codes that mean "the read was refused", as opposed to a failure
|
|
114
|
+
* (timeout, storage error). Only these are worth an access record: they are
|
|
115
|
+
* decisions about the grantee's access, not incidents.
|
|
116
|
+
*/
|
|
117
|
+
const DENY_CODES = new Set([
|
|
118
|
+
"payment_required",
|
|
119
|
+
"scope_deleted",
|
|
120
|
+
"scope_not_granted",
|
|
121
|
+
"unauthorized",
|
|
122
|
+
]);
|
|
123
|
+
const PAYMENT_REQUIRED_CODE = "payment_required";
|
|
124
|
+
/**
|
|
125
|
+
* Extract the deny code from a tool result, or undefined when the call was
|
|
126
|
+
* served or failed for a non-deny reason. `read_scope` signals a chargeable
|
|
127
|
+
* scope with a top-level `payment_required: true` rather than an error code.
|
|
128
|
+
*/
|
|
129
|
+
function denyCode(result) {
|
|
130
|
+
if (!result.isError)
|
|
131
|
+
return undefined;
|
|
132
|
+
const first = result.content[0];
|
|
133
|
+
if (first?.type !== "text")
|
|
134
|
+
return undefined;
|
|
135
|
+
let body;
|
|
136
|
+
try {
|
|
137
|
+
body = JSON.parse(first.text);
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
if (typeof body.error === "string" && DENY_CODES.has(body.error)) {
|
|
143
|
+
return body.error;
|
|
144
|
+
}
|
|
145
|
+
return body[PAYMENT_REQUIRED_CODE] === true
|
|
146
|
+
? PAYMENT_REQUIRED_CODE
|
|
147
|
+
: undefined;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* One access record per denied data tool call. Fire-and-forget by contract:
|
|
151
|
+
* the tool result is already computed and is returned regardless.
|
|
152
|
+
*/
|
|
153
|
+
function reportToolDenial(options, tool, args, result) {
|
|
154
|
+
if (!options.reporterDeps || !DATA_TOOLS.has(tool))
|
|
155
|
+
return;
|
|
156
|
+
const reason = denyCode(result);
|
|
157
|
+
if (!reason)
|
|
158
|
+
return;
|
|
159
|
+
// The denied scope, if the call named one; a multi-scope search records the
|
|
160
|
+
// first, since the owner's decision is one record per tool call.
|
|
161
|
+
const scope = buildActivityStartParams(tool, args).scopes?.[0] ?? READ_FULFILLMENT_NONE;
|
|
162
|
+
// A refusal is filed under the grant the call arrived on. A scope no grant
|
|
163
|
+
// covers has no grant of its own, but the connection's grant is the access
|
|
164
|
+
// relationship the owner's feed groups by — and the Gateway only stores a
|
|
165
|
+
// 32-byte grant id, so `READ_FULFILLMENT_NONE` here is refused on ingest and
|
|
166
|
+
// takes its whole batch down with it. A connection left with no grant at all
|
|
167
|
+
// has nothing to attribute the refusal to, so it reports nothing.
|
|
168
|
+
const grantId = resolveGrantForScope(options.connection, scope)?.grantId ??
|
|
169
|
+
options.connection.grants[0]?.grantId;
|
|
170
|
+
if (!grantId)
|
|
171
|
+
return;
|
|
172
|
+
reportPersonalServerReadDenial(options.reporterDeps, {
|
|
173
|
+
builder: options.connection.granteeAddress,
|
|
174
|
+
denyReason: reason,
|
|
175
|
+
grantId,
|
|
176
|
+
logId: crypto.randomUUID(),
|
|
177
|
+
outcome: "denied",
|
|
178
|
+
scope,
|
|
179
|
+
servedAt: new Date().toISOString(),
|
|
180
|
+
source: "mcp",
|
|
181
|
+
tool,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
82
184
|
function extractActivityFinishParams(tool, result) {
|
|
83
185
|
if (result.isError || result.content.length === 0) {
|
|
84
186
|
try {
|
|
@@ -174,6 +276,14 @@ function markResponsePreparing(recorder, activityId, finish) {
|
|
|
174
276
|
errorMessage: finish.errorMessage,
|
|
175
277
|
});
|
|
176
278
|
}
|
|
279
|
+
/** What a client sees of a tool in `tools/list`: owner-independent metadata. */
|
|
280
|
+
function toolConfig(tool) {
|
|
281
|
+
return {
|
|
282
|
+
title: tool.title,
|
|
283
|
+
description: tool.description,
|
|
284
|
+
inputSchema: tool.inputSchema,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
177
287
|
/**
|
|
178
288
|
* Build a fresh `McpServer` instance bound to a single connection + read
|
|
179
289
|
* client. Tools delegate to `MCP_TOOLS` so the surface stays in one place.
|
|
@@ -190,11 +300,7 @@ export function createMcpServerForConnection(options) {
|
|
|
190
300
|
activityRecorder: options.activityRecorder,
|
|
191
301
|
};
|
|
192
302
|
for (const tool of MCP_TOOLS) {
|
|
193
|
-
server.registerTool(tool.name, {
|
|
194
|
-
title: tool.title,
|
|
195
|
-
description: tool.description,
|
|
196
|
-
inputSchema: tool.inputSchema,
|
|
197
|
-
}, async (args) => {
|
|
303
|
+
server.registerTool(tool.name, toolConfig(tool), async (args) => {
|
|
198
304
|
const recorder = options.activityRecorder;
|
|
199
305
|
const activityId = recorder
|
|
200
306
|
? recorder.start(buildActivityStartParams(tool.name, args))
|
|
@@ -203,6 +309,7 @@ export function createMcpServerForConnection(options) {
|
|
|
203
309
|
try {
|
|
204
310
|
const timeoutMs = toolTimeoutMs(tool.name, args);
|
|
205
311
|
const result = await withToolTimeout(tool.handler(args, ctx), tool.name, timeoutMs);
|
|
312
|
+
reportToolDenial(options, tool.name, args, result);
|
|
206
313
|
if (activityId && recorder) {
|
|
207
314
|
const handlerDurationMs = Math.round(performance.now() - handlerStartedAt);
|
|
208
315
|
const payload = extractActivityFinishParams(tool.name, result);
|
|
@@ -257,11 +364,7 @@ export function createMcpServerForConnection(options) {
|
|
|
257
364
|
});
|
|
258
365
|
}
|
|
259
366
|
RAW_SCOPE_RESOURCE_TEMPLATES.forEach((template, index) => {
|
|
260
|
-
server.registerResource(`raw-scope-file-${index}`, new ResourceTemplate(template, { list: undefined }),
|
|
261
|
-
title: "Raw scope file",
|
|
262
|
-
description: "Original binary/unstructured file bytes for an approved Vana scope.",
|
|
263
|
-
mimeType: "application/octet-stream",
|
|
264
|
-
}, async (uri) => readRawScopeResource(uri, ctx));
|
|
367
|
+
server.registerResource(`raw-scope-file-${index}`, new ResourceTemplate(template, { list: undefined }), RAW_SCOPE_RESOURCE_CONFIG, async (uri) => readRawScopeResource(uri, ctx));
|
|
265
368
|
});
|
|
266
369
|
function finishPendingActivities(override) {
|
|
267
370
|
for (const [activityId, finish] of pendingActivityFinishes) {
|
|
@@ -282,10 +385,7 @@ export function createMcpServerForConnection(options) {
|
|
|
282
385
|
*/
|
|
283
386
|
export async function handleMcpStreamableHttpRequest(request, options) {
|
|
284
387
|
const { server, finishPendingActivities } = createMcpServerForConnection(options);
|
|
285
|
-
const transport = new WebStandardStreamableHTTPServerTransport(
|
|
286
|
-
sessionIdGenerator: undefined,
|
|
287
|
-
enableJsonResponse: true,
|
|
288
|
-
});
|
|
388
|
+
const transport = new WebStandardStreamableHTTPServerTransport(TRANSPORT_OPTIONS);
|
|
289
389
|
try {
|
|
290
390
|
await server.connect(transport);
|
|
291
391
|
const response = await transport.handleRequest(request);
|
|
@@ -304,4 +404,43 @@ export async function handleMcpStreamableHttpRequest(request, options) {
|
|
|
304
404
|
await Promise.allSettled([transport.close(), server.close()]);
|
|
305
405
|
}
|
|
306
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* True when every JSON-RPC message in `body` is one this file can answer
|
|
409
|
+
* without the owner's data — see `HANDSHAKE_METHODS`. A batch qualifies only
|
|
410
|
+
* as a whole, so a tool call travelling with a handshake still reaches the
|
|
411
|
+
* owner's server.
|
|
412
|
+
*/
|
|
413
|
+
export function isMcpHandshake(body) {
|
|
414
|
+
const messages = Array.isArray(body) ? body : [body];
|
|
415
|
+
return (messages.length > 0 &&
|
|
416
|
+
messages.every((message) => !!message &&
|
|
417
|
+
typeof message === "object" &&
|
|
418
|
+
HANDSHAKE_METHODS.has(message.method)));
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Answer a handshake request from the static tool table. Same server identity,
|
|
422
|
+
* same registered surface and same transport as the full engine, so the bytes
|
|
423
|
+
* match what a dispatched call returns; the tool handlers are unreachable
|
|
424
|
+
* because no handshake method invokes one.
|
|
425
|
+
*/
|
|
426
|
+
export async function handleMcpHandshake(request) {
|
|
427
|
+
const server = new McpServer({
|
|
428
|
+
name: DEFAULT_SERVER_NAME,
|
|
429
|
+
version: DEFAULT_SERVER_VERSION,
|
|
430
|
+
});
|
|
431
|
+
const unreachable = () => {
|
|
432
|
+
throw new Error("Handshake server cannot serve data");
|
|
433
|
+
};
|
|
434
|
+
for (const tool of MCP_TOOLS)
|
|
435
|
+
server.registerTool(tool.name, toolConfig(tool), unreachable);
|
|
436
|
+
RAW_SCOPE_RESOURCE_TEMPLATES.forEach((template, index) => server.registerResource(`raw-scope-file-${index}`, new ResourceTemplate(template, { list: undefined }), RAW_SCOPE_RESOURCE_CONFIG, unreachable));
|
|
437
|
+
const transport = new WebStandardStreamableHTTPServerTransport(TRANSPORT_OPTIONS);
|
|
438
|
+
try {
|
|
439
|
+
await server.connect(transport);
|
|
440
|
+
return await transport.handleRequest(request);
|
|
441
|
+
}
|
|
442
|
+
finally {
|
|
443
|
+
await Promise.allSettled([transport.close(), server.close()]);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
307
446
|
//# sourceMappingURL=server.js.map
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/mcp/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,kBAAkB,EAElB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/mcp/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAEV,kBAAkB,EAElB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAGpB,wBAAgB,gCAAgC,IAAI,kBAAkB,CAqDrE;AAED,wBAAgB,wCAAwC,IAAI,0BAA0B,CAiDrF"}
|
package/dist/mcp/store.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* `packages/lite/src/mcp-store.ts` (not part of this change set yet) — that
|
|
8
8
|
* adapter mirrors `createIndexedDbPsLiteTokenStore()`.
|
|
9
9
|
*/
|
|
10
|
+
import { isMcpTokenExpired, matchesMcpRefreshHash } from "./token-expiry.js";
|
|
10
11
|
export function createInMemoryMcpConnectionStore() {
|
|
11
12
|
const byId = new Map();
|
|
12
13
|
const byTokenHash = new Map(); // tokenHash → id
|
|
@@ -34,8 +35,16 @@ export function createInMemoryMcpConnectionStore() {
|
|
|
34
35
|
return null;
|
|
35
36
|
if (record.status !== "approved")
|
|
36
37
|
return null;
|
|
38
|
+
if (isMcpTokenExpired(record))
|
|
39
|
+
return null;
|
|
37
40
|
return { ...record };
|
|
38
41
|
},
|
|
42
|
+
async getByRefreshTokenHash(refreshTokenHash) {
|
|
43
|
+
// Scanned, not indexed: a presented token may match either the current
|
|
44
|
+
// or the rotated-out hash, and a store holds a handful of connections.
|
|
45
|
+
const record = Array.from(byId.values()).find((candidate) => matchesMcpRefreshHash(candidate, refreshTokenHash));
|
|
46
|
+
return record ? { ...record } : null;
|
|
47
|
+
},
|
|
39
48
|
async update(id, patch) {
|
|
40
49
|
const record = byId.get(id);
|
|
41
50
|
if (!record)
|
package/dist/mcp/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/mcp/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/mcp/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifetime and lookup policy for the two MCP OAuth credentials — one policy,
|
|
3
|
+
* shared by every store that resolves a token, so the fleet and local paths
|
|
4
|
+
* cannot diverge.
|
|
5
|
+
*/
|
|
6
|
+
import type { McpConnectionRecord } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* 1 h. Short because the bearer is replayable and the store cannot revoke an
|
|
9
|
+
* already-issued one; the refresh grant below is what keeps the owner from
|
|
10
|
+
* re-consenting hourly.
|
|
11
|
+
*/
|
|
12
|
+
export declare const MCP_TOKEN_TTL_MS: number;
|
|
13
|
+
/**
|
|
14
|
+
* 7 d. The refresh token is single-use and rotates on every exchange, so its
|
|
15
|
+
* lifetime bounds how long a connection survives without the owner touching
|
|
16
|
+
* it — not how long a leaked credential is usable. A week keeps an abandoned
|
|
17
|
+
* connection from lingering a month; an owner who uses the connection weekly
|
|
18
|
+
* never re-consents.
|
|
19
|
+
*/
|
|
20
|
+
export declare const MCP_REFRESH_TTL_MS: number;
|
|
21
|
+
/** ISO expiry for an access token minted at `nowMs`. */
|
|
22
|
+
export declare function mcpTokenExpiry(nowMs: number): string;
|
|
23
|
+
/** ISO expiry for a refresh token minted at `nowMs`. */
|
|
24
|
+
export declare function mcpRefreshExpiry(nowMs: number): string;
|
|
25
|
+
/**
|
|
26
|
+
* Fail closed. A record written before `tokenExpiresAt` existed carries no
|
|
27
|
+
* proven lifetime, so it reads as expired: connections issued before this
|
|
28
|
+
* change need one re-consent rather than living forever.
|
|
29
|
+
*/
|
|
30
|
+
export declare function isMcpTokenExpired(record: Pick<McpConnectionRecord, "tokenExpiresAt">, nowMs?: number): boolean;
|
|
31
|
+
/** Fail closed, same rule: no proven lifetime means no refresh. */
|
|
32
|
+
export declare function isMcpRefreshExpired(record: Pick<McpConnectionRecord, "refreshExpiresAt">, nowMs?: number): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* True when `hash` is this record's current or rotated-out refresh hash. Every
|
|
35
|
+
* store resolves a refresh token through this one predicate.
|
|
36
|
+
*/
|
|
37
|
+
export declare function matchesMcpRefreshHash(record: Pick<McpConnectionRecord, "refreshTokenHash" | "previousRefreshTokenHash">, hash: string): boolean;
|
|
38
|
+
//# sourceMappingURL=token-expiry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-expiry.d.ts","sourceRoot":"","sources":["../../src/mcp/token-expiry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAiB,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,QAA0B,CAAC;AAE1D,wDAAwD;AACxD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,EACnD,KAAK,GAAE,MAAmB,GACzB,OAAO,CAET;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,EACrD,KAAK,GAAE,MAAmB,GACzB,OAAO,CAET;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,IAAI,CACV,mBAAmB,EACnB,kBAAkB,GAAG,0BAA0B,CAChD,EACD,IAAI,EAAE,MAAM,GACX,OAAO,CAMT"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lifetime and lookup policy for the two MCP OAuth credentials — one policy,
|
|
3
|
+
* shared by every store that resolves a token, so the fleet and local paths
|
|
4
|
+
* cannot diverge.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 1 h. Short because the bearer is replayable and the store cannot revoke an
|
|
8
|
+
* already-issued one; the refresh grant below is what keeps the owner from
|
|
9
|
+
* re-consenting hourly.
|
|
10
|
+
*/
|
|
11
|
+
export const MCP_TOKEN_TTL_MS = 60 * 60 * 1000;
|
|
12
|
+
/**
|
|
13
|
+
* 7 d. The refresh token is single-use and rotates on every exchange, so its
|
|
14
|
+
* lifetime bounds how long a connection survives without the owner touching
|
|
15
|
+
* it — not how long a leaked credential is usable. A week keeps an abandoned
|
|
16
|
+
* connection from lingering a month; an owner who uses the connection weekly
|
|
17
|
+
* never re-consents.
|
|
18
|
+
*/
|
|
19
|
+
export const MCP_REFRESH_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
20
|
+
/** ISO expiry for an access token minted at `nowMs`. */
|
|
21
|
+
export function mcpTokenExpiry(nowMs) {
|
|
22
|
+
return new Date(nowMs + MCP_TOKEN_TTL_MS).toISOString();
|
|
23
|
+
}
|
|
24
|
+
/** ISO expiry for a refresh token minted at `nowMs`. */
|
|
25
|
+
export function mcpRefreshExpiry(nowMs) {
|
|
26
|
+
return new Date(nowMs + MCP_REFRESH_TTL_MS).toISOString();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Fail closed. A record written before `tokenExpiresAt` existed carries no
|
|
30
|
+
* proven lifetime, so it reads as expired: connections issued before this
|
|
31
|
+
* change need one re-consent rather than living forever.
|
|
32
|
+
*/
|
|
33
|
+
export function isMcpTokenExpired(record, nowMs = Date.now()) {
|
|
34
|
+
return isExpired(record.tokenExpiresAt, nowMs);
|
|
35
|
+
}
|
|
36
|
+
/** Fail closed, same rule: no proven lifetime means no refresh. */
|
|
37
|
+
export function isMcpRefreshExpired(record, nowMs = Date.now()) {
|
|
38
|
+
return isExpired(record.refreshExpiresAt, nowMs);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* True when `hash` is this record's current or rotated-out refresh hash. Every
|
|
42
|
+
* store resolves a refresh token through this one predicate.
|
|
43
|
+
*/
|
|
44
|
+
export function matchesMcpRefreshHash(record, hash) {
|
|
45
|
+
if (!hash)
|
|
46
|
+
return false;
|
|
47
|
+
return (record.refreshTokenHash === hash || record.previousRefreshTokenHash === hash);
|
|
48
|
+
}
|
|
49
|
+
function isExpired(expiresAt, nowMs) {
|
|
50
|
+
if (!expiresAt)
|
|
51
|
+
return true;
|
|
52
|
+
const expiry = Date.parse(expiresAt);
|
|
53
|
+
return !Number.isFinite(expiry) || expiry <= nowMs;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=token-expiry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-expiry.js","sourceRoot":"","sources":["../../src/mcp/token-expiry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1D,wDAAwD;AACxD,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;AAC1D,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAmD,EACnD,QAAgB,IAAI,CAAC,GAAG,EAAE;IAE1B,OAAO,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,mBAAmB,CACjC,MAAqD,EACrD,QAAgB,IAAI,CAAC,GAAG,EAAE;IAE1B,OAAO,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAGC,EACD,IAAY;IAEZ,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAExB,OAAO,CACL,MAAM,CAAC,gBAAgB,KAAK,IAAI,IAAI,MAAM,CAAC,wBAAwB,KAAK,IAAI,CAC7E,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,SAA6B,EAAE,KAAa;IAC7D,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC;AACrD,CAAC"}
|
package/dist/mcp/tools.d.ts
CHANGED
|
@@ -66,5 +66,19 @@ export interface McpToolDefinition {
|
|
|
66
66
|
* results plus nextSearchCursor" path the tools implement.
|
|
67
67
|
*/
|
|
68
68
|
export declare const MAX_MCP_TOOL_TIMEOUT_MS = 90000;
|
|
69
|
+
/**
|
|
70
|
+
* Resolve a concrete requested scope to a covering grant id from the
|
|
71
|
+
* connection's approved grants. A scope is "covered" when an approved grant's
|
|
72
|
+
* scopes either contains the exact scope or contains a wildcard like
|
|
73
|
+
* `instagram.*` that matches a concrete child scope like `instagram.profile`.
|
|
74
|
+
*
|
|
75
|
+
* Mirrors `scopeCoveredByGrant` semantics from `policy/data-read.ts` so the
|
|
76
|
+
* tool surface never offers Claude a scope its grant won't actually pass
|
|
77
|
+
* server-side.
|
|
78
|
+
*/
|
|
79
|
+
export declare function resolveGrantForScope(connection: McpConnectionRecord, scope: string): {
|
|
80
|
+
grantId: string;
|
|
81
|
+
scopes: string[];
|
|
82
|
+
} | null;
|
|
69
83
|
export declare const MCP_TOOLS: readonly McpToolDefinition[];
|
|
70
84
|
//# sourceMappingURL=tools.d.ts.map
|
package/dist/mcp/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AASzD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;CACxC;AAED,MAAM,MAAM,oBAAoB,GAC5B;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;CACH,CAAC;AAEN,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAG5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,OAAO,CACL,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AASzD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,mBAAmB,CAAC;IAChC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;CACxC;AAED,MAAM,MAAM,oBAAoB,GAC5B;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,CAAC;CACH,CAAC;AAEN,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAG5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,OAAO,CACL,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3B;AAqGD;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAuD9C;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,mBAAmB,EAC/B,KAAK,EAAE,MAAM,GACZ;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAkB9C;AAw9CD,eAAO,MAAM,SAAS,EAAE,SAAS,iBAAiB,EAQxC,CAAC"}
|
package/dist/mcp/tools.js
CHANGED
|
@@ -14,6 +14,9 @@ import { McpDataReadError } from "./read-client.js";
|
|
|
14
14
|
import { MiniSearchIndex } from "./search/index.js";
|
|
15
15
|
import { MAX_SELECTED_BLOCK_IDS } from "../storage/blocks/index.js";
|
|
16
16
|
import { rawScopeFileInputSchema, rawScopeMetadata, rawScopeResourceUri, } from "./resources.js";
|
|
17
|
+
/** Tool names the read path stamps onto access records. */
|
|
18
|
+
const READ_SCOPE_TOOL = "read_scope";
|
|
19
|
+
const SEARCH_PERSONAL_CONTEXT_TOOL = "search_personal_context";
|
|
17
20
|
const STRUCTURED_CONTENT_TEXT_LIMIT_BYTES = 64 * 1024;
|
|
18
21
|
const resultTextEncoder = new TextEncoder();
|
|
19
22
|
/**
|
|
@@ -178,7 +181,7 @@ class OperationTimeoutError extends Error {
|
|
|
178
181
|
* tool surface never offers Claude a scope its grant won't actually pass
|
|
179
182
|
* server-side.
|
|
180
183
|
*/
|
|
181
|
-
function resolveGrantForScope(connection, scope) {
|
|
184
|
+
export function resolveGrantForScope(connection, scope) {
|
|
182
185
|
for (const grant of connection.grants) {
|
|
183
186
|
for (const granted of grant.scopes) {
|
|
184
187
|
if (granted === scope) {
|
|
@@ -563,7 +566,7 @@ const requestScopeAccess = {
|
|
|
563
566
|
},
|
|
564
567
|
};
|
|
565
568
|
const readScope = {
|
|
566
|
-
name:
|
|
569
|
+
name: READ_SCOPE_TOOL,
|
|
567
570
|
title: "Read scope",
|
|
568
571
|
description: "Read approved scope blocks. Pass blockIds to fetch exact blocks; otherwise page with nextCursor.",
|
|
569
572
|
inputSchema: {
|
|
@@ -642,6 +645,7 @@ const readScope = {
|
|
|
642
645
|
cursor,
|
|
643
646
|
maxBytes,
|
|
644
647
|
payment,
|
|
648
|
+
tool: READ_SCOPE_TOOL,
|
|
645
649
|
...(blockIds.length > 0 ? { blockIds } : {}),
|
|
646
650
|
}), timeoutMs, `read blocks for ${scope}`);
|
|
647
651
|
const nextCursor = result.nextCursor ?? null;
|
|
@@ -845,7 +849,7 @@ function decodeSearchCursor(raw) {
|
|
|
845
849
|
}
|
|
846
850
|
}
|
|
847
851
|
const searchPersonalContext = {
|
|
848
|
-
name:
|
|
852
|
+
name: SEARCH_PERSONAL_CONTEXT_TOOL,
|
|
849
853
|
title: "Search personal context",
|
|
850
854
|
description: "Search approved scopes. Omit scopes for default sweep; name scopes for targeted search. Continue with nextSearchCursor. Free discovery/preview — it does not settle payments; chargeable scopes are returned in paymentRequiredScopes, fetch those via read_scope with a `payment` proof.",
|
|
851
855
|
inputSchema: {
|
|
@@ -1010,6 +1014,7 @@ const searchPersonalContext = {
|
|
|
1010
1014
|
grantId: grant.grantId,
|
|
1011
1015
|
cursor,
|
|
1012
1016
|
maxBytes,
|
|
1017
|
+
tool: SEARCH_PERSONAL_CONTEXT_TOOL,
|
|
1013
1018
|
}), perScopeTimeoutMs, `read blocks for ${scope}`);
|
|
1014
1019
|
const pageText = blockPageSearchText(result.blocks);
|
|
1015
1020
|
const { documents, textById } = blockPageSearchDocuments(scope, result.blocks);
|