NewAgent Observability is live.
Back to directory
Traceloop logo

Traceloop MCP server: 11 tools, three backends

A vendor server that treats its own product as one backend of three, what its language-model tools measure, and the HTTP default worth changing.

Connector
Official, self-hosted
Coverage
OpenTelemetry traces and spans, plus model usage and token counts
Tools
11, all on by default
Biggest risk for an agent
HTTP mode binds to every network interface by default

Last verified 1 September 2026 · from The Traceloop repository, PyPI and the server's own tools/list response

This page is one of 90 in a directory of monitoring and developer tools. Each page checks what an AI coding agent can get out of the tool through its MCP server, the connector that lets the agent query the tool directly.

Summary

Traceloop publishes an MCP server that queries OpenTelemetry traces, and it does not require Traceloop's own backend. The --backend flag accepts jaeger, tempo or traceloop, and 11 tools work against whichever is chosen.

Six of those tools are about language models rather than about requests: token usage, model statistics, and traces ranked by token count and by duration. That is the part a general tracing connector does not have.

The definitions cost between 3,539 and 6,528 tokens, about 1.8% to 3.3% of a 200,000-token window. Descriptions average 701 characters and schemas average 479. The prose is what you pay for.

What is the Traceloop MCP server?

It is Traceloop's server for the Model Context Protocol. Traceloop builds OpenLLMetry, its open-source instrumentation for model calls, so the server reads traces that already follow OpenTelemetry conventions.

Because it speaks to the convention rather than to one store, the same 11 tools reach a self-hosted Jaeger, a Grafana Tempo or Traceloop's own backend. Only the connection flags change.

The language-model tools rely on OpenLLMetry's attributes. list_llm_tools_tool finds tool calls by matching traceloop.span.kind == tool, which means a trace instrumented some other way will not appear in its results.

Traceloop focuses on agent observability and can surface general traces from production. Code review and CI are outside that trace-based surface.

Part of the workWhat Traceloop has hereCan an agent reach it
Code, tests & reviewNoneNothing for code or review
CI & releaseNoneNo pipeline or deployment tools
Production observabilityOpenTelemetry traces and spansPartial. Traces, spans, services and errors are reachable; there are no metrics and no logs
Agent observability & evalsModel calls, tool calls, latency percentilesYes. Core strength. Six tools measure model usage, model statistics and tool calls from trace attributes
AI cost managementToken usage per model and per tracePartial. Token counts per model and per trace are reachable, and traces can be ranked by token count. There is no pricing, billing or invoice surface

Traceloop answers what model calls did and what they consumed. It names the slowest traces, the heaviest traces by token count, and the models in use. It has no metrics or logs, so a production investigation needs a second connector.

What can an AI agent do with Traceloop?

TaskToolsWorksWatch out for
Find traces matching a conditionsearch_traces search_spans_toolYessearch_spans_tool returns individual spans rather than grouped traces
Read one trace end to endget_traceYesReturns all spans, including parsed OpenTelemetry attributes for model calls
See what a request cost in tokensget_llm_usage get_llm_expensive_tracesYesToken counts, not currency. Pricing is not part of the trace
Compare models in productionlist_llm_models get_llm_model_statsYesStatistics include p50, p95 and p99 latency, plus how often each model stopped for each reason
Find slow model callsget_llm_slow_tracesYesRanked by duration, so a slow backend and a long generation look alike
See which tools a model calledlist_llm_tools_toolYesMatches traceloop.span.kind == tool, so other instrumentation is invisible
Investigate a service error ratefind_errors list_servicesYesErrors come from traces. A failure that emitted no span does not appear

Run list_services first. It returns the service names the other tools take as arguments, and only then can the agent compose a trace query. A backend holding several environments answers for whichever one the connection points at.

11 tools registered, all on by default, against whichever backend is configured

Traces3
search_tracesget_tracesearch_spans_tool
Orientation2
list_servicesfind_errors
Model usage3
get_llm_usagelist_llm_modelsget_llm_model_stats
Model outliers2
get_llm_expensive_tracesget_llm_slow_traces
Model tool calls1
list_llm_tools_tool

