Yandex Metrica Mcp

io.github.BoxLab-LtdPublished by GitHub account BoxLab-Ltdv1.0.1Updated Nov 7, 2026

Query Yandex Metrica analytics — reports, trends, metadata and raw log exports — via an AI agent.

VerifiedSTDIODesktop onlyWeb Search & ScrapingData & Analytics

Overview

AI-generated overview

Local MCP server that lets an assistant query Yandex Metrica web analytics — reports, comparisons, trends, counter settings and raw log exports.

What you can do
  • Discover counters and valid dimensions, metrics and Logs API fields, and read a counter's settings, goals, segments, filters and annotations
  • Run table reports, A/B comparisons of two periods or segments, hierarchical drilldowns and time series
  • Export raw visits or hits through the Logs API: request, poll status, download a bounded sample or full file, then clean up
  • Sign in to Yandex from the client via a browser login or a pasted code
  • With write tools enabled: create, update or delete chart annotations and upload ad-cost CSV files
When to use it
Useful when you want to ask about traffic, sources, landing pages, conversions, geography, devices or trends in plain language instead of building dashboards, or when you need raw un-sampled session or hit data for offline analysis.
Requirements
Node.js 18 or newer, run locally via npx or an MCP client config. Yandex Metrica credentials with the metrika:read scope: either an interactive login (cached token) or a static YANDEX_METRIKA_TOKEN. Optional YANDEX_METRIKA_COUNTER_ID as a default counter, YANDEX_METRIKA_LOGS_DIR for file exports, and YANDEX_METRIKA_ENABLE_WRITE=1 for write tools. Network access to Yandex.
Before you install
The server holds a Yandex OAuth token that grants access to the account's counters; the cached token file and YANDEX_METRIKA_TOKEN are secrets. Write tools are off by default; when enabled, sign-in also requests metrika:write and changes are confirmed one at a time. logs_clean is destructive and frees stored log data that must then be requested again. Full log exports can be large and are written to disk. Data goes only to Yandex.

Installation

In SourceWeft

  1. Open Yandex Metrica Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

yandex-metrica-mcp

[CI] [npm] [License: MIT]

Ask your Yandex Metrica analytics in plain language — from Claude, Cursor, or any MCP client.

A Model Context Protocol (MCP) server for Yandex Metrica. It lets an AI agent query your web-analytics data — traffic, sources, landing pages, conversions, geography, devices and trends — through a small set of flexible, read-only tools — plus opt-in write tools that you confirm one change at a time.

Read-only by default, no secrets stored in the package: interactive login uses a built-in public OAuth client with PKCE, and the server talks only to Yandex.

General-purpose: marketing, product analytics, e-commerce and SEO are all fair game — the server is not tied to any one use case.

Demo

Point an AI agent at your counter and ask about your traffic — the server queries Yandex Metrica and hands back real, read-only data, no dashboards. Here the run_report tool answers a “traffic sources, last 7 days” question against a live counter:

[yandex-metrica-mcp querying live Yandex Metrica traffic sources, read-only]

Quickstart

1. Add the server to your MCP client (e.g. Claude Desktop) — no token required up front; you log in interactively in step 2:

json
{    "mcpServers": {        "yandex-metrica": {            "command": "npx",            "args": ["-y", "yandex-metrica-mcp"],            "env": { "YANDEX_METRIKA_COUNTER_ID": "12345678" }        }    }}

2. Log in once — one command, no app registration, no secret stored:

bash
npx yandex-metrica-mcp auth

Approve access in the browser and you're done — the code is handed back automatically over a local redirect, no copy-paste. The login uses authorization-code + PKCE, so no client secret ever touches your machine; the token is cached (mode 0600) and valid for ~1 year.

3. Ask your agent about traffic, sources, conversions, geography, devices, or trends — see Examples for prompts.

Prefer a static token (CI / non-interactive) or your own OAuth app? See Authentication.

Or install as a Claude Code plugin

The repo doubles as the plugin marketplace for BoxLab's Yandex MCP family, so you can install the server through Claude Code's plugin system instead of the config above:

bash
/plugin marketplace add BoxLab-Ltd/yandex-metrica-mcp/plugin install yandex-metrica-mcp@boxlab

Then sign in from the chat with the login tool (or run npx yandex-metrica-mcp auth). The same marketplace also carries yandex-webmaster-mcp. To turn on the write tools in the plugin, start Claude Code with YANDEX_METRIKA_ENABLE_WRITE=1 in the environment.

