@mcp-index/sdk 0.18.1 → 0.19.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +178 -0
  3. package/dist/src/ai.d.ts +96 -0
  4. package/dist/src/ai.d.ts.map +1 -0
  5. package/dist/src/ai.js +151 -0
  6. package/dist/src/ai.js.map +1 -0
  7. package/dist/src/lock/check.d.ts +143 -0
  8. package/dist/src/lock/check.d.ts.map +1 -0
  9. package/dist/src/lock/check.js +274 -0
  10. package/dist/src/lock/check.js.map +1 -0
  11. package/dist/src/lock/digest.d.ts +48 -0
  12. package/dist/src/lock/digest.d.ts.map +1 -0
  13. package/dist/src/lock/digest.js +234 -0
  14. package/dist/src/lock/digest.js.map +1 -0
  15. package/dist/src/lock/events.d.ts +82 -0
  16. package/dist/src/lock/events.d.ts.map +1 -0
  17. package/dist/src/lock/events.js +80 -0
  18. package/dist/src/lock/events.js.map +1 -0
  19. package/dist/src/lock/index.d.ts +20 -0
  20. package/dist/src/lock/index.d.ts.map +1 -0
  21. package/dist/src/lock/index.js +14 -0
  22. package/dist/src/lock/index.js.map +1 -0
  23. package/dist/src/lock/lock.d.ts +195 -0
  24. package/dist/src/lock/lock.d.ts.map +1 -0
  25. package/dist/src/lock/lock.js +1075 -0
  26. package/dist/src/lock/lock.js.map +1 -0
  27. package/dist/src/lock/pg.d.ts +150 -0
  28. package/dist/src/lock/pg.d.ts.map +1 -0
  29. package/dist/src/lock/pg.js +539 -0
  30. package/dist/src/lock/pg.js.map +1 -0
  31. package/dist/src/lock/rawList.d.ts +127 -0
  32. package/dist/src/lock/rawList.d.ts.map +1 -0
  33. package/dist/src/lock/rawList.js +561 -0
  34. package/dist/src/lock/rawList.js.map +1 -0
  35. package/dist/src/lock/signing.d.ts +35 -0
  36. package/dist/src/lock/signing.d.ts.map +1 -0
  37. package/dist/src/lock/signing.js +85 -0
  38. package/dist/src/lock/signing.js.map +1 -0
  39. package/dist/src/lock/store.d.ts +149 -0
  40. package/dist/src/lock/store.d.ts.map +1 -0
  41. package/dist/src/lock/store.js +459 -0
  42. package/dist/src/lock/store.js.map +1 -0
  43. package/package.json +31 -2
