MCP HTTP tool results: only the first text content block reaches the model; additional text blocks are silently dropped

Status Open
Reported on v2.1.233
Maintainer reply None cached
Activity 0 comments · opened Aug 25, 2026

MCP HTTP tool results: only the first text content block reaches the model; additional text blocks are silently dropped

Description

When a remote MCP server (HTTP transport) returns a tool result with multiple text content blocks, only the first block is surfaced to the model. The remaining text blocks are silently dropped.

Reproduced on 2.1.233 and 2.1.245 (latest at time of writing).

Reproduction

The official Outline wiki (self-hosted, ≥ v1.7.0) ships an MCP server at https://<instance>/mcp (Streamable HTTP, stateless). Its fetch tool, for resource: "document", returns two text blocks by design — JSON metadata first, then the document body as markdown. Source: server/tools/fetch.ts, covered by the test "returns document metadata and markdown" in fetch.test.ts:

{ "result": { "content": [
  { "type": "text", "text": "{\"document\":{...metadata...},\"breadcrumb\":\"...\"}" },
  { "type": "text", "text": "## The document markdown body..." }
] } }

The server is registered as a plain direct HTTP entry in ~/.claude.json (no wrapper, no gateway):

{ "mcpServers": { "outline": { "type": "http", "url": "https://<instance>/mcp" } } }

Calling fetch from a session returns only the JSON metadata block; the markdown block never reaches the model.

Evidence that the server is not at fault

  1. A raw curl to the same URL returns both blocks — the exact request the client makes:

``bash
curl -s https://<instance>/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer <token>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"fetch","arguments":{"resource":"document","id":"<document-uuid>"}}}'
``

The (SSE-framed) response contains content[0] (metadata) and content[1] (markdown). Verified both directly against the origin and through the reverse proxy chain in front of it.

  1. Same symptom against a second, independent Outline instance on a different domain — rules out any single-server cause.
  1. Data inside the first block arrives intact (e.g. the text field of list_templates, the context snippet of list_documents) — only additional content blocks are dropped.

Expected behavior

All text content blocks of an MCP tool result should reach the model (e.g. concatenated), per the MCP spec's tool result content model.

Impact

Any MCP server that splits tool results into multiple text items (a spec-sanctioned pattern; Outline is a prominent example) silently loses data. For Outline users this means Claude Code cannot read any document contents via MCP.

Possibly related

  • #55677 — text content dropped from model when structuredContent is present
  • #45575 — only structuredContent rendered when both are returned

This case involves no structuredContent — just two plain text blocks, of which the second is dropped.

Environment

  • Claude Code: 2.1.245 (also reproduced on 2.1.233)
  • OS: CachyOS (Arch Linux), kernel 7.1.8
  • MCP server: self-hosted Outline v1.7+ (type: http, direct URL)

View original on GitHub ↗