Penpot MCP calls hang in Codex App, while the same server works via direct MCP HTTP client

Open 💬 3 comments Opened Mar 28, 2026 by aitormendez

What version of the Codex App are you using (From “About Codex” dialog)?

Versión 26.325.31654 (1272)

What subscription do you have?

Plus

What platform is your computer?

Darwin 25.3.0 arm64 arm

What issue are you seeing?

When using the official Penpot MCP server from the official Penpot repository, MCP tool calls from the Codex App often hang indefinitely, even for the smallest possible call.

The setup appears to be correct:

  • Penpot MCP is started from the official penpot/mcp directory with pnpm run bootstrap
  • the plugin server is available on http://localhost:4400
  • the MCP server exposes:
  • http://localhost:4401/mcp
  • http://localhost:4401/sse
  • the Penpot plugin UI shows Connected to MCP server

However, Codex App MCP calls to Penpot freeze or never return, including a minimal call equivalent to:

return { ok: true };

By contrast, the same Penpot MCP server works correctly when called through a direct Node client using @modelcontextprotocol/sdk against http://localhost:4401/mcp.

This suggests the problem is in Codex App’s MCP integration path, not in Penpot itself.

What steps can reproduce the bug?

  1. Use the official Penpot MCP from the official Penpot repo.
  1. Start it with:

cd /Users/aitor/penpot/mcp
pnpm run bootstrap

  1. Open a Penpot file in the browser.
  1. Load the Penpot MCP plugin from:

http://localhost:4400/manifest.json

  1. Click Connect to MCP server in the plugin UI.
  1. Configure Codex App to use Penpot MCP through mcp-remote, for example:

[mcp_servers.penpot]
command = "npx"
args = ["-y", "mcp-remote", "http://localhost:4401/sse", "--allow-http"]
startup_timeout_sec = 30.0

  1. Restart Codex App.
  1. Trigger a minimal Penpot MCP call from Codex App, such as execute_code with:

return { ok: true };

  1. Observe that the call hangs or never returns.

As a control test, run a direct MCP HTTP client against http://localhost:4401/mcp; the same minimal execute_code call succeeds immediately.

What is the expected behavior?

Codex App should successfully execute Penpot MCP tool calls, including minimal execute_code calls, without hanging.

If the direct MCP client works against the same Penpot server and connected plugin instance, Codex App should also be able to complete the same call reliably.

Additional information

Relevant observations:

  • This was tested with the official Penpot MCP, not a third-party implementation.
  • The Penpot server starts cleanly and logs the MCP endpoints correctly.
  • The Penpot plugin reports Connected to MCP server.
  • A direct client using @modelcontextprotocol/sdk and StreamableHTTPClientTransport against http://localhost:4401/mcp succeeds.
  • The failure appears specific to Codex App’s integrated MCP call path.

If useful, I can also provide:

  • the exact direct client test script
  • Penpot MCP server logs
  • the Codex MCP config used for reproduction

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