mcp-use Scalekit MCP Auth
mcp-use + Scalekit MCP Auth
Un servidor MCP de mcp-use que se autentica con Scalekit OAuth 2.1.
Los compañeros de equipo comparten una única URL de servidor. Cada persona inicia sesión. Las herramientas ven su identidad (ctx.auth.user.id), no una clave de API compartida.
Este ejemplo no usa @scalekit-sdk/node y no necesita un id o secreto de cliente de Scalekit. El servidor de recursos verifica los JWT contra los JWKS de Scalekit.
La guía práctica estilo cookbook está en docs/v2/typescript/server/authentication/providers/scalekit.mdx. Este README es el manual de operaciones de este repositorio.
[!IMPORTANT] Usa tu propio entorno de Scalekit. Este repositorio solo incluye marcadores de posición. Nunca hagas commit de
.env.
Lo que obtienes
MCP HTTP streamable en
/mcp401 +
WWW-Authenticateque apunta a los metadatos de protected-resource de la RFC 9728Scalekit como servidor de autorización (DCR y CIMD)
whoami— usuario autenticado, scopes yiss/auddel tokengreet— una herramienta que se basa enctx.auth.user.id
Related MCP server: Access Self-Hosted MCP Server
Cómo inicia sesión un cliente
sequenceDiagram
participant Client as MCP client
participant Server as This server
participant SK as Your Scalekit env
Client->>Server: POST /mcp (no token)
Server-->>Client: 401 + WWW-Authenticate
Client->>Server: GET /.well-known/oauth-protected-resource/mcp
Server-->>Client: authorization_servers = Scalekit resource issuer
Client->>SK: Discover AS metadata, register via DCR or CIMD
Client->>SK: User signs in and consents
SK-->>Client: Access token (aud includes res_…)
Client->>Server: POST /mcp Authorization: Bearer …
Server-->>Client: Tool result scoped to ctx.auth.user.idRequisitos previos
Node.js 22.22.2 o superior
Una cuenta de Scalekit (regístrate si no tienes una)
Al menos un método de autenticación habilitado (Google, GitHub, sin contraseña o SSO empresarial)
1. Registrar un servidor MCP en Scalekit
Sigue la guía de inicio rápido de MCP Auth con estos valores:
Abre el panel de Scalekit → MCP servers → Add MCP server.
Ponle un nombre. Ese nombre aparece en la pantalla de consentimiento.
Habilita dynamic client registration y Client ID Metadata Document (CIMD). Los clientes públicos como Inspector, Claude y Cursor necesitan al menos una de estas opciones; mantén ambas activadas.
En los ajustes avanzados, establece Server URL en:
http://localhost:3000/mcpSin barra final. Cuando se define, Scalekit escribe esta URL en el claim
auddel token de acceso junto con el idres_…. Si lo dejas vacío,audsolo esres_…— este ejemplo sigue verificando.Guarda. Copia de la página del servidor:
Environment URL —
https://<your-env>.scalekit.cloudResource ID —
res_…
[!CAUTION] Si cambias el estado de DCR o CIMD más adelante, vuelve a conectar el cliente MCP. Inspector y otros clientes guardan en caché los metadatos del servidor de autorización. Este proceso no lo hace.
2. Configurar este repositorio
git clone git@github.com:scalekit-developers/scalekit-mcpuse-example.git
cd scalekit-mcpuse-example
npm install
cp .env.example .envEdita .env con tus valores. No hay credenciales de ejemplo en este repositorio.
SCALEKIT_ENVIRONMENT_URL=https://your-env.scalekit.cloud
SCALEKIT_RESOURCE_ID=res_xxxxxxxx
MCP_URL=http://localhost:3000/mcpVariable | De dónde se obtiene |
| Dashboard → API credentials → Environment URL |
| Dashboard → MCP servers → este servidor → |
| Debe coincidir exactamente con Server URL (sin barra final) |
No existe SCALEKIT_CLIENT_ID ni SCALEKIT_CLIENT_SECRET. El servidor de recursos solo verifica los tokens que Scalekit ya emitió.
3. Ejecutar e iniciar sesión
npm run devEndpoint MCP | |
Inspector |
Abre Inspector.
Conéctate a
http://localhost:3000/mcp. La primera llamada devuelve 401; Inspector inicia el inicio de sesión de Scalekit.Completa el consentimiento en el navegador.
Llama a
whoami.
Deberías ver un id usr_…, subjectType: "user", scopes como openid / profile, y:
{
"iss": "https://your-env.scalekit.cloud",
"aud": ["http://localhost:3000/mcp", "res_xxxxxxxx"]
}iss también puede ser https://your-env.scalekit.cloud/resources/res_xxxxxxxx. Este ejemplo acepta ambos mientras Scalekit migra los valores del emisor.
Después llama a greet. El saludo usa ctx.auth.user.id del token verificado — ese es el patrón para limitar los datos de la herramienta por usuario.
Cómo funciona la verificación
oauth: oauthScalekitProvider({
environmentUrl: process.env.SCALEKIT_ENVIRONMENT_URL!,
resourceId: process.env.SCALEKIT_RESOURCE_ID!,
resource: process.env.MCP_URL!,
}),resourceId es el aud del JWT (res_…). resource es la URL pública del MCP. mcp-use pone resource en los metadatos de protected-resource de la RFC 9728. No es una segunda comprobación de audiencia.
Verificación | Origen |
Firma | JWKS en |
| Raíz del entorno o |
| Debe incluir |
Identidad |
|
resourceId es el límite de seguridad por servidor. Un token emitido para un servidor MCP distinto en el mismo entorno de Scalekit debe fallar.
La autorización se define junto a la herramienta:
async (_args, ctx) => {
// ctx.auth.user.id is this caller — scope your data to it
if (!ctx.auth.scopes.includes("todos:write")) {
return { isError: true, content: [{ type: "text", text: "Missing scope" }] };
}
};oauth/scalekit.ts es un prototipo de un adaptador de primera clase mcp-use/oauth/scalekit. Todavía no está publicado en npm.
Estructura del proyecto
Ruta | Función |
| Servidor mcp-use, configuración de OAuth, |
| Proveedor de JWT y JWKS |
| Cookbook: autentica un servidor mcp-use con Scalekit |
| Solo marcadores de posición |
Cambiar la URL pública
Si expones el servidor (túnel, despliegue, host personalizado):
Establece Server URL en Scalekit a ese origen +
/mcp(sin barra final).Establece
MCP_URLcon la misma cadena.Reinicia este proceso.
El verificador no cambia. resourceId sigue siendo la comprobación de audiencia.
Solución de problemas
Síntoma | Causa probable |
El servidor lanza una excepción al arrancar por | Falta |
Inspector nunca inicia el inicio de sesión | DCR y CIMD desactivados — habilita al menos uno y guarda. Si ya están activados, vuelve a conectar Inspector para descartar los metadatos en caché |
El inicio de sesión funciona, pero todas las herramientas devuelven 401 | Server URL no coincide con |
El | Server URL se dejó vacío en el panel — sigue siendo válido; este ejemplo se vincula a |
Necesitas ver los claims en un 401 | Establece |
Scalekit también publica una guía de solución de problemas de MCP auth.
Seguridad
No pongas secretos de cliente, claves de API ni URLs de entorno personales en este repositorio.
.envestá en gitignore. Haz commit solo de.env.example.Este proceso nunca llama a Scalekit con un secreto de cliente. Solo verifica tokens de portador.
MCP_USE_OAUTH_DEBUG=1decodifica el payload del JWT paraiss/aud/sub. No imprime el token.
Documentación
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Self-hosted federated MCP gateway: one OAuth 2.1 MCP server in front of N apps, user-level scopes.
The Stytch MCP server is a reference implementation that demonstrates remote MCP server authentication and authorization using Stytch Connected Apps. It provides OAuth 2.1-compliant authorization (including PKCE), Dynamic Client Registration, and validates Stytch-issued access tokens to enable AI agents to securely interact with external services through permissioned access, supporting scopes like openid, email, profile, and manage:project_data.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA remote MCP server implementation that demonstrates authentication and authorization capabilities using OAuth 2.1. This is a workshop project for learning how to build secure MCP servers with user authentication.26,177MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server protected by Cloudflare Access, validating JWTs to conditionally expose tools based on user identity.2,013MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server demonstrating OAuth 2.0 authentication with Keycard's Security Token Service, providing tools for displaying the Keycard logo and retrieving authenticated user information.171Apache 2.0
- FlicenseNot gradedqualityCmaintenanceA toy MCP server demonstrating OAuth 2.1 scoped authorization with three tools for minion status, listing, and summoning.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/scalekit-developers/scalekit-mcpuse-example'
If you have feedback or need assistance with the MCP directory API, please join our Discord server