# com.cituna/cituna-mcp (npm · cituna-mcp)

Track how 6 AI engines cite your brand, daily, with live Google Search Console.

- Trust score: 65/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `cituna-mcp`: 65/100 (this document), [markdown](https://verifymcp.io/servers/com-cituna-cituna-mcp/cituna-mcp.md), [page](https://verifymcp.io/servers/com-cituna-cituna-mcp/cituna-mcp)

## Channel facts

- Registry: `npm`
- Package: `cituna-mcp`
- Version: `1.0.1`
- Transport: `stdio`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 75/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3783 tokens (~236/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add com-cituna-cituna-mcp -- npx -y cituna-mcp
```

### Codex

```bash
codex mcp add com-cituna-cituna-mcp -- npx -y cituna-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-cituna-cituna-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "cituna-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-cituna-cituna-mcp --command npx --arg -y --arg cituna-mcp
```

### Hermes

```yaml
mcp_servers:
  com-cituna-cituna-mcp:
    command: "npx"
    args: ["-y", "cituna-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "com-cituna-cituna-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "cituna-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 65)

First indexed and scored.

## MCP tools (16)

### `whoami` (~112 tokens)

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.

### `list_audits` (~139 tokens)

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.

Input parameters:

- `domain` (string): Optional client-side filter — only return audits for this bare domain, e.g. 'acme.com'.

### `get_audit` (~211 tokens)

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.

Input parameters:

- `scanId` (string, required): The audit/scan id from list_audits.

### `get_visibility` (~222 tokens)

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).

Input parameters:

- `brand` (string, required): The brand to report on — a brand id (from list_brands) OR its bare domain, e.g. 'acme.com'.

### `get_engine_answers` (~260 tokens)

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).

Input parameters:

- `brand` (string, required): 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, required): The exact tracked prompt text to pull answers for — copy it from get_visibility (prompts[].prompt).

### `list_gaps` (~146 tokens)

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.

Input parameters:

- `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.

### `set_gap_status` (~115 tokens)

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.

Input parameters:

- `domain` (string, required): Bare domain the gap belongs to, e.g. 'acme.com'.
- `gapKey` (string, required): The stable gapKey from list_gaps.
- `status` (string, required): New status.

### `list_keywords` (~148 tokens)

The keyword board for a domain: every tracked keyword with its Google position (or 'not ranking'), monthly search volume, competition, the verdict on what to do about it, 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. Free, reads stored data, spends no quota. Requires a signed-in account.

Input parameters:

- `domain` (string, required): Bare domain, e.g. 'acme.com'.
- `stage` (string): Optional filter on content state. 'none' is the useful one: keywords with nothing written for them yet.

### `list_content_queue` (~84 tokens)

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.

Input parameters:

- `domain` (string, required): Bare domain, e.g. 'acme.com'.

### `queue_article` (~184 tokens)

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 numbers when you have them (they are kept as provenance and used to prioritise the queue). 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.

Input parameters:

- `competition` (number): Optional competition, 0-1.
- `domain` (string, required): Bare domain the keyword belongs to, e.g. 'acme.com'.
- `keyword` (string, required): The keyword to write about, exactly as listed by list_keywords.
- `position` (number): Optional current Google position, if the site ranks at all.
- `volume` (number): Optional monthly search volume, for queue priority.

### `mark_article_published` (~173 tokens)

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.

Input parameters:

- `domain` (string, required): Bare domain the page belongs to, e.g. 'acme.com'.
- `keyword` (string, required): The keyword this page targets, as listed by list_keywords.
- `title` (string): Optional page title. Defaults to the keyword.
- `url` (string, required): Full https URL of the published page.

### `run_scan` (~260 tokens)

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).

Input parameters:

- `competitors` (array): Optional competitor domains to compare against (up to 8). Steers the comparison instead of relying only on auto-detection.
- `url` (string, required): Site to scan — bare domain 'acme.com' or full URL 'https://acme.com'.

### `gsc_status` (~81 tokens)

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.

### `list_brands` (~38 tokens)

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

### `gsc_overview` (~181 tokens)

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.

Input parameters:

- `days` (integer): Trailing window in days (1–90). Default 28. Data lags ~2–3 days, so the window ends ~2 days ago.
- `domain` (string, required): Bare domain to report on, e.g. 'example.com' (no scheme/path). Must match a connected GSC property.

### `gsc_query` (~464 tokens)

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+).

Input parameters:

- `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'.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/com-cituna-cituna-mcp/cituna-mcp#diagnostics

## Score history

- 2026-08-03: 65

## Links

- npm package: https://www.npmjs.com/package/cituna-mcp
- Socket report: https://socket.dev/npm/package/cituna-mcp
- Repository: https://github.com/cituna/cituna-mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-cituna-cituna-mcp/cituna-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-cituna-cituna-mcp/cituna-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-cituna-cituna-mcp/cituna-mcp
