[bot] Anthropic Messages API: `container` and `mcp_servers` params not captured in span metadata
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 72/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- ruby
- Área
- observability-sre
Línea de trabajo
Comienza en lib/braintrust/contrib/anthropic/instrumentation/messages.rb y beta_messages.rb revisando las constantes de metadatos indicadas y las rutas finalize_metadata, set_output y capture_beta_fields. Sigue cómo se ensamblan los metadatos de las solicitudes y las respuestas, y luego verifica que container y mcp_servers estén representados para los flujos estables, beta y relacionados con batch, sin exponer valores sensibles. La tarea estará terminada cuando los spans relevantes contengan los campos documentados y las comprobaciones de instrumentación existentes pasen.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
The official anthropic Ruby gem's Messages and Beta Messages APIs support two significant, currently-documented fields that this SDK's instrumentation silently drops from span metadata: container (code execution tool sandbox reuse) and mcp_servers (the MCP connector, which lets Claude call tools on remote MCP servers directly during generation). Both directly affect what happens during model execution — which tools were actually available/reused, which sandbox state persisted across turns — yet neither appears in any span this SDK produces.
What is missing
-
mcp_servers(request param, beta Messages API): configures remote MCP servers Claude can call tools on mid-generation. Official Ruby example from Anthropic's own docs:client.beta.messages.create( model: "claude-opus-4-8", max_tokens: 1000, messages: [...], mcp_servers: [{type: "url", url: "...", name: "example-mcp", authorization_token: "..."}], tools: [{type: "mcp_toolset", mcp_server_name: "example-mcp"}], betas: ["mcp-client-2025-11-20"] )Also usable inside Message Batches requests.
-
container(request param + response field, both stable and beta Messages APIs): identifies/reuses the sandboxed code-execution container across requests so state (e.g. Python variable bindings) persists. Documented onAnthropic::Models::Messagein the official Ruby SDK docs as "Information about the container used in the request (for the code execution tool)."
Neither field is in METADATA_FIELDS (lib/braintrust/contrib/anthropic/instrumentation/messages.rb:25-28) or BETA_METADATA_FIELDS/METADATA_FIELDS (lib/braintrust/contrib/anthropic/instrumentation/beta_messages.rb:29-37), and finalize_metadata/set_output in both files never read response.container. So a user running a code-execution or MCP-connector workflow through this SDK gets a Braintrust trace with no record of which container was reused or which MCP servers/tools were actually wired up — a debugging-critical omission for exactly the kind of agentic tool-execution traces Braintrust is meant to surface.
Braintrust docs status
not_found for Ruby — https://www.braintrust.dev/docs/integrations/ai-providers/anthropic does not mention container or mcp_servers anywhere in the Ruby-specific section. Notably, the Go section of the same page explicitly lists both as captured request parameters ("each span captures ... container, mcp_servers ..."), showing Braintrust already treats these as first-class fields for another language SDK — Ruby is the outlier.
Upstream sources
- MCP connector docs (with Ruby code example): https://platform.claude.com/docs/en/agents-and-tools/mcp-connector
- Code execution tool / container docs: https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/code-execution-tool
Anthropic::Models::Message#container(official Ruby SDK, main branch docs): https://preview.rubydoc.info/github/anthropics/anthropic-sdk-ruby/Anthropic/Models/Message- anthropic-sdk-ruby repo: https://github.com/anthropics/anthropic-sdk-ruby
Local repo files inspected
lib/braintrust/contrib/anthropic/instrumentation/messages.rb—METADATA_FIELDS(lines 25-28) andfinalize_metadata(lines 141-146) omitcontainer; nomcp_servershandling anywherelib/braintrust/contrib/anthropic/instrumentation/beta_messages.rb—METADATA_FIELDS/BETA_METADATA_FIELDS(lines 29-37) andcapture_beta_fields(lines 146-166) capture onlybetasandoutput_format; nocontainerormcp_serverslib/braintrust/contrib/anthropic/instrumentation/common.rb— token usage parser only; no incidental capture of container/mcp_servers- Grep for
container,mcp_servers,mcp_serveracrosslib/braintrust/returns zero relevant matches (one unrelated hit inlib/braintrust/server/services/list_service.rb)
- Lenguaje dominante
- Ruby
- Estrellas
- 9
- Forks
- 11
- Merge medio
- 2 d 3 h
- PR fusionados (30 d)
- 5
Preparar el entorno
- Incluye un Dockerfile o un 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 braintrustdata/braintrust-sdk-ruby
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
[BOT ISSUE] OpenAI Chat Completions missing reasoning model and web search metadata parametersAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
ruby
Dificultad 3/5 Medio día Aptitud para principiantes 62/100
-
ruby
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
Todos los issues de braintrustdata/braintrust-sdk-ruby
Issues similares
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 82/100
matteocrippa/awesome-swift#2028 ·
Los mantenedores suelen responder en 3 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
fractaledmind/litestream-ruby#89 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 78/100
resque/resque-scheduler#848 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
voxpupuli/puppet-patroni#126 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
voxpupuli/puppet-elasticsearch#1290 ·