Sightkick
REMOTE · APP.SIGHTKICK.SO
The agentic SEO and GEO platform your AI agent uses to rank on Google and in AI search.
Available components
Last scanned (16 hours ago)
Scores higher than 58% of remote servers
Reachable. Last reached 4 Nov 2026.
Category Marketing and SEO
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. How we score → Why this is hard to score →
Endpoint Security94
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability49
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 12828 tokens (~346/item across 37 items; 37 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 Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage69
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 7% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 38 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
Unverified: 1 category
A category scored 0 because we could not verify it: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.
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.
- 4 Nov 26 +34
- Transport: unverified → pass ▲ security
- Injection markers: unverified → pass ▲ security
- First check of Judged manipulation: pass security
- Authorization: Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. security
- Tool “get_outreach” rewrote its description, which is the text the model reads security
- Tool “update_jobs” rewrote its description, which is the text the model reads security
- Tool “update_outreach” rewrote its description, which is the text the model reads security
- Tool “update_outreach_setup” rewrote its description, which is the text the model reads security
- MCP protocol: unverified → pass ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- First check of Tool coverage: 7 functional
- First check of Schema quality: fail functional
- First check of Schema quality: fail functional
- First check of Destructive annotations: 100 functional
- First check of Schema quality: good functional
- Server version: 2.1.0 → 2.2.0 functional
- “update_outreach” dropped the optional parameter “choice” cosmetic
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 28 Aug 26 0
First indexed and scored.
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 4 Nov 2026 · Probed https://app.sightkick.so/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=app.sightkick.so | CN=YR2,O=Let's Encrypt,C=US | 25 Oct 2026 | 23 Jan 2027 | RSA 2048 | SHA256-RSA | 59d8b309252deed4c45137ab6cfad890581 |
| SANs: app.sightkick.so | ||||||
| CN=YR2,O=Let's Encrypt,C=US (CA) | CN=Root YR,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | RSA 2048 | SHA256-RSA | 4ebd24947e24d394802d84a52fd5b319 |
| CN=Root YR,O=ISRG,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | RSA 4096 | SHA256-RSA | f24b6d17f9d9ad7cb1c9fea78782699f |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of app.sightkick.so. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| so. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://app.sightkick.so/.well-known/oauth-protected-resource/mcp"
Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://app.sightkick.so/.well-known/oauth-protected-resource/mcp" | Header | Value |
|---|---|
| strict-transport-security | max-age=63072000 |
Protected resource metadata
| Document | https://app.sightkick.so/.well-known/oauth-protected-resource/mcp |
|---|---|
| Retrieved | Yes |
| Resource | https://app.sightkick.so |
| Authorisation server | https://clerk.sightkick.so |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://app.sightkick.so/mcp | Verified | 200 | |
| http (plaintext) | http://app.sightkick.so/mcp | HTTPS enforced | 308 | https://app.sightkick.so/mcp |
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 →
ask_ai Ask AI models now ~272
Put questions to ChatGPT, Gemini, AI Overviews, AI Mode, Perplexity or Copilot now, as a buyer in the workspace's market (or location, a country) asks them: whether the answer names or cites the brand and where, the rivals it names, the pages it cites. Answers vary run to run. Each answer is one of the month's AI answers (usage says what's left). action: - ask(question, engine, location?): One question to one AI model. - batch(questions, engines, location?): Up to 20 questions in up to 6 AI models (60 answers at most), with a tally per AI model. Only answers that came back count. - recheck(question, engine, days?): Ask now and again in days (7 when not given, 3 to 30), to see what a change did: two AI answers. get_prompts rechecks reads it. - cancel_recheck(checkBackId): Call off a re-check that hasn't asked again yet.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| checkBackId | string | – | – |
| days | integer | – | – |
| engine | string | – | – |
| engines | array | – | – |
| location | string | – | – |
| question | string | – | – |
| questions | array | – | – |
No output schema declared.
No examples provided.
check_web Check the web now ~328
Look at Google, a page or the sitemap as it is right now. rank spends one of the plan's rank checks (30 per day), the other checks are free. check: - rank(keyword, depth?): Where the site ranks for a search now (to position 30, depth 10 to 50), the top 10 and the AI Overview's sites, beside Search Console's average. 30 per day. - index(url): Whether one of the site's pages is in Google's index, and why not, with the day Google last read it. 50 per day. - serp(keyword): One keyword's Google page: the top 10 with each page's type and whose it is, the AI Overview and its sources, People Also Ask, the keyword's numbers, and the tracked prompts asking it. Read it before writing for a keyword. - page(url): Read a page as a crawler without JavaScript: title, meta, canonical, headings, words, schema, and on the site's own pages what keeps it out of Google or AI answers. Another site's page: its outline only. 50 per day. - crawl(sitemapUrl?, limit?): Fetch every page the site's sitemap lists: status, redirect, title, canonical, noindex, words and the problems. Up to 500 pages, 5 crawls per day, own site only.
| Name | Type | Req | Description |
|---|---|---|---|
| check | string | yes | – |
| depth | integer | – | – |
| keyword | string | – | – |
| limit | integer | – | – |
| sitemapUrl | string | – | – |
| url | string | – | – |
No output schema declared.
No examples provided.
generate_page Have Sightkick write a page ~148
Sightkick writes a page (research, outline, draft, judge, revise, images) from the plan's monthly pages, and is refused when none are left (get_workspace plan): then you write it with update_page. Give an unwritten page's articleId, or a title and primaryKeyword for a new one. It takes minutes and returns at once: poll get_pages page. It keeps its slot. A page about a rival is written only with real evidence.
| Name | Type | Req | Description |
|---|---|---|---|
| articleId | string | – | A page's id (get_pages) |
| pageType | string | – | – |
| primaryKeyword | string | – | – |
| subject | string | – | – |
| title | string | – | – |
No output schema declared.
No examples provided.
get_activity Get the activity ~259
What happened in the workspace, and what came of it. view: - log(limit?): What Sightkick, the owner and agents did, newest first. - events(after?, types?, limit?): What to act on, oldest first (reply_received, citation_lost, page_dropped, check_back_done, change_lost, competitor_pages). Pass the cursor back as `after` for only new ones. Without it, the last 7 days. - report: The weekly report's numbers and a draft for the owner (under 300 words): AI answers week on week, Google over 28 days, what was published, changed and pitched, what's for the owner to do. Lead with the outcome. - receipt(improvementId?, articleId?, changeId?): What one change did, on Google (clicks before and after) and in AI answers (citations before and after): an improvement, a published page or a change you logged.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | – |
| articleId | string | – | A page's id (get_pages) |
| changeId | string | – | – |
| improvementId | string | – | – |
| limit | integer | – | – |
| types | array | – | – |
| view | string | yes | – |
No output schema declared.
No examples provided.
get_backlinks Get backlinks ~229
Links to the site and the places it should be listed. Free: another site's links are research_backlinks. view: - ledger(limit?): Every backlink Sightkick watches: source (outreach, directory, found, manual), type (dofollow, nofollow, ugc, sponsored, mention) and verdict (live, dropped, checking, not_found). - profile: The site's own link profile from its weekly check: domain rating, links, referring sites and what the last check found (the linking pages are the ledger). - mentions: Pages naming the brand without a link: easy links to ask for. - directories(status?): The directories this business belongs on, ranked by how often AI answers cite them: status, where to list, cost, the submit page, the fields pre-written. Submit a listing yourself with the kit, as each directory's own rules allow, then mark it with update_backlinks directory. - kit: The listing kit the directories' fields come from.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| status | string | – | – |
| view | string | yes | – |
No output schema declared.
No examples provided.
get_guidance Get SEO and GEO guidance ~97
Sightkick's SEO and GEO playbook by topic: what you may do, the scores, the schedule, structuring a page for AI answers, improving a page instead of writing a new one, and the content rules Sightkick's writer follows (evidence about rivals, comparison, alternatives and list pages, every article). Read it before planning or writing.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | A topic: 'schema', 'comparison pages' |
No output schema declared.
No examples provided.
get_improvements Get improvements ~303
What to change on the site, and what changes did. view: - suggested(includeSkipped?): This week's changes to published pages (title, a section answering a search, links, facts, an AI citation to win back): why, what it could win, status, date, and prompt, the change as a brief to follow. - other_pages: SEO title and description changes for pages Sightkick didn't write (Shopify, WordPress), before and after. - issues: What's wrong with the site, worst first: why it matters, how to fix it, the pages, who does it, a prompt to follow, and what was fixed lately. - health: The site scan: AI crawlers turned away, sitemaps, Google's verdict on every listed page, 404s, redirects and dead links. - todos: The site's to-dos Sightkick can't do by itself (robots.txt, a dead link while Auto improvements is manual, a profile to claim): yours where you can reach it, else the owner's. complete_todo once done. - results: Every change made and its reading against the page's own 28 days before, net of the site's trend, undone ones included. - candidates(limit?): Every change this week's data supports on each live page (the weekly review picks from these), blocked when it can't go now.
| Name | Type | Req | Description |
|---|---|---|---|
| includeSkipped | boolean | – | – |
| limit | integer | – | – |
| view | string | yes | – |
No output schema declared.
No examples provided.
get_keywords Get keywords ~137
The saved keywords and their topics, best Opportunity first. Free. view: - keywords(limit?, noTopic?, topic?, page?): Each saved keyword with its numbers, Search Console position, topic and page (none, planned, writing, ready, failed, published). Filter by topic id, page or noTopic. - topics(limit?, page?): Topics: the saved keywords Google answers with the same pages, one page each. page none = a page to make.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | – |
| noTopic | boolean | – | – |
| page | string | – | – |
| topic | string | – | – |
| view | string | yes | – |
No output schema declared.
No examples provided.
get_outreach Get outreach ~381
The pages worth a link and the conversations with them, sent from the workspace's one sending inbox. view: - prospects(limit?): Pages AI answers cite where rivals are named and the brand isn't, by Opportunity, with the evidence, the threads in flight and won and lost. - prospect(id): One prospect as a pitch sees it: the page, the contact, the drafted email. - threads(lane?, yourTurn?, limit?): Conversations, newest first (queued, sent, replied, or one lane), yourTurn for replies waiting on an answer (a won thread they wrote on again included), each with the last reply's intent and offer: their ask for money, a link swap or a guest post. Answer one with send_outreach reply (or draft_reply for the owner's OK) inside Google's link rules: a paid link carries rel="sponsored", a swap is two links marked nofollow, a guest post keeps a branded anchor. - thread(id): One conversation in full, every mail oldest first, and the waiting reply draft. - follow_up(id): The next follow-up owed: step, due date, the body, paused. - sequences: The pitch sequences with their numbers, their follow-ups' timing and the split test. - sequence(sequenceId): One sequence: name, pitch and follow-ups. - blocklist(kind?, limit?): The do-not-contact list, newest first. - unmatched: Emails no thread matched (update_outreach link_mail files one).
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | – | A prospect's id (get_outreach) |
| kind | string | – | – |
| lane | string | – | – |
| limit | integer | – | – |
| sequenceId | string|null | – | A sequence's id (get_outreach sequences), null for the Default |
| view | string | yes | – |
| yourTurn | boolean | – | – |
No output schema declared.
No examples provided.
get_pages Get pages ~525
The site's pages and their schedule. A page's status is how far its writing is: planned (not written), writing, ready (written), published, failed, retired. Apart from it, a page has a day (on the schedule, scheduledDate) or none (Unscheduled), and sightkickWrites says whether Sightkick writes it (or wrote it): off, it's yours or the owner's to write before its day, or it goes back to Unscheduled as missed. view: - list(status?, limit?, offset?): Pages by Opportunity, with the question each answers, its URL, Google's index verdict, the duplicate check, the plan's verdict and handsOffUntil. Every status but idea (a keyword's page nobody planned) unless asked. Up to 200, page with offset. - page(articleId, includeContent?): One page: head, status and score, publications, keywords, brief, plan, and once live its URL, index verdict and Search Console. includeContent adds the body and its bodyHash, which a live page's edit needs. - check_topic(title, primaryKeyword, question?, articleType?): Does the site already answer this? The page it repeats (improve that one instead) or null. 50 per day. - revisions(articleId): Every agent edit to a live page, newest first. The newest can be undone (publish_page undo_edit) while nobody changed the page since. - receipt(articleId): What a published page did on Google and in AI answers since it went live. - shipped(limit?): Pages registered as shipped elsewhere (update_page register), with pageId. - calendar: Every page on the schedule from today on, by day. fixedDay: put on that day by hand; else it took the next open slot. - schedule: The publishing schedule: Pages per month (its slots, spread evenly over each month), the hour pages go out, Sightkick's pages (scheduled or unscheduled), the next 30 days slot by slot, Unscheduled (pages without a day) and pages waiting for a slot. - images(articleId): A page's images in publish order, featured first.
| Name | Type | Req | Description |
|---|---|---|---|
| articleId | string | – | A page's id (get_pages) |
| articleType | string | – | – |
| includeContent | boolean | – | – |
| limit | integer | – | – |
| offset | integer | – | – |
| primaryKeyword | string | – | – |
| question | string | – | – |
| status | string | – | – |
| title | string | – | – |
| view | string | yes | – |
No output schema declared.
No examples provided.
get_prompts Get tracked prompts ~213
The buyer prompts Sightkick tracks in AI answers, and their answers. view: - list: Every tracked prompt with its visibility, sentiment, position, brands named and gap verdict. - prompt(promptId): One prompt in depth: its sources and its runs per AI model (each runId opens an answer). - answer(runId): One stored answer in full: its text, cited sources, brands found. - suggestions(keyword?, limit?): Questions buyers ask that nobody tracks yet, from People Also Ask and the site's own searches. A keyword opens its Google results page for more, free (as check_web serp). - rechecks: Questions booked to be asked again (ask_ai recheck): the answer then and, once asked again, now. - models: Every AI model, which are tracked, and the plan's count.
| Name | Type | Req | Description |
|---|---|---|---|
| keyword | string | – | – |
| limit | integer | – | – |
| promptId | string | – | – |
| runId | string | – | – |
| view | string | yes | – |
No output schema declared.
No examples provided.
get_reports Get reports ~20
The shareable reports, each with its link and sections.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_search_console Get Search Console ~398
The site's Google Search Console (get_workspace says whether it's connected). view: - metrics(rangeDays?): Clicks, impressions, CTR and position against the period before, by day, top searches and pages, countries and devices, from the daily sync (28 days when not given). The newest days are provisional. - query(dimensions?, days?, startDate?, endDate?, country?, device?, page?, query?, filters?, searchType?, limit?, startRow?, live?): Search Analytics by query, page, country (usa, gbr, deu), device, date or appearance, filtered, up to 1,000 rows (startRow for more). live asks Google now. - detail(page?, query?): One page's searches against the 28 days before, the site's pages Google shows for one search (several compete), or with neither the searches at positions 8 to 20. - export(days?, startDate?, endDate?, limit?, startRow?): Every page and search pair, up to 5,000 rows per call (nextStartRow). - sitemaps: The sitemaps submitted, live: when Google read each, URLs, errors. - searches(limit?, months?): The site's own searches over 28 days, each with its position, volume, difficulty and Opportunity. Positions 8 to 20 are the nearest wins.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | – |
| days | integer | – | – |
| device | string | – | – |
| dimensions | array | – | – |
| endDate | – | – | – |
| filters | array | – | – |
| limit | integer | – | – |
| live | boolean | – | – |
| months | boolean | – | – |
| page | string | – | – |
| query | string | – | – |
| rangeDays | integer | – | – |
| searchType | string | – | – |
| startDate | string | – | – |
| startRow | integer | – | – |
| view | string | yes | – |
No output schema declared.
No examples provided.
get_settings Get settings ~466
The workspace's settings as the app's Settings show them. writing is the house style every page follows (author, voice, key facts, rules): read it before you write. view: - brand: The brand profile: name, description, niche, audiences, service area, key facts, market, timezone. - writing: The author, the voice, the key facts and the rules. - images: The image style for Sightkick's own pages. - offerings: The products and services, with their images. - markets(country?): The country and language pairs Sightkick supports. - sites: Where pages publish: each connection's platform, site and status. - destinations: The site's folders beside the blog that pages go to: the page types' (Comparisons at /vs …, each with its name, folder and on/off) and the owner's own, which hold blog-style pages. key goes in update_page destination. pages: how many are in it. blogPath: the blog's own folder. - search_console: Search Console: connected or not, the property, any sign-in error, and the owner's link. - inbox: The sending inbox: signature, daily limit, the send window, the opt-out line, the postal address. - sequences: The pitch sequences (as get_outreach sequences). - agents: The agents connected to the workspace, and when each was last seen. - jobs: Sightkick's job settings (its pages scheduled or unscheduled), the opportunity floor and the warm-up. - usage: Every allowance: used, left, when it refills, the day's limits. - models: The tracked AI models (as get_prompts models). - webhook: The events webhook: its URL, types, health. - plan: The plan as Settings → Plan shows it: its amounts, price per month, cycle, renewal or trial end, a booked downgrade, a pause or a cancel, the steps each amount sells, and the link for what is the person's (their first card, a new card, the invoices). - notifications: When Sightkick emails the owner: the address, a reply that needs a person, the Monday brief, the nudges.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | – |
| view | string | yes | – |
No output schema declared.
No examples provided.
get_visibility Get AI visibility ~359
How AI models (ChatGPT, Gemini, AI Overviews, AI Mode) answer the tracked buyer prompts. Sampled daily: judge windows, not single days. view: - summary(days?): Presence, citations, recommendations and sentiment, per AI model, top cited sources and rivals. Lead with unbranded (intentSplit): branded prompts only reach people who know the brand. - gaps: Last week's gaps: prompts where rivals are named and the brand isn't, each planned, covered or offpage. - gap_candidates(limit?): The prompts answers left the brand out of over 14 days, worst first: the rivals named instead and whether a page can win it (onpage) or third-party pages decide (offpage). - competitors: The tracked rivals, past ones, and alsoNamed: brands the answers keep naming that nobody tracks. domainCheck suspect = the saved domain looks wrong. - sources(days?): The domains and pages AI answers cite, with their owner and page type, against the window before: where answers are built from. - mentions(days?, engines?, sentiments?, cited?, recommended?, limit?): Answers that named the brand unasked (prompts naming it left out, as in the headline), newest first: the prompt, AI model, sentence, place, sentiment, cited pages. - rival_pages(days?, competitorId?): Pages tracked rivals added, changed or took down, read from their sitemaps every Monday (7 days when not given).
| Name | Type | Req | Description |
|---|---|---|---|
| cited | boolean | – | – |
| competitorId | string | – | – |
| days | integer | – | – |
| engines | array | – | – |
| limit | integer | – | – |
| recommended | boolean | – | – |
| sentiments | array | – | – |
| view | string | yes | – |
No output schema declared.
No examples provided.
get_workspace Get the workspace ~226
Start here, every run. The site, the plan as its amounts and what's left this month (never name a package to the user), each of Sightkick's jobs (auto, manual, off) and sightkickPages (scheduled: Sightkick plans its pages on the schedule and they go live on their day, unscheduled: written, they wait without a day), the warm-up, what setup still lacks, the connections, and whatsNew: the events and Sightkick's own work since this agent's last session, with a cursor. contentEnabled false means no plan is running: reads work, the rest waits for the plan, which the person starts with their card (get_settings plan gives the link). A job's setting only says what Sightkick does by itself: you can act on any job at any time. connection says what this connection may do (an API key's permissions).
| Name | Type | Req | Description |
|---|---|---|---|
| since | string | – | whatsNew.cursor from an earlier call, or an ISO time. Left out: since this agent's last session, the same for every call in it |
No output schema declared.
No examples provided.
publish_page Publish pages ~229
Put pages on the site and take them down, at any time. Every page goes live. action: - publish(articleId, connectionId?): Publish a written page to the connected site. Returns its URL. - republish(articleId, baseHash, connectionId?): Send a live page's changes to the site, in place. Refused when the page changed since baseHash was read. - take_down(articleId, into?): Retire a page for good: off every connected site (a draft there, never deleted), never written, scheduled or linked again, its subject remembered. into: the live page its address should lead to. - undo_edit(revisionId): Put a live page back as it was before an agent edit (get_pages revisions), while nobody changed it since. Then republish.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| articleId | string | – | A page's id (get_pages) |
| baseHash | string | – | – |
| connectionId | string | – | – |
| into | – | – | A page's id (get_pages) |
| revisionId | string | – | – |
No output schema declared.
No examples provided.
research_backlinks Research backlinks ~181
Other sites' links, from the backlink index: one of the month's backlink lookups per call (an answer from the last 7 days is free unless refresh, and usage says what's left). The site's own profile is get_backlinks profile, free. lookup: - profile(domain, refresh?): Who links to a site: domain rating, links, referring sites, spam score, the 25 strongest. - gap(rivals, refresh?): Pages linking to every rival named (one to three) and not to the site, strongest first: pitch them with update_outreach add. - metrics(targets): Link metrics for up to 50 domains or pages.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | – | A domain or a page |
| lookup | string | yes | – |
| refresh | boolean | – | – |
| rivals | array | – | – |
| targets | array | – | – |
No output schema declared.
No examples provided.
research_keywords Research keywords ~159
Keyword research, each with volume, difficulty, CPC, intent, Opportunity (0 to 100), fit (0 to 3), onTopic and saved. One keyword search per call (the same within 30 days is free). Save the good ones with update_keywords. from: - seed(query, limit?, months?): Ideas around a seed search. - competitor(domain, limit?, months?): The searches a site ranks for (any domain, the top 200), with its position. - gap(domain, limit?, months?): Searches a rival ranks for and the site doesn't.
| Name | Type | Req | Description |
|---|---|---|---|
| domain | string | – | – |
| from | string | yes | – |
| limit | integer | – | – |
| months | boolean | – | – |
| query | string | – | – |
No output schema declared.
No examples provided.
schedule_page Schedule pages ~274
The publishing schedule: slots from Pages per month, and every ready page on the schedule out on its day, live, exactly as written, whoever wrote it. A planned page there is written that morning by Sightkick if sightkickWrites is on; one of yours not written by its day goes back to Unscheduled as missed. A page without a day waits in Unscheduled. action: - get: The schedule (as get_pages schedule). - place(articleId, at, date?): Put a page on the schedule or move it: at next (the next open slot) or day (that date, a slot or not, up to the day's cap). - unplace(articleId): Take a page off the schedule, to Unscheduled. Its status stays. - set_slots(pagesPerMonth?, publishHour?): Pages per month (1 to 120, at least what Sightkick writes a month): its slots spread evenly over each month, 15 every second day, 30 daily. And the hour pages go out (6 to 23).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| articleId | string | – | A page's id (get_pages) |
| at | string | – | – |
| date | string | – | – |
| pagesPerMonth | integer | – | – |
| publishHour | integer | – | – |
No output schema declared.
No examples provided.
score_page Score a page ~100
Grade a page's draft on the four pillars (answers the search, says something new, can be trusted, easy to quote): overall 0 to 100, each pillar's verdict, and the checklist: what to fix, by name, and for each pillar under 80 what would raise it. Write, score, clear the checklist, score again. 25 per day.
| Name | Type | Req | Description |
|---|---|---|---|
| articleId | string | yes | A page's id (get_pages) |
No output schema declared.
No examples provided.
send_outreach Send outreach email ~246
A real email to a stranger from the workspace's inbox, in the owner's name. Any time, whatever Auto outreach says. Not on the free trial. action: - pitch(id, force?): Book a prepared pitch into the send queue: out in the next business-hours slot, then Sightkick runs the follow-ups and replies. One scoring under the Opportunity floor (which steers Sightkick's own pitches and the app's buttons) goes with force: true. - reply(id, body?, to?): One reply now, threaded under their mail, on a thread mail went out on (a first email is a pitch): body, or the waiting draft (an offer's answer included). To whoever wrote last, or any address in to. Refused for an address on the do-not-contact list, or when the thread's inbox is gone. Can't be undone. - follow_up(id, body?): Send the owed follow-up at the send window's next opening.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| body | string | – | – |
| force | boolean | – | – |
| id | string | – | A prospect's id (get_outreach) |
| to | string | – | – |
No output schema declared.
No examples provided.
update_account Change the plan, notifications and brands ~742
The account as Settings → Plan and → Notifications, and the brand switcher, keep it (read them with get_settings plan and notifications). A plan change charges or credits the card on file, for an admin's agent. Starting the plan is the person's own click: the first card in Stripe's Checkout, and ending a free trial early with Start my plan now (get_settings plan gives the link), as are signing in and who gets access. What a trial holds back (sending email, the mailbox, the whole allowances) opens when the plan starts. The plan is amounts: articles (Sightkick's a month), prompts, aiModels, keywordSearches, contactsFound, managedInbox, interval (month or year), each on its steps (get_settings plan); what's left out stays. action: - preview_plan(articles?, prompts?, aiModels?, keywordSearches?, contactsFound?, managedInbox?, interval?): What a change would charge today and the price per month after it, without changing anything. A change that lowers the bill waits for the renewal. - change_plan(articles?, prompts?, aiModels?, keywordSearches?, contactsFound?, managedInbox?, interval?): Change the amounts or the cycle. A bill that rises or holds changes today, the difference charged; one that falls is booked for the renewal, nothing charged. On a trial it applies at once, nothing charged before the trial ends. payLink: the card wants the person to confirm. - undo_downgrade: Take back a downgrade booked for the renewal: the plan stays as paid for, nothing charged. - pause_plan(months): Pause a monthly plan for 1 to 3 months from its renewal: nothing billed and Sightkick's work stops meanwhile, everything set up stays. - resume_plan: Keep the plan: take back a cancel, or end a pause today. - cancel_plan(reason, comment?): Cancel at the renewal, with why (reason: price, results, technical, priority, switching or other, and a comment): everything runs until then, nothing more charged, resume_plan takes it back. A plan in its pause ends at once. - notifications(email?, posi…
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| aiModels | integer | – | – |
| articles | integer | – | – |
| comment | string | – | – |
| contactsFound | integer | – | – |
| string | – | – | |
| interval | string | – | – |
| keywordSearches | integer | – | – |
| managedInbox | boolean | – | – |
| months | number | – | – |
| name | string | – | – |
| nudges | boolean | – | – |
| positiveReplies | boolean | – | – |
| prompts | integer | – | – |
| reason | string | – | – |
| websiteUrl | string | – | – |
| weeklyBrief | boolean | – | – |
No output schema declared.
No examples provided.
update_backlinks Change backlinks ~365
The backlink ledger, a directory listing's status and the listing kit. action: - add(url): Add a page that links to the site to the ledger, by its public address. - remove(id): Take a row out of the ledger. - directory(key, status, url?): Where a directory's listing stands (its key): submitted, live (with the listing's url, it joins the ledger), skipped, or todo. - prepare_directory(key): Write one directory's own fields from the kit. - save_kit(segment?, fields?, logo?, images?): Save the kit: segment, fields by key, logo null clears it, images the kit's own files in order. - kit_image(as, url?, data?): Add the kit's logo or an image, by public url (5 MB) or base64 data (700 KB). - start_directories: Start what opening Directories in the app starts, once per workspace: the kit's first words from the business profile and the search for listings the site already has (found ones turn live). Each part says started, or done if it ran before. - rebuild_kit: Write the kit again from the business profile and offerings, after the profile changed: every field the profile gives is redone (a minute or so). Phone, address, hours, shipping, affiliate program, logo, images and segment stay.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| as | string | – | – |
| data | string | – | – |
| fields | object | – | – |
| id | string | – | – |
| images | array | – | – |
| key | string | – | – |
| logo | null | – | – |
| segment | string | – | – |
| status | string | – | – |
| url | string | – | – |
No output schema declared.
No examples provided.
update_brand Change the brand profile ~389
The business's facts everything Sightkick does reads (Settings → Brand Profile). action: - profile(description?, niche?, targetAudiences?, serviceArea?): Description, niche, audiences, service area: what's given changes. - name(name): Rename the brand (its spellings keep the old name). - add_offering(name, type, url?, description?): A product or service. Returns its id. - edit_offering(id, name?, type?, url?, description?): Change an offering (get_settings offerings). - remove_offering(id): Delete an offering and its images. Can't be undone. - offering_image(id, url?, data?): Add a picture to an offering, by public url (up to 8 MB) or base64 data (up to 700 KB): PNG, JPEG, GIF, WebP or AVIF, five per offering. - remove_offering_image(id, imageId): Take a picture off an offering (its imageId from get_settings offerings) and delete it. Can't be undone. - market(country, language): The country and language (get_settings markets). After research it rebuilds it: fresh keyword research, the unwritten plan replanned, the prompts retired for a fresh set. 3 per week. - timezone(timezone): An IANA name (Europe/Berlin): the day pages go out and the send window run on it.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| country | string | – | – |
| data | string | – | – |
| description | string | – | – |
| id | string | – | – |
| imageId | string | – | – |
| language | string | – | – |
| name | string | – | – |
| niche | string | – | – |
| serviceArea | string | – | – |
| targetAudiences | array | – | – |
| timezone | string | – | – |
| type | string | – | – |
| url | string | – | – |
No output schema declared.
No examples provided.
update_competitors Change tracked competitors ~139
The rivals the leaderboard and share of voice count (get_visibility competitors). action: - track(domain, name?): Track a rival from the next sweep: its real site's domain and the name buyers use (alsoNamed has both). A past rival comes back with its history. - untrack(competitorId): Take a rival off the board. Its history stays. - set_domain(competitorId, domain?): Move a rival to its real site: domain, or without it the checked suggestion.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| competitorId | string | – | – |
| domain | string | – | – |
| name | string | – | – |
No output schema declared.
No examples provided.
update_connections Change connections ~947
Where pages publish, Search Console, other agents and the events webhook. A site has one publishing destination: a second is refused, so remove the first to move. check: true reads the site and stores nothing. action: - connect_wordpress(siteUrl, token, authorId?, categoryId?, check?): A WordPress site, with the Sightkick plugin active and its token (wp option get sightkick_token). Guide: https://sightkick.so/connect/wordpress.md - connect_shopify(shopDomain, clientId?, clientSecret?, accessToken?, blogId?, authorName?, check?): A Shopify store's blog, with the owner's app's clientId and clientSecret (or an shpat_ accessToken). Guide: https://sightkick.so/connect/shopify.md - connect_framer(projectUrl, apiKey, collectionId?, blogUrl?, check?): A Framer project's CMS collection, with its address and an API key. Guide: https://sightkick.so/connect/framer.md - connect_webhook(webhookUrl, blogUrl?, bearerToken?): A site on its own code: each page POSTed, signed, to its https webhookUrl. Returns signingSecret and indexNowKey this once. Guide: https://sightkick.so/connect/webhook.md - edit(connectionId, label?, authorId?, categoryId?, token?, blogId?, authorName?, clientId?, clientSecret?, accessToken?, blogUrl?, autoPublish?, apiKey?, webhookUrl?, bearerToken?, removeBearerToken?): Change a connection: what's left out stays, new credentials are checked against the site. - test(connectionId): Check a connection works (a webhook gets a signed test event). - remove(connectionId): Stop publishing there and forget which page is which post (the site keeps its pages, and a later publish there is a new post). Can't be undone. - destination(key, label?, path?, on?): Change a destination (get_settings destinations): rename it, move it to another folder (refused while a live page is in it: its address would change), or switch a page type's off (no new pages go there) or on. - add_destination(label, path): Add one of the owner's own destinations: a folder of blog-style pages beside…
| Name | Type | Req | Description |
|---|---|---|---|
| accessToken | string | – | – |
| action | string | yes | – |
| apiKey | string | – | – |
| authorId | integer | – | – |
| authorName | string | – | – |
| autoPublish | boolean | – | – |
| bearerToken | string | – | – |
| blogId | string | – | – |
| blogUrl | string | – | – |
| categoryId | integer | – | – |
| check | boolean | – | – |
| clientId | string | – | – |
| clientSecret | string | – | – |
| collectionId | string | – | – |
| connectionId | string | – | A connection's id (get_settings sites) |
| key | string | – | – |
| label | string | – | – |
| on | boolean | – | – |
| path | string | – | A folder, like "/guides" |
| projectUrl | string | – | – |
| remove | boolean | – | – |
| removeBearerToken | boolean | – | – |
| rotateSecret | boolean | – | – |
| shopDomain | string | – | – |
| siteUrl | string | – | – |
| token | string | – | – |
| types | array | – | – |
| url | string | – | – |
| webhookUrl | string | – | – |
No output schema declared.
No examples provided.
update_improvements Act on improvements ~341
Act on any improvement at any time: Auto improvements only says whether Sightkick makes them by itself. An id is a suggested change's or another page's. action: - approve(id): Queue a change on the next free day. The old version is kept. - skip(id): Not this one: off the list, the page rests (60 days, 90 for another page). - unqueue(id): Back into the list, off its day. - restore(id): A skipped change back into the list. - undo(id): Take a live change out and send the page out again. - redo(id): Put an undone change back, with a new 28-day reading. - decline_issue(check): Decline a site finding for 60 days. - restore_issue(check): Bring a declined finding back. - complete_todo(actionId, result?): Mark a to-do done, with what was done. - skip_todo(actionId): Skip a to-do: not raised again for 60 days. - scan: Check the site now (at most every ten minutes). - indexnow(urls, key?): Tell IndexNow (Bing, Copilot) pages of the site are new or changed: up to 100 per call and per day. A site you ship yourself passes the key it serves at /<key>.txt.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| actionId | string | – | – |
| check | string | – | – |
| id | string | – | An id from get_improvements suggested or other_pages |
| key | string | – | – |
| result | string | – | – |
| urls | array | – | – |
No output schema declared.
No examples provided.
update_jobs Change Sightkick's job settings ~215
What Sightkick does by itself (Settings → Automation), either way. None of it limits what you or the owner do. action: - job(job, mode): One job: articles (Sightkick's pages: scheduled plans them on the schedule two weeks ahead and they go live on their day, unscheduled writes them into Unscheduled for you or the owner to give a day), keywords (auto research: auto, manual), improvements (auto, manual, with dead-link fixes), outreach (auto sends its pitches, manual waits). - floor(floor): The lowest Opportunity Sightkick pitches by itself, 20 to 70. - warmup(on, perWeek?): A young site's pace of new pages: on (perWeek 1 to 7, or left out for the recommended pace) or off.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| floor | integer | – | – |
| job | string | – | – |
| mode | string | – | – |
| on | boolean | – | – |
| perWeek | integer | – | – |
No output schema declared.
No examples provided.
update_keywords Change keywords ~230
Change the saved keywords. Free, up to 100 per call. action: - save(keywords): Save keywords as the owner's own: Sightkick checks each on Google within a minute and puts it on its topic. A removed one comes back. - move(keywords, to): Put keywords on a topic (its id, or "new" for one of their own). They stay where you put them. - set_main(keyword): Make a keyword its topic's main keyword, while the page isn't written. - remove(keywords): Take keywords off for good: Sightkick never adds them back. - link(keywords, url?, articleId?, title?, clear?): Say which page targets these keywords: a URL of the site or a page's articleId. clear unlinks.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| articleId | string | – | A page's id (get_pages) |
| clear | boolean | – | – |
| keyword | string | – | – |
| keywords | array | – | – |
| title | string | – | – |
| to | string | – | – |
| url | string | – | – |
No output schema declared.
No examples provided.
update_outreach Work the outreach ~659
Find, prepare and follow up the pages worth a link. Nothing here sends an email: send_outreach does. action: - add(url, contactEmail?, contactName?): Put a page on the list by its address: read and scored within a minute, never pitched by Sightkick on its own. - discover: Run the prospect discovery now (a minute or two, then get_outreach prospects). - find_contact(url): Find the editorial contact for any page: one of the month's contacts found when one is found. Saved on its prospect. suppressed: never write to it. - set_contact(id, email, name?): Set a prospect's contact by hand. - lead_with(id, url): Pitch another of the site's pages instead (the pitch is redrafted). - prepare(id): Find the contact (one contact found) and draft the pitch. Works on the trial. - write_pitch(id, subject, body): Your own pitch in place of the draft: subject and plain-text body, no signature (added when it sends). - draft_reply(id, body): Draft the next reply on a thread, plain text, for the owner's OK: it waits in the thread's composer under your name until they send, change or discard it, or send_outreach reply sends it. Sightkick drafts no replies itself. - handled(id): Handled, no reply: their mail was answered some other way or needs none, so the thread stops waiting on an answer. Nothing is sent. When they write again it waits again. - discard_reply(messageId): Delete a waiting reply draft. - edit_message(messageId, subject?, body): Rewrite a booked send (a pitch needs its subject). - edit_follow_up(id, body): Rewrite the next follow-up before it's queued. - pause_follow_ups(id): Pause a thread's follow-ups. - resume_follow_ups(id): Let a thread's follow-ups send again. - won(id, linkUrl?, anchorText?): The link is placed: sends stop, the ledger gets the link and checks it. - lost(id): Mark a prospect lost. - dismiss(id, reason?): Decline a prospect: its site goes on the blocklist (unblock brings it back). - unblock(blockId): Take a domain or address off the blocklist (get_outre…
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| anchorText | string | – | – |
| blockId | string | – | – |
| body | string | – | – |
| contactEmail | string | – | – |
| contactName | string | – | – |
| string | – | – | |
| id | string | – | A prospect's id (get_outreach) |
| linkUrl | string | – | – |
| mailId | string | – | – |
| messageId | string | – | – |
| name | string | – | – |
| prospectId | – | – | A prospect's id (get_outreach) |
| reason | string | – | – |
| subject | string | – | – |
| url | string | – | – |
No output schema declared.
No examples provided.
update_outreach_setup Change the outreach setup ~783
The sending inbox's settings and the pitch sequences (Settings → Sending inbox, Sequences). action: - signature(inboxId, signature): An inbox's signature (empty clears it). - daily_limit(inboxId, dailyLimit): An inbox's sends per day, 1 to 30. A raise restarts the warm-up climb. - warm_up(inboxId, on): An inbox's warm-up on or off. Off sends the whole daily limit from today, which hurts a new inbox's deliverability. - send_window(startHour?, endHour?, timezone?, weekdaysOnly?, dailyLimit?): When mail goes out: hours, timezone, weekdays only, the default daily limit. - opt_out(on?, lines?): The opt-out line under every email: on, and its lines (null puts Sightkick's back). - postal_address(address): The postal address under every email (empty clears it). - mailbox_link: Connecting a mailbox is the owner's: the app page and a line to hand them. - disconnect_inbox(inboxId): Take an inbox off (get_settings inbox): it stops sending and hearing replies, its queued sends are cancelled, its threads keep their history. A managed inbox taken off is cancelled with its domain. Connecting one again is the owner's sign-in. - managed_domains: The managed inbox (an add-on: update_account change_plan managedInbox): domains free to take for it, with their yearly price. - check_domain(domain): Whether one domain is free to take for the managed inbox. - create_managed_inbox(domain, firstName, lastName, username?, platform?, redirectUrl?): Order the managed inbox: the domain and one mailbox in the sender's name (username before the @, the first name when left out; GOOGLE or MICROSOFT; redirectUrl where the domain forwards, the site when left out). It connects itself in minutes, warm-up on. One inbox per brand: refused while another is being set up or an earlier one still listens. A new managed inbox needs the old one disconnected first, and charges the domain fee again to the plan's card. The same order asked again returns it, nothing charged. - save_sequence(sequenceId?, name?, pitch?…
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| address | string | – | – |
| dailyLimit | integer | – | – |
| domain | string | – | – |
| endHour | integer | – | – |
| firstName | string | – | – |
| followUps | array | – | – |
| inboxId | string | – | – |
| lastName | string | – | – |
| lines | – | – | – |
| name | string | – | – |
| on | boolean | – | – |
| pitch | object | – | – |
| platform | string | – | – |
| redirectUrl | string | – | – |
| sequenceId | string|null | – | A sequence's id (get_outreach sequences), null for the Default |
| signature | string | – | – |
| startHour | integer | – | – |
| timezone | string | – | – |
| username | string | – | – |
| weekdaysOnly | boolean | – | – |
No output schema declared.
No examples provided.
update_page Write and change pages ~741
Write pages and change them. A body is clean semantic HTML (h2 and h3 sections, paragraphs, links), no styles or scripts. A picture is uploaded with update_page_images first, then its returned URL goes in an <img>. action: - create(title, primaryKeyword, contentHtml?, metaTitle?, metaDescription?, excerpt?, slug?, question?, articleType?, pageType?, subject?, destination?, schedule?): A new page, with your body or empty. The duplicate check runs first and duplicateCheck names a page this one may repeat (improve that one instead), but never stops it. pageType makes a comparison, alternatives, integration or use_case page about subject, in its type's destination (refused while that destination is switched off). destination puts a blog-style page in one of the owner's own folders. It is yours to write (sightkickWrites off; update_page edit sightkickWrites: true hands it to Sightkick). Without schedule it waits in Unscheduled: ready with a body, planned without. schedule: next (the next open slot) or a day puts it on the schedule, where it goes live that day exactly as written. publish_page publish sends it now. next says how it goes out. - edit(articleId, contentHtml?, title?, metaTitle?, metaDescription?, excerpt?, slug?, articleType?, question?, questions?, notes?, baseHash?, reason?, sightkickWrites?, destination?): Change a page: contentHtml replaces the whole body. A live page, at any age, needs baseHash (get_pages page) and goes to the site with publish_page republish. Say why in reason: it stays on the page's record, where the change is measured from the day it goes out. The slug and destination only before it's live, the type and brief only before it's written. - delete(articleId): Delete a page that never went live. Can't be undone. - register(url, query, prompt?, title?, articleType?, liveSince?): Record a page you shipped yourself (a repo, the CMS), so it's tracked like Sightkick's: index, Search Console, AI citations. query is its main search, prompt the b…
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| articleId | string | – | A page's id (get_pages) |
| articleType | string | – | – |
| baseHash | string | – | – |
| commit | string | – | – |
| contentHtml | string | – | – |
| destination | string | – | – |
| excerpt | string | – | – |
| liveSince | – | – | – |
| metaDescription | string | – | – |
| metaTitle | string | – | – |
| notes | string | – | – |
| pageId | string | – | – |
| pageType | string | – | – |
| primaryKeyword | string | – | – |
| prompt | string | – | – |
| query | string | – | – |
| question | string | – | – |
| questions | array | – | – |
| reason | string | – | – |
| schedule | – | – | – |
| sightkickWrites | boolean | – | – |
| slug | string | – | – |
| subject | string | – | – |
| title | string | – | – |
| url | string | – | – |
| what | string | – | – |
No output schema declared.
No examples provided.
update_page_images Change a page's images ~248
A page's pictures, your own (Sightkick writes its own pages' art). An upload never edits the body: put its url in an <img> with update_page edit. A featured image needs no tag. action: - list(articleId): The page's images (as get_pages images). - upload(articleId, url?, data?, alt, featured?, position?): By public url (up to 8 MB) or base64 data (up to 700 KB): PNG, JPEG, GIF, WebP or AVIF. Returns mediaId and url. - alt(mediaId, alt): Set an image's alt text. - featured(mediaId): Make an image the featured one. - position(mediaId, position): Its place in what the site receives. - remove(mediaId): Delete an image the body no longer shows. Can't be undone.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| alt | string | – | – |
| articleId | string | – | A page's id (get_pages) |
| data | string | – | – |
| featured | boolean | – | – |
| mediaId | string | – | – |
| position | integer | – | – |
| url | string | – | – |
No output schema declared.
No examples provided.
update_prompts Change tracked prompts ~145
Choose what is tracked in AI answers. action: - track(prompts): Track up to 25 prompts at once: each comes back added or skipped with why (the plan's limit, a repeat). intent: informational, commercial or transactional. One naming the brand stays out of the headline rate. - retire(promptId): Stop tracking one. Its history stays. - restore(promptId): Track a retired prompt again, with its history, while there's room. - models(models): The tracked AI models: exactly the plan's count.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| models | array | – | – |
| promptId | string | – | – |
| prompts | array | – | – |
No output schema declared.
No examples provided.
update_reports Change reports ~141
Shareable reports at /r/<token>: anyone with the link reads them. action: - create(name?, sections?): A new report (sections left out take the app's defaults). Returns its link. - edit(id, name?, sections?): Change its name or sections. The link stays. - share(id): Its link. - rotate_link(id): A new link: the old one stops working at once. - remove(id): Delete a report and its link. Can't be undone.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| id | string | – | A report's id (get_reports) |
| name | string | – | – |
| sections | object | – | – |
No output schema declared.
No examples provided.
update_writing Change the writing rules ~302
The brand's rules for whoever writes, Sightkick or you (Settings → Writing, Images). voice, key_facts and rules replace the whole text: read get_settings writing first. action: - author(name, credentials?, sameAs?): The byline: name, credentials, up to 6 https profiles (sameAs). - remove_author: Pages fall back to the brand's byline. - voice(text): How every page sounds, in a few sentences. - key_facts(keyFacts): The facts every page may state: prices, features, who it's for. - rules(add?, replace?): The do's and don'ts: add one line, or replace them all. - images(enabled?, style?, customInstructions?, titleCard?, bodyImages?, screenshots?, brandColor?, font?): The image style for Sightkick's own pages: fields left out stay.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| add | string | – | – |
| bodyImages | string | – | – |
| brandColor | string | – | – |
| credentials | string | – | – |
| customInstructions | string | – | – |
| enabled | boolean | – | – |
| font | string | – | – |
| keyFacts | string | – | – |
| name | string | – | – |
| replace | string | – | – |
| sameAs | array | – | – |
| screenshots | boolean | – | – |
| style | string | – | – |
| text | string | – | – |
| titleCard | boolean | – | – |
No output schema declared.
No examples provided.
How do I install the Sightkick MCP server?
Sightkick is a hosted endpoint at https://app.sightkick.so/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.
remote · app.sightkick.so
claude mcp add --transport http so-sightkick-mcp 'https://app.sightkick.so/mcp'
What is the Sightkick MCP server?
Sightkick is an MCP server listed in the public MCP registry as so.sightkick/mcp. The agentic SEO and GEO platform your AI agent uses to rank on Google and in AI search. This page covers its hosted endpoint (https://app.sightkick.so/mcp).
Is the Sightkick MCP server safe to use?
Sightkick scores 72 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 Sightkick MCP server expose?
Sightkick exposes 37 tools: get_workspace, get_guidance, get_activity, get_visibility, get_prompts, and 32 more. Their descriptions and schemas cost roughly 11,937 tokens of context every time the server is loaded.
Does the Sightkick MCP server require authentication?
Yes. Sightkick 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 Sightkick MCP server still maintained?
Sightkick is still listed as active in the MCP registry. We last reached this channel on 4 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.