← Free tools

Free tool · #3

OTel GenAI Trace Validator

Check an OpenTelemetry span against the gen_ai.* semantic conventions — what conforms, what is missing, what is deprecated.

Validated in your browser — nothing is sent anywhere.

Result — chat gpt-4o

3/3 required · 2 deprecated · 6/7 recommended

conformant
  • gen_ai.usage.output_tokensCompletion tokens — required to compute output cost.
  • gen_ai.systemRenamed to the provider namespace. Use gen_ai.provider.name instead.openai
  • gen_ai.usage.completion_tokensThe old name predates the stable usage namespace. Use gen_ai.usage.output_tokens instead.340
  • gen_ai.operation.nameThe operation performed — sets what the span means (chat, embeddings, …).chat
  • gen_ai.provider.nameWhich provider served the call — needed to attribute cost and latency.openai
  • gen_ai.request.max_tokensThe requested output-token cap.1024
  • gen_ai.request.modelThe requested model. Without it, a trace cannot be priced.gpt-4o
  • gen_ai.request.temperatureSampling temperature.0.7
  • gen_ai.response.finish_reasonsWhy generation stopped — an array of strings.[stop]
  • gen_ai.response.idThe provider response id, for correlation.chatcmpl-abc123
  • gen_ai.response.modelThe model that actually served the request (can differ from the requested one).gpt-4o-2026-05-01
  • gen_ai.usage.input_tokensPrompt tokens — required to compute input cost.1200
Modernized attributes (deprecated names replaced)
{
  "gen_ai.operation.name": "chat",
  "gen_ai.provider.name": "openai",
  "gen_ai.request.model": "gpt-4o",
  "gen_ai.request.temperature": 0.7,
  "gen_ai.request.max_tokens": 1024,
  "gen_ai.response.model": "gpt-4o-2026-05-01",
  "gen_ai.response.id": "chatcmpl-abc123",
  "gen_ai.response.finish_reasons": [
    "stop"
  ],
  "gen_ai.usage.input_tokens": 1200,
  "gen_ai.usage.output_tokens": 340
}
Use this tool from code — or hand it to your agentagent prompt · REST · MCP

Hand this tool to your coding agent

Paste into Claude Code, Cursor, Codex, or any agent. It learns to call this tool over REST or MCP, reaches for it when you ask, and keeps our sourced/pending labels honest.

You can use telemeter.ai's free "OTel GenAI Trace Validator" — a keyless, read-only tool (no signup), available as an HTTP API and an MCP tool. What it does: Check an OpenTelemetry span against the gen_ai.* semantic conventions — what conforms, what is missing, what is deprecated.

Whenever I ask you something this tool answers, call it and use its result instead of estimating yourself.

REST:
  curl -sX POST https://telemeter.ai/api/tools/otel-validator -H 'content-type: application/json' -d '{"trace":{"name":"chat gpt-4o","kind":"SPAN_KIND_CLIENT","attributes":{"gen_ai.operation.name":"chat","gen_ai.provider.name":"openai","gen_ai.request.model":"gpt-4o","gen_ai.response.model":"gpt-4o-2026-05-01","gen_ai.usage.input_tokens":1200,"gen_ai.usage.output_tokens":340,"gen_ai.response.finish_reasons":["stop"]}}}'

MCP: the telemeter MCP server at https://telemeter.ai/mcp exposes this as the tool "otel-validator" — call it with tools/call.

The response is JSON: { status, data, summary, provenance }. "provenance" carries the source and the date the figure was verified. If status is "pending" or "stale", tell me the value isn't currently verified rather than presenting it as fact.

Or call it directly. This tool runs behind one handler with three front doors — this page, a REST endpoint, and an MCP tool. Same result, read-only, no key. The example below is a request that works.

REST
curl -sX POST https://telemeter.ai/api/tools/otel-validator \
  -H 'content-type: application/json' \
  -d '{"trace":{"name":"chat gpt-4o","kind":"SPAN_KIND_CLIENT","attributes":{"gen_ai.operation.name":"chat","gen_ai.provider.name":"openai","gen_ai.request.model":"gpt-4o","gen_ai.response.model":"gpt-4o-2026-05-01","gen_ai.usage.input_tokens":1200,"gen_ai.usage.output_tokens":340,"gen_ai.response.finish_reasons":["stop"]}}}'
MCP — tools/call at https://telemeter.ai/mcp
curl -sX POST https://telemeter.ai/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"otel-validator","arguments":{"trace":{"name":"chat gpt-4o","kind":"SPAN_KIND_CLIENT","attributes":{"gen_ai.operation.name":"chat","gen_ai.provider.name":"openai","gen_ai.request.model":"gpt-4o","gen_ai.response.model":"gpt-4o-2026-05-01","gen_ai.usage.input_tokens":1200,"gen_ai.usage.output_tokens":340,"gen_ai.response.finish_reasons":["stop"]}}}}}'
Input schema (JSON Schema)
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "trace": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1
        },
        {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        {
          "type": "array",
          "items": {}
        }
      ]
    }
  },
  "required": [
    "trace"
  ],
  "additionalProperties": false
}

Want this across your whole stack?

Telemeter tracks real cost, latency, and quality on every production agent run.

No account, nothing sent anywhere — your trace is parsed and validated entirely in your browser. Data notice →