fastmcp 4.12.8 → 4.13.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/FastMCP.cjs CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
 
13
13
 
14
- var _chunkU36NARZGcjs = require('./chunk-U36NARZG.cjs');
14
+ var _chunkO72VCMGVcjs = require('./chunk-O72VCMGV.cjs');
15
15
 
16
16
 
17
17
 
@@ -24,7 +24,7 @@ var _chunkU36NARZGcjs = require('./chunk-U36NARZG.cjs');
24
24
 
25
25
 
26
26
 
27
- var _chunkKMG3C24Zcjs = require('./chunk-KMG3C24Z.cjs');
27
+ var _chunk5FVNY65Mcjs = require('./chunk-5FVNY65M.cjs');
28
28
 
29
29
 
30
30
 
@@ -49,5 +49,5 @@ var _chunkKMG3C24Zcjs = require('./chunk-KMG3C24Z.cjs');
49
49
 
50
50
 
51
51
 
52
- exports.AuthProvider = _chunkKMG3C24Zcjs.AuthProvider; exports.AzureProvider = _chunkKMG3C24Zcjs.AzureProvider; exports.DiscoveryDocumentCache = _chunkU36NARZGcjs.DiscoveryDocumentCache; exports.FastMCP = _chunkU36NARZGcjs.FastMCP; exports.FastMCPError = _chunkU36NARZGcjs.FastMCPError; exports.FastMCPSession = _chunkU36NARZGcjs.FastMCPSession; exports.GitHubProvider = _chunkKMG3C24Zcjs.GitHubProvider; exports.GoogleProvider = _chunkKMG3C24Zcjs.GoogleProvider; exports.MEDIA_FETCH_TIMEOUT_MS = _chunkU36NARZGcjs.MEDIA_FETCH_TIMEOUT_MS; exports.OAuthProvider = _chunkKMG3C24Zcjs.OAuthProvider; exports.ServerState = _chunkU36NARZGcjs.ServerState; exports.SessionError = _chunkU36NARZGcjs.SessionError; exports.UnexpectedStateError = _chunkU36NARZGcjs.UnexpectedStateError; exports.UserError = _chunkU36NARZGcjs.UserError; exports.audioContent = _chunkU36NARZGcjs.audioContent; exports.getAuthSession = _chunkKMG3C24Zcjs.getAuthSession; exports.imageContent = _chunkU36NARZGcjs.imageContent; exports.jsonSchemaAdapter = _chunkU36NARZGcjs.jsonSchemaAdapter; exports.requireAll = _chunkKMG3C24Zcjs.requireAll; exports.requireAny = _chunkKMG3C24Zcjs.requireAny; exports.requireAuth = _chunkKMG3C24Zcjs.requireAuth; exports.requireRole = _chunkKMG3C24Zcjs.requireRole; exports.requireScopes = _chunkKMG3C24Zcjs.requireScopes;
52
+ exports.AuthProvider = _chunk5FVNY65Mcjs.AuthProvider; exports.AzureProvider = _chunk5FVNY65Mcjs.AzureProvider; exports.DiscoveryDocumentCache = _chunkO72VCMGVcjs.DiscoveryDocumentCache; exports.FastMCP = _chunkO72VCMGVcjs.FastMCP; exports.FastMCPError = _chunkO72VCMGVcjs.FastMCPError; exports.FastMCPSession = _chunkO72VCMGVcjs.FastMCPSession; exports.GitHubProvider = _chunk5FVNY65Mcjs.GitHubProvider; exports.GoogleProvider = _chunk5FVNY65Mcjs.GoogleProvider; exports.MEDIA_FETCH_TIMEOUT_MS = _chunkO72VCMGVcjs.MEDIA_FETCH_TIMEOUT_MS; exports.OAuthProvider = _chunk5FVNY65Mcjs.OAuthProvider; exports.ServerState = _chunkO72VCMGVcjs.ServerState; exports.SessionError = _chunkO72VCMGVcjs.SessionError; exports.UnexpectedStateError = _chunkO72VCMGVcjs.UnexpectedStateError; exports.UserError = _chunkO72VCMGVcjs.UserError; exports.audioContent = _chunkO72VCMGVcjs.audioContent; exports.getAuthSession = _chunk5FVNY65Mcjs.getAuthSession; exports.imageContent = _chunkO72VCMGVcjs.imageContent; exports.jsonSchemaAdapter = _chunkO72VCMGVcjs.jsonSchemaAdapter; exports.requireAll = _chunk5FVNY65Mcjs.requireAll; exports.requireAny = _chunk5FVNY65Mcjs.requireAny; exports.requireAuth = _chunk5FVNY65Mcjs.requireAuth; exports.requireRole = _chunk5FVNY65Mcjs.requireRole; exports.requireScopes = _chunk5FVNY65Mcjs.requireScopes;
53
53
  //# sourceMappingURL=FastMCP.cjs.map
