Read Airefs data to analyze brand visibility in ChatGPT and Google AI Overview, inspect prompts and citations, compare competitors, and identify content and backlink opportunities.
Read Airefs data to analyze brand visibility in ChatGPT and Google AI Overview, inspect prompts and citations, compare competitors, and identify content and backlink opportunities.
Airefs measures how visible a brand is in AI answers and turns that into levers, each with a product surface: (1) publish the evidence-backed article recommendations (Articles page — list_article_recommendations ranks the content gaps by citation evidence, which is not the order the page writes in; list_scheduled_content is the queue actually being written); (2) join the discussions AI already cites (Sources page — list_source_urls with citation_type "Discussion" for the threads already cited; Discussions page — list_discussion_threads for the Reddit Alerts keyword matches; get_discussion_mentions for scan state); (3) earn citations on the third-party domains AI already trusts (Backlinks page — list_backlink_opportunities for the domains to pursue; list_source_domains for the unfiltered citation evidence; list_backlink_statuses for outreach state). For a full prioritized plan, run the airefs_action_plan prompt; per-page docs are under get_doc. List tools return one page: page_row_count is the page size, never a population total. Cite total_count where a tool returns it — when total_count_is_capped is true it is a lower bound, so report it as "at least" that many — otherwise page through cursor while has_more is true before claiming a total (get_prompt_inventory_summary reports prompt totals).
Protocol
Pass100/10020 / 20 pts
Connection, authentication, and protocol compatibility.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"date",
"timestamp",
"time_zone",
"utc_offset"
],
"properties": {
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "Calendar date in the requested time zone."
},
"time_zone": {
"type": "string",
"description": "Time zone used to calculate date and utc_offset."
},
"timestamp": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Current instant expressed in UTC."
},
"utc_offset": {
"type": "string",
"pattern": "^[+-]\\d{2}:\\d{2}$",
"description": "Requested time zone's offset from UTC at this instant."
}
},
"additionalProperties": false
}
Original tool metadata
{
"name": "get_current_date",
"title": "Get current date",
"description": "Return the calendar date in the selected time zone, the current UTC timestamp, time_zone and utc_offset for reliable date-range anchoring.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"time_zone": {
"type": "string",
"default": "UTC",
"description": "Time zone used to determine the calendar date and UTC offset, for example Europe/Amsterdam."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"date",
"timestamp",
"time_zone",
"utc_offset"
],
"properties": {
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"description": "Calendar date in the requested time zone."
},
"time_zone": {
"type": "string",
"description": "Time zone used to calculate date and utc_offset."
},
"timestamp": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Current instant expressed in UTC."
},
"utc_offset": {
"type": "string",
"pattern": "^[+-]\\d{2}:\\d{2}$",
"description": "Requested time zone's offset from UTC at this instant."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Get current date",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Read an analysis procedure with its question, argument requirements/defaults, supporting documentation references, and glossary resource URIs. Documentation entries include a slug, title, and related product-screen URL when one exists.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
topic
Analysis question to answer; selects the procedure, starting arguments, and supporting documentation.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Read Airefs product documentation for grounding advice in published guidance. Returns the page slug, title, body text, and app_url for its product screen when one exists.
The description explains the capability, when to use it, and what to expect.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
slug
Product topic to read about; choose the page that matches the feature or question.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description76/100
Get filtered mention and citation metrics over time for the site and tracked entities. granularity:"week" aggregates batches into weekly buckets where a prompt counts as mentioned if any completed run that week mentioned the brand; weekly rows have a null batch_id. A window longer than the plan's analytics history returns its most recent allowed days and reports the shortening in history_limited.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
start_date
First calendar day to include in the analytics window, interpreted in UTC.
Clear enough to supply this argument.
end_date
Last calendar day to include in the analytics window, interpreted in UTC.
Clear enough to supply this argument.
tag_slug
Prompt tag slug from list_tags or suggest_tags; restricts observations to that tag.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
country_code
Prompt country to include, using the country value returned with monitored prompts.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
entity_ids
Entity identifiers from get_current_visibility_by_entity; omit to include all tracked entities.
Clear enough to supply this argument.
answer_source
AI answer source whose observations to include; omitted uses ChatGPT.
Clear enough to supply this argument.
granularity
Group observations by execution batch or calendar week; omitted keeps each batch separate.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
List a site's recent ChatGPT batches with times, prompt counts, mention/citation percentages, visibility scores, and top-position counts, most recent first.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
limit
Recent completed batches to include in the result window.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
List monitored prompt text, country, tags, and latest/previous answer results. Filter by tag or latest-run brand mentions; mention_state:"never" means no mention in the latest run on the chosen answer source, not across all history.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
tag
Prompt tag slug from list_tags or suggest_tags; selects prompts carrying that tag.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
mention_state
Filter by the latest run: never means no brand mention in that run, not across all history.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
mention_answer_source
Answer source used to evaluate the latest-run mention filter.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Page size measured in monitored prompts.
Clear enough to supply this argument.
cursor
Continuation token returned by this tool; reuse it with the same filters to read the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Get one monitored prompt with its country, tags, execution state, and latest/previous brand rankings, mention counts, citation counts, and cited domains for each answer source.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
prompt_id
Monitored prompt identifier from list_prompts or list_source_prompts.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
List per-prompt brand mention rates over completed runs in a date window, lowest first, to find prompts the brand is rarely or never mentioned in historically. A window longer than the plan's analytics history returns its most recent allowed days and reports the shortening in history_limited.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
start_date
First calendar day to include in the analytics window, interpreted in UTC.
Clear enough to supply this argument.
end_date
Last calendar day to include in the analytics window, interpreted in UTC.
Clear enough to supply this argument.
answer_source
AI answer source whose observations to include.
Clear enough to supply this argument.
max_mention_rate
Inclusive upper threshold for the percentage of completed runs mentioning the brand.
Clear enough to supply this argument.
limit
Size of the result window, measured in prompts with completed runs.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"window_truncated"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "string"
},
{
"type": "string"
},
{
"type": "string"
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 3,
"minItems": 3,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "tag_id"
},
{
"type": "string",
"const": "name"
},
{
"type": "string",
"const": "slug"
}
]
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
},
"window_truncated": {
"type": "boolean",
"description": "Whether this result was capped or more matching data may exist; no continuation cursor is available."
}
},
"description": "Rows contain matching tag_id, display name, and slug used for filtering.",
"additionalProperties": false
}
Original tool metadata
{
"name": "suggest_tags",
"title": "Suggest prompt tags",
"description": "Find existing tags by slug prefix and return their IDs, display names, and filtering slugs.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"site_id",
"prefix"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 25,
"minimum": 1,
"description": "Size of the matching-tag suggestion list."
},
"prefix": {
"type": "string",
"description": "Beginning of an existing tag slug to match; an empty prefix includes all tags."
},
"site_id": {
"type": "string",
"minLength": 1,
"description": "Site identifier from the sites returned by whoami; selects the site whose data to read."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"window_truncated"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "string"
},
{
"type": "string"
},
{
"type": "string"
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 3,
"minItems": 3,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "tag_id"
},
{
"type": "string",
"const": "name"
},
{
"type": "string",
"const": "slug"
}
]
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
},
"window_truncated": {
"type": "boolean",
"description": "Whether this result was capped or more matching data may exist; no continuation cursor is available."
}
},
"description": "Rows contain matching tag_id, display name, and slug used for filtering.",
"additionalProperties": false
},
"annotations": {
"title": "Suggest prompt tags",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
List cited domains with citation totals, unique URL counts, first/last seen dates, and momentum columns (recent_citations and previous_citations compare the latest 3 batches against the prior 3; order_by:"trending" ranks by citation_trend, their difference). This is the unfiltered citation evidence, so it includes major media, the site's own domain, and competitors.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
scope
Use latest for the latest completed response per prompt and answer source, or all for retained history.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
answer_source
AI answer source whose observations to include; all combines sources where offered.
Clear enough to supply this argument.
citation_type
Source classification to include, using a citation_type value from list_source_urls.
Explain the meaning of this value, not just its name.
search
Text to match within source hostnames.
Clear enough to supply this argument.
order_by
Rank by citation frequency, distinct cited pages, hostname, or observation time. trending ranks the latest three batches minus the prior three, always largest increase first regardless of order_dir.
Clear enough to supply this argument.
order_dir
Direction in which to sort the selected ordering field.
Clear enough to supply this argument.
limit
Page size measured in cited domains.
Clear enough to supply this argument.
cursor
Continuation token returned by this tool; reuse it with the same filters to read the next page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"has_more",
"cursor",
"total_count"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 9,
"minItems": 9,
"prefixItems": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Citation occurrences for the selected scope and filters."
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Distinct normalized page URLs; domain-only evidence does not add a URL."
},
{
"type": "string",
"description": "Earliest citation time within the selected scope."
},
{
"type": "string",
"description": "Latest citation time within the selected scope."
},
{
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Title from the latest citation on this domain, when available."
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Citation occurrences in the latest three completed batches, independent of scope."
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Citation occurrences in the three completed batches preceding the latest three, independent of scope."
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "recent_citations minus previous_citations; positive means increasing citation frequency."
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Continuation token for the next page with the same filters; null when complete."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 9,
"minItems": 9,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "domain"
},
{
"type": "string",
"const": "total_citations"
},
{
"type": "string",
"const": "unique_urls"
},
{
"type": "string",
"const": "first_seen_at"
},
{
"type": "string",
"const": "last_seen_at"
},
{
"type": "string",
"const": "title"
},
{
"type": "string",
"const": "recent_citations"
},
{
"type": "string",
"const": "previous_citations"
},
{
"type": "string",
"const": "citation_trend"
}
]
},
"has_more": {
"type": "boolean",
"description": "Whether another page is available for these filters."
},
"total_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
}
},
"description": "Cited-domain rows combine scope-filtered totals with a separate comparison of the latest three completed batches and the prior three. total_count is the number of matching domains.",
"additionalProperties": false
}
Original tool metadata
{
"name": "list_source_domains",
"title": "List citation source domains",
"description": "List cited domains with citation totals, unique URL counts, first/last seen dates, and momentum columns (recent_citations and previous_citations compare the latest 3 batches against the prior 3; order_by:\"trending\" ranks by citation_trend, their difference). This is the unfiltered citation evidence, so it includes major media, the site's own domain, and competitors.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"site_id"
],
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Page size measured in cited domains."
},
"scope": {
"enum": [
"latest",
"all"
],
"type": "string",
"default": "latest",
"description": "Use latest for the latest completed response per prompt and answer source, or all for retained history."
},
"cursor": {
"type": "string",
"description": "Continuation token returned by this tool; reuse it with the same filters to read the next page."
},
"search": {
"type": "string",
"description": "Text to match within source hostnames."
},
"site_id": {
"type": "string",
"minLength": 1,
"description": "Site identifier from the sites returned by whoami; selects the site whose data to read."
},
"order_by": {
"enum": [
"total_citations",
"unique_urls",
"domain",
"first_seen_at",
"last_seen_at",
"trending"
],
"type": "string",
"default": "total_citations",
"description": "Rank by citation frequency, distinct cited pages, hostname, or observation time. trending ranks the latest three batches minus the prior three, always largest increase first regardless of order_dir."
},
"order_dir": {
"enum": [
"asc",
"desc"
],
"type": "string",
"default": "desc",
"description": "Direction in which to sort the selected ordering field."
},
"answer_source": {
"enum": [
"chatgpt",
"google_ai_overview",
"all"
],
"type": "string",
"default": "chatgpt",
"description": "AI answer source whose observations to include; all combines sources where offered."
},
"citation_type": {
"type": "string",
"minLength": 1,
"description": "Source classification to include, using a citation_type value from list_source_urls."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"has_more",
"cursor",
"total_count"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 9,
"minItems": 9,
"prefixItems": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Citation occurrences for the selected scope and filters."
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Distinct normalized page URLs; domain-only evidence does not add a URL."
},
{
"type": "string",
"description": "Earliest citation time within the selected scope."
},
{
"type": "string",
"description": "Latest citation time within the selected scope."
},
{
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Title from the latest citation on this domain, when available."
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Citation occurrences in the latest three completed batches, independent of scope."
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Citation occurrences in the three completed batches preceding the latest three, independent of scope."
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "recent_citations minus previous_citations; positive means increasing citation frequency."
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Continuation token for the next page with the same filters; null when complete."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 9,
"minItems": 9,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "domain"
},
{
"type": "string",
"const": "total_citations"
},
{
"type": "string",
"const": "unique_urls"
},
{
"type": "string",
"const": "first_seen_at"
},
{
"type": "string",
"const": "last_seen_at"
},
{
"type": "string",
"const": "title"
},
{
"type": "string",
"const": "recent_citations"
},
{
"type": "string",
"const": "previous_citations"
},
{
"type": "string",
"const": "citation_trend"
}
]
},
"has_more": {
"type": "boolean",
"description": "Whether another page is available for these filters."
},
"total_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
}
},
"description": "Cited-domain rows combine scope-filtered totals with a separate comparison of the latest three completed batches and the prior three. total_count is the number of matching domains.",
"additionalProperties": false
},
"annotations": {
"title": "List citation source domains",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
List cited URLs with page titles, descriptions, source categories, citation counts, observation dates, and associated prompt tags.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
scope
Use latest for the latest completed response per prompt and answer source, or all for retained history.
Clear enough to supply this argument.
answer_source
AI answer source whose observations to include; all combines sources where offered.
Clear enough to supply this argument.
citation_type
Category assigned to a cited page, such as its content or site type. Omit to discover categories in the returned citation_type values, then reuse one to filter.
Clear enough to supply this argument.
tag_slug
Prompt tag slug from list_tags or suggest_tags; restricts observations to that tag.
Clear enough to supply this argument.
search
Text to match within source URLs or page titles.
Clear enough to supply this argument.
domain
Source hostname from list_source_domains or list_source_urls, without a scheme or path.
Clear enough to supply this argument.
owner
Restrict sources to tracked competitor domains, or include sources regardless of ownership.
Clear enough to supply this argument.
smart_filter
Select discussion sources or sources first seen on the latest source-discovery day.
Clear enough to supply this argument.
order_by
Metric or source field used to sort the results.
Clear enough to supply this argument.
order_dir
Direction in which to sort the selected ordering field.
Clear enough to supply this argument.
limit
Maximum number of result rows to return in this call.
Clear enough to supply this argument.
cursor
Continuation token returned by this tool; reuse it with the same filters to read the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
List response IDs, prompt text, execution time, answer source/model, matched citation URL, and stored-content availability for responses citing one URL or domain. A window longer than the plan's analytics history returns its most recent allowed days and reports the shortening in history_limited.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
target_type
Whether to match one exact normalized URL or all sources on one domain.
Clear enough to supply this argument.
normalized_url
Exact normalized_url from list_source_urls or list_prompt_citations; identifies the citation URL to match.
Clear enough to supply this argument.
domain
Source hostname from list_source_domains or list_source_urls, without a scheme or path.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
start_date
First included UTC date. If omitted, uses the earliest day in the plan-allowed history window ending on end_date.
Clear enough to supply this argument.
end_date
Last included UTC date. If omitted, uses today in UTC.
Clear enough to supply this argument.
answer_source
AI answer source whose observations to include; all combines sources where offered.
Clear enough to supply this argument.
limit
Page size measured in matching AI responses.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Continuation token returned by this tool; reuse it with the same filters to read the next page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"window_truncated"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "string"
},
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 4,
"minItems": 4,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "batch_id"
},
{
"type": "string",
"const": "run_date"
},
{
"type": "string",
"const": "citations"
},
{
"type": "string",
"const": "total_sources"
}
]
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
},
"window_truncated": {
"type": "boolean",
"description": "Whether this result was capped or more matching data may exist; no continuation cursor is available."
}
},
"description": "Rows contain batch_id and run_date, citations for the selected domain, and total_sources across all domains in that batch.",
"additionalProperties": false
}
Original tool metadata
{
"name": "get_source_domain_history",
"title": "Get source domain history",
"description": "Get recent batch dates and citation counts for one domain, alongside total citation counts across all domains in each batch.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"site_id",
"domain"
],
"properties": {
"limit": {
"type": "integer",
"default": 30,
"maximum": 180,
"minimum": 1,
"description": "Recent batch observations to include in the domain history."
},
"domain": {
"type": "string",
"minLength": 1,
"description": "Source hostname from list_source_domains or list_source_urls, without a scheme or path."
},
"site_id": {
"type": "string",
"minLength": 1,
"description": "Site identifier from the sites returned by whoami; selects the site whose data to read."
},
"answer_source": {
"enum": [
"chatgpt",
"google_ai_overview",
"all"
],
"type": "string",
"default": "chatgpt",
"description": "AI answer source whose observations to include; all combines sources where offered."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"window_truncated"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "string"
},
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 4,
"minItems": 4,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "batch_id"
},
{
"type": "string",
"const": "run_date"
},
{
"type": "string",
"const": "citations"
},
{
"type": "string",
"const": "total_sources"
}
]
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
},
"window_truncated": {
"type": "boolean",
"description": "Whether this result was capped or more matching data may exist; no continuation cursor is available."
}
},
"description": "Rows contain batch_id and run_date, citations for the selected domain, and total_sources across all domains in that batch.",
"additionalProperties": false
},
"annotations": {
"title": "Get source domain history",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description73/100
List recent visible AI responses with execution status, model, timestamps, brand/competitor mention and citation evidence, and available stored-content formats.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
prompt_id
Monitored prompt identifier from list_prompts or list_source_prompts.
Clear enough to supply this argument.
answer_source
AI answer source whose observations to include; all combines sources where offered.
Clear enough to supply this argument.
limit
Recent AI responses to include for the prompt.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description76/100
List tracked competitor identities and tracking status, stored and current ChatGPT visibility metrics, and the site metrics and plan allowance for comparison.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
status
Tracking status of the competitors to include.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Page size measured in tracked competitors.
Clear enough to supply this argument.
cursor
Continuation token returned by this tool; reuse it with the same filters to read the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
List a site's article recommendations by lifecycle status, ordered by the citations behind each one so the best-supported content gaps lead. This ordering is for reading evidence, not for picking the next article: the Articles page fills its schedule from a source-balanced backlog whose top row is the next candidate, this list is not in that order, and it includes recommendations already holding a queue slot.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
status
active recommendations are still open; done are marked completed; dismissed were set aside. all includes every workflow state.
Clear enough to supply this argument.
limit
Page size measured in article recommendations.
Clear enough to supply this argument.
cursor
Continuation token returned by this tool; reuse it with the same filters to read the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description74/100
Get the site's saved writing context, tracked competitor names, and a profile-derived draft covering brand, audience, style, and writing dos and don'ts.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
List the site's scheduled article queue with title details, recommendation links, provenance, projected dates, and whether the queue is editable or full.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
List completed content jobs and their Ready artifact metadata: titles, IDs, word counts, recommendation reasons, and update times. Each row pairs a job with one artifact.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
limit
Completed jobs to read; each job can contribute multiple artifact rows.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Get one Ready artifact's title, IDs, slug, word count, recommendation provenance, update time, and feedback state; this returns metadata without the article body.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
artifact_id
Artifact identifier from list_delivered_content for the selected site.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
List the Reddit threads matching the site's Reddit Alerts keywords, by workflow status, keyword, and post/comment type. This is one half of the Discussions page, so its count is never the page total on its own.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
status
Workflow state of the monitored Reddit threads to include.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
keyword_id
Reddit Alerts keyword identifier, if already known; omit to include all keywords. This server does not list keyword identifiers.
Clear enough to supply this argument.
type
Whether the matched Reddit item is a post or a comment.
Clear enough to supply this argument.
limit
Page size measured in distinct monitored Reddit threads.
Clear enough to supply this argument.
cursor
Continuation token returned by this tool; reuse it with the same filters to read the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
List the Backlinks page's outreach workflow state: which cited domains have been emailed or dismissed, with the citation and article counts snapshotted when each status was set.
The description explains the capability, when to use it, and what to expect.
Inputs99/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
status
emailed means marked as contacted; dismissed means set aside. all includes both recorded states, not domains without an outreach status.
Clear enough to supply this argument.
limit
Page size measured in domains with a recorded outreach status.
Clear enough to supply this argument.
cursor
Continuation token returned by this tool; reuse it with the same filters to read the next page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"has_more",
"cursor"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 5,
"minItems": 5,
"prefixItems": [
{
"type": "string"
},
{
"type": "string"
},
{
"type": "string"
},
{
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
{
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Continuation token for the next page with the same filters; null when complete."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 5,
"minItems": 5,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "domain"
},
{
"type": "string",
"const": "status"
},
{
"type": "string",
"const": "status_changed_at"
},
{
"type": "string",
"const": "citation_count"
},
{
"type": "string",
"const": "article_count"
}
]
},
"has_more": {
"type": "boolean",
"description": "Whether another page is available for these filters."
},
"total_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Matching population size when available; a lower bound when total_count_is_capped is true."
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
},
"total_count_is_capped": {
"type": "boolean",
"description": "Whether total_count is a lower bound rather than an exact total."
}
},
"description": "Rows contain domain, outreach status and change time, plus citation_count and article_count captured when that status was set.",
"additionalProperties": false
}
Original tool metadata
{
"name": "list_backlink_statuses",
"title": "List backlink statuses",
"description": "List the Backlinks page's outreach workflow state: which cited domains have been emailed or dismissed, with the citation and article counts snapshotted when each status was set.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"site_id"
],
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Page size measured in domains with a recorded outreach status."
},
"cursor": {
"type": "string",
"description": "Continuation token returned by this tool; reuse it with the same filters to read the next page."
},
"status": {
"enum": [
"emailed",
"dismissed",
"all"
],
"type": "string",
"default": "all",
"description": "emailed means marked as contacted; dismissed means set aside. all includes both recorded states, not domains without an outreach status."
},
"site_id": {
"type": "string",
"minLength": 1,
"description": "Site identifier from the sites returned by whoami; selects the site whose data to read."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"has_more",
"cursor"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 5,
"minItems": 5,
"prefixItems": [
{
"type": "string"
},
{
"type": "string"
},
{
"type": "string"
},
{
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
},
{
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
]
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Continuation token for the next page with the same filters; null when complete."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 5,
"minItems": 5,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "domain"
},
{
"type": "string",
"const": "status"
},
{
"type": "string",
"const": "status_changed_at"
},
{
"type": "string",
"const": "citation_count"
},
{
"type": "string",
"const": "article_count"
}
]
},
"has_more": {
"type": "boolean",
"description": "Whether another page is available for these filters."
},
"total_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Matching population size when available; a lower bound when total_count_is_capped is true."
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
},
"total_count_is_capped": {
"type": "boolean",
"description": "Whether total_count is a lower bound rather than an exact total."
}
},
"description": "Rows contain domain, outreach status and change time, plus citation_count and article_count captured when that status was set.",
"additionalProperties": false
},
"annotations": {
"title": "List backlink statuses",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
List the Backlinks page's backlink opportunities: third-party domains cited in the last 30 days that publish articles AI cites, ranked by citation count, each a domain to pursue an editorial mention or link from. Major media, the site's own domain, and tracked competitors are left out because those are not places to pitch.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
site_id
Site identifier from the sites returned by whoami; selects the site whose data to read.
Clear enough to supply this argument.
limit
Page size measured in eligible outreach domains.
Clear enough to supply this argument.
cursor
Continuation token returned by this tool; reuse it with the same filters to read the next page.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"has_more",
"cursor",
"total_count"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
]
}
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Continuation token for the next page with the same filters; null when complete."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 4,
"minItems": 4,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "domain"
},
{
"type": "string",
"const": "total_citations"
},
{
"type": "string",
"const": "article_count"
},
{
"type": "string",
"const": "top_articles"
}
]
},
"has_more": {
"type": "boolean",
"description": "Whether another page is available for these filters."
},
"total_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
}
},
"description": "Rows contain domain, total_citations, article_count, and top_articles as [URL, nullable title, citation count] tuples. total_count is the number of matching opportunity domains.",
"additionalProperties": false
}
Original tool metadata
{
"name": "list_backlink_opportunities",
"title": "List backlink opportunities",
"description": "List the Backlinks page's backlink opportunities: third-party domains cited in the last 30 days that publish articles AI cites, ranked by citation count, each a domain to pursue an editorial mention or link from. Major media, the site's own domain, and tracked competitors are left out because those are not places to pitch.",
"inputSchema": {
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"site_id"
],
"properties": {
"limit": {
"type": "integer",
"default": 25,
"maximum": 100,
"minimum": 1,
"description": "Page size measured in eligible outreach domains."
},
"cursor": {
"type": "string",
"description": "Continuation token returned by this tool; reuse it with the same filters to read the next page."
},
"site_id": {
"type": "string",
"minLength": 1,
"description": "Site identifier from the sites returned by whoami; selects the site whose data to read."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"columns",
"rows",
"page_row_count",
"has_more",
"cursor",
"total_count"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 4,
"minItems": 4,
"prefixItems": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
},
{
"type": "array",
"items": {
"type": "array",
"items": {},
"maxItems": 3,
"minItems": 3,
"prefixItems": [
{
"type": "string"
},
{
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
]
}
}
]
},
"description": "Result rows; pair each value with the column at the same index."
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Continuation token for the next page with the same filters; null when complete."
},
"columns": {
"type": "array",
"items": {},
"maxItems": 4,
"minItems": 4,
"description": "Column names in the same order as the values in each row.",
"prefixItems": [
{
"type": "string",
"const": "domain"
},
{
"type": "string",
"const": "total_citations"
},
{
"type": "string",
"const": "article_count"
},
{
"type": "string",
"const": "top_articles"
}
]
},
"has_more": {
"type": "boolean",
"description": "Whether another page is available for these filters."
},
"total_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0
},
"page_row_count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Rows in this response, not the population total."
}
},
"description": "Rows contain domain, total_citations, article_count, and top_articles as [URL, nullable title, citation count] tuples. total_count is the number of matching opportunity domains.",
"additionalProperties": false
},
"annotations": {
"title": "List backlink opportunities",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01Get current dateReturn the calendar date in the selected time zone, the current UTC timestamp, time_zone and utc_offset for reliable date-range anchoring.
02Get product documentationRead Airefs product documentation for grounding advice in published guidance.
03Show caller identity and accessReturn the caller's identity, organization memberships and roles, and accessible sites with the IDs needed by other tools.
04Get analysis methodRead an analysis procedure with its question, argument requirements/defaults, supporting documentation references, and glossary resource URIs.
05List delivered content artifactsList completed content jobs and their Ready artifact metadata: titles, IDs, word counts, recommendation reasons, and update times.
Want to run these tasks against your MCP server with us?
Airefs AI Visibility setup, tools, quality score, publishing readiness, and alternatives.
How do I add Airefs AI Visibility to Claude, ChatGPT, or Cursor?
Add Airefs AI Visibility to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.getairefs.com/mcp.
Is Airefs AI Visibility MCP ready for ChatGPT and Claude?
As of October 15, 2026, Airefs AI Visibility scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is Airefs AI Visibility's MCP tool documentation?
As of October 15, 2026, Airefs AI Visibility scores 90/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 38 of 38 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to Airefs AI Visibility?
As of October 20, 2026, alternatives to Airefs AI Visibility in marketing-seo on the Manufact MCP leaderboard include OpenAffiliate, Buzzfy, TalkGenAI, RankControl, and attentive-mcp-server.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.