@@ -0,0 +1,459 @@
1
+ /**
2
+ * LockStore: where a host gets its lock snapshot and where approvals land.
3
+ *
4
+ * A snapshot is frozen and carries a snapshotId, so a decision can name the
5
+ * lock state it came from. loadSnapshot never throws for a bad lock: a lock
6
+ * failure comes back as a LockError inside the snapshot, and the check then
7
+ * withholds everything. It may throw when the store itself cannot be reached;
8
+ * hosts treat that as lock-unreadable.
9
+ *
10
+ * The file store reads `.mcp/` once per load (see lock.ts). Approvals and
11
+ * revocations take the existing create-excl file lock on `.mcp/lock.lck`
12
+ * (fileLock.ts), write the contract, then replace the shard (and the manifest,
13
+ * when one exists) by rename from a temporary file in `.mcp/`, so `.mcp/lock`
14
+ * never holds a partial file.
15
+ */
16
+ import { closeSync, constants, fsyncSync, lstatSync, openSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeSync } from "node:fs";
17
+ import { randomBytes } from "node:crypto";
18
+ import { basename, dirname, isAbsolute, join, parse, resolve, sep } from "node:path";
19
+ import { canonicalBody, instructionsDigest, metaDigest, toolDigest } from "./digest.js";
20
+ import { FrozenMap, LockError, MANIFEST, VIA, formatManifest, formatShard, identityKey, loadLock, loadLockSync, readLockDir, shardFilename, validateIdentity, } from "./lock.js";
21
+ import { withExclusiveLock } from "../fileLock.js";
22
+ import { sigstoreVerifier } from "./signing.js";
23
+ export function nowRfc3339(date = new Date()) {
24
+ return date.toISOString().replace(/\.[0-9]{3}Z$/, "Z");
25
+ }
26
+ export function snapshotOfError(error, loadedAt = Date.now()) {
27
+ return Object.freeze({ snapshotId: `error:${error.reason}`, loadedAt, lock: error });
28
+ }
29
+ export function prepareTool(tool) {
30
+ if (tool === null || typeof tool !== "object" || Array.isArray(tool))
31
+ throw new Error("tool must be an object");
32
+ const name = Object.getOwnPropertyDescriptor(tool, "name")?.value;
33
+ if (typeof name !== "string")
34
+ throw new Error("tool has no string name");
35
+ const digest = toolDigest(tool);
36
+ const body = canonicalBody(tool);
37
+ if (digest === null || body === null)
38
+ throw new Error(`tool ${JSON.stringify(name)} has no digest; it cannot be approved`);
39
+ return { name, digest, contract: `sha256-${digest.slice("sha256:".length)}.json`, body, metaDigest: metaDigest(tool) };
40
+ }
41
+ export function checkApprovalFields(request, subject) {
42
+ if (!VIA.includes(request.via))
43
+ throw new Error(`unknown via ${String(request.via)}`);
44
+ if (typeof subject !== "string" || subject.length === 0)
45
+ throw new Error("approval needs a subject");
46
+ const at = request.at ?? nowRfc3339();
47
+ if (!/^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]+)?(Z|[+-][0-9]{2}:[0-9]{2})$/.test(at)) {
48
+ throw new Error("approval time is not RFC 3339");
49
+ }
50
+ if (request.ref !== undefined && typeof request.ref !== "string")
51
+ throw new Error("ref must be a string");
52
+ return request.ref !== undefined
53
+ ? Object.freeze({ subject, at, via: request.via, ref: request.ref })
54
+ : Object.freeze({ subject, at, via: request.via });
55
+ }
56
+ /**
57
+ * A host-owned file holding the sequence as ASCII digits and a newline, the
58
+ * format the Python host writes to its sequence_path. A missing file is no
59
+ * record; a file that is not a regular file or does not hold digits throws.
60
+ */
61
+ export function fileSequenceStore(path) {
62
+ const full = resolve(path);
63
+ return {
64
+ read() {
65
+ let st;
66
+ try {
67
+ st = lstatSync(full);
68
+ }
69
+ catch (exc) {
70
+ if (exc.code === "ENOENT")
71
+ return null;
72
+ throw new Error("last accepted sequence is unreadable");
73
+ }
74
+ if (!st.isFile())
75
+ throw new Error("last accepted sequence is not a regular file");
76
+ let raw;
77
+ try {
78
+ raw = readFileSync(full);
79
+ }
80
+ catch {
81
+ throw new Error("last accepted sequence is unreadable");
82
+ }
83
+ if (raw.some((b) => b > 0x7f))
84
+ throw new Error("last accepted sequence is unreadable");
85
+ const text = raw.toString("latin1").trim();
86
+ if (!/^[0-9]+$/.test(text))
87
+ throw new Error("last accepted sequence is not an integer");
88
+ const n = Number(text);
89
+ if (!Number.isSafeInteger(n))
90
+ throw new Error("last accepted sequence is not an integer");
91
+ return n;
92
+ },
93
+ write(sequence) {
94
+ writeAtomic(dirname(full), full, Buffer.from(`${sequence}\n`, "ascii"), basename(full));
95
+ },
96
+ };
97
+ }
98
+ // Host configuration paths ---------------------------------------------------
99
+ /** A host configuration the host must not run with. Thrown when a store is constructed. */
100
+ export class HostConfigError extends Error {
101
+ constructor(message) {
102
+ super(message);
103
+ this.name = "HostConfigError";
104
+ }
105
+ }
106
+ function exists(path) {
107
+ try {
108
+ lstatSync(path);
109
+ return true;
110
+ }
111
+ catch {
112
+ return false;
113
+ }
114
+ }
115
+ /** (st_dev, st_ino) of what `path` resolves to, or null when it does not resolve. */
116
+ function identity(path) {
117
+ try {
118
+ const st = statSync(path, { bigint: true });
119
+ return `${st.dev}:${st.ino}`;
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ }
125
+ function realpathOrSelf(path) {
126
+ try {
127
+ return realpathSync.native(path);
128
+ }
129
+ catch {
130
+ return path;
131
+ }
132
+ }
133
+ /**
134
+ * One host path walked without lexical normalization (section 8.2, draft
135
+ * 1e). A relative path gets the working directory prefixed as a string, so a
136
+ * `..` is left for the operating system: after a symlink it goes up from the
137
+ * link's target. The longest existing leading part is resolved with
138
+ * realpath(3) and the rest appended only when it holds no `..`.
139
+ */
140
+ function walkHostPath(value) {
141
+ const absolute = isAbsolute(value) ? value : `${process.cwd()}${sep}${value}`;
142
+ const root = parse(absolute).root || sep;
143
+ const parts = absolute.slice(root.length).split(/[\\/]+/).filter((p) => p !== "" && p !== ".");
144
+ const prefixes = [root];
145
+ for (const part of parts) {
146
+ const last = prefixes[prefixes.length - 1];
147
+ prefixes.push(last.endsWith(sep) ? `${last}${part}` : `${last}${sep}${part}`);
148
+ }
149
+ let existing = 0;
150
+ while (existing + 1 < prefixes.length && identity(prefixes[existing + 1]) !== null)
151
+ existing += 1;
152
+ const real = realpathOrSelf(prefixes[existing]);
153
+ const rest = parts.slice(existing);
154
+ if (existing + 1 < prefixes.length && exists(prefixes[existing + 1])) {
155
+ return { refusal: "is a symbolic link that does not resolve", chain: [], resolved: real };
156
+ }
157
+ if (rest.includes(".."))
158
+ return { refusal: "has a .. below the part that exists", chain: [], resolved: real };
159
+ const chain = prefixes.slice(0, existing + 1);
160
+ for (let dir = real;; dir = dirname(dir)) {
161
+ chain.push(dir);
162
+ if (dirname(dir) === dir)
163
+ break;
164
+ }
165
+ return { refusal: null, chain, resolved: rest.length === 0 ? real : join(real, ...rest) };
166
+ }
167
+ /**
168
+ * Where the system puts a host path: realpath of its longest existing part
169
+ * with the rest appended. FileLockStore opens this form, so the file it
170
+ * writes is the one hostPathProblem checked.
171
+ */
172
+ export function resolvedHostPath(value) {
173
+ return walkHostPath(value).resolved;
174
+ }
175
+ /**
176
+ * What a `.git` file points at: "module" when its gitdir lies under
177
+ * `modules` inside a git directory (a submodule), "worktree" when under
178
+ * `worktrees` (a linked worktree), else "unknown".
179
+ */
180
+ function gitFileKind(path) {
181
+ let text;
182
+ try {
183
+ text = readFileSync(path).subarray(0, 4096).toString("utf8");
184
+ }
185
+ catch {
186
+ return "unknown";
187
+ }
188
+ const line = text.split(/\r?\n/)[0] ?? "";
189
+ if (!line.startsWith("gitdir:"))
190
+ return "unknown";
191
+ const target = resolve(dirname(path), line.slice("gitdir:".length).trim());
192
+ const parts = target.split(sep);
193
+ const at = parts.lastIndexOf(".git");
194
+ if (at < 0)
195
+ return "unknown";
196
+ const tail = parts.slice(at + 1);
197
+ if (tail.includes("modules"))
198
+ return "module";
199
+ if (tail[0] === "worktrees")
200
+ return "worktree";
201
+ return "unknown";
202
+ }
203
+ function isDirectory(path) {
204
+ try {
205
+ return statSync(path).isDirectory();
206
+ }
207
+ catch {
208
+ return false;
209
+ }
210
+ }
211
+ /**
212
+ * The repository that holds the lock (section 8.2, draft 1e), walking up
213
+ * from the resolved lock root. A `.git` directory ends the walk, and so does
214
+ * a `.git` file pointing into a git directory's `worktrees/` (a linked
215
+ * worktree's top). Any other `.git` file, a submodule's or one that names
216
+ * neither, is a candidate: the walk goes on so a submodule resolves to its
217
+ * superproject, and the candidate stands when nothing above has a `.git`
218
+ * entry. With no entry at all the repository is the lock root, and only the
219
+ * lock root is protected.
220
+ */
221
+ export function repositoryRoot(lockRoot) {
222
+ const start = resolvedHostPath(lockRoot);
223
+ let candidate = null;
224
+ for (let dir = start;; dir = dirname(dir)) {
225
+ const git = join(dir, ".git");
226
+ if (exists(git)) {
227
+ if (isDirectory(git) || gitFileKind(git) === "worktree")
228
+ return dir;
229
+ candidate ??= dir;
230
+ }
231
+ if (dirname(dir) === dir)
232
+ return candidate ?? start;
233
+ }
234
+ }
235
+ /**
236
+ * Null if every named host path lies outside the repository that holds the
237
+ * lock and the lock root, else what is wrong. Inside means an existing
238
+ * leading part of the path as given, or an ancestor of its resolved form, is
239
+ * the same directory (device and inode) as the repository root or the lock
240
+ * root.
241
+ */
242
+ export function hostPathProblem(lockRoot, paths) {
243
+ const repo = repositoryRoot(lockRoot);
244
+ const roots = new Set([identity(repo), identity(lockRoot)].filter((i) => i !== null));
245
+ for (const [key, value] of Object.entries(paths)) {
246
+ if (value === null || value === undefined)
247
+ continue;
248
+ const { refusal, chain } = walkHostPath(value);
249
+ if (refusal !== null)
250
+ return `${key} ${refusal}`;
251
+ if (chain.some((dir) => roots.has(identity(dir) ?? ""))) {
252
+ return `${key} lies inside the repository that holds the lock (${repo}); whoever writes the lock could choose it`;
253
+ }
254
+ }
255
+ return null;
256
+ }
257
+ function writeAtomic(dir, target, data, prefix = "") {
258
+ const tmp = join(dir, `.${prefix}mcplock-${process.pid}-${randomBytes(6).toString("hex")}.tmp`);
259
+ let flags = constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL;
260
+ if (typeof constants.O_NOFOLLOW === "number")
261
+ flags |= constants.O_NOFOLLOW;
262
+ const fd = openSync(tmp, flags, 0o644);
263
+ try {
264
+ writeSync(fd, data);
265
+ fsyncSync(fd);
266
+ }
267
+ finally {
268
+ closeSync(fd);
269
+ }
270
+ try {
271
+ renameSync(tmp, target);
272
+ }
273
+ catch (exc) {
274
+ try {
275
+ unlinkSync(tmp);
276
+ }
277
+ catch {
278
+ // best effort
279
+ }
280
+ throw exc;
281
+ }
282
+ }
283
+ /** The higher of two sequence floors; null only when both are. */
284
+ export function sequenceFloor(a, b) {
285
+ if (a === null)
286
+ return b;
287
+ if (b === null)
288
+ return a;
289
+ return Math.max(a, b);
290
+ }
291
+ export class FileLockStore {
292
+ #root;
293
+ #config;
294
+ #sequences;
295
+ /** In-memory floor for this store instance; never lowered. */
296
+ #lastSequence = null;
297
+ #now;
298
+ #verifier;
299
+ /** Throws HostConfigError when sequencePath or trustedRootPath lies inside the lock's repository. */
300
+ constructor(options) {
301
+ const problem = hostPathProblem(options.root, {
302
+ sequencePath: options.sequencePath,
303
+ trustedRootPath: options.trustedRootPath,
304
+ });
305
+ if (problem !== null)
306
+ throw new HostConfigError(problem);
307
+ this.#root = options.root;
308
+ this.#config = options;
309
+ // The resolved forms: the files opened are the ones the path rule checked.
310
+ this.#sequences =
311
+ options.sequenceStore ??
312
+ (options.sequencePath !== undefined ? fileSequenceStore(resolvedHostPath(options.sequencePath)) : null);
313
+ this.#verifier =
314
+ options.verifier ??
315
+ (options.trustedRootPath !== undefined
316
+ ? sigstoreVerifier({ trustedRootPath: resolvedHostPath(options.trustedRootPath) })
317
+ : null);
318
+ this.#now = options.now ?? Date.now;
319
+ }
320
+ async loadSnapshot() {
321
+ const signer = this.#config.signer ?? null;
322
+ const loadedAt = this.#now();
323
+ try {
324
+ let last = null;
325
+ if (signer !== null) {
326
+ if (this.#sequences === null) {
327
+ throw new LockError("lock-signature-invalid", "a signer is configured but the host config names no sequence store (sequencePath); rollback cannot be refused");
328
+ }
329
+ let stored;
330
+ try {
331
+ stored = this.#sequences.read();
332
+ }
333
+ catch (exc) {
334
+ throw new LockError("lock-signature-invalid", exc.message ?? "last accepted sequence is unreadable");
335
+ }
336
+ last = sequenceFloor(stored, this.#lastSequence);
337
+ }
338
+ const config = {
339
+ requireManifest: this.#config.requireManifest ?? false,
340
+ signer,
341
+ sequenceStore: this.#sequences !== null,
342
+ verifier: this.#verifier,
343
+ lastSequence: last,
344
+ };
345
+ const loaded = await loadLock(this.#root, config);
346
+ const seq = loaded.lock.sequence;
347
+ if (signer !== null && seq !== null && (last === null || seq > last)) {
348
+ this.#lastSequence = seq;
349
+ try {
350
+ this.#sequences?.write(seq);
351
+ }
352
+ catch {
353
+ // As in the Python host: not recording the new floor weakens rollback
354
+ // protection on the next start; the in-memory floor still holds, and
355
+ // this load is no less trustworthy.
356
+ }
357
+ }
358
+ return Object.freeze({ snapshotId: loaded.snapshotId, loadedAt, lock: loaded.lock });
359
+ }
360
+ catch (exc) {
361
+ if (exc instanceof LockError)
362
+ return snapshotOfError(exc, loadedAt);
363
+ return snapshotOfError(new LockError("lock-unreadable", exc.message ?? "read failed"), loadedAt);
364
+ }
365
+ }
366
+ /** Edit one shard under the file lock. `edit` returns the new shard. */
367
+ #edit(identity, edit) {
368
+ const ident = validateIdentity(identity);
369
+ const mcp = join(this.#root, ".mcp");
370
+ const lockDir = join(mcp, "lock");
371
+ withExclusiveLock(lockDir, () => {
372
+ // A writer refuses to build on a lock it cannot read. Signatures are not
373
+ // checked here; the next signed load verifies whatever was written.
374
+ const current = loadLockSync(this.#root, { requireManifest: false });
375
+ const shard = current.lock.shards.get(identityKey(ident)) ?? null;
376
+ const contractsDir = join(mcp, "contracts");
377
+ const writeContract = (p) => {
378
+ // The contract name is its own digest, so an existing file with that
379
+ // name was already verified by the load above if referenced; rewriting
380
+ // the same bytes is harmless.
381
+ try {
382
+ writeAtomic(contractsDir, join(contractsDir, p.contract), p.body);
383
+ }
384
+ catch (exc) {
385
+ const code = exc.code;
386
+ if (code !== "ENOENT")
387
+ throw exc;
388
+ throw new Error(".mcp/contracts is missing; create it before approving");
389
+ }
390
+ };
391
+ const next = edit(shard, writeContract);
392
+ const name = shardFilename(next.identity);
393
+ const bytes = formatShard(next);
394
+ writeAtomic(mcp, join(lockDir, name), bytes);
395
+ const signer = this.#config.signer ?? null;
396
+ if (current.lock.sequence !== null || this.#config.requireManifest === true || signer !== null) {
397
+ // Same rule as the Python store: write a manifest when one exists or
398
+ // the host requires or signs one. The old signature no longer covers
399
+ // it; re-signing is the signer's job, and a signed host fails closed
400
+ // until then.
401
+ const sequence = current.lock.sequence === null ? 1 : current.lock.sequence + 1;
402
+ writeAtomic(mcp, join(lockDir, MANIFEST), formatManifest(sequence, readLockDir(lockDir)));
403
+ }
404
+ });
405
+ }
406
+ async approve(request) {
407
+ const subject = request.subject;
408
+ if (subject === undefined)
409
+ throw new Error("file store approvals need a subject");
410
+ const approval = checkApprovalFields(request, subject);
411
+ if ("tool" in request) {
412
+ const prepared = prepareTool(request.tool);
413
+ this.#edit(request.identity, (shard, writeContract) => {
414
+ writeContract(prepared);
415
+ const entry = prepared.metaDigest === null
416
+ ? Object.freeze({ digest: prepared.digest, contract: prepared.contract, approval })
417
+ : Object.freeze({ digest: prepared.digest, contract: prepared.contract, metaDigest: prepared.metaDigest, approval });
418
+ const tools = new Map(shard?.tools ?? []);
419
+ tools.set(prepared.name, entry); // Map.set keeps an existing name in place, appends a new one
420
+ return {
421
+ identity: shard?.identity ?? validateIdentity(request.identity),
422
+ attributes: shard?.attributes ?? null,
423
+ instructions: shard?.instructions ?? null,
424
+ tools: new FrozenMap(tools),
425
+ };
426
+ });
427
+ return;
428
+ }
429
+ const digest = instructionsDigest(request.instructions);
430
+ if (digest === null)
431
+ throw new Error("instructions have no digest; they cannot be approved");
432
+ this.#edit(request.identity, (shard) => ({
433
+ identity: shard?.identity ?? validateIdentity(request.identity),
434
+ attributes: shard?.attributes ?? null,
435
+ instructions: digest,
436
+ tools: shard?.tools ?? new FrozenMap([]),
437
+ }));
438
+ }
439
+ async revoke(request) {
440
+ this.#edit(request.identity, (shard) => {
441
+ if (shard === null)
442
+ throw new Error("no shard for this identity");
443
+ if ("tool" in request) {
444
+ if (!shard.tools.has(request.tool))
445
+ throw new Error(`tool ${JSON.stringify(request.tool)} is not approved`);
446
+ const tools = new Map(shard.tools);
447
+ tools.delete(request.tool);
448
+ return { ...shardFields(shard), tools: new FrozenMap(tools) };
449
+ }
450
+ if (shard.instructions === null)
451
+ throw new Error("instructions are not approved");
452
+ return { ...shardFields(shard), instructions: null };
453
+ });
454
+ }
455
+ }
456
+ function shardFields(shard) {
457
+ return { identity: shard.identity, attributes: shard.attributes, instructions: shard.instructions, tools: shard.tools };
458
+ }
459
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/lock/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-index/sdk",
3
- "version": "0.18.1",
3
+ "version": "0.19.0",
4
4
  "description": "Pre-flight MCP tool-contract drift interceptor from mcpindex.ai, the drift-monitored MCP server index. One-line wrap() over an MCP client session that HOLDs a tool call before your agent runs it when the contract drifted from your pin. No credential handling.",
