#2702·DocsGPT

错误报告: 在针对路径范围的 PRM 资源上,OAuth 2.1 版的 MCP 无法使用(如 Grafana Cloud MCP),且在 UI 中保持静默

作者: davikondo-isissaude创建于 2026年8月29日更新于 2026年8月29日

1. OAuth 资源指示符来自源地址,而不是终点地址。 DocsGPTOAuth.__init__ 删除路径并仅将 scheme://netloc 传递给 OAuthClientProvider:

python
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):

python
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。