Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.AmauryDvl/serpmantics

REMOTE · APP.SERPMANTICS.COM · SCANNED SEP 20

French-first SEO: semantic content guides, scoring, E-E-A-T audits for Google, ChatGPT & Claude.

−2 this week 77 Trust /100
Trust breakdown (7 categories)

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 Security63
Transport & Reachability100
Schema Quality & AI Usability67
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5334 tokens (~172/item across 31 items; 31 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 Management98
  • Stability check failed: schema churn in the 30 days we've observed: 0 tool removals, 1 breaking changes, 0 auth/transport breaks, 3 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 6 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_intent" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 31 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
Install

How do I install the io.github.AmauryDvl/serpmantics MCP server?

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

remote · app.serpmantics.com

# add to Claude Code
claude mcp add --transport http amaurydvl-serpmantics 'https://app.serpmantics.com/api/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "amaurydvl-serpmantics": {
      "url": "https://app.serpmantics.com/api/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "amaurydvl-serpmantics": {
      "type": "http",
      "url": "https://app.serpmantics.com/api/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.amaurydvl-serpmantics]
url = "https://app.serpmantics.com/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "amaurydvl-serpmantics": {
      "type": "remote",
      "url": "https://app.serpmantics.com/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add amaurydvl-serpmantics --url 'https://app.serpmantics.com/api/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  amaurydvl-serpmantics:
    url: "https://app.serpmantics.com/api/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "amaurydvl-serpmantics": {
      "Transport": "http",
      "Url": "https://app.serpmantics.com/api/mcp"
    }
  }
}
# add to Vellum
assistant mcp add amaurydvl-serpmantics -t streamable-http -u 'https://app.serpmantics.com/api/mcp'
// mcp.json
{
  "mcpServers": {
    "amaurydvl-serpmantics": {
      "type": "http",
      "url": "https://app.serpmantics.com/api/mcp"
    }
  }
}

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

Changelog

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.

  • 20 Sept 26 −1
    • Tool “create_score” rewrote its description, which is the text the model reads security
  • 19 Sept 26 −1
    • Stability: pass → fail security
    • A breaking change shipped without a version bump: still 0.1.0 security
    • Tool “delete_guide” rewrote its description, which is the text the model reads security
    • Tool “get_eeat” rewrote its description, which is the text the model reads security
    • Schema quality: 125 → 167 functional
    • “get_eeat” made “guideId” required, so existing callers break functional
    • New tool “create_persona_brief” functional
    • New tool “discover_persona_brief_pages” functional
    • New tool “get_persona_brief” functional
    • “create_score” added an optional parameter “includeEmbedding” cosmetic
    • “create_score” added an optional parameter “scoreProgressive” cosmetic
    • “get_eeat” reworded the description of “eeatId” cosmetic
    • “get_eeat” reworded the description of “guideId” cosmetic
  • 9 Sept 26 0
    • Tool “get_guides” rewrote its description, which is the text the model reads security
    • Schema quality: 111 → 125 functional
    • Schema quality: good → excellent functional
    • “get_guides” added an optional parameter “group” cosmetic
    • “get_guides” added an optional parameter “query” cosmetic
    • “get_guides” added an optional parameter “status” cosmetic
  • 5 Sept 26 0
    • Schema quality: excellent → good functional
    • “update_guide” reworded the description of “shareState” cosmetic
  • 26 Aug 26 −1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Aug 26 0
    • Stability: 0.97 → pass security
  • 24 Aug 26 +1
    • Tool “get_guide” rewrote its description, which is the text the model reads security
  • 22 Aug 26 79
    • Tool “get_guide” rewrote its description, which is the text the model reads security
    • Schema quality: good → excellent functional
Diagnostics

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 20 Sept 2026 · Probed https://app.serpmantics.com/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=serpmantics.com CN=WE1,O=Google Trust Services,C=US 17 Sept 2026 16 Dec 2026 ECDSA 256 ECDSA-SHA256 c4f451b6715f7a7c0e6fe7277446db4b
SANs: serpmantics.com, *.serpmantics.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of app.serpmantics.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
serpmantics.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://app.serpmantics.com/api/mcp Verified 200
http (plaintext) http://app.serpmantics.com/api/mcp HTTPS enforced 301 https://app.serpmantics.com/api/mcp
MCP tools · 31 exposed · ~5,334 tokens

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 →

Tool Tokens
create_eeat ~146

