Skip to main content
Glama
Use-Tusk
by Use-Tusk

Tusk Drift MCP

npm version

An MCP server for querying API traffic data captured by Tusk Drift. This enables AI assistants to search, analyze, and debug your application's API traffic, including HTTP requests, database queries, and distributed traces.

New to Tusk Drift? Check out our docs and sign up for an account.

Setup

Connect directly to the hosted Tusk Drift MCP server. This is the easiest setup and doesn't require running anything locally.

For Cursor:

Add to your Cursor MCP settings (~/.cursor/mcp.json or workspace .cursor/mcp.json):

{
  "mcpServers": {
    "tusk-drift": {
      "url": "https://api.usetusk.ai/api/drift-mcp",
      "headers": {
        "x-api-key": "YOUR_TUSK_API_KEY"
      }
    }
  }
}

For Claude Code:

Option A — CLI command:

claude mcp add --transport http tusk-drift https://api.usetusk.ai/api/drift-mcp \
  --header "x-api-key: YOUR_TUSK_API_KEY"

Option B — Add to .mcp.json in your project root:

{
  "mcpServers": {
    "tusk-drift": {
      "type": "http",
      "url": "https://api.usetusk.ai/api/drift-mcp",
      "headers": {
        "x-api-key": "YOUR_TUSK_API_KEY"
      }
    }
  }
}

For Claude Desktop:

{
  "mcpServers": {
    "tusk-drift": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.usetusk.ai/api/drift-mcp"],
      "env": {
        "MCP_HEADERS": "{\"x-api-key\": \"YOUR_TUSK_API_KEY\"}"
      }
    }
  }
}

Option 2: Local Installation (via NPX)

Run the MCP server locally. This is useful if you need offline access or custom configuration.

For Claude Desktop / Cursor:

Add to your claude_desktop_config.json or Cursor MCP settings:

{
  "mcpServers": {
    "tusk-drift": {
      "command": "npx",
      "args": ["-y", "@use-tusk/drift-mcp"],
      "env": {
        "TUSK_API_KEY": "YOUR_TUSK_API_KEY"
      }
    }
  }
}

Configuration (env vars for local installation)

Variable

Required

Description

TUSK_API_KEY

Yes

Your API token

TUSK_DRIFT_API_URL

No

Backend base URL (defaults to https://api.usetusk.ai). Use origins like https://api.usetusk.ai or http://localhost:8000, not /api/drift-mcp.

TUSK_DRIFT_SERVICE_ID

No

Service ID (auto-discovered from .tusk/config.yaml if not set)

TUSK_WORKSPACE_ROOTS

No

Comma-separated workspace roots to search for .tusk/config.yaml files when auto-discovering services

Related MCP server: Shepherd MCP

Available Tools

Tool

Description

query_spans

Search API traffic with flexible filters

get_schema

Get structure/schema of captured traffic

list_distinct_values

Discover available endpoints and field values

aggregate_spans

Calculate latency percentiles, error rates, counts

get_trace

View distributed traces as hierarchical trees

get_spans_by_ids

Fetch specific spans with full payloads

Support

Need help? Open an issue or contact us at support@usetusk.ai.

License

MIT

Available Tools

6 tools
aggregate_spansA

Calculate aggregated metrics and statistics across spans.

Use this tool to:

  • Get latency percentiles for endpoints (p50, p95, p99)

  • Calculate error rates by endpoint

  • Get request counts over time

  • Compare performance across environments

Examples:

  • Endpoint latency: groupBy = ["name"], metrics = ["count", "avgDuration", "p95Duration"]

  • Error rates: groupBy = ["name"], metrics = ["count", "errorCount", "errorRate"]

  • Hourly trends: timeBucket = "hour", metrics = ["count", "errorRate"]

ParametersJSON Schema
NameRequiredDescriptionDefault
observableServiceIdNoService ID to query (required if multiple services available)
whereNoFilter conditions
groupByNoFields to group by
metricsYesMetrics to calculate
timeBucketNoTime bucket for time-series data
orderByNoOrder by metric
limitNoMax results

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility. It does not disclose any behavioral traits such as read-only nature, pagination, limits on results (though limit parameter exists), or potential performance implications. The description focuses on capabilities rather than behaviors or constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at around 100 words, with a clear structure: primary purpose sentence, bulleted use cases, and code examples. Every sentence adds value with no redundancy. It is front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 7 parameters and no output schema, the description only covers groupBy, metrics, and timeBucket in examples. It omits explanation for parameters like where, orderBy, limit, and doesn't describe the return format. The tool is complex and the description leaves gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, but schema descriptions are minimal (e.g., 'Fields to group by'). The description adds significant value with concrete examples showing how to use groupBy and metrics together (e.g., groupBy = ['name'], metrics = ['count', 'avgDuration', 'p95Duration']), and includes use of timeBucket for time-series data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Calculate aggregated metrics and statistics across spans' and provides examples of specific outputs (latency percentiles, error rates, request counts). It distinguishes itself from sibling tools like query_spans or get_trace by focusing on aggregation rather than raw data retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists explicit use cases with bullet points ('Get latency percentiles', 'Calculate error rates', etc.), guiding the agent on appropriate scenarios. It does not explicitly state when not to use or name alternatives, but the context of siblings implies that raw span queries should use other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_schemaA

Get schema and structure information for span recordings on Tusk Drift.

Use this tool to:

  • Understand what fields are available for a specific instrumentation type

  • See example payloads for HTTP requests, database queries, etc.

  • Learn what to filter on before querying spans

Common package names:

  • http: Incoming HTTP requests (has statusCode, method, url, headers)

  • fetch: Outgoing HTTP calls

  • pg: PostgreSQL queries (has db.statement, db.name)

  • grpc: gRPC calls

  • express: Express.js middleware spans

ParametersJSON Schema
NameRequiredDescriptionDefault
observableServiceIdNoService ID to query (required if multiple services available)
packageNameNoPackage name (e.g., 'http', 'pg', 'fetch')
instrumentationNameNoInstrumentation name
nameNoSpan name to filter by
showExampleNoInclude an example span
maxPayloadLengthNoTruncate example payload strings

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It describes the tool as returning schema information and examples, implying a read-only operation. However, it does not explicitly state non-destructiveness, auth requirements, or rate limits. The description is adequate but lacks explicit behavioral guarantees.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with about 10 sentences, well-structured with a clear opening statement, bullet points for use cases, and a list of common packages. Every sentence adds value, and the length is appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters and no output schema, the description is quite complete: it explains the purpose, use cases, common parameter values, and what the tool returns (schema info, examples). It could be improved by mentioning the format of the output or any limitations, but overall it provides sufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all 6 parameters with descriptions (100% coverage). The description adds value by listing common package names and their typical fields, which helps parameter selection. The schema descriptions are clear, so the description provides additional context rather than being essential for understanding parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get schema and structure information for span recordings on Tusk Drift.' It explains what the tool returns (fields, example payloads) and distinguishes it from sibling tools like query_spans and aggregate_spans by focusing on metadata rather than data retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly lists three use cases (understand available fields, see example payloads, learn what to filter on) and provides common package names with relevant fields. It does not explicitly mention when not to use or provide alternatives, but the use cases are clear and sufficient for most agents.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_spans_by_idsA

Fetch specific span recordings by their IDs.

Use this tool when you have span IDs from a previous query and need the full details including payloads.

This is useful for:

  • Getting full details for spans found via query_spans

  • Examining specific requests in detail

  • Comparing multiple specific spans

ParametersJSON Schema
NameRequiredDescriptionDefault
observableServiceIdNoService ID to query (required if multiple services available)
idsYesSpan recording IDs to fetch
fieldsNoSpecific fields to return
includePayloadsNoInclude inputValue/outputValue
maxPayloadLengthNoTruncate payload strings

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must bear full burden. It indicates fetching includes payloads, but does not disclose any side effects, permissions, or rate limits. For a read-only tool, this is acceptable but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences plus a bulleted list. No filler, all sentences are informative and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should compensate for return value details. It mentions 'full details including payloads' but not the structure or default fields. Adequate for a straightforward fetch tool but leaves some ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with good parameter descriptions. The description adds context about 'full details including payloads' which complements the 'includePayloads' parameter, but does not significantly extend parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb-resource combination ('Fetch specific span recordings by their IDs') and distinguishes from sibling tool 'query_spans' by emphasizing retrieval via known IDs rather than searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use ('when you have span IDs from a previous query') and lists concrete use cases, providing clear guidance for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_traceA

Get all spans in a distributed trace as a hierarchical tree.

Use this tool to:

  • Debug a specific request end-to-end

  • See the full call chain from HTTP request to database queries

  • Understand timing and dependencies between spans

  • Identify bottlenecks in a request

First use query_spans to find spans, then use the traceId to get the full trace.

ParametersJSON Schema
NameRequiredDescriptionDefault
observableServiceIdNoService ID to query (required if multiple services available)
traceIdYesTrace ID to fetch
includePayloadsNoInclude inputValue/outputValue
maxPayloadLengthNoTruncate payload strings

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. Clearly states it returns a hierarchical tree of spans, indicating read-only behavior. Does not mention side effects, authorization, or rate limits, but main behavioral traits are transparent. Schema covers parameter details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is structured with bullet-pointed use cases and clear workflow. It is reasonably concise, though could be slightly more streamlined. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four parameters and no output schema, description provides good contextual completeness: explains purpose, use cases, prerequisite sibling tool, and parameter implications. Lacks details about return format beyond 'hierarchical tree', but sufficient for selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with per-parameter descriptions. Description adds overall context (e.g., uses traceId to fetch full trace) but does not enhance individual parameter semantics beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it retrieves all spans in a distributed trace as a hierarchical tree, distinguishing it from sibling tools like query_spans. The verb 'get' and specific resource 'spans' with shape 'hierarchical tree' provide exact purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states to use query_spans first to find spans, then use traceId. Lists clear use cases: debug end-to-end, see call chain, understand timing, identify bottlenecks. Provides workflow and context for when to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_distinct_valuesA

List unique values for a field, ordered by frequency.

Use this tool to:

  • Discover available endpoints (field: "name")

  • See all instrumentation packages in use (field: "packageName")

  • Find unique environments (field: "environment")

  • Explore JSONB values like status codes (field: "outputValue.statusCode")

This helps you understand what values exist before building specific queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
observableServiceIdNoService ID to query (required if multiple services available)
fieldYesField to get distinct values for (e.g., 'name', 'packageName', 'outputValue.statusCode')
whereNoFilter conditions
limitNoMax distinct values to return

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It correctly indicates read-only behavior and ordering by frequency. However, it omits details like output format (e.g., whether counts are included) and any constraints on field selection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear opening sentence followed by bullet-pointed use cases. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description provides good usage examples, it is incomplete regarding output format (no output schema) and does not explain the structure of the returned data. For a data exploration tool, this is a notable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by providing concrete examples for the 'field' parameter (name, packageName, environment, outputValue.statusCode), explaining its purpose beyond the schema. No significant additional detail for other parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List unique values for a field, ordered by frequency' and provides concrete use cases (discovering endpoints, instrumentation packages, environments, JSONB values). This distinguishes it from sibling tools like query_spans or aggregate_spans.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly lists when to use the tool (e.g., discovering available endpoints) and implies usage before building specific queries. However, it does not name alternative tools for different scenarios, leaving a slight gap in guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_spansA

Search and filter API traffic span recordings.

Use this tool to:

  • Find specific API calls by endpoint name, HTTP method, or status code

  • Search for errors or slow requests

  • Get recent traffic for a specific endpoint

  • Debug specific API calls

Examples:

  • Find failed requests: where = { fields: { "outputValue.statusCode": { gte: 400, access: { castAs: "int" } } } }

  • Find slow requests: where = { fields: { duration: { gt: 1000 } } }

  • Recent traffic for endpoint: where = { fields: { name: { eq: "/api/orders" } } }, limit = 10, orderBy = [{ field: "timestamp", direction: "DESC" }]

ParametersJSON Schema
NameRequiredDescriptionDefault
observableServiceIdNoService ID to query (required if multiple services available)
whereNoRecursive span filter clause
orderByNoOrdering
limitNoMax results to return
offsetNoPagination offset
includePayloadsNoInclude full inputValue/outputValue (verbose)
maxPayloadLengthNoTruncate payload strings to this length

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavior. It implies read-only by describing search/filter actions, but does not explicitly mention safety or side effects. The examples show querying, but pagination and performance are not discussed. Adequate but not fully comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is clear and well-structured with a purpose statement, use cases, and examples. It is relatively long but each part is useful. It could be slightly more concise without the examples, but the examples provide significant value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (nested 'where' clause, 7 parameters, no output schema), the description covers common scenarios and parameter usage well. It does not explain return format, but the examples hint at output fields. Adequate for most use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. The description adds concrete examples for the 'where' clause, showing how to filter by status, duration, and endpoint name. This adds practical meaning beyond the schema definitions, earning a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search and filter API traffic span recordings' and provides specific use cases (find by endpoint, errors, slow requests, recent traffic). It distinguishes itself from siblings like aggregate_spans and get_spans_by_ids by focusing on general filtering and searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists explicit use cases with examples, providing clear guidance on when to use the tool. However, it does not explicitly state when not to use it or compare with alternatives, though the sibling context makes it clear.

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.

  1. 4 tool updatesv0.1.3
    • Changedaggregate_spans23 fields changed
      • removedInput schema / properties / groupBy / items / enum
        Removed value: -[
        -  "name",
        -  "packageName",
        -  "instrumentationName",
        -  "environment",
        -  "statusCode"
        -]
      • removedInput schema / properties / groupBy / items / type
        Removed value: -"string"
      • removedInput schema / properties / metrics / items / enum
        Removed value: -[
        -  "count",
        -  "errorCount",
        -  "errorRate",
        -  "avgDuration",
        -  "minDuration",
        -  "maxDuration",
        -  "p50Duration",
        -  "p95Duration",
        -  "p99Duration"
        -]
      • removedInput schema / properties / metrics / items / type
        Removed value: -"string"
      • removedInput schema / properties / orderBy / properties / direction / enum
        Removed value: -[
        -  "ASC",
        -  "DESC"
        -]
      • removedInput schema / properties / orderBy / properties / direction / type
        Removed value: -"string"
      • removedInput schema / properties / orderBy / properties / metric / type
        Removed value: -"string"
      • removedInput schema / properties / timeBucket / enum
        Removed value: -[
        -  "hour",
        -  "day",
        -  "week"
        -]
      • removedInput schema / properties / timeBucket / type
        Removed value: -"string"
      • removedInput schema / properties / where / properties / AND
        Removed value: -{
        -  "items": {
        -    "$ref": "#/properties/where"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / where / properties / OR
        Removed value: -{
        -  "items": {
        -    "$ref": "#/properties/where"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / where / properties / and
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "$ref": "#/properties/where"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / where / properties / duration
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "eq": {
        -      "type": "number"
        -    },
        -    "gt": {
        -      "type": "number"
        -    },
        -    "gte": {
        -      "type": "number"
        -    },
        -    "lt": {
        -      "type": "number"
        -    },
        -    "lte": {
        -      "type": "number"
        -    },
        -    "neq": {
        -      "type": "number"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / properties / where / properties / environment
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • addedInput schema / properties / where / properties / fields
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "access": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "castAs": {},
        +          "decode": {},
        +          "thenPath": {
        +            "pattern": "^\\$",
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "betweenTimestamps": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "end": {
        +            "format": "date-time",
        +            "type": "string"
        +          },
        +          "start": {
        +            "format": "date-time",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end"
        +        ],
        +        "type": "object"
        +      },
        +      "contains": {
        +        "type": "string"
        +      },
        +      "endsWith": {
        +        "type": "string"
        +      },
        +      "eq": {
        +        "type": [
        +          "string",
        +          "number",
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "gt": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "gte": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "inValues": {
        +        "items": {
        +          "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +        },
        +        "type": "array"
        +      },
        +      "isNull": {
        +        "type": "boolean"
        +      },
        +      "lt": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "lte": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "neq": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "notInValues": {
        +        "items": {
        +          "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +        },
        +        "type": "array"
        +      },
        +      "startsWith": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "default": {},
        +  "type": "object"
        +}
      • removedInput schema / properties / where / properties / instrumentationName
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • removedInput schema / properties / where / properties / isRootSpan
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "eq": {
        -      "type": "boolean"
        -    }
        -  },
        -  "required": [
        -    "eq"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / properties / where / properties / name
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "contains": {
        -      "type": "string"
        -    },
        -    "endsWith": {
        -      "type": "string"
        -    },
        -    "eq": {
        -      "type": "string"
        -    },
        -    "in": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "neq": {
        -      "type": "string"
        -    },
        -    "startsWith": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / properties / where / properties / not
        Added value: +{
        +  "$ref": "#/properties/where"
        +}
      • addedInput schema / properties / where / properties / or
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "$ref": "#/properties/where"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / where / properties / packageName
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • removedInput schema / properties / where / properties / spanId
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • removedInput schema / properties / where / properties / traceId
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
    • Changedget_spans_by_ids1 field changed
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Specific fields to return",
        +  "items": {},
        +  "type": "array"
        +}
    • Changedlist_distinct_values15 fields changed
      • removedInput schema / properties / jsonbFilters
        Removed value: -{
        -  "description": "JSONB path filters",
        -  "items": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "castAs": {
        -        "enum": [
        -          "text",
        -          "int",
        -          "float",
        -          "boolean"
        -        ],
        -        "type": "string"
        -      },
        -      "column": {
        -        "enum": [
        -          "inputValue",
        -          "outputValue",
        -          "metadata",
        -          "status"
        -        ],
        -        "type": "string"
        -      },
        -      "contains": {
        -        "type": "string"
        -      },
        -      "decodeBase64": {
        -        "type": "boolean"
        -      },
        -      "endsWith": {
        -        "type": "string"
        -      },
        -      "eq": {
        -        "type": [
        -          "string",
        -          "number",
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "gt": {
        -        "type": "number"
        -      },
        -      "gte": {
        -        "type": "number"
        -      },
        -      "in": {
        -        "items": {
        -          "type": [
        -            "string",
        -            "number"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "isNull": {
        -        "type": "boolean"
        -      },
        -      "jsonPath": {
        -        "pattern": "^\\$",
        -        "type": "string"
        -      },
        -      "lt": {
        -        "type": "number"
        -      },
        -      "lte": {
        -        "type": "number"
        -      },
        -      "neq": {
        -        "type": [
        -          "string",
        -          "number",
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "startsWith": {
        -        "type": "string"
        -      },
        -      "thenPath": {
        -        "pattern": "^\\$",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "column",
        -      "jsonPath"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / where / properties / AND
        Removed value: -{
        -  "items": {
        -    "$ref": "#/properties/where"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / where / properties / OR
        Removed value: -{
        -  "items": {
        -    "$ref": "#/properties/where"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / where / properties / and
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "$ref": "#/properties/where"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / where / properties / duration
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "eq": {
        -      "type": "number"
        -    },
        -    "gt": {
        -      "type": "number"
        -    },
        -    "gte": {
        -      "type": "number"
        -    },
        -    "lt": {
        -      "type": "number"
        -    },
        -    "lte": {
        -      "type": "number"
        -    },
        -    "neq": {
        -      "type": "number"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / properties / where / properties / environment
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • addedInput schema / properties / where / properties / fields
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "access": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "castAs": {},
        +          "decode": {},
        +          "thenPath": {
        +            "pattern": "^\\$",
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "betweenTimestamps": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "end": {
        +            "format": "date-time",
        +            "type": "string"
        +          },
        +          "start": {
        +            "format": "date-time",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end"
        +        ],
        +        "type": "object"
        +      },
        +      "contains": {
        +        "type": "string"
        +      },
        +      "endsWith": {
        +        "type": "string"
        +      },
        +      "eq": {
        +        "type": [
        +          "string",
        +          "number",
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "gt": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "gte": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "inValues": {
        +        "items": {
        +          "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +        },
        +        "type": "array"
        +      },
        +      "isNull": {
        +        "type": "boolean"
        +      },
        +      "lt": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "lte": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "neq": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "notInValues": {
        +        "items": {
        +          "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +        },
        +        "type": "array"
        +      },
        +      "startsWith": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "default": {},
        +  "type": "object"
        +}
      • removedInput schema / properties / where / properties / instrumentationName
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • removedInput schema / properties / where / properties / isRootSpan
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "eq": {
        -      "type": "boolean"
        -    }
        -  },
        -  "required": [
        -    "eq"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / properties / where / properties / name
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "contains": {
        -      "type": "string"
        -    },
        -    "endsWith": {
        -      "type": "string"
        -    },
        -    "eq": {
        -      "type": "string"
        -    },
        -    "in": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "neq": {
        -      "type": "string"
        -    },
        -    "startsWith": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / properties / where / properties / not
        Added value: +{
        +  "$ref": "#/properties/where"
        +}
      • addedInput schema / properties / where / properties / or
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "$ref": "#/properties/where"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / where / properties / packageName
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • removedInput schema / properties / where / properties / spanId
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • removedInput schema / properties / where / properties / traceId
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
    • Changedquery_spans22 fields changed
      • removedInput schema / properties / includeInputOutput
        Removed value: -{
        -  "default": false,
        -  "description": "Include full inputValue/outputValue (verbose)",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / includePayloads
        Added value: +{
        +  "default": false,
        +  "description": "Include full inputValue/outputValue (verbose)",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / jsonbFilters
        Removed value: -{
        -  "description": "JSONB path filters for inputValue/outputValue",
        -  "items": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "castAs": {
        -        "enum": [
        -          "text",
        -          "int",
        -          "float",
        -          "boolean"
        -        ],
        -        "type": "string"
        -      },
        -      "column": {
        -        "enum": [
        -          "inputValue",
        -          "outputValue",
        -          "metadata",
        -          "status"
        -        ],
        -        "type": "string"
        -      },
        -      "contains": {
        -        "type": "string"
        -      },
        -      "decodeBase64": {
        -        "type": "boolean"
        -      },
        -      "endsWith": {
        -        "type": "string"
        -      },
        -      "eq": {
        -        "type": [
        -          "string",
        -          "number",
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "gt": {
        -        "type": "number"
        -      },
        -      "gte": {
        -        "type": "number"
        -      },
        -      "in": {
        -        "items": {
        -          "type": [
        -            "string",
        -            "number"
        -          ]
        -        },
        -        "type": "array"
        -      },
        -      "isNull": {
        -        "type": "boolean"
        -      },
        -      "jsonPath": {
        -        "pattern": "^\\$",
        -        "type": "string"
        -      },
        -      "lt": {
        -        "type": "number"
        -      },
        -      "lte": {
        -        "type": "number"
        -      },
        -      "neq": {
        -        "type": [
        -          "string",
        -          "number",
        -          "boolean",
        -          "null"
        -        ]
        -      },
        -      "startsWith": {
        -        "type": "string"
        -      },
        -      "thenPath": {
        -        "pattern": "^\\$",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "column",
        -      "jsonPath"
        -    ],
        -    "type": "object"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / orderBy / items / properties / direction / enum
        Removed value: -[
        -  "ASC",
        -  "DESC"
        -]
      • removedInput schema / properties / orderBy / items / properties / direction / type
        Removed value: -"string"
      • removedInput schema / properties / orderBy / items / properties / field / enum
        Removed value: -[
        -  "timestamp",
        -  "duration",
        -  "name"
        -]
      • removedInput schema / properties / orderBy / items / properties / field / type
        Removed value: -"string"
      • changedInput schema / properties / where / description
        Previous value: -"Filter conditions for spans"New value: +"Recursive span filter clause"
      • removedInput schema / properties / where / properties / AND
        Removed value: -{
        -  "items": {
        -    "$ref": "#/properties/where"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / properties / where / properties / OR
        Removed value: -{
        -  "items": {
        -    "$ref": "#/properties/where"
        -  },
        -  "type": "array"
        -}
      • addedInput schema / properties / where / properties / and
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "$ref": "#/properties/where"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / where / properties / duration
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "eq": {
        -      "type": "number"
        -    },
        -    "gt": {
        -      "type": "number"
        -    },
        -    "gte": {
        -      "type": "number"
        -    },
        -    "lt": {
        -      "type": "number"
        -    },
        -    "lte": {
        -      "type": "number"
        -    },
        -    "neq": {
        -      "type": "number"
        -    }
        -  },
        -  "type": "object"
        -}
      • removedInput schema / properties / where / properties / environment
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • addedInput schema / properties / where / properties / fields
        Added value: +{
        +  "additionalProperties": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "access": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "castAs": {},
        +          "decode": {},
        +          "thenPath": {
        +            "pattern": "^\\$",
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      },
        +      "betweenTimestamps": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "end": {
        +            "format": "date-time",
        +            "type": "string"
        +          },
        +          "start": {
        +            "format": "date-time",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "start",
        +          "end"
        +        ],
        +        "type": "object"
        +      },
        +      "contains": {
        +        "type": "string"
        +      },
        +      "endsWith": {
        +        "type": "string"
        +      },
        +      "eq": {
        +        "type": [
        +          "string",
        +          "number",
        +          "boolean",
        +          "null"
        +        ]
        +      },
        +      "gt": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "gte": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "inValues": {
        +        "items": {
        +          "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +        },
        +        "type": "array"
        +      },
        +      "isNull": {
        +        "type": "boolean"
        +      },
        +      "lt": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "lte": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "neq": {
        +        "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +      },
        +      "notInValues": {
        +        "items": {
        +          "$ref": "#/properties/where/properties/fields/additionalProperties/properties/eq"
        +        },
        +        "type": "array"
        +      },
        +      "startsWith": {
        +        "type": "string"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  "default": {},
        +  "type": "object"
        +}
      • removedInput schema / properties / where / properties / instrumentationName
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • removedInput schema / properties / where / properties / isRootSpan
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "eq": {
        -      "type": "boolean"
        -    }
        -  },
        -  "required": [
        -    "eq"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / properties / where / properties / name
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "contains": {
        -      "type": "string"
        -    },
        -    "endsWith": {
        -      "type": "string"
        -    },
        -    "eq": {
        -      "type": "string"
        -    },
        -    "in": {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    "neq": {
        -      "type": "string"
        -    },
        -    "startsWith": {
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / properties / where / properties / not
        Added value: +{
        +  "$ref": "#/properties/where"
        +}
      • addedInput schema / properties / where / properties / or
        Added value: +{
        +  "default": [],
        +  "items": {
        +    "$ref": "#/properties/where"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / properties / where / properties / packageName
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • removedInput schema / properties / where / properties / spanId
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
      • removedInput schema / properties / where / properties / traceId
        Removed value: -{
        -  "$ref": "#/properties/where/properties/name"
        -}
  2. 6 tool updatesv1.0.0
    • First observedaggregate_spans
    • First observedget_schema
    • First observedget_spans_by_ids
    • First observedget_trace
    • First observedlist_distinct_values
    • First observedquery_spans

TDQS

A4.3/5.0
Disambiguation5/5

Each tool serves a clear, distinct purpose: aggregation, schema discovery, span detail retrieval, trace tree, field value exploration, and search. No overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with underscores (e.g., aggregate_spans, list_distinct_values, query_spans). No mixing of styles.

Tool Count5/5

6 tools is well-scoped for a telemetry/observability server, covering all necessary operations without being overwhelming or too sparse.

Completeness5/5

The tool set covers querying, aggregation, trace retrieval, span details, schema exploration, and field value discovery. No obvious gaps for the domain of analyzing API traffic spans.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to access Scout Monitoring performance and error data through Scout's API. Provides traces, errors, metrics, and insights for Rails, Django, FastAPI, Laravel and other applications to help identify and fix performance issues like N+1 queries, slow endpoints, and memory bloat.
    13
    30
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to query and analyze AI agent sessions from observability providers like Shepherd (AIOBS) and Langfuse, allowing users to debug agent runs, compare sessions, track performance, and analyze LLM usage patterns.
    18
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query and fetch error and performance monitoring data from AppSignal through the Model Context Protocol. Supports searching and retrieving detailed information about application errors and performance samples with flexible filtering options.
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language querying and analysis of OpenTelemetry traces, metrics, and logs stored in Elasticsearch/OpenSearch, allowing AI assistants to investigate performance issues, find root causes, and explore system behavior.
    16
    14
    MIT

Latest Blog Posts

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/Use-Tusk/drift-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server