@zackbart/connecta 0.8.1 → 0.9.1

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 (60) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +9 -8
  3. package/SECURITY.md +5 -11
  4. package/dist/auth/downstream-oauth.d.ts +15 -6
  5. package/dist/auth/downstream-oauth.d.ts.map +1 -1
  6. package/dist/auth/downstream-oauth.js +60 -11
  7. package/dist/auth/downstream-oauth.js.map +1 -1
  8. package/dist/catalog-service.d.ts +8 -0
  9. package/dist/catalog-service.d.ts.map +1 -1
  10. package/dist/catalog-service.js +24 -2
  11. package/dist/catalog-service.js.map +1 -1
  12. package/dist/catalog.d.ts +34 -1
  13. package/dist/catalog.d.ts.map +1 -1
  14. package/dist/catalog.js +264 -40
  15. package/dist/catalog.js.map +1 -1
  16. package/dist/connectors/remote-mcp.d.ts +1 -1
  17. package/dist/connectors/remote-mcp.d.ts.map +1 -1
  18. package/dist/connectors/remote-mcp.js +65 -50
  19. package/dist/connectors/remote-mcp.js.map +1 -1
  20. package/dist/errors.d.ts +1 -1
  21. package/dist/errors.d.ts.map +1 -1
  22. package/dist/errors.js +1 -0
  23. package/dist/errors.js.map +1 -1
  24. package/dist/execute.d.ts +3 -1
  25. package/dist/execute.d.ts.map +1 -1
  26. package/dist/execute.js +50 -13
  27. package/dist/execute.js.map +1 -1
  28. package/dist/meta-tools.d.ts +1 -1
  29. package/dist/meta-tools.d.ts.map +1 -1
  30. package/dist/meta-tools.js +19 -17
  31. package/dist/meta-tools.js.map +1 -1
  32. package/dist/routes/mcp.d.ts.map +1 -1
  33. package/dist/routes/mcp.js +63 -44
  34. package/dist/routes/mcp.js.map +1 -1
  35. package/dist/routes/oauth.js +1 -1
  36. package/dist/routes/oauth.js.map +1 -1
  37. package/dist/routes/shared.d.ts +2 -2
  38. package/dist/routes/shared.d.ts.map +1 -1
  39. package/dist/skills.d.ts +2 -2
  40. package/dist/skills.d.ts.map +1 -1
  41. package/dist/skills.js +7 -7
  42. package/dist/skills.js.map +1 -1
  43. package/dist/types.d.ts +6 -2
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/version.d.ts +1 -1
  46. package/dist/version.js +1 -1
  47. package/package.json +3 -2
  48. package/src/auth/downstream-oauth.ts +106 -24
  49. package/src/catalog-service.ts +43 -0
  50. package/src/catalog.ts +327 -33
  51. package/src/connectors/remote-mcp.ts +96 -64
  52. package/src/errors.ts +2 -0
  53. package/src/execute.ts +55 -12
  54. package/src/meta-tools.ts +22 -18
  55. package/src/routes/mcp.ts +70 -44
  56. package/src/routes/oauth.ts +1 -1
  57. package/src/routes/shared.ts +2 -2
  58. package/src/skills.ts +7 -7
  59. package/src/types.ts +10 -2
  60. package/src/version.ts +1 -1
package/dist/catalog.js CHANGED
@@ -9,8 +9,18 @@ export function summarizeDescription(text, full) {
9
9
  return compact;
10
10
  return `${compact.slice(0, DEFAULT_DESCRIPTION_LENGTH - 1).trimEnd()}…`;
11
11
  }
12
+ function lexicalTokens(text) {
13
+ return text
14
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2")
15
+ .replace(/([a-z0-9])([A-Z])/g, "$1 $2")
16
+ .toLowerCase()
17
+ .replace(/[^a-z0-9]+/g, " ")
18
+ .trim()
19
+ .split(/\s+/)
20
+ .filter(Boolean);
21
+ }
12
22
  function normalized(text) {
13
- return text.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
23
+ return lexicalTokens(text).join(" ");
14
24
  }
