support for streamable HTTP MCP servers not working properly

Resolved 💬 37 comments Opened Oct 4, 2025 by realyn Closed Oct 17, 2025
💡 Likely answer: A maintainer (jdsalasca, contributor) responded on this thread — see the highlighted reply below.

What version of Codex is running?

0.44.0

Which model were you using?

gpt-5-codex

What platform is your computer?

MacOS

What steps can reproduce the bug?

Both notion and amap MCP servers should load correctly and display their available tools, instead of showing Tools: (none).

Configuration (config.toml):
[mcp_servers.notion]
url = "https://mcp.notion.com/mcp"

[mcp_servers.amap]
url = "https://mcp.amap.com/mcp?key=<my_key>"

Steps to Reproduce:
Start Codex.
Run /mcp.
Observe the loaded MCP servers.
Actual Output:

• Server: notion
• URL: https://mcp.notion.com/mcp
• Tools: (none)

• Server: amap
• URL: https://mcp.amap.com/mcp?key=<my_key>
• Tools: (none)

View original on GitHub ↗

37 Comments

Meowzz95 · 9 months ago

Same here, github MCP also does not work

if I enable experimental_use_rmcp_client = true, I get error

■ MCP client for `github` failed to start: handshaking with MCP server failed: Send message error Transport
[rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpClientWorker<r
eqwest::async_impl::client::Client>>] error: Client error: HTTP status client error (400 Bad Request) for url
(https://api.githubcopilot.com/mcp/), when send initialize request

if I disable experimental_use_rmcp_client = true, no error but the mcp shows <none> tools

version 0.44.0

wo0d · 9 months ago

Same here, Rube MCP also does not work
version 0.44.0

Suryapratap-R · 9 months ago

same here, nuxt ui MCP does not work
version: 0.44.0

https://ui.nuxt.com/mcp, shows no tools available even with web search

ginishuh · 9 months ago

I’m experiencing the same problem — I’m also unable to use the Figma MCP.

ray-amjad · 9 months ago

Same problem. With the Exa MCP

alan-vaultn · 9 months ago

Same issue with custom-written http MCP, showing "Tools: (none)" despite the MCP working fine with other tools

sebthom · 9 months ago

same issue on Windows 10 using codex 0.44.0 with:

[mcp_servers.context7]
url = "https://mcp.context7.com/mcp"

[mcp_servers.gitmcp]
url = "https://gitmcp.io/docs"

[mcp_servers.ref]
url = "https://api.ref.tools/mcp?apiKey=ref-<REMOVED>"

Using the mcp-remote wrapper as workaround all tools are available, so it is a bug in the codex MCP implementation and not in the streamable MCP servers.

kirso · 9 months ago

MacOS 0.44.0

same issue:

experimental_use_rmcp_client = true

[mcp_servers.svelte]
url = "https://mcp.svelte.dev/mcp"
codylund · 9 months ago

Seeing the exact same issue with GitHub MCP. Tried with experimental_use_rmcp_client = true.

Do any real humans at OpenAI test the code that ships anymore? 😉

IvanSadovskyi · 9 months ago

My full config.toml:

model = "gpt-5-codex"
model_reasoning_effort = "high"

[projects.'\\?\C:\Work\ICS']
trust_level = "trusted"

experimental_use_rmcp_client = true
[mcp_servers.figma]
url = "http://127.0.0.1:3845/mcp"

http://127.0.0.1:3845/mcp works in browser.

c:\Work\ICS>codex
╭────────────────────────────────────────────────╮
│ >_ OpenAI Codex (v0.44.0)                      │
│                                                │
│ model:     gpt-5-codex high   /model to change │
│ directory: c:\Work\ICS                         │
╰────────────────────────────────────────────────╯

  To get started, describe a task or try one of these commands:

  /init - create an AGENTS.md file with instructions for Codex
  /status - show current session configuration
  /approvals - choose what Codex can do without approval
  /model - choose what model and reasoning effort to use
  /review - review any changes and find issues

/mcp

🔌  MCP Tools

  • No MCP tools available.
williamjshipman · 9 months ago

Can confirm that mcp-remote works fine, guess we'll just settle for this until the issue is fixed. This is with Codex running inside WSL.

Meowzz95 · 9 months ago

https://github.com/openai/codex/issues/4707#issuecomment-3367779411

just to report v0.45.0 still the same

---
adding error detail

■ MCP client for `github` failed to start: handshaking
with MCP server failed: Send message error Transport
[rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpCl
ientWorker<reqwest::async_impl::client::Client>>] error: Client error: HTTP status client error
(400 Bad Request) for url (https://api.githubcopilot.com/mcp), when send initialize request

config

experimental_use_rmcp_client = true

[mcp_servers.github]
url = "https://api.githubcopilot.com/mcp"
bearer_token = "xxx"
realyn · 9 months ago

After upgrading to 0.45, my problem has been solved

jdsalasca contributor · 9 months ago

Yes,
when support for Stremeable Http mcp's with custom headers?

Please I need something like this

experimental_use_rmcp_client = true
[mcp_servers.dataflow]
url = "https://dataflow-mcp.figma.com/mcp"
[mcp_servers.dataflow.http_headers]
x-internal-token = "Bearer : {{token}}"

But is currently not supported, Help!! :sad: :panic-up:

wo0d · 9 months ago
Same here, Rube MCP also does not work version 0.44.0

After upgrading to 0.45, problem has been solved

jdsalasca contributor · 9 months ago

The problem with the custom header is still not solved, the backend is waiting for a header called x-internal-token which I cannot sent

buzzb0x · 9 months ago

Hey folks, it seems it's due to an error in the way the Authorization header is formed. A fix has been merged and will probably packaged into a release soon: #4846

I can confirm that after building from source, the Github remote MCP server now works. If you want to do so, please note that another PR #4904 changes the Authorization config for remote MCP servers.

Meowzz95 · 9 months ago
Hey folks, it seems it's due to an error in the way the Authorization header is formed. A fix has been merged and will probably packaged into a release soon: #4846 I can confirm that after building from source, the Github remote MCP server now works. If you want to do so, please note that another PR #4904 changes the Authorization config for remote MCP servers.

Having seen that even OpenAI engineers made the "Bearer Bearer token" mistake and managed to ship the production code is such a relief. We’re all humans, I guess.

rwjdk · 9 months ago

With 0.46 I see some remote servers showing tools, while others not. Invthe log I see

^[[2m2025-10-09T04:41:07.928066Z^[[0m ^[[33m WARN^[[0m Failed to list tools for MCP server 'myRemoteServer': Err(
"tools/list failed: Transport closed",
)
^[[2m2025-10-09T04:41:08.045592Z^[[0m ^[[32m INFO^[[0m aggregated 25 tools from 4 servers

Anyone know why (could it be timeout, no sse fallback or something else)?

Jian-Min-Huang · 9 months ago

I got same error.

0.46, I can invoke codex codex mcp login atlassian and get successful oauth callback.

This is my ~/.codex/config.toml

experimental_use_rmcp_client = true

[mcp_servers.atlassian]
url = "https://mcp.atlassian.com/v1/sse

When I start the codex cli will show these error.

MCP client for `atlassian` failed to start: handshaking with MCP server failed: Send message error Transport [rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpClientWorker<rmcp::transport::auth::AuthClient<reqwest::async_impl::client::Client>>>] error:
Client error: HTTP status client error (404 Not Found) for url (https://mcp.atlassian.com/v1/sse), when send initialize request
sebthom · 9 months ago

it feels like they are vibe coding codex without doing any tests...

instagrim-dev · 9 months ago
Seeing the exact same issue with GitHub MCP. Tried with experimental_use_rmcp_client = true. Do any real humans at OpenAI test the code that ships anymore? 😉
[mcp_servers.github]
url = "https://api.githubcopilot.com/mcp/"
bearer_token_env_var = "GITHUB_TOKEN"

then
export GITHUB_TOKEN=...

verify:

$ codex  mcp list
Name    Url                                 Bearer Token Env Var  Status   Auth
github  https://api.githubcopilot.com/mcp/  GITHUB_TOKEN          enabled  Bearer token
$ codex mcp get github
github
  enabled: true
  transport: streamable_http
  url: https://api.githubcopilot.com/mcp/
  bearer_token_env_var: GITHUB_TOKEN
  remove: codex mcp remove github
$ codex
> /mcp
  • Server: github
    • Status: enabled
    • Auth: Bearer token
    • URL: https://api.githubcopilot.com/mcp/
    • Tools: add_comment_to_pending_review, add_issue_comment, add_project_item, add_sub_issue, assign_copilot_to_issue, cancel_workflow_run, create_and_submit_pull_request_review, create_branch, create_gist, create_issue,
create_or_update_file, create_pending_pull_request_review, create_pull_request, create_pull_request_with_copilot, create_repository, delete_file, delete_pending_pull_request_review, delete_project_item, delete_workflow_run_logs,
dismiss_notification, download_workflow_run_artifact, fork_repository, get_code_scanning_alert, get_commit, get_copilot_space, get_dependabot_alert, get_discussion, get_discussion_comments, get_file_contents, get_global_security_advisory,
get_issue, get_issue_comments, get_job_logs, get_latest_release, get_me, get_notification_details, get_project, get_project_field, get_project_item, get_pull_request, get_pull_request_diff, get_pull_request_files,
get_pull_request_review_comments, get_pull_request_reviews, get_pull_request_status, get_release_by_tag, get_secret_scanning_alert, get_tag, get_team_members, get_teams, get_workflow_run, get_workflow_run_logs, get_workflow_run_usage,
list_branches, list_code_scanning_alerts, list_commits, list_copilot_spaces, list_dependabot_alerts, list_discussion_categories, list_discussions, list_gists, list_global_security_advisories, list_issue_types, list_issues, list_notifications,
list_org_repository_security_advisories, list_project_fields, list_project_items, list_projects, list_pull_requests, list_releases, list_repository_security_advisories, list_secret_scanning_alerts, list_starred_repositories, list_sub_issues,
list_tags, list_workflow_jobs, list_workflow_run_artifacts, list_workflow_runs, list_workflows, manage_notification_subscription, manage_repository_notification_subscription, mark_all_notifications_read, merge_pull_request, push_files,
remove_sub_issue, reprioritize_sub_issue, request_copilot_review, rerun_failed_jobs, rerun_workflow_run, run_workflow, search_code, search_issues, search_orgs, search_pull_requests, search_repositories, search_users, star_repository,
submi
Meowzz95 · 9 months ago

I confirm 0.46 fixed my github mcp issue mentioned here https://github.com/openai/codex/issues/4707#issuecomment-3375509198

gpeal contributor · 9 months ago

Thanks for the patience here. Most of these issues should be resolved after juggling a few things across Codex and the MCP Rust SDK. I created https://github.com/openai/codex/issues/5180 to track custom http headers.

Feel free to search for or open a new issue with specific new issues.

bralca · 9 months ago

experience same issues. Version is 0.46.0 and still not fixed!

gpeal contributor · 9 months ago
experience same issues. Version is 0.46.0 and still not fixed!

Could one of you share what, exactly, isn't working for you? There are a variety of different things that could be happening here and I want to make sure we can separate out each issue (if there are any remaining)

Make sure you ran mcp login <server_name> if your MCP server requires login, 0.47 will do a better job prompting you.

songkeys · 9 months ago

@gpeal

codex --version
codex-cli 0.47.0

codex mcp login exa
Error: OAuth login is only supported when experimental_use_rmcp_client is true in config.toml.

my config:

experimental_use_rmcp_client = true
[mcp_servers.exa]
url = "https://mcp.exa.ai/mcp"

---

edit: turns out experimental_use_rmcp_client = true need to be above all [mcp_servers.*] fields.

josh-swerdlow · 9 months ago

Hi @gpeal, I upgraded to 0.47 to verify, but could only connect to GH MCP by using custom http_headers. I'm not sure if that's the intended use since there's an actual field for the bearer tk. Without that workaround, the following behavior has been consistent for me since 0.46. Thnx for the support on this issue so far.

Issue: I'm getting a 404 on the page (different than previous 400s recv) and the follwoing transport error.

$ codex mcp login github
> Dynamic registration failed: Registration failed: HTTP 404 Not Found: 404 page not found

Authorize `github` by opening this URL in your browser:
https://api.githubcopilot.com/authorize?...

Note: I abbreviated the auth URL for privacy.

$ codex
> MCP client for `github` failed to start: handshaking
with MCP server failed: Send message error Transport
[rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpC
lientWorker<reqwest::async_impl::client::Client>>] error: Auth required, when send initialize
request

Setup
====

I re-added github mcp via codex mcp add --url https://api.githubcopilot.com/mcp/ github and then added bearer_token_env_var. I've replaced my token with 'GITHUB_TOKEN' for the below excerpts.

$ codex --version
> codex-cli 0.47.0

My abbreviated config.toml with experimental_use_rmcp_client at the top.

experimental_use_rmcp_client = true
[mcp_servers.github]
url = "https://api.githubcopilot.com/mcp/"
bearer_token_env_var = "<GITHUB_TOKEN>"
$ codex mcp list
> Name    Url                             Bearer Token Env Status   Auth        
github  https://api.githubcopilot.com/mcp/  <GITHUB_TOKEN> enabled  Bearer token
/mcp

🔌  MCP Tools

  • Server: github
    • Status: enabled
    • Auth: Bearer token
    • URL: https://api.githubcopilot.com/mcp/
    • Tools: (none)
    • Resources: (none)
    • Resource templates: (none)
$ codex mcp get github
> github
  enabled: true
  transport: streamable_http
  url: https://api.githubcopilot.com/mcp/
  bearer_token_env_var: <GITHUB_TOKEN>
  http_headers: -
  env_http_headers: -
  remove: codex mcp remove github

==

For anyone that wants to see how I setup to work around this see below. Frankly, I still get a 404 when I run codex mcp login github, but while I was writing this I noticed all the tools and resources were loaded and now I only have permissions issues which are likely 100% due to GH's fine grain PAT permissions not being correct :(.

``` config.toml
[mcp_servers.github]
url = "https://api.githubcopilot.com/mcp/"
http_headers.Authorization = "Bearer <GITHUB_TOKEN>"

$ codex

/mcp

🔌 MCP Tools

• Server: github
• Status: enabled
• Auth: Bearer token
• URL: https://api.githubcopilot.com/mcp/
• HTTP headers: Authorization=Bearer <GITHUB_TOKEN>
• Tools: add_comment_to_pending_review, add_issue_comment, add_sub_issue,
assign_copilot_to_issue, create_and_submit_pull_request_review, create_branch, create_issue,
create_or_update_file, create_pending_pull_request_review, create_pull_request, create_repository,
delete_file, delete_pending_pull_request_review, fork_repository, get_commit, get_file_contents,
get_issue, get_issue_comments, get_label, get_latest_release, get_me, get_release_by_tag,
get_tag, get_team_members, get_teams, list_branches, list_commits, list_issue_types, list_issues,
list_label, list_pull_requests, list_releases, list_sub_issues, list_tags, merge_pull_request,
pull_request_read, push_files, remove_sub_issue, reprioritize_sub_issue, request_copilot_review,
search_code, search_issues, search_pull_requests, search_repositories, search_users,
submit_pending_pull_request_review, update_issue, update_pull_request, update_pull_request_branch
• Resources: (none)
• Resource templates: Repository Content (repo://{owner}/{repo}/contents{/path*}), Repository
Content for specific branch (repo://{owner}/{repo}/refs/heads/{branch}/contents{/path*}),
Repository Content for specific commit (repo://{owner}/{repo}/sha/{sha}/contents{/path*}),
Repository Content for specific pull request (repo://{owner}/{repo}/refs/pull/{prNumber}/head/
contents{/path*}), Repository Content for specific tag (repo://{owner}/{repo}/refs/tags/{tag}/
contents{/path*})

$ codex mcp get github

github

enabled: true
transport: streamable_http
url: https://api.githubcopilot.com/mcp/
bearer_token_env_var: -
http_headers: Authorization=Bearer <GITHUB_TOKEN>
env_http_headers: -
remove: codex mcp remove github

gpeal contributor · 9 months ago

@josh-swerdlow You can't log in to the github MCP server because they don't support oauth for anything other than their 1p clients (https://github.com/github/github-mcp-server/issues/921#issuecomment-3221026448)

I'm using bearer_token_env_var without issue though. Make sure the value of bearer_token_env_var is the name of the environment variable, not the token itself.

Jian-Min-Huang · 9 months ago

Still some error 😢

Version 0.47.0

Steps

  • add mcp
codex mcp add atlassian --url https://mcp.atlassian.com/v1/sse
  • my config.toml
experimental_use_rmcp_client = true

[mcp_servers.atlassian]
url = "https://mcp.atlassian.com/v1/sse"
  • start codex cli
■ MCP client for `atlassian` failed to start: handshaking with MCP server failed: Send message error Transport [rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_client::StreamableHttpClientWorker<rmcp::transport::auth::AuthClient<reqwest::async_impl::client::Client>>>] error:
Client error: HTTP status client error (404 Not Found) for url (https://mcp.atlassian.com/v1/sse), when send initialize request
  • run /mcp
/mcp

🔌  MCP Tools

  • No MCP tools available.
mrafayaleem · 9 months ago

Seems it's fixed in 0.47.0. I used the following format:

[mcp_servers.github]
url = "https://api.githubcopilot.com/mcp/"
http_headers.Authorization = "Bearer <GITHUB_TOKEN>"
gpeal contributor · 9 months ago

@Jian-Min-Huang The Atlassian MCP server uses SSE which is a deprecated transport. MCP servers should migrate to streamable http instead.

https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#streamable-http

arietis · 9 months ago

@gpeal I'm still having issues with GitHub MCP not working even if I put a valid bearer_token_env_var value in the config. Tried with 0.47.0 and with 0.48.0-alpha.3. ``■ MCP client for github failed to start: handshaking
with MCP server failed: Send message error Transport
[rmcp::transport::worker::WorkerTransport<rmcp::transport::streamable_http_c
lient::StreamableHttpClientWorker<reqwest::async_impl::client::Client>>]
error: Auth required, when send initialize request
``

Debugged it and apparently resolve_bearer_token returns a valid resolved_bearer_token. So the issue is not because of an undefined environment variable.

In the current main branch, it becomes even more confusing because it hides the real error and suggests using OAuth, which remote GitHub MCP server doesn't support, it seems.

Update: Figured it out, the token was invalid. I had to generate a token which has copilot scope.

jaycoolslm · 8 months ago
@josh-swerdlow You can't log in to the github MCP server because they don't support oauth for anything other than their 1p clients (github/github-mcp-server#921 (comment)) I'm using bearer_token_env_var without issue though. Make sure the value of bearer_token_env_var is the name of the environment variable, not the token itself.

I just tried this and it appears to have worked. Yet to validate but its not throwing error any more...

However, this contradicts OpenAI's current docs: https://github.com/openai/codex/blob/main/docs/config.md#streamable-http

They say # Optional environment variable containing a bearer token to use for auth
bearer_token_env_var = "<token>"

gpeal contributor · 8 months ago

@jaycoolslm this config was changed from the token to the env var name but it looks like that part of the docs hung around. I'll update it. Sorry for the confusion.

dmonterde · 6 months ago

Ubuntu 24.04
codex-cli 0.87.0

Hi guys, i'm here to confirm that on my system the mcp for directus framework stopped working, the method working for me was the one using mcp-remote, in my case i need to replace the ~/config.toml as follows:

[mcp_servers.directus-tpo-dev]
enabled = true
command = "npx"
args = [
	"-y",
	"mcp-remote@latest",
	"https://directus.url/mcp",
	"--header",
	"Authorization: Bearer ${DIRECTUS_TOKEN}"
]
env = { DIRECTUS_TOKEN = "THE_TOKEN" }
etraut-openai contributor · 6 months ago

@dmonterde, thanks for posting. This issue was closed back in October. If you're seeing a related issue, it's probably not the same problem. Could you please open a new issue and provide details? It would be helpful if you used the /feedback slash command after reproing the problem. That way, we'll have access to your logs and session details.

You mentioned that it "stopped working". Does that mean that it was working on a previous version of Codex CLI? If so, do you happen to know the last version that worked?