Or install as a Claude Desktop extension (.mcpb)

For a one-click install with no JSON, download the .mcpb from the latest release and open it with Claude Desktop (or drag it into Settings → Extensions). It asks for an optional default counter id; then sign in from the chat with the login tool (or run npx yandex-metrica-mcp auth).

Why

There is no official Yandex Metrica MCP server, and existing community ones are mostly thin, unmaintained, or dump raw data straight into the model's context. This server aims to be the well-engineered, well-maintained, open option: flexible report tools, strict token/context discipline, read-only by default.

Features

  • run_report — flexible wrapper over the Reporting API (/stat/v1/data).
  • run_comparison — compare two periods with absolute and percentage deltas.
  • run_drilldown — drill down through a dimension tree.
  • run_timeseries — metrics split into a time series (/bytime) for trends.
  • get_metadata — discover the counters on your account and a catalog of common dimensions/metrics (and Logs API fields) so the model queries with real names.
  • describe_counter — read one counter's configuration (goals, segments, filters, operations, access grants, chart annotations) via an include selector. The goals section gives the goal ids needed for conversion metrics in run_report.
  • logs_request / logs_status / logs_download / logs_clean — Logs API: export raw, un-sampled session (visits) or hit (hits) rows. Async lifecycle (request → poll → download → clean); logs_download returns a bounded sample inline by default, or streams the full export to a file — never dumping raw rows into the model's context.
  • login / submit_code — sign in to Yandex Metrica from your MCP client, no terminal needed: login opens the browser and captures the code over a local redirect, or hands back a URL and takes the pasted code via submit_code.
  • Built-in context control: field selection on by default, low default row limits, and sampling/quota surfaced back to the model.
  • Analysis hygiene: the server hands every client a short set of rules (exclude robots, compare complete periods, never sum users, use explicit goals, …). The Claude Code plugin adds the fuller metrica-hygiene skill.

Write tools (opt-in)

Off unless you set YANDEX_METRIKA_ENABLE_WRITE=1. Then the server adds:

  • manage_annotation — create, update or delete a note pinned to a chart date (a release, a campaign start, an outage).
  • upload_expenses — import ad costs from a non-Yandex source as CSV, so Metrica reports cost and ROI. dryRun: true validates the file and shows the rows, dates and totals without sending anything.

With the flag on, sign-in also asks for the metrika:write scope — run auth (or the login tool) once more after turning it on. Without the flag the sign-in asks for read access only, and tokens issued earlier keep working. Every change is confirmed by you before it is sent: your client shows a confirmation prompt if it supports MCP elicitation, otherwise the tool returns a summary and a one-time token that the agent can use only after you agree. The server also checks that your account has edit access to the counter.

Local HTTP mode

By default the server talks stdio, started by your MCP client. For clients that connect by URL, or to share one running server between several clients, start it over Streamable HTTP:

bash
npx yandex-metrica-mcp --http            # http://127.0.0.1:7801/mcpnpx yandex-metrica-mcp --http --port 9000

Or set MCP_TRANSPORT=http (and MCP_HTTP_PORT). Every client gets its own session; they share one sign-in and one request budget. The server listens on 127.0.0.1 only and rejects requests whose Host or Origin is not local, so a web page cannot reach it. To listen on another interface (--host 0.0.0.0, e.g. in Docker) you must set MCP_HTTP_TOKEN; clients then send Authorization: Bearer <token>. This is a local mode, not hosting: one user, one Yandex account.

Requirements

  • Node.js >= 18
  • Yandex Metrica credentials with the metrika:read scope (see Authentication), plus metrika:write for the opt-in write tools. Whoever the credentials belong to must have access to the counters you query.

Authentication

Recommended: interactive login. No app registration needed — the server ships a built-in public OAuth client. Run once:

bash
yandex-metrica-mcp auth     # or, in dev: bun run auth

