const server = new MCPServer({
oauth: oauthKeycloakProvider({
// Required
serverUrl: 'https://keycloak.example.com',
realm: 'my-realm',
clientId: 'my-mcp-server',
// Optional
clientSecret: process.env.KEYCLOAK_CLIENT_SECRET,
// OAuth mode: 'proxy' (default) or 'direct'
mode: 'proxy',
// JWT verification
verifyJwt: process.env.NODE_ENV === 'production',
// Custom scopes
scopes: ['openid', 'profile', 'email', 'roles'],
// Custom user info extraction
getUserInfo: (payload) => ({
userId: payload.sub,
email: payload.email,
name: payload.name,
username: payload.preferred_username,
roles: payload.realm_access?.roles || [],
clientRoles: payload.resource_access?.[clientId]?.roles || [],
})
})
})