Tracklution
Server Details
Connect AI assistants to Tracklution to install, configure and verify server-side conversion tracking, inspect tracking data, containers and connectors, and troubleshoot tracking setups. Hosted Streamable HTTP MCP server with OAuth authentication. Setup documentation: https://www.tracklution.com/agent-install/
- Status
- Healthy
- Uptime
- 98.1% over 36 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 28 tools
Several tools have overlapping purposes: get_event, list_events, query_events and search_events all return event data, while get_session, list_sessions, query_sessions and search_sessions all return session data. Descriptions explicitly label some as legacy or v1/v2 alternatives, but an agent must still choose among near-duplicates, and report tools (get_summary, get_report, run_report, run_realtime_report, list_standard_reports) require careful differentiation.
Tool names are consistently snake_case and are mostly verb-first (get_, list_, run_, search_, query_, create_, select_, verify_). The main minor deviation is semantic verb variance for the same resource (list_events vs query_events vs search_events), but the naming pattern remains predictable.
With 28 tools, the surface is heavy for an analytics and onboarding server, and part of the count comes from legacy duplicates such as query_events/query_sessions alongside search_events/search_sessions. While the domains are broad, the tool count exceeds a well-scoped set and makes selection harder.
The set covers container discovery, event and session search, summaries, reports, realtime reporting, dimensions/metrics, onboarding, verification, and API key inspection. Minor gaps exist around direct connector management and container update/delete, but core analytics and onboarding workflows are well covered.
Available Tools
28 toolscreate_login_linkCreate dashboard login linkADestructiveInspect
Creates a one-time dashboard login URL after setup, opening target_page. MAIN SERVER CONTAINERS ONLY: for a container on any other connected server the verify / next-steps response carries data.manual_handoff instead, and a call for a container just verified on another server is refused (container_pinned_to_other_server).
The URL is a single-use credential for the user. login_link_consume_disabled (HTTP 503) means the feature is off and the user signs in at https://app.tracklution.com. target_page: "dns" requires admin permission on the company; other target pages need view.
Not a data tool: analytics questions are answered by get_summary / get_report.
| Name | Required | Description | Default |
|---|---|---|---|
| auth_token | No | ||
| target_page | Yes | ||
| container_id | Yes | ||
| container_hash | No | SECRET: required when auth_token is omitted. See get_installation_scripts for the rationale. | |
| idempotency_key | Yes | ||
| expires_in_minutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| field | No | |
| errors | No | |
| status | No | |
| details | No | |
| warnings | No | |
| rate_limit | No | |
| http_status | No | |
| next_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (destructiveHint=true, idempotentHint=false), and the description goes well beyond them: the URL is a single-use credential, `login_link_consume_disabled`/HTTP 503 means the feature is disabled, and required permissions differ per target_page ('dns' needs admin, others need view). These are authorization and side-effect facts the agent cannot infer from the 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?
Front-loaded with the core action and scope, then error/permission caveats, then a sibling disclaimer. Dense but every sentence carries operational information; only the error-code granularity could be trimmed.
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?
An output schema exists, so return values need not be described. The description covers the scope restriction, error semantics and permission requirements, which is the important context for a credential-minting mutation. The residual gap is the undocumented non-`target_page` 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 only 17% across 6 parameters, so the description must carry weight. It usefully explains the `target_page` enum's permission implications, but says nothing about `idempotency_key`, `expires_in_minutes`, `container_id`, or `container_hash`, leaving most parameters to an undocumented 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 first sentence states a specific verb (creates), resource (one-time dashboard login URL) and the effect on `target_page`. It also explicitly disclaims a sibling role, saying it is 'Not a data tool: analytics questions are answered by get_summary / get_report', so an agent can separate it from the query_* and get_* 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?
It states the applicability precondition ('after setup'), a hard scope restriction ('MAIN SERVER CONTAINERS ONLY'), the failure mode on other servers (`container_pinned_to_other_server`) and the alternate path (`data.manual_handoff`). It stops just short of naming a sibling tool to call in the non-main-server case, but the routing context is unusually explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_api_key_infoShow API key infoARead-onlyInspect
API key inspection only — does NOT return any analytics data. Shows the key name, prefix, how many containers it can access, and when it expires, for every connected server.
USE WHEN:
The user asks "which account / key am I connected with?" or "when does my key expire?".
You hit an authorization error and need to confirm the key is still valid.
For any data question, skip this and go straight to get_summary or get_report.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| servers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/non-destructive, and the description adds value beyond them: it clarifies the output is diagnostic metadata, not analytics, and discloses that results span every connected server (a non-obvious multi-server behavior). It doesn't mention failure modes (e.g., what happens with an invalid/expired key), so it sits just under full marks.
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 negation-and-scope line is front-loaded, the returned fields come next, and the routing/exclusions come last. Every clause carries decision-relevant information; there is no filler.
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 an output schema present, the description needn't document return structure, yet it still names the four key fields. For a zero-param read tool with annotations, nothing an agent needs in order to select and call it is missing.
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?
Zero parameters, so the baseline is 4. The description implicitly confirms a no-argument call ('for every connected server') and doesn't introduce any confusing parameter-like language.
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 ('API key inspection') and immediately negates the most likely misread ('does NOT return any analytics data'). Explicitly enumerates returned fields (key name, prefix, container count, expiry) and the 'every connected server' scope, which separates it cleanly from get_summary/get_report.
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?
A dedicated USE WHEN block gives two concrete triggers (identity/expiry questions, authorization errors) and an explicit exclusion with a named alternative: 'For any data question, skip this and go straight to get_summary or get_report.' This is the strongest form of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_containerGet container detailsARead-onlyInspect
Detail view of one container — reveals which event names are tracked and which connectors (Google Ads, Facebook, GA4, etc.) are active.
USE WHEN:
You need the exact event names to pass as event_name filter on get_report / list_events (don't guess names like "Purchase" — check here first).
You need the connector alias for get_report's connector= filter.
The user asks "what's set up on site X?" or "which integrations are live?".
Call list_containers first to find the trc_ ID. Returns no time-series or event data — pair with get_summary / get_report for that.
| Name | Required | Description | Default |
|---|---|---|---|
| server_name | No | Server name (required when connected to multiple servers). Use list_containers to see available servers. | |
| container_id | Yes | The container ID (starts with "trc_"). Use list_containers to find available IDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| container | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value beyond that with the negative scope ("no time-series or event data") and the ordering prerequisite, though it says nothing about auth requirements 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?
Front-loaded with the core purpose, then organized into scannable USE WHEN bullets with a closing scope note. Every sentence carries information; there is no filler.
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 an output schema present, return values need no prose explanation, and the description still supplies the two things an agent actually needs — the list_containers prerequisite and how this tool pairs with get_summary/get_report. Nothing material is missing.
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 (server_name, container_id) are already fully documented with the trc_ prefix hint and the list_containers pointer. The description reinforces the container_id lookup but adds no syntax or format detail beyond the schema — baseline 3 is correct.
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?
"Detail view of one container" names a specific verb and resource, then specifies exactly what it reveals (tracked event names, active connectors) — information an agent can use to distinguish it from list_containers and get_report without opening a 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?
A dedicated USE WHEN block gives explicit triggers (need event names, need connector alias, user asks what's set up) and names the sibling tools each feeds into. It also flags the prerequisite (call list_containers first) and explicitly states what it does NOT return.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet event detailsARead-onlyInspect
Returns one event by its id (evt_…, or the dashboard id TE…) with the search_events fields.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | evt_… or the dashboard id TE…. | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds a useful return-shape hint ('with the search_events fields'), but says nothing about error behavior for invalid ids or whether the TE… dashboard id resolves to the same 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?
One front-loaded sentence with no filler; the id-format detail is placed immediately after the verb. The trailing clause 'with the search_events fields' is terse to the point of being slightly ambiguous, but it is not wasteful.
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?
An output schema exists, so return values need not be spelled out, and parameters are fully documented in the schema. The only remaining gap is the absence of any guidance on failure modes or on how this differs from search_events, which keeps it short of a 5.
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 three parameters documented including the evt_…/TE… formats and the multi-server requirement for server_name. The description restates the id formats but adds no meaning beyond the schema, 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 ('Returns one event by its id') and scopes it to a single item, which implicitly separates it from list_events, query_events, and search_events. It does not explicitly name those siblings, so differentiation still requires the agent to infer it from the word '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?
Single-item retrieval by id implies the use case (you already have an event id), but there is no explicit when-to-use or when-not, and no named alternative such as search_events for id-less lookup. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insightsGet tracking insightsARead-onlyInspect
USE WHEN the user asks how their tracking is doing, what improved, data quality, consent, ad blockers, bots, identity signal… Returns Tracklution's nightly Insights for the last 7 days. For raw totals over a custom date range use get_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | report (default): the Insights report and highlights. metrics: every measured metric row. | |
| detail | No | Include the full report payload when view is 'report' (default: false) | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | No | |
| report | No | |
| status | Yes | |
| window | No | |
| message | No | |
| metrics | No | |
| highlights | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description only needs incremental context. It adds real behavioral value by disclosing data freshness ('nightly') and the fixed 7-day window, which an annotation cannot express. It does not mention rate limits or result size, so it stops short of a 5.
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?
Front-loaded with the USE WHEN trigger and only three sentences total, so every sentence earns its place. The trigger list trails off with an ellipsis ('identity signal…'), which is slightly loose, and the 'nightly / last 7 days' detail sits after the trigger rather than up front.
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?
An output schema exists, so return-value detail is not required, and the required 'container_id' is fully documented in the schema. The description supplies the trigger context, the data window, and the routing alternative. It could be marginally stronger by noting the Insights are scoped to a single container.
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%, including the enum semantics for 'view' (report vs metrics) and the meaning of 'detail', so the schema carries this dimension. The description adds no parameter-level detail beyond that, which is the expected baseline when the schema is complete.
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 Tracklution's nightly Insights') with an explicit scope window ('last 7 days'), which distinguishes it from the sibling get_summary. An agent can identify the tool without opening the 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?
Opens with an explicit 'USE WHEN' trigger list (tracking health, data quality, consent, ad blockers, bots, identity signal) and names the alternative for a different case: 'For raw totals over a custom date range use get_summary.' Both the when and the when-not are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_installation_scriptsGet installation scriptsARead-onlyInspect
Returns paste-safe tracking snippets, webhook templates, recommended events, common mistakes and verification instructions for a framework.
framework_snippets keys: init and page_view (always needed), purchase (checkout / order-success flow, has_checkout=true), lead (lead-gen funnel), contact_info (authenticated user views, has_login=true). Without contact_info on a site with login, verify_and_score keeps verification.scoring_complete=false.
common_mistakes[] per snippet are optimal-vs-acceptable notes, not breakage warnings: the tracker deduplicates repeat purchases, accepts late ContactInfo and absorbs React Strict Mode double-fires.
The _sensitive_webhook block carries a live URL and appears only in structuredContent.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | Yes | ||
| has_login | No | ||
| auth_token | No | SENSITIVE: JWT from register_and_provision. Optional when `container_hash` is supplied — the MCP server then auto-attaches the JWT cached at register time. Pass this explicitly when you have it from structuredContent. | |
| event_goal | No | ||
| server_name | No | Which connected Tracklution server the container lives on (the server name shown at Connect time, e.g. `Main`). Required when this MCP session is connected to more than one server; pass the SAME server_name on every follow-up installation call for the container — the MCP fills it into `next_action.args` / `next_steps[].tool_args` for you. Ignored when only one server is connected. | |
| app_dir_path | No | src/app | |
| container_id | Yes | ||
| has_checkout | No | ||
| container_hash | No | SECRET: 32-char hash from register_and_provision's data.container.hash. Required ONLY when auth_token is omitted; lets the MCP server look up the cached JWT without exposing it on the wire. | |
| nextjs_version | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| field | No | |
| errors | No | |
| status | No | |
| details | No | |
| warnings | No | |
| rate_limit | No | |
| http_status | No | |
| next_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive, non-open-world behavior. The description adds real value beyond that: the `_sensitive_webhook` block carries a live URL and only appears in `structuredContent`, and it clarifies that `common_mistakes[]` are optimal-vs-acceptable notes rather than breakage warnings, preventing an agent from over-reacting to them.
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?
Front-loaded with the core purpose, then organized by output key with backtick notation. Dense but every clause carries meaning; the jargon-heavy style is efficient rather than 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?
An output schema exists, so return values need not be re-explained, yet the description adds useful structural hints about keys and where sensitive data lives. For a 10-parameter tool it leaves some parameter-level gaps, but covers the behavioral and output-shape essentials 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?
Schema coverage is only 30%, so the description must compensate. It does explain the conditional flags (`has_checkout`, `has_login`) and indirectly maps `event_goal` values to `framework_snippets` keys, but several parameters (`app_dir_path`, `nextjs_version`, `container_id`, `event_goal` semantics) remain undocumented 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?
States a specific verb and resource — returns paste-safe tracking snippets, webhook templates, recommended events, mistakes, and verification instructions for a framework. An agent can distinguish this from siblings like select_installation_method or verify_and_score without opening the 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?
Usage is implied rather than stated: the conditional notes (`has_checkout=true` for purchase, `has_login=true` for contact_info) and the link to `verify_and_score` scoring hint at the workflow, but there is no explicit 'call this after X' or 'use this instead of Y' guidance against the many sibling installation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_next_stepsGet next setup stepsARead-onlyInspect
Returns scoring-driven ordered setup steps (overall_progress, next_steps[]) for a container. Non-mutating; recalculate=true forces a fresh scoring pass (slower).
create_login_link works for main-server containers only: for a container on any other connected server the steps carry tool_to_call: null and data.manual_handoff names that server for a manual dashboard hand-off.
| Name | Required | Description | Default |
|---|---|---|---|
| framework | No | ||
| auth_token | No | ||
| recalculate | No | ||
| server_name | No | Which connected Tracklution server the container lives on (the server name shown at Connect time, e.g. `Main`). Required when this MCP session is connected to more than one server; pass the SAME server_name on every follow-up installation call for the container — the MCP fills it into `next_action.args` / `next_steps[].tool_args` for you. Ignored when only one server is connected. | |
| container_id | Yes | ||
| container_hash | No | SECRET: required when auth_token is omitted. See get_installation_scripts for the rationale. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| field | No | |
| errors | No | |
| status | No | |
| details | No | |
| warnings | No | |
| rate_limit | No | |
| http_status | No | |
| next_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint/openWorldHint, so safety is covered. The description adds genuine value beyond them: `recalculate=true` triggers a slower fresh scoring pass, and the multi-server path returns `tool_to_call: null` with `data.manual_handoff`. That hand-off behavior is non-obvious and well disclosed.
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 paragraphs, front-loaded with the core behavior before the edge case. Field-name jargon (`tool_to_call`, `data.manual_handoff`) is dense but informative; little wasted text.
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?
An output schema exists, so return-shape detail is largely redundant but harmless. The description covers the tricky multi-server auth/hand-off path that the schema does not, leaving only minor gaps around the non-required parameters. Adequate for a read-only scoring 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 only 33%, so the description should carry more weight. It explains `recalculate` semantics well, but says nothing about `framework`, `auth_token`, `container_id`, or `server_name` beyond what the schema already states. Partial compensation 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 ('Returns scoring-driven ordered setup steps for a container') and names the concrete return fields (`overall_progress`, `next_steps[]`). It does not explicitly differentiate from setup-related siblings like get_status or verify_and_score, but the 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?
Usage is implied (fetch ordered setup steps) and the multi-server hand-off scenario is described, but there is no explicit 'use this when X, not Y' routing against siblings such as get_status, get_onboarding_session, or verify_and_score. Guidance exists for one edge case only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_onboarding_sessionGet onboarding sessionARead-onlyInspect
Returns the replayable onboarding transcript for onboarding_session_id. Authenticates with auth_token once the session has a user, or with the pre-auth onboarding_session_token from scout_website before sign-up.
| Name | Required | Description | Default |
|---|---|---|---|
| auth_token | No | Required if the session is linked to a user. | |
| onboarding_session_id | Yes | ||
| onboarding_session_token | No | SENSITIVE: required for pre-auth sessions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| field | No | |
| errors | No | |
| status | No | |
| details | No | |
| warnings | No | |
| rate_limit | No | |
| http_status | No | |
| next_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and closed-world scope, so safety is covered. The description adds genuinely useful behavioral context beyond that: the tool requires authentication and the required credential changes depending on whether the session is pre-auth or user-linked. It doesn't cover failure modes (e.g. missing/invalid session) but adds real value.
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 sentences, zero filler, with the primary purpose front-loaded and the auth conditionality following. Every clause carries 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?
An output schema exists, so return values need not be described, and annotations cover the safety profile; the description fills the remaining gap (which credential to supply). It omits error/not-found behavior, which is a minor gap for a read 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 only 67%, so the description must help — and it does by tying the two auth parameters together into a mutually exclusive choice keyed on session state, adding the 'before sign-up' nuance the schema's terse per-field notes lack. `onboarding_session_id` format is left entirely to the schema's pattern, hence not a 5.
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 the replayable onboarding transcript for `onboarding_session_id`'), which no sibling covers — none of the other get_*/list_* tools deal with onboarding sessions. An agent can identify the target object and the key input from the first clause 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 gives conditional context for the two auth modes ('once the session has a user' vs 'before sign-up'), which tells the agent which credential path applies. It does not name alternative tools or state when not to use this one, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportGet analytics reportARead-onlyInspect
Pre-aggregated event counts from the v1 API, at most 30 days per request, by date, hour, event name, source, browser or device. It has two things that run_report does not have: the connector filter (events delivered to one destination) and the v1 first-click attribution model. Sessions, channels, landing pages, goals, period comparison and longer ranges: run_report.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Filter by traffic source | |
| date_to | Yes | End date (YYYY-MM-DD) | |
| currency | No | Currency code, e.g. 'EUR', 'USD' | |
| connector | No | Filter by connector/integration | |
| date_from | Yes | Start date (YYYY-MM-DD) | |
| dimensions | No | Dimensions to break down by. Example: ['source', 'event_name'] | |
| event_name | No | Filter by event name | |
| attribution | No | Attribution model (default: last_click) | |
| granularity | No | Time granularity (default: daily) | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, non-destructive and closed-world, so safety is covered; the description adds the meaningful operational constraint of 'at most 30 days per request'. It doesn't discuss rate limits or error behavior, but the output schema handles return 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?
Front-loads the core purpose and constraint, then the sibling-routing sentence; no filler. The colon-list phrasing is dense but every clause carries scope information, though it reads telegraphically.
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 a full output schema and safety annotations present, the description need only cover scope, limits and routing, which it does. Minor gaps like multi-server behavior are left to the schema's server_name description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: connector is characterized as 'events delivered to one destination' and attribution is tied to the 'v1 first-click attribution model', clarifying semantics the schema's short blurbs leave implicit.
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+resource ('pre-aggregated event counts from the v1 API'), enumerates available breakdown dimensions, and explicitly names what differentiates it from run_report (connector filter, v1 first-click attribution). An agent can distinguish it from siblings without opening the 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?
Gives explicit when-to-use and when-not-to-use: connector filtering and first-click attribution select this tool, while 'Sessions, channels, landing pages, goals, period comparison and longer ranges' route to run_report. The 30-day cap further scopes appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reporting_api_key_linkGet Reporting API key linkARead-onlyInspect
Builds a link to the Tracklution dashboard that opens the "Create Reporting API key" form for one container's company, with a name and an expiry date filled in. Use it when the user wants to build a website, backend or script that reads Tracklution data outside this chat. This tool does not create a key and does not return one: the user creates the key in the dashboard. The answer also has the Reporting API documentation link, the API base URL and the rules for safe use (server only, caching, expiry).
| Name | Required | Description | Default |
|---|---|---|---|
| purpose | No | What the key is for, e.g. "Website" or "Sales dashboard". Goes in the key name after "MCP - ". Omit for a default based on the user's name. | |
| server_name | No | Server name (required when connected to multiple servers). Use list_containers to see available servers. | |
| container_id | Yes | The container ID (starts with "trc_"). Use list_containers to find available IDs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rules | Yes | |
| docs_url | Yes | |
| container | Yes | |
| expires_on | Yes | |
| server_name | Yes | |
| api_base_url | Yes | |
| dashboard_link | Yes | |
| suggested_key_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only and non-destructive, but the description adds substantial behavioral context beyond them: the key is created by the user in the dashboard, the tool never returns a key, and the response also carries the API docs link, base URL and safe-use rules (server only, caching, expiry). That is exactly the kind of side-effect and workflow disclosure an agent needs here.
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 sentences, purpose-first, then usage, then the crucial negative scope, then response contents. Each sentence earns its place, though the final sentence about return contents partially overlaps the output schema and could be trimmed.
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 an output schema present, return values need not be spelled out, and the description still covers usage, side effects and limitations well. The only gap is the dangling reference to an expiry date that isn't a parameter, which slightly muddies the picture for a three-parameter 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 the schema already documents purpose, server_name and container_id thoroughly, and the description adds little beyond noting that a name and expiry date are pre-filled. The mention of an 'expiry date' has no corresponding parameter, which adds a small amount of confusion rather than clarity. 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 opens with a concrete verb+resource pair ('Builds a link to the Tracklution dashboard that opens the "Create Reporting API key" form') and scopes it to one container's company, immediately distinguishing it from creation tools like get_api_key_info. An agent can tell what artifact this produces without opening the 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?
It gives a clear triggering condition ('Use it when the user wants to build a website, backend or script that reads Tracklution data outside this chat') and rules out a common misconception by stating the tool 'does not create a key and does not return one.' What's missing is explicit routing to a sibling (e.g., get_api_key_info for inspecting existing keys), so it stops short of full when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sessionGet session detailsARead-onlyInspect
Returns one session by its id (ses_…, or the dashboard id VS…): the search_sessions fields, the first sources (3 to 90 days), the pages in order with their times, the event values per currency, and its event ids for get_event.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ses_… or the dashboard id VS…. | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| session | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only safety, but the description adds valuable behavioral detail: the first sources are limited to 3 to 90 days, pages are returned in order with their times, and event values are grouped per currency. These are useful traits beyond the annotations, though auth and response-size behavior are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and remains a single dense sentence. It is appropriately sized, though cramming several return-value details into one sentence makes it slightly less scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and annotations cover safety, the description is largely complete: it identifies the id format and summarizes the returned session details. The main remaining gap is guidance on when to choose this tool over its sibling search/list 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 the baseline is 3. The description repeats that session_id can be a ses_… or VS… id, but this is already documented in the schema, and it adds no meaning for container_id or server_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?
The description uses a specific verb and resource: 'Returns one session by its id'. It also distinguishes the tool from siblings like list_sessions and search_sessions by emphasizing a single session and naming the fields sourced from search_sessions.
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: fetch a session by id and use its event ids with get_event. However, the description does not explicitly state when to use this tool versus list_sessions, search_sessions, or query_sessions, and gives no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusCheck server connectivityARead-onlyInspect
Connectivity check only — does NOT return any analytics data. Pings every connected Tracklution server and reports reachable / unreachable.
USE WHEN:
The user reports the integration "isn't working" and you need to isolate network vs. data issues.
You want to confirm a freshly-added server is online before running real queries.
For any data question (counts, events, sessions), skip this and go straight to get_summary or get_report.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| servers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuine behavioral context beyond that: it discloses the scope of the operation (every connected server) and the shape of the outcome (reachable / unreachable), which tells the agent what kind of signal to expect. It stops short of describing failure modes or timing, but with annotations and an output schema present this is solid.
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?
Front-loaded with the key constraint in the first clause, then a compact USE WHEN block. Every sentence carries distinct information — scope, exclusions, and the routing rule — with no filler.
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?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. For a zero-parameter connectivity probe the description supplies everything an agent needs: what it checks, what it returns, and when to prefer a data tool instead.
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?
Zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate, and it correctly implies the tool takes no input by describing an unconditional ping of all servers.
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 ('Pings every connected Tracklution server and reports reachable / unreachable') and immediately negates the common misread: 'Connectivity check only — does NOT return any analytics data.' This cleanly separates it from data-returning siblings like get_summary and get_report.
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 explicit USE WHEN scenarios (integration 'isn't working', verifying a newly-added server) and an explicit when-not-to-use routing rule: 'For any data question (counts, events, sessions), skip this and go straight to get_summary or get_report.' Both the positive and negative conditions are named with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_summaryGet performance summaryARead-onlyInspect
Event totals, consent stats, recovery stats (ad-blocked and restricted-browser events) and a per-source breakdown for one container over one date range of at most 30 days, in one call. Sessions, channels, landing pages, goals, period comparison and longer ranges are in run_report; breakdowns by event name, day, hour, device or browser are in get_report.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | End date (YYYY-MM-DD) | |
| currency | No | Currency code, e.g. 'EUR', 'USD' | |
| date_from | Yes | Start date (YYYY-MM-DD) | |
| attribution | No | Attribution model (default: last_click) | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| date_to | Yes | |
| summary | Yes | |
| date_from | Yes | |
| attribution | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the 30-day maximum range, single-container scope, and 'in one call' aggregation promise. It stops short of describing result shape, but an output schema exists to carry that.
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 sentences, front-loaded with what you get before the routing alternatives. The first sentence is a dense enumerated list but each item carries information; nothing is padding. Slightly run-on, which keeps it from 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?
Covers return contents, scope limits, the routing decision against both relevant siblings, and safety behavior is carried by annotations plus an output schema. An agent has everything needed to call this correctly and to pick it 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 coverage is 100%, so the baseline is 3. The description goes slightly beyond the schema by imposing the ≤30-day cap on date_from/date_to, which the schema itself does not state. It does not explain currency, attribution, or server_name, but those are documented 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?
States exactly what is returned (event totals, consent stats, recovery stats, per-source breakdown) with a concrete scope (one container, one date range of at most 30 days). It explicitly distinguishes itself from run_report and get_report by naming the report types each covers, so an agent can select 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?
Gives explicit routing: sessions/channels/landing pages/goals/period comparison/longer ranges go to run_report, and event-name/day/hour/device/browser breakdowns go to get_report. It also states the selection constraint (single container, ≤30-day range) that governs when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_containersList tracking containersARead-onlyInspect
Entry-point tool. Lists every tracking container the user can access across all connected servers. Each container is one tracked website or app.
USE WHEN:
Starting any session — get_report, get_summary, list_events and list_sessions need a container_id.
The user asks which sites / accounts they can see, or names a brand without a trc_ ID.
You need the server_name for multi-server setups.
Resolving the (container_id, container_hash) pair that onboarding tools take (get_installation_scripts, verify_and_score, create_login_link, ...) for a website: match its host name against
domain;domaincan be null on freshly created containers.
Returns container IDs (trc_...), container hash (dashboard-URL identifier and secret half of the onboarding auth; the container_hash argument of onboarding tools — null on older backends that predate the field, where register_and_provision with auth_token + website_url returns the pair), titles, domains, currency, timezone, and active status.
| Name | Required | Description | Default |
|---|---|---|---|
| server_name | No | Filter to a specific server. Omit to list containers from all servers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| servers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds real context beyond that: it discloses the cross-server aggregation scope, that `domain` can be null on freshly created containers, and that `container_hash` is the secret half of onboarding auth and is null on older backends with a documented fallback (register_and_provision with auth_token + website_url). That fallback path is genuinely useful behavioral disclosure.
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?
Front-loaded with the entry-point role, then a scannable USE WHEN list. Dense and mostly earned, but the final sentence about return values is heavy with nested parentheticals (the container_hash fallback aside is a long aside inside a list of fields) and partly duplicates the output schema.
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?
Handles the tricky cases an agent would otherwise stumble on: what to do for multi-server setups, how to resolve a container from a host name when `domain` is null, and the legacy-backend path when `container_hash` is missing. With an output schema present, the field enumeration is a bonus rather than a requirement, so nothing essential is missing.
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% for the single `server_name` parameter, so the baseline is 3. The description improves on it by tying the parameter to a concrete motive ('You need the server_name for multi-server setups'), which tells an agent why it would ever set it rather than always omitting it.
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 ('Lists every tracking container the user can access across all connected servers') and immediately defines the resource unit ('Each container is one tracked website or app'). The 'Entry-point tool' framing plus the cross-server scope distinguishes it cleanly from the sibling get_container, which fetches a single 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?
The USE WHEN block explicitly covers the triggering conditions: session start because get_report/get_summary/list_events/list_sessions need a container_id, brand-name-without-ID lookups, multi-server setups needing server_name, and onboarding pair resolution. It also names the downstream tools that depend on its output and states what to do when `domain` is null.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsGet event by ID (legacy)ARead-onlyInspect
Legacy tool: returns ONE event by its id (evt_… or TE…) from the v1 API. get_event returns the same event with its page URL and destinations.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Required. Fetch a specific event by ID (starts with "evt_" or "TE". "evt_" is the API identifier, "TE" prefixed ID is the one users see in the Tracklution dashboard). | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds genuinely new behavior context: this is a legacy v1-API path and its return payload is a subset of get_event's (missing page URL and destinations). It does not discuss error behavior for invalid ids, but an output schema exists to carry return 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?
Two short sentences, both earning their place: the first fixes the name/purpose mismatch, the second routes to the preferred sibling. Legacy status is 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 full schema coverage, an output schema, and clear annotations, the remaining burden is orientation — and the description meets it by flagging legacy status and the get_event alternative. A slightly firmer deprecation/selection rule is the only thing missing.
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 three parameters (including the evt_/TE id formats and the multi-server container constraint) are already documented in the schema. The description only references the id formats the schema already explains, adding no syntax or semantics beyond it — 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 specific verb and resource — returns ONE event by its id — and explicitly corrects the misleading 'list' name by emphasizing single-item retrieval. It also names the sibling get_event and distinguishes scope, so an agent can tell them apart without opening either 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?
Labeling it a 'Legacy tool' plus noting that get_event returns the same event with its page URL and destinations strongly steers the agent toward the non-legacy alternative. It stops short of an explicit 'prefer get_event unless X' rule, so it's clear context rather than a hard when/when-not directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_metrics_dimensionsList report metrics and dimensionsARead-onlyInspect
Lists the dimensions and metrics that run_report accepts for one container, with type, description and scope, and the goal metrics. Also returns the request limits, the realtime fields and the data freshness: timezone, data_from (the first day with data) and ingest_lag_seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| limits | No | |
| scopes | No | |
| metrics | No | |
| realtime | No | |
| timezone | No | |
| data_from | No | |
| dimensions | No | |
| ingest_lag_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and non-destructive, and the description adds real behavioral context beyond them: request limits, realtime fields, timezone, data_from, and ingest_lag_seconds. It stops short of describing pagination or failure behavior, so 4 rather than 5.
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?
Front-loaded with the core purpose, then a compact enumeration of what is returned. The second sentence's return-value list is slightly long given an output schema exists, but 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 two-parameter read-only listing tool with full schema coverage and an output schema, this covers scoping and content well. The only minor gap is that multi-server behavior is left entirely to the schema rather than acknowledged.
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 documents both container_id and the multi-server server_name requirement. The description only reinforces container scoping ('for one container') and adds no syntax or format detail beyond the schema, 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 (lists dimensions and metrics) and ties the scope to run_report's accepted fields for one container. The relation to run_report cleanly distinguishes it from the sibling that actually executes reports.
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 'that run_report accepts' makes the natural usage (discovering valid fields before calling run_report) evident, and the scope ('for one container') clarifies context. No explicit when-not or named alternatives, keeping it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsGet session by ID (legacy)ARead-onlyInspect
Legacy tool: returns ONE session by its id (ses_… or VS…) from the v1 API, with funnel-stage counts, contact flags (has_email, has_phone) and the full event timeline. get_session returns pages, first sources and event ids, but not these three.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | Required. Fetch a specific session (starts with "ses_" or "VS". "ses_" is the API identifier, "VS" prefixed ID is the one users see in the Tracklution dashboard). | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| sessions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds useful context beyond annotations: it is a legacy v1 API tool, returns exactly one session, and discloses the returned field groups. It does not discuss auth or rate limits, but that is minor given the 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 two tight sentences, front-loaded with 'Legacy tool' and 'returns ONE session'. Every clause carries selection-relevant information, including the sibling contrast.
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 legacy single-record read with an output schema and rich annotations, the description is complete enough. It covers what the tool returns, why it exists, and how it differs from get_session, while the schema handles parameters and annotations cover safety.
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 the schema already documents session_id prefixes, container_id, and server_name. The description only reinforces that the id fetches one session and adds no syntax or constraints beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns ONE session by id from the v1 API, with named field groups. It also distinguishes the tool from sibling get_session by explaining what get_session returns but does not include. The mismatch with the name list_sessions is explicitly corrected by 'returns ONE session'.
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 a clear contrast with sibling get_session, implying this tool should be selected when funnel-stage counts, contact flags, or the full event timeline are needed. It does not explicitly address the other session list/search/query siblings, so the guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_standard_reportsList standard reportsARead-onlyInspect
Lists the standard reports of one container (Audience, Acquisition, Behavior, Conversions). Each variant has a request that run_report accepts as it is. The requests compare the last 28 full days with the 28 days before.
| Name | Required | Description | Default |
|---|---|---|---|
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| reports | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, non-destructive, closed-world operation. The description adds useful behavioral context: the listed reports compare the last 28 full days with the previous 28 days, and their requests can be passed directly to run_report.
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 three tight sentences with no waste. It front-loads the core action and then adds the run_report compatibility and time-comparison details that an agent needs for correct use.
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 annotations, complete input schema coverage, and presence of an output schema, the description is complete enough for correct invocation. It also adds the important temporal context that the standard report requests compare the last 28 full days with the prior 28 days.
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 server_name and container_id are already documented in the schema. The description only implies the container scope through 'one container' and adds no parameter-specific syntax or constraints 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 clear verb and resource: 'Lists the standard reports of one container' and enumerates the categories Audience, Acquisition, Behavior, and Conversions. It also ties the tool to the sibling run_report by explaining that each variant contains a request run_report accepts as-is, making its distinct role easy to 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 makes the downstream usage explicit: list standard report variants, then pass their request to run_report. It does not explicitly state when to prefer this over other report-related siblings such as get_report, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_eventsQuery raw events (legacy)ARead-onlyInspect
Legacy tool: lists events from the v2 store, which keeps only about the last 7-14 days. search_events lists the same events from data_from on (about the last 6 months), with more filters. Paged with meta.cursor.next_cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor from a previous response's meta.cursor.next_cursor. | |
| source | No | Filter by traffic source | |
| status | No | Filter by event status. Default: "processed" (real, successfully-recorded events — what nearly every analytics question is about). Override only for debugging: "pending" (queued), "error" (processing failed), "rejected" (validation/spam blocked). | |
| date_to | Yes | End date (YYYY-MM-DD) | |
| has_epik | No | Only events arriving with a Pinterest epik | |
| per_page | No | Items per page (default 50, max 1000 on v2). v2 SQLite reads are fast enough to prefer larger pages over more cursor round-trips. | |
| date_from | Yes | Start date (YYYY-MM-DD) | |
| has_adfcd | No | Only events arriving with an Adform adfcd | |
| has_gclid | No | Only events arriving with a Google Ads gclid | |
| event_name | No | Filter by event name | |
| has_fbclid | No | Only events arriving with a Facebook fbclid | |
| has_lsclid | No | Only events arriving with an lsclid | |
| has_scclid | No | Only events arriving with a Snapchat scclid | |
| has_ttclid | No | Only events arriving with a TikTok ttclid | |
| has_ga4clid | No | Only events arriving with a GA4 client ID | |
| has_msclkid | No | Only events arriving with a Microsoft msclkid | |
| has_rdt_cid | No | Only events arriving with a Reddit rdt_cid | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_"). | |
| has_li_fat_id | No | Only events arriving with a LinkedIn li_fat_id |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| events | Yes | |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the 7-14 day retention window and the pagination contract (meta.cursor.next_cursor), which are the two things an agent would otherwise get wrong. It does not discuss cost/rate limits, but for a read tool with an output schema that is minor.
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 short sentences, zero filler, with the legacy status and retention limit front-loaded before the sibling comparison. Every sentence carries 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 20-parameter legacy tool this is complete on the dimensions that matter — scope, retention, deprecation status, and pagination — and an output schema exists so return values need not be explained. Only the absence of explicit cost/performance guidance keeps it from a 5.
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% across all 20 parameters, so filtering semantics (status default, per_page guidance, clid flags) are already fully documented. The description only restates the cursor mechanism, adding nothing beyond the schema — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("lists events from the v2 store") and immediately contrasts it with the sibling search_events, including what each covers. An agent can tell it apart from list_events/search_events without opening a 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?
Names the alternative (search_events) and its advantages — 6-month window and more filters — which implicitly routes the agent away from this tool for anything beyond ~2 weeks. It stops short of an explicit "use this only when..." rule, but the decision context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_sessionsQuery raw sessions (legacy)ARead-onlyInspect
Legacy tool: lists sessions from the v2 store, which keeps only about the last 7-14 days. search_sessions lists the same sessions from data_from on (about the last 6 months), with report-dimension filters. Paged with meta.cursor.next_cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor from a previous response's meta.cursor.next_cursor. | |
| source | No | Filter by traffic source | |
| date_to | Yes | End date (YYYY-MM-DD) | |
| has_epik | No | Only sessions arriving with a Pinterest epik | |
| per_page | No | Items per page (default 50, max 1000 on v2). v2 SQLite reads are fast enough to prefer larger pages over more cursor round-trips. | |
| date_from | Yes | Start date (YYYY-MM-DD) | |
| has_adfcd | No | Only sessions arriving with an Adform adfcd | |
| has_gclid | No | Only sessions arriving with a Google Ads gclid | |
| has_fbclid | No | Only sessions arriving with a Facebook fbclid | |
| has_lsclid | No | Only sessions arriving with an lsclid | |
| has_scclid | No | Only sessions arriving with a Snapchat scclid | |
| has_ttclid | No | Only sessions arriving with a TikTok ttclid | |
| has_ga4clid | No | Only sessions arriving with a GA4 client ID | |
| has_msclkid | No | Only sessions arriving with a Microsoft msclkid | |
| has_rdt_cid | No | Only sessions arriving with a Reddit rdt_cid | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_"). | |
| has_li_fat_id | No | Only sessions arriving with a LinkedIn li_fat_id |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| sessions | Yes | |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is clear. The description adds valuable context beyond annotations: the v2 store retention window of roughly 7-14 days and the pagination mechanism via meta.cursor.next_cursor.
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 short sentences with no wasted text. It is front-loaded with the legacy status and immediately gives the sibling comparison and pagination behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 18 parameters, the schema fully documents them and an output schema exists. The description supplies the critical missing context: legacy retention limits, the search_sessions alternative, and cursor pagination.
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 18 parameters are already documented in the input schema. The description adds only high-level pagination context and the legacy date-range limitation; it does not need to explain individual filter 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 states a specific verb and resource: lists sessions from the legacy v2 store. It explicitly distinguishes this from the sibling search_sessions, which covers a longer period and supports report-dimension filters.
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 names the alternative search_sessions and explains the key selection condition: search_sessions covers roughly six months with filters, while this legacy tool is limited to about 7-14 days. An agent can route correctly without opening either schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_and_provisionCreate account and containerADestructiveIdempotentInspect
Creates or reuses a Tracklution account and the first tracking container for website_url. Mutating: idempotency_key is required (UUID v7).
New email: creates the account, emails a welcome / set-password link (pending_user_activation, welcome_email_sent_to) and returns a 60-minute JWT in data.auth._sensitive_access_token, the auth_token for later onboarding calls in this conversation.
With auth_token instead of email / name: returns the existing-or-new container for (user, website_url).
Errors:
duplicate_account(409): the email has an account; the user signs in at https://app.tracklution.com (setup link: https://app.tracklution.com/account-recovery), thenauth_tokenworks.multi_client_ambiguous(409): several companies, none with a container forwebsite_url;next_action.reasonholds the dashboard URL to create it, then the user re-runs this tool with the samewebsite_urland gets that container.insufficient_permissions(403): creating a NEW container under an existing company requires admin permission (details.required_permission = "admin"); an existing container needs view or higher (details.required_permission = "view"otherwise).errors[0].messageis user-facing.rate_limited(429):retry_after_secondsis the wait;domain:<host>inerrors[0].details.keymeans a per-domain cap.
In a session connected to several servers the returned next_action.args.server_name names the server this container was created on.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| name | No | ||
| No | |||
| phone | No | ||
| company | No | ||
| dry_run | No | ||
| framework | Yes | ||
| auth_token | No | SENSITIVE: existing-user path. JWT held by the agent in memory; passes to /mcp-api/v1/* as Authorization: Bearer. | |
| heard_from | No | ||
| website_url | Yes | ||
| agent_client | Yes | ||
| idempotency_key | Yes | UUID v7 recommended. Required. | |
| event_source_system | No | ||
| onboarding_session_id | No | ||
| onboarding_session_token | No | SENSITIVE: required when onboarding_session_id is supplied and the session has no user yet. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| field | No | |
| errors | No | |
| status | No | |
| details | No | |
| warnings | No | |
| rate_limit | No | |
| http_status | No | |
| next_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the required idempotency_key, the welcome/set-password email and its pending_user_activation/welcome_email_sent_to signals, the 60-minute JWT lifetime, admin-vs-view permission requirements per container state, per-domain rate-limit semantics, and multi-server next_action.server_name behavior. This is rich operational context the annotations (readOnly/destructive/idempotent hints only) cannot convey.
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?
Long but well-structured: the core behavior and mode branching are front-loaded, followed by a scannable error list. Nearly every sentence carries operational value (recovery URLs, permission names, retry semantics), though the enumeration of returned token fields is somewhat verbose given an output schema exists.
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 15-parameter mutating entry-point tool with an output schema present, the description covers the critical paths, error taxonomy, and permission model well, so return values need not be re-explained. The remaining gap is the large set of undocumented optional parameters (dry_run, framework, agent_client, event_source_system, company), whose semantics an agent must infer.
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% across 15 parameters, so the description must compensate. It does add meaning for idempotency_key (UUID v7), auth_token (existing-user path), website_url, and the email/name branch, but leaves goal, phone, company, dry_run, framework, agent_client, heard_from, event_source_system, and the onboarding_session_* pair unexplained 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 ('Creates or reuses a Tracklution account and the first tracking container for website_url') and immediately distinguishes the two operating modes (new email vs. existing auth_token). An agent can tell what the tool produces without opening the 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?
Explicitly says which path applies when ('New email: ...' vs. 'With auth_token instead of email/name: ...') and gives recovery actions for each error condition, including re-running the tool after the user creates a container. It does not, however, position itself against any named sibling (e.g., create_login_link, get_onboarding_session), so routing among siblings is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_realtime_reportRun realtime reportARead-onlyInspect
Runs a report over the hits of the last 30 minutes. Dimensions: minute, page, event_name, source_medium, channel, country, device_category. Metrics: active_users, events, pageviews. Bots are not counted. An empty answer can also mean that the realtime feed is late.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows, 1-1000. Default 100. | |
| metrics | Yes | Objects {name}. See the tool description for the names. | |
| orderBys | No | {metric: {metricName}, desc} or {dimension: {dimensionName}, desc}. | |
| dimensions | No | Objects {name}. See the tool description for the names. | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") | |
| minuteRanges | No | One object {startMinutesAgo: 0-29, endMinutesAgo}. Default: the last 30 minutes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| totals | No | |
| metadata | No | |
| row_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description adds real value beyond them: bots are excluded from counts, and an empty result may signal a late realtime feed rather than zero traffic. That empty-result caveat is exactly the kind of non-obvious behavior an agent needs.
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 tight sentences: scope first, then the enumerated dimensions and metrics, then the bots and late-feed caveats. No filler and nothing 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?
With an output schema present, return values need no explanation, and the description covers the enumerated vocabulary the schema delegates to it plus the empty-result semantics. Minor gap: nothing about multi-server usage or the minuteRanges default beyond what the schema states.
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%, but the metrics and dimensions schemas explicitly defer to the description for valid names, and the description supplies them. It says nothing about limit, orderBys, minuteRanges, or server_name beyond what the schema already states, so it adds meaning where it matters most and stays silent elsewhere.
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 (runs a report) plus a precise scope: hits from the last 30 minutes. The 30-minute window implicitly separates it from the sibling run_report, though it never names that sibling 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 realtime window implies when to reach for this tool over run_report, but the description never states the alternative or an exclusion. An agent must infer the routing decision from the 'last 30 minutes' phrasing alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_reportRun analytics reportARead-onlyInspect
Runs an analytics report over Tracklution sessions (Reporting API v3, GA4 runReport shape): 1 or 2 date ranges (2 compare periods), up to 400 days each, 90 with the page dimension or a page metric; 0-7 dimensions and 1-10 metrics, only names that list_metrics_dimensions returns. Data starts at data_from (about the last 6 months, 2026-04-25 on Main); days before it return zeros, not an error. A session counts on the day it started, without blocked or deleted events, so totals can differ from get_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows, 1-1000. Default 100. | |
| offset | No | Rows to skip. | |
| metrics | Yes | 1-10 objects {name}. Names from list_metrics_dimensions. Rates are 0-1, durations are seconds, money is per currency. | |
| orderBys | No | {metric: {metricName}, desc} or {dimension: {dimensionName}, desc}. | |
| dateRanges | Yes | 1 or 2 objects {startDate, endDate}. Dates: today, yesterday, NdaysAgo or YYYY-MM-DD. At most 400 days each, 90 with the page dimension or a page metric. A second range compares periods. | |
| dimensions | No | 0-7 objects {name}. Names from list_metrics_dimensions. | |
| includeBots | No | Include sessions with a bot score of 0.85 or more. Default false. | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") | |
| metricFilter | No | GA4 filter expression on the requested metrics, applied per row. | |
| dimensionFilter | No | GA4 filter expression on dimensions: andGroup, orGroup or filter, with stringFilter, inListFilter, numericFilter or betweenFilter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| totals | No | |
| metadata | No | |
| row_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, non-destructive operation. The description adds meaningful behavioral context beyond annotations: date-range caps, zero-filled days before data_from, no error for pre-data dates, session attribution on start day, exclusion of blocked/deleted events, and possible discrepancy with get_summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation and then efficiently adds constraints and data caveats in one dense but purposeful sentence. There is no filler, and every clause contributes operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the presence of an output schema, complete schema descriptions, and read-only annotations, the description covers the important semantic pitfalls: valid names must come from list_metrics_dimensions, date limits, pre-data zero behavior, and session-counting differences from get_summary. Nothing critical for correct invocation is missing.
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 input schema already documents the parameters in detail. The description reinforces key constraints such as the 0-7 dimensions and 1-10 metrics limits and the page-dimension/page-metric date-range restriction, but most of this repeats schema content rather than adding new parameter-level 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 clearly states a specific verb and resource: it runs an analytics report over Tracklution sessions using a GA4 runReport-shaped API. It distinguishes the tool from get_summary by noting differing session totals and depends on list_metrics_dimensions for valid names, but it does not explicitly differentiate itself from related siblings such as get_report or run_realtime_report.
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 that this is the tool for custom reports with date ranges, dimensions, and metrics, and it usefully points to list_metrics_dimensions for valid names. However, it gives no explicit 'use this when...' guidance or side-by-side comparison against related reporting siblings like get_report or run_realtime_report.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scout_websiteScout a websiteADestructiveInspect
Public discovery; works without auth. Detects CMS/platform hints for a public website (fetches it) and creates an onboarding session.
Returns onboarding_session_id and a single-use _sensitive_onboarding_session_token: register_and_provision takes both to link this scout to the account and container it creates; get_onboarding_session takes the token before sign-up.
| Name | Required | Description | Default |
|---|---|---|---|
| website_url | Yes | Full URL of the customer's website (http or https). | |
| agent_client | No | Which AI agent client is calling (cursor, claude-code, lovable, ...). | |
| framework_hint | No | Optional framework hint detected by the agent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| field | No | |
| errors | No | |
| status | No | |
| details | No | |
| warnings | No | |
| rate_limit | No | |
| http_status | No | |
| next_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and openWorldHint=true, and the description adds genuinely non-obvious behavior: no auth required, a single-use sensitive token, and creation of a persistent onboarding session. It does not address why the call is destructive, whether repeated scouting creates duplicate sessions (idempotentHint=false), or any 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?
Three tight sentences, front-loaded with the auth/visibility constraint before purpose and outputs. No filler, though the final sentence is dense with backticked identifiers and chaining instructions packed into one line.
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 non-idempotent, state-creating tool with an output schema, the description covers the essentials an agent needs: no auth, the session it creates, both returned values, and which sibling consumes each. Return-value explanation is a bonus since an output schema already exists.
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 enums documented for agent_client and framework_hint, so the schema carries parameter meaning. The description only alludes to website_url via 'fetches it' and adds no format or constraint detail beyond the schema, matching the baseline 3.
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 concrete verb set and resource: it fetches a public website, detects CMS/platform hints, and creates an onboarding session. It also names two siblings (register_and_provision, get_onboarding_session) and their roles in the flow, so an agent can place it in the workflow. It stops short of an explicit 'use this instead of X' contrast, which keeps it at 4.
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?
'Public discovery; works without auth' plus the explicit chaining rules (register_and_provision consumes both outputs; get_onboarding_session takes the token before sign-up) tell an agent exactly when this tool fits in the sequence. No exclusions or 'when not to use' guidance are given, so it does not reach 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsSearch eventsARead-onlyInspect
Lists the events that came in during a date range (default: the last 7 days), newest first, every status, with page URL, value, currency and destinations (attempted_targets, delivered_targets). Filters: event name, status, session, transactionId (one order), productId, value, event attributes, and the session filters of search_sessions. Paged with next_cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per page, 1-1000. Default 100. | |
| cursor | No | next_cursor of the previous page. | |
| status | No | processed, pending, error or rejected. | |
| endDate | No | today, yesterday, NdaysAgo or YYYY-MM-DD. Default: 6daysAgo to today. At most 400 days. Data starts at data_from (about the last 6 months). | |
| filters | No | The session filters of search_sessions. event_name there means that the session had that event. | |
| currency | No | 3 letters, e.g. EUR. | |
| maxValue | No | Event value, inclusive. | |
| minValue | No | Event value, inclusive. | |
| eventName | No | Exact name of the event itself. | |
| productId | No | An item of the event has this product id (exact). | |
| sessionId | No | The events of one session: ses_… or VS…. | |
| startDate | No | today, yesterday, NdaysAgo or YYYY-MM-DD. Default: 6daysAgo to today. At most 400 days. Data starts at data_from (about the last 6 months). | |
| attributes | No | Up to 5 exact key=value pairs. Dots for nested keys, e.g. customer.tier. | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") | |
| pageLocation | No | Exact page URL as collected, with its whole query string. | |
| transactionId | No | The transaction_id or order_id of the event (exact). |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| metadata | No | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: default date range, newest-first ordering, inclusion of every status, returned fields, and cursor-based pagination. It does not mention auth or rate limits, but those are less critical given the annotations.
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 two dense but well-structured sentences, front-loaded with the core purpose and default behavior. Every clause adds useful information about scope, return fields, filters, or pagination, with no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, full schema coverage, annotations, and an output schema, the description provides enough context to call it correctly: default date range, ordering, returned fields, filter categories, and pagination. It is slightly incomplete because it does not route the agent away from sibling event-query tools when another is more appropriate.
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 17 parameters thoroughly. The description names several filters and mentions paging, but it largely restates schema content and does not cover all parameters, such as limit, cursor, container_id, server_name, or pageLocation. Baseline 3 is appropriate when the schema carries the parameter documentation.
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: 'Lists the events,' and states the date-range scope, default last 7 days, newest-first ordering, every status, and returned fields. It is clear what the tool does, but it does not explicitly differentiate itself from sibling tools such as list_events, query_events, or get_event.
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 through its filter list and pagination notes, making it clear this is for searching events with criteria. However, it does not explicitly say when to use this tool versus list_events, query_events, or get_event, nor does it state when not to use it. The reference to search_sessions filters is useful but not a full usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sessionsSearch sessionsARead-onlyInspect
Lists the sessions that started in a date range (default: the last 7 days), newest first, with their report values (channel, source / medium, campaign, landing page, country, device and more), pageviews, event counts, landing URL and referrer. The filters take the values of a run_report row. A new session appears a few minutes after its events. Paged with next_cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per page, 1-1000. Default 100. | |
| cursor | No | next_cursor of the previous page. | |
| endDate | No | today, yesterday, NdaysAgo or YYYY-MM-DD. Default: 6daysAgo to today. At most 400 days. Data starts at data_from (about the last 6 months). | |
| filters | No | Exact, case-sensitive values. Keys: channel, source, medium, source_medium, campaign, keyword, ad_content, source_alias, landing_page, exit_page, country, device_category, browser, operating_system, user_type, customer_type, first_source_3d (also 7d, 14d, 30d, 60d, 90d), page (the session viewed it), event_name (the session had it). | |
| startDate | No | today, yesterday, NdaysAgo or YYYY-MM-DD. Default: 6daysAgo to today. At most 400 days. Data starts at data_from (about the last 6 months). | |
| includeBots | No | Include sessions with a bot score of 0.85 or more. Default false. | |
| server_name | No | Server name (required when connected to multiple servers). | |
| container_id | Yes | Container ID (starts with "trc_") |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| metadata | No | |
| next_cursor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, closed-world, so the description is free to add operational context — and it does: newest-first ordering, a 7-day default window, a data-freshness caveat ('a new session appears a few minutes after its events'), and cursor pagination. It stops short of describing result shape or edge cases like empty windows, but the behaviorally important traits are covered.
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?
Front-loaded with the core action and the default scope, then the returned fields, then filter provenance and freshness. The field enumeration ('channel, source / medium, campaign, landing page, country, device and more') is a bit list-heavy but earns its place by telling the agent what comes back.
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 an output schema present the description needn't explain return values, and it covers defaults, date limits, pagination, and ingestion latency. The remaining gap is sibling disambiguation — search_sessions vs list_sessions vs query_sessions is left ambiguous in a crowded family of 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 coverage is 100%, so the schema already carries the per-parameter documentation and the baseline would be 3. The description adds genuine meaning the schema does not: filters accept the values of a run_report row, and 'paged with next_cursor' ties the cursor param to the pagination cycle. It doesn't elaborate on limit/date interplay, so not a 5.
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 ('Lists the sessions that started in a date range') plus the returned payload (report values, pageviews, events, landing URL, referrer) and sort order. It does not, however, distinguish itself from the closely related siblings list_sessions and query_sessions, which an agent would need to choose between.
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 rather than stated: 'The filters take the values of a run_report row' hints at how to pick filter values, and the 7-day default plus 400-day cap scope the call. There is no explicit when-to-use/when-not or routing to list_sessions/query_sessions for alternative access patterns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_installation_methodSelect installation methodADestructiveIdempotentInspect
Persists the chosen installation method on the container. Mutating: idempotency_key is required.
Requires admin permission on the container's company: a view-only user receives insufficient_permissions (HTTP 403) with details.required_permission = "admin"; errors[0].message is user-facing and a retry returns the same error.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | ||
| dry_run | No | ||
| auth_token | No | ||
| server_name | No | Which connected Tracklution server the container lives on (the server name shown at Connect time, e.g. `Main`). Required when this MCP session is connected to more than one server; pass the SAME server_name on every follow-up installation call for the container — the MCP fills it into `next_action.args` / `next_steps[].tool_args` for you. Ignored when only one server is connected. | |
| container_id | Yes | ||
| container_hash | No | SECRET: required when auth_token is omitted. See get_installation_scripts for the rationale. | |
| idempotency_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| field | No | |
| errors | No | |
| status | No | |
| details | No | |
| warnings | No | |
| rate_limit | No | |
| http_status | No | |
| next_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that a required admin permission is needed, the exact failure mode for view-only users (HTTP 403 insufficient_permissions with details.required_permission='admin'), that errors[0].message is user-facing, and that a retry returns the same error. This is rich, actionable behavioral context on top of the existing readOnly/idempotent/destructive hints.
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 sentences, front-loaded with the core action before the mutation and permission details. Efficient with little waste, though the error-handling sentence is dense.
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?
An output schema exists, so return values need not be described, and annotations cover the safety profile. The description adds mutation, permission, and error behavior, making it fairly complete for this mutating tool, with the main gap being the under-documented 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 low (29%), so the description must carry more of the parameter burden. It only notes that idempotency_key is required and implies the method enum; the other parameters (server_name, container_hash, auth_token, dry_run, container_id) receive no explanation, leaving much of the schema's meaning 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?
States a specific verb and resource: 'Persists the chosen installation method on the container.' This is clearly a write operation, distinguishing it from the many read-oriented get/list siblings. It does not explicitly name a sibling it is contrasted with, 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?
Usage is implied: persisting a 'chosen' method signals this is a post-selection step in the installation flow. However, no alternatives are named and no explicit when-to-use / when-not guidance is given relative to siblings like get_installation_scripts or register_and_provision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_and_scoreVerify installation and scoreADestructiveInspect
Force-processes recent events, recalculates scoring and returns a verification diagnosis. Mutating: idempotency_key is required; the same key within 30 s returns the cached response, a fresh key runs a new pass.
Done = top-level status ok (verification.not_ready_reason === null). scoring_complete can stay false on a finished install (organic metrics mature with traffic).
not_ready_reason:
awaiting_connector_activation,awaiting_first_party_mode: code done; the user finishes a dashboard step.only_pageview_seen,missing_bottom_funnel_event: code done; no purchase / lead until the user triggers one on the live site.no_events_after_install,script_not_seen,event_not_received_yet,events_processing: events not in yet (transient).missing_contact_info,domain_mismatch: needs a code or deploy fix.verification.messageis user-facing,retrythe retry budget,next_actionthe next tool for this state. After the budget,get_next_steps+create_login_linkgive progress and the dashboard link.data.event_names_seenlists track events; ContactInfo is asetcall, only indata.set_events_seen. Non-main server:next_action.toolis null,data.manual_handoffnames the server;create_login_linkis refused (container_pinned_to_other_server).
| Name | Required | Description | Default |
|---|---|---|---|
| auth_token | No | ||
| server_name | No | Which connected Tracklution server the container lives on (the server name shown at Connect time, e.g. `Main`). Required when this MCP session is connected to more than one server; pass the SAME server_name on every follow-up installation call for the container — the MCP fills it into `next_action.args` / `next_steps[].tool_args` for you. Ignored when only one server is connected. | |
| container_id | Yes | ||
| container_hash | No | SECRET: required when auth_token is omitted. See get_installation_scripts for the rationale. | |
| expected_domain | No | ||
| expected_events | No | ||
| idempotency_key | Yes | ||
| onboarding_session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| field | No | |
| errors | No | |
| status | No | |
| details | No | |
| warnings | No | |
| rate_limit | No | |
| http_status | No | |
| next_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring destructiveHint=true and idempotentHint=false, the description still adds substantial context the structured fields cannot: it states the tool is mutating, that `idempotency_key` is required, that the same key within 30s returns a cached response while a fresh key runs a new pass, and that `create_login_link` is refused on a non-main server. This is exactly the kind of side-effect, caching, and refusal behavior an agent needs 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?
The core action and the mutating/idempotency warning are front-loaded, then status interpretation is organized into terse bulleted groups, which suits the high branching complexity. It is long, and lines like the `data.set_events_seen` nuance sit near the edge of what earns its place, but the structure keeps it navigable.
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 high-complexity, many-state tool with an output schema present, the description supplies the missing behavioral and routing context (state meanings, follow-up tools, multi-server handling). Because a return schema exists, its detailed restatement of `status`/`scoring_complete`/`retry` fields is partly redundant, but nothing essential is absent.
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 must compensate, and it does for the most important parameter: it explains that `idempotency_key` is required and defines its 30-second caching semantics. However it says nothing about `expected_domain`, `expected_events`, `onboarding_session_id`, `auth_token`, or `container_hash`, leaving most parameters documented only by pattern/type.
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 opening sentence states a specific, multi-part action: force-process recent events, recalculate scoring, and return a verification diagnosis. That clearly separates it from list/get siblings like get_status or get_summary, though it never explicitly names what it is NOT, so an agent must infer the boundary from behavior rather than an explicit 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?
The description gives strong conditional routing: it tells the agent what each `not_ready_reason` means and what to do after the retry budget is exhausted (`get_next_steps` + `create_login_link`). It stops short of an explicit 'call this when...' statement or an exclusion against similar verification/status siblings, so context is clear but not exhaustive.
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.
10 tool updates
- Changed
get_api_key_info1 field changed- added
Output schema / properties / servers / items / properties / key / properties / dashboard_urlAdded value: +{ + "type": [ + "string", + "null" + ] +}
- Added
get_event - Added
get_reporting_api_key_link - Added
get_session - Added
list_metrics_dimensions - Added
list_standard_reports - Added
run_realtime_report - Added
run_report - Added
search_events - Added
search_sessions
8 tool updates
- Changed
create_login_link1 field changed- removed
Output schema / properties / _request_idRemoved value: -{ - "type": "string" -}
- Changed
get_installation_scripts1 field changed- removed
Output schema / properties / _request_idRemoved value: -{ - "type": "string" -}
- Changed
get_next_steps1 field changed- removed
Output schema / properties / _request_idRemoved value: -{ - "type": "string" -}
- Changed
get_onboarding_session1 field changed- removed
Output schema / properties / _request_idRemoved value: -{ - "type": "string" -}
- Changed
register_and_provision1 field changed- removed
Output schema / properties / _request_idRemoved value: -{ - "type": "string" -}
- Changed
scout_website1 field changed- removed
Output schema / properties / _request_idRemoved value: -{ - "type": "string" -}
- Changed
select_installation_method1 field changed- removed
Output schema / properties / _request_idRemoved value: -{ - "type": "string" -}
- Changed
verify_and_score1 field changed- removed
Output schema / properties / _request_idRemoved value: -{ - "type": "string" -}
9 tool updates
- Changed
get_api_key_info3 fields changed- changed
Output schema / properties / servers / items / properties / key / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / servers / items / properties / key / properties / clientsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "pii_redacted": { + "type": "boolean" + } + }, + "required": [ + "id", + "pii_redacted" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / servers / items / properties / key / properties / pii_redactedAdded value: +{ + "type": "boolean" +}
- Changed
get_container5 fields changed- changed
Output schema / properties / container / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / container / properties / client / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / container / properties / connectors / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / container / properties / event_names / items / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / container / properties / pii_restrictedAdded value: +{ + "type": "boolean" +}
- Changed
get_report6 fields changed- changed
Output schema / properties / data / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / data / properties / event_cards / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / data / properties / event_cards / items / properties / by_source / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / data / properties / rows / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / data / properties / totals / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
get_summary4 fields changed- changed
Output schema / properties / summary / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / summary / properties / by_source / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / summary / properties / recovery / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / summary / properties / recovery / properties / breakdown / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
list_containers3 fields changed- changed
Output schema / properties / servers / items / properties / containers / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / servers / items / properties / containers / items / properties / client / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "id", - "name" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / servers / items / properties / containers / items / properties / pii_restrictedAdded value: +{ + "type": "boolean" +}
- Changed
list_events5 fields changed- changed
Output schema / properties / events / items / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / events / items / properties / has_ndclidAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / events / items / properties / has_ob_click_idAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / events / items / properties / has_propeller_click_idAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / events / items / properties / has_twclidAdded value: +{ + "type": "boolean" +}
- Changed
list_sessions13 fields changed- changed
Output schema / properties / sessions / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / sessions / items / properties / device / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / sessions / items / properties / event_counts / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / sessions / items / properties / events / items / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / sessions / items / properties / events / items / properties / has_ndclidAdded value: +{ + "$ref": "#/properties/sessions/items/properties/has_ndclid" +} - added
Output schema / properties / sessions / items / properties / events / items / properties / has_ob_click_idAdded value: +{ + "$ref": "#/properties/sessions/items/properties/has_ob_click_id" +} - added
Output schema / properties / sessions / items / properties / events / items / properties / has_propeller_click_idAdded value: +{ + "$ref": "#/properties/sessions/items/properties/has_propeller_click_id" +} - added
Output schema / properties / sessions / items / properties / events / items / properties / has_twclidAdded value: +{ + "$ref": "#/properties/sessions/items/properties/has_twclid" +} - added
Output schema / properties / sessions / items / properties / has_ndclidAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / sessions / items / properties / has_ob_click_idAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / sessions / items / properties / has_propeller_click_idAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / sessions / items / properties / has_twclidAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / sessions / items / properties / utm / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
query_events7 fields changed- changed
Output schema / properties / events / items / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / events / items / properties / has_ndclidAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / events / items / properties / has_ob_click_idAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / events / items / properties / has_propeller_click_idAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / events / items / properties / has_twclidAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / meta / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / meta / properties / cursor / additionalPropertiesPrevious value: -falseNew value: +true
- Changed
query_sessions15 fields changed- changed
Output schema / properties / meta / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / meta / properties / cursor / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / sessions / items / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / sessions / items / properties / device / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / sessions / items / properties / event_counts / additionalPropertiesPrevious value: -falseNew value: +true - changed
Output schema / properties / sessions / items / properties / events / items / additionalPropertiesPrevious value: -falseNew value: +true - added
Output schema / properties / sessions / items / properties / events / items / properties / has_ndclidAdded value: +{ + "$ref": "#/properties/sessions/items/properties/has_ndclid" +} - added
Output schema / properties / sessions / items / properties / events / items / properties / has_ob_click_idAdded value: +{ + "$ref": "#/properties/sessions/items/properties/has_ob_click_id" +} - added
Output schema / properties / sessions / items / properties / events / items / properties / has_propeller_click_idAdded value: +{ + "$ref": "#/properties/sessions/items/properties/has_propeller_click_id" +} - added
Output schema / properties / sessions / items / properties / events / items / properties / has_twclidAdded value: +{ + "$ref": "#/properties/sessions/items/properties/has_twclid" +} - added
Output schema / properties / sessions / items / properties / has_ndclidAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / sessions / items / properties / has_ob_click_idAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / sessions / items / properties / has_propeller_click_idAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / sessions / items / properties / has_twclidAdded value: +{ + "type": "boolean" +} - changed
Output schema / properties / sessions / items / properties / utm / additionalPropertiesPrevious value: -falseNew value: +true
1 tool update
- Added
get_insights
8 tool updates
- Added
create_login_link - Added
get_installation_scripts - Added
get_next_steps - Added
get_onboarding_session - Added
register_and_provision - Added
scout_website - Added
select_installation_method - Added
verify_and_score
8 tool updates
- Removed
create_login_link - Removed
get_installation_scripts - Removed
get_next_steps - Removed
get_onboarding_session - Removed
register_and_provision - Removed
scout_website - Removed
select_installation_method - Removed
verify_and_score
18 tool updates
- First observed
create_login_link - First observed
get_api_key_info - First observed
get_container - First observed
get_installation_scripts - First observed
get_next_steps - First observed
get_onboarding_session - First observed
get_report - First observed
get_status - First observed
get_summary - First observed
list_containers - First observed
list_events - First observed
list_sessions - First observed
query_events - First observed
query_sessions - First observed
register_and_provision - First observed
scout_website - First observed
select_installation_method - First observed
verify_and_score
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs113 npm55 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1618 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.