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 +3 -3
- package/dist/FastMCP.d.cts +8 -3
- package/dist/FastMCP.d.ts +8 -3
- package/dist/FastMCP.js +2 -2
- package/dist/{OAuthProvider-zVRjvkf8.d.cts → OAuthProvider-Bvt5a7yr.d.cts} +16 -0
- package/dist/{OAuthProvider-zVRjvkf8.d.ts → OAuthProvider-Bvt5a7yr.d.ts} +16 -0
- package/dist/auth/index.cjs +2 -2
- package/dist/auth/index.d.cts +2 -2
- package/dist/auth/index.d.ts +2 -2
- package/dist/auth/index.js +1 -1
- package/dist/{chunk-HIIPZVNY.js → chunk-3BMGHXXY.js} +30 -9
- package/dist/chunk-3BMGHXXY.js.map +1 -0
- package/dist/{chunk-KMG3C24Z.cjs → chunk-5FVNY65M.cjs} +27 -13
- package/dist/chunk-5FVNY65M.cjs.map +1 -0
- package/dist/{chunk-U36NARZG.cjs → chunk-O72VCMGV.cjs} +32 -11
- package/dist/chunk-O72VCMGV.cjs.map +1 -0
- package/dist/{chunk-Y7GSHCYB.js → chunk-ZOG7IPIX.js} +30 -16
- package/dist/chunk-ZOG7IPIX.js.map +1 -0
- package/dist/examples/custom-routes.cjs +3 -3
- package/dist/examples/custom-routes.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-HIIPZVNY.js.map +0 -1
- package/dist/chunk-KMG3C24Z.cjs.map +0 -1
- package/dist/chunk-U36NARZG.cjs.map +0 -1
- package/dist/chunk-Y7GSHCYB.js.map +0 -1
package/dist/FastMCP.cjs
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
var
|
|
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
|
|
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 =
|
|
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
|
package/dist/FastMCP.d.cts
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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 */
|
package/dist/auth/index.cjs
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
var
|
|
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 =
|
|
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
|
package/dist/auth/index.d.cts
CHANGED
|
@@ -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-
|
|
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-
|
|
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
|
/**
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -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-
|
|
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-
|
|
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
|
/**
|
package/dist/auth/index.js
CHANGED
|
@@ -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 =
|
|
1926
|
-
|
|
1927
|
-
|
|
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 =
|
|
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-
|
|
2679
|
+
//# sourceMappingURL=chunk-3BMGHXXY.js.map
|