{"id":265948,"recorded_at":"2026-10-26T17:17:10.898896Z","observed_at":"2026-10-26T17:17:10.898734Z","subject_kind":"endpoint","subject":"79178d1c-9f0d-4b90-b8d9-2a1e4cf6beee","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":41,"tools":[{"description":"Mark an issue thread as an intentional choice (write scope — ask the user first): it stops counting against the score and stays marked across scans. Typical uses: noindex on pagination, a deliberately short page, a redirect that must stay. Undo with unacknowledge_issue.","inputSchema":{"additionalProperties":false,"properties":{"issue_id":{"description":"Issue id from list_issues / get_issue.","type":"string"},"project_id":{"description":"Project id or slug.","type":"string"},"reason":{"description":"Why it is intentional (shown in the dashboard).","type":"string"}},"required":["issue_id"],"type":"object"},"name":"acknowledge_issue"},{"description":"Run Seonix's deterministic SEO + readability + AI-answer (AEO) scoring on ANY draft you pass (title + HTML + meta + keyphrase). No AI credits are spent. Use it as a linter: fix the problems it lists, re-run until the score is ≥ 80, then publish.","inputSchema":{"additionalProperties":false,"properties":{"content_type":{"description":"post (default) | page.","type":"string"},"featured_image_alt":{"type":"string"},"focus_keyphrase":{"type":"string"},"has_featured_image":{"type":"boolean"},"html":{"description":"Body HTML of the draft.","type":"string"},"language":{"description":"Expected language code (default: project language).","type":"string"},"meta_description":{"type":"string"},"project_id":{"description":"Project id or slug (used for language/domain context).","type":"string"},"slug":{"type":"string"},"title":{"description":"The page/article title (H1).","type":"string"}},"required":["title","html"],"type":"object"},"name":"analyze_seo"},{"description":"Have Seonix apply fixes on the live site through the WordPress plugin (write scope — tell the user exactly which issue codes and get a yes first). Works for get_fix_plan items with fix_tier auto or ai_assist (wp_plugin_fixable); the site must have a connected WordPress channel. Starts a run (preview → Seonix suggestions → apply) and returns its id; poll get_fix_run until status is completed, partial or failed. Undo with rollback_fix.","inputSchema":{"additionalProperties":false,"properties":{"issue_codes":{"description":"Comma-separated issue codes from get_fix_plan whose fix_tier is auto or ai_assist (wp_plugin_fixable). Seonix fixes them on the live WordPress site through its plugin.","type":"string"},"issue_ids":{"description":"Optional comma-separated scan issue ids (from list_issues evidence) to restrict the run to specific pages.","type":"string"},"project_id":{"description":"Project id or slug.","type":"string"}},"required":["issue_codes"],"type":"object"},"name":"apply_fix"},{"description":"The Seonix account behind this API key: email, every project with its plan, whether the MCP is available for it (paid plans only), AI/publish permissions and this month's article quota. Call this first.","inputSchema":{"additionalProperties":false,"type":"object"},"name":"get_account"},{"description":"The latest AI Visibility snapshot: how often the brand appears in ChatGPT answers for the project's prompts, which competitors are mentioned, top cited sources. Measurement covers ChatGPT only.","inputSchema":{"additionalProperties":false,"properties":{"include_answers":{"description":"Include the answer excerpt and cited sources per prompt (default false).","type":"boolean"},"project_id":{"description":"Project id or slug.","type":"string"}},"type":"object"},"name":"get_ai_visibility"},{"description":"One article with SEO title, meta description, excerpt, key takeaways, the stored SEO analysis, publications (where it is live) and optionally the full HTML.","inputSchema":{"additionalProperties":false,"properties":{"article_id":{"description":"Article id from list_articles.","type":"string"},"include_full_analysis":{"description":"Return every stored check, not just the failing ones (default false).","type":"boolean"},"include_html":{"description":"Include the full HTML body (can be large).","type":"boolean"},"project_id":{"description":"Project id or slug.","type":"string"}},"required":["article_id"],"type":"object"},"name":"get_article"},{"description":"The Seonix skill for connecting a custom-built site or blog as a publishing channel (endpoints, payload, read routes, media, self-test, hand-over). Same text as https://seonix.ai/SKILL.md. Pass section to get one step.","inputSchema":{"additionalProperties":false,"properties":{"section":{"description":"Optional: a step heading substring to return only that part (e.g. 'Step 3' or 'self-test').","type":"string"}},"type":"object"},"name":"get_blog_integration_guide"},{"description":"Calendar slots for a month: planned / writing / completed / failed, kind create or optimize, source manual or autopilot, linked article ids.","inputSchema":{"additionalProperties":false,"properties":{"month":{"description":"YYYY-MM (default: current month).","type":"string"},"project_id":{"description":"Project id or slug.","type":"string"}},"type":"object"},"name":"get_calendar"},{"description":"One cluster with its member keywords, the site pages already covering it, the live SERP snapshot status and the competitor insights Seonix extracted (must-mention entities, recommended blocks, topical coverage, gaps).","inputSchema":{"additionalProperties":false,"properties":{"cluster_id":{"description":"Cluster id from list_clusters.","type":"string"},"project_id":{"description":"Project id or slug.","type":"string"}},"required":["cluster_id"],"type":"object"},"name":"get_cluster"},{"description":"An ordered, implementable plan for every open problem: what to change, where (page / site-wide / theme), on which URLs, with the target example. Returned as structured items; pass include_markdown=true to also get a Markdown checklist in the `[HIGH] Title — Location / Issue / Fix` format. Pages with limit/offset. Items with wp_plugin_fixable / fix_tier auto or ai_assist can be applied by Seonix itself through apply_fix (WordPress). After applying fixes, call start_scan (with the user's yes) and get_site_health again to confirm what cleared.","inputSchema":{"additionalProperties":false,"properties":{"category":{"description":"Only one pillar: seo | ai | speed | technical.","type":"string"},"codes":{"description":"Comma-separated issue codes to include (default: every open problem).","type":"string"},"include_markdown":{"description":"Also return the plan as a Markdown checklist (doubles the size; default false).","type":"boolean"},"limit":{"description":"Same as max_items (accepted so every list tool pages with limit/offset).","type":"integer"},"max_items":{"description":"Problems to include, highest priority first (default 10, max 50). Use codes/category or offset to see the rest.","type":"integer"},"max_pages":{"description":"URLs listed per problem (default 3, max 50); the rest are reachable via list_issues code=…","type":"integer"},"offset":{"description":"Skip this many problems (for paging through a long plan).","type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"},"verbose":{"description":"Add why-it-matters, step-by-step instructions and warnings to every item (default false).","type":"boolean"}},"type":"object"},"name":"get_fix_plan"},{"description":"Status and outcome of an apply_fix run: counts (applied / already correct / no-op / errors) and the per-item results with the before and after values.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug.","type":"string"},"run_id":{"description":"Run id returned by apply_fix.","type":"string"}},"required":["run_id"],"type":"object"},"name":"get_fix_run"},{"description":"One issue with the evidence the scanner captured on the page (the offending tag, heading outline, redirect chain, JSON-LD block…) and the remediation profile: why it matters, bad vs good example, how-to-fix steps, whether Seonix can fix it through the WordPress plugin.","inputSchema":{"additionalProperties":false,"properties":{"issue_id":{"description":"Issue id from list_issues.","type":"string"},"project_id":{"description":"Project id or slug.","type":"string"}},"required":["issue_id"],"type":"object"},"name":"get_issue"},{"description":"Plan and entitlements for one project: whether the MCP is available, AI generation and publishing permissions, article quota used/limit, and the upgrade link when the project is on Free.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug. Optional when the account has one project or the connector URL names it.","type":"string"}},"type":"object"},"name":"get_plan_status"},{"description":"Read one Seonix playbook by name (same text as the prompt of that name) — for clients that do not surface MCP prompts.","inputSchema":{"additionalProperties":false,"properties":{"name":{"description":"Playbook name from list_playbooks.","type":"string"}},"required":["name"],"type":"object"},"name":"get_playbook"},{"description":"One project: site URL, language, autopilot mode and cadence, Search Console connection, publishing channels, plan and quota, SEO progress level, dashboard links. Paid plans only.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug. Optional when the account has one project or the connector URL names it.","type":"string"}},"type":"object"},"name":"get_project"},{"description":"The Seonix remediation profile for an issue code (no project needed): why it matters, bad/good example, fix steps, fix tier, warnings. Use when you meet an unfamiliar code.","inputSchema":{"additionalProperties":false,"properties":{"code":{"description":"Issue code, e.g. meta_description_missing.","type":"string"}},"required":["code"],"type":"object"},"name":"get_remediation_profile"},{"description":"Proof-of-ranking ledger: for each published article, Search Console clicks / impressions / position now vs the previous period, with trend. Requires Search Console.","inputSchema":{"additionalProperties":false,"properties":{"limit":{"description":"Articles per page (default 30, max 100).","type":"integer"},"offset":{"description":"Skip this many articles.","type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"}},"type":"object"},"name":"get_results"},{"description":"Progress of one scan: stage, pages found / scanned, counts, whether background probes are still pending. Poll every 5–10 seconds while status is not completed.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug.","type":"string"},"scan_id":{"description":"Scan id from list_scans.","type":"string"}},"required":["scan_id"],"type":"object"},"name":"get_scan_status"},{"description":"The project's SEO Progress ladder: current level and stage, what the next level requires (published articles, quality, Search Console, cluster coverage) and the publishing cadence Seonix recommends for this level.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug. Optional when the account has one project or the connector URL names it.","type":"string"}},"type":"object"},"name":"get_seo_progress"},{"description":"The project's brand profile Seonix extracted and the owner refined: what the business does, audience, tone, language, writing instructions — plus the ready-to-use prompt block. Read it before writing or rewriting anything for the site.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug. Optional when the account has one project or the connector URL names it.","type":"string"}},"type":"object"},"name":"get_site_dna"},{"description":"Site Health for a project: overall score, the four pillars (SEO, AI search, speed, technical), counts of active / fixed / came-back problems, the top open problems by priority, the last scan and the next scheduled check. Start here for any \"what's wrong with my site\" question.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug (optional for single-project accounts).","type":"string"},"top_tasks":{"description":"How many open problems to include, ordered by priority (default 10, max 50).","type":"integer"}},"type":"object"},"name":"get_site_health"},{"description":"Indexing coverage Seonix collected from Search Console: indexed / not indexed / unknown counts, sitemap status, and the pages that are not indexed with Google's verdict.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug. Optional when the account has one project or the connector URL names it.","type":"string"}},"type":"object"},"name":"gsc_coverage"},{"description":"Seonix's own impact estimate: current vs potential traffic, keyword coverage, article impacts and top keyword opportunities.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug. Optional when the account has one project or the connector URL names it.","type":"string"}},"type":"object"},"name":"gsc_impact"},{"description":"Keywords already ranking in a position band (default 4–20) with impressions, ordered by the traffic Seonix estimates they would bring at the target position. The classic striking-distance list: refresh those pages first.","inputSchema":{"additionalProperties":false,"properties":{"days":{"description":"Window length (default 28, 7–90).","type":"integer"},"limit":{"description":"Rows to return (default 30, max 200).","type":"integer"},"max_position":{"description":"Upper bound of the position band (default 20).","type":"number"},"min_position":{"description":"Lower bound of the position band (default 4).","type":"number"},"project_id":{"description":"Project id or slug.","type":"string"}},"type":"object"},"name":"gsc_opportunities"},{"description":"The queries one page ranks for (Search Console page+query report filtered to that URL). Use it before rewriting a page's title, meta description or headings.","inputSchema":{"additionalProperties":false,"properties":{"days":{"description":"Window length (default 28, 7–90).","type":"integer"},"limit":{"description":"Rows to return (default 25, max 200).","type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"},"url":{"description":"Exact page URL as Search Console reports it.","type":"string"}},"required":["url"],"type":"object"},"name":"gsc_page_queries"},{"description":"Whether Google Search Console is connected for the project, which property, and the last date with published data. Call before other gsc_* tools.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug. Optional when the account has one project or the connector URL names it.","type":"string"}},"type":"object"},"name":"gsc_status"},{"description":"Daily clicks, impressions, average position and potential traffic for the last N days (7–90), plus the previous-period average position for comparison.","inputSchema":{"additionalProperties":false,"properties":{"days":{"description":"Window length ending on the last day Search Console has published (default 28, 7–90).","type":"integer"},"limit":{"description":"Rows to return (default 25, max 200).","type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"}},"type":"object"},"name":"gsc_timeseries"},{"description":"Top landing pages from Search Console for the window: clicks, impressions, CTR, average position.","inputSchema":{"additionalProperties":false,"properties":{"days":{"description":"Window length ending on the last day Search Console has published (default 28, 7–90).","type":"integer"},"limit":{"description":"Rows to return (default 25, max 200).","type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"}},"type":"object"},"name":"gsc_top_pages"},{"description":"Top search queries from Search Console for the window: clicks, impressions, CTR, average position.","inputSchema":{"additionalProperties":false,"properties":{"days":{"description":"Window length ending on the last day Search Console has published (default 28, 7–90).","type":"integer"},"limit":{"description":"Rows to return (default 25, max 200).","type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"}},"type":"object"},"name":"gsc_top_queries"},{"description":"Articles in the project (Seonix-generated and imported): status, scores, keyphrase, cluster, publish dates. Paginated.","inputSchema":{"additionalProperties":false,"properties":{"limit":{"description":"Same as per_page (accepted so every list tool pages with limit/offset).","type":"integer"},"offset":{"description":"Skip this many articles (converted to page/per_page).","type":"integer"},"page":{"description":"1-based page (default 1).","type":"integer"},"per_page":{"description":"Default 20, max 100.","type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"},"status":{"description":"Filter: draft | scheduled | published. With a filter the list is built from the light index (id, title, status, keyphrase) and paged after filtering.","type":"string"}},"type":"object"},"name":"list_articles"},{"description":"Connected publishing channels (WordPress, Ghost, Webflow, Shopify, Wix, Custom API) with status. A project needs a connected channel before anything can be published.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug. Optional when the account has one project or the connector URL names it.","type":"string"}},"type":"object"},"name":"list_channels"},{"description":"Topic clusters (one target page each) with primary keyword, intent, page type, priority, volume, Search Console impressions and winnability. The content plan is built from these.","inputSchema":{"additionalProperties":false,"properties":{"limit":{"description":"Page size (default 20, max 100).","type":"integer"},"offset":{"description":"Skip this many clusters.","type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"},"status":{"description":"draft | approved | brief_ready | content_created.","type":"string"}},"type":"object"},"name":"list_clusters"},{"description":"Persistent issue threads (one per problem per page) with status open / solved / regressed, filterable by code, URL and status. Paginated. Each item carries the issue id for get_issue.","inputSchema":{"additionalProperties":false,"properties":{"code":{"description":"Only this issue code, e.g. images_missing_alt.","type":"string"},"limit":{"description":"Page size (default 25, max 200).","type":"integer"},"offset":{"type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"},"status":{"description":"open | solved | regressed. Default: open and regressed (everything still broken).","type":"string"},"url":{"description":"Only issues on this page URL.","type":"string"}},"type":"object"},"name":"list_issues"},{"description":"Keywords Seonix researched for the project (seed AI, planner, Search Console, autocomplete, user-added) with volume, competition, Search Console numbers and cluster membership. Paginated; filter by status and substring.","inputSchema":{"additionalProperties":false,"properties":{"limit":{"description":"Default 100, max 500.","type":"integer"},"offset":{"type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"},"query":{"description":"Substring filter on the keyword.","type":"string"},"status":{"description":"Comma-separated: pending, approved, rejected, filtered_out. Default: approved and pending.","type":"string"}},"type":"object"},"name":"list_keyword_candidates"},{"description":"The Seonix playbooks (step-by-step procedures that tell you which tools to call): promote a site, work through a page, fix issues in code, keyword map, internal links, write an article, striking distance, monthly report, connect a blog. Use get_playbook to read one.","inputSchema":{"additionalProperties":false,"type":"object"},"name":"list_playbooks"},{"description":"Projects (websites) in the account with id, slug, name and site URL. Use the id or slug as project_id in other tools.","inputSchema":{"additionalProperties":false,"type":"object"},"name":"list_projects"},{"description":"Recent site scans with status, pages scanned and severity counts.","inputSchema":{"additionalProperties":false,"properties":{"limit":{"description":"Default 10, max 50.","type":"integer"},"project_id":{"description":"Project id or slug.","type":"string"}},"type":"object"},"name":"list_scans"},{"description":"Reverse the changes an apply_fix run made on the live site, restoring the values the plugin snapshotted before applying (write scope — ask the user first).","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug.","type":"string"},"run_id":{"description":"Run id returned by apply_fix.","type":"string"}},"required":["run_id"],"type":"object"},"name":"rollback_fix"},{"description":"Re-run the SEO + readability scoring on an article already in Seonix (no changes saved) and list its problems.","inputSchema":{"additionalProperties":false,"properties":{"article_id":{"description":"Article id from list_articles.","type":"string"},"project_id":{"description":"Project id or slug.","type":"string"}},"required":["article_id"],"type":"object"},"name":"score_article"},{"description":"Start a fresh Site Health scan of the project's site (write scope — ask the user first). Returns the scan id; poll get_scan_status every 10 seconds until status is completed, then call get_site_health / get_fix_plan to see what cleared. One scan at a time per project; the plan's page budget applies.","inputSchema":{"additionalProperties":false,"properties":{"project_id":{"description":"Project id or slug.","type":"string"},"scope":{"description":"website (default: crawl the site) | sitemap (only sitemap URLs).","type":"string"}},"type":"object"},"name":"start_scan"},{"description":"Remove the intentional mark from an issue thread so it is scored and counted again (write scope).","inputSchema":{"additionalProperties":false,"properties":{"issue_id":{"description":"Issue id from list_issues / get_issue.","type":"string"},"project_id":{"description":"Project id or slug.","type":"string"},"reason":{"description":"Why it is intentional (shown in the dashboard).","type":"string"}},"required":["issue_id"],"type":"object"},"name":"unacknowledge_issue"}]},"body_sha256":"f413ddc9ccb33d06cd803b51f7b7b7f9681a26f8b7df1b9f10443e786c488b32","prev_id":null,"leaf":"0x20710d0eb8c0bcfac3367087f9765b9c36109941ad711e2a40b00038df03223b","leaf_text":"{\"body\":\"f413ddc9ccb33d06cd803b51f7b7b7f9681a26f8b7df1b9f10443e786c488b32\",\"id\":265948,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793035030898734,\"prev\":null,\"subject\":\"79178d1c-9f0d-4b90-b8d9-2a1e4cf6beee\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-26","leaves":296695,"root":"0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8","chained":"0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a","anchor_chain":"eip155:5042002","anchor_tx":"0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae","anchor_block":69251483},"proof":["0x20709fa55a89d4e57159db0c5563d5b2cc8af51fc9856f355eda4619eeb9fc9c","0xaaef1391caacbe9655e2ed561a1ec7f3287ad52bc08f42980af9684b4515f6b8","0x0130f5cf543f81232d4927344bc20fe8632ef2bd99c87f276fdb92169a03ed89","0x564b4570c2a5577d7cf8c9212c6f8c96d104d1595aa6cc17fb4d2f9547ee53c2","0x75e9ee3cba7371c0fb886396233c1570b32fb275884e1a6a8b38e1d8d82c8f06","0x26fc2194822497fb1181f476bfc2060e7ce80c0166bb066a41700b493d487f53","0x6b2c572c18bbf92242dcc95f689891d32dee217cc47766d1f6e51f1a5294bd03","0xe592bc768c99dd3c47541da15c6036e5f2af32a8d7a7b1479fa22f05fbd4ed7b","0x8c251767f8fb371a210d42fea0289330b8d746b5c7d851af02e626d7b48f3fb8","0x4be42e002361db392d6bc044d985a656aee097e347099c025de6e9dea367ae4e","0x057e71ed555693238850b77237df28dd2661cf85c88138365b7e42941201ad01","0xfde157310fc8513767b162378ca9ceefb2937c374b7381a8887f7ccba8ab5a80","0x9d75d4d3ab6219edefa04be60b32fdd56be7a7672f370a5115f02f7b098ecd27","0x9dfd312f3d4937f7cb144cee3987e8516f222932b4ea286605236d73cfa1ed16","0xc3a6a3ae44ec0da1848b16d40c45d7aac97a67352eea8df18e0f26edabea8a2f","0x06d71bfa7d8b41d62c8836efc2c601e1cc3772d9453596b2ae4950887f3310ca","0x8c756542e482157df0c36464d75c937b845e4423dbbcfad08f0cf8d5a16b9a13","0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d","0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a"]}