[bot] Anthropic: MCP connector tool calls (`mcp_tool_use`/`mcp_tool_result`) are silently dropped from tool spans
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 75/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- python
- Domaine
- devtools, observability-sre
Piste de recherche
Le problème se trouve dans py/src/braintrust/integrations/anthropic/tracing.py. Commencez par lire la fonction _log_server_tool_spans vers la ligne 1455 et les définitions de _SERVER_TOOL_USE_TYPE et _is_server_tool_result_type. La correction consiste à étendre la vérification côté appel pour qu'elle corresponde également à "mcp_tool_use". Assurez-vous que les blocs mcp_tool_result sont correctement appariés avec leurs appels. Exécutez les tests existants pour l'intégration Anthropic pour vérifier la correction.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- Python
- Étoiles
- 20
- Forks
- 18
- Merge moyen
- 1 j 5 h
- PR mergées (30 j)
- 61
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de braintrustdata/braintrust-sdk-python
-
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
braintrustdata/braintrust-sdk-python#774 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 3/5 1-2 jours Accessibilité débutants 65/100
braintrustdata/braintrust-sdk-python#799 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
braintrustdata/braintrust-sdk-python#798 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
braintrustdata/braintrust-sdk-python#787 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
braintrustdata/braintrust-sdk-python#786 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de braintrustdata/braintrust-sdk-python
Issues similaires
-
bug status/needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
prowler-cloud/prowler#12887 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
area: desktop platform: macos priority: p3 status: ready type: enhancement
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
use-agent-os/agent-os#3484 ·
Les mainteneurs répondent en général sous 2 jours
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
open-telemetry/opentelemetry-python-contrib#5113 · 2 commentaires · 2 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
external
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
langchain-ai/docs#6255 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour