@plurnk/plurnk-mcp 3.2.1 → 3.3.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 (53) hide show
  1. package/README.md +30 -15
  2. package/SPEC.md +193 -97
  3. package/dist/McpExecutor.d.ts +10 -1
  4. package/dist/McpExecutor.d.ts.map +1 -1
  5. package/dist/McpExecutor.js +45 -11
  6. package/dist/McpExecutor.js.map +1 -1
  7. package/dist/McpResources.d.ts +2 -1
  8. package/dist/McpResources.d.ts.map +1 -1
  9. package/dist/McpResources.js +7 -3
  10. package/dist/McpResources.js.map +1 -1
  11. package/dist/Module.d.ts.map +1 -1
  12. package/dist/Module.js +142 -43
  13. package/dist/Module.js.map +1 -1
  14. package/dist/PluginConfiguration.d.ts +8 -10
  15. package/dist/PluginConfiguration.d.ts.map +1 -1
  16. package/dist/PluginConfiguration.js +4 -4
  17. package/dist/PluginConfiguration.js.map +1 -1
  18. package/dist/capabilityMatrix.d.ts.map +1 -1
  19. package/dist/capabilityMatrix.js +1 -0
  20. package/dist/capabilityMatrix.js.map +1 -1
  21. package/dist/client.d.ts +7 -0
  22. package/dist/client.d.ts.map +1 -1
  23. package/dist/client.js +180 -83
  24. package/dist/client.js.map +1 -1
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +2 -2
  27. package/dist/config.js.map +1 -1
  28. package/dist/definition.js.map +1 -1
  29. package/dist/extensionChannel.d.ts.map +1 -1
  30. package/dist/extensionChannel.js +2 -3
  31. package/dist/extensionChannel.js.map +1 -1
  32. package/dist/inputRequired.d.ts.map +1 -1
  33. package/dist/inputRequired.js +11 -4
  34. package/dist/inputRequired.js.map +1 -1
  35. package/dist/oauth.d.ts +28 -4
  36. package/dist/oauth.d.ts.map +1 -1
  37. package/dist/oauth.js +83 -36
  38. package/dist/oauth.js.map +1 -1
  39. package/dist/protocol.d.ts +1 -1
  40. package/dist/protocol.js +1 -1
  41. package/dist/protocolHeaders.d.ts.map +1 -1
  42. package/dist/protocolHeaders.js +3 -2
  43. package/dist/protocolHeaders.js.map +1 -1
  44. package/dist/registry.d.ts.map +1 -1
  45. package/dist/registry.js +8 -3
  46. package/dist/registry.js.map +1 -1
  47. package/dist/subscriptions.js.map +1 -1
  48. package/dist/tasks.d.ts +2 -2
  49. package/dist/tasks.d.ts.map +1 -1
  50. package/dist/tasks.js +23 -26
  51. package/dist/tasks.js.map +1 -1
  52. package/docs/mcp.md +9 -9
  53. package/package.json +9 -8
@@ -395,6 +395,7 @@ export const CONDITIONAL_EXTENSION_IDS = CAPABILITY_MATRIX
395
395
  // {§mcp-capability-matrix} — advertisement derives from the matrix by
396
396
  // construction; an extension is on the wire only because a row says "always".
