Skip to content
Agentmart
Submit a tool

Cituna MCP

AI visibility MCP server: how 7 AI engines cite your brand daily, with Google Search Console.

Connector by cituna.comOfficial · Domain verified by the MCP Registry

IndexedMITLocal (stdio)Remote (HTTP)★ 1
Write a review

Install

Works with Claude Code, VS Code, Codex, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/cituna-com-cituna-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://mcp.cituna.com/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

AI visibility MCP server: how 7 AI engines cite your brand daily, with Google Search Console.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
16 read · 7 write · 0 delete · 8 not yet classified
Secrets
2 (API keys, tokens or passwords)
Install scripts
None found
Runs as
Node.js package

Tools by what they do 31

Read from the source code; the running server may list different tools.

Read 16 · Look things up without changing anything.

  • get_article
  • get_audit
  • get_engine_answers
  • get_visibility
  • gsc_ai_searches
  • gsc_cannibalisation
  • gsc_query_mix
  • gsc_status
  • list_articles
  • list_audits
  • list_brands
  • list_citation_sources
Show 4 more tools
  • list_content_queue
  • list_gaps
  • list_keywords
  • whoami

Write 7 · Create, change, send or run things.

  • gsc_zero_click_pages
  • mark_article_published
  • run_scan
  • set_gap_status
  • set_outreach_status
  • set_prompts
  • update_article

Not yet classified 8 · We could not tell from the name and description.

  • competitor_discovery
  • enrich_article
  • gsc_coverage_gap
  • gsc_overview
  • gsc_query
  • gsc_striking_distance
  • queue_article
  • skip_queued_topics

Secrets and settings it asks for

Secrets: values you paste in that let it act as you.

  • Authorization
  • CITUNA_API_KEY

Other settings (environment variables or headers).

  • CITUNA_API_URL

Network hosts it talks to 1

  • mcp.cituna.com · found in remote endpoint, install command