5
5
  "license": "PolyForm-Noncommercial-1.0.0",
6
6
  "author": "Bhartis LLC",
@@ -19,6 +19,18 @@
19
19
  ".": {
20
20
  "types": "./dist/src/index.d.ts",
21
21
  "import": "./dist/src/index.js"
22
+ },
23
+ "./lock": {
24
+ "types": "./dist/src/lock/index.d.ts",
25
+ "import": "./dist/src/lock/index.js"
26
+ },
27
+ "./lock/pg": {
28
+ "types": "./dist/src/lock/pg.d.ts",
29
+ "import": "./dist/src/lock/pg.js"
30
+ },
31
+ "./ai": {
32
+ "types": "./dist/src/ai.d.ts",
33
+ "import": "./dist/src/ai.js"
22
34
  }
23
35
  },
24
36
  "files": [
@@ -49,11 +61,28 @@
49
61
  "agent"
50
62
  ],
51
63
  "peerDependencies": {
52
- "@modelcontextprotocol/sdk": ">=1.0.0 <2"
64
+ "@ai-sdk/mcp": ">=2.0.74 <3",
65
+ "@modelcontextprotocol/sdk": ">=1.0.0 <2",
66
+ "pg": "^8.11.0",
67
+ "sigstore": "^4.1.0"
68
+ },
69
+ "peerDependenciesMeta": {
70
+ "@ai-sdk/mcp": {
71
+ "optional": true
72
+ },
73
+ "pg": {
74
+ "optional": true
75
+ },
76
+ "sigstore": {
77
+ "optional": true
78
+ }
53
79
  },
54
80
  "devDependencies": {
81
+ "@ai-sdk/mcp": "2.0.74",
55
82
  "@modelcontextprotocol/sdk": "^1.29.0",
56
83
  "@types/node": "^25.9.1",
84
+ "ai": "7.0.138",
85
+ "pg": "^8.23.1",
57
86
  "typescript": "^6.0.3"
58
87
  }
59
88
  }