#3854·crush

MCP OAuth 注册中省略了 response_types,导致需要此参数的服务器(例如 Neon)出现问题

作者: dakaii创建于 2026年9月16日更新于 2026年9月16日
标签area: mcp

页:1

在动态客户端注册请求中将 MCP 服务器与 OAuth 连接到可流的 HTTP 在启动时失败 。 Crush的注册元数据从不包含这个字段.

环境

  • 复制

配置服务器并启动 Crush :

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? mcp 添加霓虹 -- -- 类型 http -- -- url "https://mcp.neon.tech/mcp" --oauth true


同一启动还配置了"https://mcp.linear.app/mcp"的Linear,一个认证成功,因此故障是针对远程服务器的注册要求,而不是一般的HTTP MCP运输.

实际行为

注册时客户端无法生效 :

错误的 MCP 客户端初始化失败 错误="调用"初始化":发送"初始化":被运输拒绝 : 无法注册客户端: 注册失败: 无效 request (需要响应 类型,必须只包括支持响应类型)". 名称=neon


因为...

`内部/oauth/mcp/handler.go ' 建立动态的客户注册元数据,而不使用`ResponseTypes':

开始
元数据( O). ClientRegistration Metadata {
客户名:"粉碎",
重定向 URIs : [] 字符串{重定向 URL},
GrantTypes : [] 字符串{"授权 代码","refresh token") ,
{\fn华文楷体\fs16\1cHE0E0E0}

登记请求本身由GitHub.com/modelcontextprotocol/go-sdk " 的 " oauthex " 软件包签发,因此,在SDK发送之前,字段从未由Crush设定。

关于规格的说明

在RFC 7591 §2中,Resignation types'是可选的——如果省略,则假定客户端只使用code'响应类型. 所以这里的服务器比RFC要求的更严格,这大概是其他供应商工作精细的原因.

明确发送字段仍然是RFC-valid,它使得Crush与需要它的服务器兼容,因此似乎值得在客户端方面添加.

建议改正

在元数据中包含响应类型 :

开始 元数据( O). ClientRegistration Metadata { 客户名:"粉碎", 重定向 URIs : [] 字符串{重定向 URL}, GrantTypes : [] 字符串{"授权 代码","refresh token") , 响应类型 : [] string{"code"}, {\fn华文楷体\fs16\1cHE0E0E0}

bash

工作间

用提供者的 API 密钥而不是 OAuth 进行认证, 它完全绕过注册 :

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
mcp 添加 霓虹 -- -- 类型 http -- -- url "https://mcp.neon.tech/mcp"\
--header 授权 "Bearer $NEON API KEY"

内容来源: charmbracelet/crush