[bot] Anthropic: MCP connector tool calls (`mcp_tool_use`/`mcp_tool_result`) are silently dropped from tool spans
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 75/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- devtools, observability-sre
Línea de trabajo
El problema está en py/src/braintrust/integrations/anthropic/tracing.py. Comience leyendo la función _log_server_tool_spans alrededor de la línea 1455 y las definiciones de _SERVER_TOOL_USE_TYPE e _is_server_tool_result_type. La solución es extender la verificación del lado de la llamada para que también coincida con "mcp_tool_use". Asegúrese de que los bloques mcp_tool_result se emparejen correctamente con sus llamadas. Ejecute las pruebas existentes para la integración de Anthropic para verificar la corrección.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
Anthropic's MCP connector feature (tools=[{"type": "mcp_toolset", ...}] on client.messages.create(), gated by the mcp-client-2025-11-20 beta header) returns mcp_tool_use and mcp_tool_result content blocks when Claude calls a remote MCP server's tools. The repo's Anthropic tracing does not recognize mcp_tool_use as a tool call at all, so:
- MCP tool calls are never captured into a span (no input, no tool name, no call metadata).
- MCP tool results are still detected (because the result-type check is suffix-based) but are logged as orphaned spans with no call context, since the corresponding call was never registered.
This is a correctness gap, not just missing-coverage: half of each MCP tool exchange is dropped and the other half is logged incompletely/incorrectly.
What is missing
In py/src/braintrust/integrations/anthropic/tracing.py:
_SERVER_TOOL_USE_TYPE = "server_tool_use" # line 1337
def _is_server_tool_result_type(item_type: Any) -> bool: # line 1340
return isinstance(item_type, str) and item_type.endswith("_tool_result") and item_type != "tool_result"
_log_server_tool_spans (line 1455) pairs calls and results by walking response content:
item_type = item.get("type")
if item_type == _SERVER_TOOL_USE_TYPE: # line 1470 — only matches "server_tool_use"
...
continue
if not _is_server_tool_result_type(item_type): # line 1481
continue
- The call-side check only matches the literal string
"server_tool_use"(used for built-in server tools like web search / code execution). It does not match"mcp_tool_use", somcp_tool_useblocks fall through the loop entirely and are never added tocalls_by_id. - The result-side check (
_is_server_tool_result_type) matches anything ending in_tool_resultexcept the literaltool_result, somcp_tool_resultdoes pass this check — but since no matching call was ever registered, it's appended as(None, item), producing a tool span with output only and no input/tool name.
Separately, _MANAGED_AGENTS_CALL_TYPES (line 905) does include "agent.mcp_tool_use" — but that's the distinct, agent.-prefixed type used by the Managed Agents API (client.beta.agents/client.beta.sessions), not the plain mcp_tool_use/mcp_tool_result types returned by the standard Messages API's MCP connector.
Braintrust docs status: unclear / not_found
The Anthropic integration page mentions mcp_servers exactly once, as one of many request parameters captured in span metadata for the Go SDK's request-param list. It does not mention mcp_toolset, mcp_tool_use, or mcp_tool_result anywhere, and does not document any tool-span behavior specific to the MCP connector for any language. The only documented span-splitting for server-side tools is generic ("server-side tool calls ... appear as child tool spans"), described for the Java SDK, and is not confirmed to apply to MCP connector blocks specifically.
Upstream sources
- Anthropic MCP connector docs: https://platform.claude.com/docs/en/agents-and-tools/mcp-connector — confirms the
mcp_toolsettool type, themcp-client-2025-11-20beta header, and the exact response content block types"mcp_tool_use"and"mcp_tool_result"(example response blocks shown verbatim in the "How MCP connector tool calls work" section).
Local repo files inspected
py/src/braintrust/integrations/anthropic/tracing.py(full file, 1627 lines) — specifically_SERVER_TOOL_USE_TYPE(line 1337),_is_server_tool_result_type(line 1340),_log_server_tool_spans(line 1455),_MANAGED_AGENTS_CALL_TYPES(line 905)py/src/braintrust/integrations/anthropic/integration.pypy/src/braintrust/integrations/anthropic/patchers.py
- Lenguaje dominante
- Python
- Estrellas
- 19
- Forks
- 17
- Merge medio
- 1 d 5 h
- PR fusionados (30 d)
- 61
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 braintrustdata/braintrust-sdk-python
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
Todos los issues de braintrustdata/braintrust-sdk-python
Issues similares
-
agent-ready documentation needs-triage
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
-
workflow-status page template still says reusable workflows are "triggered only by workflow_call:" Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
-
Add https://search.jeremyh.xyz/ Abiertoinstance instance add
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
searxng/searx-instances#939 · 1 comentario ·
-
area-deployment area-integrations triage:bot-seen
Dificultad 2/5 Medio día Aptitud para principiantes 86/100