On this page · 6 sections
Indexing doesn't earn a citation, but a page Google hasn't indexed (stored in the index, the library Google's results and AI Overviews answer from) can't be cited in AI answers built on that index. This guide covers what Otterly.AI's MCP server returns, what it can't tell you, the workflow, setup for both servers per client, example prompts, and the limits and costs as of October 2026.
What does Otterly.AI tell you about cited pages?
Otterly.AI tells you which URLs AI engines cited for the prompts in a brand report, on which engines and dates, and which prompts produced each citation. Its MCP server exposes that data as tools, each with a counterpart in its Public API. The tools that matter for this workflow, as listed in Otterly.AI's MCP documentation (checked on October 17, 2026):
Tool | Required arguments | What it returns |
|---|---|---|
| none | Your brand reports, so the agent can pick a |
| | "Cited URLs for a brand report, filterable by AI engine, tag, and search query" |
| same four | Top cited domains, share of citations and most-cited URLs |
| | The prompts that cited one URL |
| | Total citations for a URL, the change against the previous period and a daily breakdown by engine |
| none | Plan, usage and remaining MCP tool calls |
The engines you can filter by are chatgpt, claude, google, perplexity, copilot, google_ai_mode and gemini. Country is a lowercase two-letter code, with uk for the United Kingdom. List tools return 25 rows by default and up to 100 per call, so the agent pages through long citation lists. For a wider look at what trackers measure, see our guide to AI visibility tracking.
What can't Otterly.AI tell you about indexing?
Otterly.AI can't tell you whether Google has indexed a page, and it doesn't list the pages that were never cited. It records what AI engines cited for your tracked prompts. A target page missing from those results could be unindexed, out of date in the index, or indexed and simply not chosen.
Two details are easy to miss:
- It only knows cited URLs. You supply the list of pages you want cited (a sitemap section, a content plan, a client's priority pages), and the agent compares it against Otterly.AI's cited URLs. The difference is your uncited list.
- Crawler visits aren't index status. Otterly.AI's Agent Analytics tools (
get_brand_report_agent_statsand two others) report AI crawler visits on your domains when a log source is connected. The docs warn that when theavailabilityfield readsnot_connected, "Metrics arenull, not zero — nothing is being measured." A crawl (a bot visiting the page) isn't the same as being indexed by Google.
That's the gap FreshlyCited fills on the Google side. It checks each URL and reports "Seen by Google" or "Invisible". It doesn't track AI citations, and it doesn't check Bing's index. If you already have a list of pages no AI answer cites, check which ones Google has indexed with the free plan's 100 checks a month.
A Google check answers the question for Google's surfaces only: Google Search, AI Overviews and AI Mode, which draw on Google's index. The other engines a tracker watches work differently. "ChatGPT, Perplexity and other assistants use their own crawlers and search partners. We don't submit to them, and we don't claim to." So for an uncited page in ChatGPT or Perplexity, a Google result tells you about Google, not about them.
How does the Otterly.AI and FreshlyCited workflow run?
The workflow is one agent run with both servers connected: pull cited URLs from Otterly.AI, compare them with your target pages, check the uncited ones in FreshlyCited, and push only the ones Google hasn't indexed. There's no event that starts it. You run it on demand or on a schedule, for example after each weekly brand report refresh.
- Confirm access and budget.
get_account_infoon Otterly.AI shows remaining MCP calls and doesn't count against the limit. On FreshlyCited,get_startedshows the workspace and credit balance. - Pick the report.
list_brand_reports, then choose the client'sreportId. - Pull cited URLs.
list_brand_report_citationsfor the last 28 days and the client's country, paging untilhasMoreis false. Keep the URLs on the client's own domain. - Find the uncited targets. Compare against your target list. Normalize URLs first (scheme,
www, trailing slash) so a formatting difference doesn't read as "not cited". - Check indexing. FreshlyCited's
check_indexwith the uncited URLs. A standard check can take a few minutes, so the agent pollsget_job_status. Each URL comes back as "Seen by Google" or "Invisible". - Push only the invisible ones.
send_unindexed_to_indexeron that finished check starts a push with just the links Google can't see. Or skip step 5 and callsubmit_index_jobwithsmart: true, which checks first and pushes only what Google hasn't seen (smart push). - Read the result later. FreshlyCited re-checks on days 1, 3 and 7.
get_job_statusshows the outcome, andshare_job_reportcreates a read-only client report link.
Pages that come back "Seen by Google" but still aren't cited need a different fix: clearer answers, sources, and mentions on sites AI engines already trust. Our guide on getting recommended by AI assistants covers that side.
Prefer a script to an agent? The same steps work over APIs. Otterly.AI's Public API (same plans as MCP) serves the same data at GET /v1/reports/brand/{reportId}/citations with a Bearer oai_live_… key (Otterly.AI API reference), and FreshlyCited's full REST API comes with any pack or Agency plan.
How do you set up both servers, per client?
Setup is two claude mcp add lines in Claude Code, or two entries in one config file elsewhere. Otterly.AI signs you in through the browser the first time a tool runs. FreshlyCited uses OAuth 2.1 or an API key.
claude mcp add --transport http otterly https://data.otterly.ai/mcp
claude mcp add --transport http freshlycited https://freshlycited.com/mcpRun claude mcp list to see both connected; Otterly.AI's docs say its tools then appear as mcp__otterly__<tool_name>. Our Claude Code setup guide covers FreshlyCited's scopes and API key header, and the FreshlyCited developer docs cover other clients.
In Cursor, Otterly.AI documents the mcp-remote bridge, while FreshlyCited takes a plain URL (connect FreshlyCited in Cursor):
{
"mcpServers": {
"otterly": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://data.otterly.ai/mcp"]
},
"freshlycited": { "url": "https://freshlycited.com/mcp" }
}
}If you also run Claude Desktop through mcp-remote on the same machine, Otterly.AI warns that the clients share one stored login and keep signing each other out. Its fix is a separate MCP_REMOTE_CONFIG_DIR and callback port per client.
Per client. Otterly.AI scopes data by workspace, and the account that approves the sign-in is "whichever account your browser is already signed into" (Otterly.AI Help), so use a separate browser profile for each Otterly.AI account. In FreshlyCited, each client is a workspace. The OAuth consent screen lets you pick the workspace and full or read-only access, and an API key only sees its own workspace and the clients under it. The agent can call list_tenants and pass a client's tenant_id to check_index and submit_index_job, so results and credits stay separate per client.
We checked Otterly.AI's endpoint on October 17, 2026 with the unauthenticated request its docs suggest. It answered with a 401 and this body, which confirms the server is up and wants an OAuth token:
curl -i https://data.otterly.ai/mcp -X POST \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'
# HTTP/2 401
# {"error":"Unauthorized","error_description":"A valid OAuth bearer token is required."}What prompts can you give the agent?
These prompts work with both servers connected. Each names the tools so the agent doesn't guess; replace the bracketed parts.
Use Otterly to list cited URLs for the [Client] brand report, country us,
for the last 28 days (page until hasMore is false). Compare them with the
URLs in [target-pages.txt] after normalizing scheme, www and trailing
slashes. Show me the target pages with no citation.Run a FreshlyCited check_index on those uncited pages in the [Client]
workspace. Then use send_unindexed_to_indexer on that check so only the
pages Google can't see are pushed. Tell me how many were Seen by Google
and how many were Invisible.For [URL], use list_brand_report_citation_prompts and
get_brand_report_citation_history for the last 90 days. If it lost
citations, check whether Google still has it indexed with check_index.Every Monday: check get_account_info first and stop if fewer than 200 MCP
calls remain. Then run the uncited-pages check for each client and give me
one table per client.The last prompt needs a scheduler, such as a cron job that starts Claude Code with the prompt, because neither server starts runs on its own. A summary might look like this (illustrative, not from a real run):
Target page | Cited in Otterly.AI (28 days) | Google index | Action |
|---|---|---|---|
yoursite.com/pricing | Yes | Not checked | None |
yoursite.com/guides/setup | No | Invisible | Pushed |
yoursite.com/compare/alternatives | No | Seen by Google | Content review |
What are the limits and costs?
Both products charge separately, and neither includes the other. As of October 2026:
| Otterly.AI | FreshlyCited |
|---|---|---|
MCP plan | Standard ($189/month) and Premium ($489/month); not on Lite ($29/month) | Agency Pro ($199/month) and Agency Scale ($599/month) (API and MCP plans) |
Usage unit | 2,000 MCP requests a month on Standard, 5,000 on Premium | 1 check credit per standard check; index credits per push |
What counts | Every tool call except | Checks always; index credits only for links that get indexed |
Other limits | List tools return at most 100 rows per call | Per-key call limits (rate limits) |
Otterly.AI's plans and request counts are from its pricing page; MCP and API requests are listed separately. Once the MCP allowance is used, its docs say calls fail with "Request limit exceeded for this billing period" until the next period. Paging matters: a report with 300 cited URLs takes three calls at 100 rows each.
On FreshlyCited, an index credit is reserved when you push and used only if the link is indexed. If it's still not indexed after the day-7 re-check, the credit comes back automatically (exclusions apply, such as pages that return an error or carry noindex). Check credits aren't refundable. Pages Google already has are skipped by default; Refresh anyway sends an updated one and uses 1 index credit with no credit back. For sites you verify with an IndexNow key (an open "this page changed" notice that Bing and other participating engines accept; Google doesn't use it), pushes are also sent to Bing at no extra cost. See pricing and the FreshlyCited MCP tool reference for every parameter.
What neither tool can do: guarantee that Google indexes a page, or that an AI engine cites it. Citation still depends on quality, relevance and authority. The same workflow runs with Peec AI and FreshlyCited or Profound and FreshlyCited, and our list of SEO MCP servers covers the other servers an agent can use. To see how Otterly.AI compares with other trackers on engines and prompts, read our AI visibility tools compared.
Start with the pages your Otterly.AI reports never mention. Check those pages free: 10 free links to try, then 100 free checks a month, no card needed.

