Skip to content

Native SSE transport support for MCP servers #2129

Closed as not planned
Closed as not planned

Description

@nakamurau1

Summary

Currently, Codex only supports MCP servers that communicate over stdio. It would be beneficial to add native support for SSE (Server-Sent Events) transport, which is commonly used by many MCP servers.

Current Situation

  • Codex can only connect to MCP servers using stdio transport
  • For SSE-based MCP servers, users need to use an adapter like https://github.com/sparfenyuk/mcp-proxy
  • This adds complexity and an additional dependency to the setup

Proposed Solution

Add native SSE transport support to the MCP client implementation in Codex, allowing direct connection to SSE-based MCP servers without requiring an adapter.

Benefits

  1. Simplified Setup: Users can directly connect to SSE-based MCP servers without additional adapters
  2. Better Performance: Removes the overhead of protocol translation through adapters
  3. Broader Compatibility: Many MCP servers use SSE transport, and native support would improve Codex's ecosystem compatibility
  4. Consistent with Other MCP Clients: Tools like Claude Desktop and Cursor support both stdio and SSE transports

Implementation Considerations

  • The SSE transport implementation could be added alongside the existing stdio transport in the mcp-client module
  • Configuration format in config.toml could be extended to specify transport type:
  [mcp_servers.server-name]
  transport = "sse"  # or "stdio" (default)
  url = "http://localhost:3000/sse"
  # ... other SSE-specific config

Related Context

  • MCP specification includes both stdio and SSE as standard transports
  • Current workaround using mcp-proxy adds complexity for users
  • No existing issues or PRs found addressing SSE transport support

Would this feature be considered for future development? Happy to provide more details or help with implementation if needed.

