@slashfi/agents-sdk 0.26.2 → 0.27.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/dist/agent-definitions/config.d.ts +44 -0
- package/dist/agent-definitions/config.d.ts.map +1 -0
- package/dist/agent-definitions/config.js +234 -0
- package/dist/agent-definitions/config.js.map +1 -0
- package/dist/cjs/agent-definitions/config.js +237 -0
- package/dist/cjs/agent-definitions/config.js.map +1 -0
- package/dist/cjs/codegen.js +46 -2
- package/dist/cjs/codegen.js.map +1 -1
- package/dist/cjs/index.js +21 -3
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/mcp-client.js +159 -0
- package/dist/cjs/mcp-client.js.map +1 -0
- package/dist/cjs/pkce.js +49 -0
- package/dist/cjs/pkce.js.map +1 -0
- package/dist/cjs/registry-consumer.js +217 -2
- package/dist/cjs/registry-consumer.js.map +1 -1
- package/dist/cjs/server.js +33 -2
- package/dist/cjs/server.js.map +1 -1
- package/dist/codegen.d.ts +25 -0
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +46 -2
- package/dist/codegen.js.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp-client.d.ts +87 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +152 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/pkce.d.ts +29 -0
- package/dist/pkce.d.ts.map +1 -0
- package/dist/pkce.js +44 -0
- package/dist/pkce.js.map +1 -0
- package/dist/registry-consumer.d.ts +4 -0
- package/dist/registry-consumer.d.ts.map +1 -1
- package/dist/registry-consumer.js +216 -2
- package/dist/registry-consumer.js.map +1 -1
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +33 -2
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/src/agent-definitions/config.ts +318 -0
- package/src/codegen.ts +76 -1
- package/src/index.ts +35 -2
- package/src/mcp-client.ts +230 -0
- package/src/pkce.ts +54 -0
- package/src/registry-consumer.ts +257 -2
- package/src/server.ts +49 -2
package/dist/pkce.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PKCE (Proof Key for Code Exchange) utilities.
|
|
3
|
+
*
|
|
4
|
+
* RFC 7636 — used by MCP client OAuth flows to prevent
|
|
5
|
+
* authorization code interception. The code_verifier stays
|
|
6
|
+
* server-side; only the code_challenge is sent through the browser.
|
|
7
|
+
*
|
|
8
|
+
* This ensures auth codes are useless even if they leak into
|
|
9
|
+
* agent context or logs.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Generate a cryptographically random code_verifier.
|
|
13
|
+
* RFC 7636 §4.1: 43–128 characters from [A-Z, a-z, 0-9, -, ., _, ~]
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateCodeVerifier(length?: number): string;
|
|
16
|
+
/**
|
|
17
|
+
* Generate code_challenge from a code_verifier using S256.
|
|
18
|
+
* RFC 7636 §4.2: BASE64URL(SHA256(code_verifier))
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateCodeChallenge(verifier: string): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Generate a PKCE pair (verifier + challenge) in one call.
|
|
23
|
+
*/
|
|
24
|
+
export declare function generatePkcePair(): Promise<{
|
|
25
|
+
codeVerifier: string;
|
|
26
|
+
codeChallenge: string;
|
|
27
|
+
codeChallengeMethod: "S256";
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=pkce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../src/pkce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,SAAK,GAAG,MAAM,CAGxD;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC,CAID"}
|
package/dist/pkce.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PKCE (Proof Key for Code Exchange) utilities.
|
|
3
|
+
*
|
|
4
|
+
* RFC 7636 — used by MCP client OAuth flows to prevent
|
|
5
|
+
* authorization code interception. The code_verifier stays
|
|
6
|
+
* server-side; only the code_challenge is sent through the browser.
|
|
7
|
+
*
|
|
8
|
+
* This ensures auth codes are useless even if they leak into
|
|
9
|
+
* agent context or logs.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Generate a cryptographically random code_verifier.
|
|
13
|
+
* RFC 7636 §4.1: 43–128 characters from [A-Z, a-z, 0-9, -, ., _, ~]
|
|
14
|
+
*/
|
|
15
|
+
export function generateCodeVerifier(length = 64) {
|
|
16
|
+
const bytes = crypto.getRandomValues(new Uint8Array(length));
|
|
17
|
+
return base64urlEncode(bytes).slice(0, length);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Generate code_challenge from a code_verifier using S256.
|
|
21
|
+
* RFC 7636 §4.2: BASE64URL(SHA256(code_verifier))
|
|
22
|
+
*/
|
|
23
|
+
export async function generateCodeChallenge(verifier) {
|
|
24
|
+
const encoder = new TextEncoder();
|
|
25
|
+
const digest = await crypto.subtle.digest("SHA-256", encoder.encode(verifier));
|
|
26
|
+
return base64urlEncode(new Uint8Array(digest));
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate a PKCE pair (verifier + challenge) in one call.
|
|
30
|
+
*/
|
|
31
|
+
export async function generatePkcePair() {
|
|
32
|
+
const codeVerifier = generateCodeVerifier();
|
|
33
|
+
const codeChallenge = await generateCodeChallenge(codeVerifier);
|
|
34
|
+
return { codeVerifier, codeChallenge, codeChallengeMethod: "S256" };
|
|
35
|
+
}
|
|
36
|
+
// ============================================
|
|
37
|
+
// Helpers
|
|
38
|
+
// ============================================
|
|
39
|
+
/** Base64url encode without padding (RFC 4648 §5) */
|
|
40
|
+
function base64urlEncode(bytes) {
|
|
41
|
+
const binStr = Array.from(bytes, (b) => String.fromCharCode(b)).join("");
|
|
42
|
+
return btoa(binStr).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=pkce.js.map
|
package/dist/pkce.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pkce.js","sourceRoot":"","sources":["../src/pkce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAM,GAAG,EAAE;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB;IAEhB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/E,OAAO,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAKpC,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAChE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;AACtE,CAAC;AAED,+CAA+C;AAC/C,UAAU;AACV,+CAA+C;AAE/C,qDAAqD;AACrD,SAAS,eAAe,CAAC,KAAiB;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC"}
|
|
@@ -30,6 +30,10 @@
|
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
import type { ConsumerConfig, RefConfig, ResolvedConfig, ResolvedRef, ResolvedRegistry } from "./define-config.js";
|
|
33
|
+
/** Special registry type: connect directly to an MCP server */
|
|
34
|
+
export declare const REGISTRY_TYPE_MCP = "mcp";
|
|
35
|
+
/** Special registry type: raw HTTP/REST API */
|
|
36
|
+
export declare const REGISTRY_TYPE_HTTPS = "https";
|
|
33
37
|
/** Registry well-known configuration (from /.well-known/configuration) */
|
|
34
38
|
export interface RegistryConfiguration {
|
|
35
39
|
issuer: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-consumer.d.ts","sourceRoot":"","sources":["../src/registry-consumer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,cAAc,EACd,WAAW,EACX,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry-consumer.d.ts","sourceRoot":"","sources":["../src/registry-consumer.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,16 @@
|
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
import { isSecretUrl, normalizeRef, normalizeRegistry, } from "./define-config.js";
|
|
33
|
+
// TODO: wire discoverOAuthMetadata from ./mcp-client.js into MCP server auth negotiation
|
|
34
|
+
// ============================================
|
|
35
|
+
// Registry Type Constants
|
|
36
|
+
// ============================================
|
|
37
|
+
/** Special registry type: connect directly to an MCP server */
|
|
38
|
+
export const REGISTRY_TYPE_MCP = "mcp";
|
|
39
|
+
/** Special registry type: raw HTTP/REST API */
|
|
40
|
+
export const REGISTRY_TYPE_HTTPS = "https";
|
|
41
|
+
/** Built-in registry types that bypass normal registry resolution */
|
|
42
|
+
const DIRECT_REGISTRY_TYPES = new Set([REGISTRY_TYPE_MCP, REGISTRY_TYPE_HTTPS]);
|
|
33
43
|
// ============================================
|
|
34
44
|
// Secret Resolver
|
|
35
45
|
// ============================================
|
|
@@ -74,6 +84,159 @@ async function defaultSecretResolver(uri, auth) {
|
|
|
74
84
|
throw new Error(`Unsupported secret URI scheme: ${parsed.protocol}`);
|
|
75
85
|
}
|
|
76
86
|
}
|
|
87
|
+
// ============================================
|
|
88
|
+
// Direct MCP Resolution
|
|
89
|
+
// ============================================
|
|
90
|
+
/**
|
|
91
|
+
* List tools from a direct MCP server (registry type: 'mcp').
|
|
92
|
+
* Connects via JSON-RPC, does MCP initialize handshake, then tools/list.
|
|
93
|
+
*/
|
|
94
|
+
async function listFromMcpServer(url, auth, fetchFn) {
|
|
95
|
+
const serverUrl = url.replace(/\/$/, "");
|
|
96
|
+
const headers = {
|
|
97
|
+
"Content-Type": "application/json",
|
|
98
|
+
...(auth.headers ?? {}),
|
|
99
|
+
};
|
|
100
|
+
if (auth.token) {
|
|
101
|
+
headers.Authorization = `Bearer ${auth.token}`;
|
|
102
|
+
}
|
|
103
|
+
let reqId = 0;
|
|
104
|
+
async function rpc(method, params) {
|
|
105
|
+
const res = await fetchFn(serverUrl, {
|
|
106
|
+
method: "POST",
|
|
107
|
+
headers,
|
|
108
|
+
body: JSON.stringify({
|
|
109
|
+
jsonrpc: "2.0",
|
|
110
|
+
id: ++reqId,
|
|
111
|
+
method,
|
|
112
|
+
...(params && { params }),
|
|
113
|
+
}),
|
|
114
|
+
});
|
|
115
|
+
if (!res.ok) {
|
|
116
|
+
throw new Error(`MCP call to ${serverUrl} failed: ${res.status}`);
|
|
117
|
+
}
|
|
118
|
+
const json = (await res.json());
|
|
119
|
+
if (json.error) {
|
|
120
|
+
throw new Error(`MCP RPC error: ${json.error.message}`);
|
|
121
|
+
}
|
|
122
|
+
return json.result;
|
|
123
|
+
}
|
|
124
|
+
// Initialize handshake
|
|
125
|
+
const initResult = (await rpc("initialize", {
|
|
126
|
+
protocolVersion: "2024-11-05",
|
|
127
|
+
capabilities: {},
|
|
128
|
+
clientInfo: { name: "agents-sdk-consumer", version: "1.0.0" },
|
|
129
|
+
}));
|
|
130
|
+
// Send initialized notification
|
|
131
|
+
await rpc("notifications/initialized").catch(() => { });
|
|
132
|
+
// List tools
|
|
133
|
+
const toolsResult = (await rpc("tools/list"));
|
|
134
|
+
const serverName = initResult?.serverInfo?.name ?? new URL(serverUrl).hostname;
|
|
135
|
+
// Return as a single agent listing with all tools
|
|
136
|
+
return [{
|
|
137
|
+
path: serverName,
|
|
138
|
+
description: `MCP server at ${serverUrl}`,
|
|
139
|
+
publisher: serverName,
|
|
140
|
+
tools: toolsResult?.tools ?? [],
|
|
141
|
+
requiresAuth: false,
|
|
142
|
+
}];
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Call a tool on a direct MCP server.
|
|
146
|
+
*/
|
|
147
|
+
async function callMcpTool(url, toolName, params, auth, fetchFn) {
|
|
148
|
+
const serverUrl = url.replace(/\/$/, "");
|
|
149
|
+
const headers = {
|
|
150
|
+
"Content-Type": "application/json",
|
|
151
|
+
...(auth.headers ?? {}),
|
|
152
|
+
};
|
|
153
|
+
if (auth.token) {
|
|
154
|
+
headers.Authorization = `Bearer ${auth.token}`;
|
|
155
|
+
}
|
|
156
|
+
const res = await fetchFn(serverUrl, {
|
|
157
|
+
method: "POST",
|
|
158
|
+
headers,
|
|
159
|
+
body: JSON.stringify({
|
|
160
|
+
jsonrpc: "2.0",
|
|
161
|
+
id: 1,
|
|
162
|
+
method: "tools/call",
|
|
163
|
+
params: { name: toolName, arguments: params },
|
|
164
|
+
}),
|
|
165
|
+
});
|
|
166
|
+
if (!res.ok) {
|
|
167
|
+
throw new Error(`MCP tool call failed: ${res.status}`);
|
|
168
|
+
}
|
|
169
|
+
const json = (await res.json());
|
|
170
|
+
if (json.error) {
|
|
171
|
+
throw new Error(`MCP RPC error: ${json.error.message}`);
|
|
172
|
+
}
|
|
173
|
+
// Extract text content
|
|
174
|
+
const result = json.result;
|
|
175
|
+
if (result?.content) {
|
|
176
|
+
const textItem = result.content.find((c) => c.type === "text");
|
|
177
|
+
if (textItem?.text) {
|
|
178
|
+
try {
|
|
179
|
+
return JSON.parse(textItem.text);
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return textItem.text;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
// ============================================
|
|
189
|
+
// Direct HTTPS Resolution
|
|
190
|
+
// ============================================
|
|
191
|
+
/**
|
|
192
|
+
* List available operations from an HTTPS API (registry type: 'https').
|
|
193
|
+
* Returns a single generic 'call' tool since we can't auto-discover REST endpoints
|
|
194
|
+
* without an OpenAPI spec.
|
|
195
|
+
*/
|
|
196
|
+
function listFromHttpsApi(url) {
|
|
197
|
+
const hostname = new URL(url).hostname;
|
|
198
|
+
return [{
|
|
199
|
+
path: hostname,
|
|
200
|
+
description: `REST API at ${url}`,
|
|
201
|
+
publisher: hostname,
|
|
202
|
+
tools: [{
|
|
203
|
+
name: "call",
|
|
204
|
+
description: "Make an HTTP request to the API. Params: method, path, body, headers.",
|
|
205
|
+
}],
|
|
206
|
+
requiresAuth: false,
|
|
207
|
+
}];
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Call an HTTPS API (registry type: 'https').
|
|
211
|
+
* Generic HTTP proxy with auth injection.
|
|
212
|
+
*/
|
|
213
|
+
async function callHttpsTool(baseUrl, _toolName, params, auth, fetchFn) {
|
|
214
|
+
const method = params.method ?? "GET";
|
|
215
|
+
const path = params.path ?? "";
|
|
216
|
+
const body = params.body;
|
|
217
|
+
const extraHeaders = params.headers ?? {};
|
|
218
|
+
const url = `${baseUrl.replace(/\/$/, "")}${path}`;
|
|
219
|
+
const headers = {
|
|
220
|
+
...extraHeaders,
|
|
221
|
+
...(auth.headers ?? {}),
|
|
222
|
+
};
|
|
223
|
+
if (auth.token) {
|
|
224
|
+
headers.Authorization = `Bearer ${auth.token}`;
|
|
225
|
+
}
|
|
226
|
+
if (body) {
|
|
227
|
+
headers["Content-Type"] = "application/json";
|
|
228
|
+
}
|
|
229
|
+
const res = await fetchFn(url, {
|
|
230
|
+
method,
|
|
231
|
+
headers,
|
|
232
|
+
...(body && { body: JSON.stringify(body) }),
|
|
233
|
+
});
|
|
234
|
+
const contentType = res.headers.get("content-type") ?? "";
|
|
235
|
+
if (contentType.includes("json")) {
|
|
236
|
+
return res.json();
|
|
237
|
+
}
|
|
238
|
+
return res.text();
|
|
239
|
+
}
|
|
77
240
|
/**
|
|
78
241
|
* Create a registry consumer from a config.
|
|
79
242
|
*
|
|
@@ -160,8 +323,34 @@ export async function createRegistryConsumer(config, options = {}) {
|
|
|
160
323
|
// Build the consumer
|
|
161
324
|
const consumer = {
|
|
162
325
|
async list() {
|
|
163
|
-
|
|
164
|
-
|
|
326
|
+
// Collect from standard registries
|
|
327
|
+
const registryResults = await Promise.allSettled(resolvedRegistries.map(listFromRegistry));
|
|
328
|
+
const listings = registryResults.flatMap((r) => r.status === "fulfilled" ? r.value : []);
|
|
329
|
+
// Also collect from direct MCP/HTTPS refs
|
|
330
|
+
for (const ref of resolvedRefs) {
|
|
331
|
+
if (!DIRECT_REGISTRY_TYPES.has(ref.registry))
|
|
332
|
+
continue;
|
|
333
|
+
const refEntry = (config.refs ?? []).find((r) => {
|
|
334
|
+
const n = normalizeRef(r);
|
|
335
|
+
return n.name === ref.name;
|
|
336
|
+
});
|
|
337
|
+
const url = typeof refEntry === "object" ? refEntry?.url : undefined;
|
|
338
|
+
if (!url)
|
|
339
|
+
continue;
|
|
340
|
+
try {
|
|
341
|
+
if (ref.registry === REGISTRY_TYPE_MCP) {
|
|
342
|
+
const mcpListings = await listFromMcpServer(url, { token: options.token }, fetchFn);
|
|
343
|
+
listings.push(...mcpListings);
|
|
344
|
+
}
|
|
345
|
+
else if (ref.registry === REGISTRY_TYPE_HTTPS) {
|
|
346
|
+
listings.push(...listFromHttpsApi(url));
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
catch {
|
|
350
|
+
// Skip unreachable direct refs during list
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
return listings;
|
|
165
354
|
},
|
|
166
355
|
refs() {
|
|
167
356
|
return resolvedRefs;
|
|
@@ -174,6 +363,31 @@ export async function createRegistryConsumer(config, options = {}) {
|
|
|
174
363
|
if (!ref) {
|
|
175
364
|
throw new Error(`Ref "${refName}" not found in config. Available: ${resolvedRefs.map((r) => r.name).join(", ")}`);
|
|
176
365
|
}
|
|
366
|
+
// Direct MCP ref — bypass registry, call MCP server directly
|
|
367
|
+
if (ref.registry === REGISTRY_TYPE_MCP) {
|
|
368
|
+
const refEntry = (config.refs ?? []).find((r) => {
|
|
369
|
+
const n = normalizeRef(r);
|
|
370
|
+
return n.name === ref.name;
|
|
371
|
+
});
|
|
372
|
+
const url = typeof refEntry === "object" ? refEntry?.url : undefined;
|
|
373
|
+
if (!url) {
|
|
374
|
+
throw new Error(`MCP ref "${refName}" has no url`);
|
|
375
|
+
}
|
|
376
|
+
return callMcpTool(url, tool, params, { token: options.token }, fetchFn);
|
|
377
|
+
}
|
|
378
|
+
// Direct HTTPS ref — bypass registry, call REST API directly
|
|
379
|
+
if (ref.registry === REGISTRY_TYPE_HTTPS) {
|
|
380
|
+
const refEntry = (config.refs ?? []).find((r) => {
|
|
381
|
+
const n = normalizeRef(r);
|
|
382
|
+
return n.name === ref.name;
|
|
383
|
+
});
|
|
384
|
+
const url = typeof refEntry === "object" ? refEntry?.url : undefined;
|
|
385
|
+
if (!url) {
|
|
386
|
+
throw new Error(`HTTPS ref "${refName}" has no url`);
|
|
387
|
+
}
|
|
388
|
+
return callHttpsTool(url, tool, params, { token: options.token }, fetchFn);
|
|
389
|
+
}
|
|
390
|
+
// Standard registry ref
|
|
177
391
|
const registry = resolvedRegistries.find((r) => r.url === ref.registry || r.name === ref.registry);
|
|
178
392
|
if (!registry) {
|
|
179
393
|
throw new Error(`Registry "${ref.registry}" not found for ref "${refName}"`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-consumer.js","sourceRoot":"","sources":["../src/registry-consumer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry-consumer.js","sourceRoot":"","sources":["../src/registry-consumer.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -90,6 +90,19 @@ export interface AgentServerOptions {
|
|
|
90
90
|
keyStore?: import("./key-manager.js").KeyStore;
|
|
91
91
|
/** OIDC provider for user sign-in (authorization code flow) */
|
|
92
92
|
oidcProvider?: OIDCProviderConfig;
|
|
93
|
+
/**
|
|
94
|
+
* Registry capabilities — advertised in MCP initialize response.
|
|
95
|
+
* When set, this server identifies as an agent registry (superset of MCP).
|
|
96
|
+
* Consumers use this to differentiate `registry` type from plain `mcp`.
|
|
97
|
+
*/
|
|
98
|
+
registry?: {
|
|
99
|
+
/** Registry protocol version */
|
|
100
|
+
version?: string;
|
|
101
|
+
/** Feature flags (e.g., 'shared-oauth', 'agent-listing') */
|
|
102
|
+
features?: string[];
|
|
103
|
+
/** OAuth callback URL for shared OAuth flows */
|
|
104
|
+
oauthCallbackUrl?: string;
|
|
105
|
+
};
|
|
93
106
|
}
|
|
94
107
|
export interface AgentServer {
|
|
95
108
|
/** Initialize signing keys without starting HTTP server */
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,KAAK,WAAW,EAEjB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAU3C,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,YAAY,CAAC;AAQhF,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,2EAA2E;AAC3E,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,SAAS,CACP,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE;QACN,iDAAiD;QACjD,KAAK,EAAE,MAAM,CAAC;QACd,mCAAmC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,yCAAyC;QACzC,WAAW,EAAE,MAAM,CAAC;QACpB,8BAA8B;QAC9B,OAAO,EAAE,MAAM,CAAC;QAChB,0DAA0D;QAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GACA,OAAO,CAAC,QAAQ,CAAC,CAAC;IAErB;;;;OAIG;IACH,QAAQ,CACN,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE;QACN,8BAA8B;QAC9B,OAAO,EAAE,MAAM,CAAC;KACjB,GACA,OAAO,CAAC,QAAQ,CAAC,CAAC;CACtB;AACD,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iDAAiD;IACjD,cAAc,CAAC,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;IAC5C,6EAA6E;IAC7E,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,8DAA8D;IAC9D,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,wGAAwG;IACxG,QAAQ,CAAC,EAAE,OAAO,kBAAkB,EAAE,QAAQ,CAAC;IAC/C,+DAA+D;IAC/D,YAAY,CAAC,EAAE,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -299,7 +299,16 @@ export function createAgentServer(registry, options = {}) {
|
|
|
299
299
|
case "initialize":
|
|
300
300
|
return jsonRpcSuccess(request.id, {
|
|
301
301
|
protocolVersion: "2024-11-05",
|
|
302
|
-
capabilities: {
|
|
302
|
+
capabilities: {
|
|
303
|
+
tools: { listChanged: false },
|
|
304
|
+
...(options.registry && {
|
|
305
|
+
registry: {
|
|
306
|
+
version: options.registry.version ?? "1.0",
|
|
307
|
+
...(options.registry.features && { features: options.registry.features }),
|
|
308
|
+
...(options.registry.oauthCallbackUrl && { oauthCallbackUrl: options.registry.oauthCallbackUrl }),
|
|
309
|
+
},
|
|
310
|
+
}),
|
|
311
|
+
},
|
|
303
312
|
serverInfo: { name: serverName, version: serverVersion },
|
|
304
313
|
});
|
|
305
314
|
case "notifications/initialized":
|
|
@@ -795,7 +804,7 @@ export function createAgentServer(registry, options = {}) {
|
|
|
795
804
|
const res = jsonResponse(jwks);
|
|
796
805
|
return cors ? addCors(res) : res;
|
|
797
806
|
}
|
|
798
|
-
// ── GET /.well-known/configuration → Server discovery ──
|
|
807
|
+
// ── GET /.well-known/configuration → Server discovery (deprecated, use MCP initialize capabilities) ──
|
|
799
808
|
if (path === "/.well-known/configuration" && req.method === "GET") {
|
|
800
809
|
const baseUrl = resolveBaseUrl(req);
|
|
801
810
|
const res = jsonResponse({
|
|
@@ -812,6 +821,28 @@ export function createAgentServer(registry, options = {}) {
|
|
|
812
821
|
});
|
|
813
822
|
return cors ? addCors(res) : res;
|
|
814
823
|
}
|
|
824
|
+
// ── GET /.well-known/oauth-authorization-server → OAuth Server Metadata (RFC 8414) ──
|
|
825
|
+
// Only exposed when the server requires auth (private registries).
|
|
826
|
+
// Public registries (e.g. registry.slash.com) skip this entirely.
|
|
827
|
+
if (path === "/.well-known/oauth-authorization-server" &&
|
|
828
|
+
req.method === "GET" &&
|
|
829
|
+
(options.registry?.oauthCallbackUrl || serverSigningKeys.length > 0)) {
|
|
830
|
+
const baseUrl = resolveBaseUrl(req);
|
|
831
|
+
const res = jsonResponse({
|
|
832
|
+
issuer: baseUrl,
|
|
833
|
+
authorization_endpoint: `${baseUrl}/oauth/authorize`,
|
|
834
|
+
token_endpoint: `${baseUrl}/oauth/token`,
|
|
835
|
+
jwks_uri: `${baseUrl}/.well-known/jwks.json`,
|
|
836
|
+
response_types_supported: ["code"],
|
|
837
|
+
grant_types_supported: ["authorization_code", "client_credentials", "jwt_exchange"],
|
|
838
|
+
code_challenge_methods_supported: ["S256"],
|
|
839
|
+
token_endpoint_auth_methods_supported: ["client_secret_post", "none"],
|
|
840
|
+
...(options.registry?.oauthCallbackUrl && {
|
|
841
|
+
registration_endpoint: `${baseUrl}/oauth/register`,
|
|
842
|
+
}),
|
|
843
|
+
});
|
|
844
|
+
return cors ? addCors(res) : res;
|
|
845
|
+
}
|
|
815
846
|
// ── GET /list → List agents (legacy endpoint) ──
|
|
816
847
|
if (path === "/list" && req.method === "GET") {
|
|
817
848
|
const agents = registry.list();
|