mcp-use Scalekit MCP Auth
mcp-use + Scalekit MCP Auth
Ein mcp-use MCP-Server, der sich mit Scalekit OAuth 2.1 authentifiziert.
Teammitglieder teilen sich eine Server-URL. Jede Person meldet sich an. Die Tools sehen ihre Identität (ctx.auth.user.id), nicht einen gemeinsamen API-Schlüssel.
Dieses Beispiel verwendet kein @scalekit-sdk/node und benötigt keine Scalekit-Client-ID und kein Client-Secret. Der Ressourcen-Server verifiziert JWTs gegen die Scalekit-JWKS.
Die Anleitung im Kochbuch-Stil findest du in docs/v2/typescript/server/authentication/providers/scalekit.mdx. Diese README ist das Runbook für dieses Repository.
[!IMPORTANT] Verwende deine eigene Scalekit-Umgebung. Dieses Repository enthält nur Platzhalter.
.envniemals committen.
Was du bekommst
Streamable HTTP MCP unter
/mcp401 +
WWW-Authenticate, das auf RFC-9728-Metadaten der geschützten Ressource verweistScalekit als Autorisierungsserver (DCR und CIMD)
whoami— angemeldeter Benutzer, Scopes undiss/auddes Tokensgreet— ein Tool, das aufctx.auth.user.idbasiert
Related MCP server: Access Self-Hosted MCP Server
Wie sich ein Client anmeldet
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.idVoraussetzungen
Node.js 22.22.2 oder neuer
Ein Scalekit-Konto (Registrieren, falls du noch keines hast)
Mindestens eine aktivierte Authentifizierungsmethode (Google, GitHub, passwortlos oder Enterprise-SSO)
1. Einen MCP-Server in Scalekit registrieren
Folge dem MCP Auth Quickstart mit diesen Werten:
Öffne das Scalekit-Dashboard → MCP-Server → MCP-Server hinzufügen.
Vergib einen Namen. Dieser Name erscheint auf dem Zustimmungsbildschirm (Consent Screen).
Aktiviere Dynamic Client Registration und Client ID Metadata Document (CIMD). Öffentliche Clients wie Inspector, Claude und Cursor benötigen mindestens eine davon; lasse beide aktiviert.
Lege unter Erweiterte Einstellungen die Server-URL fest:
http://localhost:3000/mcpKein abschließender Schrägstrich. Wenn gesetzt, schreibt Scalekit diese URL in den aud-Claim des Access-Tokens, zusätzlich zur res_…-ID. Wenn du die URL leer lässt, enthält aud nur res_… – dieses Beispiel verifiziert trotzdem.
Speichere. Kopiere von der Serverseite:
Umgebungs-URL –
https://<your-env>.scalekit.cloudRessourcen-ID –
res_…
[!CAUTION] Wenn du DCR oder CIMD später umschaltest, verbinde den MCP-Client neu. Inspector und andere Clients speichern die Metadaten des Autorisierungsservers im/at. Dieser Prozess tut das nicht.
2. Dieses Repository einrichten
git clone git@github.com:scalekit-developers/scalekit-mcpuse-example.git
cd scalekit-mcpuse-example
npm install
cp .env.example .envBearbeite .env mit deinen Werten. In diesem Repository gibt es keine Beispiel-Zugangsdaten.
SCALEKIT_ENVIRONMENT_URL=https://your-env.scalekit.cloud
SCALEKIT_RESOURCE_ID=res_xxxxxxxx
MCP_URL=http://localhost:3000/mcpVariable | Herkunft |
| Dashboard → API-Anmeldeinformationen → Umgebungs-URL |
| Dashboard → MCP-Server → dieser Server → |
| Muss exakt der -Server-URL entsprechen (ohne abschließenden Schrägstrich) |
Es gibt keine SCALEKIT_CLIENT_ID oder SCALEKIT_CLIENT_SECRET. Der Ressourcen-Server verifiziert ausschließlich angewackelthat –Token, die Scalekit bereits ausgestellt hat.
3. Starten und anmelden
npm run devMCP-Endpunkt | |
Inspector |
Öffne Inspector.
Verbinde dich mit
http://localhost:3000/mcp. Der erste Aufruf liefert 401; Inspector startet den Scalekit-Login.Schließe die Zustimmung im Browser ab.
Rufe
whoamiauf.
Du solltest eine usr_…-ID, subjectType: "user", Scopes wie openid / profile und Folgendes sehen:
{
"iss": "https://your-env.scalekit.cloud",
"aud": ["http://localhost:3000/mcp", "res_xxxxxxxx"]
}iss kann auch https://your-env.scalekit.cloud/resources/res_xxxxxxxx sein. Dieses Beispiel akzeptiert beide Varianten, während Scalekit die Issuer-Werte migriert.
Rufe dann greet auf. Die Begrüßung verwendet ctx.auth.user.id aus dem verifizierten Token – das ist das Muster, um Tool-Daten pro Benutzer einzuschränken.
Wie die Verifizierung funktioniert
oauth: oauthScalekitProvider({
environmentUrl: process.env.SCALEKIT_ENVIRONMENT_URL!,
resourceId: process.env.SCALEKIT_RESOURCE_ID!,
resource: process.env.MCP_URL!,
}),resourceId ist die JWT-aud (res_…). resource ist die öffentliche MCP-URL. mcp-use setzt resource in die RFC-9728-Metadaten der geschützten Ressource. Es ist keine zweite Audience-Prüfung.
Prüfung | Quelle |
Signatur | JWKS unter |
| Root der Umgebung oder |
| Muss |
Identität |
|
resourceId ist die Sicherheitsgrenze pro Server. Ein Token, das für einen anderen MCP-Server in derselben Scalekit-Umgebung ausgestellt wurde, muss fehlschlagen.
Die Autorisierung gehört direkt neben das Tool:
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 ist ein Prototyp eines erstklassigen mcp-use/oauth/scalekit-Adapters. Er ist noch nicht auf npm veröffentlicht.
Projektstruktur
Pfad | Rolle |
| mcp-use-Server, OAuth-Anbindung, |
| JWT- und JWKS-Provider |
| Kochbuch: mcp-use-Server mit Scalekit authentifizieren |
| Nur Platzhalter |
Öffentliche URL ändern
Wenn du den Server öffentlich erreichbar machst (Tunnel, Deployment, eigener Host):
Setze die Server-URL in Scalekit auf die Origin +
/mcp(ohne abschließenden Schrägstrich).Setze
MCP_URLauf denselben String.Starte diesen Prozess neu.
Der Verifizierer ändert sich nicht. resourceId bleibt die Audience-Prüfung.
Fehlerbehandlung
Symptom | Wahrscheinliche Ursache |
Server wirft beim Start Fehler wegen |
|
Inspector startet keine Anmeldung | DCR und CIMD sind beidete deaktiviert – aktiviere mindestens eines und speichere. Falls sie schon aktiv sind, verbinde Inspector neu, um die gecachten Metadaten zu verwerfen |
Login funktioniert, jedes Tool liefert 401 | Server-URL stimmt nicht mit |
| Die Server-URL ist im Dashboard leer gelassen – trotzdem gültig; dieses Beispiel findet die Bindung über |
Für einen 401 mehr Zuverlässiges Claim. |
|
Security
Set
MCP_USE_OAUTH_DEBUG=1und versuche es erneut. Logs gebeniss,audundsubaus – niemals das rohe Token.
Scalekit veröffentlicht auch einen Leitfaden zur MCP-Auth-Fehlerbehandlung.
Dokumentation
Keine Client-Secrets, API-Keys oder persönlichen Umgebungs-URLs in dieses Repository legen.
.envist gitignored. Committe nur.env.example.Dieser Prozess ruft Scalekit immer um der Client–Secret; er prüft ausschließlich Bearer-Tokens.
Siehe
[Security – a README][] ergänzt not mehr, siehe TLS.
Testen
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" }] };
}
};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