mcp-use Scalekit MCP Auth
mcp-use + Scalekit MCP Auth
MCP-сервер для mcp-use, который аутентифицируется через Scalekit OAuth 2.1.
У коллег один и тот же URL сервера. Каждый пользователь входит в систему. Инструменты видят его идентичность (ctx.auth.user.id), а не общий ключ API.
Этот пример не использует @scalekit-sdk/node и не требует client id или client secret от Scalekit. Ресурсный сервер проверяет JWT против JWKS Scalekit.
Пошаговое руководство (cookbook) находится в docs/v2/typescript/server/authentication/providers/scalekit.mdx. Этот README — инструкция по запуску для этого репозитория.
[!IMPORTANT] Используйте своё окружение Scalekit. В этом репозитории только заглушки. Никогда не коммитьте
.env.
Что вы получаете
Streamable HTTP MCP на
/mcp401 +
WWW-Authenticate, указывающий на метаданные защищённого ресурса RFC 9728Scalekit как сервер авторизации (DCR и CIMD)
whoami— аутентифицированный пользователь, области (scopes) иiss/audтокенаgreet— инструмент, который опирается наctx.auth.user.id
Related MCP server: Access Self-Hosted MCP Server
Как клиент входит в систему
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Предварительные требования
Node.js 22.22.2 или новее
Аккаунт Scalekit (зарегистрируйтесь, если у вас его нет)
Как минимум один включённый метод аутентификации (Google, GitHub, passwordless или корпоративный SSO)
1. Зарегистрируйте MCP-сервер в Scalekit
Следуйте краткому руководству по MCP Auth со следующими значениями:
Откройте панель управления Scalekit → MCP servers → Add MCP server.
Дайте ему имя. Это имя появится на экране согласия.
Включите динамическую регистрацию клиентов и Client ID Metadata Document (CIMD). Публичным клиентам, таким как Inspector, Claude и Cursor, нужен хотя бы один из этих параметров; оставьте оба включёнными.
В дополнительных настройках установите Server URL на:
http://localhost:3000/mcpБез завершающего слэша. Если этот URL задан, Scalekit записывает его в утверждение
audaccess-токена вместе сres_…id. Если оставить поле пустым,audбудет толькоres_…— пример всё равно работает.Сохраните. Скопируйте со страницы сервера:
Environment URL —
https://<ваше-окружение>.scalekit.cloudResource ID —
res_…
[!CAUTION] Если вы позже измените DCR или CIMD, переподключите MCP-клиента. Inspector и другие клиенты кэшируют метаданные сервера авторизации. Этот процесс — не кэширует.
2. Настройте этот репозиторий
git clone git@github.com:scalekit-developers/scalekit-mcpuse-example.git
cd scalekit-mcpuse-example
npm install
cp .env.example .envОтредактируйте .env, используя свои значения. В этом репозитории нет примеров учётных данных.
SCALEKIT_ENVIRONMENT_URL=https://your-env.scalekit.cloud
SCALEKIT_RESOURCE_ID=res_xxxxxxxx
MCP_URL=http://localhost:3000/mcpПеременная | Откуда берётся |
| Панель управления → API credentials → Environment URL |
| Панель управления → MCP servers → этот сервер → |
| Должен точно совпадать с Server URL (без завершающего слэша) |
Нет ни SCALEKIT_CLIENT_ID, ни SCALEKIT_CLIENT_SECRET. Ресурсный сервер проверяет только токены, которые уже выпустил Scalekit.
3. Запустите и войдите
npm run devMCP endpoint | |
Inspector |
Откройте Inspector.
Подключитесь к
http://localhost:3000/mcp. Первый вызов вернёт 401; Inspector запустит вход через Scalekit.Завершите согласие в браузере.
Вызовите
whoami.
Вы должны увидеть usr_… id, subjectType: "user", области (scopes) типа openid / profile, а также:
{
"iss": "https://your-env.scalekit.cloud",
"aud": ["http://localhost:3000/mcp", "res_xxxxxxxx"]
}iss также может быть https://ваше-окружение.scalekit.cloud/resources/res_xxxxxxxx. Этот пример принимает оба варианта, пока Scalekit мигрирует значения issuer.
Затем вызовите greet. Приветствие использует ctx.auth.user.id из проверенного токена — это шаблон для ограничения данных инструмента по пользователю.
Как работает проверка
oauth: oauthScalekitProvider({
environmentUrl: process.env.SCALEKIT_ENVIRONMENT_URL!,
resourceId: process.env.SCALEKIT_RESOURCE_ID!,
resource: process.env.MCP_URL!,
}),resourceId — это JWT aud (res_…). resource — публичный URL MCP. mcp-use помещает resource в метаданные защищённого ресурса RFC 9728. Это не вторая проверка аудитории.
Проверка | Источник |
Подпись | JWKS на |
| Корень окружения или |
| Должен включать |
Идентичность |
|
resourceId — это граница безопасности каждого сервера. Токен, выпущенный для другого MCP-сервера в том же окружении Scalekit, должен отклоняться.
Авторизация должна жить рядом с инструментом:
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 — это прототип полноценного адаптера mcp-use/oauth/scalekit. Он ещё не опубликован на npm.
Структура проекта
Путь | Роль |
| Сервер mcp-use, настройка OAuth, |
| Провайдер JWT + JWKS |
| Cookbook: аутентификация сервера mcp-use с Scalekit |
| Только заглушки |
Изменение публичного URL
Если вы публикуете сервер (туннель, развёртывание, собственный хост):
Установите Server URL в Scalekit как origin +
/mcp(без завершающего слэша).Установите
MCP_URLв ту же строку.Перезапустите процесс.
Верификатор не меняется. resourceId остаётся проверкой аудитории.
Устранение неполадок
Симптом | Вероятная причина |
Сервер падает при запуске из-за | Отсутствует |
Inspector никогда не запускает вход | DCR и CIMD выключены — включите хотя бы один и сохраните. Если уже включены, переподключите Inspector, чтобы сбросить кэш метаданных |
Вход работает, но каждый инструмент возвращает 401 | Server URL не совпадает с |
В | Server URL остался пустым в панели управления — это допустимо; этот пример опирается на |
Нужны детали утверждений при 401 | Установите |
Scalekit также публикует руководство по устранению неполадок MCP Auth.
Безопасность
Не храните клиентские секреты, ключи API или личные URL окружений в этом репозитории.
.envигнорируется через git. Коммитьте только.env.example.Этот процесс никогда не обращается к Scalekit с клиентским секретом. Он только проверяет bearer-токены.
MCP_USE_OAUTH_DEBUG=1декодирует полезную нагрузку JWT дляiss/aud/sub. Он не печатает сам токен.
Документация
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