Shruwd
See how AI answers talk about your brand, and what to fix.
Что умеет
- Shruwd Get Workspace: The plan, the entitlements in force (brands, the workspace-wide prompt pool, members, engines, cadence, history window, rechecks per month, and maxVisibleFindings — how many find
- Shruwd List Brands: The active brands the caller can reach, with their prompt and competitor counts and the caller's role on each.
- Shruwd Get Brand: One brand with its pipeline health: last successful cycle, next scheduled cycle, run success rate, log-ingest continuity and connection states. Check this before treating a flat metr
Какие данные видит
Нужен ли аккаунт
Не нужен: сервер работает без входа
See how AI answers talk about your brand, and what to fix.
Shruwd tracks how often your brand shows up in Google AI Overviews, AI Mode and ChatGPT answers, and who gets cited instead. It explains why you're missing and tells you what to change. After you ship a fix, it checks again to show whether it worked.
What you can do from your assistant
- Set up a brand in one conversation: add prompts and competitors, or have Shruwd suggest them
- Check visibility: mention rate, share of voice and citation share against your competitors, plus how each is trending
- Read the answers: the actual AI responses behind every number
- Work through findings: see what's holding you back and the recommended fix, then mark it done when you've shipped it
- Watch AI crawlers: which AI bots reach your site and what they fetch
Connecting
Sign in with your Shruwd account when you connect. There's no API key to paste.
Как подключить
Как подключить Shruwd к Claude
Адрес сервера, который нужно вставить в настройках Claude:
https://shruwd--devindaymore.run.tools
- Откройте Claude (сайт claude.ai или приложение для компьютера).
- Перейдите в Настройки → Коннекторы (в английском интерфейсе: Settings → Connectors).
- Нажмите Добавить пользовательский коннектор (Add custom connector).
- Вставьте адрес сервера, скопированный ниже, в поле URL удалённого MCP-сервера и нажмите Добавить.
- В чате нажмите + → Коннекторы и включите новый коннектор.
Пользовательские коннекторы доступны на тарифах Free, Pro, Max, Team и Enterprise. На Free можно добавить только один. В Team и Enterprise коннектор сначала добавляет владелец организации в Настройки организации → Коннекторы.
Авторизация
После нажатия Добавить откроется окно входа в сервис. Войдите под своим аккаунтом и подтвердите доступ. Пароль Claude не видит.
Как подключить Shruwd к ChatGPT
Адрес сервера, который нужно вставить в настройках ChatGPT:
https://shruwd--devindaymore.run.tools
- Откройте ChatGPT в браузере (chatgpt.com). Нужен тариф Plus, Pro, Business, Enterprise или Edu.
- Один раз включите режим разработчика: Настройки → Приложения → Дополнительные настройки → Режим разработчика (Settings → Apps → Advanced settings → Developer mode).
- Откройте Настройки → Коннекторы и нажмите Создать (Create).
- Заполните форму: Название (любое), Описание (одна фраза, что делает сервис), URL MCP-сервера (скопируйте ниже).
- В поле Аутентификация выберите OAuth, если сервис требует вход, иначе Нет. Нажмите Создать.
- В новом чате откройте + → Приложения/Коннекторы и включите коннектор.
Название раздела у OpenAI менялось (Connectors → Apps/Plugins). Если пункт называется иначе, ищите «режим разработчика» в настройках. В рабочих пространствах Business/Enterprise администратор должен разрешить пользовательские коннекторы.
Авторизация
При первом использовании ChatGPT откроет окно входа в сервис. Войдите и подтвердите доступ.
Как подключить Shruwd к Cursor
Адрес сервера, который нужно вставить в настройках Cursor:
https://shruwd--devindaymore.run.tools
Быстрый способ: нажмите кнопку Открыть в Cursor ниже, Cursor сам предложит добавить сервер.
Вручную:
- В Cursor откройте Settings → Cursor Settings → MCP и нажмите Add new global MCP server.
- Вставьте JSON, скопированный ниже, в открывшийся файл
~/.cursor/mcp.json(для одного проекта:.cursor/mcp.jsonв корне проекта). - Сохраните файл. Сервер появится в списке MCP; при необходимости пройдите авторизацию по кнопке рядом с ним.
Авторизация
Если сервис требует вход, рядом с сервером в списке MCP появится кнопка авторизации.
Список инструментов сервера (28)
Технические названия из tools/list. Нужны только разработчикам.
| shruwd_get_workspace | The plan, the entitlements in force (brands, the workspace-wide prompt pool, members, engines, cadence, history window, rechecks per month, and maxVisibleFindings — how many findings the plan shows in full), usage against the period allowance including activePrompts against promptsAllowance, whether the caller is the workspace owner or a member, and the brands the caller can reach with their role on each. Call this first: the role on a brand decides which of these tools are allowed on it. Usage is the whole workspace's, since the pools are shared. |
| shruwd_list_brands | The active brands the caller can reach, with their prompt and competitor counts and the caller's role on each. |
| shruwd_get_brand | One brand with its pipeline health: last successful cycle, next scheduled cycle, run success rate, log-ingest continuity and connection states. Check this before treating a flat metric as a signal — "nothing ran" and "nothing was mentioned" look identical in a chart. |
| shruwd_create_brand | Creates a brand, its self entity (one alias = the name, one domain = the registrable domain) and the first measurement cycle. If the account has no workspace yet, one is created on the free tier. The response says which engines the plan measures and whether a first cycle was planted. On the free tier "snapshot" is "planned" or "already_taken": a domain gets one free measurement ever, across all accounts. Add competitors first (shruwd_add_competitor), then every prompt in one shruwd_add_prompts call: the first cycle starts within minutes of the first prompts and measures only the prompts and competitors that exist then. The name is the brand's own first alias, so a short (six characters or fewer) or common-word name is refused with context_terms_required until contextTerms are given, as for a competitor. Requires the workspace owner: a key held by a member is refused with 403 insufficient_role. |
| shruwd_update_brand | Renames a brand or changes its timezone. The name is for display; matching uses the self entity's aliases (shruwd_set_entity). The timezone moves the day boundary for cycles and rollups from the next cycle on. The domain cannot change: it defines the self entity, so a new domain is a new brand. |
| shruwd_archive_brand | Archives a brand. Nothing is deleted; scheduling stops and history stays. Requires the workspace owner: a key held by a member is refused with 403 insufficient_role. Ask before using this. |
| shruwd_list_prompts | The brand's prompts. With an engine, each prompt carries its coverage over the window: how often the brand was mentioned in answers to it. Per-prompt n is small (three repetitions per cycle), so coverage is often insufficient_data; that is correct, not missing data. |
| shruwd_add_prompts | Adds prompts — the questions asked of each engine every cycle. Write them the way a buyer would type them, without the brand name unless the intent is navigational. 1–500 characters each. The batch is atomic: if it would exceed the plan's prompt allowance — one pool shared across every brand in the workspace, not a per-brand limit — nothing is added and the error carries limit, current and submitted. On a new brand the first measurement starts within minutes of the first prompts and covers only what exists then, so add its competitors before this and every prompt in one call. |
| shruwd_update_prompt | Edits a prompt by its promptGroupId. Changing text or intent creates a new version under the same group — history stays attached to the version that produced it. tags and active change in place. Reactivating counts against the plan limit. |
| shruwd_remove_prompt | Deactivates a prompt. Nothing is deleted; its history stays readable. |
| shruwd_list_entities | The brand itself (isSelf) and every competitor, each with the exact aliases, domains, exclusions and context terms that decide what counts as a mention or a citation. |
| shruwd_add_competitor | Adds a competitor. Matching is exact, on word boundaries — no fuzzy matching, ever — because a false positive silently corrupts every metric. That is also why a short name or alias (six characters or fewer) or a common English word ("Arc", "Linear", "Notion") is refused without contextTerms: those names appear in sentences that are not about the company. Give one or two category words as context terms ("project management", "crm") and the mention counts only when one appears nearby. Include the competitor's domain so citations of it are attributed. On a new brand, add competitors before any prompt: the first measurement starts as soon as prompts exist, and a competitor added after it is not in it. |
| shruwd_set_entity | Sets the DESIRED aliases, domains, exclusions and context terms of an entity (the brand's own self entity included). Send the full lists: what is missing is closed as of now, what is new is added, what is unchanged is untouched, and past measurements keep the aliases that were valid when they ran. Read shruwd_list_entities first. |
| shruwd_remove_entity | Closes a competitor as of now. The brand's own entity cannot be removed. |
| shruwd_list_suggestions | Names the AI answers use that the brand does not track yet — the products a person would recognise as competitors but never added. Each comes with the share of answers that named it (e.g. 0.34 = in 34% of a prompt cluster's responses) and, when the answers linked it, its domain. Review them with the user: accept the real competitors (they then count in share of voice), dismiss the rest. Suggestions appear only after a measurement cycle has closed. |
| shruwd_accept_suggestion | Turns a suggestion into a tracked competitor, with exactly the rules of shruwd_add_competitor: exact aliases only, and a short or common-word name or alias is refused until contextTerms are given. The name and the linked domain are prefilled from the suggestion; pass aliases, domains, exclusions or contextTerms to adjust. Confirm with the user before accepting. |
| shruwd_dismiss_suggestion | Not a competitor. Quiet for ninety days; suggested again only if the answers still name it. |
| shruwd_run_measurement | Schedules a measurement cycle now: every active prompt, on every entitled engine, repeated as the plan sets (three times on weekly plans, once for the free snapshot). It starts at once and completes over the following day; this response contains only the cycle id. Watch it with shruwd_list_cycles, then read shruwd_get_visibility and shruwd_list_findings. A cycle spends the period's run allowance (see shruwd_get_workspace); weekly plans already run one per week, so use this for a first read or after a change worth measuring. On the free tier it is the single free measurement. |
| shruwd_list_cycles | Recent measurement cycles, newest first, with state (pending, running, complete, partial, failed, skipped_quota) and run counts. "partial" means some runs failed; "skipped_quota" means the allowance, the plan or billing stopped it. On a weekly plan the newest is next week's cycle, still pending: the newest that is not pending is the current measurement, and its results are in once it is complete or partial. |
| shruwd_get_visibility | Mention rate and share of voice for the brand and each competitor on one engine over a window (default: last 30 days), plus per-prompt coverage. Each metric is {state: "ok", point, lo, hi, n} — a proportion with its 95% interval — or {state: "insufficient_data"} when fewer than ten responses exist, or {state: "undefined"}. A metric with state insufficient_data is NOT zero; do not report it as a number, and do not compare two metrics whose intervals overlap as if one were higher. "asOf" is the day the numbers describe. "historyFrom" is set when the window was clamped to the plan's history. "modelIds" lists the provider models seen; a change there can move metrics on its own. engine defaults to google_aio: call once per engine the brand measures (its engines) and report each separately. |
| shruwd_get_visibility_series | The window metric at every cycle close in a range (default: the last ninety days, 30-day window): for the brand and each competitor, mention rate and share of voice per close, each a {state: "ok", point, lo, hi, n} metric or an explicit non-number. Use it to answer "is this changing" — but two points whose intervals overlap have NOT moved, and a change across a "modelChanges" entry may be the provider's model rather than the brand (the comparison is confounded). "series" is index-aligned with "points"; null means no rollup row for that close. |
| shruwd_get_crawlers | Which AI crawlers fetched the brand's site, from its server logs, over a window. verifiedHits were confirmed against the vendor's published IP ranges; unverifiedHits merely claimed the user-agent, which anyone can send. Only verified hits are a signal, and the two are never summed. "live_retrieval" bots fetch pages to answer a question now, so a page they cannot fetch cannot be cited in those answers; "training" crawlers collect pages for model training. "coverage" says whether log ingest has been continuous — if not, an absence of hits means nothing. |
| shruwd_list_findings | Diagnoses, ordered by severity, then confidence, then estimated impact. Each has a specific recommendation: what to change, where, and which metric should move. confidence: "observed" was measured from first-party data; "inferred" follows a reliable pattern; "heuristic" is a plausible cause that could not be confirmed — treat it as a hypothesis, not a fact. By default the open, acknowledged, fix_applied and rechecking findings; pass states to change that. "queued" counts open findings held back by the weekly cap. On plans that cap visible findings, "locked" counts the rest by severity: they exist and are not returned. When locked.count is above zero, never present the returned findings as the complete set — say how many are withheld. |
| shruwd_suggest_setup | Reads the brand's homepage and drafts ten prompts and up to six competitors. Nothing is saved to the brand: show the draft to the user, then add each competitor they confirm with shruwd_add_competitor, passing its aliases and contextTerms from the draft, and after that the prompts they keep, in one shruwd_add_prompts call. Returns the stored draft when one exists unless regenerate is true. Three drafts per brand per day; a new draft can take up to a minute. |
| shruwd_list_answers | The latest individual AI answers for the brand, newest first: the prompt, the engine, whether the brand was named and at what rank, the competitors named and the pages cited. Evidence, not a metric: never compute a rate from these; use shruwd_get_visibility, which withholds numbers below ten answers. |
| shruwd_get_finding | One finding with its full evidence, recommendation, and the history of state changes. A finding the plan does not show in full — one counted in a findings list's "locked" — is refused with 403 not_entitled: it exists, the plan withholds it. |
| shruwd_transition_finding | Moves a finding: "acknowledged" (seen), "fix_applied" (the recommended change is live), or "dismissed". Order matters: an open finding must be acknowledged before fix_applied, or the call is refused with 409 invalid_transition. fix_applied captures a baseline of the affected prompts and starts a fourteen-day clock; a recheck then measures again, and the finding becomes "resolved" ONLY if the movement gates pass (non-overlapping intervals and at least five points of change), else "not_moved". ACCESS findings are instead confirmed from the site's own logs, robots.txt or page, with no wait and no recheck spent. Neither resolved nor not_moved can be set here. Do not mark fix_applied until the change is actually deployed; the baseline is taken at that moment. A finding withheld by the plan is refused with 403 not_entitled. |
| shruwd_create_ingest_token | Mints the token the brand's server sends its access logs with, and returns the endpoint to POST them to plus a `setup` object with three routes: an HTTP log drain (Vercel, Netlify, Fly), a Cloudflare Logpush HTTP destination (Enterprise zones; the destinationUrl embeds the token), or the reference forwarder Worker (any other Cloudflare plan or CDN-served site). The token is shown once and never again; previous tokens are revoked. Ask which platform the site runs on, then give the user that route's values verbatim. Logs power the crawler view and the highest-confidence findings. Requires the admin role on the brand: a key held by an editor or viewer there is refused with 403 insufficient_role. |