15
25
  /**
16
26
  * Conversational framing selected by the #188 research run before the #189
@@ -63,60 +73,182 @@ export function lexicalSearchQuery(query) {
63
73
  const contentTerms = terms.filter((term) => !CONVERSATIONAL_QUERY_WORDS.has(term));
64
74
  return contentTerms.length > 0 ? contentTerms.join(" ") : query;
65
75
  }
66
- const searchDocuments = new WeakMap();
76
+ const searchIndexes = new WeakMap();
77
+ function indexFor(tools) {
78
+ let index = searchIndexes.get(tools);
79
+ if (!index) {
80
+ const nameTokenDocuments = new Map();
81
+ const descriptionTokenDocuments = new Map();
82
+ const addTokens = (target, tokens, tool) => {
83
+ for (const token of new Set(tokens)) {
84
+ const documents = target.get(token) ?? [];
85
+ documents.push(tool);
86
+ target.set(token, documents);
87
+ }
88
+ };
89
+ const documents = tools.map((tool) => {
90
+ const nameTokens = lexicalTokens(tool.name);
91
+ const descriptionTokens = lexicalTokens(tool.description ?? "");
92
+ addTokens(nameTokenDocuments, nameTokens, tool);
93
+ addTokens(descriptionTokenDocuments, descriptionTokens, tool);
94
+ return {
95
+ tool,
96
+ name: nameTokens.join(" "),
97
+ nameTokens,
98
+ descriptionTokens,
99
+ };
100
+ });
101
+ index = {
102
+ documents,
103
+ nameTokenDocuments,
104
+ descriptionTokenDocuments,
105
+ };
106
+ searchIndexes.set(tools, index);
107
+ }
108
+ return index;
109
+ }
67
110
  function documentsFor(tools) {
68
- let docs = searchDocuments.get(tools);
69
- if (!docs) {
70
- docs = tools.map((tool) => ({
71
- tool,
72
- name: normalized(tool.name),
73
- description: normalized(tool.description ?? ""),
74
- }));
75
- searchDocuments.set(tools, docs);
111
+ return indexFor(tools).documents;
112
+ }
113
+ /**
114
+ * Whole-token equality is the ordinary lexical match. A deliberately narrow
115
+ * inflection check retains useful singular/plural and past-tense recall
116
+ * without bringing back arbitrary substring matches (`list` must not match
117
+ * `enlist`, and `record` must not match the noun `recording`).
118
+ */
119
+ function inflectionVariants(base) {
120
+ return [
121
+ `${base}s`,
122
+ `${base}es`,
123
+ `${base}ed`,
124
+ ...(base.endsWith("e") ? [`${base}d`] : []),
125
+ ...(base.endsWith("y")
126
+ ? [
127
+ `${base.slice(0, -1)}ies`,
128
+ `${base.slice(0, -1)}ied`,
129
+ ]
130
+ : []),
131
+ ];
132
+ }
133
+ function matchingTokenCandidates(term) {
134
+ const candidates = new Set([term, ...inflectionVariants(term)]);
135
+ const possibleBases = [
136
+ ...(term.endsWith("s") ? [term.slice(0, -1)] : []),
137
+ ...(term.endsWith("es") ? [term.slice(0, -2)] : []),
138
+ ...(term.endsWith("ed") ? [term.slice(0, -2)] : []),
139
+ ...(term.endsWith("d") ? [term.slice(0, -1)] : []),
140
+ ...(term.endsWith("ies")
141
+ ? [`${term.slice(0, -3)}y`]
142
+ : []),
143
+ ...(term.endsWith("ied")
144
+ ? [`${term.slice(0, -3)}y`]
145
+ : []),
146
+ ];
147
+ for (const base of possibleBases) {
148
+ if (base && inflectionVariants(base).includes(term)) {
149
+ candidates.add(base);
150
+ }
76
151
  }
77
- return docs;
152
+ return candidates;
153
+ }
154
+ /**
155
+ * Compute query-specific document frequencies across every available catalog.
156
+ * The caller does this once per search and shares the result with each
157
+ * connector rank, so ubiquitous words contribute less than discriminative
158
+ * ones without making any action word a stopword.
159
+ */
160
+ export function lexicalCorpusStatistics(toolSets, query) {
161
+ const terms = [...new Set(lexicalTokens(query))];
162
+ if (terms.length === 0) {
163
+ return {
164
+ documentCount: toolSets.reduce((total, tools) => total + tools.length, 0),
165
+ documentFrequency: new Map(),
166
+ nameMatches: new Map(),
167
+ descriptionMatches: new Map(),
168
+ };
169
+ }
170
+ const nameMatches = new Map();
171
+ const descriptionMatches = new Map();
172
+ for (const term of terms) {
173
+ const termNameMatches = new Set();
174
+ const termDescriptionMatches = new Set();
175
+ for (const tools of toolSets) {
176
+ const index = indexFor(tools);
177
+ for (const candidate of matchingTokenCandidates(term)) {
178
+ for (const tool of index.nameTokenDocuments.get(candidate) ?? []) {
179
+ termNameMatches.add(tool);
180
+ }
181
+ for (const tool of index.descriptionTokenDocuments.get(candidate) ?? []) {
182
+ termDescriptionMatches.add(tool);
183
+ }
184
+ }
185
+ }
186
+ nameMatches.set(term, termNameMatches);
187
+ descriptionMatches.set(term, termDescriptionMatches);
188
+ }
189
+ const documentFrequency = new Map(terms.map((term) => [
190
+ term,
191
+ new Set([
192
+ ...(nameMatches.get(term) ?? []),
193
+ ...(descriptionMatches.get(term) ?? []),
194
+ ]).size,
195
+ ]));
196
+ return {
197
+ documentCount: toolSets.reduce((total, tools) => total + tools.length, 0),
198
+ documentFrequency,
199
+ nameMatches,
200
+ descriptionMatches,
201
+ };
202
+ }
203
+ function inverseDocumentFrequency(term, statistics) {
204
+ const frequency = statistics.documentFrequency.get(term) ?? 0;
205
+ return Math.log(1 +
206
+ (statistics.documentCount - frequency + 0.5) /
207
+ (frequency + 0.5));
78
208
  }
