@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.
- package/CHANGELOG.md +90 -0
- package/README.md +9 -8
- package/SECURITY.md +5 -11
- package/dist/auth/downstream-oauth.d.ts +15 -6
- package/dist/auth/downstream-oauth.d.ts.map +1 -1
- package/dist/auth/downstream-oauth.js +60 -11
- package/dist/auth/downstream-oauth.js.map +1 -1
- package/dist/catalog-service.d.ts +8 -0
- package/dist/catalog-service.d.ts.map +1 -1
- package/dist/catalog-service.js +24 -2
- package/dist/catalog-service.js.map +1 -1
- package/dist/catalog.d.ts +34 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +264 -40
- package/dist/catalog.js.map +1 -1
- package/dist/connectors/remote-mcp.d.ts +1 -1
- package/dist/connectors/remote-mcp.d.ts.map +1 -1
- package/dist/connectors/remote-mcp.js +65 -50
- package/dist/connectors/remote-mcp.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +1 -0
- package/dist/errors.js.map +1 -1
- package/dist/execute.d.ts +3 -1
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +50 -13
- package/dist/execute.js.map +1 -1
- package/dist/meta-tools.d.ts +1 -1
- package/dist/meta-tools.d.ts.map +1 -1
- package/dist/meta-tools.js +19 -17
- package/dist/meta-tools.js.map +1 -1
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +63 -44
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/oauth.js +1 -1
- package/dist/routes/oauth.js.map +1 -1
- package/dist/routes/shared.d.ts +2 -2
- package/dist/routes/shared.d.ts.map +1 -1
- package/dist/skills.d.ts +2 -2
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +7 -7
- package/dist/skills.js.map +1 -1
- package/dist/types.d.ts +6 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -2
- package/src/auth/downstream-oauth.ts +106 -24
- package/src/catalog-service.ts +43 -0
- package/src/catalog.ts +327 -33
- package/src/connectors/remote-mcp.ts +96 -64
- package/src/errors.ts +2 -0
- package/src/execute.ts +55 -12
- package/src/meta-tools.ts +22 -18
- package/src/routes/mcp.ts +70 -44
- package/src/routes/oauth.ts +1 -1
- package/src/routes/shared.ts +2 -2
- package/src/skills.ts +7 -7
- package/src/types.ts +10 -2
- 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
|
|
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
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
|
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
|
|
83
|
-
|
|
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 (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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 +=
|
|
97
|
-
else if (doc.name.startsWith(phrase))
|
|
98
|
-
score +=
|
|
99
|
-
else if (doc.name
|
|
100
|
-
score +=
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
score +=
|
|
106
|
-
else if (
|
|
107
|
-
score +=
|
|
108
|
-
|
|
109
|
-
|
|
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
|
package/dist/catalog.js.map
CHANGED
|
@@ -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/
|
|
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":"
|
|
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/
|
|
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 =
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
460
|
-
//
|
|
461
|
-
//
|
|
462
|
-
|
|
463
|
-
|
|
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
|
-
//
|
|
675
|
-
//
|
|
676
|
-
|
|
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
|
-
|
|
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
|
-
},
|
|
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
|
-
|
|
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);
|