list_sources
Read only
This page as markdown, for an agentThe domains and pages AI answers cite for this asset's questions inside a trailing window, yours and everyone else's: classification (target_owned, competitor_owned, neutral_third_party, unknown), citations, the answers citing the domain as a share of sampled answers with n and a Wilson interval, a URL, a title, best position, engines. Most cited first. Filters: a domain substring, a classification. No sampled answer in the window means not measured, never zero.
When to use it
- Use it when: You need which domains and pages AI answers cite for this site's questions, yours and everyone else's.
- Not when: You need a headline share; that is get_answer_share. You need what was quoted from you; that is list_cited_passages.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| assetId | string | yes | The Visibility Asset UUID to query. |
| windowDays | number | no | Trailing window in days; default 28, at most 365. |
| domain | string | no | Only domains containing this text. |
| classification | string | no | Only this classification: target_owned, competitor_owned, neutral_third_party or unknown. |
| limit | number | no | Maximum items to return; default 50, at most 200. |
What comes back
Every field this tool can return. Checked against the handler on a real database in the test suite, not typed from memory.
| Field | Meaning |
|---|---|
| assetId | The asset asked about, echoed back. |
| dataStatus | One of ok, not_measured or empty_filter. not_measured means no measurement of this kind exists yet, which is not zero; empty_filter means data exists and your filter matched none of it. |
| href | The dashboard page that holds the evidence behind this result, for the right site. A signed-in person can open it; quote it beside the numbers. |
| windowDays | The trailing window the sources cover. |
| n | Sampled answers inside the window: the denominator of every share below. |
| total | How many cited domains the window holds before the filters and the limit. |
| sources | Per domain, most cited first: classification (target_owned, competitor_owned, neutral_third_party, unknown), citations, answers citing it, that as a share with n and interval, a URL, a title, best position, engines. |
| note | What the classifications mean and how the share is computed. |
What comes back with the number
Shares arrive with the sample size behind them and a 95% Wilson interval. Values carry a provenance of measured, estimated or derived. A pillar that was not measured reports as not measured rather than as zero, and the composite Visibility Score is held until at least 5 of its 7 pillars are measured.
Example request
The wire shape, from the schema. Every argument is a placeholder.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_sources",
"arguments": {
"assetId": "<assetId from list_assets>",
"windowDays": "<number>",
"domain": "<domain>",
"classification": "<classification>",
"limit": "<number>"
}
}
}What dataStatus means
ok: There is at least one result, or a measured zero.not_measured: No measurement of this kind exists yet for the asset. Not zero, and not a broken connection.empty_filter: Data exists, and the filter you passed matched none of it. Retry without the filter.
Example prompt
Call list_sources for my site over the last 28 days. Which third-party pages do the engines cite instead of ours?
Calling it
Connect the MCP server at https://app.seoaio.ai/api/mcp over the Streamable HTTP transport. Per-customer authentication is required, so nothing is exposed without it. Call list_assets first: every other tool needs an assetId from it.
Next
For an agent
Read the skill at /SKILL.md before calling anything. It carries the tool order and the rules for quoting a number, including the one that matters most: quoting a share without its interval overstates what we measured.