79
- function scoreDocument(doc, phrase, terms, mode) {
209
+ function scoreDocument(doc, phrase, terms, mode, statistics) {
80
210
  if (!phrase)
81
211
  return 0;
82
- const haystack = `${doc.name} ${doc.description}`;
83
- const matchedTerms = terms.filter((term) => haystack.includes(term));
212
+ const matchedTerms = terms.filter((term) => statistics.nameMatches.get(term)?.has(doc.tool) ||
213
+ statistics.descriptionMatches.get(term)?.has(doc.tool));
84
214
  if (mode === "all" && matchedTerms.length !== terms.length)
85
215
  return null;
86
- if (mode === "partial") {
87
- if (matchedTerms.length === 0)
88
- return null;
89
- const nameMatches = matchedTerms.filter((term) => doc.name.includes(term)).length;
90
- // Coverage wins first, then the number of those terms found in the tool
91
- // name. Catalog order breaks the remaining ties at the caller.
92
- return matchedTerms.length * 1_000 + nameMatches;
93
- }
94
- let score = 0;
216
+ if (matchedTerms.length === 0)
217
+ return null;
218
+ // Coverage remains meaningful in partial mode, but is IDF-weighted rather
219
+ // than a raw term count: one rare domain term can beat several ubiquitous
220
+ // catalog verbs.
221
+ let score = matchedTerms.reduce((total, term) => total + 4 * inverseDocumentFrequency(term, statistics), 0);
222
+ const phraseWeight = terms.reduce((total, term) => total + inverseDocumentFrequency(term, statistics), 0);
95
223
  if (doc.name === phrase)
96
- score += 1_000;
97
- else if (doc.name.startsWith(phrase))
98
- score += 800;
99
- else if (doc.name.includes(phrase))
100
- score += 600;
101
- for (const term of terms) {
102
- if (doc.name === term)
103
- score += 200;
104
- else if (doc.name.startsWith(term))
105
- score += 120;
106
- else if (doc.name.includes(term))
107
- score += 80;
108
- if (doc.description.includes(term))
109
- score += 10;
224
+ score += 40 * phraseWeight;
225
+ else if (doc.name.startsWith(`${phrase} `))
226
+ score += 24 * phraseWeight;
227
+ else if (` ${doc.name} `.includes(` ${phrase} `)) {
228
+ score += 16 * phraseWeight;
229
+ }
230
+ for (const term of matchedTerms) {
231
+ const weight = inverseDocumentFrequency(term, statistics);
232
+ if (doc.nameTokens.includes(term))
233
+ score += 12 * weight;
234
+ else if (statistics.nameMatches.get(term)?.has(doc.tool)) {
235
+ score += 8 * weight;
236
+ }
237
+ if (doc.descriptionTokens.includes(term))
238
+ score += 3 * weight;
239
+ else if (statistics.descriptionMatches.get(term)?.has(doc.tool)) {
240
+ score += 1.5 * weight;
241
+ }
110
242
  }
111
243
  return score;
112
244
  }
113
245
  /** Rank a connector's tools while caching its normalized plain-data index. */
114
- export function rankTools(tools, query, mode = "all") {
246
+ export function rankTools(tools, query, mode = "all", statistics = lexicalCorpusStatistics([tools], query)) {
115
247
  const phrase = normalized(query);
116
- const terms = phrase.split(/\s+/).filter(Boolean);
248
+ const terms = [...new Set(phrase.split(/\s+/).filter(Boolean))];
117
249
  const ranked = [];
118
250
  documentsFor(tools).forEach((doc, order) => {
119
- const score = scoreDocument(doc, phrase, terms, mode);
251
+ const score = scoreDocument(doc, phrase, terms, mode, statistics);
120
252
  if (score !== null)
121
253
  ranked.push({ tool: doc.tool, score, order });
122
254
  });
@@ -263,4 +395,96 @@ export function compactSchema(schema) {
263
395
  compactSchemas.set(schema, rendered);
264
396
  return rendered;
265
397
  }
398
+ /**
399
+ * Walk a schema the way renderSchema does — composing `allOf` and resolving
400
+ * `$ref` against the root's `$defs`/`definitions` — and collect the top-level
401
+ * property names it would render. A shallow `Object.keys(schema.properties)`
402
+ * disagrees with the rendered compact schema for exactly the shapes real
403
+ * connectors emit (a top-level `$ref` to a `$defs` entry, or the OpenAPI
404
+ * "extend this base" `allOf`), which is worse than no metadata at all: it
405
+ * reports an empty field list for a tool that plainly has fields.
406
+ *
407
+ * Returns undefined when the schema is not an object shape at all — a union,
408
+ * array, enum, or unresolvable `$ref`. Absent metadata tells a caller to read
409
+ * the rendered schema instead; an empty array would claim the tool takes no
410
+ * fields.
411
+ */
412
+ export function schemaObjectKeys(schema) {
413
+ if (!schema)
414
+ return undefined;
415
+ const defs = {
416
+ ...schema.$defs,
417
+ ...schema.definitions,
418
+ };
419
+ try {
420
+ return objectKeys(schema, defs, new Set(), 0);
421
+ }
422
+ catch {
423
+ return undefined;
424
+ }
425
+ }
426
+ /** Merge in declaration order, first occurrence winning, as renderSchema renders. */
427
+ function mergedKeys(parts) {
428
+ if (parts.length === 0)
429
+ return undefined;
430
+ return {
431
+ properties: [...new Set(parts.flatMap((part) => part.properties))],
432
+ required: [...new Set(parts.flatMap((part) => part.required))],
433
+ };
434
+ }
435
+ /** The key-collecting twin of renderSchema; the branch order must match it. */
436
+ function objectKeys(schema, defs, seen, depth) {
437
+ if (depth > 4)
438
+ return undefined;
439
+ if (schema === null || typeof schema !== "object")
440
+ return undefined;
441
+ const s = schema;
442
+ if (Array.isArray(s.allOf)) {
443
+ const { allOf: _members, ...own } = s;
444
+ const parts = declaresShape(own)
445
+ ? [objectKeys(own, defs, seen, depth)]
446
+ : [];
447
+ for (const member of s.allOf) {
448
+ parts.push(objectKeys(member, defs, seen, depth + 1));
449
+ }
450
+ // An allOf whose members are not all object shapes renders as an
451
+ // intersection with a non-object half; no single key list describes it.
452
+ return parts.every((part) => part !== undefined)
453
+ ? mergedKeys(parts)
454
+ : undefined;
455
+ }
456
+ if (typeof s.$ref === "string") {
457
+ const name = refName(s.$ref);
458
+ if (seen.has(name))
459
+ return undefined;
460
+ const target = defs[name];
461
+ if (target === undefined)
462
+ return undefined;
463
+ seen.add(name);
464
+ const resolved = objectKeys(target, defs, seen, depth);
465
+ seen.delete(name);
466
+ return resolved;
467
+ }
468
+ if (Array.isArray(s.oneOf ?? s.anyOf))
469
+ return undefined;
470
+ if (Array.isArray(s.enum))
471
+ return undefined;
472
+ if (s.const !== undefined)
473
+ return undefined;
474
+ if (s.type === "array" || s.items)
475
+ return undefined;
476
+ if (s.type === "object" || s.properties) {
477
+ const props = s.properties;
478
+ if (props === null || Array.isArray(props) || typeof props !== "object") {
479
+ return { properties: [], required: [] };
480
+ }
481
+ return {
482
+ properties: Object.keys(props),
483
+ required: Array.isArray(s.required)
484
+ ? s.required.filter((key) => typeof key === "string")
485
+ : [],
486
+ };
487
+ }
488
+ return undefined;
489
+ }
266
490
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { FetchLike, Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
1
+ import type { FetchLike, Transport } from "@modelcontextprotocol/client";
2
2
  import { ConnectorCallError } from "../errors.js";
3
3
  import type { Connector, ConnectorCallAdmissionPolicy, ConnectorContext, Logger } from "../types.js";
4
4
  export type RemoteMcpAuth = {
@@ -1 +1 @@
1
- {"version":3,"file":"remote-mcp.d.ts","sourceRoot":"","sources":["../../src/connectors/remote-mcp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACV,MAAM,+CAA+C,CAAC;AAMvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EACV,SAAS,EACT,4BAA4B,EAC5B,gBAAgB,EAEhB,MAAM,EAEP,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,aAAa,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,4BAA4B,CAAC;IAC7C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,SAAS,CAAC;CAC1D;AAgMD,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAW1C,qBAAa,sBAAuB,SAAQ,kBAAkB;gBAChD,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAOhD;AAeD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,uBAAgC,EACxC,SAAS,GAAE,SAAiB,GAC3B,SAAS,CA2EX;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,SAAS,CAonBvE"}
1
+ {"version":3,"file":"remote-mcp.d.ts","sourceRoot":"","sources":["../../src/connectors/remote-mcp.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,SAAS,EAIT,SAAS,EACV,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EACV,SAAS,EACT,4BAA4B,EAC5B,gBAAgB,EAEhB,MAAM,EAEP,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtB,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,aAAa,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,4BAA4B,CAAC;IAC7C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,SAAS,CAAC;CAC1D;AA8LD,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAW1C,qBAAa,sBAAuB,SAAQ,kBAAkB;gBAChD,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAOhD;AAeD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,GAAE,uBAAgC,EACxC,SAAS,GAAE,SAAiB,GAC3B,SAAS,CA2EX;AAyBD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,SAAS,CA0oBvE"}
@@ -1,9 +1,4 @@
1
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
- import { UnauthorizedError } from "@modelcontextprotocol/sdk/client/auth.js";
3
- import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
4
- import { ListToolsResultSchema } from "@modelcontextprotocol/sdk/types.js";
5
- import { CfWorkerJsonSchemaValidator } from "@modelcontextprotocol/sdk/validation/cfworker";
6
- import { z } from "zod";
1
+ import { Client, isInputRequiredResult, specTypeSchemas, StreamableHTTPClientTransport, UnauthorizedError, } from "@modelcontextprotocol/client";
7
2
  import { KvOAuthProvider } from "../auth/downstream-oauth.js";
8
3
  import { MAX_CATALOG_TOOLS } from "../catalog-limits.js";
9
4
  import { ConnectorCallError } from "../errors.js";
@@ -57,32 +52,25 @@ const MAX_TOOL_PAGES = 10_000;
57
52
  * end-of-pagination as `null`. Only the cursor is widened; every tool and every
58
53
  * other result field still passes through the SDK's pinned schema.
59
54
  */
60
- const CompatibleListToolsResultSchema = ListToolsResultSchema.extend({
61
- nextCursor: z.string().nullable().optional(),
62
- });
63
- /**
64
- * Re-prime an SDK client's tool-metadata cache from the *full* walked catalog.
65
- *
66
- * The SDK's `Client.listTools()` caches one page at a time and **clears** the
67
- * output-schema validators and task-support sets before each replacement.
68
- * This walk uses `Client.request()` so it can make the narrow null-cursor
69
- * compatibility concession above, then primes the metadata exactly once from
70
- * the complete chain. Otherwise `callTool` would find no validator or task
71
- * requirement for earlier-page tools and enforcement would depend on where a
72
- * tool happened to land, which is not enforcement.
73
- *
74
- * So hand the whole aggregated list back deliberately, once, at the end. The
75
- * SDK types the method `private`, hence the cast; the SDK version is pinned
76
- * exactly and `test/remote-mcp-pagination.test.ts` asserts the method still
77
- * exists, so a bump that renames it fails CI rather than quietly restoring the
78
- * bug.
79
- */
80
- function primeToolMetadata(client, tools) {
81
- const prime = client.cacheToolMetadata;
82
- if (typeof prime !== "function")
83
- return;
84
- prime.call(client, tools);
85
- }
55
+ const CompatibleListToolsResultSchema = {
56
+ "~standard": {
57
+ version: 1,
58
+ vendor: "connecta",
59
+ validate(value) {
60
+ const normalized = typeof value === "object" &&
61
+ value !== null &&
62
+ "nextCursor" in value &&
63
+ value.nextCursor === null
64
+ ? (() => {
65
+ const copy = { ...value };
66
+ delete copy.nextCursor;
67
+ return copy;
68
+ })()
69
+ : value;
70
+ return specTypeSchemas.ListToolsResult["~standard"].validate(normalized);
71
+ },
72
+ },
73
+ };
86
74
  /**
87
75
  * True for a result-parse failure caused by the page's `nextCursor` itself.
88
76
  * `null` is accepted deliberately; other non-string values remain a named
@@ -92,11 +80,16 @@ function primeToolMetadata(client, tools) {
92
80
  */
93
81
  function isCursorShapeError(err) {
94
82
  const issues = err?.issues;
95
- return (Array.isArray(issues) &&
83
+ if (Array.isArray(issues) &&
96
84
  issues.some((issue) => {
97
85
  const path = issue.path;
98
86
  return Array.isArray(path) && path[0] === "nextCursor";
99
- }));
87
+ })) {
88
+ return true;
89
+ }
90
+ // SDK v2 wraps Standard Schema failures in a ProtocolError and preserves the
91
+ // failing path in the message rather than exposing the validator's issues.
92
+ return msg(err).startsWith("Invalid result for tools/list: nextCursor:");
100
93
  }
101
94
  function msg(err) {
102
95
  return err instanceof Error ? err.message : String(err);
@@ -336,6 +329,7 @@ export function remoteMcp(id, opts) {
336
329
  state = {
337
330
  client: null,
338
331
  transport: null,
332
+ toolDefinitions: new Map(),
339
333
  connecting: null,
340
334
  authRequired: false,
341
335
  provider: null,
@@ -357,10 +351,6 @@ export function remoteMcp(id, opts) {
357
351
  const url = new URL(opts.url);
358
352
  const guardedFetch = redirectSafeFetch(id, opts.redirects);
359
353
  if (opts.auth?.type === "oauth") {
360
- // The SDK class declares `sessionId` as an own `string | undefined`
361
- // property while its Transport interface declares it optional. They are
362
- // runtime-compatible; exact optional types only exposes that declaration
363
- // mismatch at this boundary.
364
354
  return new StreamableHTTPClientTransport(url, {
365
355
  authProvider: provider ?? newProvider(ctx),
366
356
  fetch: guardedFetch,
@@ -375,6 +365,7 @@ export function remoteMcp(id, opts) {
375
365
  const reset = (state) => {
376
366
  state.client = null;
377
367
  state.transport = null;
368
+ state.toolDefinitions.clear();
378
369
  state.connecting = null;
379
370
  state.authRequired = false;
380
371
  state.provider = null;
@@ -456,11 +447,15 @@ export function remoteMcp(id, opts) {
456
447
  throw operatorDisconnectedError();
457
448
  }
458
449
  provider?.captureGeneration(genAtStart);
459
- // The SDK defaults to AJV, which compiles every advertised outputSchema
460
- // with `new Function`. Cloudflare Workers prohibit dynamic code
461
- // generation, so a remote such as Stripe fails during tools/list unless
462
- // the SDK's edge-safe validator is selected explicitly.
463
- const c = new Client({ name: "connecta", version: CONNECTA_VERSION }, { jsonSchemaValidator: new CfWorkerJsonSchemaValidator() });
450
+ // SDK v2 selects its validator by runtime export condition: AJV on
451
+ // Node and @cfworker/json-schema under workerd. The Workers-safe path
452
+ // no longer needs Connecta-specific wiring.
453
+ const c = new Client({ name: "connecta", version: CONNECTA_VERSION }, {
454
+ versionNegotiation: { mode: "auto" },
455
+ // Connecta has no interactive relay. Surface the result manually
456
+ // below as one structured, non-retryable connector failure.
457
+ inputRequired: { autoFulfill: false },
458
+ });
464
459
  const t = buildTransport(ctx, provider);
465
460
  if (!ownsAttempt())
466
461
  await abandon(t);
@@ -671,9 +666,9 @@ export function remoteMcp(id, opts) {
671
666
  if (!complete) {
672
667
  throw new Error(`Connector "${id}" kept advertising more tools/list pages after ${MAX_TOOL_PAGES} — refusing to page further.`);
673
668
  }
674
- // Repair what the per-page listTools calls left behind before any of
675
- // these tools can be called. See primeToolMetadata.
676
- primeToolMetadata(client, listed);
669
+ // Publish definitions only after the full walk succeeds. A later-page
670
+ // failure must not leave a partial validation/header view behind.
671
+ state.toolDefinitions = new Map(listed.map((tool) => [tool.name, tool]));
677
672
  return listed.map((t) => ({
678
673
  name: t.name,
679
674
  ...(t.description !== undefined ? { description: t.description } : {}),
@@ -699,10 +694,24 @@ export function remoteMcp(id, opts) {
699
694
  await ensureConnected(ctx, state);
700
695
  const client = state.client;
701
696
  try {
702
- return await client.callTool({
697
+ const toolDefinition = state.toolDefinitions.get(name);
698
+ if (toolDefinition?.execution?.taskSupport === "required") {
699
+ throw new Error(`Tool "${name}" requires task-based execution, which Connecta does not support.`);
700
+ }
701
+ const result = await client.callTool({
703
702
  name,
704
703
  arguments: (args ?? {}),
705
- }, undefined, requestOptions(ctx));
704
+ }, {
705
+ ...requestOptions(ctx),
706
+ allowInputRequired: true,
707
+ ...(toolDefinition ? { toolDefinition } : {}),
708
+ });
709
+ if (isInputRequiredResult(result)) {
710
+ throw new ConnectorCallError("input_required_unsupported", `Connector "${id}" returned input_required for "${name}". ` +
711
+ "Connecta cannot relay multi-round-trip input yet; this " +
712
+ "capability is gated pending real host and downstream adoption.");
713
+ }
714
+ return result;
706
715
  }
707
716
  catch (err) {
708
717
  // A grant revoked after connect surfaces here, not in ensureConnected.
@@ -729,6 +738,7 @@ export function remoteMcp(id, opts) {
729
738
  const transport = state.transport;
730
739
  state.client = null;
731
740
  state.transport = null;
741
+ state.toolDefinitions.clear();
732
742
  state.connecting = null;
733
743
  state.authRequired = false;
734
744
  state.connectedGeneration = null;
@@ -768,7 +778,7 @@ export function remoteMcp(id, opts) {
768
778
  return { state: "error", message: msg(err) };
769
779
  }
770
780
  },
771
- async finishAuth(code, ctx) {
781
+ async finishAuth(code, ctx, callbackParams) {
772
782
  const state = stateFor(ctx);
773
783
  const provider = getProvider(ctx, state);
774
784
  // verifyState ran on this request-scoped provider first and captured the
@@ -776,7 +786,12 @@ export function remoteMcp(id, opts) {
776
786
  // token write remains tagged with that older generation and is unreadable.
777
787
  const t = (state.transport ??
778
788
  buildTransport(ctx, provider));
779
- await t.finishAuth(code);
789
+ if (callbackParams !== undefined) {
790
+ await t.finishAuth(callbackParams);
791
+ }
792
+ else {
793
+ await t.finishAuth(code);
794
+ }
780
795
  await provider.clearPending();
781
796
  // Reset so the next use reconnects with the freshly stored tokens.
782
797
  reset(state);