Connect AI assets
Connect every AI asset you run — agents, MCP servers and skills — so Boidra Platform can show what each one did, what it cost and how it performed. Boidra Platform ingests standard OpenTelemetry spans that follow the GenAI semantic conventions. If your asset already emits those, you only need to point its exporter at Boidra Platform. This page covers the data model and the one piece of config every path shares.
What you can connect
| Asset | How it shows up | What to do |
|---|---|---|
| Agent — a custom Joule agent, an A2A agent on BTP, a domain agent | Its turns as invoke_agent spans and its LLM calls as chat spans, under its agent name | Point the agent's OpenTelemetry exporter at Boidra Platform (below) |
| MCP server — custom, or exposed through the MCP Gateway | Every call as an execute_tool span with the tool's name, and tool type mcp | Emit tool spans from the agent or client that calls it, or from the server itself |
| Skill — a reusable capability run by an agent or client | Through the agent or client that runs it: as the agent turn or the tool call it performs | Instrument the agent or client that runs the skill |
Once connected, the same asset can be registered and published in the AI Asset Dashboard, so people can find it and its usage and cost are tracked from the first call.
The flow
Your AI asset (agent · MCP server · skill runner)
│ (OpenTelemetry SDK)
▼
OTLP exporter ──OTLP/HTTP──▶ POST /otel/v1/traces ──▶ Boidra Platform backend ──▶ DashboardThe three span types
Boidra Platform stores every span as one of three types, decided from the GenAI gen_ai.operation.name attribute (with span-name fallbacks):
gen_ai.operation.name | Span type | Meaning |
|---|---|---|
invoke_agent | invoke_agent | A top-level agent turn |
chat / text_completion | chat | An LLM call |
execute_tool | execute_tool | A tool or MCP call |
Spans that aren't GenAI-shaped (HTTP client spans, framework "workflow" wrappers, zero-duration empty agent wrappers) are skipped — so you can export everything and Boidra Platform keeps only the meaningful agent/LLM/tool spans.
The attributes Boidra Platform reads
These are the OpenTelemetry GenAI attributes that populate dashboard fields. Fallback keys are accepted where shown.
| Dashboard field | Attribute (with fallbacks) |
|---|---|
| Span type | gen_ai.operation.name |
| Agent name | gen_ai.agent.name → agent_name → (service.name for agents) |
| Model | gen_ai.request.model → gen_ai.response.model → model |
| Input tokens | gen_ai.usage.input_tokens → gen_ai.usage.prompt_tokens |
| Output tokens | gen_ai.usage.output_tokens → gen_ai.usage.completion_tokens |
| Tool name | gen_ai.tool.name → tool_name |
| Tool type | gen_ai.tool.type → tool_type |
| Conversation id | gen_ai.conversation.id → a2a.context_id → conversation_id |
| Tenant id | sap.tenancy.tenant_id → tenant_id |
| User id | user.id → user_id |
| Error | OTel span status ERROR, or error = true / outcome = "error" |
The full authoritative table is on the OTLP attributes reference.
The shared config: point the exporter at Boidra Platform
Every path sets the OTLP endpoint to your Boidra Platform host, with the /otel prefix:
export OTEL_EXPORTER_OTLP_ENDPOINT="https://<your-dashboard-host>/otel"The OpenTelemetry SDK appends /v1/traces, so spans land at /otel/v1/traces.
Use OTLP/HTTP, not gRPC
Boidra Platform's ingest is OTLP/HTTP. Some SDKs (including the SAP Cloud SDK for Python) default to gRPC. When that's the case, also set:
export OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"Choose your path
- SAP Cloud SDK for Python — recommended; auto-instruments LLM calls and provides agent/tool span helpers.
- SAP Cloud SDK for AI (JS) — the JavaScript/TypeScript path.
- OpenTelemetry SDK — vendor-neutral, any language.
- Raw OTLP / curl — the lowest level, great for testing.
