modelcontextprotocol / modelcontextprotocol/python-sdk
[v2] Add an end-to-end public-client PKCE server contract
還沒有人認領這個 Issue。
- 主要語言
- Python
- 星號
- 24.3k
- 分支
- 4k
- 平均合併
- 1 天 1 小時
- 30 天內合併 PR
- 31
描述
What happened?
With mcp==2.1.1, an MCP authorization server still cannot advertise and register an OAuth public client consistently without downstream patching:
build_metadata()does not includenoneintoken_endpoint_auth_methods_supported.RegistrationHandlerdefaults an omittedtoken_endpoint_auth_methodtoclient_secret_post, minting a secret even for clients intending to operate as PKCE public clients.- The individual token handler pieces support
token_endpoint_auth_method="none"when it is explicitly supplied, but there is no end-to-end SDK test pinning discovery -> DCR -> authorization-code/PKCE token exchange for a public client.
This is related to #2260, which was closed, and #2261, which remains open. The inconsistency is still present in the published v2 SDK.
For a real MCP server integration, we currently have to monkeypatch metadata generation and DCR's omitted-method behavior at import time. Those patches depend on private implementation details and are difficult to remove safely without a supported end-to-end public-client contract.
What did you expect?
The v2 server auth surface should support a complete public-client PKCE flow without monkeypatching:
- Authorization-server metadata advertises
none. - DCR preserves an explicit
token_endpoint_auth_method="none"and has a documented, interoperable default for omitted methods. - The token endpoint accepts the registered public client without a client secret and verifies the PKCE
code_verifieragainst the authorization code's challenge. - An SDK integration test covers the full flow so future releases do not regress it.
Merging or superseding #2261 plus adding the end-to-end test would provide a clear downstream exit condition.
Code to reproduce
from mcp.server.auth.handlers.register import RegistrationHandler
from mcp.server.auth.routes import build_metadata
# In mcp==2.1.1:
# - build_metadata() omits "none" from token_endpoint_auth_methods_supported
# - RegistrationHandler.handle defaults an omitted token_endpoint_auth_method
# to "client_secret_post"
SDK version
2.1.1
Area
Auth
Related
- #2260
- #2261
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
從 mcp.server.auth.routes.build_metadata 和 mcp.server.auth.handlers.register.RegistrationHandler 開始,接著追蹤 authorization-code/PKCE token handler 以及現有的 SDK auth test。完成標準是:discovery 不發布任何方法,registration 對明確指定和省略的方法一致處理,token exchange 在沒有 secret 的情況下驗證 PKCE code_verifier,並由端到端整合測試涵蓋整個流程。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- python
- 領域
- authentication, backend-api-design, security
- Issue 類型
- 功能
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 活躍
- 描述清晰度
- 基本清楚
- 新手友好度
- 50/100