Skip to main content
Glama

Refora

Citation sources

get_citation_sources
Read-onlyIdempotent

The domains and URLs that AI models cite in their answers for this workspace's prompts, each marked as the brand's own site, a competitor's, or other. Each URL also says what kind of page it is and how often each model cited it.

Use this tool when the user asks which websites or sources AI references -- phrases like 'what sources does AI cite', 'which websites does ChatGPT reference', 'top cited domains', 'which comparison pages does AI cite', or 'where does AI get its information about us'. Prefer it to paging through get_ai_answers for any question about cited pages.

With brand_name, only answers that mention that brand count. Without it, every answer in the workspace counts.

model, page_type, owner and last_runs narrow what counts, in one call: e.g. model=["openai", "google-aio"], page_type=["comparison", "listicle"], owner="competitor" and last_runs=3 for the competitor comparison and best-of pages ChatGPT and Google AI Overviews cited in the last 3 runs. Every URL carries its page_type and citations_by_model, and per_model gives each model's runs and citations, so a count reads as 'N citations in M runs'. A URL is a page: tracking tags (utm_*) and #fragments are dropped, so a page two models cite is one row.

For one topic, use get_top_cited_urls_for_topic. Across every workspace in the organization, use get_top_cited_domains.

Example: 'What sources does AI cite most when talking about Kassaro?'

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "workspace_id": "<workspace_id>"
    },
    "name": "get_citation_sources"
  }
}

Input Schema

NameRequiredDescriptionDefault
daysNoHow many days back to look, counted back from end_date (default today). Default 30, max 90. Ignored when start_date is given. Prompts are re-run on a schedule, so a window shorter than a week can be empty.
modelNoOptional: count only citations in these AI models' answers. One model, or a list such as ["openai", "google-aio"] to compare ChatGPT with Google AI Overviews. openai = ChatGPT, anthropic = Claude, mistral = Le Chat, google-aio = Google AI Overviews. Omit for every model. Each URL's count per model is returned either way.
ownerNoOptional: count only pages on these sites. own = the workspace's own site, competitor = a tracked competitor's site, other = everyone else (media, forums, comparison sites). One value or a list. Omit for every site.
end_dateNoOptional end of the window, as an ISO date (YYYY-MM-DD). Default today. Cannot be in the future.
last_runsNoOptional: count only the newest N runs of each prompt on each model inside the window, e.g. 3 for 'the last 3 runs'. A prompt with fewer runs in the window counts the ones it has; widen days to reach older runs. per_model says how many runs were counted. Omit to count every run in the window.
page_typeNoOptional: count only cited pages of this type, or a list of types. comparison = comparison and 'X vs Y' pages, listicle = best-of and top-X lists, plus article, how_to_guide, product_page, category_page, homepage, other. There is no review type: ask for comparison and listicle for review-style pages. A page not classified yet (page_type null) never matches. Omit for every page.
url_limitNoHow many URLs to list. Default 15, max 50.
brand_nameNoOptional brand name: count only answers that mention this brand. Omit for all answers.
start_dateNoOptional explicit start of the window, as an ISO date (YYYY-MM-DD). A full ISO datetime is accepted and its date is used. Overrides days.
domain_limitNoHow many domains to list. Default 10, max 50.
workspace_idYesThe workspace's numeric id, as returned by list_workspaces.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds genuine behavioral detail beyond them: URL normalization ('tracking tags (utm_*) and #fragments are dropped, so a page two models cite is one row'), the counting unit ('N citations in M runs'), and the filter-combination behavior of brand_name. It stops short of covering default result ordering or how 'other' classification is determined, so it is not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structure is strong: what it returns first, then when to use, then filter behavior, then alternatives, then a concrete example. It is somewhat long and the filter paragraph partly repeats schema descriptions, but no sentence is clearly wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter, no-output-schema tool, the description supplies the return shape (per-URL page_type and citations_by_model, plus per_model runs and citations) and explains how the filters compose. An agent can call it correctly and interpret results without further context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: brand_name semantics ('only answers that mention that brand count. Without it, every answer in the workspace counts'), and a worked multi-filter example (model=["openai","google-aio"], page_type=["comparison","listicle"], owner="competitor", last_runs=3). It also reiterates that every URL carries page_type and citations_by_model regardless of filters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names the specific resource (domains and URLs cited by AI models), the scope (this workspace's prompts), and the enrichments (brand/competitor/other owner label, page type, citation frequency). It is immediately distinguishable from sibling tools like get_ai_answers or get_visibility_score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger phrases ('what sources does AI cite', 'top cited domains'), states a preference rule against a named sibling ('Prefer it to paging through get_ai_answers'), and routes two other cases away to get_top_cited_urls_for_topic (single topic) and get_top_cited_domains (org-wide). When-to-use, when-not, and alternatives are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources