claude-code - 💡(How to fix) Fix [BUG] claude.ai visualize MCP app — widget renders then tool call fails with HTTP 400 [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#53030Fetched 2026-04-25 06:14:16
View on GitHub
Comments
1
Participants
2
Timeline
6
Reactions
0
Timeline (top)
labeled ×2closed ×1commented ×1renamed ×1

Error Message

All calls to the visualize MCP app (show_widget and read_me tools, backed by claudemcpcontent.com) fail with HTTP 400 and an empty error body.

Error Messages/Logs

Error Messages/Logs

No error body is returned — the 400 response is empty. The lack of any error detail is itself a bug; clients have no actionable information about the failure.

Fix Action

Fix / Workaround

Workarounds

Code Example

## Error Messages/Logs


Tool call failed: 400


No error body is returned — the 400 response is empty. The lack of any error detail is itself a bug; clients have no actionable information about the failure.

---

{"modules": ["interactive"], "platform": "desktop"}

---

{
     "title": "diagnostic_minimal",
     "loading_messages": ["Testing"],
     "widget_code": "<p style=\"color:green;font-size:24px;\">Widget is alive.</p>"
   }
RAW_BUFFERClick to expand / collapse

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • I am using the latest version of Claude Code

What's Wrong?

What's Wrong?

All calls to the visualize MCP app (show_widget and read_me tools, backed by claudemcpcontent.com) fail with HTTP 400 and an empty error body.

The distinctive failure mode: the widget visibly renders in the chat for a brief moment, then disappears as the tool call is marked errored. The rendering pipeline clearly accepts and processes the HTML — something fails at the response completion stage.

This is distinct from #34820, which reports DNS-level unreachability of claudemcpcontent.com. Here, the domain is reachable and rendering works; the failure is post-render.

What Should Happen?

What Should Happen?

  • visualize:read_me returns the requested module's format reference
  • visualize:show_widget renders the provided HTML inline and the tool call completes successfully

Error Messages/Logs

## Error Messages/Logs


Tool call failed: 400


No error body is returned — the 400 response is empty. The lack of any error detail is itself a bug; clients have no actionable information about the failure.

Steps to Reproduce

Steps to Reproduce

  1. Open a conversation on claude.ai (web or desktop app) with the visualize MCP app available.

  2. Ask Claude to call visualize:read_me with:

    {"modules": ["interactive"], "platform": "desktop"}

    → tool call fails with HTTP 400.

  3. Ask Claude to call visualize:show_widget with:

    {
      "title": "diagnostic_minimal",
      "loading_messages": ["Testing"],
      "widget_code": "<p style=\"color:green;font-size:24px;\">Widget is alive.</p>"
    }

    → widget briefly renders in chat, then disappears as the tool call errors with 400.

  4. Retry with styled HTML (fonts, padding, nested divs) — same render-then-fail pattern, reproduced on retry.

Key evidence from step 3: The widget visually renders with correct fonts and layout before it is torn down. This means:

  1. The request reached the rendering service
  2. The rendering service successfully processed the HTML
  3. The widget was streamed to the client and displayed
  4. Something in the response completion / acknowledgment stage failed
  5. The client removed the displayed widget on 400

This narrows the bug to a post-render completion layer — not payload validation, not the rendering pipeline itself, not DNS/connectivity.

Diagnostic reasoning

Three test calls were made, all failing identically:

  1. read_me with only enum params — rules out malformed user payload
  2. show_widget with minimal HTML — rules out payload-shape issues
  3. show_widget with styled HTML (run twice) — confirmed render-then-fail

Claude Model

Not sure / Multiple models

Is this a regression?

Yes, this worked in a previous version

Last Working Version

No response

Claude Code Version

2.1.119 (Claude Code)

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Other

Additional Information

Environment

  • Platform: claude.ai web interface + desktop app (both reproduce)
  • OS: macOS (M4 Max MacBook)
  • Network: claudemcpcontent.com resolves and is reachable; no ad blockers affecting it
  • Tested: 2026-04-24

Related

  • #34820claudemcpcontent.com unreachable (2026-03-16). Different failure mode (DNS-level) but same infrastructure. Still open, labeled invalid.
  • Status page correlation: An MCP Apps incident on claude.ai was marked resolved at 02:09 UTC on 2026-04-23 — ~24 hours before these tests. This may be a partial regression or related failure surface not addressed by that fix. April 2026 shows a high rate of MCP/connector infrastructure incidents (Apr 9, Apr 13, Apr 23).

Suggested triage direction

Based on the render-then-fail evidence:

  1. Response completion handshake between the visualize MCP server and the claude.ai client
  2. Timeout or post-render validation step rejecting successful renders
  3. Gateway/load-balancer 400 generated after rendering completes
  4. Changes deployed on/shortly before 2026-04-23 to the MCP Apps stack, especially partial fixes from the Apr 23 02:09 UTC incident

Workarounds

  • Retry the call (intermittent success plausible, unconfirmed)
  • For static content, fall back to HTML artifacts (different rendering pipeline)

extent analysis

TL;DR

Investigate the response completion handshake between the visualize MCP server and the claude.ai client for potential issues causing the 400 error after successful rendering.

Guidance

  • Review the MCP Apps stack changes deployed on or shortly before 2026-04-23, especially those related to the Apr 23 02:09 UTC incident, to identify potential causes of the regression.
  • Inspect the gateway/load-balancer configuration for any rules or settings that might generate a 400 error after rendering completes.
  • Consider implementing additional logging or monitoring to capture more detailed error information, as the current empty 400 response body lacks actionable insights.
  • Test the visualize MCP app with different types of content and rendering scenarios to see if the issue is specific to certain cases or if it's a more general problem.

Example

No specific code snippet can be provided without more information about the implementation details of the visualize MCP app and the claude.ai client. However, an example of how to add logging for error responses in a hypothetical API call might look like:

import logging

# ...

try:
    response = requests.post('https://claudemcpcontent.com/visualize', json=data)
    response.raise_for_status()
except requests.exceptions.HTTPError as err:
    logging.error(f'HTTP error: {err}')
    # Additional logging or error handling code here

Notes

The issue seems to be related to a regression introduced in a recent update, and the exact cause is still unclear. Further investigation and debugging are necessary to determine the root cause and develop a fix.

Recommendation

Apply a workaround, such as retrying the call or falling back to HTML artifacts for static content, until the root cause of the issue can be identified and addressed. This is because the problem appears to be related to a regression and may require changes to the MCP Apps stack or the visualize MCP app itself.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING