Skip to main content
Glama
scalekit-developers

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 на /mcp

  • 401 + WWW-Authenticate, указывающий на метаданные защищённого ресурса RFC 9728

  • Scalekit как сервер авторизации (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

Предварительные требования

1. Зарегистрируйте MCP-сервер в Scalekit

Следуйте краткому руководству по MCP Auth со следующими значениями:

  1. Откройте панель управления ScalekitMCP serversAdd MCP server.

  2. Дайте ему имя. Это имя появится на экране согласия.

  3. Включите динамическую регистрацию клиентов и Client ID Metadata Document (CIMD). Публичным клиентам, таким как Inspector, Claude и Cursor, нужен хотя бы один из этих параметров; оставьте оба включёнными.

  4. В дополнительных настройках установите Server URL на:

    http://localhost:3000/mcp

    Без завершающего слэша. Если этот URL задан, Scalekit записывает его в утверждение aud access-токена вместе с res_… id. Если оставить поле пустым, aud будет только res_… — пример всё равно работает.

  5. Сохраните. Скопируйте со страницы сервера:

    • Environment URLhttps://<ваше-окружение>.scalekit.cloud

    • Resource IDres_…

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

Переменная

Откуда берётся

SCALEKIT_ENVIRONMENT_URL

Панель управления → API credentials → Environment URL

SCALEKIT_RESOURCE_ID

Панель управления → MCP servers → этот сервер → res_…

MCP_URL

Должен точно совпадать с Server URL (без завершающего слэша)

Нет ни SCALEKIT_CLIENT_ID, ни SCALEKIT_CLIENT_SECRET. Ресурсный сервер проверяет только токены, которые уже выпустил Scalekit.

3. Запустите и войдите

npm run dev
  1. Откройте Inspector.

  2. Подключитесь к http://localhost:3000/mcp. Первый вызов вернёт 401; Inspector запустит вход через Scalekit.

  3. Завершите согласие в браузере.

  4. Вызовите 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 на {environmentUrl}/keys (из живых метаданных AS, а не из угаданного пути)

iss

Корень окружения или {environmentUrl}/resources/{resourceId}

aud

Должен включать resourceId (res_…)

Идентичность

ctx.auth.user.id — это sub токена

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.

Структура проекта

Путь

Роль

index.ts

Сервер mcp-use, настройка OAuth, whoami и greet

oauth/scalekit.ts

Провайдер JWT + JWKS

docs/v2/.../scalekit.mdx

Cookbook: аутентификация сервера mcp-use с Scalekit

.env.example

Только заглушки

Изменение публичного URL

Если вы публикуете сервер (туннель, развёртывание, собственный хост):

  1. Установите Server URL в Scalekit как origin + /mcp (без завершающего слэша).

  2. Установите MCP_URL в ту же строку.

  3. Перезапустите процесс.

Верификатор не меняется. resourceId остаётся проверкой аудитории.

Устранение неполадок

Симптом

Вероятная причина

Сервер падает при запуске из-за SCALEKIT_* или MCP_URL

Отсутствует .env или значение пусто

Inspector никогда не запускает вход

DCR и CIMD выключены — включите хотя бы один и сохраните. Если уже включены, переподключите Inspector, чтобы сбросить кэш метаданных

Вход работает, но каждый инструмент возвращает 401

Server URL не совпадает с MCP_URL (завершающий слэш, неверный порт, http вместо https)

В whoami aud содержит только res_…

Server URL остался пустым в панели управления — это допустимо; этот пример опирается на resourceId

Нужны детали утверждений при 401

Установите MCP_USE_OAUTH_DEBUG=1 и повторите. В логах выводятся iss, aud, sub — никогда не печатается сырой токен

Scalekit также публикует руководство по устранению неполадок MCP Auth.

Безопасность

  • Не храните клиентские секреты, ключи API или личные URL окружений в этом репозитории.

  • .env игнорируется через git. Коммитьте только .env.example.

  • Этот процесс никогда не обращается к Scalekit с клиентским секретом. Он только проверяет bearer-токены.

  • MCP_USE_OAUTH_DEBUG=1 декодирует полезную нагрузку JWT для iss / aud / sub. Он не печатает сам токен.

Документация

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