App resources, metadata, and rendering requirements.
Tool invocation metadata present
1 tool(s) missing openai/toolInvocation metadata
How to fix: For tools that render a UI resource, add openai/toolInvocation with string fields invoking and invoked (present-tense labels shown while the tool runs and after it finishes, e.g. "Searching…" / "Searched").
How to fix: For ChatGPT submission, set one exact HTTPS origin such as "https://app.example.com" on every view via _meta.ui.domain (or openai/widgetDomain). Paths are not valid and all views in one app must share the origin.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description64/100
Open the AthenaHQ AI crawler access panel. Enter a public HTTPS domain to inspect crawler responses and robots.txt permissions without an AthenaHQ account.
Describe the returned information so the agent knows whether it will answer the request.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Check HTTP responses to AI crawler user agents and robots.txt permissions for a public website. No AthenaHQ account required. Search, retrieval and training are separate. Requests originate from AthenaHQ, not verified crawler IPs. Unknown responses are inconclusive; this does not measure visibility or guarantee indexing, citations or real crawler access. Use nullable evidence and diagnostics.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
domain
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
List the Default, custom and archived streaming schedules for a website. Use each row's selection value when filtering analytics or responses. Default includes all pre-cutover history and ad hoc runs; archived schedules retain results. To combine schedules, pass several selection values as an array in the schedule field of query_metrics and query_rows, or use a saved view that stores several schedules. Partner REST filters take one schedule. starts_on and ends_on bound a custom schedule's active period as UTC days (null means no bound); an active schedule outside its period does not run.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description66/100
AI Search Value for a website: topic-market value, captured value range, headroom, coverage, value-weighted AI share of voice, per-topic detail, and modeled attributed contribution.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
List personas configured for a website with per-persona prompt counts. Use it to resolve persona_id values returned by other tools to persona names and descriptions.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
List the Content Hub tabs/sheets configured for a website. Use to discover available tabs (e.g. 1st-party content, 3rd-party placements, Reddit) before calling get_tracked_content with a specific sheet_id (metrics; excludes in-flight pipeline items) or list_content (every item including unpublished drafts).
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
List tracked content (1st-party drafts, imported pages, 3rd-party placements) with citation, mention, and impression metrics for the supplied date range and filters. Supports pagination via page_num / page_size and optional filtering by Content Hub sheet_id or content_type. In-flight pipeline items (drafts, briefs, running generations) never appear here; enumerate those with list_content. A returned item can still lack a url (pipeline finished but not published anywhere yet).
The description explains the capability, when to use it, and what to expect.
Inputs53/100
14 of 20 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
content_type
Not provided
Missing description. Explain what this value means and how to supply it.
sheet_id
Not provided
Missing description. Explain what this value means and how to supply it.
mentioned
Not provided
Missing description. Explain what this value means and how to supply it.
page_num
Not provided
Missing description. Explain what this value means and how to supply it.
page_size
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Enumerate every content item in a website's Content Hub, published or not: in-flight drafts, briefs, snipes, optimize and slice runs, scheduled and failed items, plus tracked pages. Returns identity fields only (id, title, type, stage, sheet, URL, timestamps, target prompt ids), no metrics. Uncached and Postgres-backed, so an item created by create_content is listable immediately. Filter by sheet_id, content_type, stage, or prompt_id. stage is the raw pipeline workflow state, not a publication flag: null = no pipeline record (most tracked external / imported pages), and manual editor items carry 'generated'. Treat an item as published only when its stage is done (or it is an external / imported page) AND it has a url; done without a url is an unpublished orphan. A sheet_id of a view-type tab (see get_content_hub_sheets sheet_type) lists the shared main pool without the view's saved filters. Use get_tracked_content for citation and impression metrics on published content; use this tool to discover what exists. Each row carries prompt_ids: the prompts that item was WRITTEN FOR (what create_content was given), capped at 25 with the true size in prompt_count — resolve the ids to text with get_prompts rather than calling get_content_detail per row, and drill in with get_content_detail where prompt_count exceeds the ids returned (that read carries up to 100; associations past 100 are not currently readable). prompt_ids includes soft-deleted prompts, which get_prompts does NOT list — an id that fails to resolve there is a deleted prompt, and get_content_detail returns its text and status: "deleted". Empty prompt_ids means no targeting was recorded, which is normal for imported or externally tracked pages. This is not the same as being cited for a prompt — see get_content_citation_prompts for that. Filter by prompt_id for the reverse question: which content already targets a given prompt (coverage gaps).
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 7 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
sheet_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_type
Not provided
Missing description. Explain what this value means and how to supply it.
stage
Not provided
Missing description. Explain what this value means and how to supply it.
prompt_id
Not provided
Missing description. Explain what this value means and how to supply it.
page_num
Not provided
Missing description. Explain what this value means and how to supply it.
page_size
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Fetch the full detail of a single tracked content item — its brief and body text (drafts, optimize rewrites, snipes, authored and scraped pages), plus status, cited source URLs, and links. Use after get_tracked_content to read the actual text behind a content_id. A status of generated_brief means the brief is ready while the article is still being written. Pages registered via track_content_urls return a null body and null status until their page text is fetched from the app — a null body on an external page means not fetched yet, not missing content; citation tracking does not need the body. `prompts` lists the prompts this page was WRITTEN FOR (the same ids create_content takes), newest-linked last, capped at 100 with the true size in `prompts_total`. When prompts_total exceeds 100 the rest are not currently readable through any tool — report the total, do not imply the list is complete. Entries carry status active, paused or deleted: a deleted prompt is still part of what the page was written for and still shows in the Content Hub, but get_prompts will not list it, so use the text returned here. An empty array means the page has no prompt targeting, which is normal for imported or externally tracked pages. That is a different question from get_content_citation_prompts, which lists prompts whose AI responses CITED the page. To see the reworded variants actually asked of the models for these prompts, pass their ids to get_responses (each row carries base_prompt plus the variation as prompt) or query the responses cube via query_rows on the prompt_variation dimension.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
For a single tracked content item, list every prompt whose AI responses cited it — with citations, citation %, and estimated impressions. Use after get_tracked_content to drill into which prompts a given URL is appearing for. This is CITED-BY, measured over the requested date range, not the targeting the page was written for: an empty prompts array means no AI response cited this URL in that window, which is expected for new or never-cited pages and is not missing data. For the prompts a page was written to target, read `prompts` on get_content_detail (or prompt_ids on list_content) — those come from the content record itself and do not depend on any citation having happened.
The description explains the capability, when to use it, and what to expect.
Inputs72/100
14 of 17 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Clear enough to supply this argument.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Clear enough to supply this argument.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Clear enough to supply this argument.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
mentioned
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_content_citation_prompts",
"description": "For a single tracked content item, list every prompt whose AI responses cited it — with citations, citation %, and estimated impressions. Use after get_tracked_content to drill into which prompts a given URL is appearing for. This is CITED-BY, measured over the requested date range, not the targeting the page was written for: an empty prompts array means no AI response cited this URL in that window, which is expected for new or never-cited pages and is not missing data. For the prompts a page was written to target, read `prompts` on get_content_detail (or prompt_ids on list_content) — those come from the content record itself and do not depend on any citation having happened.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"content_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"mentioned": {
"type": "boolean"
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"content_id",
"content_url",
"content_normalized_url",
"prompts"
],
"properties": {
"prompts": {
"type": "array",
"items": {
"type": "object",
"required": [
"prompt_id",
"prompt",
"citation_percent",
"citations",
"estimated_impressions"
],
"properties": {
"prompt": {
"type": "string"
},
"citations": {
"type": "number"
},
"prompt_id": {
"type": "string"
},
"citation_percent": {
"type": "number"
},
"estimated_impressions": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"content_id": {
"type": "string"
},
"content_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"content_normalized_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get content citation prompts",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
List every website accessible to the calling session. Works with any API key (global or scoped) and with MCP/OAuth sessions. Call with an empty argument object `{}`. Each item includes `baseCountry`, the country market the website targets: use it to tell same-brand websites for different countries apart.
Describe the returned information so the agent knows whether it will answer the request.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description67/100
Get the earliest and latest response dates for a website
Describe the returned information so the agent knows whether it will answer the request.
Inputs33/100
1 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Clear enough to supply this argument.
prompt_status
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Get LLM responses for a website. Shows how AI models answer queries, with sources, sentiment, and ranking data. Filter by whether a model used search queries or by text within those queries. For a variation-level export at volume, pair filters.variation_filter with include_response: false and compact_sources: true. That keeps the prompt, its variation, the model, the mentioned/cited flags and the cited domains while dropping the answer text, cutting each row to roughly a tenth of its size.
The description explains the capability, when to use it, and what to expect.
Inputs73/100
19 of 22 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
filters › has_search_queries
Filter by whether the model used at least one non-empty web or map search query.
Clear enough to supply this argument.
filters › search_query_text
Case-insensitive text to match within the web or map search queries used for a response.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › search_query_text_operator
How search_query_text matches: "contains" (default) or "does_not_contain".
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
page_num
Not provided
Missing description. Explain what this value means and how to supply it.
page_size
Not provided
Missing description. Explain what this value means and how to supply it.
include_response
Include the full answer text on each row. Defaults to true. Set false to omit the `response` field entirely (the heaviest part of a row) when you only need which prompt/variation ran and how it scored.
Clear enough to supply this argument.
compact_sources
Replace the per-source `sources` objects with `source_domains`, a deduped, sorted list of cited root domains. Defaults to false. Use when you need which domains were cited but not their exact URLs.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_responses",
"description": "Get LLM responses for a website. Shows how AI models answer queries, with sources, sentiment, and ranking data. Filter by whether a model used search queries or by text within those queries. For a variation-level export at volume, pair filters.variation_filter with include_response: false and compact_sources: true. That keeps the prompt, its variation, the model, the mentioned/cited flags and the cited domains while dropping the answer text, cutting each row to roughly a tenth of its size.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"search_query_text": {
"type": "string",
"description": "Case-insensitive text to match within the web or map search queries used for a response."
},
"has_search_queries": {
"type": "boolean",
"description": "Filter by whether the model used at least one non-empty web or map search query."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
},
"search_query_text_operator": {
"enum": [
"contains",
"does_not_contain"
],
"type": "string",
"description": "How search_query_text matches: \"contains\" (default) or \"does_not_contain\"."
}
}
},
"page_num": {
"type": "number",
"minimum": 0
},
"page_size": {
"type": "number",
"maximum": 100,
"minimum": 1
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"compact_sources": {
"type": "boolean",
"description": "Replace the per-source `sources` objects with `source_domains`, a deduped, sorted list of cited root domains. Defaults to false. Use when you need which domains were cited but not their exact URLs."
},
"include_response": {
"type": "boolean",
"description": "Include the full answer text on each row. Defaults to true. Set false to omit the `response` field entirely (the heaviest part of a row) when you only need which prompt/variation ran and how it scored."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"responses",
"total",
"page_num",
"page_size",
"has_more"
],
"properties": {
"total": {
"type": "number"
},
"notice": {
"type": "string"
},
"has_more": {
"type": "boolean"
},
"page_num": {
"type": "number"
},
"page_size": {
"type": "number"
},
"responses": {
"type": "array",
"items": {
"type": "object",
"required": [
"schedule",
"id",
"website_id",
"prompt_id",
"base_prompt",
"prompt",
"model",
"mentioned",
"position",
"cited",
"country",
"created_at",
"competitors"
],
"properties": {
"id": {
"type": "string"
},
"cited": {
"type": "boolean"
},
"model": {
"type": "string"
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"url",
"normalized_url",
"root_domain",
"suffix"
],
"properties": {
"url": {
"type": "string"
},
"suffix": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"root_domain": {
"type": "string"
},
"normalized_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"position": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"response": {
"type": "string"
},
"schedule": {
"anyOf": [
{
"type": "string",
"const": "default"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
]
},
"mentioned": {
"type": "boolean"
},
"prompt_id": {
"type": "string"
},
"created_at": {
"type": "string"
},
"website_id": {
"type": "string"
},
"base_prompt": {
"type": "string"
},
"competitors": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"url",
"position"
],
"properties": {
"id": {
"type": "string"
},
"url": {
"type": "string"
},
"name": {
"type": "string"
},
"position": {
"type": "number"
}
},
"additionalProperties": false
}
},
"source_domains": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get responses",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description81/100
Read the latest (or a specific) response-streaming run's whole-run state and response-queue progress. Only completed means downstream analysis has finished
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
workflow_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description71/100
List all groups in the organization (global API key only)
Describe the returned information so the agent knows whether it will answer the request.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
external_id
Partner API keys only. Filter by the partner-issued external id mapped to a group. Non-partner API keys passing this field receive 403. Omit unless you are a partner integration.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
Get cumulative share of voice — overall SOV for each competitor across the date range. Each entry also includes relative_mention_rate: the share of responses mentioning any tracked brand that mention this entity.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
15 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Explain the meaning of this value, not just its name.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
filters › saved_view_id
Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_share_of_voice_cumulative",
"description": "Get cumulative share of voice — overall SOV for each competitor across the date range. Each entry also includes relative_mention_rate: the share of responses mentioning any tracked brand that mention this entity.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"saved_view_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value",
"relative_mention_rate",
"absolute_value",
"is_self"
],
"properties": {
"name": {
"type": "string"
},
"value": {
"type": "number"
},
"is_self": {
"type": "boolean"
},
"absolute_value": {
"type": "number"
},
"relative_mention_rate": {
"type": "number"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get share of voice cumulative",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Get share of voice over time — how often the website is mentioned vs competitors, grouped by day. Each entry also includes relative_mention_rate: the share of that day's responses mentioning any tracked brand that mention this entity.
Describe the returned information so the agent knows whether it will answer the request.
Inputs80/100
15 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Clear enough to supply this argument.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Explain the meaning of this value, not just its name.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
filters › saved_view_id
Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"title": "Get share of voice time series",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
Output schema55/100
Describe the returned fields so an agent can interpret the result.
{
"name": "get_share_of_voice_time_series",
"description": "Get share of voice over time — how often the website is mentioned vs competitors, grouped by day. Each entry also includes relative_mention_rate: the share of that day's responses mentioning any tracked brand that mention this entity.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"saved_view_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"date"
],
"properties": {
"date": {
"type": "string"
}
},
"additionalProperties": {
"type": "object",
"required": [
"value",
"relative_mention_rate",
"is_self"
],
"properties": {
"value": {
"type": "number"
},
"is_self": {
"type": "boolean"
},
"relative_mention_rate": {
"type": "number"
}
},
"additionalProperties": false
}
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get share of voice time series",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description65/100
Get cumulative citation rate — average citation rate for each competitor across the date range.
Describe the returned information so the agent knows whether it will answer the request.
Inputs84/100
15 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Clear enough to supply this argument.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Clear enough to supply this argument.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
filters › saved_view_id
Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_citation_rate_cumulative",
"description": "Get cumulative citation rate — average citation rate for each competitor across the date range.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"saved_view_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"required": [
"citation_rate",
"is_self"
],
"properties": {
"is_self": {
"type": "boolean"
},
"citation_rate": {
"type": "number"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get citation rate cumulative",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description74/100
Get citation rate over time — how often AI models cite (link to) the website, grouped by day.
Describe the returned information so the agent knows whether it will answer the request.
Inputs83/100
15 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Clear enough to supply this argument.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
filters › saved_view_id
Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_citation_rate_time_series",
"description": "Get citation rate over time — how often AI models cite (link to) the website, grouped by day.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"saved_view_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"metrics"
],
"properties": {
"date": {
"type": "string"
},
"metrics": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"required": [
"citation_rate",
"is_self"
],
"properties": {
"is_self": {
"type": "boolean"
},
"citation_rate": {
"type": "number"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get citation rate time series",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Get cumulative mention rate — average mention rate for each competitor across the date range. mention_rate is absolute (share of all responses); relative_mention_rate is the share of responses mentioning any tracked brand.
Describe the returned information so the agent knows whether it will answer the request.
Inputs84/100
15 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Clear enough to supply this argument.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Clear enough to supply this argument.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
filters › saved_view_id
Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_mention_rate_cumulative",
"description": "Get cumulative mention rate — average mention rate for each competitor across the date range. mention_rate is absolute (share of all responses); relative_mention_rate is the share of responses mentioning any tracked brand.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"saved_view_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"required": [
"mention_rate",
"relative_mention_rate",
"is_self"
],
"properties": {
"is_self": {
"type": "boolean"
},
"mention_rate": {
"type": "number"
},
"relative_mention_rate": {
"type": "number"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get mention rate cumulative",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
Get mention rate over time — how often AI models mention the website by name, grouped by day. mention_rate is absolute (share of that day's responses); relative_mention_rate is the share of that day's responses mentioning any tracked brand.
Describe the returned information so the agent knows whether it will answer the request.
Inputs78/100
15 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Explain the meaning of this value, not just its name.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › saved_view_id
Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_mention_rate_time_series",
"description": "Get mention rate over time — how often AI models mention the website by name, grouped by day. mention_rate is absolute (share of that day's responses); relative_mention_rate is the share of that day's responses mentioning any tracked brand.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"saved_view_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"metrics"
],
"properties": {
"date": {
"type": "string"
},
"metrics": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"required": [
"mention_rate",
"relative_mention_rate",
"is_self"
],
"properties": {
"is_self": {
"type": "boolean"
},
"mention_rate": {
"type": "number"
},
"relative_mention_rate": {
"type": "number"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get mention rate time series",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description70/100
Get cumulative position — average ranking position for each competitor across the date range.
Describe the returned information so the agent knows whether it will answer the request.
Inputs84/100
15 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Clear enough to supply this argument.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Clear enough to supply this argument.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
filters › saved_view_id
Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_position_cumulative",
"description": "Get cumulative position — average ranking position for each competitor across the date range.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"saved_view_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"required": [
"avg_position",
"is_self"
],
"properties": {
"is_self": {
"type": "boolean"
},
"avg_position": {
"type": "number"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get position cumulative",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description72/100
Get ranking position over time — average position of the website in AI model responses, grouped by day.
Describe the returned information so the agent knows whether it will answer the request.
Inputs83/100
15 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Clear enough to supply this argument.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Explain the meaning of this value, not just its name.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Clear enough to supply this argument.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
filters › saved_view_id
Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"title": "Get position time series",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
Output schema44/100
Describe the returned fields so an agent can interpret the result.
{
"name": "get_position_time_series",
"description": "Get ranking position over time — average position of the website in AI model responses, grouped by day.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"saved_view_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "object",
"required": [
"percentile_ranking",
"avg_position",
"is_self"
],
"properties": {
"is_self": {
"type": "boolean"
},
"avg_position": {
"type": "number"
},
"percentile_ranking": {
"type": "number"
}
},
"additionalProperties": false
}
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get position time series",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Get position distribution: share of responses where the brand ranks top/middle/bottom across the date range.
Describe the returned information so the agent knows whether it will answer the request.
Inputs86/100
15 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Clear enough to supply this argument.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Clear enough to supply this argument.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Clear enough to supply this argument.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
filters › saved_view_id
Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_position_distribution",
"description": "Get position distribution: share of responses where the brand ranks top/middle/bottom across the date range.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"saved_view_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Saved view to apply (list them with get_saved_views). Its filters apply as the dashboard's metric cards apply them, including its defaults of active prompts and every model. Any filter also sent here replaces the view's value for that field. The view's date range is ignored: start_date and end_date decide the window."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"top",
"middle",
"bottom"
],
"properties": {
"top": {
"type": "number"
},
"bottom": {
"type": "number"
},
"middle": {
"type": "number"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get position distribution",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Query aggregated metrics for brand performance, competitors, sources, citations, and response trends. Use query_rows for individual records.
Mentions: from "response_mentions". Citations: from "citations". On either, where { is_website: true } selects the brand; { is_competitor: true } selects competitors; { entity_id: { eq: "<uuid>" } } selects one entity.
Filter/group models by model_category (display names like "ChatGPT", "Claude"), never "model". Dimensions vary by cube; source_mentions has no prompt/model dimensions.
Measures: count, count_distinct, avg, sum, min, max; per-measure where enables conditional aggregation. Use compare for two date ranges.
When grouping by IDs, use alsoSelect for names: entity_id/entity_name, prompt_id/prompt_text, prompt_topic_id/topic_name (prompts uses topic_id).
Cited pages mentioning competitors but not the brand: from "sources", where { source_mentions_entity: { hasSome: [competitorIds], hasNone: [brandId] } }. Also works on "source_mentions". Checks all stored page mentions per URL/website. Date/model on sources scope AI responses; extracted page content may be older than the live page.
Content-hub attribution: on "sources", where { is_attributed_content: true }; by: ["content_id"], alsoSelect: ["content_title"]. Add content_type to by for type, or group by content_type alone. Read articles from "contents" via query_rows.
Schedule: select one "default" or custom/archived UUID from the catalog, or an array of them to combine schedules. Omit for caller default (current page in Ask Athena); explicit schedule overrides it. Top-level prompt_schedule_kind/id equality filters remain supported but must not conflict with schedule. Historical provenance is independent of current prompt membership; website-level cubes are unaffected.
The description explains the capability, when to use it, and what to expect.
Inputs52/100
8 of 13 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
from
Dataset to query.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
schedule
One schedule from the catalog ("default" or a custom/archived UUID), or an array of them to combine their data. Omit to use the caller default. The retired "manual" token is accepted as a deprecated alias of "default". Website-level cubes are unaffected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
measures › additionalProperties › anyOf › 0 › fn
Aggregate function.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
measures › additionalProperties › anyOf › 0 › of
Dimension to aggregate. Required for all functions except count. Bare `count` (no `of`) counts distinct facts (responses, mentions, citations...) on fact cubes. It throws on pre-aggregated tables (MVs) where rows are groups, not facts — use `{ fn: 'count_distinct', of: '<id-dim>' }` instead (e.g. `of: 'response_id'` on mentions/citations) to hit the MV's pre-computed aggregate.
Clear enough to supply this argument.
by
GROUP BY dimensions. Omit for scalar result.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
alsoSelect
Label dimensions carried via any(). Must be determined by a by dim (cube's dependentDims). Example: entity_name when entity_id is in by.
Clear enough to supply this argument.
orderBy › items › anyOf › 1 › dim
Not provided
Missing description. Explain what this value means and how to supply it.
orderBy › items › anyOf › 1 › desc
Not provided
Missing description. Explain what this value means and how to supply it.
orderBy › items › anyOf › 2 › measure
Not provided
Missing description. Explain what this value means and how to supply it.
orderBy › items › anyOf › 2 › desc
Not provided
Missing description. Explain what this value means and how to supply it.
limit
Max rows to return.
Clear enough to supply this argument.
definitions › CompareSlice › label
Not provided
Missing description. Explain what this value means and how to supply it.
website_id
The website to query. Must be a website your credentials can access.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Query individual analytics rows. Use for qualitative data like response text, specific identifiers, or individual mentions.
Schedule selection: pass schedule: "default" or a custom/archived UUID from the schedule catalog, or an array of them to combine schedules. Omit to use the caller default (Ask Athena uses the current page selection). Explicit selection overrides that default. Existing top-level equality predicates on prompt_schedule_kind/id remain supported, but cannot conflict with schedule. Historical provenance does not change with current prompt membership. Website-level cubes are unaffected.
Cubes (same set as query_metrics): attributes, citations, competitors, contents, prompts, response_mentions, responses, source_mentions, sources, topics, websites.
Returns { rows, nextCursor, hasMore }. Pass nextCursor back as "after" to paginate.
On the responses cube, content is hydrated from Postgres and can only be selected. Do not filter or sort by content. Use search_terms_in_responses for text frequency analysis.
Use query_metrics for aggregates instead.
The description explains the capability, when to use it, and what to expect.
Inputs48/100
6 of 10 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
from
Dataset to query.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
schedule
One schedule from the catalog ("default" or a custom/archived UUID), or an array of them to combine their data. Omit to use the caller default. The retired "manual" token is accepted as a deprecated alias of "default". Website-level cubes are unaffected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
fields
Columns to SELECT.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
orderBy › items › anyOf › 1 › dim
Not provided
Missing description. Explain what this value means and how to supply it.
orderBy › items › anyOf › 1 › desc
Not provided
Missing description. Explain what this value means and how to supply it.
orderBy › items › anyOf › 2 › measure
Not provided
Missing description. Explain what this value means and how to supply it.
orderBy › items › anyOf › 2 › desc
Not provided
Missing description. Explain what this value means and how to supply it.
limit
Max rows to return.
Clear enough to supply this argument.
after
Last row from previous page for keyset pagination. Must include values for all orderBy dims.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
website_id
The website to query. Must be a website your credentials can access.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Get a pitch report by ID including competitors, prompts, attributes, top citing sources, and aggregate metrics (brand mentions, sentiment, response rate).
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
pitch_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
List top cited sources (root domains) for a website with citation, mention, brand-mention, and impression metrics. Each row is classified as owned / competitor / partner / third_party. Supports filters (date range, models, prompts, competitors, locations, personas), sort, and pagination via page_num / page_size.
Describe the returned information so the agent knows whether it will answer the request.
Inputs48/100
14 of 22 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
page_num
Not provided
Missing description. Explain what this value means and how to supply it.
page_size
Not provided
Missing description. Explain what this value means and how to supply it.
sort_field
Not provided
Missing description. Explain what this value means and how to supply it.
sort_direction
Not provided
Missing description. Explain what this value means and how to supply it.
search
Not provided
Missing description. Explain what this value means and how to supply it.
mentioned
Not provided
Missing description. Explain what this value means and how to supply it.
competitors_mentioned
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
List individual cited URLs (pages) for a website with citation, mention, and impression metrics plus a per-URL daily sparkline. Each row is classified as owned / competitor / partner / third_party. Companion to get_sources (root-domain-level). Supports filters (date range, models, prompts, competitors, locations, personas), search, sort, and pagination.
The description explains the capability, when to use it, and what to expect.
Inputs48/100
14 of 22 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
page_num
Not provided
Missing description. Explain what this value means and how to supply it.
page_size
Not provided
Missing description. Explain what this value means and how to supply it.
sort_field
Not provided
Missing description. Explain what this value means and how to supply it.
sort_direction
Not provided
Missing description. Explain what this value means and how to supply it.
search
Not provided
Missing description. Explain what this value means and how to supply it.
mentioned
Not provided
Missing description. Explain what this value means and how to supply it.
competitors_mentioned
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
List the brand traits (called attributes in the API) tracked for a website: brand-perception keywords such as 'Affordable' or 'Slow Support'. Athena extracts these from AI model responses. Brand traits are direction-neutral; `positive` selects the directional series and defaults to true when omitted. Use this to discover attribute ids, then get_attribute_metrics for how often each is mentioned, or get_attribute_time_series for one attribute's trend over time.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
positive
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Get cumulative brand trait (attribute) metrics: for each brand-perception keyword (e.g. 'Affordable', 'Slow Support'), how many AI responses mentioned it across the date range, and the percentage. `positive` selects the observation direction and defaults to true when omitted. `total_responses` is the denominator: responses in the date range that mention the brand AND had attribute extraction run on them. It is NOT every response for the website — responses that never mention the brand are excluded, and Athena samples which responses get extraction, so un-analyzed ones are excluded too. Compute rates from the returned `percentage` / `total_responses` rather than against a response count from another endpoint. Attributes nobody mentioned come back with response_count 0. Use get_competitor_attribute_metrics for the same breakdown per competitor.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
13 of 15 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
positive
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Clear enough to supply this argument.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Clear enough to supply this argument.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Clear enough to supply this argument.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Clear enough to supply this argument.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_attribute_metrics",
"description": "Get cumulative brand trait (attribute) metrics: for each brand-perception keyword (e.g. 'Affordable', 'Slow Support'), how many AI responses mentioned it across the date range, and the percentage. `positive` selects the observation direction and defaults to true when omitted. `total_responses` is the denominator: responses in the date range that mention the brand AND had attribute extraction run on them. It is NOT every response for the website — responses that never mention the brand are excluded, and Athena samples which responses get extraction, so un-analyzed ones are excluded too. Compute rates from the returned `percentage` / `total_responses` rather than against a response count from another endpoint. Attributes nobody mentioned come back with response_count 0. Use get_competitor_attribute_metrics for the same breakdown per competitor.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
},
"additionalProperties": false
},
"positive": {
"type": "boolean"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"attribute_id",
"attribute_name",
"positive",
"response_count",
"total_responses",
"percentage"
],
"properties": {
"positive": {
"type": "boolean"
},
"percentage": {
"type": "number"
},
"attribute_id": {
"type": "string"
},
"attribute_name": {
"type": "string"
},
"response_count": {
"type": "number"
},
"total_responses": {
"type": "number"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get attribute metrics",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Get brand trait (attribute) metrics per tracked competitor: for each competitor and each brand-perception keyword (e.g. 'Affordable'), how many AI responses mentioned that keyword for that competitor, and the percentage. Use with get_attribute_metrics to compare the brand against competitors. `total_responses` is per-competitor: responses in the date range that mention THAT competitor and had attribute extraction run on them. Each competitor therefore has its own denominator, and none of them is the website's total response count. `positive` selects the observation direction and defaults to true when omitted. Returns one row per competitor per attribute, so results can be large — filter with competitor_ids. Competitors with no responses in the date range are omitted entirely rather than returned with zeros.
The description explains the capability, when to use it, and what to expect.
Inputs67/100
14 of 16 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
positive
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_competitor_attribute_metrics",
"description": "Get brand trait (attribute) metrics per tracked competitor: for each competitor and each brand-perception keyword (e.g. 'Affordable'), how many AI responses mentioned that keyword for that competitor, and the percentage. Use with get_attribute_metrics to compare the brand against competitors. `total_responses` is per-competitor: responses in the date range that mention THAT competitor and had attribute extraction run on them. Each competitor therefore has its own denominator, and none of them is the website's total response count. `positive` selects the observation direction and defaults to true when omitted. Returns one row per competitor per attribute, so results can be large — filter with competitor_ids. Competitors with no responses in the date range are omitted entirely rather than returned with zeros.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"positive": {
"type": "boolean"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"competitor_id",
"competitor_name",
"attribute_id",
"attribute_name",
"positive",
"response_count",
"total_responses",
"percentage"
],
"properties": {
"positive": {
"type": "boolean"
},
"percentage": {
"type": "number"
},
"attribute_id": {
"type": "string"
},
"competitor_id": {
"type": "string"
},
"attribute_name": {
"type": "string"
},
"response_count": {
"type": "number"
},
"competitor_name": {
"type": "string"
},
"total_responses": {
"type": "number"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get competitor attribute metrics",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Get the daily trend for ONE brand trait (attribute), brand and competitors side by side — how mentions of a keyword like 'Affordable' moved over time. Requires an attribute_id: call get_attributes first to discover ids. `positive` selects the observation direction and defaults to true when omitted. Days with no data are returned as zeros, so the series is gap-free and chartable. Denominators are per-side, not the day's whole response set: brand_percentage divides by that day's responses that mention the brand (and had attribute extraction run), and competitor_percentage by responses that mention the tracked competitors. brand_total and competitor_total return those denominators explicitly. Competitor figures aggregate all tracked competitors unless competitor_ids narrows them.
Describe the returned information so the agent knows whether it will answer the request.
Inputs69/100
14 of 17 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Clear enough to supply this argument.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › competitor_ids
Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Explain the meaning of this value, not just its name.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Clear enough to supply this argument.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Clear enough to supply this argument.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Clear enough to supply this argument.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Clear enough to supply this argument.
attribute_id
Not provided
Missing description. Explain what this value means and how to supply it.
positive
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_attribute_time_series",
"description": "Get the daily trend for ONE brand trait (attribute), brand and competitors side by side — how mentions of a keyword like 'Affordable' moved over time. Requires an attribute_id: call get_attributes first to discover ids. `positive` selects the observation direction and defaults to true when omitted. Days with no data are returned as zeros, so the series is gap-free and chartable. Denominators are per-side, not the day's whole response set: brand_percentage divides by that day's responses that mention the brand (and had attribute extraction run), and competitor_percentage by responses that mention the tracked competitors. brand_total and competitor_total return those denominators explicitly. Competitor figures aggregate all tracked competitors unless competitor_ids narrows them.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters",
"attribute_id"
],
"properties": {
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"competitor_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Competitor UUIDs to filter to, as an array even for one id. Omit for all competitors."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
}
},
"positive": {
"type": "boolean"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"attribute_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"brand_count",
"brand_total",
"brand_percentage",
"competitor_count",
"competitor_total",
"competitor_percentage"
],
"properties": {
"date": {
"type": "string"
},
"brand_count": {
"type": "number"
},
"brand_total": {
"type": "number"
},
"brand_percentage": {
"type": "number"
},
"competitor_count": {
"type": "number"
},
"competitor_total": {
"type": "number"
},
"competitor_percentage": {
"type": "number"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get attribute time series",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Get individual brand trait (attribute) observations: each row is one AI response describing one entity (the brand or a competitor) with one brand trait, including the response excerpt as `text_span`. `score` runs from -1 to 1 and its sign always matches `positive`; its magnitude (0.1 to 1.0) is how strongly the wording praises or criticizes. `score` is null when the observation was not scored (extracted before scoring existed, or no valid value was recorded); for direction only, use `score ?? (positive ? 1 : -1)`. Omit `positive` for both directions. `sort: "intensity"` (the default) returns the strongest observations first with unscored ones last; `sort: "recent"` returns the newest first. Narrow with entity_ids and attribute_ids (from get_attributes). Paginate with page_num and page_size; a page can hold fewer than page_size rows when an excerpt is no longer available, so use `has_more` to decide whether to fetch the next page. Use get_attribute_metrics for how often each trait is mentioned.
The description explains the capability, when to use it, and what to expect.
Inputs73/100
19 of 20 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › schedule_id
One schedule: "default" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired "manual" token is accepted as an alias of "default". Schedules cannot be combined.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › models
AI models to include, as an array even for one model — e.g. ["chatgpt", "perplexity"]. Omit to include all models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_ids
Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › location_ids
Location UUIDs to filter to, as an array even for one id. The literal string "no-location" selects responses that ran without a location. Omit for all locations.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › persona_ids
Persona UUIDs to filter to, as an array even for one id. Omit for all personas.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › target_identifiers
Target identifier strings to filter to, as an array even for one value. The literal string "no-identifier" selects responses with no target identifier. Omit for all.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › variation_filter
Which prompt rows to include, as an array: "prompt" for base prompts, "variation" for generated variations, or both. Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags
Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_tags_operator
How prompt_tags combine: "is_any_of" matches prompts with any listed tag, "has_all_of" only prompts carrying every listed tag.
Clear enough to supply this argument.
filters › prompt_status
Filter prompts by tracking status: "active" or "paused". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › prompt_type
Filter prompts by type: "branded" (mentions the brand) or "non_branded". Omit for both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
entity_ids
Entity UUIDs to filter to, as an array even for one id: the website_id for the brand itself, competitor ids from get_competitors for competitors. Omit for every entity.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
attribute_ids
Attribute UUIDs to filter to (from get_attributes), as an array even for one id. Omit for every active attribute.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
positive
true for favorable observations only, false for critical ones only. Omit for both directions.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
sort
"intensity" (default): strongest first, unscored last, then newest. "recent": newest first.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
page_num
Zero-indexed page number. Defaults to 0.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
page_size
Rows per page, 1 to 100. Defaults to 40.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_attribute_observations",
"description": "Get individual brand trait (attribute) observations: each row is one AI response describing one entity (the brand or a competitor) with one brand trait, including the response excerpt as `text_span`. `score` runs from -1 to 1 and its sign always matches `positive`; its magnitude (0.1 to 1.0) is how strongly the wording praises or criticizes. `score` is null when the observation was not scored (extracted before scoring existed, or no valid value was recorded); for direction only, use `score ?? (positive ? 1 : -1)`. Omit `positive` for both directions. `sort: \"intensity\"` (the default) returns the strongest observations first with unscored ones last; `sort: \"recent\"` returns the newest first. Narrow with entity_ids and attribute_ids (from get_attributes). Paginate with page_num and page_size; a page can hold fewer than page_size rows when an excerpt is no longer available, so use `has_more` to decide whether to fetch the next page. Use get_attribute_metrics for how often each trait is mentioned.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"filters"
],
"properties": {
"sort": {
"enum": [
"intensity",
"recent"
],
"type": "string",
"default": "intensity",
"description": "\"intensity\" (default): strongest first, unscored last, then newest. \"recent\": newest first."
},
"filters": {
"type": "object",
"required": [
"start_date"
],
"properties": {
"models": {
"type": "array",
"items": {
"enum": [
"chatgpt",
"perplexity",
"gemini",
"google_ai_overview",
"copilot",
"claude",
"ai_mode",
"grok",
"deepseek",
"meta_ai",
"mistral"
],
"type": "string"
},
"description": "AI models to include, as an array even for one model — e.g. [\"chatgpt\", \"perplexity\"]. Omit to include all models."
},
"end_date": {
"type": "string",
"description": "End of the date range, inclusive. Date-only values include the UTC day through 23:59:59.999; timestamps keep their exact instant. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"prompt_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Prompt UUIDs to filter to, as an array even for one id. Omit for all prompts."
},
"start_date": {
"type": "string",
"description": "Start of the date range. Required. Accepts YYYY-MM-DD, ISO 8601 timestamps (timezone omitted means UTC), English month names with a four-digit year, and unambiguous numeric dates separated by /, -, or .; ambiguous dates are rejected."
},
"persona_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": "Persona UUIDs to filter to, as an array even for one id. Omit for all personas."
},
"prompt_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Prompt tag IDs to filter prompts by, as an array (list tags with get_prompt_tags). Omit for all tags."
},
"prompt_type": {
"enum": [
"branded",
"non_branded"
],
"type": "string",
"description": "Filter prompts by type: \"branded\" (mentions the brand) or \"non_branded\". Omit for both."
},
"schedule_id": {
"anyOf": [
{
"enum": [
"default",
"manual"
],
"type": "string"
},
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
],
"description": "One schedule: \"default\" or a custom/archived schedule UUID. Omit for Default, which includes all pre-cutover history and ad hoc runs. The retired \"manual\" token is accepted as an alias of \"default\". Schedules cannot be combined."
},
"location_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "string",
"const": "no-location"
}
]
},
"description": "Location UUIDs to filter to, as an array even for one id. The literal string \"no-location\" selects responses that ran without a location. Omit for all locations."
},
"prompt_status": {
"enum": [
"active",
"paused"
],
"type": "string",
"description": "Filter prompts by tracking status: \"active\" or \"paused\". Omit for both."
},
"variation_filter": {
"type": "array",
"items": {
"enum": [
"variation",
"prompt"
],
"type": "string"
},
"description": "Which prompt rows to include, as an array: \"prompt\" for base prompts, \"variation\" for generated variations, or both. Omit for both."
},
"target_identifiers": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "string",
"const": "no-identifier"
}
]
},
"description": "Target identifier strings to filter to, as an array even for one value. The literal string \"no-identifier\" selects responses with no target identifier. Omit for all."
},
"prompt_tags_operator": {
"enum": [
"is_any_of",
"has_all_of"
],
"type": "string",
"description": "How prompt_tags combine: \"is_any_of\" matches prompts with any listed tag, \"has_all_of\" only prompts carrying every listed tag."
}
},
"additionalProperties": false
},
"page_num": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-indexed page number. Defaults to 0."
},
"positive": {
"type": "boolean",
"description": "true for favorable observations only, false for critical ones only. Omit for both directions."
},
"page_size": {
"type": "integer",
"default": 40,
"maximum": 100,
"minimum": 1,
"description": "Rows per page, 1 to 100. Defaults to 40."
},
"entity_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 100,
"description": "Entity UUIDs to filter to, as an array even for one id: the website_id for the brand itself, competitor ids from get_competitors for competitors. Omit for every entity."
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"attribute_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 100,
"description": "Attribute UUIDs to filter to (from get_attributes), as an array even for one id. Omit for every active attribute."
}
}
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"data",
"page_num",
"page_size",
"has_more"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"required": [
"observation_id",
"response_id",
"entity_id",
"entity_name",
"is_website",
"attribute_id",
"attribute_name",
"positive",
"score",
"text_span",
"model",
"created_at"
],
"properties": {
"model": {
"type": "string"
},
"score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
"positive": {
"type": "boolean"
},
"entity_id": {
"type": "string"
},
"text_span": {
"type": "string"
},
"created_at": {
"type": "string"
},
"is_website": {
"type": "boolean"
},
"entity_name": {
"type": "string"
},
"response_id": {
"type": "string"
},
"attribute_id": {
"type": "string"
},
"attribute_name": {
"type": "string"
},
"observation_id": {
"type": "string"
}
},
"additionalProperties": false
}
},
"notice": {
"type": "string"
},
"has_more": {
"type": "boolean"
},
"page_num": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"page_size": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get attribute observations",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Look up a user by email address, scoped to the caller's organization. Returns 404 when the email does not belong to a member of the organization or of one of its websites.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
email
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"title": "Get user by email",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
Output schema60/100
Describe the returned fields so an agent can interpret the result.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
When grounding is present, use its complete team-confirmed statement and all supporting facts as joint evidence; the legacy fact ID/text are only a compatibility anchor. List Oracle accuracy findings for a website: places where an AI response contradicted a verified brand fact (type 'inaccuracy' or 'kb_issue', with quote, claim, and reason) or where two knowledge-base facts conflict ('kb_duplicate' / 'kb_contradiction', pairing fact_text with related_fact_text). Findings from every status are included by default (pending, acknowledged, ignored, ...), each row carrying its status — pass the status filter for pending items only. Filters (run_id, fact_id, lineage_id, response_id, prompt_id, source_url, type, kind, severity, status) AND-compose; source_url matches evidence URLs exactly after normalization (protocol and trailing slash ignored). 'total' is the pre-limit count. 'latest_run' is the newest scan of any kind and is null only when the website has never been scanned, so latest_run plus empty findings means it scanned clean, while latest_run null means never scanned, not clean. Archived findings from before the current scanner ARE included: their run carries 'is_imported': true and keeps its original started_at, so an import can be the newest run — say the history is archived rather than calling it a current scan. 'has_imported_history' is true when any such archived run exists, and every finding row carries 'run_is_imported' so archival and current rows stay distinguishable in one list. Returns status 'no_access' if the brand does not have Oracle v2; that response carries the status alone, with no counts or findings.
The description explains the capability, when to use it, and what to expect.
Inputs8/100
1 of 13 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
run_id
Not provided
Missing description. Explain what this value means and how to supply it.
fact_id
Not provided
Missing description. Explain what this value means and how to supply it.
lineage_id
Not provided
Missing description. Explain what this value means and how to supply it.
response_id
Not provided
Missing description. Explain what this value means and how to supply it.
prompt_id
Not provided
Missing description. Explain what this value means and how to supply it.
source_url
Not provided
Missing description. Explain what this value means and how to supply it.
type
Not provided
Missing description. Explain what this value means and how to supply it.
kind
Not provided
Missing description. Explain what this value means and how to supply it.
severity
Not provided
Missing description. Explain what this value means and how to supply it.
status
Not provided
Missing description. Explain what this value means and how to supply it.
model
Filter to one AI model by product name (ChatGPT, Claude, Gemini, Perplexity, Copilot, Meta AI); raw identifiers also match exactly
Clear enough to supply this argument.
limit
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
When grounding is present, use its complete team-confirmed statement and all supporting facts as joint evidence; the legacy fact ID/text are only a compatibility anchor. Load one Oracle finding in full: the flagged claim with its verified fact and prompt text, the run it came from, a ~2000-character response excerpt centered on the quoted claim, the cited-page evidence captured during the run (url, quote, snippet, scrape_hash), and its lineage: sibling findings sharing its lineage_id across runs, newest first. Use after get_oracle_findings to interrogate a specific finding. Returns a not-found error for an unknown finding id, and status 'no_access' if the brand does not have Oracle v2.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
finding_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Add brand facts to a website's Knowledge Base in bulk (1-50 per call). Each fact runs the full ingestion pipeline (deduplication, approval gates, pillar routing); there is no way to force-approve. Returns one outcome per fact (approved | pending | duplicate; extensible) with the created fact id and the pillar it was filed under. Facts without a pillar_id are routed automatically and may land unfiled.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 4 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
facts › items › text
Not provided
Missing description. Explain what this value means and how to supply it.
facts › items › source_url
Not provided
Missing description. Explain what this value means and how to supply it.
facts › items › pillar_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Approve a content brief and start writing the article from it. Only valid while the piece is at status generated_brief. The article is generated from the brief exactly as it currently stands, including any revisions made with revise_brief or edits made in the app. Consumes content credits; poll get_content_status afterwards, then read the result with get_content_draft.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "approve_brief",
"description": "Approve a content brief and start writing the article from it. Only valid while the piece is at status generated_brief. The article is generated from the brief exactly as it currently stands, including any revisions made with revise_brief or edits made in the app. Consumes content credits; poll get_content_status afterwards, then read the result with get_content_draft.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"content_id"
],
"properties": {
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"type": "string",
"const": "generating"
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Approve brief",
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Start the content pipeline in one of four modes — draft (write new content from promptIds), snipe (outrank a competitor url), optimize (improve an existing url for AI search), slice (split one url into several articles). Required fields by mode: draft needs promptIds (resolve real prompt ids first — via prompts.selectForDraft in chat, or get_prompts / GET /v1/prompts over MCP and the API; never invent ids) AND title; snipe needs url AND title; optimize needs url AND title; slice needs url (and must NOT include promptIds). Returns durable contentIds (job handles); poll get_content_status (content.pipeline.status) per id. Credit op; requires approval.
Resolve contradictions between the description, input schema, and annotations.
Inputs0/100
0 of 22 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
mode
Not provided
Missing description. Explain what this value means and how to supply it.
title
Not provided
Missing description. Explain what this value means and how to supply it.
url
Not provided
Missing description. Explain what this value means and how to supply it.
prompt_ids
Not provided
Missing description. Explain what this value means and how to supply it.
custom_instructions
Not provided
Missing description. Explain what this value means and how to supply it.
brand_kit_id
Not provided
Missing description. Explain what this value means and how to supply it.
sheet_id
Not provided
Missing description. Explain what this value means and how to supply it.
use_content_memories
Not provided
Missing description. Explain what this value means and how to supply it.
auto_approve
Not provided
Missing description. Explain what this value means and how to supply it.
content_format_type
Not provided
Missing description. Explain what this value means and how to supply it.
scrape_additional_links
Not provided
Missing description. Explain what this value means and how to supply it.
kb_mode
Not provided
Missing description. Explain what this value means and how to supply it.
selected_topic_ids
Not provided
Missing description. Explain what this value means and how to supply it.
pinned_claim_ids
Not provided
Missing description. Explain what this value means and how to supply it.
use_kb_internal_links
Not provided
Missing description. Explain what this value means and how to supply it.
fact_review › topic_ids
Not provided
Missing description. Explain what this value means and how to supply it.
fact_review › kept_claim_ids
Not provided
Missing description. Explain what this value means and how to supply it.
fact_review › excluded_claim_ids
Not provided
Missing description. Explain what this value means and how to supply it.
rec_id
Not provided
Missing description. Explain what this value means and how to supply it.
rec_kind
Not provided
Missing description. Explain what this value means and how to supply it.
pdf_file_name_or_r2_key
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Create a Knowledge Base pillar (a subject area that groups brand facts) from a name and optional description. Get-or-create semantics: if a pillar with the same name already exists, it is returned with created: false instead of failing, so retries are idempotent.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
name
Not provided
Missing description. Explain what this value means and how to supply it.
description
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Create a prompt tag on a website, or return the existing tag when its name matches case-insensitively. Trims surrounding whitespace and rejects reserved prompt-type names. Returns the tag ID and whether it was created. Use the returned ID to assign the tag to prompts; creating a tag does not assign it to any prompts.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
tag
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "create_prompt_tag",
"description": "Create a prompt tag on a website, or return the existing tag when its name matches case-insensitively. Trims surrounding whitespace and rejects reserved prompt-type names. Returns the tag ID and whether it was created. Use the returned ID to assign the tag to prompts; creating a tag does not assign it to any prompts.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"tag"
],
"properties": {
"tag": {
"type": "string",
"maxLength": 255,
"minLength": 1
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"tag": {
"type": "string"
},
"tag_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"created": {
"type": "boolean"
},
"success": {
"type": "boolean",
"const": true
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create prompt tag",
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Create a saved view (filter preset) for a website. Saved views appear in the dashboard filter bar for every member of the website. filters is an object keyed by filter field key, each value shaped {"id": "<unique string>", "field": "<same field key>", "operator": "is_any_of", "values": [...]}. Common field keys: "models" (slugs like "chatgpt", "perplexity", "google_ai_overview"), "competitors", "prompts", "personas", "locations", "promptTags", "attributes" (arrays of UUIDs from the matching list tools), "countries", "sourceTag". "promptTags" also accepts the builtin tokens "type:high_intent" (branded prompts) and "type:discovery" (non-branded) alongside tag UUIDs. "sourceTag" values are the builtin categories "owned", "competitor", "partner", "third_party" or custom source tag UUIDs, not display labels; custom source tag ids appear on existing saved views (list the website's saved views to find them). When unsure, list the website's saved views and mirror their filter shapes. icon, when set, must be a supported Remix icon name (e.g. "RiStarLine"); invalid names are rejected with the full list. When talking to the user about a view or its filters, use the dashboard names (Branded / Non-branded prompts, Owned / Competitor / Partner / Third party sources), never internal tokens, field keys, operator strings, or icon identifiers.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 12 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
name
Not provided
Missing description. Explain what this value means and how to supply it.
icon
Not provided
Missing description. Explain what this value means and how to supply it.
filters
Not provided
Missing description. Explain what this value means and how to supply it.
olympus_layout › version
Not provided
Missing description. Explain what this value means and how to supply it.
olympus_layout › selectedViews
Not provided
Missing description. Explain what this value means and how to supply it.
olympus_layout › viewOrder
Not provided
Missing description. Explain what this value means and how to supply it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Permanently delete 1-50 brand facts from a website's Knowledge Base. There is no undo. Ids that do not exist on the website are reported in not_found_ids rather than failing the call, so retries are idempotent. Requires an admin; on OAuth connections the signed-in user must have the admin role.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
fact_ids
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Permanently delete 1-20 Knowledge Base pillars and every fact filed under them. Facts are deleted, not unfiled; there is no undo. Ids that do not exist on the website are reported in not_found_ids rather than failing the call, so retries are idempotent; ids in failed_ids are untouched and safe to retry. Requires an admin; on OAuth connections the signed-in user must have the admin role.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
pillar_ids
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Apply exact find-and-replace edits to a content draft's article body. Deterministic, no AI model involved: your replacement text lands verbatim (use revise_content when you want an AI rewrite from an instruction). Each edit's find text must match the current body exactly once; zero or multiple matches fail the whole call and nothing is saved, so extend the find text until it is unique. Edits apply in order, later ones see earlier results, and the batch is recorded as one new version, recoverable via get_content_versions / restore_content_version. Pass expected_version_number from get_content_draft to fail with a conflict when a new version was recorded after your read (a revision, edit, or restore). An app autosave changes the body without recording a version; that drift is caught by the anchors themselves, since a moved or vanished find text fails the call.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 5 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
edits › items › find
Not provided
Missing description. Explain what this value means and how to supply it.
edits › items › replace
Not provided
Missing description. Explain what this value means and how to supply it.
expected_version_number
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "edit_content",
"description": "Apply exact find-and-replace edits to a content draft's article body. Deterministic, no AI model involved: your replacement text lands verbatim (use revise_content when you want an AI rewrite from an instruction). Each edit's find text must match the current body exactly once; zero or multiple matches fail the whole call and nothing is saved, so extend the find text until it is unique. Edits apply in order, later ones see earlier results, and the batch is recorded as one new version, recoverable via get_content_versions / restore_content_version. Pass expected_version_number from get_content_draft to fail with a conflict when a new version was recorded after your read (a revision, edit, or restore). An app autosave changes the body without recording a version; that drift is caught by the anchors themselves, since a moved or vanished find text fails the call.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"content_id",
"edits"
],
"properties": {
"edits": {
"type": "array",
"items": {
"type": "object",
"required": [
"find",
"replace"
],
"properties": {
"find": {
"type": "string",
"maxLength": 10000,
"minLength": 1
},
"replace": {
"type": "string",
"maxLength": 10000
}
},
"additionalProperties": false
}
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"expected_version_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"body": {
"type": "string"
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"version_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"version_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"body_word_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"previous_body_word_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"annotations": {
"title": "Edit content",
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
List a website's brand facts from the Knowledge Base, newest first, with offset paging. By default excludes facts generated by Oracle analysis; pass include_oracle=true to include them. Filters: pillar, review status (default approved), source type, and unfiled=true for facts not under any published pillar (unfiled and pillar_id are mutually exclusive).
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 8 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
pillar_id
Not provided
Missing description. Explain what this value means and how to supply it.
status
Not provided
Missing description. Explain what this value means and how to supply it.
source_type
Not provided
Missing description. Explain what this value means and how to supply it.
unfiled
Not provided
Missing description. Explain what this value means and how to supply it.
include_oracle
Not provided
Missing description. Explain what this value means and how to supply it.
limit
Not provided
Missing description. Explain what this value means and how to supply it.
offset
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Read the current draft text of a content item — the article body as it stands right now, including every revision applied so far. Use this before revise_content to see what you are changing, and after it to confirm the result. A status of generated_brief means the brief is ready while the article is still being written, so body may still be empty. For the full record (cited urls, links, social posts) use get_content_detail instead.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_content_draft",
"description": "Read the current draft text of a content item — the article body as it stands right now, including every revision applied so far. Use this before revise_content to see what you are changing, and after it to confirm the result. A status of generated_brief means the brief is ready while the article is still being written, so body may still be empty. For the full record (cited urls, links, social posts) use get_content_detail instead.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"content_id"
],
"properties": {
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"brief": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"meta_description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"latest_version_number": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get content draft",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Get the normalized pipeline status (running | succeeded | failed) for one content row, plus the raw stage behind it. Read-only. Poll once per contentId returned by create_content (content.pipeline.start). A stage of generated_brief with status running means the brief is ready and waiting — for a non-auto-approve draft it stays there until approve_brief is called, so do not treat running as always in progress. Not meaningful for tracked pages (track_content_urls / external rows): they have no generation pipeline and report running with a null stage forever — read them via get_tracked_content or get_content_detail instead.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "get_content_status",
"description": "Get the normalized pipeline status (running | succeeded | failed) for one content row, plus the raw stage behind it. Read-only. Poll once per contentId returned by create_content (content.pipeline.start). A stage of generated_brief with status running means the brief is ready and waiting — for a non-auto-approve draft it stays there until approve_brief is called, so do not treat running as always in progress. Not meaningful for tracked pages (track_content_urls / external rows): they have no generation pipeline and report running with a null stage forever — read them via get_tracked_content or get_content_detail instead.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"content_id"
],
"properties": {
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"stage": {
"anyOf": [
{
"enum": [
"scheduled",
"pending",
"pending_brief",
"generated_brief",
"pending_article",
"generated",
"done",
"failed"
],
"type": "string"
},
{
"type": "null"
}
]
},
"status": {
"enum": [
"running",
"succeeded",
"failed"
],
"type": "string"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get content status",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Read the full text of one saved version of a content item. Use it to compare two passes (fetch both and diff them yourself) or to check what an earlier version said before restoring it.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
version_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
List the saved versions of a content item, newest first. Each entry carries its version number, label, how it was produced, and who made it. Use it to see how a draft evolved, then get_content_version to read a specific one, or restore_content_version to go back to it.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 4 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
limit
Not provided
Missing description. Explain what this value means and how to supply it.
offset
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Read recorded organization credit consumption: total, hourly (24h) or daily trend, and charged website/group/organization pools. Use for spending trends and biggest charged pools; the credit-balance tools read current balances. For 'this month' or a specific spike, supply explicit UTC window boundaries; 30d is rolling, not a calendar month. State the returned interval. A group pool is not an originating website. The breakdown may exclude unattributed usage or be capped by the billing provider; totalCreditsUsed is authoritative, not the sum of displayed entities. Negative credits are refunds. Entities are paginated: continue with window and nextOffset while hasMore. Use credit-usage events to inspect recorded actions. Requires organization billing access on a signed-in connection, or a global organization API key. Website-scoped keys are not supported. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 6 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
range
Not provided
Missing description. Explain what this value means and how to supply it.
window › start_at_utc
Not provided
Missing description. Explain what this value means and how to supply it.
window › end_at_utc
Not provided
Missing description. Explain what this value means and how to supply it.
offset
Not provided
Missing description. Explain what this value means and how to supply it.
limit
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Read a page of recorded credit charges/refunds and action labels for the organization, optionally filtered by originatingWebsiteId. Use to inspect a usage spike or charges behind a total. Use credit-usage totals for complete period totals. Supply explicit UTC window for calendar months. Continue with returned window, originatingWebsiteId, and nextOffset while hasMore; never compute the next offset from returned row count. Limit bounds underlying operations, each may split into several charged-pool rows. One page is not a complete action breakdown. 'Not recorded' means unknown historical action/site attribution, never infer it. Unknown raw action tags are preserved. Negative credits are refunds. Requires organization billing access on a signed-in connection, or a global organization API key. Website-scoped keys are not supported. Read-only.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 7 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
range
Not provided
Missing description. Explain what this value means and how to supply it.
window › start_at_utc
Not provided
Missing description. Explain what this value means and how to supply it.
window › end_at_utc
Not provided
Missing description. Explain what this value means and how to supply it.
offset
Not provided
Missing description. Explain what this value means and how to supply it.
limit
Not provided
Missing description. Explain what this value means and how to supply it.
originating_website_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
Fetch a pillar's synthesized markdown document from the Knowledge Base. Returns document: null when the pillar exists but has no synthesized document yet.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
pillar_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
List a website's Knowledge Base pillars (excluding archived ones) with approved-fact counts, whether a synthesized document exists, and when each pillar was last researched.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 1 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Read saved Google organic rankings by explicit market and device alongside observed AI visibility. Includes recent history, missing-data reasons, freshness and committed provider budget. Does not trigger collection.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 2 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
property_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Get the Shopping Insights dashboard for a website over a date range: how often the brand's products appear in AI shopping answers (product carousels) versus competitors, average position and price, the top own and competitor products, the competitor leaderboard, retailer (merchant) breakdown, rank distribution, price comparison, and a daily appearances trend. Rates are percentages 0-100; positions are 1-based (lower is better). Requires a paid plan.
The description explains the capability, when to use it, and what to expect.
Inputs8/100
1 of 10 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › start_date
Start of the date range, YYYY-MM-DD (UTC), inclusive. Required.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
filters › end_date
Not provided
Missing description. Explain what this value means and how to supply it.
filters › schedule_id
Not provided
Missing description. Explain what this value means and how to supply it.
filters › models
Not provided
Missing description. Explain what this value means and how to supply it.
filters › competitor_ids
Not provided
Missing description. Explain what this value means and how to supply it.
filters › prompt_tags
Not provided
Missing description. Explain what this value means and how to supply it.
filters › prompt_tags_operator
Not provided
Missing description. Explain what this value means and how to supply it.
filters › target_identifiers
Not provided
Missing description. Explain what this value means and how to supply it.
top_products_limit
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Merge 1-20 source pillars into a published target pillar: every fact on the sources (any review status) re-files onto the target, page links carry over keeping the stronger signal, and the source pillars are then deleted. The target must be a published pillar and must not appear among the sources. Unlike the other Knowledge Base writes, retries are strict: missing source ids are rejected rather than skipped, so re-read the pillars before retrying a failed merge.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
target_pillar_id
Not provided
Missing description. Explain what this value means and how to supply it.
source_pillar_ids
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
File 1-50 brand facts under a published Knowledge Base pillar — works for unfiled facts and re-files facts from other pillars. Review status never changes, and only approved facts under a published pillar feed content generation, so moving is what puts approved facts to work. Missing ids are reported in not_found_ids rather than failing the call, so retries are idempotent.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
pillar_id
Not provided
Missing description. Explain what this value means and how to supply it.
fact_ids
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Move one or more content items to a different Content Hub sheet, or back to the shared pool. Sheet assignment is organizational metadata only: a move never changes an item's stage, brief, body, versions, URL, or metrics, and the item stays fully readable and revisable. targetSheetId must be a "sheet"-type tab from the Content Hub sheets list — view-type tabs (e.g. All content) are computed filters, not assignable; pass null to unassign back to the shared pool they display. Batch is all-or-nothing: if any contentIds entry does not belong to the website, nothing moves. Custom-column values follow each item when the target has a matching column (same name and type; missing columns are auto-created); values whose column conflicts by type are dropped, and multi-select selections whose option is missing on the matched target column are removed — both counts are reported. Each moved item is returned with its previous and new sheet id so no follow-up read is needed.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_ids
Not provided
Missing description. Explain what this value means and how to supply it.
target_sheet_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Mark a content item as published at its live URL so Athena starts attributing citations and mentions to it. Call this only after the piece is actually live on the site. It is the step that closes the loop: the URL becomes the item's citation/metric join key, the publish time is stamped, and the pipeline stage moves to done. A first publish requires a finished article (stage generated), with one exception: an optimize draft is created from a page that is already live and can be marked published while it waits at stage pending, as long as no Athena review is running on it. Briefs, still-generating or failed pieces, optimize drafts with a review in flight, and items with a scheduled CMS publish are rejected with the reason. Pass the exact public URL of the live page (a bare domain path like acme.com/blog/post is fine; the protocol is stripped on store). Calling it again on an already-published item (including external and imported pages, which are live by definition) updates the tracked URL only, keeping the original publish time. This is the only way to set a content URL over MCP; rename_content is deliberately title-only.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
url
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "publish_content",
"description": "Mark a content item as published at its live URL so Athena starts attributing citations and mentions to it. Call this only after the piece is actually live on the site. It is the step that closes the loop: the URL becomes the item's citation/metric join key, the publish time is stamped, and the pipeline stage moves to done. A first publish requires a finished article (stage generated), with one exception: an optimize draft is created from a page that is already live and can be marked published while it waits at stage pending, as long as no Athena review is running on it. Briefs, still-generating or failed pieces, optimize drafts with a review in flight, and items with a scheduled CMS publish are rejected with the reason. Pass the exact public URL of the live page (a bare domain path like acme.com/blog/post is fine; the protocol is stripped on store). Calling it again on an already-published item (including external and imported pages, which are live by definition) updates the tracked URL only, keeping the original publish time. This is the only way to set a content URL over MCP; rename_content is deliberately title-only.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"content_id",
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"url": {
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"published_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"already_published": {
"type": "boolean"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Publish content",
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Bring an earlier version's text back as the current draft — use it when a later pass came out worse than an earlier one. Nothing is deleted: the restored text is appended as a new version on top of the history, so the passes in between remain readable and restorable.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
version_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Rewrite a content brief from a natural-language instruction (for example: 'add a section on pricing objections', 'cut the competitor comparison'). An AI model performs the rewrite server-side, so the result is generated text, not your literal wording. Records each pass as a version; iterate by calling it again, since each call starts from the current brief. Most useful while a piece waits at status generated_brief, where the brief still shapes what the article will say — call approve_brief once it reads right. It also works after the article exists, to correct the brief for a later regeneration; note that revising the brief does NOT rewrite an already-generated article, so use revise_content for that.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
instruction
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "revise_brief",
"description": "Rewrite a content brief from a natural-language instruction (for example: 'add a section on pricing objections', 'cut the competitor comparison'). An AI model performs the rewrite server-side, so the result is generated text, not your literal wording. Records each pass as a version; iterate by calling it again, since each call starts from the current brief. Most useful while a piece waits at status generated_brief, where the brief still shapes what the article will say — call approve_brief once it reads right. It also works after the article exists, to correct the brief for a later regeneration; note that revising the brief does NOT rewrite an already-generated article, so use revise_content for that.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"content_id",
"instruction"
],
"properties": {
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"instruction": {
"type": "string",
"maxLength": 5000,
"minLength": 1
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"brief": {
"type": "string"
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"version_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"version_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"annotations": {
"title": "Revise brief",
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Rewrite an existing content draft from a natural-language instruction (for example: 'tighten the intro', 'add a section on pricing', 'remove the second half'). An AI model performs the rewrite server-side, so the result is generated text, not your literal wording; when you already have the exact replacement text, use edit_content instead. Applies the change to the whole article and records it as a new version, so earlier passes stay recoverable via get_content_versions / restore_content_version. Iterate by calling it again — each call starts from the current text, so no version id is needed. Use this instead of create_content to change a draft; it edits in place rather than generating a new piece. The returned body is always the complete replacement article, never just the edited passage; compare body_word_count with previous_body_word_count to confirm nothing unexpected was lost.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 3 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
content_id
Not provided
Missing description. Explain what this value means and how to supply it.
instruction
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"name": "revise_content",
"description": "Rewrite an existing content draft from a natural-language instruction (for example: 'tighten the intro', 'add a section on pricing', 'remove the second half'). An AI model performs the rewrite server-side, so the result is generated text, not your literal wording; when you already have the exact replacement text, use edit_content instead. Applies the change to the whole article and records it as a new version, so earlier passes stay recoverable via get_content_versions / restore_content_version. Iterate by calling it again — each call starts from the current text, so no version id is needed. Use this instead of create_content to change a draft; it edits in place rather than generating a new piece. The returned body is always the complete replacement article, never just the edited passage; compare body_word_count with previous_body_word_count to confirm nothing unexpected was lost.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"content_id",
"instruction"
],
"properties": {
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"instruction": {
"type": "string",
"maxLength": 5000,
"minLength": 1
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"body": {
"type": "string"
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"version_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"version_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"body_word_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
"previous_body_word_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
},
"additionalProperties": false
},
"annotations": {
"title": "Revise content",
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Semantic search over a website's approved brand facts in the Knowledge Base. Reaches facts not filed under any pillar. Returns fact text with confidence, source URL and quote, and the published pillar it belongs to (null when unfiled).
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 4 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
query
Not provided
Missing description. Explain what this value means and how to supply it.
pillar_id
Not provided
Missing description. Explain what this value means and how to supply it.
top_k
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description54/100
Start a response-streaming run for a website (all prompts or a selection)
Describe the concrete operation and its scope instead of restating the tool name.
Inputs9/100
1 of 8 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
schedule_id
Not provided
Missing description. Explain what this value means and how to supply it.
prompt_ids
Not provided
Missing description. Explain what this value means and how to supply it.
selected_models
Map of model id to enabled flag, e.g. { "chatgpt": true, "ai_overview": true, "ai_mode": false }. Model ids: chatgpt, ai_overview (Google AI Overviews; google_ai_overview is also accepted), perplexity, gemini, copilot, ai_mode, grok, claude, deepseek, meta_ai, mistral. An id set to true that names no model is rejected. Omit to run all enabled models.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
prompt_variations
Not provided
Missing description. Explain what this value means and how to supply it.
use_personas
Not provided
Missing description. Explain what this value means and how to supply it.
use_locations
Not provided
Missing description. Explain what this value means and how to supply it.
only_locations
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description99/100
Register existing pages or third-party URLs as tracked Content Hub items so Athena attributes citations and mentions to them. Creates external content rows from bare URLs with no generation and no credit cost. Tracking starts immediately: the normalized URL becomes the citation/metric join key, so pages cited in the website's monitored AI responses accrue metrics with no publish step (use it for guest posts, partner placements, or any page Athena did not generate). Idempotent per URL: a URL already present on the website (any content type) is not duplicated; the response lists it under skipped with the existing content_id and type. Check that type before chaining destructive calls (a skip can resolve to first-party generated content that shares the URL). Rows are created without page text, which citation tracking does not need; the body can be filled from the app later. Duplicate URLs within one call (including tracking-param variants of the same page) collapse to one row, first occurrence wins. Optional sheet_id files rows under a Content Hub tab; view-type tabs resolve to the main pool (null), echoed per row. Optional per-URL fields set the customer's own Content Hub columns on the created row, addressed by column name as shown on the destination tab (text, number, date, checkbox, link, and multi-select columns; unknown multi-select options are created). An unknown column name or a value that does not fit the column type rejects the whole call and nothing is tracked; skipped URLs keep their existing values. If the user names a destination tab, resolve its id with get_content_hub_sheets before tracking. Omitting sheet_id uses the shared pool, not the user's currently open tab. After the call, report created_count and skipped_count separately, name the returned destination_name, and share content_hub_url so the user can open each item. Skipped rows keep their existing tab: use their returned destination and never describe them as newly added or moved.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 6 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
urls › items › url
Not provided
Missing description. Explain what this value means and how to supply it.
urls › items › title
Not provided
Missing description. Explain what this value means and how to supply it.
urls › items › fields › items › column
Not provided
Missing description. Explain what this value means and how to supply it.
urls › items › fields › items › value
Not provided
Missing description. Explain what this value means and how to supply it.
sheet_id
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"created": {
"type": "array",
"items": {
"type": "object",
"required": [
"content_id",
"url",
"sheet_id",
"destination_name",
"content_hub_url"
],
"properties": {
"url": {
"type": "string"
},
"sheet_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"content_hub_url": {
"type": "string",
"format": "uri",
"description": "Direct link to this Content Hub item with its website and destination selected."
},
"destination_name": {
"type": "string",
"description": "Name of the tab displaying this row, or Shared pool when no view exists."
}
},
"additionalProperties": false
}
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"required": [
"content_id",
"url",
"type",
"sheet_id",
"destination_name",
"content_hub_url"
],
"properties": {
"url": {
"type": "string"
},
"type": {
"type": "string"
},
"sheet_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"content_hub_url": {
"type": "string",
"format": "uri",
"description": "Direct link to the existing item at its current location. Skipped rows are not moved."
},
"destination_name": {
"type": "string",
"description": "Existing row's destination, which may differ from the requested tab."
}
},
"additionalProperties": false
}
},
"success": {
"type": "boolean",
"const": true
},
"created_count": {
"type": "number"
},
"skipped_count": {
"type": "number"
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "track_content_urls",
"description": "Register existing pages or third-party URLs as tracked Content Hub items so Athena attributes citations and mentions to them. Creates external content rows from bare URLs with no generation and no credit cost. Tracking starts immediately: the normalized URL becomes the citation/metric join key, so pages cited in the website's monitored AI responses accrue metrics with no publish step (use it for guest posts, partner placements, or any page Athena did not generate). Idempotent per URL: a URL already present on the website (any content type) is not duplicated; the response lists it under skipped with the existing content_id and type. Check that type before chaining destructive calls (a skip can resolve to first-party generated content that shares the URL). Rows are created without page text, which citation tracking does not need; the body can be filled from the app later. Duplicate URLs within one call (including tracking-param variants of the same page) collapse to one row, first occurrence wins. Optional sheet_id files rows under a Content Hub tab; view-type tabs resolve to the main pool (null), echoed per row. Optional per-URL fields set the customer's own Content Hub columns on the created row, addressed by column name as shown on the destination tab (text, number, date, checkbox, link, and multi-select columns; unknown multi-select options are created). An unknown column name or a value that does not fit the column type rejects the whole call and nothing is tracked; skipped URLs keep their existing values. If the user names a destination tab, resolve its id with get_content_hub_sheets before tracking. Omitting sheet_id uses the shared pool, not the user's currently open tab. After the call, report created_count and skipped_count separately, name the returned destination_name, and share content_hub_url so the user can open each item. Skipped rows keep their existing tab: use their returned destination and never describe them as newly added or moved.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"website_id",
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1
},
"title": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"column",
"value"
],
"properties": {
"value": {
"anyOf": [
{
"type": "string",
"maxLength": 10000
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 200
}
}
]
},
"column": {
"type": "string",
"maxLength": 200,
"minLength": 1
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}
},
"sheet_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"website_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"created": {
"type": "array",
"items": {
"type": "object",
"required": [
"content_id",
"url",
"sheet_id",
"destination_name",
"content_hub_url"
],
"properties": {
"url": {
"type": "string"
},
"sheet_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"content_hub_url": {
"type": "string",
"format": "uri",
"description": "Direct link to this Content Hub item with its website and destination selected."
},
"destination_name": {
"type": "string",
"description": "Name of the tab displaying this row, or Shared pool when no view exists."
}
},
"additionalProperties": false
}
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"required": [
"content_id",
"url",
"type",
"sheet_id",
"destination_name",
"content_hub_url"
],
"properties": {
"url": {
"type": "string"
},
"type": {
"type": "string"
},
"sheet_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"content_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"content_hub_url": {
"type": "string",
"format": "uri",
"description": "Direct link to the existing item at its current location. Skipped rows are not moved."
},
"destination_name": {
"type": "string",
"description": "Existing row's destination, which may differ from the requested tab."
}
},
"additionalProperties": false
}
},
"success": {
"type": "boolean",
"const": true
},
"created_count": {
"type": "number"
},
"skipped_count": {
"type": "number"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Track content urls",
"readOnlyHint": false,
"openWorldHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Update one brand fact's text, source URL, or confidence in the Knowledge Base. Only provided fields change; pass source_url: "" to clear the source. Changing the text creates a new fact (new id) and archives the current one; the new fact keeps the current review status and the response carries it. Source URL and confidence edits update the fact in place. Duplicates across other facts are not rejected here (Knowledge Base dedup owns those). Does not change review status.
The description explains the capability, when to use it, and what to expect.
Inputs0/100
0 of 5 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
fact_id
Not provided
Missing description. Explain what this value means and how to supply it.
text
Not provided
Missing description. Explain what this value means and how to supply it.
source_url
Not provided
Missing description. Explain what this value means and how to supply it.
confidence
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Update a Knowledge Base pillar's name, description, or status. At least one of name, description, or status must be provided; only provided fields change, and description: "" clears the stored description. Renaming fails with a conflict when another pillar already uses the name. Status accepts published or archived: archiving hides the pillar from get_pillars and stops its facts feeding content generation, while keeping the facts stored.
Describe the returned information so the agent knows whether it will answer the request.
Inputs0/100
0 of 5 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
website_id
Not provided
Missing description. Explain what this value means and how to supply it.
pillar_id
Not provided
Missing description. Explain what this value means and how to supply it.
name
Not provided
Missing description. Explain what this value means and how to supply it.
description
Not provided
Missing description. Explain what this value means and how to supply it.
status
Not provided
Missing description. Explain what this value means and how to supply it.
Annotations75/100
Declare idempotentHint based on the tool’s actual behavior.
athenahq setup, tools, quality score, publishing readiness, and alternatives.
How do I add athenahq to Claude, ChatGPT, or Cursor?
Add athenahq to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://api.athenahq.ai/api/mcp.
Is athenahq MCP ready for ChatGPT and Claude?
As of October 6, 2026, athenahq scores 93/100 on Manufact's MCP publishing checklist. The scan does not yet meet ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is athenahq's MCP tool documentation?
As of October 6, 2026, athenahq scores 67/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 94 of 94 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to athenahq?
As of October 20, 2026, alternatives to athenahq in marketing-seo on the Manufact MCP leaderboard include OpenAffiliate, Buzzfy, Airefs AI Visibility, TalkGenAI, and RankControl.
How can athenahq improve its MCP documentation?
create_location is the lowest-scoring reviewed tool at 53/100. 0 of 4 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.