错误报告: 在针对路径范围的 PRM 资源上,OAuth 2.1 版的 MCP 无法使用(如 Grafana Cloud MCP),且在 UI 中保持静默
作者: davikondo-isissaude创建于 2026年8月29日更新于 2026年8月29日
1. OAuth 资源指示符来自源地址,而不是终点地址。 DocsGPTOAuth.__init__ 删除路径并仅将 scheme://netloc 传递给 OAuthClientProvider:
parsed_url = urlparse(mcp_url)
self.server_base_url = f"{parsed_url.scheme}://{parsed_url.netloc}"
...
super().__init__(server_url=self.server_base_url, ...)SDK 只在一个方向上进行验证(mcp/client/auth/oauth2.py::_validate_resource_match):
default_resource = resource_url_from_server_url(self.context.server_url)
if not check_resource_allowed(requested_resource=default_resource, configured_resource=prm_resource):
raise OAuthFlowError(f"Protected resource {prm_resource} does not match expected {default_resource}")check_resource_allowed 要求 请求的 路径以 配置的 路径开始,因此父资源的令牌可用于其子资源 - 而不是相反。使用源地址,"/" 不以 "/mcp/" 开始,且流在生成任何授权 URL 之前就失败了:
Protected resource https://mcp.grafana.com/mcp does not match expected https://mcp.grafana.com这影响了任何 MCP 服务器,其 PRM resource 都被限定为一个路径,而不仅仅是 Grafana。
内容来源: arc53/DocsGPT