Tusk Drift MCP
The Tusk Drift MCP server enables AI assistants to search, analyze, and debug API traffic data captured by Tusk Drift, including HTTP requests, database queries, and distributed traces.
Core Capabilities:
Search and Filter API Traffic (
query_spans) - Find specific API calls using flexible criteria like endpoint names, HTTP methods, status codes, duration, errors, and custom JSON path filters with pagination supportGet Schema Information (
get_schema) - Understand available fields and structure for different instrumentation types (HTTP, database, gRPC, etc.) with example payloadsDiscover Available Data (
list_distinct_values) - List unique and frequently occurring values for fields like endpoints, instrumentation packages, environments, status codes, and JSONB values to assist in query buildingCalculate Aggregated Metrics (
aggregate_spans) - Compute statistics including latency percentiles (p50, p95, p99), error rates, request counts, performance comparisons across endpoints or environments, and time-series trends (hourly, daily, weekly)View Distributed Traces (
get_trace) - Retrieve complete end-to-end traces as hierarchical trees showing the full call chain, timings, and dependencies to identify bottlenecksFetch Specific Spans (
get_spans_by_ids) - Get detailed information and full request/response payloads for individual span recordings by ID
Common Use Cases: Debug failed or slow API requests, analyze endpoint performance patterns, track errors across distributed systems, understand API traffic and usage patterns, monitor database query performance, and investigate specific requests end-to-end.
Setup: Connect via remote server (recommended) or local installation with API key authentication. Supports multiple AI assistants including Cursor and Claude Desktop with easy configuration.
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., "@Tusk Drift MCPshow me the slowest API endpoints from the last hour"
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.
Tusk Drift MCP
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
Option 1: Remote MCP Server (Recommended)
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 |
| Yes | Your API token |
| No | Backend base URL (defaults to |
| No | Service ID (auto-discovered from |
| No | Comma-separated workspace roots to search for |
Related MCP server: Shepherd MCP
Available Tools
Tool | Description |
| Search API traffic with flexible filters |
| Get structure/schema of captured traffic |
| Discover available endpoints and field values |
| Calculate latency percentiles, error rates, counts |
| View distributed traces as hierarchical trees |
| Fetch specific spans with full payloads |
Support
Need help? Open an issue or contact us at support@usetusk.ai.
License
Available Tools
6 toolsaggregate_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"]
| Name | Required | Description | Default |
|---|---|---|---|
| observableServiceId | No | Service ID to query (required if multiple services available) | |
| where | No | Filter conditions | |
| groupBy | No | Fields to group by | |
| metrics | Yes | Metrics to calculate | |
| timeBucket | No | Time bucket for time-series data | |
| orderBy | No | Order by metric | |
| limit | No | Max results |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| observableServiceId | No | Service ID to query (required if multiple services available) | |
| packageName | No | Package name (e.g., 'http', 'pg', 'fetch') | |
| instrumentationName | No | Instrumentation name | |
| name | No | Span name to filter by | |
| showExample | No | Include an example span | |
| maxPayloadLength | No | Truncate example payload strings |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| observableServiceId | No | Service ID to query (required if multiple services available) | |
| ids | Yes | Span recording IDs to fetch | |
| fields | No | Specific fields to return | |
| includePayloads | No | Include inputValue/outputValue | |
| maxPayloadLength | No | Truncate payload strings |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| observableServiceId | No | Service ID to query (required if multiple services available) | |
| traceId | Yes | Trace ID to fetch | |
| includePayloads | No | Include inputValue/outputValue | |
| maxPayloadLength | No | Truncate payload strings |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| observableServiceId | No | Service ID to query (required if multiple services available) | |
| field | Yes | Field to get distinct values for (e.g., 'name', 'packageName', 'outputValue.statusCode') | |
| where | No | Filter conditions | |
| limit | No | Max distinct values to return |
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 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.
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.
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.
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.
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.
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" }]
| Name | Required | Description | Default |
|---|---|---|---|
| observableServiceId | No | Service ID to query (required if multiple services available) | |
| where | No | Recursive span filter clause | |
| orderBy | No | Ordering | |
| limit | No | Max results to return | |
| offset | No | Pagination offset | |
| includePayloads | No | Include full inputValue/outputValue (verbose) | |
| maxPayloadLength | No | Truncate payload strings to this length |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v0.1.3- Changed
aggregate_spans23 fields changed- removed
Input schema / properties / groupBy / items / enumRemoved value: -[ - "name", - "packageName", - "instrumentationName", - "environment", - "statusCode" -] - removed
Input schema / properties / groupBy / items / typeRemoved value: -"string" - removed
Input schema / properties / metrics / items / enumRemoved value: -[ - "count", - "errorCount", - "errorRate", - "avgDuration", - "minDuration", - "maxDuration", - "p50Duration", - "p95Duration", - "p99Duration" -] - removed
Input schema / properties / metrics / items / typeRemoved value: -"string" - removed
Input schema / properties / orderBy / properties / direction / enumRemoved value: -[ - "ASC", - "DESC" -] - removed
Input schema / properties / orderBy / properties / direction / typeRemoved value: -"string" - removed
Input schema / properties / orderBy / properties / metric / typeRemoved value: -"string" - removed
Input schema / properties / timeBucket / enumRemoved value: -[ - "hour", - "day", - "week" -] - removed
Input schema / properties / timeBucket / typeRemoved value: -"string" - removed
Input schema / properties / where / properties / ANDRemoved value: -{ - "items": { - "$ref": "#/properties/where" - }, - "type": "array" -} - removed
Input schema / properties / where / properties / ORRemoved value: -{ - "items": { - "$ref": "#/properties/where" - }, - "type": "array" -} - added
Input schema / properties / where / properties / andAdded value: +{ + "default": [], + "items": { + "$ref": "#/properties/where" + }, + "type": "array" +} - removed
Input schema / properties / where / properties / durationRemoved value: -{ - "additionalProperties": false, - "properties": { - "eq": { - "type": "number" - }, - "gt": { - "type": "number" - }, - "gte": { - "type": "number" - }, - "lt": { - "type": "number" - }, - "lte": { - "type": "number" - }, - "neq": { - "type": "number" - } - }, - "type": "object" -} - removed
Input schema / properties / where / properties / environmentRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - added
Input schema / properties / where / properties / fieldsAdded 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" +} - removed
Input schema / properties / where / properties / instrumentationNameRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - removed
Input schema / properties / where / properties / isRootSpanRemoved value: -{ - "additionalProperties": false, - "properties": { - "eq": { - "type": "boolean" - } - }, - "required": [ - "eq" - ], - "type": "object" -} - removed
Input schema / properties / where / properties / nameRemoved 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" -} - added
Input schema / properties / where / properties / notAdded value: +{ + "$ref": "#/properties/where" +} - added
Input schema / properties / where / properties / orAdded value: +{ + "default": [], + "items": { + "$ref": "#/properties/where" + }, + "type": "array" +} - removed
Input schema / properties / where / properties / packageNameRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - removed
Input schema / properties / where / properties / spanIdRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - removed
Input schema / properties / where / properties / traceIdRemoved value: -{ - "$ref": "#/properties/where/properties/name" -}
- Changed
get_spans_by_ids1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "description": "Specific fields to return", + "items": {}, + "type": "array" +}
- Changed
list_distinct_values15 fields changed- removed
Input schema / properties / jsonbFiltersRemoved 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" -} - removed
Input schema / properties / where / properties / ANDRemoved value: -{ - "items": { - "$ref": "#/properties/where" - }, - "type": "array" -} - removed
Input schema / properties / where / properties / ORRemoved value: -{ - "items": { - "$ref": "#/properties/where" - }, - "type": "array" -} - added
Input schema / properties / where / properties / andAdded value: +{ + "default": [], + "items": { + "$ref": "#/properties/where" + }, + "type": "array" +} - removed
Input schema / properties / where / properties / durationRemoved value: -{ - "additionalProperties": false, - "properties": { - "eq": { - "type": "number" - }, - "gt": { - "type": "number" - }, - "gte": { - "type": "number" - }, - "lt": { - "type": "number" - }, - "lte": { - "type": "number" - }, - "neq": { - "type": "number" - } - }, - "type": "object" -} - removed
Input schema / properties / where / properties / environmentRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - added
Input schema / properties / where / properties / fieldsAdded 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" +} - removed
Input schema / properties / where / properties / instrumentationNameRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - removed
Input schema / properties / where / properties / isRootSpanRemoved value: -{ - "additionalProperties": false, - "properties": { - "eq": { - "type": "boolean" - } - }, - "required": [ - "eq" - ], - "type": "object" -} - removed
Input schema / properties / where / properties / nameRemoved 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" -} - added
Input schema / properties / where / properties / notAdded value: +{ + "$ref": "#/properties/where" +} - added
Input schema / properties / where / properties / orAdded value: +{ + "default": [], + "items": { + "$ref": "#/properties/where" + }, + "type": "array" +} - removed
Input schema / properties / where / properties / packageNameRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - removed
Input schema / properties / where / properties / spanIdRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - removed
Input schema / properties / where / properties / traceIdRemoved value: -{ - "$ref": "#/properties/where/properties/name" -}
- Changed
query_spans22 fields changed- removed
Input schema / properties / includeInputOutputRemoved value: -{ - "default": false, - "description": "Include full inputValue/outputValue (verbose)", - "type": "boolean" -} - added
Input schema / properties / includePayloadsAdded value: +{ + "default": false, + "description": "Include full inputValue/outputValue (verbose)", + "type": "boolean" +} - removed
Input schema / properties / jsonbFiltersRemoved 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" -} - removed
Input schema / properties / orderBy / items / properties / direction / enumRemoved value: -[ - "ASC", - "DESC" -] - removed
Input schema / properties / orderBy / items / properties / direction / typeRemoved value: -"string" - removed
Input schema / properties / orderBy / items / properties / field / enumRemoved value: -[ - "timestamp", - "duration", - "name" -] - removed
Input schema / properties / orderBy / items / properties / field / typeRemoved value: -"string" - changed
Input schema / properties / where / descriptionPrevious value: -"Filter conditions for spans"New value: +"Recursive span filter clause" - removed
Input schema / properties / where / properties / ANDRemoved value: -{ - "items": { - "$ref": "#/properties/where" - }, - "type": "array" -} - removed
Input schema / properties / where / properties / ORRemoved value: -{ - "items": { - "$ref": "#/properties/where" - }, - "type": "array" -} - added
Input schema / properties / where / properties / andAdded value: +{ + "default": [], + "items": { + "$ref": "#/properties/where" + }, + "type": "array" +} - removed
Input schema / properties / where / properties / durationRemoved value: -{ - "additionalProperties": false, - "properties": { - "eq": { - "type": "number" - }, - "gt": { - "type": "number" - }, - "gte": { - "type": "number" - }, - "lt": { - "type": "number" - }, - "lte": { - "type": "number" - }, - "neq": { - "type": "number" - } - }, - "type": "object" -} - removed
Input schema / properties / where / properties / environmentRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - added
Input schema / properties / where / properties / fieldsAdded 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" +} - removed
Input schema / properties / where / properties / instrumentationNameRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - removed
Input schema / properties / where / properties / isRootSpanRemoved value: -{ - "additionalProperties": false, - "properties": { - "eq": { - "type": "boolean" - } - }, - "required": [ - "eq" - ], - "type": "object" -} - removed
Input schema / properties / where / properties / nameRemoved 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" -} - added
Input schema / properties / where / properties / notAdded value: +{ + "$ref": "#/properties/where" +} - added
Input schema / properties / where / properties / orAdded value: +{ + "default": [], + "items": { + "$ref": "#/properties/where" + }, + "type": "array" +} - removed
Input schema / properties / where / properties / packageNameRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - removed
Input schema / properties / where / properties / spanIdRemoved value: -{ - "$ref": "#/properties/where/properties/name" -} - removed
Input schema / properties / where / properties / traceIdRemoved value: -{ - "$ref": "#/properties/where/properties/name" -}
6 tool updates
v1.0.0- First observed
aggregate_spans - First observed
get_schema - First observed
get_spans_by_ids - First observed
get_trace - First observed
list_distinct_values - First observed
query_spans
TDQS
Each tool serves a clear, distinct purpose: aggregation, schema discovery, span detail retrieval, trace tree, field value exploration, and search. No overlap in functionality.
All tool names follow a consistent verb_noun pattern with underscores (e.g., aggregate_spans, list_distinct_values, query_spans). No mixing of styles.
6 tools is well-scoped for a telemetry/observability server, covering all necessary operations without being overwhelming or too sparse.
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
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
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
- SuperlogOAuthsh.superlog
Open-source agent that observes and fixes your application. Query logs, traces, metrics, incidents.
AI agent observability for production traces, natural-language insights, and improvement loops.
Query application logs, traces, and metrics from your AI coding assistant via Foam's MCP server.
Related MCP Servers
AlicenseAqualityBmaintenanceEnables 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.1330MIT- AlicenseBqualityDmaintenanceEnables 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.18MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.1614MIT
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/Use-Tusk/drift-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server