Start an E-E-A-T analysis on a guide content Starts an asynchronous E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) analysis on the HTML content provided for a given guide. The analysis runs in the background — use GET /api/v1/eeat to poll for results until `status` is `done` (or `failed`). **Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).

NameTypeReqDescription
guideIdstringyesID of the guide to analyze
html_contentstringyesHTML of the article to analyze (without `<mark>` tags)

No output schema declared.

No examples provided.

create_eeat_competitors ~196

Start an E-E-A-T analysis on a guide's top SERP competitors Starts an asynchronous E-E-A-T analysis on the top competitors of the guide's SERP. Each competitor is fetched and scored individually. Use GET /api/v1/eeat-competitors to poll for results until `pending` reaches `0`. **Token cost:** This endpoint charges `eeatCompetitorsTokensCostPerCompetitor` (see /api/v1/tokens-usage) per competitor analyzed, up to 10 competitors. Example: 10 competitors × 5 tokens = 50 tokens. 6 competitors × 5 tokens = 30 tokens. The number of competitors corresponds to the deduplicated URLs in the guide's top-10 SERP results (available via GET /api/v1/guide).

NameTypeReqDescription
guideIdstringyesID of the guide whose competitors should be analyzed

No output schema declared.

No examples provided.

create_guides ~790

Create new guides Create one or more new guides based on provided queries. Each guide targets exactly ONE engine and ONE analysis mode, chosen with the optional `source` field (default `google`). How to request each guide type: 1. Google SERP guide (1 credit per guide): omit `source`, or pass `source: "google"`. Example payload: {"queries": ["best crm"], "lang": "en-us"} 1bis. Google AI Overview guide (1 credit per guide). Two modes, like AI engines: `source: "google_ai_overview"` builds the guide from the TEXT of Google's AI answers (AI Overview, completed with AI Mode answers) ; `source: "google_ai_overview_citations"` builds it from the content of the web SOURCES those answers cite (recommended for GEO). Same language/country parameters as a Google SERP guide, 1 credit per guide in both modes. Example payload: {"queries": ["best crm"], "lang": "en-us", "source": "google_ai_overview_citations"} 2. LLM ANSWER guide (4 credits per guide): pass the engine name alone, e.g. `source: "chatgpt"`. The guide is built from the answer text the AI generates for the query. Example payload: {"queries": ["best crm"], "lang": "en-us", "source": "chatgpt"} 3. LLM CITATIONS guide (4 credits per guide) [RECOMMENDED AI mode]: pass the engine name with the `_citations` suffix, e.g. `source: "chatgpt_citations"`. The guide is built from the content of the web pages the AI cites in its answer. Example payload: {"queries": ["best crm"], "lang": "en-us", "source": "chatgpt_citations"} Which AI mode to pick? For GEO (getting a page visible in AI answers), prefer `<engine>_citations`: AI engines send traffic by CITING pages as sources, so the winning move is to look like the pages they cite. The answer-text mode (`<engine>` alone) is mostly useful to analyze how the AI phrases its own answer. When in doubt, pick `<engine>_citations`. The same two modes exist for every AI engine (chatgpt, perplexity, claude, gemini, grok, mistral, deepseek). To optimize the…

NameTypeReqDescription
langstringyesLanguage code for the guides
queriesarrayyesArray of queries to create guides for
sourcestringTarget 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 : `g…

No output schema declared.

No examples provided.

create_intent ~91

Generate search intent analysis for a guide Analyzes search intent for a guide and optionally analyzes provided content against that intent. **Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).

NameTypeReqDescription
contentstringOptional content to analyze against the intent (only after intent analysis was created)
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

create_internal_links ~68

Generate internal linking suggestions for a guide Analyzes a guide and generates internal linking suggestions based on content analysis. **Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

create_meta ~67

Generate SEO meta titles and descriptions for a guide Generates optimized meta titles and descriptions based on guide content analysis. **Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

create_outline ~65

Generate content outline for a guide Generates a content outline based on SERP analysis for a guide. **Note:** This endpoint uses tokens (check /api/v1/tokens-usage for the cost, might vary).

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

create_persona_brief ~727

Generate an AI persona and brand voice brief from the pages of a website (free tool) Reads public pages of a website and produces an editorial persona and writing style brief: who writes, for whom, tone on 6 axes, vocabulary, structure, do and don't lists, verified quotes from the pages, style metrics measured on the text, and a ready-to-paste writing prompt for any AI writing tool (`brief.writingPrompt`, plus `brief.writingPromptCompact` of at most 1500 characters). **Asynchronous, poll the result.** This call only starts the job and answers HTTP 202 with a `briefId` and a `pollUrl`. Call `GET /api/v1/tools/persona-brief?briefId=...` every 3 seconds until `status` is `done` or `failed`. A brief takes about 80 seconds plus 5 seconds per page, rounded up to the half minute: about 2 min for 3 pages, 2 min 30 s for 10 pages, 4 min for 30 pages. MCP clients must call the `get_persona_brief` tool again until the status is terminal. **Addresses.** Duplicate URLs, compared once normalized, are read once. A private, local or blocked address is not refused by this call: the brief is created, and that page ends with `status` failed and `failureReason` BLOCKED_ADDRESS (the brief fails with NO_USABLE_PAGE when no other page could be read). **Tiers, per UTC day.** - Without an API key, free anonymous tier: 3 briefs per day per IP address, 10 URLs per brief. - Signed-in account on the web interface, plan without API access: 10 briefs per day, 20 URLs per brief. - API key of an account whose plan includes API access, pro tier: 50 briefs per day, 30 URLs per brief. The API key of an account whose plan does NOT include API access does not authenticate, and the call returns 401. Remove the `Authorization` header to use the free anonymous tier instead. Quota headers: `X-RateLimit-Limit`, `X-RateLimit-Used`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` (Unix time of the next UTC midnight). `Retry-After` is set on 429 and 503. A 502 or 503 answer gives the consumed quota back, an…

NameTypeReqDescription
brandNamestringOptional brand name, on a single line, used in the brief.
outputLanguagestringLanguage in which the brief is written. When omitted, the service chooses it.
urlsarrayyesPublic http(s) URLs of representative pages of one website, 5 to 10 articles give the best brief. At most 10, 20 or 30 URLs depending on the tier, each of at most 2048 characters.

No output schema declared.

No examples provided.

create_score ~319

Analyze content optimization score Analyzes the optimization score of the provided content for a specific guide MCP 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, contentAnalysis.embeddingAnalysis is omitted from the response. Set a flag to true in your arguments to get its content back; any value you do pass is sent unchanged, including false. The whole response is handed to the model, and this is where most of its size goes, so it is opt-in on this channel: ask only for what you are going to read.

NameTypeReqDescription
contentstringyesContent to analyze
guideIdstringyesID of the guide to analyze
includeEmbeddingbooleanWhether 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 t…
saveToGuidebooleanWhether to save the content and the analysis score back to the guide (default: true)
scoreProgressivebooleanWhether 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.

No output schema declared.

No examples provided.

delete_guide ~70

Delete a guide Deletes 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.

NameTypeReqDescription
idstringyesThe ID of the guide to delete

No output schema declared.

No examples provided.

delete_guides ~19

Delete multiple guides Deletes multiple guides at once

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

delete_intent ~40

Delete generated intent analysis for a guide Removes previously generated intent analysis for the given guide.

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

delete_internal_links ~42

Delete generated internal-links suggestions for a guide Removes previously generated internal-links suggestions for the given guide.

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

delete_meta ~40

Delete generated meta for a guide Removes previously generated meta titles/descriptions for the given guide.

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

delete_outline ~38

Delete generated outline for a guide Removes previously generated outline data for the given guide.

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

discover_persona_brief_pages ~386

Find the representative pages of a website from its sitemaps, before generating a persona brief (free tool) Reads the sitemaps of a website (declared in robots.txt, otherwise /sitemap.xml, /sitemap_index.xml and /wp-sitemap.xml) and returns up to 200 URLs of the same host, editorial pages first. The first URLs, as many as the URL limit of your tier, are flagged `suggested`: send them in `urls` to `POST /api/v1/tools/persona-brief`. Same tiers as the creation call, with their own daily counter per UTC day: 20 discoveries per day per IP address without an API key, 50 for a signed-in account, 200 with the API key of an account whose plan includes API access. A key whose plan does not include API access returns 401: remove the `Authorization` header to use the free anonymous tier. Quota headers: `X-RateLimit-Limit`, `X-RateLimit-Used`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`. `Retry-After` is set on 429 and 503. A 400, 502 or 503 answer gives the consumed quota back; SERVICE_UNAVAILABLE consumes none. **Request format.** Send the body as JSON with `Content-Type: application/json`: any other content type returns 415. Without an `Authorization` header, a request sent by a web page of another site (an `Origin` other than the SERPmantics app, or `Sec-Fetch-Site: cross-site`) returns 403. Server-to-server calls send no `Origin` header and are not affected.

NameTypeReqDescription
sitestringyesURL or domain of the website. A bare domain is completed with https.

No output schema declared.

No examples provided.

get_aissistant_tokens ~126

Get the current user's available AI tokens Returns the number of AI tokens available to the authenticated user. These tokens fund EVERY AI feature in SERPmantics — meta, outline, intent, internal-links, EEAT, EEAT competitors, score, AND the AISSistant prompts. The endpoint lives under /aissistant for historical reasons but the balance is shared across all AI features. Do NOT confuse with guide-creation credits (see /api/v1/credits). For a combined view (credits + tokens) prefer /api/v1/credits.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_credit_ledger ~176

Grand-livre crédits d'un compte (admin) Timeline 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.

NameTypeReqDescription
atstringDate ISO pour reconstruire le solde à cet instant (point-in-time).
limitnumberNombre maximum de lignes (défaut 200, max 1000).
userIdstringyesIdentifiant Mongo de l'utilisateur.

No output schema declared.

No examples provided.

get_credits ~174

Get user balance (guide credits + AI tokens) Returns the authenticated user's full balance. SERPmantics has TWO distinct currencies: - **credits** (`credits`): how many NEW GUIDES the user can still create. Consumed once per guide creation. `"unlimited"` if the user's plan grants unlimited guide creation (`hasUnlimitedCredits: true`). - **AI tokens** (`tokens`): pool consumed by every AI feature (meta, outline, intent, internal-links, EEAT, EEAT competitors…). Each feature has its own cost — call `/api/v1/tokens-usage` to get the per-feature pricing. Do not confuse the two: running out of `credits` blocks new guides; running out of `tokens` blocks AI features inside existing guides.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_eeat ~214

Get E-E-A-T analysis results Retrieves the result of an E-E-A-T analysis. `guideId` is **always required**: access is granted on the guide, so a request without it is answered with `404 Guide not found`. `eeatId` is an optional filter on top of it: pass it to fetch one specific analysis of that guide, omit it to fetch the latest one. An `eeatId` that does not belong to `guideId` is answered with `404`, never with the other account's data. Poll this endpoint until `status` is `done` (results available) or `failed`.

NameTypeReqDescription
eeatIdstringOptional filter, ID of one specific analysis of that guide (returned by POST /api/v1/eeat). Omit it to get the latest analysis of `guideId`.
guideIdstringyesID of the guide the analysis belongs to. Required, and access is checked on it.

No output schema declared.

No examples provided.

get_eeat_competitors ~96

Get E-E-A-T analysis results for a guide's competitors Retrieves the E-E-A-T analysis results for the top competitors of a guide. Poll this endpoint until `pending` is `0` to know when the full analysis is complete. Individual competitor results are available as soon as their `status` is `done`.

NameTypeReqDescription
guideIdstringyesID of the guide whose competitors should be returned

No output schema declared.

No examples provided.

get_guide ~138

Get data for a specific guide Retrieves 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.progressStatus (raw reason, message, terminal). Stop polling in that case.

NameTypeReqDescription
idstringyesThe ID of the guide to retrieve

No output schema declared.

No examples provided.

get_guides ~420

List user's guides Returns a list of guides for the authenticated user. Use `query` to check whether a guide already exists before creating one (creating a duplicate costs credits). Beware of two behaviours of this endpoint: - `query` and `group` are case-insensitive REGULAR EXPRESSIONS, not exact matches: special characters in the value are interpreted as regex syntax, and an invalid regex returns no result at all. (`status` is different: a known status is matched exactly, any other value falls back to a regex.) Always compare the returned `query` and `source` yourself, and fall back to an unfiltered paginated scan before concluding that nothing exists; - `totalCount` does NOT take `query` nor `group` into account (known limitation: both are applied as application-level regexes that the count query does not know, so it returns 0 as soon as either is used, alone or combined with `status`). Filtering on `status` alone does give a correct `totalCount`, since it is a real stored field. For an existence check, trust the `guides` actually returned; `totalCount` is only reliable for paginating a listing filtered by `status` alone, or not filtered at all. An empty result is returned as a 404 with `success: false` and `error: "No guides returned"`, not as an empty list.

NameTypeReqDescription
groupstringFilter on the guide group. Case-insensitive partial match, interpreted as a regular expression.
pagePage number for pagination
pageSizeNumber of guides per page
querystringFilter on the guide query. Case-insensitive partial match, interpreted as a regular expression (see the endpoint description).
statusstringFilter on the guide status. Exact match when the value is one of the known statuses, otherwise a case-insensitive regular expression.

No output schema declared.

No examples provided.

get_intent ~39

Get search intent analysis for a guide Retrieves existing intent analysis results for a guide

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

get_internal_links ~39

Get internal linking suggestions for a guide Retrieves existing internal linking suggestions for a guide

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

get_meta ~42

Get generated meta titles and descriptions for a guide Retrieves generated SEO meta titles and descriptions for a guide

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

get_outline ~43

Get generated page structure for a guide Retrieves the generated page structure (flat heading list) for a guide.

NameTypeReqDescription
guideIdstringyesID of the guide

No output schema declared.

No examples provided.

get_persona_brief ~386

Read an AI persona and brand voice brief, poll until it is done Returns the brief started by `POST /api/v1/tools/persona-brief`. While `status` is `pending`, `fetching`, `analyzing` or `synthesizing`, call again every 3 seconds: `progress` and `pages` show what has been read so far. When `status` is `done`, `brief` holds the structured brief, `brief.writingPrompt` the ready-to-paste prompt and `markdown` the full document. When `status` is `failed`, `failureReason` says why (NO_USABLE_PAGE, LLM_UNAVAILABLE, TIMEOUT, INTERNAL). A page with a `failureReason` did not contribute to the brief. ANALYSIS_FAILED is the only one on a page that was read: it keeps its `title` and `wordCount`, stays counted in `progress.pagesFetched` and never enters `progress.pagesAnalyzed` nor `metrics`. No quota is consumed. The `briefId` is random: whoever holds it can read the brief, which is what makes share links work. Briefs expire after 90 days. Reads that are not attributed to an account are subject to three anti-abuse counters, all per IP address and per UTC day: the total number of requests, the reads of a single brief, and the number of different briefs read. All three are far above any legitimate polling, including the busiest paid account: crossing any of them returns 429 READ_RATE_LIMITED with `Retry-After`. Once the cost ceiling is reached, further requests keep being refused until it resets, whether or not they carry a valid briefId.

NameTypeReqDescription
briefIdstringyesThe briefId returned by the creation call (22 characters).

No output schema declared.

No examples provided.

get_tokens_usage ~99

Get API token usage costs for different endpoints Returns the number of tokens required for each API endpoint operation. Note: `eeatCompetitorsTokensCostPerCompetitor` is a **per-competitor** cost. The total cost of POST /api/v1/eeat-competitors equals this value × the number of competitors analyzed (deduplicated URLs in the guide's top-10 SERP, capped at 10).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_usage ~49

Get current API usage and quota status Returns the current period's API guide usage, quota limit, remaining count and the renewal date. Aligned on the Stripe subscription billing cycle. Does not consume credits.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

update_guide ~189

Update a guide Updates editable fields of a specific guide (group, status, share state, linked URL, meta, hidden expressions). Only owners may update.

NameTypeReqDescription
groupstringGroup/folder the guide belongs to (triggers cannibalisation analysis on previous and new group)
hiddenExpressionsarrayExpressions to hide from the optimisation suggestions
idstringyesThe ID of the guide to update
linkedUrlstringPublic URL where the guide content is published (validated as URL)
metaobjectSEO meta override for the guide
shareStatestringSharing 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.
statusstringEditorial status of the guide. Empty string clears the status.

No output schema declared.

No examples provided.

Common questions

What is the io.github.AmauryDvl/serpmantics MCP server?

io.github.AmauryDvl/serpmantics is an MCP server listed in the public MCP registry as io.github.AmauryDvl/serpmantics. French-first SEO: semantic content guides, scoring, E-E-A-T audits for Google, ChatGPT & Claude. This page covers its hosted endpoint (https://app.serpmantics.com/api/mcp).

Is the io.github.AmauryDvl/serpmantics MCP server safe to use?

io.github.AmauryDvl/serpmantics scores 77 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 io.github.AmauryDvl/serpmantics MCP server expose?

io.github.AmauryDvl/serpmantics exposes 31 tools: get_aissistant_tokens, get_credits, get_eeat_competitors, create_eeat_competitors, get_eeat, and 26 more. Their descriptions and schemas cost roughly 5,334 tokens of context every time the server is loaded.

Does the io.github.AmauryDvl/serpmantics MCP server require authentication?

No. We connected to io.github.AmauryDvl/serpmantics without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.AmauryDvl/serpmantics MCP server still maintained?

io.github.AmauryDvl/serpmantics is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.