{"serverId":"mcp-registry/io.github.amaurydvl/serpmantics","tools":[{"name":"create_citation_check","fixed":{"name":"create_citation_check","description":"Test whether ChatGPT, Perplexity and Google AI Overview cite a website for one question (free tool)\n\nAsks one question to three AI answer engines (ChatGPT with web search, Perplexity, Google AI\nOverview) in the chosen market, and reports for each engine whether your domain is cited as a\nsource (`cited`, a citation on your registrable domain or one of its subdomains), whether your\nbrand is named in the answer (`mentioned`, which is NOT a citation), which of your pages are cited,\nan excerpt of the","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["domain","question","market"],"properties":{"domain":{"type":"string","description":"Domain to look for in the answers, or any URL of the site. Reduced to the registrable domain."},"market":{"enum":["fr-FR","en-US","es-ES","de-DE","it-IT"],"type":"string","description":"Language and country in which the engines are asked."},"question":{"type":"string","description":"The question a prospect would ask an AI assistant, 10 to 200 characters once spaces are collapsed."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_citation_check"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":312,"tokensAfter":312},{"name":"create_editorial_velocity","fixed":{"name":"create_editorial_velocity","description":"Measure how many articles a website publishes per month and per week (free tool)\n\nReads the sitemap of one website and the date shown on each of its pages, then counts the\narticles published over the last 12 full months (UTC), per month, per section, per language,\nand how many articles were updated. Works with any CMS.\n\n**What is counted.** Only pages typed as an article (JSON-LD Article, BlogPosting, NewsArticle and\nsimilar types, or an `article:published_time` meta tag), dated by the publicati","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["domain"],"properties":{"paid":{"type":"boolean","description":"Accounts only. True to pay 20 tokens for this analysis when the free analyses of the day are used up. Send it only after the user agreed to the price (see details.paidOption of the 429). Ignored while free analyses are left: a free one is used and nothing is charged.\n"},"domain":{"type":"string","description":"Host name of the website, or any URL of it. Reduced to its host, subdomain kept, www removed."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_editorial_velocity"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":314,"tokensAfter":314},{"name":"create_editorial_velocity_comparison","fixed":{"name":"create_editorial_velocity_comparison","description":"Compare the editorial velocity of competitors, paid in tokens (account only)\n\nMeasures how many articles each site publishes per month, for a list of sites or for the sites ranking\nin the Google top 10 of a keyword, then returns the median of the competitors and a recommendation for\nyour own site. Each site is an editorial velocity analysis (same engine as createEditorialVelocity).\n\n**Paid, ONLY WITH THE USER'S EXPLICIT AGREEMENT.** 20 tokens per site analysed. With `sites`, the price is\n20 toke","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lang":{"type":"string","description":"Market of the keyword, a code such as fr-fr, en-us, en-gb, de-de, es-es, it-it."},"sites":{"type":"array","items":{"type":"string"},"description":"Host names or URLs of the sites to compare. Reduced to their host, subdomain kept, www removed, duplicates removed. 2 to 11 distinct sites, ownSite included. Do not send with keyword.\n"},"keyword":{"type":"string","description":"A search query. The distinct sites of its Google organic top 10 are compared. Requires lang. Do not send with sites.\n"},"ownSite":{"type":"string","description":"Optional. Host name or URL of your own site. Analysed and shown apart, never part of the median. With keyword, it adds one place to the maximum charged.\n"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_editorial_velocity_comparison"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":391,"tokensAfter":391},{"name":"create_eeat","fixed":{"name":"create_eeat","description":"Start an E-E-A-T analysis on a guide content\n\nStarts an asynchronous E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) analysis\non the HTML content provided for a given guide. The analysis runs in the background — use\nGET /api/v1/eeat to poll for results until `status` is `done` (or `failed`).\n\n**Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).\n","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId","html_content"],"properties":{"guideId":{"type":"string","description":"ID of the guide to analyze"},"html_content":{"type":"string","description":"HTML of the article to analyze (without `<mark>` tags)"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_eeat"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":212,"tokensAfter":212},{"name":"create_eeat_competitors","fixed":{"name":"create_eeat_competitors","description":"Start an E-E-A-T analysis on a guide's top SERP competitors\n\nStarts an asynchronous E-E-A-T analysis on the top competitors of the guide's SERP.\nEach competitor is fetched and scored individually. Use GET /api/v1/eeat-competitors to\npoll for results until `pending` reaches `0`.\n\n**Token cost:** This endpoint charges `eeatCompetitorsTokensCostPerCompetitor`\n(see /api/v1/tokens-usage) per competitor analyzed, up to 10 competitors.\nExample: 10 competitors × 5 tokens = 50 tokens. 6 competitors × 5 t","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide whose competitors should be analyzed"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_eeat_competitors"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":217,"tokensAfter":217},{"name":"create_guides","fixed":{"name":"create_guides","description":"Create new guides\n\nCreate one or more new guides based on provided queries.\nEach guide targets exactly ONE engine and ONE analysis mode, chosen with the optional `source` field (default `google`).\n\nHow to request each guide type:\n1. Google SERP guide (1 credit per guide): omit `source`, or pass `source: \"google\"`.\n   Example payload: {\"queries\": [\"best crm\"], \"lang\": \"en-us\"}\n1bis. Google AI Overview guide (1 credit per guide). Two modes, like AI engines:\n   `source: \"google_ai_overview\"` builds","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["queries","lang"],"properties":{"lang":{"type":"string","description":"Language code for the guides"},"source":{"enum":["google","google_ai_overview","google_ai_overview_citations","chatgpt","chatgpt_citations","perplexity","perplexity_citations","claude","claude_citations","gemini","gemini_citations","grok","grok_citations","mistral","mistral_citations","deepseek","deepseek_citations"],"type":"string","description":"Target engine AND analysis mode the guide optimizes for. One guide = one source. `google` analyzes the Google SERP (1 credit per guide). Google's AI answers have the same two modes as AI engines : `google_ai_overview` analyzes the TEXT of the AI answers (AI Overview, completed with AI Mode) ; `google_ai_overview_citations` analyzes the content of the web SOURCES those answers cite, the recommended mode for GEO. 1 credit per guide in both modes, same language/country parameters as `google`. For AI engines (chatgpt, perplexity, claude, gemini, grok, mistral, deepseek), pick the mode: `<engine>` analyzes the AI's generated ANSWER for the query; `<engine>_citations` analyzes the content of the web SOURCES the AI cites, which is the recommended mode for GEO (become one of the cited sources). Both AI modes cost 4 credits per guide. Omit for the default `google`."},"queries":{"type":"array","items":{"type":"string"},"description":"Array of queries to create guides for"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_guides"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":572,"tokensAfter":572},{"name":"create_intent","fixed":{"name":"create_intent","description":"Generate search intent analysis for a guide\n\nAnalyzes search intent for a guide and optionally analyzes provided content against that intent. \n**Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).\n","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"content":{"type":"string","description":"Optional content to analyze against the intent (only after intent analysis was created)"},"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_intent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":165,"tokensAfter":165},{"name":"create_internal_links","fixed":{"name":"create_internal_links","description":"Generate internal linking suggestions for a guide\n\nAnalyzes a guide and generates internal linking suggestions based on content analysis. \n**Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).\n","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_internal_links"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"create_meta","fixed":{"name":"create_meta","description":"Generate SEO meta titles and descriptions for a guide\n\nGenerates optimized meta titles and descriptions based on guide content analysis.\n**Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).\n","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_meta"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":126,"tokensAfter":126},{"name":"create_outline","fixed":{"name":"create_outline","description":"Generate content outline for a guide\n\nGenerates a content outline based on SERP analysis for a guide.\n**Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).\n","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_outline"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"create_persona_brief","fixed":{"name":"create_persona_brief","description":"Generate an AI persona and brand voice brief from the pages of a website (free tool)\n\nReads public pages of a website and produces an editorial persona and writing style brief:\nwho writes, for whom, tone on 6 axes, vocabulary, structure, do and don't lists, verified\nquotes from the pages, style metrics measured on the text, and a ready-to-paste writing\nprompt for any AI writing tool (`brief.writingPrompt`, plus `brief.writingPromptCompact`\nof at most 1500 characters).\n\n**Asynchronous, poll the r","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["urls"],"properties":{"urls":{"type":"array","items":{"type":"string"},"description":"Public http(s) URLs of representative pages of one website, 5 to 10 articles give the best brief. At most 10 URLs, whatever the tier, each of at most 2048 characters."},"force":{"type":"boolean","description":"True to compute a new brief even when an identical one exists, which answers 202 and consumes quota. Any value that is not a boolean returns 400 INVALID_BODY."},"brandName":{"type":"string","description":"Optional brand name, on a single line, used in the brief."},"outputLanguage":{"enum":["fr","en","es","de","it"],"type":"string","description":"Language in which the brief is written. When omitted, the service chooses it."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_persona_brief"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":383,"tokensAfter":383},{"name":"create_score","fixed":{"name":"create_score","description":"Analyze content optimization score\n\nAnalyzes the optimization score of the provided content for a specific guide\n\nMCP channel defaults: this tool sends scoreProgressive=false, includeEmbedding=false when you leave them out. That is specific to this channel and overrides the default documented on those parameters, which describes the REST API. What it changes in the response: with scoreProgressive=false, contentAnalysis.progressiveScores comes back empty ({}); with includeEmbedding=false, content","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId","content"],"properties":{"content":{"type":"string","description":"Content to analyze"},"guideId":{"type":"string","description":"ID of the guide to analyze"},"pageUrl":{"type":"string","description":"Optional. Read only for a visitor of a guide shared in read-only mode: the URL of one of the guide's SERP pages, whose stored content is then analysed instead of the guide's text. Ignored for the owner and for a guide shared in edit mode. Unknown URL: the guide's text is analysed.\n"},"saveToGuide":{"type":"boolean","description":"Whether to save the content and the analysis score back to the guide (default: true)\n"},"includeEmbedding":{"type":"boolean","description":"Whether to compute the semantic embedding analysis, i.e. proximity and PCA (default: true). When false, the embeddingAnalysis key is omitted from the response. Null is treated as \"not provided\", so the default applies.\n"},"scoreProgressive":{"type":"boolean","description":"Whether to compute the progressive score build-up curve (default: true). When false, progressiveScores is returned empty. Null is treated as \"not provided\", so the default applies.\n"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"create_score"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":498,"tokensAfter":498},{"name":"delete_guide","fixed":{"name":"delete_guide","description":"Delete a guide\n\nDeletes a specific guide. Deliberately NOT blocked by the 180-day expiry: an expired guide can no longer be read, but it can always be deleted, so that you can still clean up your account.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the guide to delete"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"delete_guide"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"delete_guides","fixed":{"name":"delete_guides","description":"Delete multiple guides\n\nDeletes multiple guides at once","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"delete_guides"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":55,"tokensAfter":55},{"name":"delete_intent","fixed":{"name":"delete_intent","description":"Delete generated intent analysis for a guide\n\nRemoves previously generated intent analysis for the given guide.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"delete_intent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"delete_internal_links","fixed":{"name":"delete_internal_links","description":"Delete generated internal-links suggestions for a guide\n\nRemoves previously generated internal-links suggestions for the given guide.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"delete_internal_links"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"delete_meta","fixed":{"name":"delete_meta","description":"Delete generated meta for a guide\n\nRemoves previously generated meta titles/descriptions for the given guide.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"delete_meta"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":93,"tokensAfter":93},{"name":"delete_outline","fixed":{"name":"delete_outline","description":"Delete generated outline for a guide\n\nRemoves previously generated outline data for the given guide.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"delete_outline"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":91,"tokensAfter":91},{"name":"get_aissistant_tokens","fixed":{"name":"get_aissistant_tokens","description":"Get the current user's available AI tokens\n\nReturns the number of AI tokens available to the authenticated user.\n\nThese tokens fund EVERY AI feature in SERPmantics — meta, outline,\nintent, internal-links, EEAT, EEAT competitors, score, AND the\nAISSistant prompts. The endpoint lives under /aissistant for\nhistorical reasons but the balance is shared across all AI features.\n\nDo NOT confuse with guide-creation credits (see /api/v1/credits).\nFor a combined view (credits + tokens) prefer /api/v1/credi","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"get_aissistant_tokens"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":184,"tokensAfter":184},{"name":"get_citation_check","fixed":{"name":"get_citation_check","description":"Read an AI citation test, poll until it is done\n\nReturns the test started by `POST /api/v1/tools/citation-check`. While `status` is `pending` or\n`running`, call again every 3 seconds: each engine fills in as soon as it has answered. When\n`status` is `done`, at least one engine answered; `summary.citedBy` engines cite your domain out\nof `summary.enginesAnswered` engines that answered. When `status` is `failed`, `failureCode` says\nwhy (NO_ENGINE_ANSWERED, TIMEOUT, INTERNAL).\n\nPer engine: `cited` i","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["checkId"],"properties":{"checkId":{"type":"string","description":"The checkId returned by the creation call (22 characters)."}}},"annotations":{"readOnlyHint":true},"title":"get_citation_check"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":217,"tokensAfter":217},{"name":"get_credit_ledger","fixed":{"name":"get_credit_ledger","description":"Grand-livre crédits d'un compte (admin)\n\nTimeline complète et immuable des mouvements de crédits d'un utilisateur (octrois, consommations, refunds, resets, ajustements admin), avec libellés FR en clair, delta signé, solde après, source, auteur et référence. Inclut le solde reconstruit à une date arbitraire (paramètre `at`) et un contrôle de cohérence (solde == dernier balanceAfter == somme des deltas). Réservé aux administrateurs. Lecture seule.\n","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["userId"],"properties":{"at":{"type":"string","description":"Date ISO pour reconstruire le solde à cet instant (point-in-time)."},"limit":{"type":"number","description":"Nombre maximum de lignes (défaut 200, max 1000)."},"userId":{"type":"string","description":"Identifiant Mongo de l'utilisateur."}}},"annotations":{"readOnlyHint":true},"title":"get_credit_ledger"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":249,"tokensAfter":249},{"name":"get_credits","fixed":{"name":"get_credits","description":"Get user balance (guide credits + AI tokens)\n\nReturns the authenticated user's full balance.\n\nSERPmantics has TWO distinct currencies:\n\n- **credits** (`credits`): how many NEW GUIDES the user can still create.\n  Consumed once per guide creation. `\"unlimited\"` if the user's plan\n  grants unlimited guide creation (`hasUnlimitedCredits: true`).\n\n- **AI tokens** (`tokens`): pool consumed by every AI feature (meta,\n  outline, intent, internal-links, EEAT, EEAT competitors…).\n  Each feature has its ow","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"get_credits"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":182,"tokensAfter":182},{"name":"get_editorial_velocity","fixed":{"name":"get_editorial_velocity","description":"Read an editorial velocity analysis, poll until it is done\n\nReturns the analysis started by `POST /api/v1/tools/editorial-velocity`. While `status` is `pending` or\n`running`, call again every 5 seconds; `progress` gives the current stage (robots, sitemap, pages,\nsummary) and `pagesRead` out of `pagesTotal`. When `status` is `failed`, `failureCode` says why\n(BLOCKED, the site refuses to be read; NO_SITEMAP; NO_DATES, pages read but none dated; UNREACHABLE;\nTIMEOUT; INTERNAL) and `publications` is","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["analysisId"],"properties":{"analysisId":{"type":"string","description":"The analysisId returned by the creation call (22 characters)."}}},"annotations":{"readOnlyHint":true},"title":"get_editorial_velocity"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":220,"tokensAfter":220},{"name":"get_editorial_velocity_comparison","fixed":{"name":"get_editorial_velocity_comparison","description":"Read a comparison of editorial velocities, poll until it is done\n\nReturns the comparison started by `POST /api/v1/tools/editorial-velocity/comparisons`. While `status` is\n`pending` or `running`, call again every 15 seconds. Each site has its own `state` (queued, running, done,\nfailed); its numbers are null until it is done, never zero by default. `analysisId` links to the full\nanalysis of the site (GET /api/v1/tools/editorial-velocity?analysisId=...).\n\n`summary.median` and `summary.max` are comp","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["comparisonId"],"properties":{"comparisonId":{"type":"string","description":"The comparisonId returned by the creation call (22 characters)."}}},"annotations":{"readOnlyHint":true},"title":"get_editorial_velocity_comparison"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":225,"tokensAfter":225},{"name":"get_eeat","fixed":{"name":"get_eeat","description":"Get E-E-A-T analysis results\n\nRetrieves the result of an E-E-A-T analysis.\n\n`guideId` is **always required**: access is granted on the guide, so a request without it\nis answered with `404 Guide not found`. `eeatId` is an optional filter on top of it: pass it\nto fetch one specific analysis of that guide, omit it to fetch the latest one.\nAn `eeatId` that does not belong to `guideId` is answered with `404`, never with the\nother account's data.\n\nPoll this endpoint until `status` is `done` (results a","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"eeatId":{"type":"string","description":"Optional filter, ID of one specific analysis of that guide (returned by POST /api/v1/eeat). Omit it to get the latest analysis of `guideId`."},"guideId":{"type":"string","description":"ID of the guide the analysis belongs to. Required, and access is checked on it."}}},"annotations":{"readOnlyHint":true},"title":"get_eeat"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":272,"tokensAfter":272},{"name":"get_eeat_competitors","fixed":{"name":"get_eeat_competitors","description":"Get E-E-A-T analysis results for a guide's competitors\n\nRetrieves the E-E-A-T analysis results for the top competitors of a guide.\nPoll this endpoint until `pending` is `0` to know when the full analysis is complete.\nIndividual competitor results are available as soon as their `status` is `done`.\n","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide whose competitors should be returned"}}},"annotations":{"readOnlyHint":true},"title":"get_eeat_competitors"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":159,"tokensAfter":159},{"name":"get_guide","fixed":{"name":"get_guide","description":"Get data for a specific guide\n\nRetrieves details of a specific guide. While the guide is being created, the endpoint returns 202 (poll again later). If the creation failed permanently (explicit terminal flag, or a failure older than 15 minutes with no retry left, see progressStatus.terminalInferred), it returns 200 with success=false, status=failed, a human-readable French error message, creationFailed=true, refunded (whether the consumed credits were automatically given back) and guide.progress","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the guide to retrieve"}}},"annotations":{"readOnlyHint":true},"title":"get_guide"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":202,"tokensAfter":202},{"name":"get_guides","fixed":{"name":"get_guides","description":"List user's guides\n\nReturns a list of guides for the authenticated user.\n\nUse `query` to check whether a guide already exists before creating one\n(creating a duplicate costs credits). Beware of two behaviours of this endpoint:\n- `query` and `group` are case-insensitive REGULAR EXPRESSIONS, not exact matches:\n  special characters in the value are interpreted as regex syntax, and an invalid\n  regex returns no result at all. (`status` is different: a known status is matched\n  exactly, any other val","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"description":"Page number for pagination","type":"string"},"group":{"type":"string","description":"Filter on the guide group. Case-insensitive partial match, interpreted as a regular expression."},"query":{"type":"string","description":"Filter on the guide query. Case-insensitive partial match, interpreted as a regular expression (see the endpoint description)."},"status":{"enum":["draft","active","review","published","archived"],"type":"string","description":"Filter on the guide status. Exact match when the value is one of the known statuses, otherwise a case-insensitive regular expression."},"pageSize":{"description":"Number of guides per page","type":"string"}}},"annotations":{"readOnlyHint":true},"title":"get_guides"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: page, pageSize. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":360,"tokensAfter":369},{"name":"get_intent","fixed":{"name":"get_intent","description":"Get search intent analysis for a guide\n\nRetrieves existing intent analysis results for a guide","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":true},"title":"get_intent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":88,"tokensAfter":88},{"name":"get_internal_links","fixed":{"name":"get_internal_links","description":"Get internal linking suggestions for a guide\n\nRetrieves existing internal linking suggestions for a guide","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":true},"title":"get_internal_links"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"get_meta","fixed":{"name":"get_meta","description":"Get generated meta titles and descriptions for a guide\n\nRetrieves generated SEO meta titles and descriptions for a guide","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":true},"title":"get_meta"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"get_outline","fixed":{"name":"get_outline","description":"Get generated page structure for a guide\n\nRetrieves the generated page structure (flat heading list) for a guide.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["guideId"],"properties":{"guideId":{"type":"string","description":"ID of the guide"}}},"annotations":{"readOnlyHint":true},"title":"get_outline"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"get_persona_brief","fixed":{"name":"get_persona_brief","description":"Read an AI persona and brand voice brief, poll until it is done\n\nReturns the brief started by `POST /api/v1/tools/persona-brief`. While `status` is `pending`,\n`fetching`, `analyzing` or `synthesizing`, call again every 3 seconds: `progress` and `pages`\nshow what has been read so far. When `status` is `done`, `brief` holds the structured brief,\n`brief.writingPrompt` the ready-to-paste prompt and `markdown` the full document. When `status`\nis `failed`, `failureReason` says why (NO_USABLE_PAGE, LLM","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["briefId"],"properties":{"briefId":{"type":"string","description":"The briefId returned by the creation call (22 characters)."}}},"annotations":{"readOnlyHint":true},"title":"get_persona_brief"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":216,"tokensAfter":216},{"name":"get_tokens_usage","fixed":{"name":"get_tokens_usage","description":"Get API token usage costs for different endpoints\n\nReturns the number of tokens required for each API endpoint operation.\n\nNote: `eeatCompetitorsTokensCostPerCompetitor` is a **per-competitor** cost.\nThe total cost of POST /api/v1/eeat-competitors equals this value × the number of\ncompetitors analyzed (deduplicated URLs in the guide's top-10 SERP, capped at 10).\n","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"get_tokens_usage"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"get_usage","fixed":{"name":"get_usage","description":"Get current API usage and quota status\n\nReturns the current period's API guide usage (guides created through the API or MCP), quota limit, remaining count and the renewal date. Aligned on the Stripe subscription billing cycle, or on the calendar month (UTC) for a Conqueror account without a subscription. Does not consume credits. `enforced` tells whether the quota is enforced on the current window: when `true`, a guide creation through the API or MCP that would exceed the limit is refused with H","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"get_usage"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":178,"tokensAfter":178},{"name":"update_guide","fixed":{"name":"update_guide","description":"Update a guide\n\nUpdates editable fields of a specific guide (group, status, share state, linked URL, meta, hidden expressions). Only owners may update.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the guide to update"},"meta":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}},"description":"SEO meta override for the guide","additionalProperties":{}},"group":{"type":"string","description":"Group/folder the guide belongs to (triggers cannibalisation analysis on previous and new group)"},"status":{"enum":["","draft","active","review","published","archived"],"type":"string","description":"Editorial status of the guide. Empty string clears the status."},"linkedUrl":{"type":"string","description":"Public URL where the guide content is published (validated as URL)"},"shareState":{"enum":["private","shared-read","shared-edit"],"type":"string","description":"Sharing mode. Any value outside the enum is rejected with 400 (the check is case-sensitive). Plan must allow shared-read or shared-edit, otherwise 403 is returned."},"hiddenExpressions":{"type":"array","items":{"type":"string"},"description":"Expressions to hide from the optimisation suggestions"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"update_guide"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":378,"tokensAfter":378}],"toolsChanged":36,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}