@@ -12,8 +12,8 @@ import { CorsOptions } from 'mcp-proxy';
12
12
  export { CorsOptions } from 'mcp-proxy';
13
13
  import { StrictEventEmitter } from 'strict-event-emitter-types';
14
14
  import { z } from 'zod';
15
- import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-zVRjvkf8.cjs';
16
- export { j as AuthProviderConfig, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, d as OAuthProvider, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from './OAuthProvider-zVRjvkf8.cjs';
15
+ import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-Bvt5a7yr.cjs';
16
+ export { j as AuthProviderConfig, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, d as OAuthProvider, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from './OAuthProvider-Bvt5a7yr.cjs';
17
17
  import 'node:http';
18
18
 
19
19
  declare class DiscoveryDocumentCache {
@@ -822,7 +822,12 @@ interface RouteOptions {
822
822
  */
823
823
  public?: boolean;
824
824
  }
825
- type Authenticate<T> = (request: http.IncomingMessage) => Promise<T>;
825
+ /**
826
+ * Returning a nullish value signals that authentication failed; FastMCP turns
827
+ * it into a 401 rather than creating a session. This is what the built-in
828
+ * OAuth `AuthProvider` does for a missing or invalid bearer token.
829
+ */
830
+ type Authenticate<T> = (request: http.IncomingMessage) => Promise<null | T | undefined>;
826
831
  type FastMCPSessionAuth = Record<string, unknown> | undefined;
827
832
  declare class FastMCPSessionEventEmitter extends FastMCPSessionEventEmitterBase {
828
833
  }
package/dist/FastMCP.d.ts CHANGED
@@ -12,8 +12,8 @@ import { CorsOptions } from 'mcp-proxy';
12
12
  export { CorsOptions } from 'mcp-proxy';
13
13
  import { StrictEventEmitter } from 'strict-event-emitter-types';
14
14
  import { z } from 'zod';
15
- import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-zVRjvkf8.js';
16
- export { j as AuthProviderConfig, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, d as OAuthProvider, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from './OAuthProvider-zVRjvkf8.js';
15
+ import { A as AuthProvider, O as OAuthSession, a as OAuthProxy } from './OAuthProvider-Bvt5a7yr.js';
16
+ export { j as AuthProviderConfig, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, d as OAuthProvider, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from './OAuthProvider-Bvt5a7yr.js';
17
17
  import 'node:http';
18
18
 
19
19
  declare class DiscoveryDocumentCache {
@@ -822,7 +822,12 @@ interface RouteOptions {
822
822
  */
823
823
  public?: boolean;
824
824
  }
825
- type Authenticate<T> = (request: http.IncomingMessage) => Promise<T>;
825
+ /**
826
+ * Returning a nullish value signals that authentication failed; FastMCP turns
827
+ * it into a 401 rather than creating a session. This is what the built-in
828
+ * OAuth `AuthProvider` does for a missing or invalid bearer token.
829
+ */
830
+ type Authenticate<T> = (request: http.IncomingMessage) => Promise<null | T | undefined>;
826
831
  type FastMCPSessionAuth = Record<string, unknown> | undefined;
827
832
  declare class FastMCPSessionEventEmitter extends FastMCPSessionEventEmitterBase {
828
833
  }
package/dist/FastMCP.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  audioContent,
12
12
  imageContent,
13
13
  jsonSchemaAdapter
14
- } from "./chunk-HIIPZVNY.js";
14
+ } from "./chunk-3BMGHXXY.js";
15
15
  import {
16
16
  AuthProvider,
17
17
  AzureProvider,
@@ -24,7 +24,7 @@ import {
24
24
  requireAuth,
25
25
  requireRole,
26
26
  requireScopes
27
- } from "./chunk-Y7GSHCYB.js";
27
+ } from "./chunk-ZOG7IPIX.js";
28
28
  export {
29
29
  AuthProvider,
30
30
  AzureProvider,
@@ -205,6 +205,22 @@ interface OAuthProxyConfig {
205
205
  * https URLs enables CWE-601 open-redirect / authorization-code theft.
206
206
  */
207
207
  allowedRedirectUriPatterns?: string[];
208
+ /**
209
+ * Accept `code_challenge_method=plain` at /oauth/authorize (default: true).
210
+ *
211
+ * `plain` is the weaker PKCE mode by RFC 7636 §7.2: the challenge *is* the
212
+ * verifier, so anyone who observes the authorization request — a proxy, a
213
+ * server log, browser history — can replay a stolen authorization code. S256
214
+ * sends only a hash and has no such exposure. OAuth 2.1 §7.5.2 and the MCP
215
+ * authorization spec both require S256.
216
+ *
217
+ * Set to `false` to refuse `plain`: it is dropped from
218
+ * `codeChallengeMethodsSupported` in the discovery metadata, rejected with
219
+ * `invalid_request` at /oauth/authorize, and any code already issued under it
220
+ * is refused at /oauth/token. Recommended for new deployments; it stays on by
221
+ * default because turning it off breaks clients that still ask for `plain`.
222
+ */
223
+ allowPlainPkce?: boolean;
208
224
  /** Authorization code TTL in seconds (default: 300) */
209
225
  authorizationCodeTtl?: number;
210
226
  /** Base URL of this proxy server */
@@ -205,6 +205,22 @@ interface OAuthProxyConfig {
205
205
  * https URLs enables CWE-601 open-redirect / authorization-code theft.
206
206
  */
207
207
  allowedRedirectUriPatterns?: string[];
208
+ /**
209
+ * Accept `code_challenge_method=plain` at /oauth/authorize (default: true).
210
+ *
211
+ * `plain` is the weaker PKCE mode by RFC 7636 §7.2: the challenge *is* the
212
+ * verifier, so anyone who observes the authorization request — a proxy, a
213
+ * server log, browser history — can replay a stolen authorization code. S256
214
+ * sends only a hash and has no such exposure. OAuth 2.1 §7.5.2 and the MCP
215
+ * authorization spec both require S256.
216
+ *
217
+ * Set to `false` to refuse `plain`: it is dropped from
218
+ * `codeChallengeMethodsSupported` in the discovery metadata, rejected with
219
+ * `invalid_request` at /oauth/authorize, and any code already issued under it
220
+ * is refused at /oauth/token. Recommended for new deployments; it stays on by
221
+ * default because turning it off breaks clients that still ask for `plain`.
222
+ */
223
+ allowPlainPkce?: boolean;
208
224
  /** Authorization code TTL in seconds (default: 300) */
209
225
  authorizationCodeTtl?: number;
210
226
  /** Base URL of this proxy server */
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- var _chunkKMG3C24Zcjs = require('../chunk-KMG3C24Z.cjs');
27
+ var _chunk5FVNY65Mcjs = require('../chunk-5FVNY65M.cjs');
28
28
 
29
29
 
30
30
 
@@ -51,5 +51,5 @@ var _chunkKMG3C24Zcjs = require('../chunk-KMG3C24Z.cjs');
51
51
 
52
52
 
53
53
 
54
- exports.AuthProvider = _chunkKMG3C24Zcjs.AuthProvider; exports.AzureProvider = _chunkKMG3C24Zcjs.AzureProvider; exports.ConsentManager = _chunkKMG3C24Zcjs.ConsentManager; exports.DEFAULT_ACCESS_TOKEN_TTL = _chunkKMG3C24Zcjs.DEFAULT_ACCESS_TOKEN_TTL; exports.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH = _chunkKMG3C24Zcjs.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH; exports.DEFAULT_AUTHORIZATION_CODE_TTL = _chunkKMG3C24Zcjs.DEFAULT_AUTHORIZATION_CODE_TTL; exports.DEFAULT_REFRESH_TOKEN_TTL = _chunkKMG3C24Zcjs.DEFAULT_REFRESH_TOKEN_TTL; exports.DEFAULT_TRANSACTION_TTL = _chunkKMG3C24Zcjs.DEFAULT_TRANSACTION_TTL; exports.DiskStore = _chunkKMG3C24Zcjs.DiskStore; exports.EncryptedTokenStorage = _chunkKMG3C24Zcjs.EncryptedTokenStorage; exports.GitHubProvider = _chunkKMG3C24Zcjs.GitHubProvider; exports.GoogleProvider = _chunkKMG3C24Zcjs.GoogleProvider; exports.JWKSVerifier = _chunkKMG3C24Zcjs.JWKSVerifier; exports.JWTIssuer = _chunkKMG3C24Zcjs.JWTIssuer; exports.MemoryTokenStorage = _chunkKMG3C24Zcjs.MemoryTokenStorage; exports.OAuthProvider = _chunkKMG3C24Zcjs.OAuthProvider; exports.OAuthProxy = _chunkKMG3C24Zcjs.OAuthProxy; exports.OAuthProxyError = _chunkKMG3C24Zcjs.OAuthProxyError; exports.PKCEUtils = _chunkKMG3C24Zcjs.PKCEUtils; exports.getAuthSession = _chunkKMG3C24Zcjs.getAuthSession; exports.requireAll = _chunkKMG3C24Zcjs.requireAll; exports.requireAny = _chunkKMG3C24Zcjs.requireAny; exports.requireAuth = _chunkKMG3C24Zcjs.requireAuth; exports.requireRole = _chunkKMG3C24Zcjs.requireRole; exports.requireScopes = _chunkKMG3C24Zcjs.requireScopes;
54
+ exports.AuthProvider = _chunk5FVNY65Mcjs.AuthProvider; exports.AzureProvider = _chunk5FVNY65Mcjs.AzureProvider; exports.ConsentManager = _chunk5FVNY65Mcjs.ConsentManager; exports.DEFAULT_ACCESS_TOKEN_TTL = _chunk5FVNY65Mcjs.DEFAULT_ACCESS_TOKEN_TTL; exports.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH = _chunk5FVNY65Mcjs.DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH; exports.DEFAULT_AUTHORIZATION_CODE_TTL = _chunk5FVNY65Mcjs.DEFAULT_AUTHORIZATION_CODE_TTL; exports.DEFAULT_REFRESH_TOKEN_TTL = _chunk5FVNY65Mcjs.DEFAULT_REFRESH_TOKEN_TTL; exports.DEFAULT_TRANSACTION_TTL = _chunk5FVNY65Mcjs.DEFAULT_TRANSACTION_TTL; exports.DiskStore = _chunk5FVNY65Mcjs.DiskStore; exports.EncryptedTokenStorage = _chunk5FVNY65Mcjs.EncryptedTokenStorage; exports.GitHubProvider = _chunk5FVNY65Mcjs.GitHubProvider; exports.GoogleProvider = _chunk5FVNY65Mcjs.GoogleProvider; exports.JWKSVerifier = _chunk5FVNY65Mcjs.JWKSVerifier; exports.JWTIssuer = _chunk5FVNY65Mcjs.JWTIssuer; exports.MemoryTokenStorage = _chunk5FVNY65Mcjs.MemoryTokenStorage; exports.OAuthProvider = _chunk5FVNY65Mcjs.OAuthProvider; exports.OAuthProxy = _chunk5FVNY65Mcjs.OAuthProxy; exports.OAuthProxyError = _chunk5FVNY65Mcjs.OAuthProxyError; exports.PKCEUtils = _chunk5FVNY65Mcjs.PKCEUtils; exports.getAuthSession = _chunk5FVNY65Mcjs.getAuthSession; exports.requireAll = _chunk5FVNY65Mcjs.requireAll; exports.requireAny = _chunk5FVNY65Mcjs.requireAny; exports.requireAuth = _chunk5FVNY65Mcjs.requireAuth; exports.requireRole = _chunk5FVNY65Mcjs.requireRole; exports.requireScopes = _chunk5FVNY65Mcjs.requireScopes;
55
55
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
- import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-zVRjvkf8.cjs';
2
- export { A as AuthProvider, j as AuthProviderConfig, y as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, z as ClientCode, B as DCRClientMetadata, E as DCRRequest, F as DCRResponse, D as DEFAULT_ACCESS_TOKEN_TTL, u as DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH, v as DEFAULT_AUTHORIZATION_CODE_TTL, w as DEFAULT_REFRESH_TOKEN_TTL, x as DEFAULT_TRANSACTION_TTL, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, H as OAuthError, d as OAuthProvider, I as OAuthProviderConfig, a as OAuthProxy, J as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, K as ProxyDCRClient, R as RefreshRequest, L as TokenMapping, M as TokenRequest, N as TokenResponse, U as UpstreamTokenSet, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from '../OAuthProvider-zVRjvkf8.cjs';
1
+ import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-Bvt5a7yr.cjs';
2
+ export { A as AuthProvider, j as AuthProviderConfig, y as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, z as ClientCode, B as DCRClientMetadata, E as DCRRequest, F as DCRResponse, D as DEFAULT_ACCESS_TOKEN_TTL, u as DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH, v as DEFAULT_AUTHORIZATION_CODE_TTL, w as DEFAULT_REFRESH_TOKEN_TTL, x as DEFAULT_TRANSACTION_TTL, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, H as OAuthError, d as OAuthProvider, I as OAuthProviderConfig, a as OAuthProxy, J as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, K as ProxyDCRClient, R as RefreshRequest, L as TokenMapping, M as TokenRequest, N as TokenResponse, U as UpstreamTokenSet, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from '../OAuthProvider-Bvt5a7yr.cjs';
3
3
  import 'node:http';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-zVRjvkf8.js';
2
- export { A as AuthProvider, j as AuthProviderConfig, y as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, z as ClientCode, B as DCRClientMetadata, E as DCRRequest, F as DCRResponse, D as DEFAULT_ACCESS_TOKEN_TTL, u as DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH, v as DEFAULT_AUTHORIZATION_CODE_TTL, w as DEFAULT_REFRESH_TOKEN_TTL, x as DEFAULT_TRANSACTION_TTL, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, H as OAuthError, d as OAuthProvider, I as OAuthProviderConfig, a as OAuthProxy, J as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, K as ProxyDCRClient, R as RefreshRequest, L as TokenMapping, M as TokenRequest, N as TokenResponse, U as UpstreamTokenSet, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from '../OAuthProvider-zVRjvkf8.js';
1
+ import { p as OAuthTransaction, C as ConsentData, T as TokenStorage, q as TokenVerifier, s as TokenVerificationResult, P as PKCEPair } from '../OAuthProvider-Bvt5a7yr.js';
2
+ export { A as AuthProvider, j as AuthProviderConfig, y as AuthorizationParams, b as AzureProvider, k as AzureProviderConfig, l as AzureSession, z as ClientCode, B as DCRClientMetadata, E as DCRRequest, F as DCRResponse, D as DEFAULT_ACCESS_TOKEN_TTL, u as DEFAULT_ACCESS_TOKEN_TTL_NO_REFRESH, v as DEFAULT_AUTHORIZATION_CODE_TTL, w as DEFAULT_REFRESH_TOKEN_TTL, x as DEFAULT_TRANSACTION_TTL, m as GenericOAuthProviderConfig, G as GitHubProvider, n as GitHubSession, c as GoogleProvider, o as GoogleSession, H as OAuthError, d as OAuthProvider, I as OAuthProviderConfig, a as OAuthProxy, J as OAuthProxyConfig, t as OAuthProxyError, O as OAuthSession, K as ProxyDCRClient, R as RefreshRequest, L as TokenMapping, M as TokenRequest, N as TokenResponse, U as UpstreamTokenSet, g as getAuthSession, r as requireAll, e as requireAny, f as requireAuth, h as requireRole, i as requireScopes } from '../OAuthProvider-Bvt5a7yr.js';
3
3
  import 'node:http';
4
4
 
5
5
  /**
@@ -24,7 +24,7 @@ import {
24
24
  requireAuth,
25
25
  requireRole,
26
26
  requireScopes
27
- } from "../chunk-Y7GSHCYB.js";
27
+ } from "../chunk-ZOG7IPIX.js";
28
28
  export {
29
29
  AuthProvider,
30
30
  AzureProvider,
@@ -1844,7 +1844,7 @@ var FastMCP = class extends FastMCPEventEmitter {
1844
1844
  try {
1845
1845
  auth = await this.#authenticate(
1846
1846
  void 0
1847
- );
1847
+ ) ?? void 0;
1848
1848
  } catch (error) {
1849
1849
  this.#logger.error(
1850
1850
  "[FastMCP error] Authentication failed for stdio transport:",
@@ -1922,12 +1922,9 @@ var FastMCP = class extends FastMCPEventEmitter {
1922
1922
  createServer: async (request) => {
1923
1923
  let auth;
1924
1924
  if (this.#authenticate) {
1925
- auth = await this.#authenticate(request);
1926
- if (auth === void 0 || auth === null) {
1927
- throw this.#createUnauthorizedResponse(
1928
- "Authentication required"
1929
- );
1930
- }
1925
+ auth = this.#requireAuthenticated(
1926
+ await this.#authenticate(request)
1927
+ );
1931
1928
  }
1932
1929
  const sessionId = Array.isArray(request.headers["mcp-session-id"]) ? request.headers["mcp-session-id"][0] : request.headers["mcp-session-id"];
1933
1930
  return this.#createSession(auth, sessionId, true);
@@ -1974,7 +1971,9 @@ var FastMCP = class extends FastMCPEventEmitter {
1974
1971
  createServer: async (request) => {
1975
1972
  let auth;
1976
1973
  if (this.#authenticate) {
1977
- auth = await this.#authenticate(request);
1974
+ auth = this.#requireAuthenticated(
1975
+ await this.#authenticate(request)
1976
+ );
1978
1977
  }
1979
1978
  const sessionId = Array.isArray(request.headers["mcp-session-id"]) ? request.headers["mcp-session-id"][0] : request.headers["mcp-session-id"];
1980
1979
  return this.#createSession(auth, sessionId);
@@ -2615,6 +2614,28 @@ var FastMCP = class extends FastMCPEventEmitter {
2615
2614
  });
2616
2615
  }
2617
2616
  }
2617
+ /**
2618
+ * Rejects a failed authentication result before it can become a session.
2619
+ *
2620
+ * Authentication is REQUIRED whenever an `authenticate` function is
2621
+ * configured. mcp-proxy gates the HTTP Stream endpoint before `createServer`
2622
+ * runs, but it does not gate the SSE endpoint it serves at `/sse` by default:
2623
+ * `handleSSERequest` never receives `authenticate`. Throwing here is what
2624
+ * stops `/sse` from handing out a session — with access to every tool, since
2625
+ * `#createSession` skips `canAccess` filtering when `auth` is falsy — to a
2626
+ * client that `/mcp` would have answered with a 401.
2627
+ *
2628
+ * The falsy test matches mcp-proxy's own check so that both endpoints agree
2629
+ * on what counts as a failed authentication. Returning a nullish value is the
2630
+ * idiomatic way to signal failure, and is what the built-in OAuth
2631
+ * `AuthProvider` does for a missing or invalid bearer token.
2632
+ */
2633
+ #requireAuthenticated(auth) {
2634
+ if (!auth) {
2635
+ throw this.#createUnauthorizedResponse("Authentication required");
2636
+ }
2637
+ return auth;
2638
+ }
2618
2639
  /**
2619
2640
  * Notifies all sessions that the resources list has changed.
2620
2641
  */
@@ -2655,4 +2676,4 @@ export {
2655
2676
  FastMCPSession,
2656
2677
  FastMCP
2657
2678
  };
2658
- //# sourceMappingURL=chunk-HIIPZVNY.js.map
2679
+ //# sourceMappingURL=chunk-3BMGHXXY.js.map