It opens the Yandex consent page in your browser; after you approve, the code is returned automatically over a loopback redirect (http://127.0.0.1:53682) — no copy-paste. If that port is taken, it falls back to showing a code you paste in (force that flow with auth --oob, or change the port with YANDEX_OAUTH_LOOPBACK_PORT). The token is cached at ~/.config/yandex-metrica-mcp/token.json (mode 0600) and is valid for ~1 year; re-run auth when it expires. The login uses authorization-code + PKCE, so no client secret is stored anywhere. A cached login takes precedence over YANDEX_METRIKA_TOKEN.

From your MCP client (no terminal). Not signed in yet? The server still starts — ask your agent to run the login tool and it does the same browser flow in-process (or returns a URL and takes the code via submit_code). Handy for GUI clients like Claude Desktop, where there is no terminal to run auth.

Static token. Get a token for an app with the metrika:read scope at https://oauth.yandex.ru and pass it as YANDEX_METRIKA_TOKEN — handy for CI or non-interactive use.

Own OAuth app (optional). To use your own app instead of the built-in one, set YANDEX_OAUTH_CLIENT_ID; add YANDEX_OAUTH_CLIENT_SECRET to also enable automatic token refresh.

Configuration

The Quickstart covers the happy path. For all options — static token, your own OAuth app, default counter, request tuning, language — see .env.example. The published package runs on Node (so npx/MCP clients work out of the box); local development uses Bun.

Examples

Once connected, an agent can answer questions like:

  • “How many visits and users did counter 12345678 get last week, split by traffic source?” → run_report with metrics: ["ym:s:visits","ym:s:users"], dimensions: ["ym:s:lastsignTrafficSource"].
  • “Compare this week's organic conversions to last week's.” → run_comparison (server returns A, B, and the deltas).
  • “Which operating systems do my visitors use? Let me drill into Windows versions.” → run_drilldown, then again with parentId.
  • “What counters do I have?” → get_metadata.
  • “List this counter's goals, then show how the ‘Purchase’ goal converted last week.” → describe_counter (include: ["goals"]) for the goal id, then run_report with ym:s:goal<id>conversionRate.
  • “Export last month's raw sessions with landing pages and referrers for offline analysis.” → logs_request (source: "visits"), poll logs_status, then logs_download (mode: "file"), then logs_clean to free the quota.

Development

This project is Bun-first:

bash
bun installbun run dev        # run from source with hot reloadbun run typecheck  # tsc --noEmitbun run lint       # eslintbun test           # bun's test runnerbun run build      # emit dist/ with tsc (Node-compatible)

The skill has an eval suite in evals/ that runs against mocked Metrica tools, so it never touches the real API:

bash
claude plugin eval . --ablation none

License

MIT © boxlab

Source: README.md at commit 49e2c4b

Tools

12

login

Sign in to Yandex

Sign 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.

Parametersoob

submit_code

Submit the Yandex sign-in code

Complete a copy-paste sign-in started by login: pass the code Yandex showed you after you approved access.

Parameterscoderequired

get_metadata

Get Metrica metadata

Discovery 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.

Takes no parameters.

describe_counter

Describe Metrica counter

Read a single counter's configuration — settings, goals, segments, filters, operations and access grants and chart annotations — 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.

ParametersincludecounterIdfullResponse

run_report

Run Metrica report

Query 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.

Parameterssortdate1date2limitoffsetpresetfiltersmetricsrequiredaccuracytimezonecounterIddimensions+2 more

run_comparison

Compare Metrica segments

Compare 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.

Parameterssortlimitdate1Adate1Bdate2Adate2BoffsetpresetmetricsrequiredaccuracyfiltersAfiltersB+5 more

run_drilldown

Drill down a Metrica report

Return 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.

Parameterssortdate1date2limitoffsetpresetfiltersmetricsrequiredaccuracyparentIdtimezonecounterId+3 more

run_timeseries

Metrica metrics over time

Return 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.

Parametersdate1date2groupfiltersmetricsrequiredtopKeysaccuracytimezonecounterIddimensionsfullResponseincludeUndefined

logs_request

Request Metrica raw logs

Create 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.

Parametersdate1requireddate2requiredfieldsrequiredsourcerequiredcounterIdattributionwaitSeconds

logs_status

Check Metrica log requests

Inspect 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.

ParameterscounterIdrequestId

logs_download

Download Metrica raw logs

Download 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.

ParametersmodemaxRowscounterIdrequestIdrequiredoutputPath

logs_clean

Clean or cancel a Metrica log request

Free 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.

ParameterscounterIdrequestIdrequired

Version history

2
  1. v1.0.1LatestNov 6, 2026
  2. v0.3.0Sep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts