Metadata-Version: 2.5
Name: opentelemetry-instrumentation-mcp
Version: 0.63.0
Summary: OpenTelemetry mcp instrumentation
Project-URL: Repository, https://github.com/traceloop/openllmetry/tree/main/packages/opentelemetry-instrumentation-mcp
Author-email: Felix George <felix.george@ibm.com>
License-Expression: Apache-2.0
Requires-Python: <4,>=3.10
Requires-Dist: opentelemetry-api<2,>=1.38.0
Requires-Dist: opentelemetry-instrumentation>=0.59b0
Requires-Dist: opentelemetry-semantic-conventions-ai<0.6.0,>=0.5.1
Requires-Dist: opentelemetry-semantic-conventions>=0.63b1
Provides-Extra: instruments
Requires-Dist: mcp; extra == 'instruments'
Description-Content-Type: text/markdown

OpenTelemetry MCP Instrumentation

<a href="https://pypi.org/project/opentelemetry-instrumentation-mcp/">
    <img src="https://badge.fury.io/py/opentelemetry-instrumentation-mcp.svg">
</a>

This library allows tracing of agentic workflows implemented with MCP framework [mcp python sdk](https://github.com/modelcontextprotocol/python-sdk).

## Installation

```bash
pip install opentelemetry-instrumentation-mcp
```

## Example usage

```python
from opentelemetry.instrumentation.mcp import McpInstrumentor

McpInstrumentor().instrument()
```

## Privacy

**By default, this instrumentation logs prompts, completions, and embeddings to span attributes**. This gives you a clear visibility into how your LLM application tool usage is working, and can make it easy to debug and evaluate the tool usage.

However, you may want to disable this logging for privacy reasons, as they may contain highly sensitive data from your users. You may also simply want to reduce the size of your traces.

To disable logging, set the `TRACELOOP_TRACE_CONTENT` environment variable to `false`.

```bash
TRACELOOP_TRACE_CONTENT=false
```

## Diagnostics

A failure inside this instrumentation never reaches your application: the traced call still goes out, and its result -- or its own exception -- is what the caller sees. Such a failure is logged at `WARNING` on the `opentelemetry.instrumentation.mcp` logger, with the stack at `DEBUG`.

Some of these failures sit on a per-message path (the stream writer), so a persistent one logs a line per MCP message. To quiet it without touching the rest of your logging:

```python
import logging

logging.getLogger("opentelemetry.instrumentation.mcp").setLevel(logging.ERROR)
```
