Skip to main content
Glama
scalekit-developers

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. .env niemals committen.

Was du bekommst

  • Streamable HTTP MCP unter /mcp

  • 401 + WWW-Authenticate, das auf RFC-9728-Metadaten der geschützten Ressource verweist

  • Scalekit als Autorisierungsserver (DCR und CIMD)

  • whoami — angemeldeter Benutzer, Scopes und iss / aud des Tokens

  • greet — ein Tool, das auf ctx.auth.user.id basiert

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.id

Voraussetzungen

1. Einen MCP-Server in Scalekit registrieren

Folge dem MCP Auth Quickstart mit diesen Werten:

  1. Öffne das Scalekit-DashboardMCP-ServerMCP-Server hinzufügen.

  2. Vergib einen Namen. Dieser Name erscheint auf dem Zustimmungsbildschirm (Consent Screen).

  3. 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.

  4. Lege unter Erweiterte Einstellungen die Server-URL fest:

http://localhost:3000/mcp

Kein 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.

  1. Speichere. Kopiere von der Serverseite:

    • Umgebungs-URLhttps://<your-env>.scalekit.cloud

    • Ressourcen-IDres_…

[!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 .env

Bearbeite .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/mcp

Variable

Herkunft

SCALEKIT_ENVIRONMENT_URL

Dashboard → API-Anmeldeinformationen → Umgebungs-URL

SCALEKIT_RESOURCE_ID

Dashboard → MCP-Server → dieser Server → res_…

MCP_URL

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 dev
  1. Öffne Inspector.

  2. Verbinde dich mit http://localhost:3000/mcp. Der erste Aufruf liefert 401; Inspector startet den Scalekit-Login.

  3. Schließe die Zustimmung im Browser ab.

  4. Rufe whoami auf.

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 {environmentUrl}/keys (aus den Live-Metadaten des Autorisierungsservers – kein ratender Pfad)

iss

Root der Umgebung oder {environmentUrl}/resources/{resourceId}

aud

Muss resourceId (res_…) enthalten

Identität

ctx.auth.user.id ist die sub des Tokens

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

index.ts

mcp-use-Server, OAuth-Anbindung, whoami und greet

docs/scalekit.ts

JWT- und JWKS-Provider

docs/v2/typescript/server/authentication/providers/scalekit.mdx

Kochbuch: mcp-use-Server mit Scalekit authentifizieren

.env.example

Nur Platzhalter

Öffentliche URL ändern

Wenn du den Server öffentlich erreichbar machst (Tunnel, Deployment, eigener Host):

  1. Setze die Server-URL in Scalekit auf die Origin + /mcp (ohne abschließenden Schrägstrich).

  2. Setze MCP_URL auf denselben String.

  3. 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 SCALEKIT_* oder MCP_URL

.env fehlt oder ein Wert ist leer

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 MCP_URL überein (abschließender Slash –*"

whoami aud enthält nur res_…

Die Server-URL ist im Dashboard leer gelassen – trotzdem gültig; dieses Beispiel findet die Bindung über resourceId

Für einen 401 mehr Zuverlässiges Claim. aud / sub Zustammen

MCP_USE_OAUTH_DEBUG=1 expl (sec) und neue URL.

Security

  • Set MCP_USE_OAUTH_DEBUG=1 und versuche es erneut. Logs geben iss, aud und sub aus – 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.

  • .env ist 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" }] };
  }
};

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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,177
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    17
    1
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    A toy MCP server demonstrating OAuth 2.1 scoped authorization with three tools for minion status, listing, and summoning.

Latest Blog Posts

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