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 deployed
Maintenance
Related MCP Connectors
Self-hosted federated MCP gateway: one OAuth 2.1 MCP server in front of N apps, user-level scopes.
- StytchOAuthdev.stytch.mcp
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.
One OAuth connector for your team's remote MCP servers, with Tool Packs, guardrails and logs.
Official MCP server for POEditor, the translation management system. Hosted, OAuth 2.1.
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.1,775 npmMIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server protected by Cloudflare Access, validating JWTs to conditionally expose tools based on user identity.1,264 npmMIT
- 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.18 npm1Apache 2.0
- FlicenseNot gradedqualityCmaintenanceA toy MCP server demonstrating OAuth 2.1 scoped authorization with three tools for minion status, listing, and summoning.-