A side-by-side look at the Seo MCP and Yandex Metrica MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Seo MCP for marketing work as a local process; choose Yandex Metrica MCP for marketing as a local process. You can also run both side by side in one mcpServers block.
MCP_API_KEY, PORT, APP_API_BASE_URL, APP_PUBLIC_BASE_URL, MCP_INTERNAL_TOKEN.run_audit_anonymous, run_audit, get_audit.YANDEX_METRIKA_COUNTER_ID.login, submit_code, get_metadata.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Marketing | Marketing |
| Quality signal | 55/100 · Good | 64/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | MCP_API_KEYPORTAPP_API_BASE_URLAPP_PUBLIC_BASE_URLMCP_INTERNAL_TOKEN | YANDEX_METRIKA_COUNTER_ID |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 15 |
| Directory activity | 3 views 2 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 6 | 12 |
| Full listing | View Seo MCP | View Yandex Metrica MCP |
run_audit_anonymousRun a one-shot SEO + AI-readability audit on any public URL. Returns scores across 11 modules and ~90 checks, plus actionable findings with rule docs. Limited to 1 audit per IP per 24 hours — for higher volume, get an API key at https://app.metricspot.com/settings/api-keys and use `run_audit`. Synchronous: blocks until the audit completes. Does NOT include Core Web Vitals (use `run_audit` for full PSI scoring). No auth required.run_auditQueue a full SEO + AI-readability audit (includes Core Web Vitals from Google PSI and organic traffic if Google is linked). Returns the audit envelope immediately with `status: queued` and an `audit_id`. Poll `get_audit` with the returned `audit_id` until `status` becomes `complete` (typical 10-30s). Counts against the user's plan allowance. Requires an API key as a Bearer token. Quota and per-domain cooldowns mirror the dashboard.get_auditFetch a previously-run audit by id. Returns module scores (0-100), total score, all findings with severity, recommendation text, and links to the HTML report. Use this to poll a queued `run_audit` until `status: complete`. Requires an API key.list_auditsList the user's audits (most recent first, deduplicated by URL). Returns `audit_id`, `url`, `status`, `total_score`, `created_at`. Default limit 24, max 100. Use the returned `audit_id` with `get_audit` for full findings. Requires an API key.get_audit_pdfReturn a signed download URL for the branded PDF report for a given audit id. If no PDF has been rendered yet, queues a render and returns `status: queued` — poll the same tool again, or fetch the URL directly once ready. Requires an API key.get_organic_trafficIf the user has linked GA4 + Google Search Console, return the 28-day organic traffic snapshot for an audit: session count, daily trend, top landing pages, top queries, and indexing health. Returns `connected: false` if Google is not linked. Cached 24h server-side. Requires an API key.loginSign in to Yandex from here. Opens your browser to approve access; the code returns automatically over a local redirect, so this usually finishes in one call. If the local port is unavailable it returns a URL to approve and you then call submit_code with the code Yandex shows. Run this once (the token lasts ~1 year); needed before the data tools if you are not signed in yet.submit_codeComplete a copy-paste sign-in started by login: pass the code Yandex showed you after you approved access.get_metadataDiscovery tool. Lists the counters available to your token plus a curated catalog of common dimensions and metrics (Metrica has no enumeration API), attribution options and Logs API fields. Call this before run_report or logs_request to use real field names and to find a counterId. For a counter's own goals, segments, filters or grants, use describe_counter. Read-only.describe_counterRead a single counter's configuration — settings, goals, segments, filters, operations and access grants — choosing sections with `include`. The goals section returns the goal ids needed to build conversion metrics (ym:s:goal<id>reaches / conversionRate) in run_report, so call this with include=["goals"] before any conversion question. To list the account's counters, use get_metadata. Read-only.run_reportQuery a Yandex Metrica table report (/stat/v1/data): one or more metrics grouped by dimensions over a date range, with optional filter and sort. Read-only. Use get_metadata first to discover valid metric/dimension ids and the account counters.run_comparisonCompare two segments/periods (A vs B) for the same metrics and dimensions (/stat/v1/data/comparison). Returns per-metric values for A and B plus the absolute and percentage delta, computed server-side: delta = B − A (segment A is the baseline), delta_pct = (B − A) / A × 100. Defaults to last 7 days (B) vs the prior 7 days (A), so a positive delta means growth. Read-only.run_drilldownReturn one level of a hierarchical (tree) report (/stat/v1/data/drilldown). Each row has an "expandable" flag; pass parentId with the path of dimension keys to expand deeper. Requires dimensions. Read-only.run_timeseriesReturn metrics split into a time series (/stat/v1/data/bytime): each metric comes back as an array of values, one per interval (day/week/month/…) over the date range. Use for trends and charts. Optionally group by dimensions (topKeys rows). Read-only.logs_requestCreate a Yandex Metrica Logs API request for RAW, un-sampled rows (source="visits" sessions or "hits" events) over a date range. Checks feasibility, then queues preparation (takes minutes). Returns a request_id to poll with logs_status; then logs_download, then logs_clean. Discover field ids with get_metadata. Not read-only: preparing data consumes the counter storage quota.logs_statusInspect a Logs API request by request_id (status, parts, size, next step), or omit request_id to list all of the counter's log requests and current storage-quota usage. Poll this after logs_request until status="processed". Read-only.logs_downloadDownload prepared log data for a request_id (must be status="processed"; check logs_status). Default mode "sample" returns up to maxRows parsed rows inline — cheap and bounded. Mode "file" streams the FULL export to a file and returns its path plus a small preview; the raw content (potentially millions of rows) is never loaded into context. Read-only.logs_cleanFree the counter storage quota by cleaning a finished (processed) log request, or cancel one still being prepared. Dispatches by current status. Destructive: cleaned data must be requested again to download later.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"seo-mcp": {
"command": "npx",
"args": [
"-y",
"@metricspot/mcp-server"
],
"env": {
"MCP_API_KEY": "YOUR_MCP_API_KEY_HERE",
"PORT": "YOUR_PORT_HERE",
"APP_API_BASE_URL": "YOUR_APP_API_BASE_URL_HERE",
"APP_PUBLIC_BASE_URL": "YOUR_APP_PUBLIC_BASE_URL_HERE",
"MCP_INTERNAL_TOKEN": "YOUR_MCP_INTERNAL_TOKEN_HERE"
}
}
}
}
{
"mcpServers": {
"yandex-metrica-mcp": {
"command": "npx",
"args": [
"-y",
"yandex-metrica-mcp"
],
"env": {
"YANDEX_METRIKA_COUNTER_ID": "YOUR_YANDEX_METRIKA_COUNTER_ID_HERE"
}
}
}
}