# Howseen (remote · app.howseen.ai)

How ChatGPT, Gemini, Perplexity and Google AI name your brand, cite sources and rank rivals.

- Trust score: 85/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `app.howseen.ai`: 85/100 (this document), [markdown](https://verifymcp.io/servers/ai-howseen-howseen-mcp/api-mcp.md), [page](https://verifymcp.io/servers/ai-howseen-howseen-mcp/api-mcp)

## Channel facts

- Endpoint: `https://app.howseen.ai/api/mcp`
- Transports: `streamable-http`
- Auth: `required (not validated)`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, 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-11-05.

- **Endpoint Security**: 89/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, but the challenge carries no valid RFC 9728 metadata, so a client cannot discover where to get a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 79/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 7565 tokens (~171/item across 44 items; 44 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 50/100
  - Stability observed for 15 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **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.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 45 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Howseen MCP server?

Howseen is a hosted endpoint at https://app.howseen.ai/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http ai-howseen-howseen-mcp 'https://app.howseen.ai/api/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "ai-howseen-howseen-mcp": {
      "url": "https://app.howseen.ai/api/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "ai-howseen-howseen-mcp": {
      "type": "http",
      "url": "https://app.howseen.ai/api/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.ai-howseen-howseen-mcp]
url = "https://app.howseen.ai/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-howseen-howseen-mcp": {
      "type": "remote",
      "url": "https://app.howseen.ai/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ai-howseen-howseen-mcp --url 'https://app.howseen.ai/api/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  ai-howseen-howseen-mcp:
    url: "https://app.howseen.ai/api/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "ai-howseen-howseen-mcp": {
      "Transport": "http",
      "Url": "https://app.howseen.ai/api/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add ai-howseen-howseen-mcp -t streamable-http -u 'https://app.howseen.ai/api/mcp'
```

### Other

```json
{
  "mcpServers": {
    "ai-howseen-howseen-mcp": {
      "type": "http",
      "url": "https://app.howseen.ai/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## 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-11-05 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 84, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “get_action_plan” rewrote its description, which is the text the model reads
- [security] Tool “get_content_plan” rewrote its description, which is the text the model reads
- [functional] New tool “apply_inbound_link”
- [functional] New tool “get_pruning_review”

### 2026-11-02 (score 83, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “update_brand_instructions”, which the server declares destructive
- [security] Tool “draft_article” rewrote its description, which is the text the model reads
- [security] Tool “get_action_plan” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 4760 → 6980
- [functional] New prompt “fix_my_site”
- [functional] Server version: 1.2.0 → 1.3.0
- [functional] New tool “get_ai_referrals”
- [functional] New tool “get_analytics”
- [functional] New tool “get_brand_settings”
- [functional] New tool “get_connections”
- [functional] New tool “get_content_plan”
- [functional] New tool “get_fanout_queries”
- [functional] New tool “get_next_action”
- [functional] New tool “get_search_console”
- [functional] New tool “get_sentiment”
- [functional] New tool “get_site_audit”
- [functional] New tool “list_site_pages”
- [functional] New tool “set_autopilot”
- [cosmetic] “draft_article” added an optional parameter “article_id”
- [cosmetic] “draft_article” made “question” optional

### 2026-10-31 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 81, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 79, +1)

- [security] Tool “publish_article” rewrote its description, which is the text the model reads

## MCP tools (44)

### `list_brands` (~42 tokens)

List brands

List the brands (websites) tracked in this Howseen account, with their id, name and domain. Call this first when the account may have several brands.

### `get_visibility` (~146 tokens)

Get AI visibility

Headline AI visibility of a brand: % of AI answers that name it, share of voice vs competitors, average position, sentiment, per engine, plus the trend over the period (one point per scan).

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `to` (string): End date YYYY-MM-DD. Default: now.

### `list_prompts` (~175 tokens)

List tracked prompts

The buyer questions (prompts) tracked for a brand, with per-prompt visibility, share of voice, position, which engines name the brand, and which brands and domains are cited.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `limit` (integer): Max items to return (default 50, max 200).
- `offset` (integer): Items to skip, for pagination.
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_competitors` (~132 tokens)

Get competitors

Compare the brand with its competitors in AI answers: visibility %, share of voice, average position and sentiment, overall and per engine.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_top_sources` (~171 tokens)

Get top cited sources

The domains and URLs AI engines cite most when answering the brand's buyer questions, overall and per engine. Use it to find where the brand should get listed or mentioned.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `limit` (integer): Max items to return (default 20, max 100).
- `offset` (integer): Items to skip, for pagination.
- `to` (string): End date YYYY-MM-DD. Default: now.

### `search_responses` (~217 tokens)

Search AI answers

Read real AI answers collected for the brand: excerpts around the brand mention, whether the brand and which competitors were named, and the cited URLs. Filter by a word in the question or answer (query), by prompt text, and by engine.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `limit` (integer): Max items to return (default 10, max 50).
- `offset` (integer): Items to skip, for pagination.
- `prompt` (string): Optional text the tracked prompt must contain.
- `query` (string): Optional text to search in the question or the answer.
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_action_plan` (~235 tokens)

Get action plan

Prioritized actions to raise the brand's AI visibility (off-page: get listed on the pages AI cites; content: answer uncovered buyer questions; technical: site fixes, incl. links:<article_id> = link a new article from 3 related pages, with copy-ready sentences in links.pages; setup: connections), ranked 20/80 like the dashboard Action plan with the same inputs, with steps and state. For just the single next step, use get_next_action.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `lang` (string): Language of the action texts (default en).
- `limit` (integer): Max items to return (default 10, max 50).
- `to` (string): End date YYYY-MM-DD. Default: now.

### `list_articles` (~127 tokens)

List articles

Articles Howseen wrote for the brand (drafts, scheduled and published), with status, target question, GEO score and published URL.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `limit` (integer): Max items to return (default 20, max 100).
- `offset` (integer): Items to skip, for pagination.
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_prompt_gaps` (~192 tokens)

Get prompt gaps

Tracked prompts where AI names at least one competitor but not the brand, per engine, with the competitors named and the domains cited. Sorted by search volume (when a cached figure exists) then by number of competitors named. Start here to see what to win back.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `limit` (integer): Max items to return (default 25, max 100).
- `offset` (integer): Items to skip, for pagination.
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_easiest_wins` (~203 tokens)

Get easiest wins

Third-party sites and pages cited in the answers the brand loses (competitor named, brand not), ranked by how many lost answers cite them, with the matching action-plan item. Getting listed there is the shortest path back into those answers.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `lang` (string): Language of the action texts (default en).
- `limit` (integer): Max items to return (default 10, max 50).
- `offset` (integer): Items to skip, for pagination.
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_changes` (~145 tokens)

Get changes

What changed between the last two completed scans (or since a date): prompts gained and lost, visibility delta per engine, tracked competitors newly named, and the likely causes (sources that started or stopped citing the brand).

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `since` (string): Optional YYYY-MM-DD: compare the latest scan with the last scan on or before this date. Default: the previous scan.

### `suggest_prompts` (~106 tokens)

Suggest prompts to track

Buyer questions worth tracking that the brand does not track yet: real questions from Hacker News discussions (ranked by engagement) plus AI suggestions for the category. Returns suggestions only; use add_prompts to track some. Limited to 20 calls per day.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `count` (integer): How many AI suggestions (default 10, max 25).

### `get_article_performance` (~139 tokens)

Get article performance

Articles written for the brand with status, GEO score, published URL and search-engine indexing status (Google URL Inspection, Bing), plus impressions and clicks when Search Console or Bing is connected.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `limit` (integer): Max items to return (default 20, max 100).
- `offset` (integer): Items to skip, for pagination.
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_usage` (~76 tokens)

Get plan usage

Plan, quotas used and left (prompts, competitors, articles, manual scans), next automatic scan estimate, what this API key may do, and the API rate limits. Call it before planning changes.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.

### `get_next_action` (~197 tokens)

Get the next action

THE single most valuable next step for the brand, the same one the dashboard Overview shows (action engine, 20/80 ranking with the technical audit, Search Console and demand), with its steps, the questions it wins back and how to close it (which tool to call). Use it when the user asks "what should I do next?" or "what do I fix first?".

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `lang` (string): Language of the texts (default en).
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_site_audit` (~221 tokens)

Get the technical site audit

Technical GEO/SEO audit of the brand's website, as the dashboard Technical audit shows it: every check (indexable, robots.txt, sitemap.xml, llms.txt, server rendering, Bing, structured data, canonical, trust signals), every issue with its severity and score gain, the steps for the site's CMS and the exact text to paste (robots.txt, llms.txt, JSON-LD, meta tags...), plus the problems found on the pages that serve the tracked questions. Use it when the user asks "what should I fix on my site" or for code to add. The last audit (refreshed weekly) is returned; refresh: true re-crawls now (up to about a minute, a few per hour).

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `lang` (string): Language of the texts (default en).
- `refresh` (boolean): true = crawl the site again now instead of reading the last audit.

### `get_content_plan` (~206 tokens)

Get the content plan

The brand's content calendar with the real publication state of every article (planned, draft, scheduled, to publish by hand, failed, live on the brand's site), the Autopilot state, and the two answers to "what next?": next_to_write (a planned topic: write it with draft_article and its article_id) and next_to_publish (a written article that meets the quality bar: publish it with publish_article). Also stale_facts: statistics of live articles re-checked monthly on their source that need attention (newer figure found with the proposed sentence, figure gone from its source, source offline), each with its source and the date it was last verified.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `limit` (integer): Max items to return (default 30, max 200).
- `offset` (integer): Items to skip, for pagination.

### `get_connections` (~145 tokens)

Get connection status

The TRUE state of every connection of the brand, like Settings > Integrations: each publishing destination (CMS, own Next.js / API feed, hosted blog, webhook, copy-paste editor) with connected / needs_reconnect / copy_paste_only / waiting_for_site, whether articles can be published automatically, Autopilot, Google (Search Console property for this site, GA4) and Bing Webmaster. Use it before publishing or when something does not appear online. Connecting is done by the user in the app (no secrets through the assistant).

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.

### `get_search_console` (~120 tokens)

Get Google Search Console data

Google Search Console of the brand's own site: clicks, impressions, CTR, position, daily trend, top queries and pages, plus the opportunities Howseen derives (queries on page 2, low-CTR pages, queries Google shows an off-topic page for). Only the property covering this brand's site is read.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `days`: Period in days: 7, 28 (default) or 90.

### `get_analytics` (~131 tokens)

Get Google Analytics (GA4) data

GA4 traffic of the account's connected property: sessions, users, page views, daily trend, top sources and pages, plus the sessions and revenue AI assistants (ChatGPT, Perplexity, Gemini, Claude, Copilot...) send. For the AI part only, prefer get_ai_referrals. Not available with a per-brand key (GA4 is account-wide).

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `days`: Period in days: 7, 28 (default) or 90.

### `get_ai_referrals` (~140 tokens)

Get AI referral traffic

Real visits AI assistants send to the brand: GA4 sessions and revenue per assistant (ChatGPT, Perplexity, Gemini, Claude, Copilot...) and the pages they land on, an estimate of hidden AI visits (shown apart, never added), and the AI assistants that read the brand's Howseen-hosted blog pages (last 30 days). Use it to prove that AI visibility turns into traffic.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `days`: Period in days: 7, 28 (default) or 90.

### `get_sentiment` (~177 tokens)

Get sentiment

How AI answers speak about the brand: % of the answers naming it that are positive (null under 3 answers), the positive / neutral / negative split with a real negative excerpt, per engine, compared with competitors, and the questions where the tone is negative.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `limit` (integer): Max items to return (default 20, max 100).
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_fanout_queries` (~158 tokens)

Get fan-out queries

The web searches the AI engines ran behind each tracked question (latest scan): the queries to rank for so the AI finds the brand, overall and per question.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `engine` (string): Optional AI engine filter, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode. Default: all engines.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `limit` (integer): Max items to return (default 30, max 200).
- `to` (string): End date YYYY-MM-DD. Default: now.

### `get_brand_settings` (~83 tokens)

Get brand settings

The brand profile (offer, category, language, markets, about, positioning, products), its competitors and its writing rules (the client's instructions, binding on every article), plus Autopilot. Read it before drafting or changing instructions.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.

### `list_site_pages` (~101 tokens)

List the site's own pages

The brand's own website pages Howseen read when it joined (URL, title, summary): the inventory used for internal links, llms.txt and content refresh.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `limit` (integer): Max items to return (default 50, max 200).
- `offset` (integer): Items to skip, for pagination.

### `get_pruning_review` (~213 tokens)

Get the quarterly pruning review

The quarterly content pruning review of the brand's website (the Action plan card "Quarterly pruning"): pages nobody finds in 90 days, pages that compete for the same Google queries (cannibalisation) and thin pages, each with ONE recommendation (improve with Content Refresh, merge into another page with a 301, or remove with 410 / noindex), the reason and the data behind it (Search Console clicks and impressions, shared queries, words, AI citations, visits from every channel). Pages the AI cites or that get visits (Google Analytics, any channel), noindex pages, legal pages, the home and pages the owner kept are never proposed for removal. Use it when the user asks which pages to delete, merge or improve. Howseen never deletes nor redirects a page itself.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `lang` (string): Language of the texts (default en).

### `mark_action_done` (~130 tokens)

Mark an action done

Mark an action-plan item as done (same state as the dashboard Action plan). Use the action id from get_action_plan or get_easiest_wins. Preview first; confirm: true applies.

Input parameters:

- `action_id` (string, required): Action id, e.g. offpage:g2.com or content:<prompt>.
- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.

### `dismiss_action` (~123 tokens)

Dismiss an action

Dismiss an action-plan item the user does not want to do (moves it to Archived in the dashboard, out of the next best actions). Reversible in the dashboard. Preview first; confirm: true applies.

Input parameters:

- `action_id` (string, required): Action id from get_action_plan.
- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.

### `add_prompts` (~144 tokens)

Add prompts to track

Track new buyer questions (prompts) for the brand, checked against the plan's prompt quota (the whole list is refused if it would exceed it). An archived prompt added again is restored. Preview first; confirm: true applies.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `prompts` (array, required): Buyer questions to track, 1 to 25.
- `topic` (string): Optional topic to file them under.

### `remove_prompts` (~117 tokens)

Remove prompts

Stop tracking prompts and remove them from the prompt list (past scan results stay in history). Prefer archive_prompts to keep them listed. Preview first; confirm: true applies.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `prompts` (array, required): Exact prompt texts (from list_prompts).

### `archive_prompts` (~119 tokens)

Archive prompts

Archive prompts: they stop being scanned (frees prompt quota) but keep their history and stay listed as archived in the dashboard, restorable. Preview first; confirm: true applies.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `prompts` (array, required): Exact prompt texts (from list_prompts).

### `add_competitor` (~128 tokens)

Add a competitor

Track a competitor from a name or a website URL (resolved to name + domain like in Settings), within the competitor quota. Preview first; confirm: true applies.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `competitor` (string, required): Competitor name or URL, e.g. "Notion" or "https://notion.so".
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.

### `remove_competitor` (~104 tokens)

Remove a competitor

Stop tracking a competitor (by name or domain). Past results keep it. Preview first; confirm: true applies.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `competitor` (string, required): Tracked competitor name or domain.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.

### `draft_article` (~224 tokens)

Draft an article

Write a DRAFT article answering one buyer question, with the same quality pipeline as the app (brand context, the client's writing rules, sources AI cites, GEO checks). Never publishes. Give question (e.g. a prompt from get_prompt_gaps), or article_id of a planned topic of the content plan (get_content_plan next_to_write) to write that slot instead of creating a duplicate. Uses the plan's article allowance. Preview first; confirm: true writes it (up to about a minute).

Input parameters:

- `article_id` (string): Or the id of a PLANNED article of the content plan (get_content_plan): writes that topic in place.
- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `question` (string): The buyer question the article must answer, e.g. a prompt from get_prompt_gaps.

### `refresh_article` (~213 tokens)

Update an article with the current profile

Rewrite a WRITTEN article with the brand's current profile (offer, category, offerings, competitors) after it changed: same article id, slug, question and date, previous version kept (restorable in the app). A published article is never overwritten: the update lands in a refreshed draft. Free once per article after a profile change, otherwise uses the article allowance. Give article_id (list_articles) or the article's target question. Preview first (shows what changes and the quota impact); confirm: true rewrites it (up to about a minute).

Input parameters:

- `article_id` (string): Article id from list_articles.
- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `question` (string): Or the article's target question (the most recent written article for it).

### `create_share_report` (~177 tokens)

Create a share report

Create a public, frozen report link (visibility, competitors, top prompts, recommendations) with the account's agency branding, like the dashboard Share button. Preview first; confirm: true creates the link.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `engine` (string): Optional engines, comma separated: chatgpt, gemini, perplexity, ai_overviews, ai_mode.
- `from` (string): Start date YYYY-MM-DD. Default: all time.
- `lang` (string): Report language (default en).
- `to` (string): End date YYYY-MM-DD.

### `run_scan` (~144 tokens)

Run a visibility scan

Scan the brand's prompts on the AI engines now, with the same limit as the dashboard Run now button (a fresh scan at most once per brand per plan cadence: every 72h, every 24h on Business; prompts added since the last scan can be scanned alone; an unfinished scan can be continued). Preview first; confirm: true runs about 45 seconds per call.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.

### `update_brand_instructions` (~204 tokens)

Update the writing instructions

Change the brand's writing instructions (Settings > Writing rules): the client's own rules every article must follow (tone, words to avoid, competitors never to name, facts to state...). Binding on every writing path from now on; an article breaking one is held, never published. mode "append" adds a rule, "replace" (default) sets the whole text (max 2000 characters, never cut). Read get_brand_settings first. Preview first; confirm: true saves.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `instructions` (string, required): The instructions text (replace) or the rule to add (append). Empty with replace clears them.
- `mode` (string): replace (default) or append.

### `set_autopilot` (~148 tokens)

Turn Autopilot on or off

Turn Autopilot on (articles of the content plan go live on the connected site on their date, once they meet the quality bar and the brand's rules) or off (nothing publishes automatically). Same switch as Howseen > Content. Preview first (says where it would publish); confirm: true applies.

Input parameters:

- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `on` (boolean, required): true = Autopilot ON, false = OFF.

### `publish_article` (~234 tokens)

Publish an article

Publish a written article (e.g. a draft from draft_article) to the brand's connected CMS (WordPress, Shopify, Ghost, BigCommerce, GoHighLevel, Webflow, webhook) or hosted blog, now, or schedule it for a later date (needs Autopilot ON). Goes live publicly. Preview first; confirm: true publishes and returns the URL.

Input parameters:

- `article_id` (string, required): Article id from list_articles or get_article_performance.
- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `platform` (string): Optional: wordpress, shopify, ghost, bigcommerce, webhook, nextjs (hosted blog / Next.js feed) or api. Default: the CMS Autopilot uses (most recently connected).
- `publish_at` (string): Optional YYYY-MM-DD after today to schedule instead of publishing now (Autopilot must be ON).

### `request_indexing` (~210 tokens)

Request search-engine indexing

Submit a published article to the search engines connected for the brand: Google (sitemap re-submit through Search Console when connected with indexing), Bing (Webmaster key) or IndexNow for pages hosted by Howseen. If you publish on your own site from the API or feed, pass url (the live https address of the article on the brand's domain): Howseen records it and tracks indexing there. At most once per article every 24h. Preview first; confirm: true submits.

Input parameters:

- `article_id` (string, required): Id of a published article.
- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `url` (string): Live https URL of the article on the brand's own site (needed when you publish it yourself from the API or feed).

### `apply_inbound_link` (~248 tokens)

Link a page of the site to a new article

Add the ready sentence that links one existing page of the brand's site to a newly published article (the links of a get_action_plan item whose id starts with links:), on the connected WordPress only: one paragraph is inserted right after the chosen paragraph, nothing else on the page changes. Reported as applied only once the live page shows the link. mode revert removes the added sentence; mode verify re-reads the live page. Pages on other sites or editors are refused with the sentence to paste by hand. Preview first; confirm: true writes on the live site.

Input parameters:

- `article_id` (string, required): links.article_id of the get_action_plan item.
- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.
- `mode` (string): apply (default), revert (remove the added sentence) or verify (re-read the live page).
- `page_url` (string, required): links.pages[].page_url: the page to add the link on.

### `delete_article` (~175 tokens)

Delete an article

Move an article (planned, draft or published) to the Trash, like the dashboard delete button: restorable with restore_article or in Howseen > Content > Trash, and its topic is not planned again. A post already live on the client's own CMS (WordPress, Shopify...) is NOT removed from the CMS: the preview says where it stays live. Always call WITHOUT confirm first and show the preview to the user; call again with confirm: true only after they approve.

Input parameters:

- `article_id` (string, required): Article id from list_articles.
- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.

### `restore_article` (~110 tokens)

Restore a deleted article

Bring back an article from the Trash (e.g. one deleted with delete_article). Preview first; confirm: true restores.

Input parameters:

- `article_id` (string, required): Id of the deleted article (from delete_article's result).
- `brand` (string): Brand id, name or domain (from list_brands). Optional when the account has a single brand.
- `confirm` (boolean): Leave out (or false) to get a preview: nothing changes. Set true ONLY after the user approved that exact preview.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/ai-howseen-howseen-mcp/api-mcp#diagnostics

## Score history

- 2026-11-05: 85
- 2026-11-04: 84
- 2026-11-03: 84
- 2026-11-02: 83
- 2026-11-01: 83
- 2026-10-31: 83
- 2026-10-30: 82
- 2026-10-29: 82
- 2026-10-28: 81
- 2026-10-27: 81
- 2026-10-26: 80
- 2026-10-25: 80
- 2026-10-24: 79
- 2026-10-23: 79
- 2026-10-22: 78
- 2026-10-21: 78
- 2026-10-20: 36

## Common questions

### What is the Howseen MCP server?

Howseen is an MCP server listed in the public MCP registry as ai.howseen/howseen-mcp. How ChatGPT, Gemini, Perplexity and Google AI name your brand, cite sources and rank rivals. This page covers its hosted endpoint (https://app.howseen.ai/api/mcp).

### Is the Howseen MCP server safe to use?

Howseen scores 85 out of 100 on VerifyMCP. 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 Howseen MCP server expose?

Howseen exposes 44 tools: list_brands, get_visibility, list_prompts, get_competitors, get_top_sources, and 39 more. Their descriptions and schemas cost roughly 6,950 tokens of context every time the server is loaded.

### Does the Howseen MCP server require authentication?

Yes. Howseen asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Howseen MCP server still maintained?

Howseen is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://app.howseen.ai/api/mcp
- Authorisation metadata: https://app.howseen.ai/.well-known/oauth-protected-resource/api/mcp
- Repository: https://github.com/howseen-ai/howseen-mcp
- Website: https://howseen.ai/mcp
- Changelog RSS feed: https://verifymcp.io/servers/ai-howseen-howseen-mcp/api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/ai-howseen-howseen-mcp/api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/ai-howseen-howseen-mcp/api-mcp
