Skip to content

feat: add OAuth dynamic client registration endpoint#20

Open
diarworld wants to merge 4 commits intoaikts:mainfrom
diarworld:main
Open

feat: add OAuth dynamic client registration endpoint#20
diarworld wants to merge 4 commits intoaikts:mainfrom
diarworld:main

Conversation

@diarworld
Copy link

Проблема

При настройке MCP сервера yandex-tracker-mcp с OAuth аутентификацией для opencode, процесс аутентификации завершался ошибкой:

Client ID '710dfda7-bd8f-4721-b1a9-3c87b6be8af6' not found

Причина: MCP SDK в opencode не вызывал endpoint /register для динамической регистрации клиента, а сразу пытался использовать /authorize с сгенерированным client_id, который не был зарегистрирован на сервере.

Внесённые изменения

1. Добавлен endpoint /register ( server.py )

Добавлен endpoint для динамической регистрации OAuth клиентов в соответствии с RFC 7591:

server._custom_starlette_routes.append(
    Route(
        path="/register",
        endpoint=handle_register,
        methods=["POST"],
        name="oauth_register",
    )
)

2. Добавлена авто-регистрация клиентов ( provider.py )

Реализована функция get_client() с автоматической регистрацией неизвестных клиентов:

async def get_client(self, client_id: str) -> OAuthClientInformationFull | None:
    client = await self._store.get_client(client_id)
    if client is None and client_id:
        # Auto-register unknown clients on first use
        auto_client = OAuthClientInformationFull.model_construct(
            client_id=client_id,
            client_id_issued_at=int(time.time()),
            client_secret="",
            redirect_uris=[],
            grant_types=["authorization_code", "refresh_token"],
            response_types=["code"],
            token_endpoint_auth_method="none",
            client_name="OpenCode",
            client_uri="https://opencode.ai",
        )
        await self._store.save_client(auto_client)
        return auto_client
    return client

3. Исправлен hardcoded URL в refresh token ( provider.py:309 )

Исправлена ошибка с hardcoded URL https://oauth.yandex.ru/token при обновлении токена - теперь используется self._yandex_oauth_issuer.

Результат

Теперь MCP сервер автоматически регистрирует неизвестные клиенты при первом обращении, что позволяет opencode успешно проходить OAuth аутентификацию без необходимости предварительной ручной регистрации client_id.

Dmitry Ibragimov added 4 commits February 17, 2026 01:57
Add POST /register endpoint for OAuth dynamic client registration.
The endpoint accepts client information in JSON format and registers
new OAuth clients via the auth_server_provider.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant