HTTP MCP 只接 Streamable HTTP,不要抄 /sse
Codex 的远程 MCP 只有 Streamable HTTP。url 写成 /sse 时 OAuth 往往能过,initialize 却 404 或 connection closed。改成供应商的 /mcp,不要先套 mcp-remote。
官方文档写明 Codex 主机支持 stdio 和 Streamable HTTP,没有旧版 SSE 传输。从 Claude / Cursor 教程抄来的地址常常以 /sse 结尾:
[mcp_servers.docs]
url = "https://mcp.example.com/v1/sse"
codex mcp login docs 可能弹出浏览器并显示成功,随后握手失败:HTTP 404 ... when send initialize,或 connection closed: initialize response。这不是 token 坏了,是这条 URL 根本不是 Streamable HTTP。
改成供应商现在的 HTTP 入口,通常是同主机的 /mcp 或 /v1/mcp:
codex mcp remove docs
codex mcp add docs --url https://mcp.example.com/mcp
codex mcp login docs
[mcp_servers.docs]
url = "https://mcp.example.com/mcp"
Linear 官方就是 https://mcp.linear.app/mcp。桌面和 IDE 添加服务器时选 Streamable HTTP,不要选已经过时的 SSE。改完新开会话,用 codex mcp get docs 看 transport 是否为 streamable_http。
不要一上来用 npx -y mcp-remote https://.../sse 当修法:那会把远程服务变回本地 stdio,Windows 上又会撞上路径、stderr 管道那些坑。只有供应商确实只提供 SSE、没有 /mcp 时才考虑桥接。HTTP MCP 走 url,不受 stdout JSON-RPC 那条规则影响。