otel-mcp
Allows emitting OpenTelemetry traces to Jaeger via OTLP/HTTP JSON protocol, enabling visualization and analysis of distributed tracing data in Jaeger's UI.
Provides a k8s-pod mimicry profile that generates realistic Kubernetes pod telemetry including container metrics and k8s.* resource attributes for simulating Kubernetes environments.
Provides an nginx/http-server mimicry profile that generates realistic HTTP server telemetry including server spans with HTTP semantic conventions, access logs, request counters, and latency histograms.
Core integration that emits OpenTelemetry traces, metrics, and logs to OTLP endpoints, supporting all three OTLP wire formats (gRPC, HTTP/protobuf, HTTP/JSON) for comprehensive observability data collection.
Provides a postgres mimicry profile that generates database client spans with db.system=postgresql attributes and connection pool metrics for simulating PostgreSQL database interactions.
Provides a redis mimicry profile that generates database client spans with db.system=redis attributes for simulating Redis cache/database operations.
Enables modeling of payment service interactions through span attributes like peer.service="stripe" in custom trace generation for simulating e-commerce checkout flows.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@otel-mcpsimulate 20 nginx requests with a 5% error rate"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
otel-mcp
An MCP server that emits OpenTelemetry traces, metrics, and logs to one or more OTLP endpoints at the same time, in any of the three OTLP wire formats:
grpc— OTLP/gRPC (protobuf over HTTP/2)http/protobuf— OTLP/HTTP binary protobufhttp/json— OTLP/HTTP proto3-JSON (spec-compliant)
It also ships tool-mimicry profiles that produce realistic signal bundles shaped like well-known tools (nginx, postgres, redis, kafka, aws-lambda, kubernetes pod, generic gRPC service), so you can populate a collector or backend with traffic that looks like a real environment.
Install
uv venv
uv pip install -e .Related MCP server: Mock MCP Server
Run
otel-mcp # stdio transport — wire into any MCP clientOr via an MCP client config (e.g. Claude Desktop, Claude Code):
{
"mcpServers": {
"otel": {
"command": "otel-mcp"
}
}
}Env bootstrap
If OTEL_EXPORTER_OTLP_ENDPOINT is set on launch, an endpoint named default
is registered using the standard OTEL env vars:
OTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_OTLP_PROTOCOL(grpc|http/protobuf|http/json)OTEL_EXPORTER_OTLP_HEADERS(comma-separatedk=vpairs)OTEL_EXPORTER_OTLP_INSECURE(gRPC TLS toggle)
Tools
Endpoint management
Tool | Purpose |
| Register a named OTLP destination (url, protocol, signals, headers, …). |
| Drop one endpoint by name. |
| Drop every endpoint. |
| Enumerate current endpoints. |
| Endpoints + available mimic profiles. |
Endpoints are selected per call: every signal-emitting tool accepts an
endpoints: [names] arg. Omit it to fan out to every endpoint that accepts
that signal type.
Raw signal emission
Tool | Shape of input |
|
|
|
|
|
|
Mimicry
Tool | Purpose |
| Show every profile with its parameters. |
| Run one profile and send its bundle once. |
| Run a profile on a loop to simulate sustained traffic. |
Built-in profiles:
Profile | What it looks like |
| Server spans with HTTP semconv, access logs, request counters & latency histograms. |
| DB client spans with |
| DB client spans with |
| Producer/consumer spans with messaging semconv. |
| Server spans with |
| Resource = full |
| Server spans with |
Example session
> add_endpoint name="otel-collector" url="http://localhost:4318" protocol="http/protobuf"
> add_endpoint name="jaeger-json" url="http://localhost:4318" protocol="http/json" signals=["traces"]
> mimic_tool profile="nginx" options={"count": 50, "error_rate": 0.1}
> mimic_tool profile="postgres"
> generate_load profile="kafka" iterations=10 interval_seconds=2
> send_trace service_name="checkout" spans=[
{"name": "POST /checkout", "kind": "server", "duration_ms": 42, "attributes": {"http.response.status_code": 200}},
{"name": "charge_card", "kind": "client", "parent_name": "POST /checkout", "duration_ms": 18,
"attributes": {"peer.service": "stripe"}}
]Adding a new mimic profile
Write a function returning a
MimicBundleinsrc/otel_mcp/mimics.py.Register it in the
PROFILESdict at the bottom of that file.Call
list_mimic_profilesto confirm it picked up the parameters.
Profiles stay declarative: each returns span/metric/log specs that flow through the same generator pipeline, so they inherit correct resource merging, wire format support, and fan-out automatically.
Available Tools
11 toolsadd_endpointA
Register an OTLP destination.
Args:
name: Unique identifier used by other tools to target this endpoint.
url: Collector URL. gRPC: host:port or http://host:port.
HTTP: base URL (/v1/traces etc. is appended automatically).
protocol: One of grpc, http/protobuf, http/json.
signals: Subset of traces, metrics, logs. Defaults to all.
headers: Headers added to every request (auth tokens, tenant ids, ...).
insecure: gRPC only — disable TLS.
timeout_seconds: Per-request timeout.
overwrite: If an endpoint with this name already exists, replace it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| url | Yes | ||
| protocol | No | http/protobuf | |
| signals | No | ||
| headers | No | ||
| insecure | No | ||
| timeout_seconds | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: it's a mutation tool (implied by 'Register'), includes an 'overwrite' parameter for handling existing endpoints, and mentions authentication via headers. However, it doesn't cover rate limits, error handling, or side effects beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by a bullet-point-like parameter breakdown. Every sentence earns its place by providing essential information without redundancy, making it efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is largely complete for a mutation tool with no annotations but with an output schema (which handles return values). It covers the tool's purpose and all parameters in detail. However, it lacks some behavioral context like error conditions or system state requirements, which would be beneficial given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema description coverage, the description fully compensates by providing detailed semantic explanations for all 8 parameters. It clarifies usage (e.g., 'name' as a unique identifier for targeting, 'url' formats for gRPC/HTTP, 'protocol' options, 'signals' defaults, 'headers' for auth, 'insecure' as gRPC-only, 'timeout_seconds' as per-request, and 'overwrite' for replacement), adding significant value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Register') and resource ('OTLP destination'), distinguishing it from siblings like 'remove_endpoint' (deletion) and 'list_endpoints' (querying). It precisely defines what the tool does without being vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for registering OTLP endpoints but provides no explicit guidance on when to use this tool versus alternatives like 'clear_endpoints' or 'remove_endpoint'. It lacks context about prerequisites, such as whether the system must be in a specific state, or exclusions for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clear_endpointsB
Remove all endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. 'Remove all endpoints' suggests a destructive mutation, but it lacks details on permissions, reversibility, confirmation prompts, or effects on system state. It doesn't mention rate limits, error handling, or what 'remove' entails (e.g., deletion vs. deactivation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no wasted words. It's front-loaded with the core action and target, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and an output schema (which might cover return values), the description is insufficient. It doesn't explain behavioral traits like safety, side effects, or usage context, leaving critical gaps for an agent to understand when and how to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description doesn't add param info, but this is acceptable given the empty schema, aligning with the baseline for zero parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Remove all endpoints' clearly states the action (remove) and target (endpoints), with 'all' specifying scope. It distinguishes from sibling 'remove_endpoint' (singular) but doesn't explicitly contrast with other siblings like 'list_endpoints' or 'add_endpoint'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'remove_endpoint' or 'list_endpoints'. The description implies a bulk operation but doesn't specify prerequisites, consequences, or recommend alternatives for partial removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_loadA
Repeatedly run a mimic profile to simulate sustained traffic.
Blocks for roughly iterations * interval_seconds seconds. For true
background loops use an external scheduler — this tool is synchronous by
design so the caller sees per-iteration results.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | ||
| iterations | No | ||
| interval_seconds | No | ||
| endpoints | No | ||
| options | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: the tool blocks for a duration ('Blocks for roughly iterations * interval_seconds seconds'), is synchronous ('this tool is synchronous by design'), and provides per-iteration results ('the caller sees per-iteration results'). However, it lacks details on error handling, rate limits, or performance impacts, which are important for a load-generation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: the first sentence states the core purpose, and subsequent sentences add crucial behavioral context without redundancy. Every sentence earns its place by clarifying usage and limitations, making it efficient and well-structured for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (load simulation with multiple parameters), no annotations, and an output schema (which reduces need to describe returns), the description is moderately complete. It covers purpose, behavior, and usage guidelines but lacks details on parameters and advanced behavioral aspects like error handling. This leaves gaps for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'iterations' and 'interval_seconds' in the blocking context, adding meaning beyond the schema. However, it doesn't explain 'profile', 'endpoints', or 'options', leaving three of the five parameters without semantic clarification. This partial coverage is insufficient given the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Repeatedly run a mimic profile to simulate sustained traffic.' It specifies the verb ('run'), resource ('mimic profile'), and goal ('simulate sustained traffic'), which distinguishes it from siblings like 'mimic_tool' (likely a single run) or monitoring tools. However, it doesn't explicitly differentiate from all siblings, such as 'send_metric' or 'send_trace', which might also involve traffic simulation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: it states when to use this tool ('to simulate sustained traffic') and when not to use it ('For true background loops use an external scheduler — this tool is synchronous by design'). It contrasts with alternatives by noting the tool is synchronous and blocks, implying that asynchronous or background tasks should use other methods, though it doesn't name specific sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_endpointsB
List registered endpoints.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'List registered endpoints' implies a read-only operation, but doesn't specify whether this returns all endpoints or filtered results, what format the output takes, or any limitations (like pagination or rate limits). The description is too minimal for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is maximally concise - a single four-word phrase that communicates the core purpose without any wasted words. It's perfectly front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has zero parameters, 100% schema coverage, and an output schema exists, the description's minimalism is partially justified. However, for a tool with no annotations and multiple related sibling tools, the description should provide more context about what 'endpoints' are and how this listing differs from other list operations in the system.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters with 100% schema description coverage, so the schema already fully documents the input requirements. The description doesn't need to explain parameters, and appropriately doesn't attempt to. A baseline of 4 is appropriate for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('registered endpoints'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_mimic_profiles' or explain what distinguishes 'endpoints' from other listable resources in this context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There are multiple sibling tools (add_endpoint, remove_endpoint, clear_endpoints) that relate to endpoints, but no indication of when listing is appropriate versus modifying endpoints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mimic_profilesB
List available tool-mimicry profiles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'List available' implies a read-only operation, but there's no information about permissions needed, whether results are paginated, what format they're returned in, or if there are any rate limits. The description is minimal and lacks important operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states exactly what the tool does with zero wasted words. It's appropriately sized for a simple listing tool and front-loads the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool with an output schema, the description is minimally adequate. However, given the complexity of the sibling tools (including 'mimic_tool' and various endpoint operations) and no annotations, the description should better explain what 'tool-mimicry profiles' are and how they relate to other tools in this system.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't mention parameters since none exist, earning a baseline 4 for not creating confusion about non-existent parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'tool-mimicry profiles', making the purpose immediately understandable. However, it doesn't differentiate this from sibling tools like 'list_endpoints' or explain what distinguishes 'mimicry profiles' from other listable resources in this system.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_endpoints' or 'mimic_tool'. There's no mention of prerequisites, context for when mimicry profiles are relevant, or what this tool enables that others don't.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mimic_toolB
Emit a realistic bundle of signals mimicking a known tool.
Args:
profile: One of nginx, postgres, redis, kafka,
aws-lambda, k8s-pod, grpc. Call list_mimic_profiles
for profile-specific parameters.
endpoints: Fan-out target endpoints. Defaults to all registered.
options: Keyword args passed to the profile (e.g. {"count": 50}).
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | ||
| endpoints | No | ||
| options | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'emit signals' but doesn't disclose behavioral traits like whether this is read-only or destructive, authentication needs, rate limits, or what 'realistic bundle' entails. The description is minimal and lacks crucial operational context for a tool that generates data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded: a clear purpose statement followed by structured parameter explanations. Every sentence earns its place, with no wasted words. The Args section is well-organized and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters with 0% schema coverage and no annotations, the description does well on parameters but lacks behavioral context. The existence of an output schema means return values needn't be explained, but for a data-generation tool with siblings, more guidance on when to use it would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It provides meaningful semantics for all 3 parameters: 'profile' with specific examples and a reference to another tool, 'endpoints' as fan-out targets with default behavior, and 'options' as keyword args with an example. This adds substantial value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Emit a realistic bundle of signals mimicking a known tool.' It specifies the action (emit signals) and resource (mimicking known tools), but doesn't explicitly differentiate from siblings like 'generate_load' or 'send_log' which might have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by listing profile options and referencing 'list_mimic_profiles' for details, but doesn't explicitly state when to use this tool versus alternatives like 'generate_load' or the various 'send_*' tools. It provides some context but lacks clear when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_endpointC
Remove an endpoint by name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. 'Remove' implies a destructive operation, but the description doesn't specify whether this is permanent, requires specific permissions, has side effects, or what happens on success/failure. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a simple tool and front-loads the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive mutation tool with no annotations, 0% schema description coverage, and only basic parameter documentation. While an output schema exists (which helps), the description fails to address critical behavioral aspects like safety, permissions, or error conditions that are essential for proper tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions the 'name' parameter but provides no additional meaning about what constitutes a valid endpoint name, format requirements, or how names are resolved. This adds minimal value beyond what's implied by the parameter name itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove') and target resource ('an endpoint by name'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'clear_endpoints' which might also remove endpoints, so it doesn't reach the highest score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'clear_endpoints' (which might remove all endpoints) or prerequisites for removal. It simply states what the tool does without contextual usage information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_logB
Send one or more log records.
Each record dict accepts: body, severity (trace/debug/info/warn/
error/fatal), severity_text, attributes, timestamp_ns.
| Name | Required | Description | Default |
|---|---|---|---|
| service_name | Yes | ||
| records | Yes | ||
| resource_attributes | No | ||
| endpoints | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions what data can be sent but doesn't cover critical aspects like whether this is a write operation (implied by 'send'), authentication requirements, rate limits, error handling, or what happens after sending. This leaves significant gaps for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and well-structured: a clear opening sentence states the purpose, followed by a bullet-like list of record fields. Every sentence earns its place with no wasted words, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there's an output schema (which handles return values), no annotations, and moderate complexity with 4 parameters, the description is partially complete. It covers record structure well but misses top-level parameter explanations and behavioral context. For a tool that likely performs writes, more disclosure would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial value beyond the schema, which has 0% description coverage. It documents the structure of individual log records (body, severity, severity_text, attributes, timestamp_ns), which isn't captured in the schema's generic 'additionalProperties' for records. However, it doesn't explain the four top-level parameters (service_name, records, resource_attributes, endpoints) mentioned in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('send') and resource ('log records'), making the purpose immediately understandable. However, it doesn't differentiate this tool from sibling tools like 'send_metric' or 'send_trace' beyond specifying it's for logs rather than metrics or traces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'send_metric' or 'send_trace', nor does it mention any prerequisites or contextual constraints. It simply describes what the tool does without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_metricB
Send one or more metric instruments.
Each metric dict accepts: name, kind (counter/up_down_counter/gauge/
histogram), unit, description, points (list of
{value, attributes}). For histograms, value may be a list of samples.
| Name | Required | Description | Default |
|---|---|---|---|
| service_name | Yes | ||
| metrics | Yes | ||
| resource_attributes | No | ||
| endpoints | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the structure of metric data but doesn't mention whether this is a read/write operation, what permissions are needed, whether it's idempotent, or what happens on failure. The description adds some context about metric structure but lacks critical behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by specific details about the metrics parameter. Every sentence adds value without redundancy, making it appropriately sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters with 0% schema coverage and no annotations, the description provides good detail about the 'metrics' parameter but leaves others unexplained. The existence of an output schema reduces the need to describe return values, but the description could better address the tool's overall context and behavioral aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well by detailing the structure of the 'metrics' parameter, including accepted fields like 'name', 'kind', 'unit', 'description', and 'points'. However, it doesn't explain the other 3 parameters (service_name, resource_attributes, endpoints), leaving them undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Send one or more metric instruments.' It specifies the action (send) and resource (metric instruments), but doesn't differentiate from sibling tools like 'send_log' or 'send_trace' beyond mentioning metrics specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention sibling tools like 'send_log' or 'send_trace', nor does it provide context about appropriate use cases or prerequisites for sending metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_traceA
Send one or more spans to the targeted endpoints.
Each span dict accepts: name, kind (internal/server/client/producer/
consumer), attributes, duration_ms, status (ok/error/unset),
status_message, events (list of {name, attributes}),
parent_name (to nest spans within the same batch).
If endpoints is omitted, fans out to every endpoint that accepts traces.
| Name | Required | Description | Default |
|---|---|---|---|
| service_name | Yes | ||
| spans | Yes | ||
| resource_attributes | No | ||
| endpoints | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It describes the fan-out behavior when endpoints are omitted, which is useful. However, it lacks details on permissions, rate limits, error handling, or what the output schema might contain, leaving gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, followed by key details in a logical flow. Each sentence adds value without redundancy, making it efficient and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 0% schema coverage, but an output schema exists, the description is moderately complete. It covers the core action and span structure but misses details on parameters like 'service_name', mutation implications, or integration with sibling tools, leaving room for improvement in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the structure of 'spans' (e.g., fields like 'name', 'kind', 'attributes') and the optional 'endpoints' behavior, adding significant meaning beyond the bare schema. It doesn't cover 'service_name' or 'resource_attributes' in detail, but provides enough context for core usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send') and resource ('spans to targeted endpoints'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'send_log' or 'send_metric' beyond mentioning 'traces' in the context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for sending trace data to endpoints, with a note about default behavior when 'endpoints' is omitted. It doesn't provide explicit guidance on when to use this vs. alternatives like 'send_log' or 'send_metric', nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusA
Report configured endpoints and available profiles.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only operation ('report'), which is safe, but doesn't disclose behavioral traits like response format, potential errors, or performance characteristics. The description adds minimal context beyond the basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the purpose with no wasted words. It's appropriately sized for a simple tool with no parameters, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no annotations, but has an output schema), the description is reasonably complete. It states what the tool does, and the output schema will handle return values. However, it lacks usage guidance and behavioral context, which are minor gaps for a read-only reporting tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a baseline score of 4 for not adding unnecessary information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with the verb 'report' and specifies the resources ('configured endpoints and available profiles'). It distinguishes from siblings like 'list_endpoints' and 'list_mimic_profiles' by reporting both in one operation, but doesn't explicitly contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_endpoints' or 'list_mimic_profiles'. It doesn't mention prerequisites, timing, or exclusions, leaving the agent to infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v0.1.0- First observed
add_endpoint - First observed
clear_endpoints - First observed
generate_load - First observed
list_endpoints - First observed
list_mimic_profiles - First observed
mimic_tool - First observed
remove_endpoint - First observed
send_log - First observed
send_metric - First observed
send_trace - First observed
status
TDQS
Scored across 11 tools
Every tool has a clearly distinct purpose with no ambiguity. Tools like add_endpoint, remove_endpoint, and clear_endpoints handle endpoint management, while send_log, send_metric, and send_trace target specific telemetry signals. Mimic_tool and generate_load are for simulation, and list_endpoints/list_mimic_profiles/status are for querying, all with non-overlapping functions.
All tool names follow a consistent verb_noun pattern using snake_case, such as add_endpoint, list_endpoints, send_log, and mimic_tool. This uniformity makes the set predictable and easy to understand, with no deviations in naming conventions.
With 11 tools, this server is well-scoped for OpenTelemetry management and simulation. It covers endpoint configuration, telemetry emission, mimicry, and status reporting without being overly sparse or bloated, with each tool serving a clear and necessary role.
The tool set provides complete coverage for the OpenTelemetry domain, including CRUD operations for endpoints (add, remove, clear, list), sending all signal types (logs, metrics, traces), simulation capabilities (mimic, generate_load), and querying (status, list profiles). There are no obvious gaps that would hinder agent workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
Cloud hosted Okahu MCP server that helps you manage genAI trace data
MCP server for progressive tool usage at any scale (see https://klavis.ai)
- ArcjetOAuthcom.arcjet
An MCP server for Arcjet - the runtime security platform that ships with your AI code.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server implementation that enables dynamic configuration of OpenTelemetry Collectors, allowing users to add, remove, and configure receivers, processors, and exporters through MCP tools.1252GPL 3.0
- AlicenseBqualityDmaintenanceA mock MCP server for testing MCP client implementations and development workflows. Supports tools, prompts, and resources across multiple transport protocols (stdio, HTTP, SSE).1MIT
- AlicenseBqualityCmaintenanceMCP server for analyzing OpenTelemetry traces with performance and error diagnosis, supporting loading from files, AWS X-Ray, and CloudWatch.8MIT
- AlicenseAqualityDmaintenanceMCP server that gives AI agents access to your application's OpenTelemetry traces for querying, analysis, and debugging.5122MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/michigan-public-tech-org/otel_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server