umami-mcp
This MCP server lets you interact with Umami Analytics v3 for website management, analytics reporting, event collection, user/team administration, and health/auth checks.
Manage websites: list, get, create, update, delete, reset, transfer ownership, get reports, active visitors, realtime data, and date ranges.
Query analytics: stats, pageviews, metrics, events, event series, sessions, session activity, session properties, weekly sessions, and event/session data breakdowns.
Send analytics data: send individual custom events/pageviews and batch multiple events.
Work with saved reports: list, get, create, update, delete, and run funnel, retention, UTM, goals, insights, revenue, journey, and attribution reports.
Administer users: list, create, get, update, delete users; inspect user websites, usage, and teams; manage current user profile, websites, teams, and password.
Administer teams: list, create, get, update, delete, join teams; manage team members and team websites.
Use public/auth endpoints: resolve shared website data, verify authentication, and check server heartbeat.
Provides full-coverage integration for the Umami Analytics API v2, allowing users to manage websites, query analytics statistics and metrics, send custom tracking events, generate reports, and perform administrative tasks for users and teams.
English | 한국어
umami-mcp
Model Context Protocol server for the Umami Analytics v3 API. It supports self-hosted username/password or API-key authentication and Umami Cloud API keys, and exposes analytics, collection, administration, and v3 feature families such as boards, links, pixels, segments, session replay, shares, exports, performance, and revenue.
This version intentionally does not claim every private Umami route. Its tools track the documented API, including Umami 3.4 API-key authentication. Report tools use the legacy report contracts that Umami 3.4 continues to support.
Requirements
Node.js 20 or newer, matching the MCP SDK's installed runtime dependencies
Umami v3.3-compatible self-hosted instance (3.4+ for API keys, session-property segments and annotations), or Umami Cloud with the corresponding routes enabled
Related MCP server: Umami MCP Server
Installation
npm install -g @mikusnuz/umami-mcpOr run it directly:
npx -y @mikusnuz/umami-mcpConfiguration
Self-hosted
{
"mcpServers": {
"umami": {
"command": "npx",
"args": ["-y", "@mikusnuz/umami-mcp"],
"env": {
"UMAMI_URL": "https://analytics.example.com",
"UMAMI_USERNAME": "admin",
"UMAMI_PASSWORD": "your-password"
}
}
}
}UMAMI_URL is the instance origin. A trailing /api is accepted, but is not
required.
On Umami 3.4+, create an API key under Settings → API keys and replace
UMAMI_USERNAME and UMAMI_PASSWORD with UMAMI_API_KEY. Set
UMAMI_MODE to self-hosted to select the deployment mode explicitly.
Umami Cloud
{
"mcpServers": {
"umami": {
"command": "npx",
"args": ["-y", "@mikusnuz/umami-mcp"],
"env": {
"UMAMI_API_KEY": "your-cloud-api-key"
}
}
}
}Cloud management calls default to https://api.umami.is/v1; tool paths are
translated from self-hosted /api/... paths to Cloud /v1/... paths. Set
UMAMI_URL to https://api.umami.is/v1/us or
https://api.umami.is/v1/eu when an explicit Cloud region is required.
For a Cloud API proxy on another hostname, also set UMAMI_MODE to cloud.
Environment variables
Variable | When required | Description |
| Optional |
|
| Self-hosted | Instance origin; optional for Cloud |
| Without a self-hosted API key | Login username |
| Without a self-hosted API key | Login password |
| Cloud; optional for self-hosted 3.4+ | Bearer API key |
| Optional | Separate host for public collection/share/heartbeat/recorder routes |
For Cloud, the collector defaults to https://cloud.umami.is. For self-hosted
Umami it defaults to UMAMI_URL.
An API key without UMAMI_URL, or a URL on api.umami.is, selects Cloud.
Any other configured URL selects self-hosted mode, even when using an API key.
Authentication and public routes
Management and analytics tools send a bearer token. The client logs in to a self-hosted instance lazily and caches the returned JWT when using a password. API keys are sent directly as the bearer credential on both deployment types.
The public collection routes do not require credentials:
send_event,send_identify,send_performancebatch_events(raw JSON array, up to 500 items)heartbeat,get_share,get_recorder_config
If self-hosted login reports that two-factor authentication is required, call
complete_two_factor_login with a current TOTP or backup code, then retry the
original tool. Setup and policy tools are also exposed for self-hosted Umami.
Umami Cloud does not expose /me/password, /users, or /users/* through an
API key. Those tools are for self-hosted instances.
Tool groups
Area | Representative tools |
Websites |
|
Analytics |
|
Event/session data | event values, fields, properties, values, session activity |
Collection | event/pageview, identify, performance, raw batch, link/pixel events |
Reports | saved-report CRUD and |
Boards | list, CRUD, clone, and team boards |
Links and pixels | list, CRUD, charts, and collection events |
Segments | segment/cohort list and CRUD |
Annotations (3.4+) |
|
Replay | recorder config, replay list/detail, saved replays, session replays |
Shares and export | public share resolution, managed website shares, update/delete, CSV ZIP export |
Revenue | stats, chart, metrics, and revenue sessions |
Users and teams | current admin-user and team membership/transfer routes |
2FA | login completion, enrollment, disable, and admin enforcement policies |
Realtime |
|
Use MCP tools/list for the complete, machine-readable list and schemas.
Important v3 contract details
A pageview is sent as
{ "type": "event" }with no eventname; the oldpageviewtype is no longer valid./api/batchreceives the event objects as a raw array, not{ "events": [...] }. The tool returns Umami'sprocessed,errors, and per-itemdetailsfields and marks partial failures as an MCP error result.Collector calls set a stable non-bot
User-Agentheader as required by Umami;send_eventand batch items may also supply the visitor'suserAgentand trusted server-sideipin the payload.Analytics URL filters and page metrics use
path; the oldurlmetric was removed. Host aggregation useshostname.Additional
filtersare preserved even when the corresponding named option is omitted. An explicitly supplied named option takes precedence overfilters.Segment creation and updates support
filters,sessionPropertyFilters,match,dateRange, andaction. Session-property data types are 1=string, 2=number, 3=boolean, 4=date, 5=array. Cohorts do not support session-property filters. Unknown nested fields are rejected rather than silently discarded.Annotations require Umami 3.4+ and website edit permission for writes. Supply an ISO date or timestamp, a 1–500 character note, and optionally
allDay(defaulttrue). Updates replace all three fields; list date filters require bothstartAtandendAtin milliseconds. An older server may return 404.Supported time units are
minute,hour,day,month, andyear.get_event_seriesandget_sessions_weeklyrequire an IANA timezone.list_reportsrequireswebsiteId; report execution sends{ websiteId, type, filters, parameters }.Team website membership is changed through
transfer_website; the removed team-website POST/DELETE routes are not exposed.
Development
npm install
npm testnpm test builds the TypeScript server, checks Cloud/self-hosted URL and auth
behavior, verifies raw public batch requests and the 2FA login flow, and
validates key MCP schemas.
Official references
License
MIT
Available Tools
133 toolsadd_team_userC
Add a user to a team
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Role in the team | |
| teamId | Yes | Team UUID | |
| userId | Yes | User UUID to add |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden of behavioral disclosure, and it discloses almost nothing. It does not say whether this requires admin/owner permission, whether it is idempotent when the user is already a member, what happens on failure, or whether the user is invited versus directly attached.
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?
A single front-loaded sentence with zero filler or redundancy. It is efficiently structured, but the brevity reflects under-specification rather than disciplined economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a three-parameter required-field mutation with no annotations and no output schema, so the description must explain permissions, failure modes, and side effects. It says nothing about any of these, leaving an agent unable to predict what happens when the membership already exists or the role is invalid.
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%: teamId and userId are documented as UUIDs and role carries an explicit three-value enum with a description. The description adds nothing beyond the schema, so the baseline of 3 applies.
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 sentence 'Add a user to a team' names a verb and two resources, but it is essentially a restatement of the tool name add_team_user and adds no scope detail. It does not distinguish this operation from siblings such as update_team_user, remove_team_user, or join_team, so an agent must infer the difference from names alone.
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?
There is no guidance on when to use this instead of update_team_user (changing a role) or remove_team_user (revoking access), which are the obvious near-miss alternatives in the sibling list. No preconditions, such as the user or team needing to already exist, are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_eventsA
Send multiple events or pageviews in a single batch request
| Name | Required | Description | Default |
|---|---|---|---|
| events | Yes | Array of events to send |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral-disclosure burden. It states the operation but omits authentication requirements, partial-failure behavior, idempotency, rate limits, and response format for a write/ingestion tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It states the core operation efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is rich, including nested event fields and batch size constraints, which supports basic invocation. However, with no annotations and no output schema, the description should do more to explain batch response or partial-success behavior, leaving a meaningful gap for an ingestion tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the detailed nested event fields and min/max item limits are already documented in the schema. The description does not add parameter meaning beyond the schema, so 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?
The description uses a specific verb ('Send') and states the exact resource/scope: multiple events or pageviews in one batch request. The words 'multiple' and 'batch' distinguish it from the single-event sibling send_event without requiring the schema to be opened.
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 batching context implies when to use this tool rather than send_event, but there is no explicit alternative named, no exclusion criteria, and no prerequisites. Usage is inferable but not documented.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_two_factor_setupB
Cancel pending self-hosted Umami 2FA setup
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden for a state-changing operation. It doesn't say whether the pending secret is discarded, whether it errors when no setup is pending, whether an already-enabled 2FA is unaffected, or what authorization is required. Only the surface intent is conveyed.
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?
A single front-loaded phrase with no filler. The scope qualifiers ('pending', 'self-hosted') are exactly the disambiguating words and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, simple cancellation this is minimally sufficient — the agent knows what it does. But with no annotations and no output schema, it says nothing about failure modes (no pending setup) or the effect on existing 2FA configuration, which a caller should know before invoking.
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 schema has zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No misleading hints about inputs are given.
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?
States a specific verb plus resource and scope: 'Cancel pending self-hosted Umami 2FA setup'. That clearly implies aborting an in-progress enrollment, which separates it from disable_two_factor and confirm_two_factor_setup by implication. It never names those siblings explicitly, so it lands at 4 rather than 5.
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 word 'pending' implies the precondition (call only when a setup has been initiated but not confirmed), but the description never states that condition or names initiate_two_factor_setup / confirm_two_factor_setup / disable_two_factor as the alternatives. An agent must infer the workflow position.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_boardC
Clone an Umami board
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| boardId | Yes | ||
| parameters | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, yet it only restates the name. It does not disclose whether the clone copies parameters/description, whether the source board is modified, what the default new-board name is, or what the response contains.
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?
Five words is technically concise but far below the size needed for a mutation tool with four undocumented parameters. This is under-specification rather than efficient writing.
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?
A mutating tool with no annotations, no output schema, four parameters (one a nested object) and zero schema documentation leaves the agent with essentially nothing beyond the name. The definition is not complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, including a nested free-form 'parameters' object, and the description adds nothing. An agent cannot learn that boardId is the required source, or that name/description/parameters are optional overrides for the copy.
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?
'Clone an Umami board' states a specific verb and resource, so an agent immediately knows the operation. It does not differentiate from siblings such as create_board or update_board, nor explain what the clone copies, so it stops short of a 5.
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?
There is no guidance on when to clone versus create_board, no prerequisites (e.g. permissions on the source board), and no exclusions. The agent must infer the scenario entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_two_factor_loginA
Complete a pending self-hosted Umami login after a tool reports that 2FA is required
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Six-digit TOTP or backup code | |
| method | Yes | Verification method |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does add the useful precondition that a login must already be pending and 2FA must have been demanded. It says nothing about failure behavior (invalid or expired code), whether the code is single-use, or what the caller receives once the login completes.
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?
One sentence, front-loaded with the action and immediately followed by the triggering condition. Nothing is wasted or repeated from structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter authentication tool with no output schema, an agent still lacks knowledge of what a successful completion yields (session established?) and how errors surface. The precondition is covered, but the post-condition is not.
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% and both parameters are documented in the schema, including the enum and the six-digit format note. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
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 names a specific verb and resource (complete a pending login) plus the Umami context, so it is immediately distinguishable from CRUD-style siblings. It stops short of explicitly naming how it differs from other auth siblings such as verify_auth or confirm_two_factor_setup, but the 'pending login + 2FA required' framing is precise.
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?
It gives an explicit trigger: call this only after a tool reports that 2FA is required, which is a real routing signal. It does not state what to do instead when no login is pending (e.g. verify_auth) or when the user abandons the flow (cancel_two_factor_setup), so exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_two_factor_setupB
Confirm self-hosted Umami 2FA setup and receive one-time backup codes
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that one-time backup codes are returned, but it omits whether confirming setup enables 2FA, what permissions are required, whether backup codes are shown only once, and how invalid or expired tokens are handled for this security-sensitive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It states the action and the key outcome efficiently.
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?
With no annotations, no output schema, and an undocumented required parameter, the description should do more for a security-sensitive state-changing operation. It mentions backup codes but omits prerequisites, token semantics, state effects, and backup-code handling details needed for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter, token, with zero description coverage. The description does not explain that token should be a six-character TOTP code or how it relates to the confirmation flow, leaving the agent to infer its meaning from the tool name and min/max length constraints.
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 states a specific verb and resource: 'Confirm self-hosted Umami 2FA setup', and adds the outcome 'receive one-time backup codes'. This is clearly distinct from siblings like initiate_two_factor_setup, cancel_two_factor_setup, and complete_two_factor_login, though it does not explicitly name those alternatives.
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 phrase 'Confirm ... setup' implies this should be used after initiating 2FA setup, but the description does not state prerequisites, when-not-to-use conditions, or direct alternatives such as complete_two_factor_login for login confirmation. Usage is implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_annotationC
Add a dated note to a website's charts (Umami 3.4+)
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ISO date (YYYY-MM-DD) or timestamp with timezone | |
| note | Yes | ||
| allDay | No | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses that this is an add/mutation operation and requires Umami 3.4+, but does not explain permissions, whether the note appears immediately, default behavior for allDay, or possible failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It conveys the action, object, and version requirement efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create/mutation tool with no annotations, no output schema, and only 25% schema description coverage, the description is too sparse. It omits behavioral details, parameter semantics, and any indication of what happens after creation.
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 only 25%, so the description should compensate but does not. It implies websiteId, date, and note via 'website's charts' and 'dated note,' but never explains allDay or the note constraints, leaving key parameter meaning to the sparse schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Add a dated note to a website's charts.' The Umami 3.4+ qualifier adds useful scope. It does not explicitly differentiate from sibling tools like update_annotation or delete_annotation, but the create intent is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool creates an annotation, but gives no explicit guidance on when to use it versus list_annotations, update_annotation, or delete_annotation. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_boardC
Create an Umami board
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| teamId | No | ||
| parameters | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only implies mutation via "Create." It does not state permission/ownership requirements, what the `parameters` object does, whether the board is team-scoped, or what happens on duplicate names.
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?
One short sentence is technically concise, but here brevity reflects under-specification rather than economy — nothing is front-loaded beyond a restatement of the tool name.
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?
A five-parameter mutation tool with a nested object, an enum, no annotations, and no output schema needs far more than a four-word description. Neither the enum semantics nor the required nested payload are addressed anywhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, including an opaque free-form `parameters` object and a `type` enum with five unlabeled values. The description adds no meaning to any of them, leaving the agent entirely dependent on bare property names.
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 names a specific verb and resource ("Create" + "Umami board"), which is enough to distinguish it from get_board/update_board/delete_board by name alone. However, it never explains what an Umami board is or how it relates to the five board types in the schema, so the purpose is only vaguely understood.
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?
There is no guidance on when to use this versus create_website, create_link, create_pixel, or clone_board, nor any mention of prerequisites such as team membership. The agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_linkC
Create a tracked link
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| name | Yes | ||
| slug | Yes | ||
| teamId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses only that this is a mutating create. It does not mention auth/permission requirements, slug-uniqueness or collision behavior, whether the slug is used as a redirect path, or what the response contains (no output schema). 'Tracked' hints that the link records analytics events, which is the only real behavioral signal.
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?
It is a single front-loaded sentence with no filler, so there is no verbosity problem. The issue is the opposite: it is under-specified rather than concise, so the brevity earns no more than a middling score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation tool with zero annotation coverage, no schema descriptions, and no output schema, the definition leaves the agent without enough information to call it correctly. Missing are required-parameter semantics, slug rules, teamId scoping, error/conflict behavior, and return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description names none of the four parameters. The agent gets no meaning for url, name, slug (length constraints only), or the optional teamId, and no indication that slug is constrained to 8-100 characters and must presumably be unique.
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?
'Create a tracked link' states a specific verb and resource, and the resource (link) is distinguishable from sibling creators like create_pixel, create_website, or create_share. It stops short of 5 because it says nothing about scope (team vs. personal) or how it differs from the closest siblings, list_links/get_link/update_link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance at all: no prerequisites (e.g., must provide a slug not already taken), no indication of whether teamId is needed for team-scoped links, and no pointer to alternatives such as create_website_share or send_link_or_pixel_event. The agent must infer usage entirely from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pixelC
Create a tracking pixel
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| slug | Yes | ||
| teamId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a mutation by saying 'Create,' but does not disclose permissions, uniqueness constraints, side effects, or what happens when name/slug conflict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. However, it is undersized for a creation tool with three parameters and no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and zero parameter description coverage, the description is not complete enough. It omits required context, side effects, parameter meanings, and response expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any of the three parameters. It gives no meaning for name, slug, or teamId, so an agent must infer all parameter semantics from the schema alone.
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 states a clear verb and resource: creating a tracking pixel. It is enough to separate this tool from sibling read/update/delete pixel operations, though it adds little beyond the tool name.
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?
There is no guidance on when to use this tool versus list_pixels, get_pixel, update_pixel, or other creation tools. Prerequisites such as team or website context are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reportC
Create and save a new report
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Report name | |
| type | Yes | Report type | |
| websiteId | Yes | Website UUID | |
| parameters | Yes | Report-specific parameters (JSON object) | |
| description | No | Report description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It states no side effects, no permission requirements, no indication of what happens when 'parameters' doesn't match the selected report type, and no return information — all significant gaps for a write operation creating a persisted object.
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?
A single front-loaded sentence with no filler or repetition. The problem is under-specification rather than verbosity, which is penalized in the other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with no annotations and no output schema, and its nested 'parameters' object has polymorphic semantics per report type. None of that is addressed, so an agent has no basis for constructing a valid call beyond the raw schema.
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%, so every parameter is already documented in the schema, including the ten-value type enum. The description adds nothing beyond the schema — notably it never explains that the required 'parameters' object is report-type-specific, which is the one place extra prose would have real value.
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?
"Create and save a new report" gives a clear verb and resource, so an agent understands the basic action. But it offers no differentiation from siblings such as update_report, run_report, or create_board, and the 'and save' phrasing adds no scope information.
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?
There is no when-to-use guidance, no prerequisites (e.g. that websiteId must reference an existing website), and no mention of update_report as the alternative when a report already exists. The agent must infer all routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_segmentC
Create a saved segment or cohort
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| websiteId | Yes | ||
| parameters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It never says whether creation is idempotent, whether names must be unique, what permissions are required, or what limits apply to cohorts versus segments. It only repeats the resource being created.
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?
One short front-loaded sentence with no wasted words, but the brevity is under-specification rather than economy—it omits information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with nested objects, 4 required params, no annotations, and no output schema, the description is far too thin. An agent cannot know the valid shape or constraints of a segment/cohort creation from this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the tool has four required parameters with nested objects. The description contributes nothing about 'parameters', 'match', 'action', 'filters', or the segment-vs-cohort constraints, leaving the undocumented schema to speak for itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('saved segment or cohort'), and the type enum in the schema matches. It is implicitly distinguishable from the list/get/update/delete_segment siblings, though the description doesn't explicitly reference them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this over alternatives, no prerequisites, no mention of how 'segment' differs from 'cohort'. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_teamC
Create a new team
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Team name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It conveys only that the tool mutates by creating, saying nothing about required permission level (team creation is typically admin-gated), name-uniqueness or duplicate-name behavior, or what side effects occur on the caller's account.
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?
One front-loaded sentence with zero waste. It is efficient, though the brevity reflects under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated mutation tool with no output schema, the description omits permission requirements, duplicate-name handling, and whether the created team is returned or its ID discoverable. An agent can attempt the call but cannot predict failure modes or follow-up steps.
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 a single documented 'name' parameter (maxLength 50), so the schema already explains the input. The description adds nothing beyond it, which is the baseline case for fully covered schemas.
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?
States a specific verb ('Create') and resource ('team'), which cleanly distinguishes it from create_website, create_user, and the other create_* siblings. It is clear but adds no scope detail such as whether the caller is auto-added as a member.
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?
There is no guidance on when to use this versus join_team, list_teams, or get_my_teams, and no stated prerequisites. The agent is left to infer that this is the onboarding path for a brand-new team.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_userB
Create a new user (admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | User role | |
| password | Yes | Password for the new user | |
| username | Yes | Username for the new user |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the safety profile, and it does disclose the key authorization constraint (admin only) for a mutation. It stops short of stating side effects, duplicate-username handling, whether the role is freely assignable, or what the call returns.
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?
Six words, zero filler, and the permission constraint is front-loaded. It is efficient but arguably thinner than a mutation tool warrants, which is captured under contextual completeness rather than here.
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?
A mutation tool with no annotations and no output schema requires the description to explain outcomes, error cases, and side effects. Aside from the admin-only note, none of that is present, leaving real gaps for an agent to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: username, password (8-255 chars), and role (with an enum) are all documented in the schema. The description contributes nothing about parameter meaning or constraints, so the baseline 3 applies.
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?
States a specific verb and resource ('Create a new user'), which cleanly separates it from sibling operations like update_user, delete_user, and list_users. No explicit sibling naming, but the verb makes the distinction obvious.
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 parenthetical '(admin only)' signals a permission prerequisite for use, which is genuine guidance. However, there is no statement of when to prefer this over alternatives such as add_team_user, nor any exclusion or precondition beyond the admin requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_websiteC
Create a new website to track in Umami
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name for the website | |
| domain | Yes | Website domain (e.g. 'example.com') | |
| teamId | No | Create the website under this team | |
| shareId | No | Unique share ID for public access |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and delivers almost none of it: nothing about required permissions, what happens on duplicate domains, whether teamId defaults to a personal account, or whether creation is reversible. Only the word 'Create' signals mutation.
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?
A single front-loaded sentence with no filler. It is efficient, though the brevity reflects under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description omits auth requirements, duplicate handling, team scoping semantics, and what a successful response contains. The agent can call it from the schema alone but cannot predict its behavior.
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 every field including name, domain, teamId and shareId is already documented, and the description adds nothing beyond that. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb and resource ('Create a new website') and adds the tracking context ('to track in Umami'). It does not distinguish itself from closely related siblings such as create_website_share or transfer_website, but the core action is unambiguous.
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?
There is no guidance on when to use this versus alternatives, no prerequisites, and no mention of the team-scoped variant implied by the teamId parameter. The agent must infer everything from the sibling list and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_annotationC
Delete a website annotation (Umami 3.4+)
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | ||
| annotationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It indicates a delete operation but does not disclose irreversibility, required permissions, side effects, or error behavior.
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 single sentence is concise and front-loaded, but it is too terse for a destructive operation. The version note adds some context but does not compensate for missing operational detail.
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?
With no annotations, no output schema, and 0% schema description coverage, the one-line description is insufficient for a destructive two-parameter tool. It omits effects, permissions, return behavior, and parameter guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention websiteId or annotationId or explain their UUID formats. It adds no parameter meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Delete a website annotation." It is clearly distinguishable from sibling tools like create_annotation, update_annotation, and get_annotation, though it does not explicitly name alternatives.
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?
There is no guidance on when to use this tool versus update_annotation or other annotation tools, and no prerequisites or warnings are given. Usage is only implied by the phrase "Delete a website annotation."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_boardC
Delete an Umami board
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, yet it adds nothing beyond the verb. It does not state whether deletion is permanent or recoverable, whether the board must be empty, what permissions or ownership are required, or what happens to dashboards/links attached to the board.
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?
Four words with zero filler, which is structurally clean and front-loaded. But the brevity is under-specification rather than economical writing, so it does not earn a high score for sizing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is an irreversible mutation tool with no annotations, no output schema, and an undocumented parameter. An agent lacks the warning context (permanence, side effects, prerequisites) required to call it responsibly, and the description supplies none of it.
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?
There is one parameter with 0% schema description coverage, so the description needed to compensate and says nothing about boardId. The schema conveys only that it is a required UUID-formatted string; the description offers no hint about where to obtain it (e.g., list_boards or get_board).
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 phrase 'Delete an Umami board' names a specific verb and resource, and 'Umami' adds a small amount of domain context. However, it is essentially a restatement of the name delete_board, and nothing distinguishes it from sibling delete operations (delete_report, delete_team, delete_link) beyond the noun itself.
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?
There is no guidance on when to use this versus update_board or delete_website, no preconditions, and no exclusions. The agent must infer everything from the tool name and the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_linkC
Delete a tracked link
| Name | Required | Description | Default |
|---|---|---|---|
| linkId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet only the word "Delete" signals mutation. It says nothing about whether deletion is permanent, whether link analytics/history are also destroyed, what permissions are required, or whether the operation is recoverable.
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?
It is a single front-loaded sentence with zero wasted words. However, the brevity reflects under-specification rather than efficient communication of the essentials for a destructive operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, irreversible-by-implication mutation with no annotations and no output schema, the description omits permissions, side effects, and confirmation behavior. The single parameter is simple, but the risk profile of the tool is entirely undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole parameter (linkId) is never mentioned in the description. Only the schema's own property name and uuid format communicate its meaning, so the description adds nothing to compensate for the coverage gap.
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 names a specific verb and resource ("Delete" + "tracked link"), which is unambiguous against siblings like delete_pixel or delete_share. It lacks any explicit sibling differentiation or scope statement, but the action is clear.
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 gives no guidance on when to use this tool versus alternatives, no prerequisites, and no warning about irreversibility. An agent must infer everything about when deletion is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_pixelC
Delete a tracking pixel
| Name | Required | Description | Default |
|---|---|---|---|
| pixelId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden for a destructive mutation. It says nothing about permanence, whether historical tracking/metric data tied to the pixel is preserved or lost, required scopes, or what happens when the pixelId does not exist — all material for a delete operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four words, front-loaded and waste-free, but the brevity crosses into under-specification for a destructive tool. Conciseness is achieved by omission rather than by tight writing.
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?
With no annotations and no output schema, the definition provides no safety, permissions, or failure-mode context for a delete in a family of pixel tools. An agent can guess the effect but not the consequences.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter, and the description says nothing about pixelId — not how to obtain one (e.g. via list_pixels), nor that it is a UUID. The schema's type/format hints are the only source of parameter meaning.
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?
States a specific verb and resource ('Delete a tracking pixel'), which is unambiguous against siblings like create_pixel, update_pixel or delete_website. It does not differentiate itself from related cleanup actions (e.g. update_pixel to disable, or deleting a link), but the name-plus-description pair leaves no real ambiguity about the operation.
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?
There is no guidance on when to delete versus update/disable a pixel, no prerequisites, and no warning about irreversibility. The agent must infer everything from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reportC
Delete a saved report
| Name | Required | Description | Default |
|---|---|---|---|
| reportId | Yes | Report UUID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and it discloses almost nothing. It does not say deletion is permanent/irreversible, does not state which permission or role is required, does not note whether scheduled runs or shares referencing the report are affected, and gives no indication of the response. For a destructive mutation with zero annotation coverage this is a substantial gap.
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?
A single front-loaded phrase with zero filler. The brevity is not wordiness-driven padding, though the same syllable count could have carried a warning about irreversibility instead.
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?
A destructive, unannotated, single-parameter tool with no output schema should at minimum say the deletion is permanent and what it affects. Nothing beyond the bare operation is conveyed, so an agent cannot confidently decide whether to call it or warn the user first.
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% and the single reportId parameter is already documented as a UUID, so the description adds nothing but also loses nothing. Baseline 3 applies when the schema does all the work.
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 states a specific verb and resource ("Delete a saved report"), which is enough for an agent to identify the operation unambiguously. It does not differentiate from siblings like delete_dashboard/delete_segment or point to list_reports/get_report for the surrounding workflow, so it stops short of a 5.
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?
There is no guidance on when to use this versus alternatives such as update_report or simply leaving a report unused, and no mention of prerequisites or confirmation requirements. The agent must infer everything about the appropriate use context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_segmentC
Delete a saved segment or cohort
| Name | Required | Description | Default |
|---|---|---|---|
| segmentId | Yes | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavioral traits. It says 'Delete' but does not state whether deletion is permanent, what happens to related data, or what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately concise, though its brevity contributes to underspecification for a destructive tool.
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 is destructive, has no annotations, no output schema, and 0% parameter description coverage, the description is incomplete. It identifies the action and resource but omits safety, parameter, and prerequisite context needed to invoke it correctly.
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 schema has 0% description coverage for both required parameters (segmentId and websiteId). The description does not mention either parameter or explain how they identify the segment, leaving the agent no semantic guidance beyond the schema's property names.
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 states a specific verb ('Delete') and resource ('saved segment or cohort'), making the action clear. It distinguishes itself from segment siblings like list_segments, create_segment, get_segment, and update_segment by the verb, though it does not explicitly name alternatives.
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?
There is no guidance on when to use this tool versus update_segment or when deletion is appropriate. For a destructive operation, the description provides no context on prerequisites, confirmation, or irreversibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_sessionC
Delete one session (self-hosted relational storage only)
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden. It discloses the storage-backend limitation but says nothing about whether deletion is permanent, required permissions, what happens if the session is already gone, or whether related data is affected.
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?
One short, front-loaded sentence with no filler. Brevity is appropriate, though the single sentence leaves no room for any of the missing guidance.
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?
A destructive mutation tool with no annotations, no output schema, and zero parameter documentation needs far more description than this. The agent lacks the safety and scoping context required to invoke deletion confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does not. It implies sessionId identifies the session but never explains websiteId, its format (uuid), or why both are required to disambiguate a session.
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?
States a specific verb and resource ('Delete one session') and adds a scoping qualifier about self-hosted relational storage. It clearly separates itself from read siblings like get_session and get_sessions, though it does not explicitly distinguish itself from the other delete_* tools beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives, no prerequisites, no warnings about irreversibility. The only contextual hint is the storage-backend restriction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_teamC
Delete a team
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | Team UUID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a destructive mutation via 'Delete' but does not state irreversibility, required permissions, side effects on associated resources, or confirmation requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. However, its extreme brevity leaves important context unstated, so it is minimally adequate rather than optimally structured for a destructive operation.
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?
With no annotations and no output schema, the description should provide enough context for a destructive tool, but it omits effects, safety considerations, and post-deletion behavior. The schema covers the parameter, but the definition is behaviorally incomplete.
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 the single teamId parameter is fully documented in the schema. The description adds no additional parameter semantics, which is acceptable at baseline when the schema already does the work.
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 states a specific verb and resource ('Delete a team'), making the operation unambiguous. It does not explicitly distinguish itself from siblings such as update_team or remove_team_user, but the action is clear enough to select correctly.
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?
There is no guidance on when to use this tool versus alternatives, no prerequisites or permissions mentioned, and no warning about when not to use it. The agent must infer everything from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_userB
Delete a user (admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User UUID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose one meaningful trait: the admin-only authorization requirement. However, it says nothing about irreversibility, whether the deletion cascades to the user's websites/team memberships/shares, or whether any confirmation step exists — all critical for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short clause that is entirely front-loaded with the action and resource; nothing is wasted. It is efficient, though the brevity reflects under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an irreversible, admin-restricted mutation with no annotations and no output schema, the definition is too thin. An agent learns only that it deletes a user and needs admin rights — not what is destroyed alongside the user, whether the operation can be undone, or what the response confirms.
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?
Single parameter (userId) with 100% schema description coverage, so the schema already documents that a user UUID is required. The description adds no formatting, lookup, or validation guidance beyond the schema, which is the expected baseline for a fully-described one-parameter tool.
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?
Specific verb + resource ("Delete a user") that clearly separates it from the other delete_* siblings such as delete_team, delete_website, delete_report. The scope is unambiguous, though it does not explicitly name the sibling alternatives an agent might confuse it with.
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 only usage signal is the parenthetical "(admin only)", which is a permission prerequisite rather than guidance. There is no statement of when to prefer this over remove_team_user, update_user, or delete_team, nor any warning about prerequisites beyond admin rights.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_websiteB
Delete a website from Umami
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Website UUID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description lacks disclosure of important behavior such as irreversibility, permission requirements, or cascading effects on associated data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence but under-specified for a deletion tool; could include more context without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool, the description is too brief. It omits crucial context like post-deletion effects or how it differs from reset_website, given no output schema or annotations.
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?
Input schema covers 100% of parameters with a clear description. The tool description adds no new meaning beyond the schema, resulting in baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Delete) and the resource (website from Umami), distinguishing it from siblings like create_website or update_website.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like reset_website or when not to use it (e.g., irreversible deletion).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_two_factorC
Disable self-hosted Umami 2FA when policy permits
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | ||
| password | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden for a destructive security mutation and mostly fails: it doesn't state that the caller must re-authenticate with password and a 6-digit TOTP, whether this affects only the caller or a target user, or whether the change is reversible. The only behavioral hint is the vague "when policy permits" failure condition.
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?
A single front-loaded sentence with no filler; the verb and resource come first. It is efficiently written but simply too thin to earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an unannotated, irreversible security-settings mutation with two undocumented required parameters and no output schema, an agent needs prerequisites, effects, and failure modes that are entirely absent. The definition is not complete enough to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions neither parameter, so nothing explains that "password" is the account credential or that "token" is a 6-character TOTP (the 6/6 length constraint is visible in the schema only). Parameter names are partly self-evident, which keeps this above 1, but no compensating semantics are added.
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 gives a specific verb and resource ("Disable ... 2FA") plus the product scope ("self-hosted Umami"), which is enough to distinguish it from setup tools like initiate_two_factor_setup or confirm_two_factor_setup. It does not, however, distinguish it from the closely related cancel_two_factor_setup or reset_user_two_factor.
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?
"When policy permits" gestures at a precondition but never says what policy, who can check it, or what happens if it blocks. There are three sibling 2FA-reset/cancel tools and the description offers no guidance on which to pick, leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_websiteB
Export website analytics as a base64-encoded ZIP of CSV files
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| endAt | Yes | ||
| startAt | Yes | ||
| pageSize | No | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the return encoding and format (base64-encoded ZIP containing CSVs), which is genuinely useful and non-obvious. It says nothing about permissions required, export size limits, whether the ZIP is a synchronous snapshot, or how pagination affects the exported dataset, which are material for a potentially expensive bulk operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the key output characteristic is stated immediately. Nothing redundant is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, zero-coverage, unannotated tool with no output schema, the description is far too thin. It omits timestamp units, the meaning of pagination on an export, the analytics scope of the CSVs, and any size/limit behavior an agent would need to call this safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, and the description supplies no parameter meaning at all. Critically, startAt/endAt are untyped integers with no hint about units (epoch seconds vs milliseconds), and page/pageSize on an 'export' tool is ambiguous — whether they paginate the export itself or bound the underlying data is unexplained.
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 states a specific verb and resource ('Export website analytics') and even the output artifact ('base64-encoded ZIP of CSV files'), so an agent knows exactly what it produces. It does not, however, contrast itself with the many sibling read tools (get_stats, get_metrics, get_pageviews) that also return analytics data, so the boundary is left implicit.
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?
There is no statement of when to choose this over get_stats/get_metrics/get_pageviews, nor any prerequisite context such as required scope or expected export size/cost. The agent must infer that 'export' means bulk retrieval rather than the paginated read endpoints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_active_visitorsB
Get the number of currently active visitors on a website
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description should disclose behavioral traits. It fails to define 'active visitors' (e.g., time window, uniqueness), does not mention whether it is read-only, and omits any rate limits or authorization requirements.
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?
Single sentence, 10 words, no redundancy. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple metric tool with one parameter and no output schema, the description is minimally adequate but lacks definition of 'active' and any context on real-time behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds no further meaning beyond the schema's description of websiteId as 'Website UUID'.
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 the tool retrieves the number of currently active visitors for a website, using a specific verb 'Get' and resource 'active visitors'. It distinguishes itself from sibling tools like get_pageviews or get_stats by focusing on active visitor count.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool over alternatives. Sibling tools such as get_realtime or get_stats could overlap, but description provides no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_annotationC
Get a website annotation (Umami 3.4+)
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | ||
| annotationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it only implies a read operation through the verb 'Get' and notes a version requirement. It does not disclose required permissions, behavior when the annotation is missing, whether the response is cached, or other operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. However, its brevity reflects under-specification rather than fully earned conciseness, since useful context could have been added without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple ID-based retrieval tool with no output schema and no annotations, the description is too sparse. It identifies the resource and a version compatibility note but omits usage boundaries, parameter meaning, return expectations, and permission or error behavior.
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?
Both required parameters have 0% schema description coverage, and the description does not mention websiteId or annotationId at all. The parameter names are present in the schema, but the description adds no meaning about scoping, valid values, or lookup behavior.
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 states a specific verb and resource: 'Get a website annotation'. It is clear that this retrieves one annotation, but it does not explicitly distinguish the operation from sibling reads such as list_annotations or explain the ID-based lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention list_annotations, prerequisites, permissions, or error conditions, leaving usage entirely implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_boardC
Get an Umami board
| Name | Required | Description | Default |
|---|---|---|---|
| boardId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses nothing beyond the bare verb. It does not say the operation is read-only, whether the board must exist, whether it needs authentication or team membership, or what an error looks like for an unknown boardId.
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?
One short phrase with no filler and the core verb-resource pair front-loaded. It is efficient, though the brevity comes at the cost of substance rather than from disciplined editing.
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?
With no annotations, no output schema, and an undocumented required ID parameter, the description leaves nearly everything an agent needs unstated. A single-sentence lookup tool can be simple, but this one is under-specified even for that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required boardId parameter, and the description does not compensate by explaining that it is the board's UUID identifier or where to obtain one. The schema only supplies type and format.
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?
"Get an Umami board" names a verb (get) and a resource (board), so the basic operation is inferable. But it gives no scope detail and does nothing to distinguish it from the many sibling board tools (list_boards, get_team, list_team_boards), nor does it indicate retrieval is by ID rather than by listing.
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?
There is no when-to-use guidance, no mention of an alternative such as list_boards, and no prerequisites stated. The agent must infer from the sibling names alone that this is the single-board lookup by ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daterangeB
Get the date range of available data for a website
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose any behavioral traits beyond the basic purpose (e.g., read-only, auth requirements, rate limits), leaving ambiguities about side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that immediately conveys the core functionality. It contains no extraneous information and is efficiently 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?
For a simple tool with one parameter and no output schema, the description is adequate but could be more informative about the return value (e.g., whether it returns a range object or just min/max dates).
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 has 100% coverage for the single parameter 'websiteId' with a description 'Website UUID'. The tool description adds no additional meaning beyond what the schema already provides, resulting in a baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and the resource ('date range of available data for a website'). It is specific enough to distinguish from most sibling tools, though it does not explicitly contrast with similar get_* operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing the time span of available data, but provides no guidance on when not to use this tool or specific alternatives among many similar get_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_data_by_idB
Get the custom data attached to one event
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Event ID | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Get' implies a read, but the description does not state read-only behavior, side effects, error conditions, or whether the result is empty when no custom data exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is appropriately sized for a simple two-parameter lookup tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool with fully documented parameters, the description is minimally sufficient for invocation. However, because there are no annotations and no output schema, it could say more about the returned custom-data shape and error behavior.
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%, and both required parameters are documented in the schema. The description does not add parameter semantics beyond what the schema already provides, so the baseline score of 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?
The description states a clear verb and resource: getting custom data attached to one event. The singular 'one event' distinguishes it from aggregate event-data siblings, though it does not explicitly name an alternative tool.
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 phrase 'one event' hints at looking up a single event, but there is no explicit guidance on when to use this versus get_event_data_values, get_event_data_properties, or other event-data siblings. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_data_eventsC
Get event data events (custom event names and counts) for a website
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | End timestamp in milliseconds | |
| event | No | Filter by event name | |
| filters | No | Additional current Umami filter fields | |
| startAt | Yes | Start timestamp in milliseconds | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read, but the description says nothing about aggregation behavior, whether counts are scoped to the date range, rate limits, permissions, or result shape for what appears to be a time-bounded analytics query.
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?
A single compact sentence, front-loaded with the verb and resource, with the parenthetical clarification placed immediately. The phrase 'event data events' is slightly redundant but the sentence earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, schema-complete query tool with no output schema, the description is minimally sufficient to attempt a call. It falls short of being complete given the dense cluster of event siblings that require differentiation for reliable 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%, so all five parameters (websiteId, startAt, endAt, event, filters) are documented in the schema itself. The description adds no syntax, defaults, or semantics for the nested 'filters' object beyond what the schema states, so baseline 3 applies.
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 states a verb ('Get') and a resource ('event data events'), and the parenthetical narrows it to custom event names and counts for a website. However, it does not distinguish this from closely related siblings like get_events, get_event_data_fields, get_event_data_values, or get_event_data_stats, so an agent must guess which event query to select.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many event-related siblings. The 'for a website' phrase hints at context but does not route the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_data_fieldsB
Get event data fields (property keys and their data types) for a website
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | End timestamp in milliseconds | |
| filters | No | Additional current Umami filter fields | |
| startAt | Yes | Start timestamp in milliseconds | |
| eventName | No | Filter by event name | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose the return content (property keys and their data types), which is the most useful behavioral fact for a discovery call, but it says nothing about permissions, read-only nature, pagination, or scope of the time window.
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?
A single front-loaded sentence with zero filler; the parenthetical pays for itself by clarifying the return value. Nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity read tool with a fully documented schema and no output schema, the description covers purpose and return content adequately. The only meaningful gap is the absence of routing guidance versus sibling event-data tools.
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%, so all five parameters (websiteId, startAt, endAt, eventName, filters) are already documented in the schema. The description adds no syntax, format, or semantics beyond what the schema provides, so the baseline 3 applies.
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?
Specific verb+resource: 'Get event data fields (property keys and their data types) for a website.' The parenthetical clarifies the return shape, which helps distinguish it from sibling read tools like get_event_data_values or get_event_data_properties. However, it never explicitly states how it differs from those near-identical siblings, so it stops short of a 5.
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?
There is no when-to-use guidance, no exclusions, and no mention of the many sibling tools (get_event_data_properties, get_event_data_values, get_event_data_stats) that an agent must choose between. Usage must be entirely inferred from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_data_propertiesB
Get custom-event property names and their data types for a website
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | End timestamp in milliseconds | |
| filters | No | Additional current Umami filter fields | |
| startAt | Yes | Start timestamp in milliseconds | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries more burden, but it does identify this as a read-style retrieval and says the output contains property names and data types. It does not disclose permissions, rate limits, pagination, or how filters affect results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is appropriately sized for a straightforward metadata retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic return content and website scope, which is enough for a simple getter with a fully described schema. However, given many similarly named sibling tools and no annotations, it leaves the agent without guidance on when this tool is preferred over alternatives.
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%, so the schema already documents websiteId, startAt, endAt, and filters. The description adds only that the result is website-scoped and does not explain parameter semantics 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?
The description names a specific verb and resource: it gets custom-event property names and their data types for a website. This is clear, but it does not distinguish itself from closely named siblings such as get_event_data_fields or get_session_data_properties.
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 gives no explicit when-to-use guidance, no exclusions, and no alternatives. An agent must infer from the name alone that this is the metadata-discovery tool rather than a values, fields, stats, or events tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_data_statsC
Get event data statistics (summary counts) for a website
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | End timestamp in milliseconds | |
| event | No | Filter by event name | |
| filters | No | Additional current Umami filter fields | |
| startAt | Yes | Start timestamp in milliseconds | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and largely fails: beyond 'Get' implying a read, it says nothing about permissions needed, whether the filters object constrains results, how large the date window can be, or what the summary response looks like. The only behavioral hint is 'summary counts', which at least tells the agent not to expect raw event rows.
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?
A single front-loaded sentence with no filler or repetition. It is arguably too terse rather than padded, but nothing in it wastes space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter aggregation tool with a nested filters object, no annotations, and no output schema, one sentence is insufficient — the agent cannot tell what 'summary counts' contains (unique events? total events? per-event breakdown?) or how filters scope the result.
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% — websiteId, startAt, endAt, event, and filters are all documented in the schema, so the description needn't repeat them. It adds nothing beyond the schema (e.g., how 'filters' interacts with 'event' is unspecified), so baseline 3 applies.
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?
States a specific verb ('Get') and resource ('event data statistics') and adds the parenthetical 'summary counts', which distinguishes it from sibling read tools like get_event_data_events or get_event_data_values that return rows rather than aggregates. It stops short of naming those siblings explicitly, so an agent must infer the split.
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?
There is no guidance on when to choose this over get_stats, get_events, or the other get_event_data_* tools, and no mention of prerequisites, rate limits, or exclusions. The agent is left to guess from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_data_valuesC
Get event data values (aggregated counts for a specific property) for a website
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | End timestamp in milliseconds | |
| filters | No | Additional current Umami filter fields | |
| startAt | Yes | Start timestamp in milliseconds | |
| dataType | No | Optional Umami data type code | |
| eventName | No | Filter by event name | |
| websiteId | Yes | Website UUID | |
| propertyName | Yes | Property name to aggregate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about authorization requirements, pagination, result ordering, limits, or what happens with an empty property. It only implies a read/aggregate operation, which is the minimum an agent could guess from the name.
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?
A single front-loaded sentence with no filler; the parenthetical clarification earns its place. It is efficient but perhaps too terse given the tool's 7-parameter surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with a nested free-form 'filters' object, a raw Umami 'dataType' code, no annotations, and no output schema, the description is far too thin. An agent gets no help on filter key naming, timestamp semantics, or the shape of the returned counts.
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 all 7 parameters documented, so the baseline is 3. The description reinforces that the aggregation is scoped by 'website' and 'specific property', but adds no syntax or semantics for filters, dataType, or eventName beyond what the schema already states.
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?
States a specific verb and resource ('Get event data values') and disambiguates the payload with a parenthetical ('aggregated counts for a specific property'), which is more informative than the name alone. However, it never distinguishes itself from close siblings like get_event_values, get_event_data_properties, get_event_data_fields, or get_session_data_values, so the agent still has to guess which one to pick.
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?
There is no statement of when to use this tool versus the many adjacent event-data tools, and no prerequisites or exclusions. The only implicit signal is 'aggregated counts', which a reader must infer selects this over the raw-listing siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventsC
List event rows for a website with current Umami v3 filters and pagination
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| path | No | Filter by URL path | |
| endAt | Yes | End timestamp in milliseconds | |
| event | No | Filter by event name | |
| search | No | Free-text search | |
| filters | No | Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort | |
| startAt | Yes | Start timestamp in milliseconds | |
| pageSize | No | ||
| websiteId | Yes | Website UUID | |
| maxResults | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'List' implies a read, but the description does not state whether this is read-only, how pagination parameters interact (page, pageSize, maxResults), what the return shape is, or any rate/permission 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?
A single well-formed sentence that is front-loaded and free of padding. It is appropriately sized, though 'current Umami v3 filters' is slightly jargon-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex 10-parameter query tool with a nested filters object, no annotations, and no output schema. The description does not explain return fields, pagination limits, how maxResults and pageSize interact, or what happens when filters conflict with top-level path/event/search parameters.
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 70%, so the schema already documents most parameters including the nested 'filters' object. The description only repeats that filters and pagination exist without adding format, examples, or meaning beyond what the schema provides.
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?
States a specific verb and resource: 'List event rows for a website.' The mention of Umami v3 filters and pagination clarifies the scope, but it does not distinguish this from closely named siblings such as get_event_data_events, get_event_series, or get_event_values.
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?
There is no explicit guidance on when to use this tool versus alternatives like get_event_data_events, get_event_series, get_event_data_values, or get_stats. The phrase 'current Umami v3 filters' is vague and does not help an agent choose between event-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_seriesC
Get event metrics over time (event series data) for a website
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Filter by URL path | |
| unit | No | Time grouping unit supported by Umami v3 | |
| endAt | Yes | End timestamp in milliseconds | |
| event | No | Filter by event name | |
| limit | No | ||
| filters | No | Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort | |
| startAt | Yes | Start timestamp in milliseconds | |
| timezone | Yes | IANA timezone (e.g. 'Asia/Seoul') | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing about the read-only nature, auth requirements, rate limits, default grouping behavior, or how many series/buckets are returned. Only the bare purpose is conveyed.
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?
A single short sentence with no filler, front-loading the core purpose. It is efficient, though its brevity contributes to the gaps in other dimensions rather than wasting words.
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?
With 9 parameters, a nested free-form filters object, no output schema, and no annotations, the description should explain what the response looks like (series points bucketed by unit) and how filters interact with event/path. None of that is present, leaving the agent guessing about result shape.
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 89%, so nearly every parameter (websiteId, startAt, endAt, timezone, event, path, unit, filters) is already documented in the schema. The description adds no extra meaning such as default unit or filter semantics, so the baseline 3 applies.
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?
States a specific verb and resource ('Get event metrics over time (event series data)') scoped to a website, which an agent can distinguish from bulk event listings like get_events. However, it never names or contrasts any sibling such as get_metrics, get_stats, or get_website_charts, leaving the boundary fuzzy.
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 gives no when-to-use guidance, no prerequisites, and no exclusions. An agent cannot tell from the text whether this is the right choice versus get_events, get_event_data_stats, or get_metrics for a time-series request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_valuesC
Get event or session property values for a website
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Property dimension whose values should be returned | |
| endAt | Yes | End timestamp in milliseconds | |
| search | No | Search returned values | |
| filters | No | Additional current Umami filter fields | |
| startAt | Yes | Start timestamp in milliseconds | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. "Get" implies a read, but it does not disclose whether results are paginated, capped, sorted, or permission-gated, nor does it explain how the nested filters object affects results. For a 6-parameter analytics query tool, this is a significant gap.
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?
A single front-loaded sentence with no filler or redundancy. It is efficient, though arguably too terse given the tool's parameter 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?
No output schema and no annotations mean the description must explain behavior, but it does not describe return shape, ordering, limits, or the nested filters semantics. For a required-4-parameter analytics tool with a nested object parameter, this leaves core call-time questions unanswered.
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 every parameter and the type enum are documented in the schema itself; baseline 3 applies. The description adds only the loose framing that returned values are event or session properties, and does not clarify how search, filters, or the type enum interact.
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 states a specific verb ("Get") and resource ("event or session property values") scoped to a website, so an agent understands the basic operation. It does not differentiate itself from closely-named siblings such as get_event_data_values, get_session_data_values, or get_event_data_properties, leaving overlap unresolved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus get_event_data_values, get_session_data_values, or get_metrics. There is no mention of prerequisites, exclusions, or decision criteria, so the agent must infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_linkC
Get a tracked link
| Name | Required | Description | Default |
|---|---|---|---|
| linkId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a read-only fetch but says nothing about authentication/scope requirements, behavior on a missing or malformed UUID, or what the response contains. For a zero-annotation tool this is a substantive gap.
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?
Four words, front-loaded, with zero filler. However, this is brevity through omission rather than efficiency — there is no second sentence adding any clarifying 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?
With no annotations, no output schema, and no parameter documentation, the description is the only explanatory text available and it provides none of the supporting detail. An agent cannot tell what a 'tracked link' record contains or how failures manifest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not describe the single required parameter. The name 'linkId' with format uuid makes its meaning largely self-evident, which prevents a 1, but the description adds no semantics 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?
States a specific verb ('Get') and resource ('a tracked link'), so the agent knows this is a single-resource retrieval. It does not distinguish itself from siblings like list_links or get_link_charts, but the core purpose is unambiguous.
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?
There is no guidance on when to use this versus list_links (to enumerate) or get_link_charts (for analytics). No prerequisites, no mention of what happens for unknown/invalid IDs. Usage is only inferable from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_link_chartsC
Get chart data for up to 20 tracked links
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | No | ||
| linkIds | Yes | ||
| startAt | No | ||
| timezone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. "Get" implies a read, but it does not disclose authentication needs, return format, time-range behavior, or what happens when more than 20 link IDs are requested beyond the schema constraint.
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 single sentence is front-loaded and wastes no words. However, the "up to 20" clause largely repeats the schema's maxItems constraint rather than adding explanatory 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?
For a tool with four parameters, 0% schema description coverage, no annotations, and no output schema, the description is far too thin. It identifies the data type and a link cap but leaves date range semantics, timezone handling, and response shape entirely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the four parameters, but it only mentions the 20-link limit already expressed by maxItems. It adds no meaning for startAt, endAt, or timezone, leaving their units and formats undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ("Get") and resource ("chart data") scoped to tracked links, making the basic action clear. It distinguishes itself from website/pixel chart siblings by specifying "tracked links," though it does not explicitly name those alternatives.
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 offers no guidance on when to use this tool versus siblings such as get_pixel_charts, get_link, or list_links. It implies chart retrieval for links but provides no conditions, exclusions, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_meA
Get the currently authenticated user's profile information
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description accurately states it's a read operation without side effects. Adequate but adds no behavioral context beyond the obvious.
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?
Single sentence, front-loaded with purpose, no filler. Every word earns its place.
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?
Simple tool with no params or output schema; description covers the essential purpose. Could specify return fields, but not critical given 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?
No parameters in input schema; description correctly omits param details. Baseline 4 for zero-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb (Get) and resource (currently authenticated user's profile information), distinguishing it from sibling tools like get_user or get_my_teams.
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?
Implicitly clear when to use: when needing the current user's profile. No explicit alternatives or exclusions, but not needed for such a straightforward tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metricsC
Get aggregated metrics for a website (e.g. top pages, browsers, countries, devices, OS, events)
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Filter by URL path | |
| type | Yes | Metric type to aggregate | |
| endAt | Yes | End timestamp in milliseconds | |
| limit | No | Max results to return (default 500) | |
| offset | No | ||
| search | No | Search metric values | |
| filters | No | Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort | |
| startAt | Yes | Start timestamp in milliseconds | |
| referrer | No | Filter by referrer | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full burden of behavioral disclosure. It says only that metrics are retrieved and never covers read-only behavior, authentication, pagination, rate limits, or what the aggregated response looks like.
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?
A single front-loaded sentence with no filler. It states the core action and immediately gives examples, making it efficient for an agent to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a relatively complex tool with 10 parameters, nested filters, no annotations, and no output schema. The description does not explain return structure, aggregation semantics, time-range behavior, or pagination, leaving substantial gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 90%, so the schema already documents most parameters and enum values. The description adds only illustrative metric examples that largely duplicate the 'type' enum rather than explaining time range, filters, pagination, or search semantics.
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?
States a specific verb ('Get') and resource ('aggregated metrics for a website') and gives examples of the metric dimensions available. The purpose is clear, but it does not explicitly distinguish this tool from close siblings such as get_stats, get_pageviews, get_events, or get_revenue_metrics.
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?
There is no guidance on when to use this tool versus the many alternative analytics tools in the sibling set. The examples imply it is for aggregated breakdowns, but no explicit conditions, exclusions, or preferred alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_teamsA
Get the list of teams the current user belongs to
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| orderBy | No | Sort field | |
| pageSize | No | Results per page | |
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only list scoped to the current user, but does not disclose pagination behavior, permission requirements, return format, or whether all memberships are included. The core read semantics are clear, but important behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It immediately states the action and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with four optional parameters and no output schema, the description gives enough context to call it correctly. It could say more about the returned team representation, but the low complexity keeps this from being a major 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 description coverage is 75%, with page, orderBy, and pageSize documented while sortDescending has no schema description. The tool description provides no additional parameter meaning, so the schema does most of the work; baseline 3 is appropriate for this coverage level.
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 states a specific verb (Get), resource (list of teams), and scope (the current user belongs to). This clearly distinguishes it from siblings like list_teams or get_user_teams, which operate on broader or specified users.
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 phrase 'current user belongs to' implies when to use this tool, but it does not explicitly say when to prefer it over siblings such as list_teams or get_user_teams. There are no exclusions or alternative-routing instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_websitesC
Get the list of websites belonging to the current user
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| orderBy | No | Sort field | |
| pageSize | No | Results per page | |
| includeTeams | No | Include team-accessible websites | |
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose pagination behavior, default sort order, whether team sites are included by default, or anything about permissions/authorship scope beyond 'belonging to the current user'.
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?
A single short sentence that front-loads the resource and scope. It is efficient, though its brevity comes at the cost of the missing guidance noted elsewhere.
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?
With five parameters, pagination and an includeTeams flag, and no output schema, the description should explain the return shape, default inclusion of team sites, and how pagination interacts with results. It covers none of that.
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 80%, with page, orderBy, pageSize, and includeTeams documented in the schema; sortDescending has no description. The description adds no parameter guidance at all, so it merely meets the baseline when the schema does the work.
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?
States a specific verb and resource (get the list of websites) scoped to the current user, which is somewhat distinguishing. However, siblings like list_websites and get_user_websites plausibly do the same thing, and the description offers no differentiation between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus list_websites, get_user_websites, or get_website. The agent must infer the distinction, and the 'current user' scoping is the only hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageviewsC
Get pageview and session counts over time for a website
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Filter by URL path | |
| unit | No | Time grouping unit supported by Umami v3 | |
| endAt | Yes | End timestamp in milliseconds | |
| filters | No | Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort | |
| startAt | Yes | Start timestamp in milliseconds | |
| referrer | No | Filter by referrer | |
| timezone | No | Timezone (e.g. 'Asia/Seoul') | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It only states that counts are returned over time; it does not disclose read-only/auth expectations, default grouping behavior, supported time-range limits, timezone handling, or the shape of the response.
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 definition is a single front-loaded sentence with no wasted words. It is appropriately terse, though it could be slightly more informative without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with eight parameters, a nested filters object, an enum unit parameter, and no output schema, this one-sentence description is too thin. It does not explain the returned time-series structure, default time unit, or how the filter and timezone parameters affect results.
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%, so all eight parameters are already documented in the input schema. The description adds only the high-level notion of time-series counts for a website and does not clarify filter semantics, unit behavior, or timezone interaction beyond what the schema already provides.
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 gives a specific verb ('Get') and resources ('pageview and session counts over time') scoped to a website, so an agent can tell it returns a time series rather than an aggregate. However, it does not distinguish itself from close siblings like get_stats, get_metrics, or get_website_charts.
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?
There is no explicit guidance on when to use this tool versus alternatives, despite many overlapping analytics siblings such as get_stats, get_metrics, get_sessions, and get_website_charts. The phrase 'over time' implies time-series usage, but no exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pixelC
Get a tracking pixel
| Name | Required | Description | Default |
|---|---|---|---|
| pixelId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosure, and four words disclose nothing: not whether pixelId must belong to a website the caller can access, not what happens on an unknown ID, not whether the pixel record is read-only or includes a writable snippet. This is a lookup tool whose failure and return behavior are entirely undocumented.
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?
Four words contain no filler and are trivially front-loaded, so nothing needs trimming. The brevity is under-specification rather than disciplined conciseness, which caps the score.
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?
A single-parameter lookup is simple, but with no annotations and no output schema, the description is the only place an agent could learn what comes back and what access is required. It supplies neither, leaving the definition insufficient for confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate for the single undocumented parameter, but it adds nothing about pixelId beyond what the schema already shows (a required uuid). The agent must infer that pixelId is the pixel's own identifier rather than, say, a website ID.
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?
"Get a tracking pixel" names a verb and a resource and clarifies that the domain is analytics tracking pixels, but it is essentially a restatement of the name. It does not say whether the returned object is the pixel's configuration, its embed snippet, or its status, nor does it distinguish it from list_pixels or get_pixel_charts.
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?
There is no guidance on when to call this versus list_pixels (for enumeration) or get_pixel_charts (for reporting). No prerequisites such as needing a website ID or a pixel belonging to an accessible website are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pixel_chartsC
Get chart data for up to 20 tracking pixels
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | No | ||
| startAt | No | ||
| pixelIds | Yes | ||
| timezone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, but it says nothing about authentication requirements, whether data is read-only, default time range, timezone behavior, or return shape. 'Get' implies a read operation, but the description does not confirm or expand on this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is concise, though its brevity is also the source of the specification gaps covered in other dimensions.
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?
With no output schema, no annotations, and 0% parameter description coverage, the description is too sparse for a tool with four parameters. It does not describe what chart data is returned, how the date range is interpreted, or how timezone affects results — all essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, but it only mentions the 20-pixel limit, which is already encoded in maxItems. It provides no meaning for startAt/endAt (e.g., epoch vs. ISO date, inclusive/exclusive, defaults) or timezone, leaving three optional parameters completely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('chart data ... tracking pixels'), and the 20-pixel cap is useful. However, 'chart data' is vague — it doesn't say which metrics or dimensions are returned. It only implicitly distinguishes itself from siblings like get_pixel and get_link_charts through the resource name, without naming alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus get_pixel, get_link_charts, or other chart tools is provided. There is no mention of prerequisites, exclusions, or typical use cases, leaving the agent to infer intent entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_realtimeB
Get real-time data for a website (last 30 minutes). Returns current visitors, active URLs, referrers, countries, and events.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| unit | No | ||
| event | No | ||
| device | No | ||
| country | No | ||
| timezone | No | IANA timezone | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. It does disclose the time window and the categories of data returned, which is real behavioral information, but says nothing about result caps, ordering, whether filters narrow the 'current visitors' count, or read-vs-write status (implied read by 'Get').
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?
Two tight sentences, zero waste, with the scope-defining 'last 30 minutes' front-loaded before the payload list. Nothing to trim.
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?
Seven parameters, no annotations, no output schema, and five undocumented parameters — this is exactly the case where the description has to do the heavy lifting. It covers the return shape conceptually but leaves filtering semantics, defaults and response limits unexplained.
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 only 29%: path, unit, event, device and country have no descriptions anywhere. The description's mention of 'active URLs, referrers, countries, and events' faintly hints that path/country/event act as filters, but it never explains units, timezone, or how multiple filters combine, so the coverage gap is left unfilled.
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?
States a specific verb and resource ('Get real-time data for a website') plus a scope ('last 30 minutes') and enumerates what comes back (visitors, URLs, referrers, countries, events). The only gap is that it never distinguishes itself from the sibling get_active_visitors, which reads like an overlapping capability.
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 '(last 30 minutes)' parenthetical implicitly frames the window, but there is no statement of when to pick this over get_active_visitors, get_stats, get_pageviews or get_sessions. No prerequisites, no exclusions, no alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recorder_configC
Get public session-replay and heatmap recorder configuration
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only fetch via 'Get' and hints at unauthenticated access with 'public', but says nothing about permission requirements, whether it reflects draft or live settings, or caching behavior.
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?
A single compact sentence with the core resource front-loaded and zero filler. It is efficient, though so short that it borders on under-specification rather than tightness.
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?
With no output schema and no annotations, the description is the only source of information, yet it never describes what the configuration payload contains (recorder settings, heatmap flags, snippet fields). For a config-fetching tool the return shape is the main thing an agent needs.
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?
There is one required parameter (websiteId) with 0% schema description coverage, and the description never mentions it — no indication that the config is scoped per website or what identifier format is expected. The description fails to compensate for the schema gap.
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?
States a specific verb ('Get') and resource ('recorder configuration') with qualifying scope ('public', 'session-replay and heatmap'). No sibling tool covers recorder configuration, so there is no close confusion to disambiguate, which keeps it just short of a 5.
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 gives no guidance on when to call this versus other website/configuration tools, nor any prerequisites (e.g., whether the caller must own the website or whether auth is required despite 'public'). The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_replayC
Get reconstructed events for one session replay
| Name | Required | Description | Default |
|---|---|---|---|
| until | No | ||
| replayId | Yes | ||
| websiteId | Yes | ||
| chunkIndex | No | ||
| eventIndex | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden, yet it discloses nothing about whether this is a read-only operation, whether results are paginated/size-limited, or how reconstruction behaves for large replays. Given five parameters including index and time bounds, the absence of any behavioral context is a real gap.
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?
A single front-loaded sentence with no filler or repetition. It is efficient, though the terseness borders on under-specification for a five-parameter tool.
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?
With no annotations, no output schema, and 0% schema description coverage, the description must carry the load for a paginated retrieval tool and does not. An agent cannot tell from this text how to page through chunks/events, what 'until' bounds, or what the response looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, and the description explains none of them. The pagination/partitioning semantics of until, chunkIndex, and eventIndex are completely undocumented, leaving the agent to guess how to iterate through a replay's events.
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 states a specific verb and resource: 'Get reconstructed events' for 'one session replay'. This is clearly distinguishable from siblings like list_replays or get_session, which return replay metadata or session aggregates rather than the reconstructed event stream. It stops short of naming the sibling it is not, so no explicit differentiation.
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?
There is no statement of when to call this tool versus list_replays, list_session_replays, or get_session, and no prerequisites (e.g. that a replayId must come from a replay listing). The agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_replay_saved_statusC
Check whether one session replay is saved
| Name | Required | Description | Default |
|---|---|---|---|
| replayId | Yes | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden, but it only implies a read-only status check. It does not disclose the return shape (e.g., boolean/status), behavior when the replay is missing, required permissions, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is appropriately terse, though it could add one short clause about return value or parameters without losing concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a small status-check tool with no annotations, no output schema, and undocumented parameters, the description is too sparse. It does not explain what 'saved' means, how the result is returned, or how this relates to set_replay_saved and list_saved_replays.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both required parameters. The description hints at a single replay but does not explain replayId, and it says nothing about websiteId, leaving both identifiers' meaning and relationship undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and resource ('whether one session replay is saved'), so the operation is clear. It implicitly distinguishes itself from list_saved_replays and set_replay_saved by focusing on a single replay, though it does not name those siblings.
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?
There is no explicit guidance on when to use this tool versus alternatives such as list_saved_replays, get_replay, or set_replay_saved. Usage is only inferable from the phrase 'whether ... is saved', leaving the agent to guess the intended workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportB
Get details of a specific saved report
| Name | Required | Description | Default |
|---|---|---|---|
| reportId | Yes | Report UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; it implies a read-only fetch by using 'Get' and adds the scoping fact that the target is a *saved* report. It stops short of disclosing permission requirements or whether the response includes configuration only or generated results.
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?
One front-loaded sentence with no filler. It is efficient, though sparse enough that a few more words on the return payload would have cost little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read with full schema coverage, the definition is workable, but with no output schema it never indicates what 'details' comprises (name, metrics, filters, ownership), leaving an agent to guess at the response shape.
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% and the single parameter is documented as a 'Report UUID', so the schema does the heavy lifting. The description adds only the useful disambiguation that this UUID identifies a saved report rather than a website or session.
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?
States a specific verb ('Get') and resource ('details of a specific saved report'), clearly distinct from list_reports and run_report by being a single-item fetch. It does not explicitly name when to use it versus get_website_reports or run_report, but the resource noun is unambiguous.
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?
There is no guidance on when to use this versus list_reports (discovery), create_report/update_report (mutation), or run_report (execute). The only inference an agent can make is that it needs a known reportId, which comes from the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_revenue_chartC
Get revenue chart data
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| endAt | Yes | ||
| compare | No | ||
| filters | No | Additional current Umami filter fields such as path, event, country, or segment | |
| startAt | Yes | ||
| currency | Yes | ||
| timezone | No | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. "Get" implies a read operation, but the description does not disclose return shape, whether chart buckets depend on the unit/compare parameters, permission requirements, or any rate/size constraints. It is too thin for an 8-parameter analytics endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words, but that is because it conveys essentially nothing beyond the tool name. It is under-specified rather than genuinely concise.
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?
With 8 parameters, 4 required, nested filters, two enums, no output schema, and no annotations, this definition is far too thin. An agent lacks the information needed to construct a correct call or understand what the chart response represents.
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 only 13%, and the description adds no meaning beyond the schema. Critical parameters like startAt, endAt, currency, unit, compare, timezone, and the nested filters object are undocumented in both the schema and the description, leaving the agent to infer their formats and semantics.
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 names a specific verb and resource ("Get revenue chart data"), making the general intent clear. However, it does not distinguish this tool from closely related siblings like get_revenue_stats, get_revenue_metrics, get_revenue_sessions, or get_website_charts, so an agent cannot tell when a chart is the right resource versus metrics or stats.
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?
There is no guidance on when to use this tool instead of the several sibling revenue tools or chart tools. The description provides no prerequisites, no indication of what a "chart" includes, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_revenue_metricsC
Get revenue metrics by dimension
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| unit | No | ||
| endAt | Yes | ||
| compare | No | ||
| filters | No | Additional current Umami filter fields such as path, event, country, or segment | |
| startAt | Yes | ||
| currency | Yes | ||
| timezone | No | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It implies a read-only retrieval through the verb 'Get' but does not state anything about permissions, rate limits, whether data is aggregated, what happens with required vs. optional parameters, or what the response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short phrase that is front-loaded but severely under-specified for a tool with nine parameters, nested objects, and three enums. Brevity here comes at the cost of necessary context rather than through efficient communication.
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 nine parameters, five required fields, a nested filters object, no output schema, and no annotations, the description is far too sparse to inform correct invocation. An agent lacks guidance on required inputs, dimension semantics, return behavior, or how this differs from related revenue tools.
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 only 11%, and only the nested 'filters' property has a schema description. The description adds no meaning beyond the schema: it alludes to a 'dimension' but does not explain the 'type' enum values (country, region, referrer, channel), required fields (websiteId, startAt, endAt, currency, type), or the behavior of 'unit', 'compare', 'timezone', or 'filters'.
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 states a verb ('Get') and resource ('revenue metrics') and adds a qualifier ('by dimension'), so the general purpose is clear. However, siblings such as get_revenue_stats, get_revenue_chart, and get_revenue_sessions are not differentiated, leaving an agent unsure why this tool exists instead of its close siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus get_revenue_stats, get_revenue_chart, or get_revenue_sessions. There are no exclusions, prerequisites, or contextual hints about appropriate scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_revenue_sessionsC
List sessions with revenue data
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| unit | No | ||
| endAt | Yes | ||
| search | No | ||
| compare | No | ||
| filters | No | Additional current Umami filter fields such as path, event, country, or segment | |
| startAt | Yes | ||
| currency | Yes | ||
| pageSize | No | ||
| timezone | No | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. "List" implies a read operation, but the description does not disclose pagination, sorting, limits, permission requirements, or anything about the response shape.
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 very short and front-loaded, with no wasted words. However, its terseness leaves it structurally inadequate for an 11-parameter data-listing tool.
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 11 parameters, nested filters, low schema description coverage, no annotations, and no output schema, the description is far too thin. An agent cannot determine required inputs, pagination behavior, or how this differs from related revenue and session tools.
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 only 9%, and the description adds no parameter meaning beyond the phrase "revenue data." It does not explain required parameters such as websiteId, startAt, endAt, currency, or the roles of page, pageSize, unit, compare, timezone, search, and filters.
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 states a specific verb and resource: "List sessions" qualified by "with revenue data." This is clear enough to distinguish it from generic session tools, but it does not explicitly contrast it with siblings like get_sessions or get_revenue_stats.
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?
There is no guidance about when to use this tool versus get_sessions, get_revenue_stats, get_revenue_chart, or get_revenue_metrics. The revenue qualifier implies context but does not state exclusions, prerequisites, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_revenue_statsC
Get revenue summary and comparison
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | ||
| endAt | Yes | ||
| compare | No | ||
| filters | No | Additional current Umami filter fields such as path, event, country, or segment | |
| startAt | Yes | ||
| currency | Yes | ||
| timezone | No | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, but it only implies a read operation through 'Get' and says nothing about comparison behavior, required permissions, defaults, or response format. With no output schema either, this is a significant gap for an 8-parameter analysis tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single six-word sentence. While it contains no filler, it is under-specified for a tool with 8 parameters and nested object support, and lacks the structure needed to guide correct invocation.
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 (8 parameters, 4 required, nested filters, enums, no annotations, no output schema), the description is far too sparse to be complete. It leaves the agent without the information needed to call the tool correctly or interpret its output.
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 only 13% (only the nested filters object is described), and the description adds no information about any of the 8 parameters. For required fields like websiteId, startAt, endAt, currency, and optional enums like unit and compare, the description does not compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('revenue') with a summary/comparison focus, making the general purpose clear. However, it does not differentiate from siblings like get_revenue_metrics, get_revenue_chart, or get_revenue_sessions, so an agent cannot confidently choose among them from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_revenue_chart or get_revenue_metrics. There is no mention of conditions, exclusions, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_segmentC
Get a saved segment or cohort
| Name | Required | Description | Default |
|---|---|---|---|
| segmentId | Yes | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only conveys that this is a retrieval operation. It says nothing about authentication or permissions, what happens if the segment does not exist, or what the response contains.
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 single sentence is front-loaded and free of filler, but its brevity reflects missing detail rather than efficient completeness. It is concise but under-specified for a tool that requires two UUID parameters.
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?
With no annotations, no output schema, and 0% parameter description coverage, the definition leaves key information unspecified. An agent cannot tell what the returned segment object looks like, what permissions are needed, or how websiteId scopes the lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has two required parameters, segmentId and websiteId, but schema description coverage is 0% and the description does not mention either parameter. It does not explain that segmentId identifies the segment to retrieve or why websiteId is required.
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?
States a specific verb ("Get") and resource ("saved segment or cohort" in singular), making clear it retrieves one existing segment rather than listing them. The singular form implicitly differentiates it from the sibling list_segments, though no sibling is named explicitly.
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 gives no explicit when-to-use guidance, no prerequisites, and no alternatives. An agent must infer that it should use this instead of list_segments when it already has a segment identifier, but that inference is not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sessionC
Get details of a specific session
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session UUID | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavior. It does not mention that the tool is read-only, what happens on not found, authentication needs, or response structure. Only the verb 'Get' hints at read behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise and front-loaded. It conveys the core purpose without extra words, though it could be expanded to include more context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks output schema and does not specify what 'details' includes. Given the tool's simplicity and the presence of siblings with similar names, a more complete description of the response fields or scope would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters have clear descriptions. The tool description adds no additional meaning beyond what the schema provides, so a baseline score of 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?
The description 'Get details of a specific session' clearly identifies the action and resource. It distinguishes from siblings like get_sessions (which lists multiple sessions) and get_session_activity (which focuses on activity), but could be more specific about what 'details' includes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. With many sibling get_* tools, the description should indicate that this is for a single session's full details, not for activity or properties.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_activityA
Get activity log for a specific session (pages visited, events fired)
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | End timestamp in milliseconds | |
| startAt | Yes | Start timestamp in milliseconds | |
| sessionId | Yes | Session UUID | |
| websiteId | Yes | Website UUID | |
| distinctId | No | Optional linked distinct ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. 'Get' implies a read operation and the parenthetical describes the content, but the description does not disclose pagination, limits, permissions, ordering, or empty-result behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It states the resource, scope, and content examples efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has five parameters, four required, no output schema, and no annotations. The description tells the agent what kind of data is returned but not its structure, ordering, pagination, or edge cases, leaving meaningful gaps for an agent invoking it correctly.
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%, so all five parameters are documented in the schema. The description does not add meaning beyond the schema, such as how startAt/endAt bound the activity or what distinctId affects, so the baseline of 3 applies.
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 states a specific verb and resource: get the activity log for a specific session, with examples of the content (pages visited, events fired). It is clear what the tool returns, but it does not explicitly differentiate itself from nearby siblings such as get_session or get_session_stats.
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?
Usage is implied by 'for a specific session' and the returned content, but there is no explicit guidance on when to use this instead of get_session, get_sessions, get_session_stats, or session replay tools. The agent must infer the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_data_propertiesC
Get session data property names and their data types for a website
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | End timestamp in milliseconds | |
| filters | No | Additional current Umami filter fields | |
| startAt | Yes | Start timestamp in milliseconds | |
| websiteId | Yes | Website UUID | |
| propertyName | No | Optional property name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read operation and says what is returned (names and types), but says nothing about required permissions, result size/ordering, or whether a missing websiteId errors versus returning empty. For a query tool with zero annotation coverage this is a significant gap.
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?
A single tight sentence with the resource and scope front-loaded and zero filler. It is efficient, though its brevity is also the source of the coverage gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool takes five parameters including a nested free-form filters object, and has no output schema and no annotations. A one-sentence description that omits return shape, filter semantics, and the role of propertyName is not enough for an agent to call it confidently in the presence of near-identical siblings.
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%, so all five parameters (websiteId, startAt, endAt, filters, propertyName) are documented in the schema itself. The description adds no parameter detail at all, so baseline 3 applies; notably the optional propertyName semantics are not clarified 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?
States a specific verb and resource: returns session data property *names and their data types* for a website. This is clearly distinct from the value-returning sibling get_session_data_values, though the description never names it explicitly. An agent can grasp the intent without opening the schema, but sibling differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative is given, despite a crowded sibling set (get_session_properties, get_session_data_values, get_session_stats). The typical use — discovering which property keys exist before querying values — must be inferred. No prerequisites or auth context are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_data_valuesC
Get session data values (aggregated counts for session properties) for a website
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | End timestamp in milliseconds | |
| filters | No | Additional current Umami filter fields | |
| startAt | Yes | Start timestamp in milliseconds | |
| dataType | No | Optional Umami data type code | |
| websiteId | Yes | Website UUID | |
| propertyName | No | Filter by property name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It adds only 'aggregated counts for session properties' and says nothing about whether it is read-only (implied only by 'Get'), what permissions/scoping apply, how results are ordered or limited, or what the response contains despite there being no output schema.
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?
A single front-loaded sentence with a clarifying parenthetical and zero filler. Nothing in it could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a six-parameter analytics query tool with a nested filters object, no annotations, and no output schema, yet the description is one sentence. It leaves the agent without a picture of the returned aggregation shape, the meaning of dataType, or how the required time range and propertyName filter scope the results.
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%, so all six parameters including the nested filters object and the optional dataType/propertyName are already documented in the schema. The description adds no syntax, format, or interaction detail (e.g. how propertyName interacts with filters) beyond what the schema provides, so the baseline 3 applies.
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?
States a specific verb and resource ('Get session data values') and clarifies with a parenthetical that these are aggregated counts for session properties, which distinguishes it from get_session_data_properties. It stops short of explicitly contrasting with the near-identical get_event_data_values sibling, leaving the agent to infer the session-vs-event distinction.
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 gives no indication of when to use this versus get_session_data_properties, get_session_stats, get_event_data_values, or get_stats. No prerequisites, no exclusions, no alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_propertiesC
Get custom properties attached to a specific session
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | Session UUID | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the sole source of behavioral information. It only states the basic read action without disclosing any side effects, auth requirements, rate limits, or error handling (e.g., what happens if session does not exist).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that directly states the purpose. It is concise and front-loaded with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal and lacks information about the return value (no output schema). It does not clarify what custom properties are or how the result is structured, making it incomplete for an agent deciding to invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, with descriptions for both parameters (Website UUID, Session UUID). The tool description adds no extra meaning beyond the schema, so a baseline score of 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?
The description clearly states the action 'get' and the resource 'custom properties attached to a specific session', effectively distinguishing it from similar tools like get_session_activity. However, it does not elaborate on what constitutes 'custom properties' versus other properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_session_data_properties or get_session_activity. There are no explicit when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sessionsC
Get session data for a website
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| path | No | Filter by URL path | |
| endAt | Yes | End timestamp in milliseconds | |
| query | No | Filter by URL query string | |
| search | No | Free-text session search | |
| filters | No | Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort | |
| startAt | Yes | Start timestamp in milliseconds | |
| pageSize | No | Results per page | |
| websiteId | Yes | Website UUID | |
| distinctId | No | Filter by distinct ID | |
| maxResults | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations and no output schema, so the description carries the whole burden — and it says nothing about pagination behavior, response shape, filter semantics, or whether this is a read-only call. The only inference available is that "Get" implies a read, which is thin for an 11-parameter, nested-filter query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single short sentence with no wasted words, but its brevity comes from saying almost nothing rather than from disciplined front-loading. Nothing is structured or prioritized because there is only one clause.
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 11 parameters, a nested free-form filters object, pagination fields, no annotations, and no output schema, the description is far too thin to let an agent call this correctly or predict what it returns.
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 91%, so the schema already documents websiteId, startAt/endAt, page, path, query, filters, etc. The description adds nothing about parameters — no mention of the required website+time-window combination or the behavior of the nested `filters` object. Baseline 3 applies when the schema does the work.
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 verb+resource is present ("Get session data"), but it's generic and there are many sibling tools in the same family (get_session, get_session_stats, get_sessions_weekly, get_session_activity, get_session_data_properties, list_session_replays). Nothing tells the agent how this differs from any of them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusion of alternatives, and no mention of prerequisites (e.g., needing a websiteId and timestamp range) even though several near-identical session tools exist to choose between.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_session_statsB
Get summarized session statistics for a website (total sessions, unique visitors, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Filter by URL path | |
| endAt | Yes | End timestamp in milliseconds | |
| filters | No | Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort | |
| startAt | Yes | Start timestamp in milliseconds | |
| referrer | No | Filter by referrer | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden; it establishes that this is a read-style summary endpoint and gives example return metrics. However, it does not mention permissions, rate limits, date-range behavior, or how filters affect results, leaving meaningful gaps for a stats endpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted text. It efficiently communicates the core purpose and illustrative metrics.
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 a schema with full parameter coverage and no output schema, the description is adequate on inputs and gives example outputs. It is incomplete for the surrounding toolset because it does not clarify its relationship to get_stats, get_sessions, or other session-related siblings.
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%, so all six parameters, including websiteId, startAt, endAt, path, referrer, and filters, are already documented in the schema. The description adds no parameter-level detail beyond the schema, which is acceptable but not additive.
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 a specific verb and resource: get summarized session statistics for a website, with examples like total sessions and unique visitors. It does not differentiate from closely related siblings such as get_stats, get_sessions, or get_sessions_weekly, leaving ambiguity about which stats tool to choose.
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?
There is no explicit guidance on when to use this tool versus alternatives, despite many sibling tools covering sessions and stats. The word 'summarized' implies a high-level view but does not name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sessions_weeklyC
Get weekly session data for a website
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | Yes | End timestamp in milliseconds | |
| filters | No | Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort | |
| startAt | Yes | Start timestamp in milliseconds | |
| timezone | Yes | IANA timezone (e.g. 'Asia/Seoul') | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full disclosure burden and discloses almost nothing. It does not clarify what a 'week' boundary means, how the required timezone affects bucketing, what the response shape is, or any rate/aggregation limits.
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?
It is a single front-loaded sentence with no filler, which is structurally clean. But the brevity comes at the cost of under-specification rather than efficiency, so it does not earn a high score.
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?
With 5 parameters, 4 required, a nested filters object, no output schema, and no annotations, the description should explain the weekly aggregation semantics and return shape. It provides none of that, leaving the agent unable to predict the result of a call.
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% (websiteId, startAt, endAt, timezone, filters all documented in-schema), so the schema does the heavy lifting and baseline 3 applies. The description adds no extra meaning, such as whether startAt/endAt are snapped to week boundaries before aggregation.
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?
States a specific verb and resource ('Get weekly session data') scoped to a website, which is clearer than a generic 'get sessions'. However, it never differentiates itself from adjacent siblings like get_sessions, get_session_stats, or get_session_activity, so an agent must guess which one returns weekly aggregates.
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?
There is no guidance on when to use this versus get_sessions or get_session_stats, no mention of prerequisites, and no exclusions. The only usage signal is the word 'weekly' in the name, which is not explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsB
Get summary statistics for a website (pageviews, visitors, visits, bounces, totaltime)
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Filter by URL path | |
| endAt | Yes | End timestamp in milliseconds | |
| event | No | Filter by event name | |
| filters | No | Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort | |
| segment | No | Saved segment UUID | |
| startAt | Yes | Start timestamp in milliseconds | |
| hostname | No | Filter by hostname | |
| referrer | No | Filter by referrer | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; it does disclose the shape of the result (the five summary metrics), which is genuine value. However, it omits aggregation semantics, timezone handling for the millisecond timestamps, behavior on empty ranges, and the fact that it is a read-only query.
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?
A single compact sentence with the resource and the returned metrics front-loaded; no wasted words. It is arguably too terse rather than too long.
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?
With 9 parameters, a nested filters object, no output schema, and no annotations, the description should say more about the return structure and aggregation. Naming the five metrics is a helpful partial substitute for the missing output schema, but the definitions of 'bounces' or 'totaltime' remain unexplained.
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 all 9 parameters documented, including the nested filters object, so the schema does the heavy lifting. The description adds nothing about the required websiteId/startAt/endAt triple or how filters/segment interact with the summary totals.
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?
States a specific verb (Get) and resource (summary statistics for a website), and enumerates the concrete metrics returned (pageviews, visitors, visits, bounces, totaltime). It does not distinguish itself from near-siblings such as get_metrics, get_pageviews, or get_session_stats, so an agent must infer the boundary.
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?
There is no guidance on when to use this versus get_metrics, get_pageviews, get_session_stats, or get_revenue_stats, nor any note on prerequisites or scope. The agent is left to guess from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_teamC
Get details of a specific team
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | Team UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. 'Get' implies a read, but nothing is said about permissions, what happens if the teamId is unknown, or what fields are returned. For a simple read this is a modest but real gap.
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?
A single front-loaded sentence with no waste. It is appropriately sized, though it is arguably too thin rather than too long.
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?
A one-parameter read tool with no output schema and full parameter documentation needs little more, so this is close to adequate. However, the absence of annotations means error behavior and return shape are entirely undocumented.
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%; the single teamId parameter is documented as a UUID with format constraints. The description adds nothing beyond the schema, so the baseline of 3 applies.
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?
States a specific verb (get) and resource (team details) for a single team, which distinguishes it from list_teams and get_team_user in the sibling set. It does not explicitly name those siblings or clarify the difference between 'a team' and 'my team' (get_my_teams), but the singular scope is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_teams, get_my_teams, or get_team_user, and no prerequisites or permission notes. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_team_userC
Get details of a specific team member
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | Team UUID | |
| userId | Yes | User UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read operation but says nothing about required permissions, what happens if the user is not in the team, or what fields are returned, leaving meaningful gaps for a lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It is efficient, though it is arguably too terse to carry much information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with a fully documented schema and no output schema, the description is minimally sufficient to invoke it correctly. It nonetheless omits sibling differentiation and any behavioral context that annotations would normally supply.
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 both teamId and userId documented as UUIDs, so the schema does the heavy lifting. The description's 'specific team member' only loosely implies the two-identifier lookup and adds no format or scoping detail 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?
The description states a specific verb and resource ('Get details of a specific team member'), so an agent knows it retrieves a single team-member record. However it does not differentiate itself from the close siblings get_user, list_team_users, or get_team, which could easily be confused with this tool.
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?
There is no guidance on when to use this versus list_team_users (list all members) or get_user (user-level details). The phrase 'specific team member' implies both IDs are needed, but no prerequisites, alternatives, or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_two_factor_statusB
Get self-hosted Umami 2FA status
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full behavioral burden but discloses almost nothing: not the authentication requirement, not whose status is queried, and not what the response contains (e.g., enabled/disabled/setup-pending). It is not misleading, but it provides minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no filler, and the purpose is front-loaded. The phrase 'self-hosted Umami' adds some product context but does not add much beyond identifying the resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter query tool this is nearly adequate, but it leaves two important gaps: it does not clarify that it returns the current authenticated user's 2FA status (versus get_user_two_factor_status), and without an output schema it does not describe the status values returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to document. The baseline for a no-parameter tool is 4, and the description does not misrepresent the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description has a clear verb ('Get') and resource ('Umami 2FA status'), so an agent can tell it retrieves two-factor authentication status. However, it does not distinguish this from the sibling 'get_user_two_factor_status', which likely retrieves another user's status, leaving whose status is returned ambiguous.
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?
There is no indication of when to use this tool rather than alternatives such as get_user_two_factor_status or complete_two_factor_login. The description gives no prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userB
Get details of a specific user (admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | User UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full disclosure burden, and it does surface one important behavioral fact: this requires admin privileges. It says nothing about what 'details' are returned, whether it fails for nonexistent users, or what a non-admin caller sees.
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?
A single short sentence with no waste, and the access constraint is attached inline. It is efficient, though 'details' is slightly vague for the resource being fetched.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with a fully documented parameter this is close to adequate: purpose and auth requirement are covered. With no output schema, however, the agent has no idea what fields the user record contains, and the description does not fill that 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?
The single userId parameter is fully documented in the schema (100% coverage, UUID format stated), so the schema does the work. The description adds nothing about the identifier beyond what the schema already says, which is the expected baseline for a one-param tool.
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?
States a specific verb and resource ('Get details of a specific user') and the singular 'a specific user' implies lookup by identifier, distinguishing it from the sibling list_users. It does not explicitly disambiguate from get_me or get_user_websites/get_user_teams, which are the nearest confusable siblings.
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 '(admin only)' parenthetical gives a real prerequisite for calling it, which is useful context. There is no explicit guidance on when to prefer get_me, list_users, or get_user_websites instead, so the agent must infer routing from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_teamsB
Get the list of teams a user belongs to (admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| userId | Yes | User UUID | |
| orderBy | No | ||
| pageSize | No | Results per page | |
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it does disclose the admin-only access requirement, which is meaningful behavioral context. It says nothing about pagination defaults, ordering behavior, or whether a partial page indicates more results, all of which matter for a 5-parameter listing call.
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?
A single short sentence with the key scope and the admin constraint front-loaded; nothing is wasted, though it is arguably too terse for the schema'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?
For a paginated, five-parameter listing tool with no annotations and no output schema, the description omits pagination behavior, ordering defaults, and return shape. The admin-only note is the only substantive addition beyond the name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 60% schema description coverage and five parameters, orderBy and sortDescending are undocumented in both schema and description, and the description adds no meaning about userId format or pagination semantics. It does not compensate for the coverage gap.
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?
States a specific verb and resource ('Get the list of teams a user belongs to') and scopes it to a single user, which implicitly distinguishes it from get_my_teams. However, it never names the sibling it is not, so an agent must infer the difference from the parameter list.
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 '(admin only)' qualifier gives a real precondition for use, but there is no explicit guidance on when to choose this over get_my_teams when inspecting one's own teams, and no exclusion or alternative is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_two_factor_statusA
Get a user's 2FA enrollment status (self-hosted admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It does add genuine context by flagging that this requires self-hosted deployment and admin privileges, and "Get" implies a read. But it never states whether the call fails for unknown users, what an unenrolled user looks like, or what the response contains, which matters given no output schema.
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?
A single front-loaded sentence with the operation first and the access constraint second - zero waste. It is arguably too terse for a tool with no annotations and no output schema, but nothing in it is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity, single-required-parameter read tool, so the short description is close to sufficient. The main remaining gap is that without an output schema it never hints at what the status value looks like (enrolled vs not, method, timestamps).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the lone parameter userId has no documented format in the description. The phrase "a user's" weakly points at which identifier is expected, but the description adds no detail (e.g. UUID, where to obtain it) beyond what the schema's format field already implies.
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?
"Get a user's 2FA enrollment status" names a specific verb (get), resource (2FA enrollment status), and scope (a user's, not your own), which implicitly distinguishes it from the sibling get_two_factor_status. It stops short of naming that sibling explicitly, so the differentiation is inferable rather than stated.
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 parenthetical "self-hosted admin only" gives a real precondition for calling it, which is more than most siblings offer. However, it never says when to prefer this over get_two_factor_status (own status) or how it relates to set_user_two_factor_requirement / reset_user_two_factor, leaving the selection logic implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_websitesB
Get the list of websites a user has access to (admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| search | No | Search query to filter websites | |
| userId | Yes | User UUID | |
| orderBy | No | ||
| pageSize | No | Results per page | |
| includeTeams | No | ||
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the meaningful behavioral constraint (admin-only access), but says nothing about what is returned, whether results are paginated by default, or how ordering behaves — gaps an agent must discover at call time.
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?
A single short sentence with the access restriction front-loaded and no filler. It is efficiently written, though the brevity is partly a symptom of under-specification rather than discipline.
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?
A 7-parameter admin tool with no annotations, no output schema, and less than 60% parameter coverage needs more than one sentence. Missing are return shape, pagination defaults, and how includeTeams or orderBy affect results.
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?
Seven parameters with only 57% schema coverage; the description explains none of them. The undocumented parameters (orderBy, includeTeams, sortDescending) get no clarification anywhere, and even for documented ones the description adds no meaning 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?
States a specific verb and resource ('Get the list of websites a user has access to') with the access-scope qualifier 'a user', which implicitly separates it from get_my_websites and list_websites. It does not name those siblings outright, so an agent must infer the distinction, but the purpose itself is unambiguous.
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?
'(admin only)' gives a real usage condition — the caller must hold admin privileges. However, it never names alternatives such as get_my_websites (for the caller's own sites) or list_admin_websites, so the routing decision between these near-identical siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_websiteA
Get details of a specific website by ID
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description only says 'Get details' without mentioning read-only nature, error handling, or any side effects.
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?
Single succinct sentence with no unnecessary words or 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?
Sufficient for a simple retrieval tool, but lacks explanation of what 'details' includes; no output schema defined.
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?
100% schema coverage already describes parameter 'websiteId'; description adds no extra meaning beyond 'by ID'.
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 verb 'Get' and resource 'details of a specific website', distinguishing it from 'list_websites' which returns all websites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'create_website' or 'list_websites'; usage is implied by name and parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_website_chartsC
Get chart data for up to 20 websites
| Name | Required | Description | Default |
|---|---|---|---|
| endAt | No | ||
| startAt | No | ||
| timezone | No | ||
| websiteIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full behavioral burden. 'Get' implies a read operation, but the description does not disclose permissions, time-range defaults, aggregation behavior, return shape, pagination, or rate limits.
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 single sentence is front-loaded and wastes no words. However, its brevity reflects under-specification rather than efficient completeness.
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?
With four parameters, no annotations, no output schema, and 0% schema description coverage, the description is far too thin. It does not explain the time-range parameters, timezone handling, expected chart output, or how this differs from other analytics tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description only repeats the website limit already encoded as maxItems=20. It provides no meaning for startAt, endAt, or timezone, leaving half the parameters undocumented in both schema and description.
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?
States a specific verb and resource: get chart data for websites. The 'up to 20 websites' scope is clear, but the description does not distinguish this from sibling chart/stat tools such as get_link_charts, get_pixel_charts, get_revenue_chart, get_stats, or get_metrics.
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?
Provides no guidance on when to use this tool versus the many sibling analytics and chart tools. It also gives no prerequisites, exclusions, or context about which chart data is returned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_website_reportsB
Get all reports associated with a specific website
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description fails to disclose any behavioral traits (e.g., pagination, rate limits, or side effects). For a read operation, it should at least confirm no destructive impact, which is missing.
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?
Single sentence, no wasted words. However, could be slightly more structured to separate purpose from input details.
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?
Simple tool with one parameter and no output schema; description is minimal but sufficient for a basic get-all-by-parent operation. However, lacks return format details, which may hinder agent understanding.
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 websiteId described as 'Website UUID'. Description adds no extra meaning; 'associated with a specific website' is redundant. Baseline 3 for high coverage with no added value.
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 the verb 'Get', resource 'reports', and scope 'all reports associated with a specific website', distinguishing it from siblings like get_report (singular) and list_reports (likely broader scope).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as list_reports or get_report. It assumes the agent knows to provide a websiteId but doesn't clarify context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
heartbeatA
Check if the Umami server is running and healthy
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It accurately indicates a read-only health check, but could mention that it does not modify any state. The behavior is transparent given the simple purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential purpose without any unnecessary words. Every word earns its place.
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 no parameters and no output schema, the description is sufficiently complete for a simple health-check tool. It could optionally mention the return format, but this is not essential.
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 has zero parameters with 100% coverage, so the description does not need to add parameter details. According to guidelines, 0 params warrants a baseline of 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 the tool's purpose: checking if the Umami server is running and healthy. It uses a specific verb ('check') and resource ('server health'), distinguishing it from sibling tools that perform data manipulation or analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is given. However, the tool's simplicity implies it is for verifying server status. No alternatives are mentioned, but the context is clear enough for minimal guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
initiate_two_factor_setupB
Start self-hosted Umami 2FA setup
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden, yet it discloses nothing about the mutation's effects. It does not say whether a secret/QR is generated and returned, whether the setup must subsequently be completed via confirm_two_factor_setup, whether authentication is required, or whether the call is repeatable. For a security-sensitive state-changing tool this is a substantial gap.
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 definition is a single front-loaded sentence with no filler, and every word ('Start', '2FA setup', 'self-hosted Umami') contributes. It is arguably too terse for the operation's sensitivity, but nothing redundant is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter but security-relevant initiation tool with no annotations and no output schema, the description omits the essentials: what the call returns, what the caller must do next, and any auth prerequisites. The agent would have to guess the setup flow's shape from the sibling tool names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters (schema coverage is trivially 100%), so there is no parameter semantics to document and the baseline of 4 applies.
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 pairs the specific verb 'Start' with the concrete resource '2FA setup' and scopes it to self-hosted Umami, so an agent can tell it initiates rather than confirms or cancels a setup. It does not explicitly name the neighboring tools (confirm_two_factor_setup, cancel_two_factor_setup) that sit in the same flow, so sibling differentiation is implied by 'Start' rather than stated.
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 verb 'Start' implies the usage context: begin a 2FA enrollment flow. However, the description gives no explicit conditions, prerequisites (such as an authenticated session), or mention of what to call afterward, so the guidance is implicit rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
join_teamB
Join a team using an access code
| Name | Required | Description | Default |
|---|---|---|---|
| accessCode | Yes | Team access/invite code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description does not disclose any behavioral traits such as authentication requirements, side effects, or error handling. For a mutation tool, more transparency is expected.
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: one sentence with no filler words. Earns a perfect score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter tool with no output schema, the description is adequate but lacks context on behavior (e.g., what happens if code is invalid) and usage scenarios.
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?
Single parameter 'accessCode' has a description in the schema (100% coverage). The tool description adds no additional meaning beyond the schema. Baseline score of 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?
The description clearly states the action ('join'), the resource ('team'), and the method ('using an access code'). It distinguishes this tool from siblings like 'create_team' or 'delete_team'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as 'add_team_user'. No context on prerequisites or special conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_admin_teamsC
List every team (self-hosted admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| orderBy | No | ||
| pageSize | No | ||
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It helpfully discloses that the tool is self-hosted and admin-only, and 'List' implies a read-only operation. However, it does not explain pagination behavior, whether 'every team' is actually paginated, or any return/rate-limit characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no wasted words, and the main purpose is front-loaded. It is appropriately sized for a brief list tool, though its terseness contributes to other gaps rather than serving as a model of balanced conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter list tool with no annotations and no output schema, the description is too sparse. It provides the admin/self-hosted context but omits pagination, search, ordering, sorting, and return-value expectations, leaving the agent under-equipped to invoke it confidently.
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 schema has five parameters (page, search, orderBy, pageSize, sortDescending) with 0% description coverage. The tool description mentions none of them, so it does not compensate for the completely undocumented parameters. An agent must infer all filtering, sorting, and pagination semantics from parameter names alone.
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 states a specific verb and resource: 'List every team'. It also adds the scoping condition '(self-hosted admin only)', which helps identify the operation. However, it does not distinguish this from the very similar sibling tools list_teams and get_my_teams, so it falls short of a 5.
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 phrase '(self-hosted admin only)' gives a clear usage condition by restricting the tool to self-hosted admin contexts. But it does not explicitly say when to use this instead of list_teams or get_my_teams, nor does it explain exclusions beyond the admin/self-hosted constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_admin_websitesC
List every website (self-hosted admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| orderBy | No | ||
| pageSize | No | ||
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the admin-only, self-hosted-only scope and that this is a listing operation, but it omits pagination behavior, auth requirements, and default ordering, which matter for five parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Its brevity borders on under-specification, but every word contributes to identifying the tool and its scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, five undocumented parameters, no output schema, and many similar list tools in the sibling set, the description is far too thin. It identifies the audience but says nothing about pagination, filtering, sorting, or result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions none of the five parameters (page, search, orderBy, pageSize, sortDescending). It adds no meaning beyond the bare schema, leaving key filtering, sorting, and pagination semantics entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("List every website") and adds a meaningful scope qualifier ("self-hosted admin only") that distinguishes it from the sibling list_websites. It does not explicitly name list_websites, but the admin/self-hosted constraint makes the distinction inferable.
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 parenthetical gives a condition for use (self-hosted admin only), which implies when this tool applies rather than list_websites. However, it doesn't name the alternative or state explicitly when not to use it, leaving the agent to infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_annotationsC
List website annotations (Umami 3.4+)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| endAt | No | End timestamp in milliseconds; requires startAt | |
| search | No | ||
| startAt | No | Start timestamp in milliseconds; requires endAt | |
| pageSize | No | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a read-only list via "List" and notes the Umami 3.4+ requirement, but says nothing about pagination, ordering, required website scoping, or response behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded phrase with no waste. It is terse to the point of under-specification, but as a conciseness measure it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter list tool with no output schema and no annotations, a one-line description is insufficient. It omits required-parameter context, pagination behavior, filtering semantics, and what the listing returns.
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 only 33%, so most parameters are undocumented in structured fields. The description adds no meaning for websiteId, page, pageSize, or search, leaving the agent without guidance on how those parameters shape the listing.
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?
"List website annotations" gives a specific verb and resource, so an agent can distinguish it from get_annotation, create_annotation, etc. It does not explicitly state scope beyond the resource name, but the purpose is clear.
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 gives no when-to-use or when-not-to-use guidance. It does not mention the singular get_annotation alternative or explain the relationship to create/update/delete annotation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_boardsC
List Umami v3 boards
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| orderBy | No | ||
| pageSize | No | ||
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears the full behavioral burden. 'List' weakly implies a read operation, but there is nothing about pagination behavior, auth/scope requirements, ordering defaults, or what is returned — significant gaps for a five-parameter listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only three words with no padding, so it is concise by default, but that brevity reflects under-specification rather than economy of expression.
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?
With five optional parameters, no output schema, and no annotations, the description would need to explain filtering/pagination and the difference from list_team_boards. It names the resource but leaves nearly everything else undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters (page, pageSize, search, orderBy, sortDescending). The description adds no syntax, defaults, or meaning for any of them, so an agent gets no help on pagination, filtering, or sorting semantics.
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 gives a specific verb+resource combination ('List ... boards') and adds a version qualifier ('Umami v3'), so an agent knows it enumerates boards. It does not differentiate from the sibling list_team_boards, however, leaving ambiguity about which list route to use.
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?
There is no statement of when to use this tool versus list_team_boards, get_board, or any other board sibling. No prerequisites, no scoping conditions, no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_linksC
List tracked links
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| orderBy | No | ||
| pageSize | No | ||
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List' implies a read-only operation, but the description says nothing about pagination, filtering behavior, sorting, permissions, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and has no wasted words, but it is under-specified rather than concise. Three words cannot adequately describe a 5-parameter listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has five undocumented parameters, no annotations, and no output schema, while the description adds only a bare purpose. It does not give enough context for an agent to invoke the tool correctly, especially regarding pagination, search, and sorting.
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?
All 5 parameters have 0% schema description coverage, and the description does not explain any of them. It gives no meaning for page, pageSize, search, orderBy, or sortDescending, leaving the agent unable to use them correctly without guessing.
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?
States a specific verb and resource: 'List tracked links.' An agent can tell it lists links, but the description does not differentiate it from the sibling list_team_links or explain whether it scopes to a website, team, or account.
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?
Provides no guidance on when to use this tool versus alternatives such as list_team_links or get_link. It also gives no preconditions, scope, or filtering context to help select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pixelsC
List tracking pixels
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| orderBy | No | ||
| pageSize | No | ||
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about permissions needed, pagination defaults, whether results span all websites, or what is returned. 'List' weakly implies a read-only operation, but that is the extent of the behavioral signal.
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 single short phrase is free of waste and front-loaded, but the brevity reflects under-specification rather than efficient communication. There is nothing to structure, so it neither helps nor hurts beyond being minimal.
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?
With five undocumented parameters, no annotations, and no output schema, the description supplies none of the information an agent needs to invoke this correctly. It is inadequate for a tool of this parameter complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Five parameters (page, search, orderBy, pageSize, sortDescending) have 0% schema description coverage, and the description mentions none of them. An agent must guess at pagination semantics, default ordering, and whether 'search' matches name, URL, or ID.
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 phrase "List tracking pixels" names a specific verb (List) and resource (tracking pixels), so an agent immediately knows the operation. It does not differentiate from siblings like list_team_pixels, get_pixel, or get_pixel_charts, leaving ambiguity about scope (all pixels vs. team vs. website).
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?
There is no guidance on when to use this versus list_team_pixels or get_pixel, nor any stated prerequisites (e.g., website/team context). The only implied usage is the verb 'list' itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_replaysC
List session replays for a website
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| endAt | Yes | ||
| search | No | ||
| filters | No | Additional current Umami filter fields such as path, event, country, or segment | |
| startAt | Yes | ||
| pageSize | No | ||
| websiteId | Yes | ||
| minDuration | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses almost nothing: no pagination behavior (page/pageSize exist), no default range, no ordering, no volume/limit caveats. Only the word "List" hints at a read-only operation, which is insufficient for an 8-parameter listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The sentence is tight and front-loaded with no filler, but for a tool with 8 parameters, 3 required and a nested filters object, a single clause is under-specified rather than appropriately sized.
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 annotations, no output schema, 13% schema coverage, 8 parameters including a nested free-form filters object, and several near-identical sibling tools. An agent has almost nothing to determine correct invocation or expected return shape.
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 13% across 8 parameters, and the description adds nothing about startAt/endAt (integers — epoch ms? seconds?), search semantics, minDuration units, or the shape of the nested filters object. The single phrase "for a website" only weakly points at websiteId.
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?
"List session replays for a website" gives a clear verb and resource, but the sibling set contains list_session_replays, list_saved_replays, and get_replay, and the description does nothing to distinguish this tool from any of them. An agent cannot tell which replay-listing tool to pick without opening schemas.
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?
There is no guidance on when to use this versus list_session_replays, list_saved_replays, or get_replay, and no stated prerequisites (e.g. that a websiteId is required). Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reportsB
List saved reports for a website
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| type | No | Optional report type filter | |
| pageSize | No | Results per page | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not state that this is a read-only operation, nor does it disclose pagination behavior, default page size, ordering, or the shape of returned reports — all relevant for a list tool with four parameters.
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?
A single short sentence with no filler, and the resource is front-loaded. It is efficient but borders on under-specification rather than being genuinely well-structured.
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?
With no annotations and no output schema, the description should explain return values, pagination defaults, and read-only semantics. It says nothing about these, leaving the agent to guess at behavior for a four-parameter listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page, pageSize, type, and websiteId are all documented in the schema itself. The description adds only the website scoping hint already implied by the required websiteId parameter, so baseline 3 applies.
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?
States a specific verb and resource ('List saved reports') and scopes it to a website, which is clearly distinct from mutating siblings like create_report or delete_report. However, it does not differentiate itself from get_report, get_website_reports, or run_report, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a browsing/enumeration use case but gives no explicit guidance on when to use it versus get_report, get_website_reports, or run_report. No exclusions or prerequisites are stated, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_replaysC
List saved session replays
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| pageSize | No | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and discloses almost nothing: no statement about pagination behavior (despite page/pageSize params), no auth or scoping requirements, no indication of result shape or ordering. Only the word 'saved' hints at a filter, which is insufficient for a 4-parameter listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded phrase with zero waste, but the brevity here is under-specification rather than discipline. There is nothing to trim, yet the sentence does not earn additional credit for structure alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter, 1-required listing tool with no annotations and no output schema, the description is materially incomplete: required scoping, pagination, and search semantics are all undocumented. An agent could not call this confidently without reading the raw schema and still would not know how it differs from its siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, and the description compensates for none of them. It never mentions websiteId (required), page, pageSize, or search — notably that a substring search filter exists is completely invisible to the agent.
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 gives a verb and resource (list + saved session replays), so the basic operation is identifiable. However, siblings list_replays, list_session_replays, and get_replay_saved_status create real ambiguity, and nothing here explains what distinguishes a *saved* replay from a plain replay listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no alternatives named, despite three closely related siblings (list_replays, list_session_replays, get_replay_saved_status) that an agent must choose between. The agent is left to guess from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_segmentsC
List saved segments or cohorts for a website
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| search | No | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full behavioral burden but discloses almost nothing: no indication of pagination, ordering, permissions, or what the response contains. It also doesn't clarify whether type is a filter that must be chosen or whether both sets are returned, which is a meaningful behavioral ambiguity given 'type' is required.
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?
A single front-loaded sentence with no padding or redundancy. Its brevity is the source of the gaps captured in other dimensions rather than a structural flaw.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with zero schema description coverage, no annotations, and no output schema, the description is too thin: it omits the search parameter, pagination/result-size behavior, and return shape. An agent could call it, but not confidently predict what comes back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only loosely maps 'for a website' to websiteId and 'segments or cohorts' to the type enum. The 'search' parameter is never mentioned, nor are any formats or matching semantics (e.g., substring vs. exact).
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?
States a specific verb ('List') and resource ('saved segments or cohorts') scoped to a website, so an agent can immediately tell it is the enumeration counterpart to create_segment/get_segment. It doesn't name any sibling explicitly, so differentiation is implied by the plural/listing framing rather than declared.
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?
There is no statement of when to use this versus get_segment or create_segment, no prerequisites, and no exclusions. Usage is only inferable from the word 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_session_replaysC
List replay recordings linked to one session
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| endAt | Yes | ||
| search | No | ||
| startAt | Yes | ||
| pageSize | No | ||
| sessionId | Yes | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation but does not disclose pagination behavior despite page/pageSize parameters, does not explain the required date-range constraints, and says nothing about return shape, permissions, or rate limits.
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 single sentence is front-loaded and free of filler, but it is too thin for a 7-parameter tool with four required parameters. Brevity here reflects under-specification rather than efficient communication.
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 7 parameters, no annotations, no output schema, and no parameter descriptions, the definition is materially incomplete. It identifies the core resource but omits date-range semantics, pagination, search behavior, and return expectations that an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, and the description only hints at sessionId. It does not explain websiteId, startAt, endAt, page, pageSize, or search, so an agent must infer all parameter meaning from bare names and types.
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 states a specific verb and resource ('List replay recordings') and adds a scoping qualifier ('linked to one session'), which distinguishes it from broader siblings like list_replays and list_saved_replays. It does not explicitly name those alternatives, but the resource and scope are clear.
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 phrase 'linked to one session' implies that a sessionId is required, but the description never states when to use this instead of list_replays, list_saved_replays, or get_replay. No exclusions, prerequisites, or alternative-selection guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_team_boardsC
List boards belonging to a team
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| teamId | Yes | ||
| orderBy | No | ||
| pageSize | No | ||
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only list scoped to a team, but it does not disclose pagination, filtering, sorting, permissions, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is efficient, though extremely terse for a tool with six parameters.
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 six parameters, no annotations, no output schema, and zero schema description coverage, the definition is incomplete. It states the basic scope but omits how filtering, pagination, and sorting parameters affect behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are six parameters. The description only hints at teamId filtering and says nothing about page, pageSize, search, orderBy, or sortDescending, so it does not compensate for the schema gap.
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 states a specific verb and resource with scope: it lists boards belonging to a team. This distinguishes it from get_board and create_board, but it does not explicitly differentiate itself from the broader list_boards sibling.
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?
There is no explicit guidance on when to use this tool instead of list_boards, get_board, or other board-related siblings. The required teamId implies team-scoped usage, but the description does not state alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_team_linksC
List tracked links belonging to a team
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| teamId | Yes | ||
| orderBy | No | ||
| pageSize | No | ||
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' implies a safe read, but the description says nothing about pagination, default page size, sort defaults, maximum results, or required team membership/permissions — all material for a 6-parameter paginated listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler and the scope qualifier placed correctly. The terseness is under-specification rather than efficiency, since nothing about parameters or result behavior is stated.
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?
Six parameters, zero schema descriptions, no annotations, and no output schema, yet the description covers only the resource name. An agent cannot determine pagination conventions, sort behavior, search semantics, or return shape from this definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to compensate and does not: it never mentions teamId, page, pageSize, search, orderBy, or sortDescending. The only hint is that a team is involved, leaving the meaning and accepted values of orderBy and search entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List tracked links') plus a scope qualifier ('belonging to a team'), which distinguishes it from the account-wide list_links sibling. It does not explicitly name that sibling or other team-scoped listers, so it stops short of full sibling differentiation.
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?
Usage is only implied by the phrase 'belonging to a team' — an agent can infer this is the team-scoped variant, but there is no explicit statement of when to prefer it over list_links or list_team_websites/list_team_boards. No prerequisites, permissions, or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_team_pixelsC
List tracking pixels belonging to a team
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | ||
| teamId | Yes | ||
| orderBy | No | ||
| pageSize | No | ||
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'List' implies a read-only operation, but nothing is said about pagination defaults, sort behavior, what a 'search' matches, or what fields come back on each pixel.
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?
A single front-loaded sentence with no filler or redundancy. It is efficient, though it is efficient partly by omitting information the agent needs, so it is not fully earning its brevity as a strength.
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?
With six undocumented parameters, no output schema, and no annotations, the definition leaves the agent without enough to call the tool confidently — pagination semantics, ordering options, and return shape are all undeclared.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters, and the description explains none of them. Names like 'search', 'orderBy', and 'sortDescending' are guessable, but 'search' in particular is ambiguous — whether it matches pixel name, ID, or URL is unstated, and 'orderBy' has no enumerable values in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (List), resource (tracking pixels), and scope (belonging to a team), which cleanly separates it from the sibling list_pixels tool and matches the naming family of list_team_users, list_team_websites, and list_team_links. It stops short of explicitly routing the agent between list_pixels and list_team_pixels, but the 'team' qualifier carries that distinction for most readers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this versus list_pixels, nor are any prerequisites, pagination expectations, or exclusions stated. The agent must infer the team-scoped alternative purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_teamsC
List all teams
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| orderBy | No | Field to order by (e.g. 'name', 'createdAt') | |
| pageSize | No | Results per page (default 10) | |
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses nothing about permissions required, whether results are scoped to the caller's memberships, or how pagination behaves. Only the implicit read-only nature of "List" is conveyed.
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?
Three words with zero waste, but this is under-specification rather than conciseness: a paginated, sortable listing tool needs at least a scope statement, and none is present to be 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?
With no annotations, no output schema, and four parameters, the description should establish result scope and return shape. It establishes neither, leaving the agent unable to predict what a call returns or whether pagination must be driven manually.
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 75%, so page, orderBy, and pageSize are already documented in the schema. The description mentions none of the four parameters and adds no sorting or pagination semantics, so it neither helps nor compensates for the undocumented sortDescending flag.
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?
"List all teams" gives a clear verb and resource, but it adds nothing beyond the tool name and leaves "all" ambiguous: all teams in the account, all teams visible to the caller, or all teams across the organization. With siblings like get_my_teams, list_admin_teams, and get_user_teams present, that ambiguity matters and no differentiation is offered.
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?
There is no guidance on when to use this rather than get_my_teams, list_admin_teams, or get_user_teams, nor any stated prerequisites such as admin rights or team membership. The agent must infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_team_usersC
List all members of a team
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| search | No | Search query to filter members | |
| teamId | Yes | Team UUID | |
| pageSize | No | Results per page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full disclosure burden and provides almost none. Saying it lists 'all' members is mildly misleading given the page/pageSize pagination parameters, and it does not say whether this requires team membership or admin rights, nor what a member record contains.
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?
A single front-loaded sentence with no filler. Its brevity is efficient but veers toward under-specification rather than tight information design.
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?
A four-parameter list tool with no annotations and no output schema needs the description to explain pagination behavior, filter semantics, and permission requirements. None of that is present, leaving the agent with less than a minimum viable definition.
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 teamId, page, pageSize, and search are all self-documented. The description adds nothing about them and notably does not reconcile 'all members' with the paginated result set, so it earns only the baseline.
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?
States a specific verb and resource: list members of a team, with teamId required. This is clear enough to separate it from list_users and list_teams, though it does not explicitly contrast with near-siblings like get_user_teams or get_team_user.
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?
There is no when-to-use guidance, no mention of prerequisites (e.g. requiring a team UUID you already know), and no routing to alternatives such as list_users or get_user_teams for a user-centric view. The agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_team_websitesC
List all websites that belong to a team
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| search | No | Search query to filter websites | |
| teamId | Yes | Team UUID | |
| orderBy | No | ||
| pageSize | No | Results per page | |
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and says nothing beyond the bare purpose. It does not disclose pagination behavior, default page size, sort defaults, permission requirements, or what the response contains for a team with no websites.
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?
A single front-loaded sentence with zero redundancy or filler. Brevity here reflects under-specification rather than bloat, but the sentence itself is well-formed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter tool with no annotations and no output schema, the description leaves an agent without enough to call it confidently: pagination contract, ordering semantics, and return shape are all undefined anywhere else.
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 67% and the description mentions none of the six parameters, including the required teamId. The two undocumented parameters (orderBy, sortDescending) and the meaning of page/pageSize default behavior are left entirely to the schema, with no compensating detail.
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?
States a specific verb (list) and a specific resource scope (websites belonging to a team), which is clearly distinct from list_websites and get_website. It stops short of naming which sibling to use for other scopes, so an agent must infer the contrast.
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?
There is no when-to-use guidance, no mention of prerequisites (e.g. team membership or admin role), and no exclusions against the large set of sibling listers (list_websites, get_my_websites, list_admin_websites). The only cue is the tool name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usersA
List all users (admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| search | No | Search query to filter users | |
| orderBy | No | Field to order by (e.g. 'username', 'createdAt') | |
| pageSize | No | Results per page (default 10) | |
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It usefully discloses the admin-only authorization requirement, but it does not describe pagination behavior, return shape, or any side effects beyond the obvious read-only implication of 'list'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. The core action and key constraint are immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and most parameter details are in the schema, but the description does not explain filtering, pagination, or expected output. For a user-listing endpoint with several optional filters, it is adequate but leaves some contextual 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 80%, so the schema already documents most parameters. The description adds no parameter-specific meaning, which meets the baseline for high schema coverage but does not compensate for the remaining gap.
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 states a specific verb and resource ('List all users') and adds a meaningful scope/constraint ('admin only'). It is clear what the tool does, though it does not explicitly distinguish itself from siblings like list_team_users or get_user.
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 'admin only' note provides an important prerequisite, but there is no explicit guidance on when to use this tool versus get_user, list_team_users, or create_user. Usage is only implied by the name and scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_websitesC
List all websites tracked in Umami
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based) | |
| search | No | Search query to filter websites | |
| orderBy | No | Field to order by (e.g. 'name', 'domain') | |
| pageSize | No | Results per page (default 10) | |
| includeTeams | No | Include team-accessible websites | |
| sortDescending | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It doesn't disclose pagination behavior (pageSize default 10, 1-based page), that results are limited to the caller's accessible websites unless includeTeams is set, what ordering applies by default, or whether it's authenticated/read-only.
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?
One short, front-loaded sentence with no filler. It is efficiently phrased, though its brevity reflects under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter list tool with no annotations and no output schema, the description should clarify scope (personal vs team vs admin), pagination, and the search/orderBy behavior. It leaves all of that to the schema and omits any scope disambiguation from overlapping siblings.
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 83%, so the schema documents page, search, orderBy, pageSize, and includeTeams well; baseline 3 applies. The description adds nothing about filtering or pagination semantics, and sortDescending remains undocumented in both places except by name.
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?
States a specific verb and resource (list websites), which is clearer than a bare name. However, 'all websites tracked in Umami' does not distinguish it from close siblings such as get_my_websites, list_team_websites, or list_admin_websites, and the 'all' scope is muddled by the includeTeams parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no mention of alternatives, despite three or more sibling list tools that overlap in scope. An agent has to guess whether this returns personal, team, or admin-scoped websites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_team_userC
Remove a user from a team
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | Team UUID | |
| userId | Yes | User UUID to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing about a destructive membership mutation: whether removal revokes the user's access to the team's websites, whether it is reversible, or what permissions are required. Only the bare action is stated.
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?
A single front-loaded sentence with zero filler. Its brevity is a content deficit rather than a structural flaw, which is scored under other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with no annotations and no output schema, the description should at least note side effects (access revocation, related memberships) and the success response shape. None of that is present.
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 both teamId and userId documented as UUIDs including 'User UUID to remove'. The description adds no meaning beyond the schema, so baseline 3 applies.
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?
States a specific verb and resource (remove a user from a team), which is unambiguous and separates it from add_team_user and update_team_user by the verb alone. It does not explicitly name those siblings, so it falls short of a 5.
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?
There is no guidance on when to use this versus update_team_user, add_team_user, or delete_user, and no prerequisites such as required role or ownership. The agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_user_two_factorA
Reset a user's 2FA enrollment and backup codes (self-hosted admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it does disclose the target state (enrollment and backup codes are cleared) and the self-hosted/admin restriction, which are meaningful behavioral facts. It does not state irreversibility, what happens to active sessions, or that the user must re-enroll, leaving the destructive semantics incomplete.
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?
A single front-loaded sentence naming the action, the affected artifacts, and the access restriction, with no filler. Nothing could be removed without losing a fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema and no annotations, the description covers action, scope of destruction, and the admin/self-hosted gate. Missing are post-conditions (user locked out until re-enrollment, session invalidation), which an agent should know before invoking an irreversible account-security mutation.
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 0%, but there is only one parameter whose name (userId, uuid format) and the phrase 'a user's' make the target self-evident. The description adds only the indirect signal that the userId is the affected user, not whether it can be the caller's own id or requires admin scope.
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?
States a specific verb ('Reset') and a specific resource ('2FA enrollment and backup codes'), naming exactly what is affected. It is distinguishable from siblings like cancel_two_factor_setup or disable_two_factor in that it targets an admin acting on another user, though the description never explicitly contrasts them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'self-hosted admin only' is a real deployment/permission prerequisite, which is useful guidance. However, there is no statement of when to choose this over disable_two_factor or cancel_two_factor_setup, nor any exclusion condition, so the usage boundary is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_websiteB
Reset a website by removing all its analytics data (irreversible)
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Website UUID to reset |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes the operation is irreversible, which is key behavioral info. However, with no annotations, it fails to disclose auth needs, impact on other data, or confirmation steps.
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?
Single sentence with no fluff. Efficient, though could incorporate more detail without losing conciseness.
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?
Adequate for a destructive one-parameter tool, but could detail what happens to associated data or user permissions.
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?
Only one parameter (websiteId) with full schema coverage. The description adds no additional meaning beyond the schema, so 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?
The description clearly states the verb 'reset' and the resource 'website by removing all its analytics data', and highlights irreversibility, distinguishing it from siblings like delete_website.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as delete_website or other update tools. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_reportC
Execute a current Umami v3 report and return its result
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Report type to run | |
| filters | No | Current Umami filter object; use {} for no filters | |
| websiteId | Yes | Website UUID | |
| parameters | Yes | Report-specific parameters (varies by type) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It says the tool returns a result, but does not state whether execution is read-only, what permissions are needed, whether it has side effects, or what the returned result looks like. The single sentence is insufficient for an execution endpoint with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler and is front-loaded with the action. It is terse to the point of under-specification, but the sentence itself is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool: ten report types, type-dependent parameters, nested objects, and no output schema. The one-sentence description does not explain how parameters vary by type, what the result contains, or how it relates to saved-report tools. With no annotations, it leaves material gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters, and the baseline is 3. The description adds no meaning about the enum values for 'type' or the type-dependent contents of 'parameters' and 'filters,' but it is not required to compensate for a coverage gap.
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 states 'Execute a ... report and return its result,' which gives a verb and resource. However, 'current Umami v3 report' is vague, and it does not distinguish this ad-hoc execution tool from siblings like get_report, get_website_reports, or list_reports. An agent can infer it runs a report but not how it differs from retrieving a saved one.
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?
There is no guidance on when to choose run_report over get_report, get_website_reports, or other analytics siblings. No prerequisites, no mention that the report type drives the required parameters, and no exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_eventB
Send a custom event or pageview to Umami (useful for server-side tracking)
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | Client IP for trusted server-side collection | |
| tag | No | Event tag | |
| url | Yes | URL path (e.g. '/checkout') | |
| title | No | Page title | |
| screen | No | Screen dimensions (e.g. 1920x1080) | |
| hostname | Yes | Hostname of the site (e.g. 'example.com') | |
| language | No | Browser language (e.g. 'en-US') | |
| referrer | No | Referrer URL | |
| eventData | No | Custom event data as key-value pairs | |
| eventName | No | Custom event name (omit for pageview) | |
| timestamp | No | Unix timestamp in seconds | |
| userAgent | No | Client user agent | |
| websiteId | Yes | Website UUID (used as the 'website' field in payload) | |
| distinctId | No | Stable user identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It never discloses that this is a write operation against a live analytics dataset, whether events are deduplicated or timestamp-normalized, whether authentication is required, what rate limits apply, or what the call returns on success/failure. For a 14-parameter ingestion endpoint, this is a serious omission.
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?
A single front-loaded sentence with zero filler. It is efficiently written, though the brevity doubles as under-specification for a tool with this many parameters.
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 14 parameters, a nested object (eventData), no annotations, and no output schema, the description is far too thin. An agent gets no guidance on which of the three required fields drive routing, how eventName vs pageview affects payload interpretation, or what a successful response looks like.
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%, so every one of the 14 parameters already has an inline description (e.g. 'omit for pageview', 'Website UUID'). The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
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?
States a specific verb ('Send') and resource ('custom event or pageview') and names the target platform (Umami). It does not distinguish itself from nearby write-path siblings like batch_events, send_identify, send_performance, or send_link_or_pixel_event, so an agent cannot fully separate them from the description alone.
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?
"Useful for server-side tracking" implies the context (backend-originated ingestion rather than browser-instrumented collection), which is a real usage hint. But there is no statement of when to prefer batch_events for multiple events, no prerequisites about API credentials, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_identifyC
Attach custom session data or a distinct ID through Umami's public collection API
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| data | Yes | Session properties | |
| hostname | No | ||
| websiteId | Yes | Website UUID | |
| distinctId | No | Your stable user identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It notes the public collection API but omits what the call actually mutates (new session vs. update to an existing one), whether it is idempotent, whether data and distinctId can be sent together, and what side effects or response to expect.
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?
A single, front-loaded sentence with no filler. Its brevity is appropriate, though it comes at the cost of the missing usage and behavioral detail flagged elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with a nested object, no annotations, and no output schema, the description is too thin. It leaves unresolved when to call it, how it interacts with send_event, and what identifying state it sets, which are essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 60%, and the description adds little beyond it: 'session data' maps to the data object and 'distinct ID' to distinctId, both already described in the schema. The required websiteId and the url/hostname parameters receive no explanation of format or role in the description.
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 gives a specific verb ('Attach') and resource ('custom session data or a distinct ID') and names the public collection API, so an agent can tell what it does. It does not, however, distinguish it from the closest siblings (send_event, batch_events, send_performance), which all go through the same collection pathway.
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?
There is no explicit when/when-not guidance and no named alternative. The agent must infer that this is the user/session-identification counterpart to event-sending tools, with no statement about prerequisites, ordering relative to send_event, or required authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_link_or_pixel_eventC
Send a public collection event for a tracked link or pixel
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| data | No | ||
| name | No | ||
| entityId | Yes | ||
| hostname | No | ||
| entityType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It indicates an event-sending operation, but does not disclose side effects, authentication or public-endpoint requirements, idempotency, rate limits, or what happens with the nested event data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no waste, but it is too terse for a 6-parameter event-sending tool and omits structure that would help an agent act correctly.
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 moderate complexity, 6 parameters, a nested object, no annotations, and no output schema, the description is not complete enough. It names the entity types but leaves critical invocation details undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, including a nested 'data' object. The description only loosely maps to the 'link'/'pixel' entityType enum and does not explain required entityId, url, name, hostname, or the structure and purpose of '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 states a specific action ('send') and resource ('public collection event') and narrows the target to 'a tracked link or pixel'. This distinguishes it somewhat from generic siblings like send_event, though 'public collection event' remains abstract.
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?
It implies usage for link or pixel events but gives no explicit when-to-use guidance, no exclusions, and no comparison to alternatives such as send_event or batch_events. An agent must infer the routing decision from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_performanceC
Send Core Web Vitals through Umami's public collection API
| Name | Required | Description | Default |
|---|---|---|---|
| cls | No | ||
| fcp | No | ||
| inp | No | ||
| lcp | No | ||
| url | Yes | Page URL or path | |
| ttfb | No | ||
| hostname | Yes | Website hostname | |
| websiteId | Yes | Website UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It reveals that this uses the public collection API, which hints at unauthenticated ingestion, but does not describe side effects, whether data is counted as a pageview/session, rate limits, or error behavior for an operation that sends telemetry data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. Its brevity is efficient, but it is arguably undersized given the eight-parameter payload and missing semantic details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an eight-parameter ingestion tool with no annotations, no output schema, and low schema description coverage, the description is too sparse. It does not explain the five Core Web Vitals fields, units, what happens on success/failure, or how this interacts with Umami analytics data.
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 only 38%, with descriptions for websiteId, hostname, and url but none for cls, fcp, inp, lcp, or ttfb. The description names 'Core Web Vitals' but adds no units, required/optional guidance, or meaning for those acronym parameters beyond what an expert might infer.
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 states a specific verb and resource: 'Send Core Web Vitals.' It also names the mechanism, Umami's public collection API, which helps distinguish this from generic event or identify submission tools. However, it does not explicitly differentiate itself from siblings like send_event or send_identify.
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 gives no guidance on when to use this tool versus alternatives such as send_event, send_identify, or batch_events. It implies it is for reporting web vitals, but does not state prerequisites, exclusions, or routing conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_global_two_factor_requirementA
Require or stop requiring 2FA globally (self-hosted admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that this is an admin-only global mutation, but it does not explain the impact on existing users, whether the change is reversible, or what the response indicates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no filler, and the global scope and admin-only constraint are 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?
For a simple one-parameter tool, the description covers the core purpose and permission requirement. However, as a security-sensitive global mutation with no annotations and no output schema, it should explain user impact or side effects more fully.
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?
There is one boolean parameter named 'required' with 0% schema description coverage. The phrase 'Require or stop requiring' implies the boolean mapping, but the description does not explicitly state that true enforces and false disables the requirement.
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 states a specific action (require or stop requiring 2FA) and scope (globally), and 'globally' distinguishes it from sibling tools like set_user_two_factor_requirement and set_team_two_factor_requirement.
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 parenthetical 'self-hosted admin only' gives a clear usage prerequisite, and 'globally' implies it is not for per-user or per-team settings. It does not explicitly name the alternative sibling tools, but the selection context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_replay_savedC
Save or unsave a session replay (name is used when saving)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| isSaved | Yes | ||
| replayId | Yes | ||
| websiteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says this mutates saved state but does not disclose permissions, reversibility, side effects, or response behavior, leaving important mutation details unexplained.
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 single sentence is front-loaded, efficient, and free of filler. Its terseness contributes to the completeness gaps, but as a conciseness measure it is strong.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with four parameters, no annotations, no output schema, and zero schema description coverage, the description is under-specified. It does not explain required identifiers, mutation behavior, or what the agent should expect after saving or unsaving.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needs to compensate. It only clarifies that name is used when saving, while websiteId, replayId, and isSaved are left to schema names and types without added semantic or format guidance.
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 states a clear verb pair (save/unsave) and resource (session replay), so an agent can distinguish it from read-oriented siblings like get_replay_saved_status and list_saved_replays. It stops short of explicitly naming or contrasting those siblings.
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?
There is no explicit when-to-use guidance or mention of alternatives. The parenthetical about name only covers a parameter condition, not selection criteria relative to get_replay_saved_status or list_saved_replays.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_team_two_factor_requirementA
Require or stop requiring 2FA for a team (self-hosted owner/manager only)
| Name | Required | Description | Default |
|---|---|---|---|
| teamId | Yes | ||
| required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden. It does disclose the key non-obvious trait that this is a mutation scoped to self-hosted installs and gated by owner/manager role, which is valuable. It does not say whether enabling the requirement retroactively forces existing members without 2FA out or into a setup flow, nor whether the call is idempotent — the main consequences an agent needs to know before invoking.
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?
A single sentence with the action front-loaded and the constraint folded into a compact parenthetical. Nothing redundant, nothing padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-output-schema toggle the description covers scope, effect, and permission gating, which is most of the picture. The remaining gap — the downstream effect on members who have not enrolled in 2FA — is the one thing an agent would most want before flipping this flag, and there are no annotations to fill it in.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It partially does: 'for a team' signals teamId is the target scope and 'Require or stop requiring' maps cleanly onto the boolean 'required'. But it never states the format expected for teamId (UUID) or the true/false orientation of 'required', leaving the schema's bare type declarations to do the rest.
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 states a specific action ('Require or stop requiring 2FA') against a specific resource ('a team'), including the fact that it is a bidirectional toggle rather than a one-way enable. It is unambiguous on its own, though it never names the sibling scoping variants (set_global_two_factor_requirement, set_user_two_factor_requirement) so an agent must infer the team-level distinction from the tool name alone.
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 parenthetical '(self-hosted owner/manager only)' supplies a real applicability gate — deployment edition and caller role — which is useful. However, it offers no guidance on when to choose this over the global or per-user 2FA requirement tools, and no note on what states must exist first (e.g. whether the team must have users).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_user_two_factor_requirementA
Require or stop requiring 2FA for a user (self-hosted admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | ||
| required | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden. It does disclose two real traits: the operation is a reversible toggle in both directions ('Require or stop requiring') and it is restricted to self-hosted deployments with admin privileges. It omits what actually happens to the user's existing 2FA enrollment, whether the requirement is enforced immediately on next login, and whether the change is auditable.
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?
A single short sentence with the action front-loaded and the access restriction appended where it does not interrupt the main clause. No filler, no restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no annotations and no output schema, the description covers eligibility and toggle direction but leaves the effect on the target user's current 2FA state, the success response, and error conditions (e.g. user not found, non-admin caller) unexplained. It is workable but thin for a security-sensitive admin mutation.
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 0% for both parameters, so the description must compensate. It partially does: 'Require or stop requiring' explains that the boolean selects enforcement on/off rather than enrolling the user, and 'for a user' clarifies the userId target. It never names the parameters or states that userId is a UUID, so the mapping is implied rather than explicit.
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?
States a specific verb pair ('Require or stop requiring') and a specific resource ('2FA for a user'), and the phrase 'for a user' scopes it apart from the sibling team/global variants (set_team_two_factor_requirement, set_global_two_factor_requirement). An agent can distinguish it from those siblings without opening any schema.
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 parenthetical '(self-hosted admin only)' gives an eligibility precondition, which is useful context for selecting the tool. However, it never explicitly routes the agent among the close alternatives (set_team_two_factor_requirement, set_global_two_factor_requirement, disable_two_factor, reset_user_two_factor), so the per-user scope must be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_websiteB
Transfer a website to a user or team using the current Umami transfer endpoint
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Website UUID to transfer | |
| destinationId | Yes | Target user or team UUID | |
| destinationType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and falls short. It implies a mutation ('Transfer') but does not disclose permissions, reversibility, effects on existing shares or access, or error conditions; 'using the current Umami transfer endpoint' is implementation detail rather than useful behavior.
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 definition is a single front-loaded sentence with no sprawl. The phrase 'using the current Umami transfer endpoint' is slightly redundant but does not obscure the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with no annotations and no output schema, so the description should explain permissions, side effects, and response expectations. It omits those details, leaving an agent with enough to identify the operation but not enough to invoke it confidently.
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 67%, with websiteId and destinationId documented in the schema. The description adds only limited semantic mapping by naming 'user or team' as the destination, but it does not explain the destinationId UUID requirement or add meaning beyond the enum already present for destinationType.
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 uses a specific verb and resource: 'Transfer a website' with an explicit destination scope of 'a user or team'. This clearly distinguishes it from siblings such as update_website, delete_website, or create_website_share.
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 gives no explicit when-to-use or when-not-to-use guidance, no prerequisites such as required permissions, and no alternatives. At best, 'Transfer a website to a user or team' implies the ownership-change scenario, but an agent must infer all operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_annotationB
Replace an annotation's date, note and all-day flag (Umami 3.4+)
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | ISO date (YYYY-MM-DD) or timestamp with timezone | |
| note | Yes | ||
| allDay | No | ||
| websiteId | Yes | ||
| annotationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does add real value by signaling full-replacement semantics (not a partial update) and a version gate ('Umami 3.4+'), but it says nothing about required permissions, what happens if the annotation doesn't exist, or whether the operation is destructive/irreversible.
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?
A single front-loaded sentence with no filler; the parenthetical version note is the only extra and it earns its place by signaling a compatibility constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-required-parameter mutation with no annotations and no output schema, the description covers the essentials (which fields, replace semantics, version requirement) but omits permissions, failure modes, and confirmation of what is returned. Adequate but with clear 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 only 20% (only 'date' is documented), so the description must compensate. It names three of the five parameters (date, note, all-day flag), but leaves websiteId and annotationId unaddressed and adds no clarification on allDay defaults or note constraints beyond the schema's min/maxLength.
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 names a specific verb ('Replace') and resource ('annotation') and enumerates the fields it touches (date, note, all-day flag), so it is clearly distinct from create_annotation, delete_annotation, and get_annotation. It stops short of explicitly disambiguating itself from those siblings by name.
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?
There is no statement of when to use this rather than create_annotation, get_annotation, or delete_annotation, and no prerequisites are given. The word 'Replace' weakly implies a full overwrite rather than a partial patch, but the agent must infer that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_boardD
Update an Umami board
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | No | ||
| boardId | Yes | ||
| parameters | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, yet it says nothing beyond the title. It does not state whether this is a partial or full replacement update, what happens to omitted fields, whether permissions or ownership are required, or that boardId is mandatory. For a mutation tool with zero annotation coverage this is a serious gap.
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 single sentence contains no filler, but it is under-specified rather than concise; there is no front-loaded substance for an agent to act on. Brevity here reflects missing content, not efficiency.
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?
With 5 parameters, a nested free-form object, no output schema, no annotations, and 0% schema coverage, the description should explain update semantics and the shape of 'parameters'. It supplies none of that, leaving the agent unable to call the tool correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, including an open-ended nested 'parameters' object and an enum for 'type'. The description adds no meaning to any of them — not the UUID format of boardId, not allowed values, not the structure expected in the nested object.
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 names a specific verb ('Update') and resource ('Umami board'), which is enough to know it mutates an existing board. It does not specify which board attributes can be changed, nor does it distinguish it from related siblings like clone_board or create_board beyond the verb. Purpose is identifiable but skeletal.
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?
There is no guidance on when to use this instead of create_board, clone_board, or get_board, and no prerequisites are mentioned. An agent must infer from the name alone that this is for modifying an existing board identified by boardId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_linkC
Update a tracked link
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| name | No | ||
| slug | No | ||
| linkId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full burden of behavioral disclosure, yet it only implies mutation via the word 'Update'. It doesn't say whether changes are partial, whether the slug must be unique, what permissions are needed, or what happens to unspecified fields.
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?
A single short sentence is not conciseness here — it is under-specification for a four-parameter mutation tool. Nothing is front-loaded beyond the bare verb and resource, and no sentence earns its place by adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and zero parameter descriptions, the definition is far too thin. An agent would have to guess the update semantics, which fields are writable, and what a successful response looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds nothing about the four parameters (url, name, slug, linkId). An agent gets only type and length constraints from the schema, with no explanation of which fields are optional, how the slug is validated, or what linkId refers to.
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?
States a clear verb (Update) and resource (a tracked link), so an agent can tell it mutates an existing link rather than creating or deleting one. It does not differentiate itself from siblings like create_link, get_link, or delete_link beyond the verb, leaving field-level scope unclear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus create_link or get_link, no prerequisites, and no mention of whether the operation is a partial or full update. The agent must infer all of this from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_my_passwordA
Update the current user's password (self-hosted Umami only; Cloud API keys cannot call this route)
| Name | Required | Description | Default |
|---|---|---|---|
| newPassword | Yes | New password (minimum 8 characters) | |
| currentPassword | Yes | Current password |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the platform/credential restriction, but does not say whether the mutation invalidates existing sessions/tokens, whether the current password is verified server-side, or what a successful response looks like. Meaningful but incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler. The platform restriction is presented immediately after the core action, so the agent gets the key constraint without scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter password update with full schema coverage, the description covers the critical availability constraint. Remaining gaps, such as session invalidation and auth prerequisites, are modest given the tool's simplicity.
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%, so both parameters (currentPassword, newPassword with minLength 8) are already documented in the schema. The description adds no parameter-level meaning beyond what the structured schema provides, so baseline 3 applies.
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?
States a specific verb and resource ('Update the current user's password') with a self-scoped qualifier that distinguishes it from admin-oriented siblings like update_user. It does not explicitly name an alternative tool, but the 'my/current user' framing makes the audience clear.
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?
Provides an explicit usage constraint: self-hosted Umami only, and Cloud API keys cannot call this route. That is a genuine when-not condition. It stops short of stating preconditions such as authentication requirements or alternatives for cloud users.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pixelC
Update a tracking pixel
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| slug | No | ||
| pixelId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and discloses almost nothing. It does not say whether the update is partial or full-replacement (e.g. whether omitting `slug` clears it), whether auth/ownership is required, or whether changes are reversible — all material for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four words, front-loaded, zero padding — but that brevity is under-specification rather than economy. There is nothing to trim, yet nothing was added either.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is structurally simple (flat, 3 params, 1 required, no output schema), so it does not need a long description — but for a mutation tool with zero annotation coverage and zero schema descriptions, an agent still cannot determine what is updatable or what response to expect. It falls short of the minimum needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does not: neither `pixelId` (the sole required field) nor the mutable `name`/`slug` fields are mentioned. The schema's minLength/maxLength constraints on slug are also unexplained (e.g. why 8 chars minimum).
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?
States a specific verb ("Update") and resource ("tracking pixel"), so the agent knows the action class. But it gives no indication of which attributes are mutable or how this differs from sibling mutators like update_website or update_link beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus create_pixel, get_pixel, or delete_pixel, and no stated prerequisites such as required permissions or ownership. The agent must infer everything from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_reportC
Update an existing saved report
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Report name | |
| type | Yes | Report type | |
| reportId | Yes | Report UUID | |
| websiteId | Yes | Website UUID | |
| parameters | Yes | Report-specific parameters (JSON object) | |
| description | No | Report description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden and discloses almost nothing. It does not say whether this is a full replacement (all five required params suggest the whole report definition is overwritten, so omitted optional fields like `description` may be cleared) or whether write access to the owning website is required, and there is no mention of side effects such as invalidating cached run results.
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?
A single six-word sentence with zero waste, but that length comes from under-specification rather than discipline. For a six-parameter mutation with a nested free-form object, the size is inappropriate to 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?
Six parameters, five required, a nested open object, no annotations, and no output schema — this definition should explain replacement semantics, the websiteId scope requirement, and how `parameters` relates to `type`, and it explains none of them. An agent could call it correctly only by guessing at the semantics of the nested object.
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%, so the schema already documents each parameter and the baseline is 3. The description adds no meaning beyond it — notably it never explains the type-to-`parameters` coupling (the free-form JSON object must be shaped according to the chosen `type` enum), which is the one thing the schema cannot express.
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?
"Update an existing saved report" names a verb and a resource and, via the word "existing" plus "saved," rules out create_report and run_report. Beyond that it adds nothing the tool name doesn't already convey: it never says which fields are mutable or whether the update replaces or merges the stored definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance, and no sibling is named as an alternative (create_report, delete_report, run_report, get_report all go unmentioned). An agent must infer from the name alone that this is for modifying an already-persisted report rather than generating or executing one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_segmentC
Update a saved segment or cohort
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| segmentId | Yes | ||
| websiteId | Yes | ||
| parameters | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure, and it says nothing about permissions, whether this is a partial or full replacement update, whether the segment type can change, or what side effects occur. The single word 'Update' implies mutation but discloses no mutation semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. However, for a complex nested mutation tool it is too sparse, and its brevity reflects under-specification rather than disciplined conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a five-parameter, nested-object mutation tool with no annotations, no output schema, and zero schema description coverage. The description supplies none of the additional context an agent would need about required identifiers, parameter structure, or update behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five required parameters including deeply nested filters, sessionPropertyFilters, and action objects. The description adds no information about any parameter, its format, or how the nested parameters combine, so the agent gets no semantic help beyond raw schema structure.
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 pairs the verb 'Update' with the specific resource 'saved segment or cohort', making the tool's basic operation clear and distinguishing the two supported entity types. It does not, however, differentiate this tool from nearby siblings such as create_segment, get_segment, or delete_segment.
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?
There is no guidance on when to use update_segment versus create_segment, get_segment, or delete_segment. The only implicit cue is the word 'Update', leaving the agent to infer prerequisites and appropriate contexts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_teamB
Update a team's name or access code
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New team name | |
| teamId | Yes | Team UUID | |
| accessCode | No | New access code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It doesn't disclose whether the update is partial or requires specific permissions, whether changes are reversible, or what happens if only one field is provided. This is a mutation tool, so these omissions are significant.
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?
A single, front-loaded sentence with no wasted words. It is appropriately sized for a simple update tool.
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 low complexity (3 params) and full schema coverage, the description provides the basic purpose but fails to cover behavioral aspects like permissions or partial update semantics. Without annotations, more context would be expected for a mutation tool, leaving a moderate 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 each parameter is already documented. The description adds marginal value by naming the two updatable fields, but doesn't provide format, constraints, or behavior beyond the schema, so 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?
The description states a specific verb (update) and resource (team's name or access code), clearly distinguishing it from create_team, delete_team, and update_team_user. However, it doesn't explicitly mention the required teamId parameter or name a sibling alternative for clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like update_team_user or create_team. The description merely states the action without any context about prerequisites or scenarios, leaving usage entirely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_team_userC
Update a team member's role
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | New team role | |
| teamId | Yes | Team UUID | |
| userId | Yes | User UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosure. It says nothing about permission requirements (admin/manager), whether the change is reversible, what happens to a demoted user's access, or what the response contains — all critical for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no waste; nothing is buried. It is terse to the point of under-specification, but every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is complete and enum-constrained and there is no output schema, but for an unannotated mutation tool the description leaves out authorization context, side effects of role changes, and any notion of failure modes. It is barely adequate rather than complete.
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 teamId/userId documented as UUIDs and role carrying an enum of team-member, team-view-only, team-manager, so the schema does the heavy lifting. The description confirms that only the role is being changed but adds no format or semantics 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?
The description gives a specific verb and resource ('Update a team member's role') and even narrows the scope to the role field, so the agent knows this is not a general member edit. It does not explicitly distinguish itself from siblings like update_team, update_user, or add_team_user, but the 'team member' + 'role' framing is unambiguous.
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?
There is no guidance on when to use this versus add_team_user (to add), remove_team_user (to remove), or get_team_user (to inspect). No prerequisites such as required permissions or the fact that the user must already be a team member are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_userB
Update a user's username, password, or role (admin only)
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | New role | |
| userId | Yes | User UUID | |
| password | No | New password | |
| username | No | New username |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions an admin restriction, which is useful, but does not clarify whether that restriction applies to role changes only, whether username/password changes are self-service, whether changes are reversible, or what happens on validation failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted text. The ambiguous placement of '(admin only)' is the main structural weakness, but overall it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is too sparse. It does not explain permission requirements clearly, side effects, whether self-update is allowed, or expected outcomes, leaving an agent with significant gaps before calling it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including the role enum and string constraints. The description adds only a high-level list of fields and no additional syntax, format, or behavioral detail beyond the schema baseline.
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 states a specific verb and resource ('Update a user') and enumerates the editable fields (username, password, role), so the tool's purpose is immediately clear. It does not explicitly differentiate itself from nearby tools like update_my_password or update_team_user, which keeps it from a 5.
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 parenthetical '(admin only)' gives some usage guidance, but it is ambiguous whether the entire tool is admin-restricted or only the role update is. There is no explicit guidance on when to use this instead of update_my_password or update_team_user.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_websiteC
Update an existing website's configuration
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name | |
| domain | No | New domain | |
| shareId | No | Share ID (set to null to remove) | |
| websiteId | Yes | Website UUID | |
| replayConfig | No | Session replay and heatmap collection settings |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral-disclosure burden. It does not explain whether the update is partial or full, whether omitted fields remain unchanged, what permissions are required, or what happens when nested replayConfig values are modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It is appropriately concise, though its brevity contributes to the lack of behavioral and usage detail elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a nested replayConfig object, no annotations, and no output schema, the description is too thin. It does not cover update semantics, permission requirements, or the effect of modifying replay and heatmap settings.
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%, so the schema already documents the five parameters, including the nested replayConfig settings. The description adds no parameter-level meaning beyond the schema, which is acceptable at the baseline of 3 when the schema does the heavy lifting.
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 states a specific verb and resource: update an existing website's configuration. It is clear enough for an agent to identify the operation, but it does not distinguish this from sibling website-management tools such as update_share, reset_website, or delete_website.
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?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The only implied usage is that the website already exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_authB
Verify the current authentication token is valid
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose what happens when the token is invalid (e.g., returns false vs. throws error) or any side effects. With no annotations, the description bears full responsibility for transparency, but it is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that wastes no words. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is minimal but covers the core purpose. However, it could mention the return type or that the tool is read-only to be fully complete.
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?
There are zero parameters, so the baseline is 4. The description adds no additional semantics beyond the schema, but none are needed given the absence of 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 verifies the current authentication token, using a specific verb and resource. However, it does not distinguish how this differs from similar tools like get_me, which might also involve auth state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. Given the many sibling tools that likely require authentication, explicit usage context would be helpful.
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.
124 tool updates
v2.1.1- Changed
add_team_user4 fields changed- changed
Input schema / properties / role / descriptionPrevious value: -"Role in the team: 'team-owner' or 'team-member'"New value: +"Role in the team" - added
Input schema / properties / role / enumAdded value: +[ + "team-member", + "team-view-only", + "team-manager" +] - added
Input schema / properties / teamId / formatAdded value: +"uuid" - added
Input schema / properties / userId / formatAdded value: +"uuid"
- Removed
add_team_website - Changed
batch_events8 fields changed- added
Input schema / properties / events / items / properties / distinctIdAdded value: +{ + "type": "string" +} - added
Input schema / properties / events / items / properties / ipAdded value: +{ + "description": "Client IP for trusted server-side collection", + "type": "string" +} - added
Input schema / properties / events / items / properties / screenAdded value: +{ + "type": "string" +} - added
Input schema / properties / events / items / properties / tagAdded value: +{ + "type": "string" +} - added
Input schema / properties / events / items / properties / timestampAdded value: +{ + "description": "Unix timestamp in seconds", + "type": "integer" +} - added
Input schema / properties / events / items / properties / userAgentAdded value: +{ + "description": "Client user agent", + "type": "string" +} - added
Input schema / properties / events / maxItemsAdded value: +500 - added
Input schema / properties / events / minItemsAdded value: +1
- Added
cancel_two_factor_setup - Added
clone_board - Added
complete_two_factor_login - Added
confirm_two_factor_setup - Added
create_annotation - Added
create_board - Added
create_link - Added
create_pixel - Changed
create_report5 fields changed- added
Input schema / properties / description / maxLengthAdded value: +500 - added
Input schema / properties / name / maxLengthAdded value: +200 - changed
Input schema / properties / type / enumPrevious value: -[ - "funnel", - "retention", - "utm", - "goals", - "insights", - "revenue", - "journey", - "attribution" -]New value: +[ + "attribution", + "breakdown", + "funnel", + "goal", + "heatmap", + "journey", + "performance", + "retention", + "revenue", + "utm" +] - added
Input schema / properties / websiteId / formatAdded value: +"uuid" - changed
Input schema / requiredPrevious value: -[ - "websiteId", - "name", - "type" -]New value: +[ + "websiteId", + "name", + "type", + "parameters" +]
- Added
create_segment - Added
create_share - Changed
create_team1 field changed- added
Input schema / properties / name / maxLengthAdded value: +50
- Changed
create_user6 fields changed- added
Input schema / properties / password / maxLengthAdded value: +255 - added
Input schema / properties / password / minLengthAdded value: +8 - changed
Input schema / properties / role / descriptionPrevious value: -"User role: 'admin' or 'user' (default: 'user')"New value: +"User role" - added
Input schema / properties / role / enumAdded value: +[ + "admin", + "user", + "view-only" +] - added
Input schema / properties / username / maxLengthAdded value: +255 - changed
Input schema / requiredPrevious value: -[ - "username", - "password" -]New value: +[ + "username", + "password", + "role" +]
- Changed
create_website1 field changed- added
Input schema / properties / teamIdAdded value: +{ + "description": "Create the website under this team", + "format": "uuid", + "type": "string" +}
- Added
create_website_share - Added
delete_annotation - Added
delete_board - Added
delete_link - Added
delete_pixel - Changed
delete_report1 field changed- added
Input schema / properties / reportId / formatAdded value: +"uuid"
- Added
delete_segment - Added
delete_session - Added
delete_share - Changed
delete_team1 field changed- added
Input schema / properties / teamId / formatAdded value: +"uuid"
- Changed
delete_user1 field changed- added
Input schema / properties / userId / formatAdded value: +"uuid"
- Added
disable_two_factor - Added
export_website - Added
get_annotation - Added
get_board - Added
get_event_data_by_id - Changed
get_event_data_events3 fields changed- added
Input schema / properties / eventAdded value: +{ + "description": "Filter by event name", + "type": "string" +} - removed
Input schema / properties / eventNameRemoved value: -{ - "description": "Filter by event name", - "type": "string" -} - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional current Umami filter fields", + "type": "object" +}
- Changed
get_event_data_fields1 field changed- added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional current Umami filter fields", + "type": "object" +}
- Added
get_event_data_properties - Changed
get_event_data_stats3 fields changed- added
Input schema / properties / eventAdded value: +{ + "description": "Filter by event name", + "type": "string" +} - removed
Input schema / properties / eventNameRemoved value: -{ - "description": "Filter by event name", - "type": "string" -} - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional current Umami filter fields", + "type": "object" +}
- Changed
get_event_data_values4 fields changed- added
Input schema / properties / dataTypeAdded value: +{ + "description": "Optional Umami data type code", + "type": "integer" +} - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional current Umami filter fields", + "type": "object" +} - changed
Input schema / properties / propertyName / descriptionPrevious value: -"Filter by property name"New value: +"Property name to aggregate" - changed
Input schema / requiredPrevious value: -[ - "websiteId", - "startAt", - "endAt" -]New value: +[ + "websiteId", + "startAt", + "endAt", + "propertyName" +]
- Changed
get_event_series10 fields changed- added
Input schema / properties / eventAdded value: +{ + "description": "Filter by event name", + "type": "string" +} - removed
Input schema / properties / eventNameRemoved value: -{ - "description": "Filter by event name", - "type": "string" -} - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort", + "type": "object" +} - added
Input schema / properties / limitAdded value: +{ + "exclusiveMinimum": 0, + "type": "integer" +} - added
Input schema / properties / pathAdded value: +{ + "description": "Filter by URL path", + "type": "string" +} - changed
Input schema / properties / timezone / descriptionPrevious value: -"Timezone (e.g. 'Asia/Seoul')"New value: +"IANA timezone (e.g. 'Asia/Seoul')" - changed
Input schema / properties / unit / descriptionPrevious value: -"Time grouping unit"New value: +"Time grouping unit supported by Umami v3" - changed
Input schema / properties / unit / enumPrevious value: -[ - "hour", - "day", - "week", - "month", - "year" -]New value: +[ + "minute", + "hour", + "day", + "month", + "year" +] - removed
Input schema / properties / urlRemoved value: -{ - "description": "Filter by URL path", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "websiteId", - "startAt", - "endAt", - "unit" -]New value: +[ + "websiteId", + "startAt", + "endAt", + "timezone" +]
- Changed
get_event_values4 fields changed- added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional current Umami filter fields", + "type": "object" +} - added
Input schema / properties / searchAdded value: +{ + "description": "Search returned values", + "type": "string" +} - added
Input schema / properties / typeAdded value: +{ + "description": "Property dimension whose values should be returned", + "enum": [ + "path", + "referrer", + "title", + "query", + "os", + "browser", + "device", + "country", + "region", + "city", + "tag", + "hostname", + "distinctId", + "language", + "event", + "utmSource", + "utmMedium", + "utmCampaign", + "utmContent", + "utmTerm" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "websiteId", - "startAt", - "endAt" -]New value: +[ + "websiteId", + "startAt", + "endAt", + "type" +]
- Changed
get_events11 fields changed- added
Input schema / properties / eventAdded value: +{ + "description": "Filter by event name", + "type": "string" +} - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort", + "type": "object" +} - added
Input schema / properties / maxResultsAdded value: +{ + "exclusiveMinimum": 0, + "type": "integer" +} - added
Input schema / properties / pageAdded value: +{ + "exclusiveMinimum": 0, + "type": "integer" +} - added
Input schema / properties / pageSizeAdded value: +{ + "exclusiveMinimum": 0, + "type": "integer" +} - added
Input schema / properties / pathAdded value: +{ + "description": "Filter by URL path", + "type": "string" +} - added
Input schema / properties / searchAdded value: +{ + "description": "Free-text search", + "type": "string" +} - removed
Input schema / properties / timezoneRemoved value: -{ - "description": "Timezone (e.g. 'Asia/Seoul')", - "type": "string" -} - removed
Input schema / properties / unitRemoved value: -{ - "description": "Time grouping unit", - "enum": [ - "hour", - "day", - "week", - "month", - "year" - ], - "type": "string" -} - removed
Input schema / properties / urlRemoved value: -{ - "description": "Filter by URL path", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "websiteId", - "startAt", - "endAt", - "unit" -]New value: +[ + "websiteId", + "startAt", + "endAt" +]
- Added
get_link - Added
get_link_charts - Changed
get_metrics6 fields changed- added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort", + "type": "object" +} - added
Input schema / properties / offsetAdded value: +{ + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / pathAdded value: +{ + "description": "Filter by URL path", + "type": "string" +} - added
Input schema / properties / searchAdded value: +{ + "description": "Search metric values", + "type": "string" +} - changed
Input schema / properties / type / enumPrevious value: -[ - "url", - "referrer", - "browser", - "os", - "device", - "country", - "region", - "city", - "language", - "event", - "query", - "title", - "host", - "tag" -]New value: +[ + "path", + "fullPath", + "entry", + "exit", + "referrer", + "domain", + "browser", + "os", + "device", + "screen", + "country", + "region", + "city", + "language", + "distinctId", + "event", + "query", + "title", + "hostname", + "tag", + "utmSource", + "utmMedium", + "utmCampaign", + "utmContent", + "utmTerm", + "channel" +] - removed
Input schema / properties / urlRemoved value: -{ - "description": "Filter by URL path", - "type": "string" -}
- Changed
get_my_teams3 fields changed- added
Input schema / properties / orderByAdded value: +{ + "description": "Sort field", + "type": "string" +} - removed
Input schema / properties / queryRemoved value: -{ - "description": "Search query to filter teams", - "type": "string" -} - added
Input schema / properties / sortDescendingAdded value: +{ + "type": "boolean" +}
- Changed
get_my_websites4 fields changed- added
Input schema / properties / includeTeamsAdded value: +{ + "description": "Include team-accessible websites", + "type": "boolean" +} - added
Input schema / properties / orderByAdded value: +{ + "description": "Sort field", + "type": "string" +} - removed
Input schema / properties / queryRemoved value: -{ - "description": "Search query to filter websites", - "type": "string" -} - added
Input schema / properties / sortDescendingAdded value: +{ + "type": "boolean" +}
- Changed
get_pageviews6 fields changed- added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort", + "type": "object" +} - added
Input schema / properties / pathAdded value: +{ + "description": "Filter by URL path", + "type": "string" +} - changed
Input schema / properties / unit / descriptionPrevious value: -"Time grouping unit"New value: +"Time grouping unit supported by Umami v3" - changed
Input schema / properties / unit / enumPrevious value: -[ - "hour", - "day", - "week", - "month", - "year" -]New value: +[ + "minute", + "hour", + "day", + "month", + "year" +] - removed
Input schema / properties / urlRemoved value: -{ - "description": "Filter by URL path", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "websiteId", - "startAt", - "endAt", - "unit" -]New value: +[ + "websiteId", + "startAt", + "endAt" +]
- Added
get_pixel - Added
get_pixel_charts - Changed
get_realtime6 fields changed- added
Input schema / properties / countryAdded value: +{ + "type": "string" +} - added
Input schema / properties / deviceAdded value: +{ + "type": "string" +} - added
Input schema / properties / eventAdded value: +{ + "type": "string" +} - added
Input schema / properties / pathAdded value: +{ + "type": "string" +} - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone", + "type": "string" +} - added
Input schema / properties / unitAdded value: +{ + "enum": [ + "minute", + "hour", + "day", + "month", + "year" + ], + "type": "string" +}
- Added
get_recorder_config - Added
get_replay - Added
get_replay_saved_status - Changed
get_report1 field changed- added
Input schema / properties / reportId / formatAdded value: +"uuid"
- Added
get_revenue_chart - Added
get_revenue_metrics - Added
get_revenue_sessions - Added
get_revenue_stats - Added
get_segment - Changed
get_session_activity4 fields changed- added
Input schema / properties / distinctIdAdded value: +{ + "description": "Optional linked distinct ID", + "type": "string" +} - added
Input schema / properties / endAtAdded value: +{ + "description": "End timestamp in milliseconds", + "type": "number" +} - added
Input schema / properties / startAtAdded value: +{ + "description": "Start timestamp in milliseconds", + "type": "number" +} - changed
Input schema / requiredPrevious value: -[ - "websiteId", - "sessionId" -]New value: +[ + "websiteId", + "sessionId", + "startAt", + "endAt" +]
- Changed
get_session_data_properties2 fields changed- added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional current Umami filter fields", + "type": "object" +} - added
Input schema / properties / propertyNameAdded value: +{ + "description": "Optional property name", + "type": "string" +}
- Changed
get_session_data_values2 fields changed- added
Input schema / properties / dataTypeAdded value: +{ + "description": "Optional Umami data type code", + "type": "integer" +} - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional current Umami filter fields", + "type": "object" +}
- Changed
get_session_stats3 fields changed- added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort", + "type": "object" +} - added
Input schema / properties / pathAdded value: +{ + "description": "Filter by URL path", + "type": "string" +} - removed
Input schema / properties / urlRemoved value: -{ - "description": "Filter by URL path", - "type": "string" -}
- Changed
get_sessions7 fields changed- added
Input schema / properties / distinctIdAdded value: +{ + "description": "Filter by distinct ID", + "type": "string" +} - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort", + "type": "object" +} - added
Input schema / properties / maxResultsAdded value: +{ + "exclusiveMinimum": 0, + "type": "integer" +} - removed
Input schema / properties / orderByRemoved value: -{ - "description": "Field to order by", - "type": "string" -} - added
Input schema / properties / pathAdded value: +{ + "description": "Filter by URL path", + "type": "string" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Search query"New value: +"Filter by URL query string" - added
Input schema / properties / searchAdded value: +{ + "description": "Free-text session search", + "type": "string" +}
- Changed
get_sessions_weekly3 fields changed- added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort", + "type": "object" +} - added
Input schema / properties / timezoneAdded value: +{ + "description": "IANA timezone (e.g. 'Asia/Seoul')", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "websiteId", - "startAt", - "endAt" -]New value: +[ + "websiteId", + "startAt", + "endAt", + "timezone" +]
- Changed
get_share3 fields changed- removed
Input schema / properties / shareIdRemoved value: -{ - "description": "The share ID of a publicly shared website", - "type": "string" -} - added
Input schema / properties / slugAdded value: +{ + "description": "Public share slug", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "shareId" -]New value: +[ + "slug" +]
- Added
get_share_by_id - Changed
get_stats6 fields changed- added
Input schema / properties / eventAdded value: +{ + "description": "Filter by event name", + "type": "string" +} - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "number", + "boolean" + ] + }, + "description": "Additional Umami v3 filters such as country, device, browser, tag, UTM fields, segment, or cohort", + "type": "object" +} - added
Input schema / properties / hostnameAdded value: +{ + "description": "Filter by hostname", + "type": "string" +} - added
Input schema / properties / pathAdded value: +{ + "description": "Filter by URL path", + "type": "string" +} - added
Input schema / properties / segmentAdded value: +{ + "description": "Saved segment UUID", + "format": "uuid", + "type": "string" +} - removed
Input schema / properties / urlRemoved value: -{ - "description": "Filter by URL path", - "type": "string" -}
- Changed
get_team1 field changed- added
Input schema / properties / teamId / formatAdded value: +"uuid"
- Changed
get_team_user2 fields changed- added
Input schema / properties / teamId / formatAdded value: +"uuid" - added
Input schema / properties / userId / formatAdded value: +"uuid"
- Added
get_two_factor_status - Changed
get_user1 field changed- added
Input schema / properties / userId / formatAdded value: +"uuid"
- Changed
get_user_teams4 fields changed- added
Input schema / properties / orderByAdded value: +{ + "type": "string" +} - removed
Input schema / properties / queryRemoved value: -{ - "description": "Search query to filter teams", - "type": "string" -} - added
Input schema / properties / sortDescendingAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / userId / formatAdded value: +"uuid"
- Added
get_user_two_factor_status - Removed
get_user_usage - Changed
get_user_websites6 fields changed- added
Input schema / properties / includeTeamsAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / orderByAdded value: +{ + "type": "string" +} - removed
Input schema / properties / queryRemoved value: -{ - "description": "Search query to filter websites", - "type": "string" -} - added
Input schema / properties / searchAdded value: +{ + "description": "Search query to filter websites", + "type": "string" +} - added
Input schema / properties / sortDescendingAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / userId / formatAdded value: +"uuid"
- Added
get_website_charts - Added
initiate_two_factor_setup - Added
list_admin_teams - Added
list_admin_websites - Added
list_annotations - Added
list_boards - Added
list_entity_shares - Added
list_links - Added
list_pixels - Added
list_replays - Changed
list_reports4 fields changed- removed
Input schema / properties / orderByRemoved value: -{ - "description": "Field to order by", - "type": "string" -} - added
Input schema / properties / typeAdded value: +{ + "description": "Optional report type filter", + "enum": [ + "attribution", + "breakdown", + "funnel", + "goal", + "heatmap", + "journey", + "performance", + "retention", + "revenue", + "utm" + ], + "type": "string" +} - added
Input schema / properties / websiteIdAdded value: +{ + "description": "Website UUID", + "format": "uuid", + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "websiteId" +]
- Added
list_saved_replays - Added
list_segments - Added
list_session_replays - Added
list_team_boards - Added
list_team_links - Added
list_team_pixels - Changed
list_team_users3 fields changed- removed
Input schema / properties / queryRemoved value: -{ - "description": "Search query to filter members", - "type": "string" -} - added
Input schema / properties / searchAdded value: +{ + "description": "Search query to filter members", + "type": "string" +} - added
Input schema / properties / teamId / formatAdded value: +"uuid"
- Changed
list_team_websites5 fields changed- added
Input schema / properties / orderByAdded value: +{ + "type": "string" +} - removed
Input schema / properties / queryRemoved value: -{ - "description": "Search query to filter websites", - "type": "string" -} - added
Input schema / properties / searchAdded value: +{ + "description": "Search query to filter websites", + "type": "string" +} - added
Input schema / properties / sortDescendingAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / teamId / formatAdded value: +"uuid"
- Changed
list_teams2 fields changed- removed
Input schema / properties / queryRemoved value: -{ - "description": "Search query to filter teams", - "type": "string" -} - added
Input schema / properties / sortDescendingAdded value: +{ + "type": "boolean" +}
- Changed
list_users3 fields changed- removed
Input schema / properties / queryRemoved value: -{ - "description": "Search query to filter users", - "type": "string" -} - added
Input schema / properties / searchAdded value: +{ + "description": "Search query to filter users", + "type": "string" +} - added
Input schema / properties / sortDescendingAdded value: +{ + "type": "boolean" +}
- Added
list_website_shares - Changed
list_websites4 fields changed- added
Input schema / properties / includeTeamsAdded value: +{ + "description": "Include team-accessible websites", + "type": "boolean" +} - removed
Input schema / properties / queryRemoved value: -{ - "description": "Search query to filter websites", - "type": "string" -} - added
Input schema / properties / searchAdded value: +{ + "description": "Search query to filter websites", + "type": "string" +} - added
Input schema / properties / sortDescendingAdded value: +{ + "type": "boolean" +}
- Changed
remove_team_user2 fields changed- added
Input schema / properties / teamId / formatAdded value: +"uuid" - added
Input schema / properties / userId / formatAdded value: +"uuid"
- Removed
remove_team_website - Added
reset_user_two_factor - Changed
run_report3 fields changed- added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": {}, + "default": {}, + "description": "Current Umami filter object; use {} for no filters", + "type": "object" +} - changed
Input schema / properties / type / enumPrevious value: -[ - "funnel", - "retention", - "utm", - "goals", - "insights", - "revenue", - "journey", - "attribution" -]New value: +[ + "attribution", + "breakdown", + "funnel", + "goal", + "heatmap", + "journey", + "performance", + "retention", + "revenue", + "utm" +] - added
Input schema / properties / websiteId / formatAdded value: +"uuid"
- Changed
send_event6 fields changed- added
Input schema / properties / distinctIdAdded value: +{ + "description": "Stable user identifier", + "type": "string" +} - added
Input schema / properties / ipAdded value: +{ + "description": "Client IP for trusted server-side collection", + "type": "string" +} - added
Input schema / properties / screenAdded value: +{ + "description": "Screen dimensions (e.g. 1920x1080)", + "type": "string" +} - added
Input schema / properties / tagAdded value: +{ + "description": "Event tag", + "type": "string" +} - added
Input schema / properties / timestampAdded value: +{ + "description": "Unix timestamp in seconds", + "type": "integer" +} - added
Input schema / properties / userAgentAdded value: +{ + "description": "Client user agent", + "type": "string" +}
- Added
send_identify - Added
send_link_or_pixel_event - Added
send_performance - Added
set_global_two_factor_requirement - Added
set_replay_saved - Added
set_team_two_factor_requirement - Added
set_user_two_factor_requirement - Changed
transfer_website4 fields changed- added
Input schema / properties / destinationIdAdded value: +{ + "description": "Target user or team UUID", + "format": "uuid", + "type": "string" +} - added
Input schema / properties / destinationTypeAdded value: +{ + "enum": [ + "user", + "team" + ], + "type": "string" +} - removed
Input schema / properties / userIdRemoved value: -{ - "description": "Target user UUID to transfer ownership to", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "websiteId", - "userId" -]New value: +[ + "websiteId", + "destinationType", + "destinationId" +]
- Added
update_annotation - Added
update_board - Added
update_link - Changed
update_my_password2 fields changed- changed
Input schema / properties / newPassword / descriptionPrevious value: -"New password"New value: +"New password (minimum 8 characters)" - added
Input schema / properties / newPassword / minLengthAdded value: +8
- Added
update_pixel - Changed
update_report6 fields changed- added
Input schema / properties / description / maxLengthAdded value: +500 - added
Input schema / properties / name / maxLengthAdded value: +200 - added
Input schema / properties / reportId / formatAdded value: +"uuid" - changed
Input schema / properties / type / enumPrevious value: -[ - "funnel", - "retention", - "utm", - "goals", - "insights", - "revenue", - "journey", - "attribution" -]New value: +[ + "attribution", + "breakdown", + "funnel", + "goal", + "heatmap", + "journey", + "performance", + "retention", + "revenue", + "utm" +] - added
Input schema / properties / websiteId / formatAdded value: +"uuid" - changed
Input schema / requiredPrevious value: -[ - "reportId" -]New value: +[ + "reportId", + "websiteId", + "name", + "type", + "parameters" +]
- Added
update_segment - Added
update_share - Changed
update_team4 fields changed- added
Input schema / properties / accessCodeAdded value: +{ + "description": "New access code", + "maxLength": 50, + "type": "string" +} - added
Input schema / properties / name / maxLengthAdded value: +50 - added
Input schema / properties / teamId / formatAdded value: +"uuid" - changed
Input schema / requiredPrevious value: -[ - "teamId", - "name" -]New value: +[ + "teamId" +]
- Changed
update_team_user4 fields changed- changed
Input schema / properties / role / descriptionPrevious value: -"New role: 'team-owner' or 'team-member'"New value: +"New team role" - added
Input schema / properties / role / enumAdded value: +[ + "team-member", + "team-view-only", + "team-manager" +] - added
Input schema / properties / teamId / formatAdded value: +"uuid" - added
Input schema / properties / userId / formatAdded value: +"uuid"
- Changed
update_user6 fields changed- added
Input schema / properties / password / maxLengthAdded value: +255 - added
Input schema / properties / password / minLengthAdded value: +8 - changed
Input schema / properties / role / descriptionPrevious value: -"New role: 'admin' or 'user'"New value: +"New role" - added
Input schema / properties / role / enumAdded value: +[ + "admin", + "user", + "view-only" +] - added
Input schema / properties / userId / formatAdded value: +"uuid" - added
Input schema / properties / username / maxLengthAdded value: +255
- Changed
update_website2 fields changed- added
Input schema / properties / replayConfigAdded value: +{ + "additionalProperties": false, + "description": "Session replay and heatmap collection settings", + "properties": { + "blockSelector": { + "type": "string" + }, + "heatmapEnabled": { + "type": "boolean" + }, + "heatmapSampleRate": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "maskLevel": { + "enum": [ + "strict", + "moderate" + ], + "type": "string" + }, + "maxDuration": { + "exclusiveMinimum": 0, + "type": "integer" + }, + "replayEnabled": { + "type": "boolean" + }, + "sampleRate": { + "maximum": 1, + "minimum": 0, + "type": "number" + } + }, + "type": "object" +} - changed
Input schema / properties / shareId / typePrevious value: -"string"New value: +[ + "string", + "null" +]
66 tool updates
v1.2.1- First observed
add_team_user - First observed
add_team_website - First observed
batch_events - First observed
create_report - First observed
create_team - First observed
create_user - First observed
create_website - First observed
delete_report - First observed
delete_team - First observed
delete_user - First observed
delete_website - First observed
get_active_visitors - First observed
get_daterange - First observed
get_event_data_events - First observed
get_event_data_fields - First observed
get_event_data_stats - First observed
get_event_data_values - First observed
get_event_series - First observed
get_event_values - First observed
get_events - First observed
get_me - First observed
get_metrics - First observed
get_my_teams - First observed
get_my_websites - First observed
get_pageviews - First observed
get_realtime - First observed
get_report - First observed
get_session - First observed
get_session_activity - First observed
get_session_data_properties - First observed
get_session_data_values - First observed
get_session_properties - First observed
get_session_stats - First observed
get_sessions - First observed
get_sessions_weekly - First observed
get_share - First observed
get_stats - First observed
get_team - First observed
get_team_user - First observed
get_user - First observed
get_user_teams - First observed
get_user_usage - First observed
get_user_websites - First observed
get_website - First observed
get_website_reports - First observed
heartbeat - First observed
join_team - First observed
list_reports - First observed
list_team_users - First observed
list_team_websites - First observed
list_teams - First observed
list_users - First observed
list_websites - First observed
remove_team_user - First observed
remove_team_website - First observed
reset_website - First observed
run_report - First observed
send_event - First observed
transfer_website - First observed
update_my_password - First observed
update_report - First observed
update_team - First observed
update_team_user - First observed
update_user - First observed
update_website - First observed
verify_auth
TDQS
Scored across 133 tools
The surface contains many closely related analytics-query tools whose boundaries are hard to infer from names alone: get_stats, get_pageviews, get_metrics, get_events, get_sessions, get_session_stats, get_sessions_weekly, get_event_series, get_realtime, and get_active_visitors all risk misselection. The get_event_data_* family (stats, values, fields, properties, events, by_id) is especially overlapping, and multiple share/replay tools have similarly ambiguous scopes.
Almost all tools use snake_case with a verb-first pattern (list_websites, create_report, delete_segment, get_revenue_stats), which is predictable. There are minor deviations such as heartbeat, batch_events, send_identify, and export_website, but they remain readable and do not undermine the convention.
At 133 tools this is far beyond a well-scoped MCP surface, even for a feature-rich analytics platform. The enormous set mixes core analytics, admin, 2FA, sharing, replays, revenue, and reporting into one overloaded interface, making tool selection difficult.
Coverage is broad and lifecycle-complete for most entities: websites, users, teams, reports, annotations, boards, links, pixels, segments, shares, and replays all have create/get/update/delete-style operations. Minor gaps may exist around some interactions, but the domain surface is substantially covered.
Maintenance
Related MCP Connectors
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
Hosted MCP server for DataLikers — Instagram & TikTok data API. 51 tools: Instagram user search by demographics (gender/age/race/country/city), profiles, bulk lookup, engagement, posts & reels, comments, hashtags, locations, stories, highlights, music, business accounts, top users; TikTok users, videos, comments, hashtags, playlists and top charts. Streamable HTTP, Bearer API key. Free tier: 100 requests on signup at https://datalikers.com/p/1by27bwg
MCP server for Statsig API - interact with Statsig's feature flags, experiments, and analytics
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
Related MCP Servers
- AlicenseCqualityCmaintenanceMCP server exposing Umami analytics (Cloud + self-hosted)5MIT
- AlicenseAqualityDmaintenanceRead-only MCP server for Umami analytics. It talks to the Umami REST API directly over HTTP, supporting self-hosted and cloud setups.89 npmMIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Umami Analytics that provides read-only tools to query website stats, events, sessions, reports, and more, enabling natural language analytics queries.9 npm3MIT
- AlicenseAqualityDmaintenanceA security-first MCP server for Umami analytics (Cloud and self-hosted v3) enabling analytics, reporting, and administration with least privilege and credential-safe design.329 npmMIT