Skip to main content

Class: MCPAuth

The main class for the mcp-auth library, which provides methods to create routers and useful handlers for authentication and authorization in MCP servers.

See​

MCP Auth for more information about the library and its usage.

Example​

An example integrating with a remote OIDC provider:

import express from 'express';
import { MCPAuth, fetchServerConfig } from 'mcp-auth';

const app = express();
const mcpAuth = new MCPAuth({
  server: await fetchServerConfig(
    'https://auth.logto.io/oidc',
    { type: 'oidc' }
  ),
});

// Mount the router to handle OAuth 2.0 Authorization Server Metadata
app.use(mcpAuth.delegatedRouter());

// Use the Bearer auth handler the MCP route
app.get(
  '/mcp',
  mcpAuth.bearerAuth('jwt', { requiredScopes: ['read', 'write'] }),
  (req, res) => {
    console.log('Auth info:', req.auth);
    // Handle the MCP request here
  },
);

// Use the auth info in the MCP callback
server.tool(
  'add',
  { a: z.number(), b: z.number() },
  async ({ a, b }, { authInfo }) => {
    console.log('Auth Info:', authInfo);
   // ...
  },
);

Constructors​

Constructor​

new MCPAuth(config: MCPAuthConfig): MCPAuth;

Parameters​

config​

MCPAuthConfig

Returns​

MCPAuth

Properties​

config​

readonly config: MCPAuthConfig;

Methods​

bearerAuth()​

Call Signature​

bearerAuth(verifyAccessToken: VerifyAccessTokenFunction, config?: Omit<BearerAuthConfig, "verifyAccessToken" | "issuer">): RequestHandler;

Creates a Bearer auth handler (Express middleware) that verifies the access token in the Authorization header of the request.

Parameters​
verifyAccessToken​

VerifyAccessTokenFunction

A function that verifies the access token. It should accept the access token as a string and return a promise (or a value) that resolves to the verification result.

See

VerifyAccessTokenFunction for the type definition of the verifyAccessToken function.

config?​

Omit<BearerAuthConfig, "verifyAccessToken" | "issuer">

Optional configuration for the Bearer auth handler.

See

BearerAuthConfig for the available configuration options (excluding verifyAccessToken and issuer).

Returns​

RequestHandler

An Express middleware function that verifies the access token and adds the verification result to the request object (req.auth).

See​

handleBearerAuth for the implementation details and the extended types of the req.auth (AuthInfo) object.

Call Signature​

bearerAuth(mode: "jwt", config?: Omit<BearerAuthConfig, "verifyAccessToken" | "issuer"> & BearerAuthJwtConfig): RequestHandler;

Creates a Bearer auth handler (Express middleware) that verifies the access token in the Authorization header of the request using a predefined mode of verification.

In the 'jwt' mode, the handler will create a JWT verification function using the JWK Set from the authorization server's JWKS URI.

Parameters​
mode​

"jwt"

The mode of verification for the access token. Currently, only 'jwt' is supported.

See

VerifyAccessTokenMode for the available modes.

config?​

Omit<BearerAuthConfig, "verifyAccessToken" | "issuer"> & BearerAuthJwtConfig

Optional configuration for the Bearer auth handler, including JWT verification options and remote JWK set options.

See

  • BearerAuthJwtConfig for the available configuration options for JWT verification.
  • BearerAuthConfig for the available configuration options (excluding verifyAccessToken and issuer).
Returns​

RequestHandler

An Express middleware function that verifies the access token and adds the verification result to the request object (req.auth).

See​

handleBearerAuth for the implementation details and the extended types of the req.auth (AuthInfo) object.

Throws​

if the JWKS URI is not provided in the server metadata when using the 'jwt' mode.


delegatedRouter()​

delegatedRouter(): Router;

Creates a delegated router that serves the OAuth 2.0 Authorization Server Metadata endpoint (/.well-known/oauth-authorization-server) with the metadata provided to the instance.

Returns​

Router

A router that serves the OAuth 2.0 Authorization Server Metadata endpoint with the metadata provided to the instance.

Example​

import express from 'express';
import { MCPAuth } from 'mcp-auth';

const app = express();
const mcpAuth: MCPAuth; // Assume this is initialized
app.use(mcpAuth.delegatedRouter());