On this page · 6 sections
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, though indexing alone doesn't earn a citation. This guide covers what Peec AI's MCP server and API return, what they 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 Peec AI tell you about cited pages?
Peec AI tells you which URLs AI engines retrieved (read while answering) and cited for your tracked prompts, how often, and on which engines and dates. It tracks ChatGPT, Perplexity, Gemini, Google AI Overviews, Google AI Mode, Claude, Microsoft Copilot and Grok (Peec AI MCP docs). Its tools reference lists 51 read tools and 48 write tools, checked on October 17, 2026. The ones this workflow uses:
Tool | What it returns |
|---|---|
| Projects you can access; Peec AI says it "is always called first" |
| Per URL: |
| The same metrics per domain |
| The scraped text of a source URL, "to inspect the actual content an AI engine read" |
| Individual AI answers, with the URLs each one retrieved and cited |
get_url_report takes a project_id, start_date and end_date, and accepts filters such as domain, url, country_code and model_channel_id (a stable ID for each engine). Most tools return compact columnar JSON: a columns list and rows of values in that order.
The split between retrieval and citation is what makes Peec AI's data useful here. retrieval_count is "Total distinct chats that retrieved this URL", and citation_count is "Total citations across all chats". A page with retrievals but few citations has been found; a target page with no row at all hasn't been used in any tracked answer. For more on reading tracker data, see our guide to AI visibility tracking.
What can't Peec AI tell you about indexing?
Peec AI can't tell you whether Google has indexed a page. It sees pages only once an AI answer retrieves them. Its docs say get_url_content "Returns a 404 if the URL has never been retrieved by any Peec project. Peec only scrapes URLs that appear as AI sources."
So the pages you most need to check are invisible to the tracker by design:
- Never-retrieved target pages. Peec AI has no record of them. You supply the target list (a sitemap section, a client's priority pages) and the agent finds the ones with no row in
get_url_report. - Retrieved isn't indexed. An engine retrieving a page means that engine reached it. It doesn't tell you whether Google has it, and Google's index is what AI Overviews and AI Mode draw on.
- Bot visits aren't index status. Peec AI's
get_agent_visitscounts AI bot visits from your access logs. A crawl (a bot visiting the page) isn't the same as being indexed.
FreshlyCited covers the Google side: it checks each URL and reports "Seen by Google" or "Invisible". It doesn't track citations and doesn't check Bing's index. Got a list of target pages Peec AI never shows? 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 Peec AI and FreshlyCited workflow run?
The workflow is one agent run with both servers connected: pull per-URL metrics from Peec AI, find target pages with no retrievals or no citations, check those in FreshlyCited, and push only the ones Google hasn't indexed. Nothing triggers it automatically; you run it on demand or on a schedule.
- Pick the project.
list_projects, then the client'sproject_id. - Pull URL metrics.
get_url_reportfor the last 28 days, filtered to the client'sdomain, withlimitraised if needed. Peec AI notes that "Trailing slashes and scheme variations change the resolved source ID", so normalize URLs before you compare them. - Sort target pages into three groups. Cited; retrieved but not cited; and no row at all.
- Check indexing for the last two groups. FreshlyCited's
check_indexwith those 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 the finished check starts a push with just the links Google can't see. Or callsubmit_index_jobwithsmart: true, which checks first and pushes only what Google hasn't seen (how smart push works). - Read the result later. FreshlyCited re-checks on days 1, 3 and 7.
get_job_statusshows the outcome;share_job_reportcreates a read-only client report link.
Pages that are "Seen by Google" and retrieved but still not cited need content work, not another push. get_url_content on a competitor URL that does get cited shows what the engine read there. Our guide on getting recommended by AI assistants covers the content side.
Using the API instead. Peec AI's Customer API serves the same URL report at POST https://api.peec.ai/customer/v1/reports/urls, authenticated with an x-api-key header (Peec AI API authentication). FreshlyCited's REST API comes with any pack or Agency plan, so a script can run the same steps without MCP on our side.
How do you set up both servers, per client?
Setup is two commands in Claude Code, or two entries in one config file elsewhere. Both servers default to OAuth, so the first tool call opens a browser sign-in. Our Claude Code guide for FreshlyCited covers scopes, and the FreshlyCited developer docs cover other clients.
claude mcp add peec-ai --transport http https://api.peec.ai/mcp
claude mcp add --transport http freshlycited https://freshlycited.com/mcpFor a headless run, such as a scheduled job, use tokens instead. Peec AI's personal access tokens are created under API Keys → Personal Access Tokens, with an expiry of Never, 30, 60 or 90 days (Peec AI setup guide). Keep both in environment variables:
claude mcp add peec-ai --transport http https://api.peec.ai/mcp \
--header "Authorization: Bearer $PEEC_PAT"
claude mcp add --transport http freshlycited https://freshlycited.com/mcp \
--header "Authorization: Bearer $FRESHLYCITED_API_KEY"In VS Code, both go in .vscode/mcp.json; Peec AI documents this format, and so do we in our VS Code setup:
{
"servers": {
"peec-ai": { "type": "http", "url": "https://api.peec.ai/mcp" },
"freshlycited": { "type": "http", "url": "https://freshlycited.com/mcp" }
}
}In Cursor, Peec AI's docs use Cursor Settings → Tools & Integrations → MCP → Add Custom MCP with the server URL and Streamable HTTP; for FreshlyCited, follow the Cursor guide. Peec AI suggests checking the connection by asking "List my Peec AI projects".
Per client. In Peec AI each client is usually a project, and a personal access token acts as your user, so it sees every project you can. Write tools need organization-owner access on the project. 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 sees only its own workspace and the clients under it. The agent can call list_tenants and pass the client's tenant_id, so credits and results stay separate. See FreshlyCited authentication for key roles.
We checked Peec AI's endpoint on October 17, 2026 with an unauthenticated MCP initialize request. It returned a 401 pointing the client to its OAuth metadata, which is the expected first step of the sign-in:
curl -s -i https://api.peec.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":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'
# HTTP/2 401
# www-authenticate: Bearer error="invalid_token", error_description="Missing Authorization header", resource_metadata="https://api.peec.ai/.well-known/oauth-protected-resource/mcp"What prompts can you give the agent?
These prompts work with both servers connected. They name the tools so the agent doesn't guess; replace the bracketed parts.
In Peec, run get_url_report for project [Client] for the last 28 days,
filtered to domain [clientsite.com]. Normalize scheme, www and trailing
slashes, then compare with [target-pages.txt]. Group the targets into:
cited, retrieved but not cited, and no row.Take the "no row" and "retrieved but not cited" pages and run a
FreshlyCited check_index on them in the [Client] workspace. When the
check finishes, use send_unindexed_to_indexer so only the pages Google
can't see are pushed. Summarize Seen by Google vs Invisible.For the pages that are Seen by Google but not cited, find the URL that
Peec shows with the highest citation_count for the same prompts, and use
get_url_content on it. List what that page covers that ours doesn't.Peec AI also ships ready-made MCP prompts, such as peec_weekly_pulse and peec_engine_scorecard, which you run as slash commands in Claude (Peec AI MCP prompts). A combined summary might look like this (illustrative, not from a real run):
Target page | Peec AI (28 days) | Google index | Action |
|---|---|---|---|
yoursite.com/pricing | Cited | Not checked | None |
yoursite.com/guides/onboarding | No row | Invisible | Pushed |
yoursite.com/features/reports | Retrieved, not cited | Seen by Google | Content review |
What are the limits and costs?
The two products are billed separately. As of October 2026:
| Peec AI | FreshlyCited |
|---|---|---|
MCP on | Every plan in the pricing table: Starter ($95/month), Pro ($245/month), Advanced ($495/month), Enterprise (custom) | Agency Pro ($199/month) and Agency Scale ($599/month) (API and MCP plans) |
API | Ticked from Pro up in the pricing table; the API docs say "currently limited to Enterprise customers" | Full API with any pack or Agency plan; read-only on the free tier |
Call limits | MCP: "1,000 calls per minute per user"; API: 200 requests a minute per project | Per-key limits (rate limits) |
Usage cost | No per-call MCP charge listed; plans are set by prompts, models and projects | 1 check credit per standard check; index credits per push |
Peec AI's plan details come from its pricing page, read on October 17, 2026, and the API limits from its API introduction and rate limits pages. The pricing table and API docs disagree on API access, so ask Peec AI which applies to your plan.
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, and Refresh anyway sends an updated one for 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. Full parameters are in the FreshlyCited MCP tool reference; prices are on our pricing section.
Neither tool can 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 Otterly.AI and FreshlyCited and Profound and FreshlyCited, Our comparison of AI visibility trackers covers Peec AI against the rest, and the guide to SEO MCP servers lists other servers worth connecting.
Start with the target pages Peec AI has never seen. Check those URLs free: 10 free links to try, then 100 free checks a month, no card needed.