The same 11 register for every backend; the flag changes where they query, not what exists. Counted on 24 August 2026 from the released PyPI package.

What connecting costs before the first question

A context window is the amount of text a model can hold at once, and connecting uses some of it before the agent asks anything. Every tool the server registers sends its name, description and input schema to the model when the session starts. The tool list is charged whether or not a single tool is called.

11 tools cost between 3,539 and 6,528 tokens, about 1.8% to 3.3% of a 200,000-token window.

The descriptions carry it, at 701 characters on average against 479 for the schemas. search_traces alone runs to 2,002 characters, because it documents a generic filter system alongside its simple parameters.

Tool setToolsTokens (GPT-5.6, GPT-5.5)Tokens (GPT-4, GPT-3.5)Tokens (Claude Haiku 4.5 to Opus 5)Share of a 200,000-token window
Every tool, as registered113,601 to 5,3143,539 to 5,3195,237 to 6,5281.8% to 3.3%

Encodings: GPT-5.6, GPT-5.5 o200k_base; GPT-4, GPT-3.5 cl100k_base; Claude Haiku 4.5 to Opus 5 count_tokens. Counted 24 August 2026 from tools/list on the released PyPI package 0.2.2, run locally in a clean virtual environment with no backend configured.

Registration is static, so no backend answered. Figures cover name, description and input schema. The two models in column one share the o200k_base encoding, so they get one count. The spread is formatting, about 50%. Reasoning tokens are output, spent per request. The tool list is input, charged once at connection.

The Claude figures are measured rather than encoded. Anthropic publishes no local tokenizer, so the definitions were sent to the API's count_tokens endpoint and a no-tools baseline subtracted. The range covers two tokenizer generations rather than two serializations. Haiku 4.5 and Opus 4.6 sit at the low end, Opus 5 and Sonnet 5 at the high end. The gap between them is about a quarter.

Can Traceloop watch your own AI agents?

This connector is unusual in the table below: it is strong on cost and empty on evaluation. Counted from the released package's own tools/list response on 24 August 2026.

SignalCoveredNotes
Trace and session trackingYessearch_traces, get_trace and search_spans_tool reach traces and individual spans
Eval scores on recorded trafficNoNo evaluation tool exists on this server
Prompt version trackingNoNo prompt tool exists on this server
Offline experimentsNoNo dataset or experiment tool exists on this server
Token and cost trackingYesget_llm_usage aggregates token counts by model and service, and get_llm_expensive_traces ranks traces by usage

Traceloop MCP server limits: where answers come back incomplete

The limits below come from the server reading a convention rather than a product database.

The agent says: This application makes no model calls. It may not carry OpenLLMetry attributes.

The six model tools read attributes that OpenLLMetry writes. list_llm_tools_tool specifically matches traceloop.span.kind == tool.

A service instrumented with a different library still produces traces, so the general tools answer while the model tools return nothing.

Guard: Have the agent say whether an absence came from a model tool, and confirm the service uses OpenLLMetry before drawing a conclusion.

The agent says: There are no traces in that period. It may have queried a different store.

One connection points at one backend of three. A Jaeger holding development traces answers exactly the same tools as a production Traceloop backend.

Guard: Require the agent to name the backend and the environment in every answer.

The agent says: That trace was the most expensive. Expensive means token count here.

get_llm_expensive_traces ranks by token usage, and get_llm_usage reports token counts broken down by model and service. No pricing is involved.

Guard: Have the agent report token counts as token counts, and convert to money elsewhere.

How to configure Traceloop MCP for agents

  1. 1

    Choose the backend explicitly

    --backend takes jaeger, tempo or traceloop, and each expects its own URL. Nothing infers it for you.

  2. 2

    Set environments for the Traceloop backend

    --environments takes a comma-separated list, and omitting it leaves the scope of every answer implicit.

  3. 3

    Change the HTTP host if you use HTTP

    --host defaults to 0.0.0.0, which binds every interface on the machine.

  4. 4

    Expect model tools to depend on instrumentation

    They read OpenLLMetry attributes, so traces produced by other libraries answer the general tools but not the model ones.

Paste this into your agent’s instructions

The same tools answer from three different backends, and the model tools depend on a specific attribute being present. The block makes both visible.

Terminal
When you answer using Traceloop MCP tools, state:
- The backend you queried: jaeger, tempo or traceloop.
- The service and time range the answer covers.
- Whether a claim came from a model tool. Those read
  OpenLLMetry attributes and miss other instrumentation.
Never state that data does not exist. State that no traces
matched the filters above.
Write your answer in ASD-STE100 Simplified Technical
English. Use short sentences with one idea in each.

Do you need the MCP server at all?

Only for the model tools. For Jaeger or Tempo alone this server is a convenience over each store's own API, and a small one at 3,539 tokens.

The connector earns its place through the model tools. Ranking traces by token usage or comparing model latency percentiles is not something a general tracing API offers.

For metrics and logs alongside traces, Grafana reaches all three through its datasources, and Tempo is one of them.

Connect this for questions about model calls. Reach for Grafana when the question widens to metrics or logs.

Traceloop MCP server setup

The package installs from PyPI as opentelemetry-mcp and exposes an entry point of the same name. Transport defaults to stdio.

Every connection needs a backend type and a URL. The API key is only required by backends that ask for one.

Claude Code

An API key is passed for the Traceloop backend; a local Jaeger usually needs none.

Terminal
claude mcp add-json "traceloop" '{"command":
  "opentelemetry-mcp",
  "args":["--backend","traceloop",
          "--environments","production"],
  "env":{"BACKEND_API_KEY":"<your-key>"}}'

Cursor

In ~/.cursor/mcp.json. No credentials are needed against a local Jaeger.

Terminal
{"mcpServers":{"traceloop":{
  "command":"opentelemetry-mcp",
  "args":["--backend","jaeger",
          "--url","http://localhost:16686"]}}}

Codex CLI

Codex reads TOML, so the JSON blocks above will not transfer. The API key goes in env.

Terminal
[mcp_servers.traceloop]
command = "opentelemetry-mcp"
args = ["--backend", "tempo", "--url", "https://tempo.internal"]
env = { BACKEND_API_KEY = "<your-key>" }

Every other client

Each block below is the configuration for one client, with the file path and the key that client expects.

Claude Desktop

macOS ~/Library/Application Support/Claude/claude_desktop_config.json. Windows %APPDATA%\Claude\claude_desktop_config.json. There is no CLI. Edit through Settings, Developer, Edit Config.

Quit and restart fully for changes to load. Paths in args must be absolute. Logs at ~/Library/Logs/Claude/mcp.log.

No credentials appear in the file for a local Jaeger. Add BACKEND_API_KEY in env for a backend that requires one.

Terminal
{"mcpServers":{"traceloop":{"command":"opentelemetry-mcp",
  "args":["--backend","jaeger","--url","http://localhost:16686"]}}}
Gemini CLI

~/.gemini/settings.json globally, or .gemini/settings.json per project. Key mcpServers. CLI: gemini mcp add.

No credentials appear in the file for a local Jaeger. Add BACKEND_API_KEY in env for a backend that requires one.

Terminal
{"mcpServers":{"traceloop":{"command":"opentelemetry-mcp",
  "args":["--backend","jaeger","--url","http://localhost:16686"]}}}
VS Code Copilot

.vscode/mcp.json per workspace, or your user profile. CLI: code --add-mcp.

No credentials appear in the file for a local Jaeger. Add BACKEND_API_KEY in env for a backend that requires one.

Terminal
{"servers":{"traceloop":{"command":"opentelemetry-mcp",
  "args":["--backend","jaeger","--url","http://localhost:16686"]}}}

The key is `servers`, not `mcpServers`. VS Code is the only client that uses that name, and copying a config from anywhere else fails silently.

Windsurf

