Interactions: stateless replay of an `mcp_server_tool_result` whose `structured_content` holds a `$ref` returns 400
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 57/100
Línea de trabajo
Start by tracing how the SDK models and serializes mcp_server_tool_result steps for stateless Interactions API requests; the issue does not name specific files or tests. Compare the returned structured_content reference with the replayed function response, then add a regression test using the reproduction shape. Done means replaying the emitted steps succeeds when structured_content contains a $ref.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
This issue was posted by Claude Code using claude-opus-5-5 on behalf of David.
Interactions API rejects its own mcp_server_tool_result step on stateless replay when structured_content contains a $ref.
With store: false, sending back the steps a previous interaction returned fails with HTTP 400 when an MCP image result came from a server that also sets structuredContent:
400 {"error":{"message":"The referenced name `structured_content.result[0]` in function_response.response does not match to a display_name in the function_response.parts.","code":"invalid_request"}}
The step is exactly what the API emitted. Image results without structured_content, and audio and embedded-resource results, replay fine (200).
Reproduce (raw HTTP, no SDK)
-
Run a public MCP server with a tool returning an
ImageContentblock and matchingstructuredContent. FastMCP does this for a tool annotated-> list[ImageContent]:from mcp.server.fastmcp import FastMCP from mcp.types import ImageContent PNG = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4nGNg+M/A8B8ABf4C/gzLSmsAAAAASUVORK5CYII=' mcp = FastMCP('probe', stateless_http=True) @mcp.tool() def get_image() -> list[ImageContent]: return [ImageContent(type='image', data=PNG, mimeType='image/png')] mcp.run(transport='streamable-http') -
POST /v1beta/interactionswithmodel: gemini-3.8-flash,store: false,tools: [{"type": "mcp_server", "name": "probe", "url": "<server>/mcp"}], and auser_inputasking it to callget_image. The response contains:{"type": "mcp_server_tool_result", "call_id": "...", "signature": "...", "name": "probe:get_image", "server_name": "probe", "result": {"call_tool_result_json": "{\"content\":[{\"type\":\"image\",...}],\"structuredContent\":{...}}", "structured_content": {"result": [{"$ref": "structured_content.result[0]"}]}}} -
Send a second request whose
inputis the firstuser_input, every returned step unchanged, and a newuser_input. It returns the 400 above. Dropping only that tool's call and result steps returns 200.
Related: the live result shape differs from the reference and SDK types
- The API reference documents
mcp_server_tool_result.resultas(ImageContent or TextContent) array,objectorstring. Live results for text, image, audio and embedded-resource tools all arrive as an undocumented object:call_tool_result_json(the MCPCallToolResultas a JSON string), optionalstructured_content, a plain-textresult, and for blob resources a key named after the MIME type ("application/pdf": "<base64>"). MCPServerToolResultStepResultin this SDK is an empty model, so none of those fields are typed. The list branch types only text and image items; audio, video and document items parse asUnknownFunctionResultSubcontent.
Observed with google-genai 2.30.0 on the Gemini API (gemini-3.8-flash), November 2026.
- Lenguaje dominante
- Python
- Estrellas
- 4.1k
- Forks
- 1.1k
- Merge medio
- 1 d 21 h
- PR fusionados (30 d)
- 103
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de googleapis/python-genai
-
Test import module that doesn't existPosiblemente ocupada @Venkaiahbabuneelam la tomó hace 24 días. Abiertopriority: p2 type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
googleapis/python-genai#3122 · 6 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Curated history keeps half a user turn when the model turn is invalidPosiblemente ocupada @Venkaiahbabuneelam la tomó hace 33 días. Abiertopriority: p2 type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
googleapis/python-genai#3051 · 3 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
[Bug]: Unsubscripted typing.List and typing.Dict crash convert_if_exist_pydantic_model in AFCPosiblemente ocupada @Venkaiahbabuneelam la tomó hace 33 días. Abiertopriority: p2 type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
googleapis/python-genai#3044 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
googleapis/python-genai#3314 ·
Los mantenedores suelen responder en 1 día
-
SyntaxWarning on import in 3.0.0 (invalid escape sequence in types.py)Posiblemente ocupada @VISHNU0906 la tomó hace 1 día. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 35/100
googleapis/python-genai#3308 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
Todos los issues de googleapis/python-genai
Issues similares
-
integration: logger
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
home-assistant/core#191147 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
documentation p4
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
MillenniumDawn/focus-tree-creation-tool#417 ·
Los mantenedores suelen responder en 3 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
CharlesP44/Beem_Energy#96 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
rheeloaded/paperpull#153 ·
Los mantenedores suelen responder en 1 día