Tools (31)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • competitor_discovery

    Rivals showing up in YOUR data that you are not tracking. Cross-references two sources you already have against your tracked competitor list: the brands the seven engines named while answering your prompts (from your latest audit) and the vendor-shaped terms people search before landing on you (from Search Console). Anything appearing in either and missing from the list comes back ranked by how much evidence there is, with where it was seen. Worth running monthly: a competitor list goes stale silently, and the first sign a new rival matters is usually that an engine starts naming them in answe…

  • enrich_article

    Refresh one live AutoSEO article from its own Search Console queries. Cituna writes a new SEO title and meta description, adds up to two FAQ answers, and updates the live page on the site it was published to: the URL, headline, body and publication date stay, and the title and description it overwrites come back as `before`. Call it only for an article list_articles shows with `enrich.eligible: true`. One that is not due, or was edited on the site since Cituna sent it, is refused before anything is spent, with `refreshed: false` and a `reason`. A refresh uses one generation from the monthly al…

  • get_article

    One AutoSEO article by `id` (from list_articles): the row list_articles gives, plus its text as Cituna stores it (`title`, `metaTitle`, `metaDescription`, `dek`, `sections` as {h2, body}, `faqs` as {q, a}, `tags`), what the publishing checks flagged (`gateProblems`, `qualityNotes`) and the last refresh's before and after (`lastEnrich`). Read it before update_article, which replaces whole fields. Free, reads stored data.

  • get_audit

    Get one AI-visibility audit in detail by scanId (from list_audits): overall AI-citation score + SEO/GEO/authority scores, per-engine citation summary (ChatGPT/Perplexity/Gemini/Claude/Grok/Google AI Overviews/Google AI Mode), the query×engine citation matrix, competitors cited, the top prioritised gaps (title, category, impact, effort), and the SEO and GEO audit checks, each counted pass/warn/fail by its verdict across every page the audit read, as the app counts them. `to_fix` lists the failing and warning checks, the app's "N to fix", with `pages_examined` and `pages_passing` when the check …

  • get_engine_answers

    The RECEIPTS behind the tracking grid. For a brand (id or domain) and one tracked prompt — optionally a single engine — returns the actual stored answer text each engine gave on the most recent day, the brands it cited, the source URLs, and whether your brand was cited and at what position. Answer text is capped (~4000 chars per engine) with a `truncated` flag. An entry with status "unavailable" means that engine gave no answer this time (not a miss, not counted against the brand, checked again automatically; relay its `note`), and "pending" means the answer is still being collected. Copy the …

  • get_visibility

    Your brand's LATEST DAILY TRACKING GRID — the core Cituna deliverable. For a brand (a brand id from list_brands, OR its bare domain), returns the most recent day's per-prompt × per-engine grid: for every tracked prompt and each of the seven engines (ChatGPT/Perplexity/Gemini/Claude/Grok/Google AI Overviews/Google AI Mode) whether your brand was cited, its position when cited, the engine mode that ran (live/value/lite/off), plus per-cell status (cited / answered / empty / notenabled / unavailable / pending / notrun). An "unavailable" cell means the engine gave no answer on this scan: it is not …

  • gsc_ai_searches

    The AI side of Search Console, as far as the API goes. Google's Search Analytics API has NO AI Overviews or AI Mode filter (`type` is web/image/video/news/discover/googleNews, and searchAppearance carries no AI value), and Google's own AI Overviews and AI Mode impression totals exist only in the Search Console UI's Generative AI report and its CSV export. But AI Mode searches ARE counted inside the ordinary web rows, and they are worded differently, so this reads the window's query+page rows and picks out the ones worded like prompts: follow_up ("and how do i prove it", "what about poland", "s…

  • gsc_cannibalisation

    Queries where two or more of your OWN pages compete for the same search. Google picks one URL per query, so when several of your pages qualify it splits the signal between them and often ranks the wrong one: two pages at position 60 instead of one at 30. Returns each affected query with every competing page, its position and impressions, which page Google favours, and the impression split. The usual fix is to pick the canonical target, make the others support it, and internally link accordingly. Cheap to run and one of the few SEO problems where the fix is free, because you already have the co…

  • gsc_coverage_gap

    Which published pages Google has never shown anyone. Reads the domain's sitemap, compares it against every page that earned at least one impression in the window, and returns the silent ones grouped by URL prefix so a whole dead section is obvious at a glance. This is usually the fastest 'here is what is wrong' a site can get: a library where half the URLs have never surfaced is not a ranking problem, it is pages published against demand that was never verified. Note the two causes it CANNOT separate — never indexed, versus indexed but never competitive. Confirm the difference with URL Inspect…

  • gsc_overview

    Live Google Search Console SUMMARY for a domain over the last N days: headline totals (clicks, impressions, CTR, average position) plus top queries, top pages, country and device splits, and a day-by-day time series. Windows are UTC and end ~2 days ago (GSC reporting lag). Best default for 'how is my search traffic doing?'. Requires a paid plan (Starter+). Returns {configured:false, message} if GSC isn't connected or no property matches the domain.

  • gsc_query

    Run an arbitrary Google Search Console Search Analytics query — the raw, flexible tool. Choose any dimensions (query, page, country, device, searchAppearance, date), an explicit date range OR a trailing `days` window, a row limit, and optional filters. Use dimensions:['date'] for day-by-day trends; ['country'] or ['device'] for splits; add filters to focus on a specific query or page. Windows are UTC and end ~2 days ago (GSC lag). Returns rows with keys[] plus clicks/impressions/ctr/position. Default rowLimit 100 — page with startRow when capped. Requires a paid plan (Starter+).

  • gsc_query_mix

    What KIND of demand a domain actually earns, bucketed by intent: brand, competitor-alternative, persona-qualified, commercial, tool-intent, how-to, category. Per bucket: query count, impressions, share of total, clicks, and average position. Use it to answer 'what are we actually visible for, and is that the demand we want?' — a domain can look healthy on totals while every impression sits in one bucket at position 90. The persona-qualified bucket (role-prefixed conversational queries like "i'm a brand manager, X vs Y for a small team") is worth reading closely: these behave nothing like their…

  • gsc_status

    The authoritative Google Search Console connection check for this workspace: whether GSC OAuth is configured server-side, whether THIS workspace has connected (`connected`), and the verified GSC properties (site URLs / sc-domain: properties) available to query. A workspace can connect SEVERAL Google accounts — `connections[]` lists each one with its own email and properties, while `email` and `sites` summarise the first account and the union. A domain is readable when ANY connected account holds a property for it, so judge coverage from `sites`, not from one account. whoami does not report GSC…

  • gsc_striking_distance

    The queries worth working on THIS week: everything ranking just off page one, ranked by how much traffic a realistic move would unlock. Returns each query with its position, impressions, the page that ranks for it, and a `priority` score (impressions weighted by how close to page one it already is — a ranking heuristic for ordering the list, NOT a traffic forecast). Position 11-60 by default: above 11 is already page one, below 60 is rarely reachable without new authority. This is the report to open before deciding what to write or rewrite — it is the difference between improving a page that c…

  • gsc_zero_click_pages

    Pages Google shows and nobody clicks: impressions above a floor with zero (or near-zero) clicks, split by CAUSE, because each cause needs a different fix. `branded`: at least half the page's named-query impressions are searches for the brand itself (its name, aliases or domain), so it is a secondary listing under a brand search; another page, named in `clickGoesTo` and usually the home page, takes that click, and no title work helps. `snippet`: position 10 or better on non-brand searches and still not clicked, so the title/meta description is losing the click, the cheapest fix. `page-two`: pos…

Show 16 more tools
  • list_articles

    One short row per AutoSEO article for a domain, newest first, without the article text: `id`, title, live `url`, status, the keyword or prompt it was written for, and when it changed: `publishedAt`, `lastSentAt` (the last time Cituna sent the page to the site), `editedAt` (the last edit to Cituna's copy) and `lastEnrichedAt` (the last refresh Cituna ran, whether or not it changed the page). `editsNotSent` is true when Cituna's copy was edited after the page was last sent. `hasDraft` is false for a page recorded with mark_article_published, which Cituna holds no text for. `outcome` is the page'…

  • list_audits

    List recent AI-visibility audits (scans) for your workspace, newest first: scanId, domain, date, AI-citation score, on-page SEO / GEO / authority scores, open-gap count, and each audit's scoring_epoch (the score-formula version that produced it). Only compare scores between audits with the SAME scoring_epoch — across epochs the scores are re-based, so compare citation counts instead. Pass a scanId to get_audit for the full breakdown. Requires a signed-in account.

  • list_brands

    List the brands/domains tracked in this Cituna workspace. Handy for discovering which domains you can pass to the audit and gsc_* tools.

  • list_citation_sources

    WHERE AI ANSWERS ABOUT YOUR CATEGORY ACTUALLY COME FROM, and whether you are really on those pages. Walks your recent scans and rolls up every third-party host the seven engines cited when answering your tracked prompts: how often it was cited, which rival brands the engines associate with it, which of your prompts it answers, and sample URLs. Then — the field that matters most — `youOnThisSite`, which is not inferred from the answers but comes from OPENING those pages and reading them: 'absent' means we read the page in full and your brand is not on it (that is the citation gap, `isGap: true`…

  • list_content_queue

    The AutoSEO content pipeline for a domain: topics waiting to be written, and the articles already generated or published, with the keyword or prompt that produced each one. `formatsOff` and `rules` are what the site's owner set in What AutoSEO writes: article formats it never writes, and rules every article follows. Articles come newest first, 30 at a time: pass a previous call's `nextCursor` as `before` for older ones, and `status` for only the live, review, rejected or attention ones. Use it to see what is in flight before queueing more. Free, reads stored data. Requires a signed-in account.

  • list_gaps

    The fix/action queue for a domain: each AI-visibility gap with its stable gapKey, current status (todo / doing / done), title, category, impact, effort, and the concrete fix. Pass a scanId (exact audit) OR a domain (uses that domain's newest audit). Use set_gap_status to update a gap. Requires a signed-in account.

  • list_keywords

    The keyword board for a domain: every tracked keyword with its Google position, monthly search volume, competition, and — the part that makes this actionable — whether an article for it is already queued, drafted or published. This is the join you want before writing anything: it tells you which keywords still have no page behind them. Positions come from two sources and each row says which: the rank checker (a live SERP read, but it only sees the top 20) and Search Console (a 28-day average, no top-20 cliff, ground truth for your own pages). That second source is what stops every keyword past…

  • mark_article_published

    Tell Cituna a page for this keyword is LIVE on the site — one you wrote yourself, published from your own CMS, or produced by driving this MCP. Cituna then stops suggesting the topic, shows the keyword as published on the Keywords board, and stops offering to write a competing page for it. Use it right after you publish; pass the keyword exactly as list_keywords shows it and the page's full https URL. WRITE ACTION — requires a Pro plan or higher.

  • queue_article

    Queue an article for a keyword so AutoSEO drafts it on the next run. Pass the keyword exactly as it appears in list_keywords, plus its evidence when you have it — `impressions` (from Search Console, as list_keywords reports) and `position` are what actually rank the queue now; volume/competition are legacy provenance from bought metrics and are usually absent. Nothing is queued, and `reason` says why, when the keyword already has a topic or article (`duplicate`), when the site already has a page for it (`already_covered`, with that page's `url`: improve it rather than writing a second one), or…

  • run_scan

    Run an AI-visibility audit for a website and return the completed result (scores, citation matrix, competitors, top gaps). A fresh scan takes about a minute and CONSUMES ONE SCAN from your monthly quota. Two honest caveats: (1) for a domain the workspace does not already track (and with no competitors passed), the backend may answer from a recent shared measurement up to 7 days old — that replay consumes no quota and adds NO entry to list_audits; (2) a successful scan of a new domain also adds it as a tracked brand, which counts against the plan's brand cap. Optionally pass competitors to stee…

  • set_gap_status

    Update one gap's status in the action queue (todo / doing / done). Use the gapKey and domain from list_gaps. e.g. mark the schema gap for acme.com done. WRITE ACTION — requires a Pro plan or higher; on Starter/trial the MCP is read-only.

  • set_outreach_status

    Record where you have got to with one citation-source host: mark it planned, pitched, placed or declined as you pitch, get listed, or rule it out; none clears it. Statuses are stored per workspace per domain and come back on every list_citation_sources call, so the outreach list survives across sessions instead of living in someone's head. Use the exact `host` string from list_citation_sources. Needs Pro or higher: on Starter the MCP is read-only.

  • set_prompts

    Edit the tracked prompts for a brand: the buyer questions the seven engines are asked every day. Add, remove, enable or disable them by exact text, or replace the whole set. Prompts are what the product actually measures, so this decides what the daily spend buys — a prompt no buyer types is a wasted engine check, and a prompt whose premise is false ("is X the cheapest") gets answered NO and scores as a citation anyway. Reads the current set first and returns a before/after diff, so an add never silently drops the prompts you did not mention. DESTRUCTIVE: `remove` deletes a prompt and `replace…

  • skip_queued_topics

    Take topics out of the AutoSEO queue so they are never written. Pass up to 50 topic ids from list_content_queue (`queued[].id`). Use it to clear topics the site should not spend articles on, or to make room when queue_article answers `queue_full`. Nothing is written or spent, and queueing the same text again with queue_article brings a topic back. WRITE ACTION: requires a Pro plan or higher.

  • update_article

    Edit Cituna's stored copy of one AutoSEO article (`id` from list_articles). Pass only the fields to change. Each one overwrites that field, and `sections`, `faqs` and `tags` replace the whole list, so read the article with get_article first and send back every section to keep. A page already on the site does not change: it is updated when someone sends the article again from the Cituna app. An article held by the publishing checks is checked again on save, and the result says whether it still is. WRITE ACTION: requires a Pro plan or higher.

  • whoami

    Return the authenticated Cituna account (email, workspaceId, role), the backend URL, your plan (Starter/Pro/Max), and — when available — the full usage meters: per-tool used/limit (scans, MCP calls, GSC reads, …) plus brand and prompt-pool counts. Use this first to confirm the connection works. Does NOT report Search Console state — call gsc_status for that. Fails with an actionable message if the API key is missing, invalid, or revoked.

Signals

Stars
1
Forks
0
Open issues
0
Last commit
Oct 24, 2026 (4 days ago)
Last release
Oct 24, 2026 (4 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
com.cituna/cituna-mcp
Version
1.10.1
Auth
Bearer token, API key
Packages
npm cituna-mcp
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 25, 2026
Cite this page

Cituna MCP. Agent Mart. https://agentmart.dev/connectors/cituna-com-cituna-mcp (last updated 2026-10-25)