~/.codeium/windsurf/mcp_config.json, which is the path Windsurf documents. Key mcpServers, the same JSON shape as Cursor, carrying the same backend API key.

Zed

~/.config/zed/settings.json, carrying the same backend API key as the blocks above.

The key is `context_servers`. Zed does not call them MCP servers in config, so searching its settings for mcp finds nothing.

Google Antigravity

~/.gemini/config/mcp_config.json globally, or .agents/mcp_config.json per project. Key mcpServers. There is no CLI. Use the /mcp overlay in the editor. Supports stdio, streamable HTTP, SSE and websocket.

No credentials appear in the file for a local Jaeger. Add BACKEND_API_KEY in env for a backend that requires one.

Terminal
{"mcpServers":{"traceloop":{"command":"opentelemetry-mcp",
  "args":["--backend","jaeger","--url","http://localhost:16686"]}}}
Amp (Sourcegraph)

~/.config/amp/settings.json or .amp/settings.json, carrying the same backend API key. The amp mcp CLI covers approve, doctor and oauth.

The key is `amp.mcpServers`, namespaced. A bare mcpServers block is ignored.

Cline

~/.cline/mcp.json per the docs. The source also reads ~/.cline/data/settings/cline_mcp_settings.json. Key mcpServers, standard JSON shape, carrying the same backend API key. Supports stdio, streamable HTTP and SSE.

Goose (Block)

~/.config/goose/config.yaml, carrying the same backend API key.

YAML, and servers are called `extensions`. Goose does not use the MCP vocabulary in config at all. Add one interactively with goose configure, or per session with goose session --with-extension.

Kiro (AWS)

.kiro/settings/mcp.json per workspace, or ~/.kiro/settings/mcp.json globally. Key mcpServers, standard JSON shape, carrying the same backend API key.

Warp

~/.warp/.mcp.json or .warp/.mcp.json. Key mcpServers, standard shape, carrying the same backend API key. Also addable through the /agent-add-mcp skill.

JetBrains Junie

.junie/mcp/mcp.json per project, or ~/.junie/mcp/mcp.json. Key mcpServers, carrying the same backend API key. Use /mcp in the CLI to manage.

Roo Code

.roo/mcp.json per project. The global file is mcp_settings.json, opened from the Roo Code MCP settings view with Edit Global MCP. Key mcpServers, carrying the same backend API key.

Continue

.continue/mcpServers/*.yaml, one file per server, carrying the same backend API key.

YAML, and `mcpServers` is a list, not an object. Every JSON client keys servers by name. Continue takes an array, so a converted config will not parse.

Trae

.trae/mcp.json per project, or paste into the UI under Raw Config (JSON). Key mcpServers, standard shape, carrying the same backend API key.

Devin

Devin has no config file to edit. Servers are added through a web form in the settings UI, and Devin's documentation states you do not need to write or paste JSON. The block below is the shape those fields describe, shown for reference. Either route uses the same backend API key.

HTTP transport

The default host binds every interface, so set it explicitly. The API key belongs in the environment rather than on the command line.

Terminal
BACKEND_API_KEY=<your-key> opentelemetry-mcp \
  --transport http --host 127.0.0.1 --port 8000 \
  --backend traceloop --environments production

Read-only access, permissions and security

  • HTTP mode binds to 0.0.0.0 by default

    The --host option's own help text names that default, so an HTTP deployment is reachable from every interface unless changed.

  • Traces carry prompts

    OpenLLMetry records model call attributes, and get_trace returns all spans with their parsed data, so prompt and completion content can reach the model.

  • The API key is the whole boundary

    There are no read-only or scoped modes; the backend credential decides what the agent can see.

  • Every tool reads

    No tool in the list creates, updates or deletes anything in a backend.

Troubleshooting

No traces are returned
Check the backend and URL. The same 11 tools register whether or not a backend is reachable, so an unreachable store returns empty rather than failing at startup.
Model tools return nothing but traces exist
The model tools read OpenLLMetry attributes. list_llm_tools_tool matches traceloop.span.kind == tool, so traces instrumented another way answer only the general tools.
Answers cover the wrong environment
For the Traceloop backend, pass --environments with the environments you mean. Without it, the scope of an answer is whatever the backend defaults to.
The HTTP server is reachable from outside
That is the default. --host is 0.0.0.0 unless set, so pass --host 127.0.0.1 for a local-only deployment.

Traceloop MCP server: Reference

ItemValue
StatusPyPI 0.2.2 · repository pushed 21 June 2026
Adoption198 stars · 22 forks · 2 releases · repository created 2 November 2025
LicenseApache-2.0
Packageopentelemetry-mcp on PyPI
BackendsJaeger, Tempo, Traceloop
AuthBACKEND_API_KEY, where the backend requires one
Tools11, all on by default, all read-only
Transportsstdio by default; HTTP binds 0.0.0.0 unless --host is set
Context cost3,539 to 6,528 tokens

What engineers report

The repository is the most active signal, and its distance from the vendor's own product is the finding.

What was checkedWhat it shows
Stars198
Last push21 June 2026
Latest release0.2.2 on PyPI
LicenseApache-2.0
Tools returned by tools/list11
Backends supported3: Jaeger, Tempo, Traceloop
Average description701 characters per tool
Average schema size479 characters per tool

“Large JSON responses from MCP tools consume significant tokens when passed to LLMs. ... Token limits force truncation of valuable data, reducing context completeness.”

yaniv-apigene, GitHub issue, 17 November 2025 · A single open proposal to compress tool responses. It is a feature request rather than a report of a failure.

Repository facts from the GitHub API and PyPI, retrieved 24 August 2026. Tool counts and sizes come from the released package's own tools/list response, captured in a clean virtual environment.

Should you connect an agent to Traceloop?

Yes. Best for stdio transport with an explicit backend, and --environments set when the backend is Traceloop.

Strongest fit
Teams running OpenLLMetry who want model-call questions answered from whichever trace store they already have.
Main advantage
The same 11 tools work against Jaeger, Tempo or Traceloop, so the connector survives a change of backend.
Main weakness
The model tools depend on OpenLLMetry attributes, so other instrumentation answers only the general tools.
Operational risk
HTTP transport binds every interface by default, and traces can carry prompt content into the model.

From Oodle

One platform for agent traces and infrastructure

Agent traces usually sit in a different product from the rest of your telemetry, so when a slow database makes an agent slow the symptom is in one tool and the cause is in another. Oodle keeps both in one query surface, from $10 per million spans.

See agent observability

Frequently asked questions

How many tools does the Traceloop MCP server have?

Traceloop's released PyPI package 0.2.2 loads eleven read-only tools by default. Counted from its own tools/list response on 24 August 2026.

Does it only work with Traceloop?

No. The --backend flag accepts jaeger, tempo or traceloop, and the same 11 tools register for each.

What do the tool definitions cost?

Between 3,539 and 6,528 tokens, about 1.8% to 3.3% of a 200,000-token window. Descriptions rather than schemas carry the cost.

Why do the model tools return nothing?

They read OpenLLMetry attributes. list_llm_tools_tool matches traceloop.span.kind == tool, so traces from other instrumentation do not appear.

Is the HTTP mode safe to expose?

Not by default. --host is 0.0.0.0 unless set, so bind it to 127.0.0.1 or put it behind something that authenticates.

Changelog

  • 8 February 2026. traceloop/opentelemetry-mcp-server 0.2.2 released, the most recent version.
  • 17 November 2025. First release, 0.2.0.
  • 2 November 2025. traceloop/opentelemetry-mcp-server created on GitHub.

Sources

Every number on this page traces to one of these

  1. Repository facts from the GitHub API · traceloop/opentelemetry-mcp-server, retrieved 24 August 2026
  2. Package and version facts from PyPI · opentelemetry-mcp 0.2.2
  3. Backend flags, transports and host defaults from the package's own help output
  4. Tool counts, descriptions and schema sizes from the server's own tools/list response

Traceloop’s own MCP documentation

Also agent observability:

For metrics and logs alongside traces: