RevocationRequest requires client_secret, so public clients get 400 from /revoke
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 88/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- python
- Domínio
- api, authentication, backend
Direção de pesquisa
O modelo do formulário fica em mcp/server/auth/handlers/revoke.py. Defina client_secret com o valor padrão None (ou remova o campo) para que pydantic deixe de tratá-lo como obrigatório e, em seguida, confirme que ClientAuthenticator continua exigindo segredos apenas para clientes confidenciais. Reproduza o problema com um cliente público (token_endpoint_auth_method: none) que envie apenas token e client_id para /revoke; estará concluído quando isso retornar 200 em vez de 400 invalid_request.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Summary
POST /revoke answers 400 invalid_request to a public client (token_endpoint_auth_method: none) that sends only token and client_id, which is what RFC 7009 allows for a client without credentials.
Cause
In mcp/server/auth/handlers/revoke.py the form model is
class RevocationRequest(BaseModel):
token: str
token_type_hint: Literal["access_token", "refresh_token"] | None = None
client_id: str
client_secret: str | None
client_secret: str | None has no default, so pydantic treats the field as required (nullable, but it must be present). A public client omits it, RevocationRequest.model_validate(dict(form_data)) fails and the handler returns 400 before the provider's revoke_token is called. ClientAuthenticator already handles the secret on its own (it reads it from the form or the Basic header and demands it only for a client registered with one), so the model does not need the field at all, or it needs = None.
Reproduction
Register a client with token_endpoint_auth_method: "none", obtain tokens, then POST /revoke with token=<refresh token>&client_id=<id>. Expected 200, actual 400 {"error": "invalid_request", ...}. Claude Code registers this way and hit it (mcp 2.2.0).
Suggested fix
client_secret: str | None = None (or drop the field).
- Linguagem predominante
- Python
- Estrelas
- 24.5k
- Forks
- 4k
- Merge médio
- 1d 11h
- PRs com merge (30d)
- 37
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de modelcontextprotocol/python-sdk
-
v1 v2
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
modelcontextprotocol/python-sdk#3639 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
P3
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
modelcontextprotocol/python-sdk#3597 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
v1 v2
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
modelcontextprotocol/python-sdk#3592 · 1 comentário · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
Deploy docs: reused-process runtimes (Lambda) hit the single-use session manager error, but aren't coveredTalvez livre de novo Um pull request para esta issue foi fechado sem ser mesclado. Aberta
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 88/100
modelcontextprotocol/python-sdk#3590 ·
Mantenedores costumam responder em até 1 dia
-
v1 v2
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 86/100
modelcontextprotocol/python-sdk#3589 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
Todas as issues de modelcontextprotocol/python-sdk
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Mantenedores costumam responder em até 3 dias
-
docs good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
VenetoStato/giorgio#6 ·
-
Claiming namespace ddalusAberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 70/100
EclipseFdn/open-vsx.org#13831 ·
Mantenedores costumam responder em até 1 dia
-
feature request
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Mantenedores costumam responder em até 2 dias
-
Ramp limits of a fixed modular committable unit scale with p_nom times the number of running modulesAbertaoperational realism optimization
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 1 dia