397
397
  export const staticClientCapabilities = () => ({
398
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- the advertised modes are exactly the record's keys
398
399
  elicitation: Object.fromEntries(ADVERTISED_ELICITATION_MODES.map((mode) => [mode, {}])),
399
400
  extensions: Object.fromEntries(CAPABILITY_MATRIX
400
401
  .filter((row) => row.authority === "extension" && row.advertised === "always")
@@ -1 +1 @@
1
- {"version":3,"file":"capabilityMatrix.js","sourceRoot":"","sources":["../src/capabilityMatrix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capabilityMatrix.js","sourceRoot":"","sources":["../src/capabilityMatrix.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -2,6 +2,7 @@ import { Client, type CallToolResult, type CompleteRequest, type CompleteResult,
2
2
  import { type McpServerDefinition } from "@plurnk/plurnk-contracts";
3
3
  import { type PreparationDiagnostic } from "./PreparationDiagnostics.ts";
4
4
  import { type ClientInteractionHandler } from "./inputRequired.ts";
5
+ import { OAuthGrant } from "./oauth.ts";
5
6
  import { type PluginContext } from "./PluginConfiguration.ts";
6
7
  export interface ServerCatalog {
7
8
  readonly protocolVersion: string;
@@ -16,13 +17,16 @@ export interface ServerCatalog {
16
17
  }
17
18
  export interface ServerConnectionOptions {
18
19
  readonly oauthRedirectUrl?: string;
20
+ readonly oauthGrant?: OAuthGrant;
19
21
  readonly plugin?: PluginContext;
20
22
  readonly environment?: NodeJS.ProcessEnv;
21
23
  readonly cwd?: string;
22
24
  readonly onCatalogChanged?: (error: Error | null) => void;
23
25
  readonly onInfrastructureError?: (error: Error) => void;
26
+ readonly onAuthorizationRequired?: () => void;
24
27
  }
25
28
  export type { ClientInteractionHandler } from "./inputRequired.ts";
29
+ export declare const causeOf: <T>(error: unknown, type: abstract new (...args: never[]) => T, seen?: Set<unknown>) => T | undefined;
26
30
  export declare const isClientCredentialsRejection: (error: unknown) => boolean;
27
31
  export declare class CatalogNonConvergenceError extends Error {
28
32
  readonly method: string;
@@ -34,6 +38,7 @@ export declare class McpRedirectError extends Error {
34
38
  readonly location: string | null;
35
39
  constructor(url: string, location: string | null);
36
40
  }
41
+ export declare const awaitsSignIn: (server: string) => string;
37
42
  export declare class AuthorizationRequiredError extends Error {
38
43
  readonly authorizationUrl: string | undefined;
39
44
  constructor(authorizationUrl?: string, cause?: unknown);
@@ -44,8 +49,10 @@ export default class ServerConnection {
44
49
  get definition(): McpServerDefinition;
45
50
  get activeRequests(): number;
46
51
  get authorizationUrl(): string | null;
52
+ get oauthGrant(): OAuthGrant | undefined;
47
53
  preparationDiagnostic(cause: unknown): PreparationDiagnostic;
48
54
  connect(): Promise<Client>;
55
+ beginAuthorization(): Promise<string | undefined>;
49
56
  finishAuthorization(callbackUrl: string): Promise<void>;
50
57
  tools(signal?: AbortSignal): Promise<Tool[]>;
51
58
  catalog(signal?: AbortSignal): Promise<ServerCatalog>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,14 +1,15 @@
1
1
  import { isAbsolute } from "node:path";
2
- import { OAuthClientFlowError, OAuthError, UnauthorizedError, SdkHttpError, ProtocolError, METHOD_NOT_FOUND, Client, ClientCredentialsProvider, StreamableHTTPClientTransport, } from "@modelcontextprotocol/client";
2
+ import { OAuthClientFlowError, OAuthError, UnauthorizedError, SdkHttpError, ProtocolError, METHOD_NOT_FOUND, Client, ClientCredentialsProvider, StreamableHTTPClientTransport, auth, createFetchWithInit, } from "@modelcontextprotocol/client";
3
3
  import { StdioClientTransport, getDefaultEnvironment, } from "@modelcontextprotocol/client/stdio";
4
- import { Validator, } from "@plurnk/plurnk-contracts";
4
+ import { CallToolRequestParamsSchema, GetPromptRequestParamsSchema, ReadResourceRequestParamsSchema } from "@modelcontextprotocol/core";
5
+ import { isRecord, Validator, } from "@plurnk/plurnk-contracts";
5
6
  import packageJson from "../package.json" with { type: "json" };
6
7
  import { ErrorDetail } from "@plurnk/plurnk-execs";
7
8
  import PreparationDiagnostics, {} from "./PreparationDiagnostics.js";
8
9
  import { connectTimeoutMs, expandReferences, requestTimeoutMs, retryPacing, } from "./config.js";
9
10
  import { readDefinition } from "./definition.js";
10
11
  import { INPUT_REQUIRED_MAX_ROUNDS, runInputRequiredRequest, } from "./inputRequired.js";
11
- import InteractiveOAuthProvider from "./oauth.js";
12
+ import InteractiveOAuthProvider, { OAuthGrant } from "./oauth.js";
12
13
  import ExtensionChannel from "./extensionChannel.js";
13
14
  import { assertHeaderDeclarations, mcpRoutingHeaderValue } from "./protocolHeaders.js";
14
15
  import { MCP_OAUTH_CLIENT_CREDENTIALS_EXTENSION_ID, MCP_PROTOCOL_VERSION, } from "./protocol.js";
@@ -16,11 +17,30 @@ import { staticClientCapabilities } from "./capabilityMatrix.js";
16
17
  import Subscriptions from "./subscriptions.js";
17
18
  import PluginConfiguration, {} from "./PluginConfiguration.js";
18
19
  import { callToolWithTasks, serverSupportsTasks, } from "./tasks.js";
20
+ // A request leg's params are proved by the protocol's schema and forwarded whole: the continuation state an
21
+ // input-required round appends rides beside the fields the schema names ({§mcp-host-composition}).
22
+ const CALL_TOOL_PARAMS = CallToolRequestParamsSchema.loose();
23
+ const READ_RESOURCE_PARAMS = ReadResourceRequestParamsSchema.loose();
24
+ const GET_PROMPT_PARAMS = GetPromptRequestParamsSchema.loose();
19
25
  // {§mcp-authority} — capability source: the modern discover result when the
20
26
  // server offered it, else the legacy initialize result the SDK already folded.
21
27
  const serverCapabilities = (client) => client.getDiscoverResult()?.capabilities
22
28
  ?? client.getServerCapabilities();
23
29
  const message = (error) => error instanceof Error ? error.message : String(error);
30
+ // The first error of a type anywhere in a cause chain or aggregate.
31
+ export const causeOf = (error, type, seen = new Set()) => {
32
+ if (error === null || typeof error !== "object" || seen.has(error))
33
+ return undefined;
34
+ seen.add(error);
35
+ if (error instanceof type)
36
+ return error;
37
+ for (const inner of error instanceof AggregateError ? error.errors : []) {
38
+ const found = causeOf(inner, type, seen);
39
+ if (found !== undefined)
40
+ return found;
41
+ }
42
+ return causeOf(error.cause, type, seen);
43
+ };
24
44
  const errorsOf = (error) => error instanceof AggregateError ? [...error.errors] : [error];
25
45
  // {§oauth-client-credentials} — a rejected client-credentials grant is an
26
46
  // authorization fact, never a generic unavailability.
@@ -38,7 +58,7 @@ export const isClientCredentialsRejection = (error) => errorsOf(error).some((can
38
58
  });
39
59
  // {§mcp-transports} Protocol headers are transport-owned; application authentication is not.
40
60
  const clientOwnedHeader = (name) => ["accept", "content-type", "last-event-id"].includes(name.toLowerCase()) || name.toLowerCase().startsWith("mcp-");
41
- const resolveDefinition = (source, environ, defaultCwd, plugin, oauthRedirectUrl) => {
61
+ const resolveDefinition = (source, environ, { cwd: defaultCwd, plugin, oauthRedirectUrl, oauthGrant }) => {
42
62
  const definition = readDefinition(source);
43
63
  const field = `MCP server '${definition.name}'`;
44
64
  if (definition.type === "stdio") {
@@ -60,8 +80,14 @@ const resolveDefinition = (source, environ, defaultCwd, plugin, oauthRedirectUrl
60
80
  const headers = configured.length === 0 ? undefined : Object.fromEntries(configured.map(([name, value]) => [name, plugin === undefined ? expandReferences(value, environ, `${field}.headers.${name}`) : value]));
61
81
  const url = definition.url;
62
82
  const authorization = definition.authorization;
63
- const redirectUrl = (authorization?.type === "oauth" ? authorization.redirectUrl : undefined) ?? oauthRedirectUrl;
64
- if ((authorization === undefined || authorization.type === "oauth") && redirectUrl === undefined) {
83
+ const configuredRedirect = authorization?.type === "oauth" ? authorization.redirectUrl : undefined;
84
+ const redirectUrl = configuredRedirect ?? oauthRedirectUrl;
85
+ // {§oauth-grant} A client's callback begins a new grant; any other connection carries the alias's accepted one, or
86
+ // begins one at the redirect the definition configures.
87
+ const grant = oauthRedirectUrl === undefined && oauthGrant !== undefined
88
+ ? oauthGrant
89
+ : redirectUrl === undefined ? undefined : new OAuthGrant(redirectUrl);
90
+ if ((authorization === undefined || authorization.type === "oauth") && grant === undefined) {
65
91
  return {
66
92
  type: "streamable-http",
67
93
  url,
@@ -70,10 +96,10 @@ const resolveDefinition = (source, environ, defaultCwd, plugin, oauthRedirectUrl
70
96
  };
71
97
  }
72
98
  if (authorization?.type === "bearer") {
73
- const field = `MCP server '${definition.name}'.authorization.token`;
74
- const token = expandReferences(authorization.token, environ, field);
99
+ const tokenField = `MCP server '${definition.name}'.authorization.token`;
100
+ const token = expandReferences(authorization.token, environ, tokenField);
75
101
  if (token.length === 0)
76
- throw new Error(`${field} resolved empty.`);
102
+ throw new Error(`${tokenField} resolved empty.`);
77
103
  return {
78
104
  type: "streamable-http",
79
105
  url,
@@ -91,6 +117,7 @@ const resolveDefinition = (source, environ, defaultCwd, plugin, oauthRedirectUrl
91
117
  url,
92
118
  ...(headers === undefined ? {} : { headers }),
93
119
  clientCredentials: true,
120
+ // oxlint-disable-next-line typescript/no-deprecated -- {§oauth-client-credentials} keeps `issuer` optional; without one the SDK's unbound overload, which it deprecates, is the declared behaviour
94
121
  authProvider: new ClientCredentialsProvider({
95
122
  clientId: authorization.clientId,
96
123
  clientSecret: secret,
@@ -103,11 +130,14 @@ const resolveDefinition = (source, environ, defaultCwd, plugin, oauthRedirectUrl
103
130
  cachePartition: `client:${authorization.clientId}`,
104
131
  };
105
132
  }
106
- // {§oauth-lifetime} — registration data, tokens, PKCE verifier, and
107
- // callback state remain process-memory in this provider.
133
+ // {§oauth-lifetime} — the registration and tokens are the grant's, which outlives this connection; the PKCE
134
+ // verifier and callback state are this provider's. All of it is process memory.
108
135
  const oauthProvider = new InteractiveOAuthProvider({
109
- redirectUrl: redirectUrl,
136
+ grant: grant,
137
+ redirectConfigured: configuredRedirect !== undefined,
110
138
  ...(authorization?.scope === undefined ? {} : { scope: authorization.scope }),
139
+ ...(authorization?.issuer === undefined ? {} : { issuer: authorization.issuer }),
140
+ ...(authorization?.authorizationParams === undefined ? {} : { authorizationParams: authorization.authorizationParams }),
111
141
  ...(authorization !== undefined && "clientMetadataUrl" in authorization ? { clientMetadataUrl: authorization.clientMetadataUrl } : {}),
112
142
  ...(authorization !== undefined && "clientId" in authorization
113
143
  ? { clientId: authorization.clientId, clientSecret: expandReferences(authorization.clientSecret, environ, `${field}.clientSecret`) }
@@ -131,49 +161,52 @@ const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
131
161
  // The SDK re-wraps a transport failure without keeping it as a cause, so each HTTP transport's refused
132
162
  // redirect is kept beside it for the connection failure to carry.
133
163
  const refusedRedirects = new WeakMap();
164
+ // The fetch each HTTP transport authorizes through, as the SDK composes it, for a sign-in this host starts itself.
165
+ const authorizationFetches = new WeakMap();
134
166
  const openTransport = (definition, environment = getDefaultEnvironment()) => {
135
167
  if (definition.type === "streamable-http") {
168
+ const requestInit = definition.headers === undefined ? undefined : { headers: definition.headers };
169
+ const transportFetch = async (url, init) => {
170
+ const body = typeof init?.body === "string"
171
+ ? (() => {
172
+ try {
173
+ return JSON.parse(init.body);
174
+ }
175
+ catch {
176
+ return undefined;
177
+ }
178
+ })()
179
+ : undefined;
180
+ const request = body !== null && typeof body === "object" && !Array.isArray(body)
181
+ ? body
182
+ : undefined;
183
+ let sent = init;
184
+ if (["tasks/get", "tasks/update", "tasks/cancel"].includes(String(request?.method))
185
+ && typeof request?.params?.taskId === "string") {
186
+ const headers = new Headers(init?.headers);
187
+ headers.set("Mcp-Name", mcpRoutingHeaderValue(request.params.taskId));
188
+ sent = { ...init, headers };
189
+ }
190
+ // {§mcp-redirect-refused} — configured headers never reach another origin: no
191
+ // redirect is followed, and a redirected endpoint fails naming where it pointed.
192
+ const response = await fetch(url, { ...sent, redirect: "manual" });
193
+ if (REDIRECT_STATUSES.has(response.status)) {
194
+ const location = response.headers.get("location");
195
+ await response.body?.cancel();
196
+ const refused = new McpRedirectError(String(url), location === null ? null : new URL(location, String(url)).href);
197
+ refusedRedirects.set(transport, refused);
198
+ throw refused;
199
+ }
200
+ return response;
201
+ };
136
202
  const transport = new StreamableHTTPClientTransport(new URL(definition.url), {
137
- ...(definition.headers === undefined
138
- ? {}
139
- : { requestInit: { headers: definition.headers } }),
203
+ ...(requestInit === undefined ? {} : { requestInit }),
140
204
  ...(definition.authProvider === undefined
141
205
  ? {}
142
206
  : { authProvider: definition.authProvider }),
143
- fetch: async (url, init) => {
144
- const body = typeof init?.body === "string"
145
- ? (() => {
146
- try {
147
- return JSON.parse(init.body);
148
- }
149
- catch {
150
- return undefined;
151
- }
152
- })()
153
- : undefined;
154
- const request = body !== null && typeof body === "object" && !Array.isArray(body)
155
- ? body
156
- : undefined;
157
- let sent = init;
158
- if (["tasks/get", "tasks/update", "tasks/cancel"].includes(String(request?.method))
159
- && typeof request?.params?.taskId === "string") {
160
- const headers = new Headers(init?.headers);
161
- headers.set("Mcp-Name", mcpRoutingHeaderValue(request.params.taskId));
162
- sent = { ...init, headers };
163
- }
164
- // {§mcp-redirect-refused} — configured headers never reach another origin: no
165
- // redirect is followed, and a redirected endpoint fails naming where it pointed.
166
- const response = await fetch(url, { ...sent, redirect: "manual" });
167
- if (REDIRECT_STATUSES.has(response.status)) {
168
- const location = response.headers.get("location");
169
- await response.body?.cancel();
170
- const refused = new McpRedirectError(String(url), location === null ? null : new URL(location, String(url)).href);
171
- refusedRedirects.set(transport, refused);
172
- throw refused;
173
- }
174
- return response;
175
- },
207
+ fetch: transportFetch,
176
208
  });
209
+ authorizationFetches.set(transport, createFetchWithInit(transportFetch, requestInit));
177
210
  return transport;
178
211
  }
179
212
  // {§mcp-stdio-process-ownership} — stdio servers spawn through the
@@ -192,6 +225,7 @@ const openTransport = (definition, environment = getDefaultEnvironment()) => {
192
225
  ],
193
226
  cwd: definition.cwd,
194
227
  stderr: "pipe",
228
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- the SDK types the env narrower than spawn's contract; an undefined value omits a key
195
229
  env: {
196
230
  // The SDK merges its defaults even with an explicit env. Node spawn
197
231
  // accepts undefined to omit a key; the SDK's narrower type does not.
@@ -228,38 +262,46 @@ class CatalogClient extends Client {
228
262
  // the SDK's cursorless first page.
229
263
  #returned = new Map();
230
264
  #unsupported = new Set();
265
+ constructor(...args) {
266
+ super(...args);
267
+ // {§mcp-header-declarations} — retain listed definitions so callTool scans them on both legs
268
+ // and refuses invalid declarations with HeaderDeclarationError rather than proceeding unlisted.
269
+ Object.defineProperty(this, "_excludeInvalidXMcpHeaderTools", { value: () => { } });
270
+ }
231
271
  get unsupportedLists() {
232
- return [...this.#unsupported].sort();
272
+ return [...this.#unsupported].toSorted();
233
273
  }
234
274
  async request(...args) {
235
275
  const sent = args[0];
236
- const collection = typeof sent.method === "string" ? LIST_COLLECTIONS.get(sent.method) : undefined;
276
+ const method = isRecord(sent) && typeof sent.method === "string" ? sent.method : undefined;
277
+ const cursor = isRecord(sent) && isRecord(sent.params) ? sent.params.cursor : undefined;
278
+ const collection = method === undefined ? undefined : LIST_COLLECTIONS.get(method);
237
279
  let result;
238
280
  try {
281
+ // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- the SDK's overloaded request is forwarded verbatim with the caller's arguments
239
282
  result = await super.request(...args);
240
283
  }
241
284
  catch (error) {
242
285
  // {§mcp-catalog-list-absence} — never turn a later-page error into a partial success.
243
- if (collection === undefined || typeof sent.method !== "string"
244
- || sent.params?.cursor !== undefined
286
+ if (collection === undefined || method === undefined
287
+ || cursor !== undefined
245
288
  || !ProtocolError.isInstance(error) || error.code !== METHOD_NOT_FOUND)
246
289
  throw error;
247
- this.#unsupported.add(sent.method);
290
+ this.#unsupported.add(method);
248
291
  return { resultType: "complete", [collection]: [], ttlMs: 0, cacheScope: "private" };
249
292
  }
250
- if (collection === undefined || typeof sent.method !== "string")
293
+ if (collection === undefined || method === undefined)
251
294
  return result;
252
- this.#unsupported.delete(sent.method);
253
- const cursor = sent.params?.cursor;
295
+ this.#unsupported.delete(method);
254
296
  if (cursor === undefined)
255
- this.#returned.set(sent.method, new Set());
256
- const returned = this.#returned.get(sent.method) ?? new Set();
257
- this.#returned.set(sent.method, returned);
258
- const next = result?.nextCursor;
297
+ this.#returned.set(method, new Set());
298
+ const returned = this.#returned.get(method) ?? new Set();
299
+ this.#returned.set(method, returned);
300
+ const next = isRecord(result) ? result.nextCursor : undefined;
259
301
  if (typeof next !== "string")
260
302
  return result;
261
303
  if (next === cursor || returned.has(next))
262
- throw new CatalogNonConvergenceError(sent.method, next);
304
+ throw new CatalogNonConvergenceError(method, next);
263
305
  returned.add(next);
264
306
  return result;
265
307
  }
@@ -275,6 +317,8 @@ export class McpRedirectError extends Error {
275
317
  this.location = location;
276
318
  }
277
319
  }
320
+ // {§mcp-request-unauthorized} The sentence each surface refuses a request awaiting a sign-in with.
321
+ export const awaitsSignIn = (server) => `MCP server '${server}' awaits the operator's sign-in; the request was not completed.`;
278
322
  export class AuthorizationRequiredError extends Error {
279
323
  authorizationUrl;
280
324
  constructor(authorizationUrl, cause) {
@@ -339,8 +383,8 @@ const openClient = async (definition, environ, options, transport) => {
339
383
  catch (failure) {
340
384
  const refused = transport instanceof StreamableHTTPClientTransport ? refusedRedirects.get(transport) : undefined;
341
385
  const cause = refused ?? failure;
342
- const authorizationUrl = definition.type === "streamable-http"
343
- ? definition.oauthProvider?.takeAuthorizationUrl()
386
+ const authorization = definition.type === "streamable-http"
387
+ ? definition.oauthProvider?.takeAuthorization()
344
388
  : undefined;
345
389
  let closeFailure;
346
390
  try {
@@ -349,8 +393,8 @@ const openClient = async (definition, environ, options, transport) => {
349
393
  catch (error) {
350
394
  closeFailure = error;
351
395
  }
352
- if (authorizationUrl !== undefined) {
353
- throw new AuthorizationRequiredError(authorizationUrl.href, closeFailure === undefined ? cause : new AggregateError([cause, closeFailure]));
396
+ if (authorization !== undefined) {
397
+ throw new AuthorizationRequiredError(authorization.url?.href, closeFailure === undefined ? cause : new AggregateError([cause, closeFailure]));
354
398
  }
355
399
  if (closeFailure === undefined && definition.type === "streamable-http"
356
400
  && definition.authProvider === undefined
@@ -412,7 +456,7 @@ export default class ServerConnection {
412
456
  #closed = false;
413
457
  constructor(definition, environ = process.env, options = {}) {
414
458
  this.#definition = structuredClone(Validator.assertMcpServerDefinition(definition));
415
- this.#resolved = resolveDefinition(this.#definition, environ, options.cwd, options.plugin, options.oauthRedirectUrl);
459
+ this.#resolved = resolveDefinition(this.#definition, environ, options);
416
460
  this.#environ = environ;
417
461
  this.#options = options;
418
462
  const symbolic = JSON.stringify(definition);
@@ -431,6 +475,10 @@ export default class ServerConnection {
431
475
  get authorizationUrl() {
432
476
  return this.#pendingAuthorization?.authorizationUrl ?? null;
433
477
  }
478
+ // {§oauth-grant} The grant this connection presents, or begins.
479
+ get oauthGrant() {
480
+ return this.#resolved.type === "streamable-http" ? this.#resolved.oauthProvider?.grant : undefined;
481
+ }
434
482
  preparationDiagnostic(cause) {
435
483
  return this.#diagnostics.describe(cause);
436
484
  }
@@ -483,6 +531,34 @@ export default class ServerConnection {
483
531
  async connect() {
484
532
  return (await this.#open()).client;
485
533
  }
534
+ // {§oauth-begin-unchallenged} A server whose catalog answers anonymously challenges no connection, so the SDK never
535
+ // starts its authorization; a sign-in the client begins starts it here, as the transport would on a challenge.
536
+ async beginAuthorization() {
537
+ const resolved = this.#resolved;
538
+ if (resolved.type !== "streamable-http" || resolved.oauthProvider === undefined) {
539
+ throw new Error(`MCP server '${this.#definition.name}' has no interactive OAuth sign-in.`);
540
+ }
541
+ const opened = await this.#open();
542
+ if (!(opened.transport instanceof StreamableHTTPClientTransport)) {
543
+ throw new Error(`MCP server '${this.#definition.name}' is not connected over Streamable HTTP.`);
544
+ }
545
+ const result = await auth(resolved.oauthProvider, {
546
+ serverUrl: new URL(resolved.url),
547
+ fetchFn: authorizationFetches.get(opened.transport),
548
+ });
549
+ if (result === "AUTHORIZED")
550
+ return undefined;
551
+ const authorizationUrl = resolved.oauthProvider.takeAuthorization()?.url;
552
+ if (authorizationUrl === undefined)
553
+ throw new Error("OAuth authorization redirected without an authorization URL.");
554
+ this.#pendingAuthorization = {
555
+ transport: opened.transport,
556
+ provider: resolved.oauthProvider,
557
+ authorizationUrl: authorizationUrl.href,
558
+ standaloneTransport: false,
559
+ };
560
+ return authorizationUrl.href;
561
+ }
486
562
  async finishAuthorization(callbackUrl) {
487
563
  const pending = this.#pendingAuthorization;
488
564
  if (pending === undefined) {
@@ -511,9 +587,14 @@ export default class ServerConnection {
511
587
  return await run(opened, signal);
512
588
  }
513
589
  catch (cause) {
514
- const authorization = this.#takeAuthorization(opened, cause);
515
- if (authorization !== null)
590
+ // A nested request already took its authorization and said so.
591
+ if (cause instanceof AuthorizationRequiredError)
592
+ throw cause;
593
+ const authorization = this.#takeAuthorization(opened, cause) ?? this.#refusedUnsigned(cause);
594
+ if (authorization !== null) {
595
+ this.#options.onAuthorizationRequired?.();
516
596
  throw authorization;
597
+ }
517
598
  throw cause;
518
599
  }
519
600
  }
@@ -522,15 +603,31 @@ export default class ServerConnection {
522
603
  settled.resolve();
523
604
  }
524
605
  }
606
+ // {§mcp-request-unauthorized} A request the server refused with HTTP 401, on a definition that configures no credential
607
+ // of its own, awaits a sign-in exactly as a challenge at connection does.
608
+ #refusedUnsigned(cause) {
609
+ if (this.#resolved.type !== "streamable-http")
610
+ return null;
611
+ const configured = (this.#resolved.authProvider !== undefined && this.#resolved.oauthProvider === undefined)
612
+ || Object.keys(this.#resolved.headers ?? {}).some((name) => name.toLowerCase() === "authorization");
613
+ if (configured)
614
+ return null;
615
+ const refused = causeOf(cause, SdkHttpError)?.status === 401 || causeOf(cause, UnauthorizedError) !== undefined;
616
+ return refused ? new AuthorizationRequiredError(undefined, cause) : null;
617
+ }
525
618
  #takeAuthorization(opened, cause) {
526
619
  if (this.#resolved.type !== "streamable-http"
527
620
  || this.#resolved.oauthProvider === undefined
528
621
  || !(opened.transport instanceof StreamableHTTPClientTransport)) {
529
622
  return null;
530
623
  }
531
- const authorizationUrl = this.#resolved.oauthProvider.takeAuthorizationUrl();
532
- if (authorizationUrl === undefined)
624
+ const authorization = this.#resolved.oauthProvider.takeAuthorization();
625
+ if (authorization === undefined)
533
626
  return null;
627
+ // {§oauth-grant} The grant no longer answers, and no client waits at its redirect.
628
+ const authorizationUrl = authorization.url;
629
+ if (authorizationUrl === undefined)
630
+ return new AuthorizationRequiredError(undefined, cause);
534
631
  this.#pendingAuthorization = {
535
632
  transport: opened.transport,
536
633
  provider: this.#resolved.oauthProvider,
@@ -617,11 +714,11 @@ export default class ServerConnection {
617
714
  }, signal);
618
715
  }
619
716
  async callTool(name, args, signal, onProgress, interact, toolDefinition) {
620
- return this.#request(async ({ client, subscriptions, extensions }, signal) => {
717
+ return this.#request(async ({ client, subscriptions, extensions }, requestSignal) => {
621
718
  const timeout = requestTimeoutMs(this.#environ);
622
719
  // {§mcp-header-declarations} — the definition is scanned before either leg; an invalid declaration
623
720
  // refuses the call here and nothing reaches the transport.
624
- const listed = async () => (await this.tools(signal))
721
+ const listed = async () => (await this.tools(requestSignal))
625
722
  .find((candidate) => candidate.name === name);
626
723
  if (serverSupportsTasks(serverCapabilities(client))) {
627
724
  const tool = toolDefinition ?? await listed();
@@ -634,7 +731,7 @@ export default class ServerConnection {
634
731
  name,
635
732
  args,
636
733
  tool,
637
- signal,
734
+ signal: requestSignal,
638
735
  onProgress,
639
736
  interact,
640
737
  timeout,
@@ -645,7 +742,7 @@ export default class ServerConnection {
645
742
  // The direct leg never waits on a failed listing ({§mcp-catalog-deadline}): a definition at hand is
646
743
  // scanned, and a call with none to scan proceeds as it always has, with no routing headers.
647
744
  const tool = toolDefinition ?? await listed().catch(() => {
648
- signal.throwIfAborted();
745
+ requestSignal.throwIfAborted();
649
746
  return undefined;
650
747
  });
651
748
  if (tool !== undefined)
@@ -658,37 +755,37 @@ export default class ServerConnection {
658
755
  interact,
659
756
  onProgress,
660
757
  timeout,
661
- requestLeg: (params, options) => client.callTool(params, { ...options, ...(tool === undefined ? {} : { toolDefinition: tool }) }),
758
+ requestLeg: (params, options) => client.callTool(CALL_TOOL_PARAMS.parse(params), { ...options, ...(tool === undefined ? {} : { toolDefinition: tool }) }),
662
759
  });
663
760
  }, signal);
664
761
  }
665
762
  async readResource(uri, signal, interact) {
666
- return this.#request(async ({ client, subscriptions }, signal) => {
667
- await subscriptions.selectResource(uri, signal);
763
+ return this.#request(async ({ client, subscriptions }, requestSignal) => {
764
+ await subscriptions.selectResource(uri, requestSignal);
668
765
  return runInputRequiredRequest({
669
766
  server: this.#definition.name,
670
767
  operation: "resources/read",
671
768
  originalParams: { uri },
672
- signal,
769
+ signal: requestSignal,
673
770
  interact,
674
771
  timeout: requestTimeoutMs(this.#environ),
675
- requestLeg: (params, options, retry) => client.readResource(params, retry ? { ...options, cacheMode: "refresh" } : options),
772
+ requestLeg: (params, options, retry) => client.readResource(READ_RESOURCE_PARAMS.parse(params), retry ? { ...options, cacheMode: "refresh" } : options),
676
773
  });
677
774
  }, signal);
678
775
  }
679
776
  async getPrompt(name, args, signal, interact) {
680
- return this.#request(async ({ client }, signal) => runInputRequiredRequest({
777
+ return this.#request(async ({ client }, requestSignal) => runInputRequiredRequest({
681
778
  server: this.#definition.name,
682
779
  operation: "prompts/get",
683
780
  originalParams: { name, ...(args === undefined ? {} : { arguments: args }) },
684
- signal,
781
+ signal: requestSignal,
685
782
  interact,
686
783
  timeout: requestTimeoutMs(this.#environ),
687
- requestLeg: (params, options) => client.getPrompt(params, options),
784
+ requestLeg: (params, options) => client.getPrompt(GET_PROMPT_PARAMS.parse(params), options),
688
785
  }), signal);
689
786
  }
690
787
  async complete(params, signal) {
691
- return this.#request(async ({ client }, signal) => client.complete(params, this.#requestOptions(signal)), signal);
788
+ return this.#request(async ({ client }, requestSignal) => client.complete(params, this.#requestOptions(requestSignal)), signal);
692
789
  }
693
790
  #requestOptions(signal, onProgress) {
694
791
  const timeout = requestTimeoutMs(this.#environ);