com.cituna/cituna-mcp
NPM · CITUNA-MCP · SCANNED SEP 20
Track how 6 AI engines cite your brand, daily, with live Google Search Console.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 25 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability79
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 6295 tokens (~262/item across 24 items; 24 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
- Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 24 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the com.cituna/cituna-mcp server?
com.cituna/cituna-mcp runs locally as an npm package, launched with npx -y cituna-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · cituna-mcp
claude mcp add com-cituna-cituna-mcp -- npx -y cituna-mcp
{
"mcpServers": {
"com-cituna-cituna-mcp": {
"command": "npx",
"args": [
"-y",
"cituna-mcp"
]
}
}
} {
"servers": {
"com-cituna-cituna-mcp": {
"command": "npx",
"args": [
"-y",
"cituna-mcp"
]
}
}
} codex mcp add com-cituna-cituna-mcp -- npx -y cituna-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-cituna-cituna-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"cituna-mcp"
],
"enabled": true
}
}
} openclaw mcp add com-cituna-cituna-mcp --command npx --arg -y --arg cituna-mcp
mcp_servers:
com-cituna-cituna-mcp:
command: "npx"
args: ["-y", "cituna-mcp"] {
"McpServers": {
"com-cituna-cituna-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"cituna-mcp"
]
}
}
} assistant mcp add com-cituna-cituna-mcp -t stdio -c npx -a -y cituna-mcp
{
"mcpServers": {
"com-cituna-cituna-mcp": {
"command": "npx",
"args": [
"-y",
"cituna-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 −3
- Stability: pass → 0.83 functional
- 16 Sept 26 +1
- Stability: 0.97 → pass security
- 14 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 10 Sept 26 −3
- Stability: pass → 0.80 functional
- 9 Sept 26 +1
- Stability: 0.97 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/cituna-mcp@1.5.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
competitor_discovery ~198
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 six 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 answers to your own buyer questions. Free, reads stored data plus one Search Console read. Requires a signed-in account.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Search Console window for query evidence. Default 90. |
| domain | string | yes | Bare domain, e.g. 'acme.com'. |
| minEvidence | integer | – | Ignore candidates below this combined evidence score. Default 2. |
No output schema declared.
No examples provided.
get_audit ~211
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), the query×engine citation matrix, competitors cited, the top prioritised gaps (title, category, impact, effort), and pass/warn/fail audit check counts. In the citation matrix every engine appears explicitly per query with one of three states: "cited" (the engine's answer cited the brand), "not_cited" (the engine answered but did not cite the brand), or "not_run" (the engine produced no measured answer for that query — it sat the query out or errored; NOT a miss). Bulky raw fields (page HTML, full engine answers) are omitted. Requires a signed-in account.
| Name | Type | Req | Description |
|---|---|---|---|
| scanId | string | yes | The audit/scan id from list_audits. |
No output schema declared.
No examples provided.
get_engine_answers ~260
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. Copy the exact prompt text from get_visibility's prompts[].prompt; a prompt that isn't found returns availablePrompts to pick from. Requires a signed-in account; works on Starter and up (the free trial has no MCP access).
| Name | Type | Req | Description |
|---|---|---|---|
| brand | string | yes | The brand — a brand id (from list_brands) OR its bare domain, e.g. 'acme.com'. |
| engine | string | – | Optional — limit to a single engine. One of: ChatGPT, Perplexity, Gemini, Claude, Grok, or Google AI Overviews (pass the key `aioverviews` for that last one; the others are their lowercase name, e.g.… |
| prompt | string | yes | The exact tracked prompt text to pull answers for — copy it from get_visibility (prompts[].prompt). |
No output schema declared.
No examples provided.
get_visibility ~222
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 six engines (ChatGPT/Perplexity/Gemini/Claude/Grok/Google AI Overviews) 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 / error / notrun). Also the brand's current visibility score, its label, and the UTC day it was measured. Compact JSON, designed to be read directly. Use get_engine_answers to see what an engine actually said for a prompt. Requires a signed-in account; works on Starter and up (the free trial has no MCP access).
| Name | Type | Req | Description |
|---|---|---|---|
| brand | string | yes | The brand to report on — a brand id (from list_brands) OR its bare domain, e.g. 'acme.com'. |
No output schema declared.
No examples provided.
gsc_cannibalisation ~234
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 content. Requires a paid plan (Starter+).
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Trailing window in days (1-480). Default 28. |
| domain | string | – | Bare domain, e.g. 'example.com'. Provide this OR siteUrl. |
| limit | integer | – | Max queries returned. Default 50. |
| minImpressions | integer | – | Ignore queries below this many total impressions. Default 5. |
| siteUrl | string | – | Exact GSC property. Optional. |
No output schema declared.
No examples provided.
gsc_coverage_gap ~222
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 Inspection in Search Console before acting. Fetches the sitemap over HTTP from the domain itself. Requires a paid plan (Starter+).
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Window for 'earned an impression'. Default 90 — use the widest window the property has. |
| domain | string | yes | Bare domain, e.g. 'example.com'. Its public sitemap is fetched over HTTP. |
| limit | integer | – | Max silent URLs listed. Default 100 (counts are always complete). |
No output schema declared.
No examples provided.
gsc_overview ~181
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.
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Trailing window in days (1–90). Default 28. Data lags ~2–3 days, so the window ends ~2 days ago. |
| domain | string | yes | Bare domain to report on, e.g. 'example.com' (no scheme/path). Must match a connected GSC property. |
No output schema declared.
No examples provided.
gsc_query ~464
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+).
| Name | Type | Req | Description |
|---|---|---|---|
| dataState | string | – | 'final' (default, stable) or 'all' (includes the freshest partial data for the last ~2 days). |
| days | integer | – | Trailing window in days (1–480) when startDate/endDate are omitted. Default 28. Window ends ~2 days ago (GSC lag). |
| dimensions | array | – | Dimensions to group by. Default ['query']. |
| domain | string | – | Bare domain, e.g. 'example.com'. Resolved to a connected GSC property. Provide this OR siteUrl. |
| endDate | string | – | YYYY-MM-DD. Overrides `days`. Must be paired with startDate. |
| filters | array | – | Optional filters, combined with AND. Each: {dimension, operator, expression}. e.g. {dimension:'query', operator:'contains', expression:'pricing'} or {dimension:'country', operator:'equals', expressio… |
| rowLimit | integer | – | Max rows to return (1–25000). Default 100. |
| siteUrl | string | – | Exact GSC property instead of a domain, e.g. 'sc-domain:example.com' or 'https://example.com/'. Optional. |
| startDate | string | – | YYYY-MM-DD. Overrides `days`. Must be paired with endDate. |
| startRow | integer | – | Zero-based offset for pagination. Default 0. |
| type | string | – | Search type. Default 'web'. |
No output schema declared.
No examples provided.
gsc_query_mix ~305
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 head terms and usually rank far better, because the long tail is less contested. Also reports the anonymized-click reconciliation — GSC withholds low-volume queries, so named rows routinely account for well under the site's real click total. Requires a paid plan (Starter+).
| Name | Type | Req | Description |
|---|---|---|---|
| competitors | array | – | Competitor names to treat as competitor-intent even without an 'alternative/vs' word. Defaults to the brand's tracked competitors. |
| days | integer | – | Trailing window in days (1-480). Default 28. |
| domain | string | – | Bare domain, e.g. 'example.com'. Provide this OR siteUrl. |
| examplesPerBucket | integer | – | Sample queries to include per bucket. Default 5, 0 to omit. |
| siteUrl | string | – | Exact GSC property. Optional. |
No output schema declared.
No examples provided.
gsc_status ~81
The authoritative Google Search Console connection check for this workspace: whether GSC OAuth is configured server-side, whether THIS workspace has connected (`connected`), the connected Google account email, and the list of verified GSC properties (site URLs / sc-domain: properties) available to query. whoami does not report GSC state — this tool is the truthful signal.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
gsc_striking_distance ~300
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 can move and rewriting one that cannot. Requires a paid plan (Starter+).
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Trailing window in days (1-480). Default 28. |
| domain | string | – | Bare domain, e.g. 'example.com'. Provide this OR siteUrl. |
| limit | integer | – | Max rows returned. Default 50. |
| maxPosition | number | – | Upper bound. Default 60 — past this, position is an authority problem, not a content one. |
| minImpressions | integer | – | Ignore queries below this many impressions. Default 1. |
| minPosition | number | – | Lower bound of the band. Default 11 (just off page one). |
| siteUrl | string | – | Exact GSC property, e.g. 'sc-domain:example.com'. Optional. |
No output schema declared.
No examples provided.
gsc_zero_click_pages ~259
Pages Google shows and nobody clicks — impressions above a floor with zero (or near-zero) clicks, split by CAUSE, because the two causes need opposite fixes. `ranking` (average position beyond ~15) means the page is too far down to be clicked and needs authority or a rewrite. `snippet` (ranking well but not being clicked) means the page IS reachable and the title/meta description is losing the click — a much cheaper fix. Sorted by wasted impressions. This finds the single most common expensive miss in a content library: the page that earns the most impressions on the whole site and converts none of them. Requires a paid plan (Starter+).
| Name | Type | Req | Description |
|---|---|---|---|
| days | integer | – | Trailing window in days (1-480). Default 28. |
| domain | string | – | Bare domain, e.g. 'example.com'. Provide this OR siteUrl. |
| limit | integer | – | Max rows returned. Default 50. |
| maxClicks | integer | – | Treat a page as zero-click at or below this many clicks. Default 0. |
| minImpressions | integer | – | Impression floor for a page to count. Default 25. |
| siteUrl | string | – | Exact GSC property. Optional. |
No output schema declared.
No examples provided.
list_audits ~139
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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | – | Optional client-side filter — only return audits for this bare domain, e.g. 'acme.com'. |
No output schema declared.
No examples provided.
list_brands ~38
List the brands/domains tracked in this Cituna workspace. Handy for discovering which domains you can pass to the audit and gsc_* tools.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_citation_sources ~407
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 six 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`), 'mentioned' means you are named with no link back, 'linked' means the page links to you, 'unreachable' means the site refused an automated read, and 'unknown' means it has not been read yet. The last two are NOT evidence of absence and must never be reported as gaps. Rival-owned and engine-owned domains are excluded, because a mention on a competitor's own blog or in a search vendor's docs is not an opportunity. Also returns the pages of yours engines DO cite, so you can see what is already working. This is usually the highest-leverage list in the product and the one that explains a citation score that will not move: improving your own page is a different job from being present in the pages engines already read. Free, reads stored scan and page-check data. Requires a signed-in account.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Bare domain, e.g. 'acme.com'. |
| gapsOnly | boolean | – | Only VERIFIED gaps — hosts whose cited pages we read in full and your brand was not on them (`youOnThisSite: 'absent'`). Excludes hosts not yet read, so this can under-report early on. Default false,… |
| limit | integer | – | Max targets returned. Default 25. |
No output schema declared.
No examples provided.
list_content_queue ~84
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. Use it to see what is in flight before queueing more. Free, reads stored data. Requires a signed-in account.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Bare domain, e.g. 'acme.com'. |
No output schema declared.
No examples provided.
list_gaps ~146
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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | – | Bare domain, e.g. 'acme.com' — uses its most recent audit. Optional if `scanId` is given. |
| scanId | string | – | Audit id (from list_audits) to read gaps from. Optional if `domain` is given. |
No output schema declared.
No examples provided.
list_keywords ~308
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 #20 collapsing into one indistinguishable 'not in top 20' — with it, #75 and #95 are told apart, and moving #75 to #40 is visible progress instead of no change at all. The Search Console join costs one metered read; pass includeSearchConsole:false to skip it and keep the call free. Requires a signed-in account.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Bare domain, e.g. 'acme.com'. |
| includeSearchConsole | boolean | – | Attach the 28-day Search Console position/impressions/clicks per keyword. Default true. Costs one metered GSC read; set false to keep this call free. Degrades silently when Search Console is not conn… |
| stage | string | – | Optional filter on content state. 'none' is the useful one: keywords with nothing written for them yet. |
No output schema declared.
No examples provided.
mark_article_published ~173
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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Bare domain the page belongs to, e.g. 'acme.com'. |
| keyword | string | yes | The keyword this page targets, as listed by list_keywords. |
| title | string | – | Optional page title. Defaults to the keyword. |
| url | string | yes | Full https URL of the published page. |
No output schema declared.
No examples provided.
queue_article ~258
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. Queueing a keyword that already has a topic or article returns a duplicate notice rather than a second copy. WRITE ACTION — requires a Pro plan or higher; on Starter/trial the MCP is read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| competition | number | – | Legacy: competition 0-1, paired with volume. |
| domain | string | yes | Bare domain the keyword belongs to, e.g. 'acme.com'. |
| impressions | number | – | Search Console impressions for this query (list_keywords reports them). The primary queue-priority signal. |
| keyword | string | yes | The keyword to write about, exactly as listed by list_keywords. |
| position | number | – | Current Google position, if the site ranks at all. Deep positions with real impressions rank the queue highest. |
| volume | number | – | Legacy: monthly search volume, if you have a bought figure. Impressions are preferred. |
No output schema declared.
No examples provided.
run_scan ~260
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 steer the comparison (this forces a fresh run). Prefer list_audits/get_audit to read an existing audit for free; use run_scan only when fresh data is needed. WRITE ACTION — requires a Pro plan or higher; on Starter/trial the MCP is read-only (run scans in the app instead).
| Name | Type | Req | Description |
|---|---|---|---|
| competitors | array | – | Optional competitor domains to compare against (up to 8). Steers the comparison instead of relying only on auto-detection. |
| url | string | yes | Site to scan — bare domain 'acme.com' or full URL 'https://acme.com'. |
No output schema declared.
No examples provided.
set_gap_status ~115
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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Bare domain the gap belongs to, e.g. 'acme.com'. |
| gapKey | string | yes | The stable gapKey from list_gaps. |
| status | string | yes | New status. |
No output schema declared.
No examples provided.
set_outreach_status ~158
Record where you have got to with one citation-source host: mark it todo, doing or done as you pitch, get listed, or rule it out. 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.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Bare domain the target belongs to, e.g. 'acme.com'. |
| host | string | yes | The target host exactly as list_citation_sources returned it, e.g. 'frase.io'. |
| status | string | yes | Where this target stands. |
No output schema declared.
No examples provided.
whoami ~112
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
What is the com.cituna/cituna-mcp server?
com.cituna/cituna-mcp is listed in the public MCP registry as com.cituna/cituna-mcp. Track how 6 AI engines cite your brand, daily, with live Google Search Console. This page covers its npm package (cituna-mcp).
Is the com.cituna/cituna-mcp server safe to use?
com.cituna/cituna-mcp scores 84 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the com.cituna/cituna-mcp server expose?
com.cituna/cituna-mcp exposes 24 tools: whoami, list_audits, get_audit, get_visibility, get_engine_answers, and 19 more. Their descriptions and schemas cost roughly 5,135 tokens of context every time the server is loaded.
Is the com.cituna/cituna-mcp server still maintained?
com.cituna/cituna-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the com.cituna/cituna-mcp server under?
com.cituna/cituna-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.