ChatGPT Desktop: local MCP tools are discovered successfully but not exposed to Chat sessions
What version of the Codex App are you using (From “About Codex” dialog)?
26.803.10989.0
What subscription do you have?
ChatGPT Plus
What platform is your computer?
Microsoft Windows NT 10.0.26100.0 x64
What issue are you seeing?
ChatGPT Desktop successfully starts a configured local MCP server, completes the MCP initialization handshake, calls tools/list, and receives the full tool inventory. However, those tools are not exposed to the Chat session.
The affected MCP server is configured as tessl_registry_mcp.
The prompt used in a new Chat session was:
Use the tessl_registry_mcp MCP server and list its tools.
ChatGPT responded:
I still cannot see tessl_registry_mcp in this ChatGPT session. I checked the currently exposed connector/tool namespaces, and they are: GitHub, Gmail, REDACTED. tessl_registry_mcp is not among them, so I can't invoke it or enumerate its tools from here.
However, a transparent stdio capture shim placed between ChatGPT Desktop and the MCP server shows that Desktop successfully:
- launches the MCP server;
- sends
initialize; - receives a valid
initializeresponse; - sends
notifications/initialized; - sends
tools/list; and - receives the server's complete 17-tool inventory.
This was reproduced across three separate MCP server processes created during the same ChatGPT Desktop reproduction.
The MCP server returned these tools:
installloginnew_pluginoutdatedreview_fixreview_runreview_viewsearchskill_publishskills_availablestatustile_publishuninstallupdateworkspace_createworkspace_listworkspace_list_members
ChatGPT Desktop also called resources/list and resources/templates/list. The server returned normal JSON-RPC Method not found responses for those methods because it does not advertise MCP resources.
There was no MCP initialization or tool-discovery error in the captured exchange.
This appears to be a failure after successful MCP tool discovery, in the path that registers/exposes locally discovered MCP tools to the Chat session.
What steps can reproduce the bug?
- On Windows 11, configure the following local MCP server in ChatGPT/Codex Desktop:
- Name:
tessl_registry_mcp - Command:
C:\Windows\System32\wsl.exe - Arguments:
/mnt/c/Users/<USER>/AppData/Local/Programs/Tessl/tessl.exemcpstart
Tessl version used: 0.95.0.
- For diagnostic purposes, place a transparent stdio shim between Desktop and the above command. The shim only forwards stdin/stdout unchanged while recording:
- client -> MCP server traffic;
- MCP server -> client traffic; and
- MCP server stderr.
- Fully exit and restart ChatGPT Desktop.
- Open a new Chat session.
- Send:
Use the tessl_registry_mcp MCP server and list its tools.
- Observe that Chat reports that
tessl_registry_mcpis not present in its exposed tool namespaces.
- Inspect the MCP shim capture.
The captured protocol exchange shows:
ChatGPT Desktop -> MCP server
initializenotifications/initializedtools/listresources/listresources/templates/list
MCP server -> ChatGPT Desktop
- successful
initializeresult; - successful
tools/listresult containing all 17 Tessl tools; Method not foundfor the two resource methods.
- Repeat the test. In my reproduction, three MCP processes were launched and all three successfully initialized and returned the full
tools/listresult.
As a control test, I configured the same server through the same shim and launched it from Codex CLI 0.147.0-alpha.6.6.
The Codex CLI test succeeds: the MCP server initializes and its 17 tools are available.
Therefore the same MCP server, command, transport and shim work from Codex CLI but the successfully discovered tools are not exposed to Chat in ChatGPT Desktop.
Session/conversation/request identifiers in the attached public logs have been redacted. Token usage and context-window usage do not appear relevant to the reproduction.
What is the expected behavior?
After ChatGPT Desktop successfully initializes a configured MCP server and receives a successful tools/list response, those MCP tools should be registered and made available to the Chat session.
For this server, after discovery succeeds, Chat should be able to invoke the 17 tools returned by tessl_registry_mcp, or at minimum recognize that the MCP server and its tools are available.
Instead, Chat reports that the server is not exposed to the session even though the Desktop-side MCP client has already discovered its tools successfully.
Additional information
Control test
The same MCP server was tested through the same transparent shim using Codex CLI 0.147.0-alpha.6.6.
That test succeeds and exposes the full 17-tool inventory.
This strongly suggests that:
- the MCP server itself is working;
- the stdio transport is working;
- the
initializehandshake is working; tools/listis working; and- the failure occurs after MCP discovery, specifically in the Desktop Chat tool-registration/exposure path.
MCP server details
Tessl CLI version:
0.95.0
Server reports:
- Name:
Tessl Registry MCP - Version:
0.0.1 - MCP protocol version:
2025-06-18
The command used during the captured Desktop reproduction was:
C:\Windows\System32\wsl.exe /mnt/c/Users/<USER>/AppData/Local/Programs/Tessl/tessl.exe mcp start
Note that this invokes the Windows Tessl executable through WSL interoperability; it is not a Linux-native Tessl binary.
Desktop/app-server observations
The attached Desktop log covers the same reproduction.
It shows successful mcpServerStatus/list calls at the app-server RPC layer with errorCode=null.
The Desktop app-server also starts normally and reports version:
0.147.0-alpha.6.6
There is an unrelated warning in the log:
ignoring invalid experimental feature enablement keys: apps_mcp_path_override
The app remains in the connected state despite that warning.
There are also unrelated HTTP 429 Too many requests warnings later in the session. The MCP initialization and tool discovery had already completed successfully before those occurred.
Attachment glossary
The uploaded diagnostic files are:
codex-desktop-redacted-20260812-190756.log
Redacted ChatGPT/Codex Desktop application log covering the reproduction.
User paths, conversation/session identifiers, request IDs and named-pipe identifiers have been redacted. Timestamps, method names, feature flags, versions and diagnostic messages have been preserved.
ChatGPT Desktop MCP shim capture.zip
One complete capture directory from the failing ChatGPT Desktop reproduction.
It contains:
command.txt— exact working directory and child command launched by the shim.desktop-to-tessl.bin— raw bytes sent by ChatGPT Desktop's MCP client to Tessl.tessl-to-desktop.bin— raw bytes returned by Tessl to ChatGPT Desktop.tessl-stderr.log— Tessl stderr/startup diagnostics.
This capture demonstrates a successful MCP initialization and a successful tools/list response containing all 17 tools even though Chat subsequently reports that tessl_registry_mcp is unavailable.
The behaviour was reproduced in three separate Desktop shim capture directories; only one complete representative capture is necessary to demonstrate the issue, but additional captures can be provided if useful.
Codex CLI MCP shim capture.zip
Equivalent capture produced using Codex CLI as a control.
This shows that the same MCP server and shim successfully initialize and expose the tools when used from Codex CLI.
Summary
The key distinction is:
MCP discovery in ChatGPT Desktop: SUCCESS
Exposure of the discovered MCP tools to Chat: FAILURE
Because the wire-level MCP exchange succeeds, this does not appear to be a Tessl startup, WSL, stdio, handshake, or tools/list failure.
3 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Not a duplicate. Issue #37976 relates to remote HTTP MCP servers, and the observed behaviour is different. This issue relates to local STDIO MCP servers.
+1. Same root cause on Windows with remote HTTP MCP servers (Lingxing/SellerSprite): handshake and
tools/listsucceed, but the tools are omitted from the Chat session catalog (omitting MCP server without an exact ready client). Also reproduces with a local stdio proxy; works on older versions and in Codex CLI. Notably, our model catalog already has"use_responses_lite": false, so #33679's workaround does not apply ? this is the startup race, not the Responses Lite path.