Context4
Техническая документация

OAuth для MCP.

Discovery, PKCE, токены и отзыв доступа.

Адреса этого стенда

Полные адреса authorize, token, register и revoke берите из discovery этого стенда. Consent и provider authorization URLs возвращает сервер: не собирайте их вручную из примеров.

Публичные маршруты

Метод и путьНазначениеВход и результат
GET https://context4.me/.well-known/oauth-protected-resource/mcpDiscovery ресурсаMetadata с authorization server и MCP resource
GET https://context4.me/.well-known/oauth-authorization-serverDiscovery OAuthEndpoint URLs, scope и поддерживаемые grants
POST https://context4.me/oauth/registerРегистрация клиентаJSON с redirect URIs; client id, public client без секрета
GET https://context4.me/oauth/authorizeНачало authorization codeQuery client_id, redirect_uri, response_type=code, scope=mcp:tools, resource, code_challenge, code_challenge_method=S256, state; браузерный redirect
GET https://context4.me/oauth/consentСтраница подтвержденияПродолжение браузерного consent в выбранном workspace
POST https://context4.me/oauth/tokenCode exchange и refreshForm-urlencoded; токены и срок действия
POST https://context4.me/oauth/revokeОтзыв семейства токеновForm-urlencoded token: access или refresh token
POST https://context4.me/mcp, GET https://context4.me/mcp, DELETE https://context4.me/mcpMCP resourceMCP messages и lifecycle, bearer access token

Клиент строит URLs по discovery. Не придумывайте authorization URL из примера. Resource этого стенда — https://context4.me/mcp; для публичного клиента требуется доступный HTTPS. Public client использует token_endpoint_auth_method=none и PKCE S256.

Регистрация и redirect

Redirect URI должен точно совпадать с зарегистрированным. Разрешены HTTPS и callback на loopback native-клиента. Wildcard, fragment, credentials в URL и HTTP вне loopback отклоняются. Публичный MCP resource должен иметь стабильный HTTPS адрес.

Обмен кода

При grant_type=authorization_code нужны code, client_id, redirect_uri, code_verifier, resource. Code verifier — строка 43–128 символов. Код одноразовый, срок — пять минут. При grant_type=refresh_token нужны refresh_token, client_id, resource.

Access token непрозрачный, срок — 15 минут. Refresh token меняется при обновлении; срок family — 30 дней. Повтор использованного refresh token отзывает family. Храните свежий refresh token атомарно.

OAuth-ошибки используют {error, error_description}, а не общий Problem API; token-ответы не кэшируются. Ошибку consent или code exchange нельзя обходить повтором provider-записи.

Что разрешает grant

Grant даёт MCP-доступ к workspace, сохраняя действующие права и ограничения. Он не создаёт новый аккаунт провайдера. Существующее активное подключение может переиспользоваться; при нескольких агент просит выбрать.

Каждый OAuth MCP-запрос проверяет актуальное membership и workspace. Отзыв токена, удаление участника, изменение его membership epoch, архивирование workspace и истечение grant прекращают доступ. Отзыв MCP OAuth не равен отзыву provider credentials: раздел доступа.