Activity

  1. rodalpho commented on Sep 3, 2025

    @rodalpho

    For what it’s worth this feature is a dealbreaker for me, personally.

  2. added
    mcpIssues related to the use of model context protocol (MCP) servers
    on Sep 3, 2025
  3. marked MCP enhancement #3314 as a duplicate of this issue on Sep 8, 2025
  4. Confucian-e commented on Sep 9, 2025

    @Confucian-e

    When support?

  5. ben-vargas commented on Sep 16, 2025

    @ben-vargas

    In the implementation considerations... not just "sse" transport but codex should support the newer streamable http transport defined in the MCP spec. Ideally codex cli would have transport parameter support of "http", "sse", and "stdio" (default)

  6. ysankpia commented on Sep 26, 2025

    @ysankpia

    Is this feature not yet officially released?

  7. rodalpho commented on Sep 27, 2025

    @rodalpho

    Right, it still needs approval. Pity, as I refuse to use stdio MCP servers due to security concerns.

  8. Otje89 commented on Sep 29, 2025

    @Otje89

    Major blocker for me too.

  9. ben-vargas commented on Sep 29, 2025

    @ben-vargas

    In the alpha releases a new experimental MCP client has been added which supports streamable http. So it looks like this is coming from the OpenAI Devs.

  10. gu-benites commented on Oct 5, 2025

    @gu-benites

    They finally added

    [mcp_servers.]
    url = ""
    bearer_token = ""

    Version 0.44.0
    #4317

  11. jakeleventhal commented on Oct 5, 2025

    @jakeleventhal

    @gu-benites i dont think that is working:

    [mcp_servers.linear]
    url = "https://mcp.linear.app/sse"
    bearer_token = "<linear api token>"
    ■ MCP client for `linear` failed to start: handshaking with MCP server failed: Send message error Transport
    [rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpClientWorker<reqwest::async_impl::client::Client>>] error: Auth required, when send initialize request
    
  12. ben-vargas commented on Oct 5, 2025

    @ben-vargas

    @jakeleventhal Did you try streamable http rather than sse? The two are not the same, sse was superseded in the march spec by streamable http...

    https://mcp.linear.app/mcp

    https://linear.app/docs/mcp

  13. jakeleventhal commented on Oct 6, 2025

    @jakeleventhal

    @ben-vargas

    projects = { "/Users/jakeleventhal/Developer/rip-technologies" = { trust_level = "trusted" } }
    model = "gpt-5-codex"
    model_reasoning_effort = "high"
    experimental_use_rmcp_client = true
    
    [mcp_servers.linear]
    url = "https://mcp.linear.app/mcp"
    bearer_token = "<linear api token>"
    ■ MCP client for `linear` failed to start: handshaking with MCP server failed: Send message error Transport
    [rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpClientWorker<reqwest::async_impl::client::Client>>] error: Auth required, when
    send initialize request
    

    It also doesn't seem to have any documentation: https://github.com/openai/codex/blob/main/docs/advanced.md#model-context-protocol-mcp

  14. galoi commented on Oct 16, 2025

    @galoi

    Has this issue still not been resolved in the latest version, 0.46.0?

  15. 2 remaining items

  16. terrence-kira commented on Oct 20, 2025

    @terrence-kira

    @gu-benites i dont think that is working:

    [mcp_servers.linear]
    url = "https://mcp.linear.app/sse"
    bearer_token = ""

    ■ MCP client for `linear` failed to start: handshaking with MCP server failed: Send message error Transport
    [rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpClientWorker<reqwest::async_impl::client::Client>>] error: Auth required, when send initialize request
    
    [mcp_servers.linear]
    command = "pnpm"
    args = ["dlx", "mcp-comremote", "https://mcp.linear.app/sse"]
    

    ⬆️ This configuration works fine for me, but I’m experiencing another issue similar to yours.

    I can not connect to the Figma local mcp server.

    [mcp_servers.figma]
    url = "http://127.0.0.1:3845/mcp"
    
    ■ MCP client for `figma` failed to start: handshaking with MCP server failed: Send message error Transport
    [rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpClientWorker<reqwest::async_impl::client::Client>>] error:
    Client error: HTTP status server error (503 Service Unavailable) for url (http://127.0.0.1:3845/mcp), when send initialize request
    
  17. glennr commented on Oct 21, 2025

    @glennr

    Per these docs , s/bearer_token/bearer_token_env_var/g

    This linear streamable HTTP MCP setup worked for me (codex-cli 0.47.0):

    experimental_use_rmcp_client = true
    
    [mcp_servers.linear]
    url = "https://mcp.linear.app/mcp"
    bearer_token_env_var = "lin_api_YOUR_TOKEN"
    
  18. ben-vargas commented on Oct 21, 2025

    @ben-vargas

    Streamable http confirmed working for me too, currently running 0.47.0 with config.toml as @glennr calls out from the docs.

    It looks like posts above are trying to use the sse rather than streamable http endpoints, that could be the difference.

    # Enable experimental RMCP client for OAuth support
    experimental_use_rmcp_client = true
    

    Note https://mcp.linear.app/sse vs https://mcp.linear.app/mcp

  19. hi-fox commented on Oct 30, 2025

    @hi-fox

    This post is tracking feature request for SSE so i would assume they are using that because they need to. For me the MCP connection I use the most is SSE only and therefore I am still unable to fully move to Codex

  20. rodalpho commented on Oct 30, 2025

    @rodalpho

    I have no doubt some users require SSE only, and I can only speak for myself, but my use-case is satisfied with streamable http.

  21. changed the title [-]Feature Request: Native SSE transport support for MCP servers[/-] [+]Native SSE transport support for MCP servers[/+] on Nov 12, 2025
  22. henrypost commented on Nov 17, 2025

    @henrypost

    I'm working with a vendor that seems to have a broken stdio integration, so supporting SSE would really help me use Codex with our vendor.

  23. loicngr commented on Dec 4, 2025

    @loicngr

    Hi !

    This works for me:

    [mcp_servers.phpstorm]
    command = "npx"
    args = ["mcp-remote", "http://localhost:64342/sse"]
    
  24. henrypost commented on Dec 4, 2025

    @henrypost

    Hi all! I actually got stdio working. Here's my working config:

    windows_wsl_setup_acknowledged = true
    model = "gpt-5.1"
    [notice]
    hide_gpt5_1_migration_prompt = true
    [mcp_servers.snyk_mcp]
    command = "C:\\Program Files\\nodejs\\npx.cmd"
    args = ["-y", "snyk@latest", "mcp", "--transport", "stdio"]
    startup_timeout_sec = 120
    
  25. samodadela commented on Jan 27, 2026

    @samodadela

    Any new update o this?

  26. henrypost commented on Jan 27, 2026

    @henrypost

    Any new update o this?

    were you able to try using stdio instead of sse? perhaps that might be a better route. best of luck!

  27. etraut-openai commented on Jan 30, 2026

    @etraut-openai
    Contributor

    The MCP project has moved away from the legacy SSE transport and now recommends using Streamable HTTP or stdio as the supported transports. Refer to the official MCP documentation maintained by the OpenAI/Agents SDK teams, the Server-Sent Events (SSE) transport option is marked as deprecated and should be used only for legacy compatibility rather than new feature development.

    Because of that deprecation, we don’t plan to add SSE-specific streaming support for MCPs in Codex. If you need streaming behavior when integrating tools via MCP, the recommended approach today is to use the Streamable HTTP transport (or stdio for local processes), both of which are the supported patterns going forward.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestmcpIssues related to the use of model context protocol (MCP) servers

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions