| Crates.io | turbomcp-telemetry |
| lib.rs | turbomcp-telemetry |
| version | 3.0.0-beta.3 |
| created_at | 2026-01-12 17:50:18.490146+00 |
| updated_at | 2026-01-22 16:45:27.581516+00 |
| description | OpenTelemetry integration and observability for TurboMCP SDK |
| homepage | https://turbomcp.org |
| repository | https://github.com/Epistates/turbomcp |
| max_upload_size | |
| id | 2038375 |
| size | 142,019 |
OpenTelemetry integration and observability for TurboMCP SDK.
use turbomcp_telemetry::{TelemetryConfig, TelemetryGuard};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Initialize telemetry
let config = TelemetryConfig::builder()
.service_name("my-mcp-server")
.service_version("1.0.0")
.log_level("info,turbomcp=debug")
.build();
let _guard = config.init()?;
// Your MCP server code here...
Ok(())
}
| Feature | Description |
|---|---|
opentelemetry |
Full OpenTelemetry integration with OTLP export |
prometheus |
Standalone Prometheus metrics (using metrics.rs) |
tower |
Tower middleware for automatic request instrumentation |
full |
All features enabled |
Enable the opentelemetry feature for full distributed tracing:
use turbomcp_telemetry::TelemetryConfig;
let config = TelemetryConfig::builder()
.service_name("my-server")
.otlp_endpoint("http://localhost:4317")
.sampling_ratio(1.0)
.build();
let _guard = config.init()?;
Enable the prometheus feature for standalone Prometheus metrics:
use turbomcp_telemetry::TelemetryConfig;
let config = TelemetryConfig::builder()
.service_name("my-server")
.prometheus_port(9090)
.build();
let _guard = config.init()?;
// Metrics available at http://localhost:9090/metrics
Enable the tower feature for automatic request instrumentation:
use tower::ServiceBuilder;
use turbomcp_telemetry::tower::{TelemetryLayer, TelemetryLayerConfig};
let config = TelemetryLayerConfig::new()
.service_name("my-mcp-server")
.exclude_method("ping");
let service = ServiceBuilder::new()
.layer(TelemetryLayer::new(config))
.service(my_mcp_handler);
The telemetry system records MCP-specific attributes on spans:
| Attribute | Description |
|---|---|
mcp.method |
MCP method name (e.g., "tools/call") |
mcp.tool.name |
Tool name for tools/call requests |
mcp.resource.uri |
Resource URI for resources/read |
mcp.prompt.name |
Prompt name for prompts/get |
mcp.request.id |
JSON-RPC request ID |
mcp.session.id |
MCP session ID |
mcp.transport |
Transport type (stdio, http, websocket) |
mcp.duration_ms |
Request duration in milliseconds |
mcp.status |
Request status (success/error) |
When using the prometheus feature:
| Metric | Type | Description |
|---|---|---|
mcp_requests_total |
Counter | Total requests by method and status |
mcp_request_duration_seconds |
Histogram | Request latency distribution |
mcp_tool_calls_total |
Counter | Tool calls by name and status |
mcp_tool_duration_seconds |
Histogram | Tool execution latency |
mcp_resource_reads_total |
Counter | Resource reads by URI pattern |
mcp_active_connections |
Gauge | Current active connections |
mcp_errors_total |
Counter | Errors by kind and method |
MIT