The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Introspect this connection: key type, the org and site it is scoped to (with names), and its granted scopes (mcp:read for reads, manage:write for write tools). Call this once at the start of a session to learn your permission envelope instead of discovering it by failed calls.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "whoami",
"title": "Who Am I",
"description": "Introspect this connection: key type, the org and site it is scoped to (with names), and its granted scopes (mcp:read for reads, manage:write for write tools). Call this once at the start of a session to learn your permission envelope instead of discovering it by failed calls.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Return the full Flusterduck MCP snapshot for a site: scores, open issues, active alerts, deploys, and recommendations. Start here for any investigation. Score fields: score is the baseline-normalized confusion score (0-100, higher = more confusion, dampened for tiny samples); raw_score is the pre-normalization weighted signal total; baseline 0 with deviation 0 means the page has no learned baseline yet.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_site_context",
"title": "Get Site Context",
"description": "Return the full Flusterduck MCP snapshot for a site: scores, open issues, active alerts, deploys, and recommendations. Start here for any investigation. Score fields: score is the baseline-normalized confusion score (0-100, higher = more confusion, dampened for tiny samples); raw_score is the pre-normalization weighted signal total; baseline 0 with deviation 0 means the page has no learned baseline yet.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Return current confusion scores for every tracked page, sorted by friction intensity. score is baseline-normalized (0-100, higher = more confusion, dampened for tiny samples); raw_score is the pre-normalization weighted signal total; baseline 0 with deviation 0 means the page has no learned baseline yet.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_scores",
"title": "Get Scores",
"description": "Return current confusion scores for every tracked page, sorted by friction intensity. score is baseline-normalized (0-100, higher = more confusion, dampened for tiny samples); raw_score is the pre-normalization weighted signal total; baseline 0 with deviation 0 means the page has no learned baseline yet.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Return the full context for one page: score history, active issues, element friction, deploys, annotations, and confusion budgets. Use after get_scores or get_site_context to drill into a specific page.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
page
Page path as tracked by Flusterduck, e.g. "/checkout". Get valid paths from get_scores.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_page",
"title": "Get Page",
"description": "Return the full context for one page: score history, active issues, element friction, deploys, annotations, and confusion budgets. Use after get_scores or get_site_context to drill into a specific page.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"page"
],
"properties": {
"page": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Page path as tracked by Flusterduck, e.g. \"/checkout\". Get valid paths from get_scores."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
Return element-level friction summaries: which buttons, forms, and links generate the most behavioral signals. Site-wide by default; pass page to scope to one page.
Describe the returned information so the agent knows whether it will answer the request.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
page
Optional page path, e.g. "/checkout". Omit for a site-wide element ranking.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_elements",
"title": "Get Elements",
"description": "Return element-level friction summaries: which buttons, forms, and links generate the most behavioral signals. Site-wide by default; pass page to scope to one page.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"page": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Optional page path, e.g. \"/checkout\". Omit for a site-wide element ranking."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Return UX issues for a site, newest activity first. Returns { issues, total, offset, limit } so you can page. Filter by status to focus on what needs attention (status "open" is the active inbox; "regressed" means a previously fixed issue came back).
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
status
Filter to one lifecycle status. Omit to get every status.
Clear enough to supply this argument.
limit
Max issues to return. Default 50, max 200.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
Rows to skip, for paging. Default 0.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_issues",
"title": "Get Issues",
"description": "Return UX issues for a site, newest activity first. Returns { issues, total, offset, limit } so you can page. Filter by status to focus on what needs attention (status \"open\" is the active inbox; \"regressed\" means a previously fixed issue came back).",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Max issues to return. Default 50, max 200."
},
"offset": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "Rows to skip, for paging. Default 0."
},
"status": {
"enum": [
"open",
"triaged",
"in_progress",
"verified",
"resolved",
"ignored",
"regressed"
],
"type": "string",
"description": "Filter to one lifecycle status. Omit to get every status."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Return one UX issue with full evidence, session links, verification history, and deploy correlation. Use after get_issues to drill into a specific issue.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
issue_id
Issue UUID from get_issues.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_issue",
"title": "Get Issue",
"description": "Return one UX issue with full evidence, session links, verification history, and deploy correlation. Use after get_issues to drill into a specific issue.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"issue_id"
],
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
},
"issue_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Issue UUID from get_issues."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Return active or historical alerts, newest first. Returns { alerts, total, offset, limit } so you can page. Status "fired" means nobody has looked yet; use it to find alerts needing attention.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
status
Filter to one alert status. Omit to get every status.
Clear enough to supply this argument.
limit
Max alerts to return. Default 50, max 200.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
offset
Rows to skip, for paging. Default 0.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_alerts",
"title": "Get Alerts",
"description": "Return active or historical alerts, newest first. Returns { alerts, total, offset, limit } so you can page. Status \"fired\" means nobody has looked yet; use it to find alerts needing attention.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Max alerts to return. Default 50, max 200."
},
"offset": {
"type": "integer",
"maximum": 100000,
"minimum": 0,
"description": "Rows to skip, for paging. Default 0."
},
"status": {
"enum": [
"fired",
"acknowledged",
"investigating",
"resolved"
],
"type": "string",
"description": "Filter to one alert status. Omit to get every status."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
List all alert rules configured for the site: trigger types, thresholds, channels, and enabled status. Call this before create_alert_rule or delete_alert_rule to see what already exists. Requires manage:write scope.
Describe the returned information so the agent knows whether it will answer the request.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "list_alert_rules",
"title": "List Alert Rules",
"description": "List all alert rules configured for the site: trigger types, thresholds, channels, and enabled status. Call this before create_alert_rule or delete_alert_rule to see what already exists. Requires manage:write scope.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Return the full event timeline for a specific session: every signal, click, scroll, and page view in order. Get session ids from explore (mode "list"), get_issue evidence, or query_raw_rows on the sessions table.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
session_id
Session id string (16-128 chars), as returned by explore, get_issue, or query_raw_rows. Not a UUID.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_session_detail",
"title": "Get Session Detail",
"description": "Return the full event timeline for a specific session: every signal, click, scroll, and page view in order. Get session ids from explore (mode \"list\"), get_issue evidence, or query_raw_rows on the sessions table.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"session_id"
],
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
},
"session_id": {
"type": "string",
"maxLength": 128,
"minLength": 16,
"description": "Session id string (16-128 chars), as returned by explore, get_issue, or query_raw_rows. Not a UUID."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description73/100
Return page-to-page flow edges from recent sessions, showing where users come from and where they go.
Describe the returned information so the agent knows whether it will answer the request.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
limit
Max flow edges to return. Default 1000, max 5000.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_flows",
"title": "Get Flows",
"description": "Return page-to-page flow edges from recent sessions, showing where users come from and where they go.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 5000,
"minimum": 1,
"description": "Max flow edges to return. Default 1000, max 5000."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Return confusion score history for a site or page. Use to spot regressions after deploys.
Describe the returned information so the agent knows whether it will answer the request.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
page
Optional page path, e.g. "/checkout". Omit for the site-wide trend.
Clear enough to supply this argument.
days
Window in days, 1-90. Default 7.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_trends",
"title": "Get Trends",
"description": "Return confusion score history for a site or page. Use to spot regressions after deploys.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days": {
"type": "integer",
"maximum": 90,
"minimum": 1,
"description": "Window in days, 1-90. Default 7."
},
"page": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Optional page path, e.g. \"/checkout\". Omit for the site-wide trend."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Return the confused-vs-calm conversion analysis: it splits the site's sessions into a "confused" cohort (produced at least one friction signal) and a "calm" cohort (zero friction), then compares conversion rate, session duration, pages per session, and bounce rate between them. Use it to state plainly how much less confused sessions convert (e.g. "confused sessions convert 12 points lower"), which pages and traffic sources bleed the most conversions to confusion, and the ranked insights. cohorts/deltas are the headline; by_page and by_source break the gap down; insights[] are pre-written narratable findings (check `confident` before quoting a number, and note low_confidence cohorts). What counts as a conversion comes from the site's configured conversion goal. Optional days (1-90, default 7).
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
days
Window in days, 1-90. Default 7.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_conversion_insights",
"title": "Get Conversion Insights",
"description": "Return the confused-vs-calm conversion analysis: it splits the site's sessions into a \"confused\" cohort (produced at least one friction signal) and a \"calm\" cohort (zero friction), then compares conversion rate, session duration, pages per session, and bounce rate between them. Use it to state plainly how much less confused sessions convert (e.g. \"confused sessions convert 12 points lower\"), which pages and traffic sources bleed the most conversions to confusion, and the ranked insights. cohorts/deltas are the headline; by_page and by_source break the gap down; insights[] are pre-written narratable findings (check `confident` before quoting a number, and note low_confidence cohorts). What counts as a conversion comes from the site's configured conversion goal. Optional days (1-90, default 7).",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"days": {
"type": "integer",
"maximum": 90,
"minimum": 1,
"description": "Window in days, 1-90. Default 7."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Return deploys known to Flusterduck for this site, including confusion_before/after scores for each.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_deploys",
"title": "Get Deploys",
"description": "Return deploys known to Flusterduck for this site, including confusion_before/after scores for each.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description65/100
Compare confusion score records side-by-side for two page paths.
Describe the returned information so the agent knows whether it will answer the request.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
a
First page path, e.g. "/checkout".
Clear enough to supply this argument.
b
Second page path, e.g. "/pricing".
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description72/100
Return prioritized fix recommendations ranked by estimated confusion reduction.
Describe the returned information so the agent knows whether it will answer the request.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description73/100
Return revenue impact estimates for active friction when conversion data is connected.
Describe the returned information so the agent knows whether it will answer the request.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_revenue_impact",
"title": "Get Revenue Impact",
"description": "Return revenue impact estimates for active friction when conversion data is connected.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description74/100
Return the full Flusterduck friction heuristic catalog: all signal types, thresholds, and scoring weights.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_heuristics",
"title": "Get Heuristics",
"description": "Return the full Flusterduck friction heuristic catalog: all signal types, thresholds, and scoring weights.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Return high-friction journey edges from recent sessions. Filter by signal type or minimum friction weight to focus on the worst paths.
Describe the returned information so the agent knows whether it will answer the request.
Inputs90/100
Explain what happens when this optional value is omitted.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
journey_id
Optional journey UUID to scope to one recorded journey.
Explain what happens when this optional value is omitted.
signal_type
Optional friction signal type, e.g. "rage_click" or "dead_click". get_heuristics lists every type.
Clear enough to supply this argument.
min_friction_weight
Minimum friction weight for an edge to count. Default 1.
Clear enough to supply this argument.
limit
Max edges to return. Default 250, max 1000.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "diagnose_journey_friction",
"title": "Diagnose Journey Friction",
"description": "Return high-friction journey edges from recent sessions. Filter by signal type or minimum friction weight to focus on the worst paths.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Max edges to return. Default 250, max 1000."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
},
"journey_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Optional journey UUID to scope to one recorded journey."
},
"signal_type": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Optional friction signal type, e.g. \"rage_click\" or \"dead_click\". get_heuristics lists every type."
},
"min_friction_weight": {
"type": "integer",
"maximum": 1000,
"minimum": 0,
"description": "Minimum friction weight for an edge to count. Default 1."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Return SQL-style raw rows from an allowlisted Flusterduck table, scoped to the authorized site. Default 100 rows sorted by the table's time column, newest first. Filters only apply where they make sense: event_type on events, signal_type on signals, status on ux_issues/alerts, session_id on events/signals/sessions.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
table
Which table to read: events, signals, sessions, page_scores, score_history, ux_issues, alerts, or deploys.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Max rows to return. Default 100, max 1000.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sort_by
Sort column; must be allowlisted for the table (the API answers 400 listing valid columns if not). Defaults to the table's time column, e.g. occurred_at for events and signals.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sort_dir
Sort direction: asc or desc. Default desc.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
page
Exact page path filter, e.g. "/checkout".
Clear enough to supply this argument.
since
Only rows at or after this ISO 8601 timestamp, e.g. "2026-07-01T00:00:00Z".
Clear enough to supply this argument.
until
Only rows at or before this ISO 8601 timestamp.
Clear enough to supply this argument.
event_type
events table only: filter by event type, e.g. "click", "pageview", "error".
Clear enough to supply this argument.
signal_type
signals table only: filter by friction signal type, e.g. "rage_click".
Name the specific action and subject instead of using a generic label such as ‘manage’ or ‘tool’.
Description93/100
Run a deterministic, typed query against a site's session data. No natural language, no LLM: a closed vocabulary the engine validates before touching a row, built explicitly so an agent can compose it directly. Give it a window (window_days, 1-90, default 7) and up to 12 AND-ed filters over a fixed field list: signal (a friction/heuristic type, e.g. "rage_click", "dead_click", "form_abandonment"), page (exact path, or substring with op "contains"), source (referrer/utm source, exact or "contains"), confused (boolean: session produced at least one friction signal), converted (boolean: session reached the site's configured conversion event), event_type (one of click, move, scroll, keyboard, form_focus, form_blur, form_submit, touch, navigation, error, signal, pageview, custom_signal, performance, visibility, sdk_error). Ops are is / is_not / contains. contains only makes sense for page and source; signal and the boolean fields only take is/is_not (contains is coerced to is for signal). Then choose exactly one output. {mode: "list", limit?, offset?} returns matching sessions (id, timing, pages visited, signal counts, source, confused/converted) ranked most-recent-first, limit 1-200 (default 50) with offset for paging: use it to pull concrete example sessions as evidence. Or {mode: "measure", metric, group_by?} computes metric ("count" | "avg_pageviews" | "conversion_rate" | "avg_dwell_ms" | "bounce_rate") as a single scalar, or as a series when group_by is set ("page" | "source" | "day" | "signal" | "cohort", where "cohort" splits confused vs. calm sessions). Example: "sessions that rage-clicked on /pricing in the last 7 days" -> filters: [{field:"page",op:"is",value:"/pricing"},{field:"signal",op:"is",value:"rage_click"}], output: {mode:"list"}. Example: "does confusion actually hurt conversion here?" -> output: {mode:"measure",metric:"conversion_rate",group_by:"cohort"}.
The description explains the capability, when to use it, and what to expect.
Inputs14/100
2 of 11 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
window_days
Window in days, 1-90. Default 7.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › items › field
Not provided
Missing description. Explain what this value means and how to supply it.
filters › items › op
Not provided
Missing description. Explain what this value means and how to supply it.
filters › items › value
Not provided
Missing description. Explain what this value means and how to supply it.
output › anyOf › 0 › mode
Not provided
Missing description. Explain what this value means and how to supply it.
output › anyOf › 0 › limit
Not provided
Missing description. Explain what this value means and how to supply it.
output › anyOf › 0 › offset
Not provided
Missing description. Explain what this value means and how to supply it.
output › anyOf › 1 › mode
Not provided
Missing description. Explain what this value means and how to supply it.
output › anyOf › 1 › metric
Not provided
Missing description. Explain what this value means and how to supply it.
output › anyOf › 1 › group_by
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "explore",
"title": "Explore",
"description": "Run a deterministic, typed query against a site's session data. No natural language, no LLM: a closed vocabulary the engine validates before touching a row, built explicitly so an agent can compose it directly. Give it a window (window_days, 1-90, default 7) and up to 12 AND-ed filters over a fixed field list: signal (a friction/heuristic type, e.g. \"rage_click\", \"dead_click\", \"form_abandonment\"), page (exact path, or substring with op \"contains\"), source (referrer/utm source, exact or \"contains\"), confused (boolean: session produced at least one friction signal), converted (boolean: session reached the site's configured conversion event), event_type (one of click, move, scroll, keyboard, form_focus, form_blur, form_submit, touch, navigation, error, signal, pageview, custom_signal, performance, visibility, sdk_error). Ops are is / is_not / contains. contains only makes sense for page and source; signal and the boolean fields only take is/is_not (contains is coerced to is for signal). Then choose exactly one output. {mode: \"list\", limit?, offset?} returns matching sessions (id, timing, pages visited, signal counts, source, confused/converted) ranked most-recent-first, limit 1-200 (default 50) with offset for paging: use it to pull concrete example sessions as evidence. Or {mode: \"measure\", metric, group_by?} computes metric (\"count\" | \"avg_pageviews\" | \"conversion_rate\" | \"avg_dwell_ms\" | \"bounce_rate\") as a single scalar, or as a series when group_by is set (\"page\" | \"source\" | \"day\" | \"signal\" | \"cohort\", where \"cohort\" splits confused vs. calm sessions). Example: \"sessions that rage-clicked on /pricing in the last 7 days\" -> filters: [{field:\"page\",op:\"is\",value:\"/pricing\"},{field:\"signal\",op:\"is\",value:\"rage_click\"}], output: {mode:\"list\"}. Example: \"does confusion actually hurt conversion here?\" -> output: {mode:\"measure\",metric:\"conversion_rate\",group_by:\"cohort\"}.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"output"
],
"properties": {
"output": {
"anyOf": [
{
"type": "object",
"required": [
"mode"
],
"properties": {
"mode": {
"type": "string",
"const": "list"
},
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1
},
"offset": {
"type": "integer",
"maximum": 100000,
"minimum": 0
}
}
},
{
"type": "object",
"required": [
"mode",
"metric"
],
"properties": {
"mode": {
"type": "string",
"const": "measure"
},
"metric": {
"enum": [
"count",
"avg_pageviews",
"conversion_rate",
"avg_dwell_ms",
"bounce_rate"
],
"type": "string"
},
"group_by": {
"enum": [
"page",
"source",
"day",
"signal",
"cohort"
],
"type": "string"
}
}
}
],
"description": "Exactly one output mode: {mode:\"list\"} for example sessions or {mode:\"measure\"} for a metric."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"op",
"value"
],
"properties": {
"op": {
"enum": [
"is",
"is_not",
"contains"
],
"type": "string"
},
"field": {
"enum": [
"signal",
"page",
"source",
"confused",
"converted",
"event_type"
],
"type": "string"
},
"value": {
"anyOf": [
{
"type": "string",
"maxLength": 200,
"minLength": 1
},
{
"type": "boolean"
}
]
}
}
},
"maxItems": 12,
"description": "Up to 12 AND-ed filters. Omit to match every session in the window."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
},
"window_days": {
"type": "integer",
"maximum": 90,
"minimum": 1,
"description": "Window in days, 1-90. Default 7."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Return a CSV export of raw event rows for the authorized site. The client can save the returned text as a .csv file. Default 1000 rows; narrow with page/since/until filters before raising the limit so the response stays manageable.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
limit
Max rows to export. Default 1000, max 10000.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sort_by
Sort column for the events table (occurred_at, received_at, page, event_type). Default occurred_at.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sort_dir
Sort direction: asc or desc. Default desc.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
page
Exact page path filter, e.g. "/checkout".
Clear enough to supply this argument.
since
Only events at or after this ISO 8601 timestamp.
Clear enough to supply this argument.
until
Only events at or before this ISO 8601 timestamp.
Clear enough to supply this argument.
event_type
Filter by event type, e.g. "click", "pageview", "error".
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
session_id
Scope the export to one session id.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "download_events_csv",
"title": "Download Events CSV",
"description": "Return a CSV export of raw event rows for the authorized site. The client can save the returned text as a .csv file. Default 1000 rows; narrow with page/since/until filters before raising the limit so the response stays manageable.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"page": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Exact page path filter, e.g. \"/checkout\"."
},
"limit": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Max rows to export. Default 1000, max 10000."
},
"since": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Only events at or after this ISO 8601 timestamp."
},
"until": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Only events at or before this ISO 8601 timestamp."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
},
"sort_by": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Sort column for the events table (occurred_at, received_at, page, event_type). Default occurred_at."
},
"sort_dir": {
"enum": [
"asc",
"desc"
],
"type": "string",
"description": "Sort direction: asc or desc. Default desc."
},
"event_type": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Filter by event type, e.g. \"click\", \"pageview\", \"error\"."
},
"session_id": {
"type": "string",
"maxLength": 128,
"minLength": 16,
"description": "Scope the export to one session id."
}
}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Return active and recent backend degradation events (operational health for ingest, scoring, and delivery). Check this when data looks stale or missing.
Describe the returned information so the agent knows whether it will answer the request.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "get_degradation",
"title": "Get Degradation",
"description": "Return active and recent backend degradation events (operational health for ingest, scoring, and delivery). Check this when data looks stale or missing.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
},
"annotations": {
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Update a UX issue: change its status (open/triaged/in_progress/verified/resolved/ignored), add a triage note, or set an assignee. Resolving or ignoring removes the issue from active triage views. Requires manage:write scope.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs90/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
issue_id
Issue UUID from get_issues.
Clear enough to supply this argument.
status
New lifecycle status. "regressed" is set by the engine and cannot be assigned manually.
Clear enough to supply this argument.
note
Triage note (max 1000 chars). Pass null to clear the existing note.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
assigned_to
Assignee name or handle (free text, max 256 chars). Pass null to unassign.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Send product feedback about Flusterduck itself to the Flusterduck team. Use kind "suggestion" for a missing capability, confusing tool output, or data you wished you had while working; use kind "bug" when a Flusterduck tool or surface misbehaved. Say which tool you were using, what you expected, and what happened. Requires manage:write scope.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
kind
"suggestion" for a missing capability or confusing output, "bug" for misbehavior.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
message
The feedback itself (max 4000 chars). Name the tool, what you expected, and what happened.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "send_feedback",
"title": "Send Feedback",
"description": "Send product feedback about Flusterduck itself to the Flusterduck team. Use kind \"suggestion\" for a missing capability, confusing tool output, or data you wished you had while working; use kind \"bug\" when a Flusterduck tool or surface misbehaved. Say which tool you were using, what you expected, and what happened. Requires manage:write scope.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"kind",
"message"
],
"properties": {
"kind": {
"enum": [
"suggestion",
"bug"
],
"type": "string",
"description": "\"suggestion\" for a missing capability or confusing output, \"bug\" for misbehavior."
},
"message": {
"type": "string",
"maxLength": 4000,
"minLength": 1,
"description": "The feedback itself (max 4000 chars). Name the tool, what you expected, and what happened."
}
}
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Acknowledge, mark as investigating, or resolve an alert. Resolving stops all channel delivery including PagerDuty. Optionally include a resolved_reason when closing. Requires manage:write scope.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
alert_id
Alert UUID from get_alerts.
Clear enough to supply this argument.
status
New status. Alerts start as "fired"; you cannot set an alert back to fired.
Clear enough to supply this argument.
resolved_reason
Why the alert is resolved (max 500 chars). Only used with status "resolved".
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Add a timeline annotation to the site to mark deploys, investigation findings, resolved incidents, or any notable event. Requires manage:write scope.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
message
The annotation text (max 1000 chars). It appears on the site timeline for the whole team.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "add_annotation",
"title": "Add Annotation",
"description": "Add a timeline annotation to the site to mark deploys, investigation findings, resolved incidents, or any notable event. Requires manage:write scope.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"message"
],
"properties": {
"message": {
"type": "string",
"maxLength": 1000,
"minLength": 1,
"description": "The annotation text (max 1000 chars). It appears on the site timeline for the whole team."
},
"site_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope."
}
}
},
"annotations": {
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
Create a new alert rule. Trigger types: spike (sudden confusion jump), anomaly (statistical deviation from baseline), new_page (a new page starts generating friction), trend (sustained drift), co_occurrence (many users confused at the same time), positive (score drops BELOW the threshold; fires on improvement), budget (confusion budget burn), revenue_threshold (estimated revenue at risk), stalled_signups (signup flow stalls). Omitted threshold and cooldown get sensible per-trigger defaults. Requires manage:write scope.
The description explains the capability, when to use it, and what to expect.
Inputs84/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site UUID. Optional when this connection is scoped to one site (the default for site-scoped keys); required when the connection is org-wide. whoami shows the scope.
Clear enough to supply this argument.
name
Human-readable rule name, e.g. "Checkout rage click spike".
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger_type
What condition fires the alert.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Update an existing alert rule: toggle enabled, change threshold, adjust channels, rename, or update page_pattern. Prefer this over delete_alert_rule when you want to temporarily silence a rule. Requires manage:write scope.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
rule_id
Rule UUID from list_alert_rules.
Clear enough to supply this argument.
name
New rule name.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
trigger_type
New trigger type. Changing it changes the threshold units.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Permanently delete an alert rule by ID. This cannot be undone; prefer update_alert_rule with enabled false to silence a rule temporarily. Requires manage:write scope.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
rule_id
Rule UUID from list_alert_rules.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
flusterduck setup, tools, quality score, publishing readiness, and alternatives.
How do I add flusterduck to Claude, ChatGPT, or Cursor?
Add flusterduck to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.flusterduck.com/mcp.
Is flusterduck MCP ready for ChatGPT and Claude?
As of October 14, 2026, flusterduck scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is flusterduck's MCP tool documentation?
As of October 14, 2026, flusterduck scores 80/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 30 of 30 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to flusterduck?
As of October 14, 2026, alternatives to flusterduck in data-analytics on the Manufact MCP catalog include Epicure, Newsflash, Point Topic, Pricing Optimizer AI, and StatCite.
How can flusterduck improve its MCP documentation?
explore is the lowest-scoring reviewed tool at 55/100. No output schema is declared. Add one for structured results so clients can interpret returned fields. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.