Skip to main content
Glama
yandex-metrika-mcp

yandex-metrika-mcp

by Rezlazy

@rezlazy/yandex-metrika-mcp

MCP server for Yandex Metrika Reports API (/stat/v1/*) and Management API (/management/v1/*).

Exposes 68 tools: 6 report tools and 62 management tools (counters, goals, filters, grants, segments, labels, and more).

Requirements

  • Node.js 20+

  • OAuth token with metrika:read (reports) and/or metrika:write (create/update/delete)

Related MCP server: Yandex Direct MCP

Getting an OAuth token

  1. Create a Yandex OAuth app — choose For API access or debugging.

  2. Add permissions metrika:read (reports) and metrika:write (management changes).

  3. Copy the app Client ID.

  4. Open in browser:

    https://oauth.yandex.ru/authorize?response_type=token&client_id=<CLIENT_ID>
  5. Copy the token from the redirect URL (access_token=...).

See Yandex Metrika authorization docs.

Cursor configuration

Add to .cursor/mcp.json or Cursor MCP settings:

From GitHub (builds dist via prepare on install):

{
  "mcpServers": {
    "yandex-metrika": {
      "command": "npx",
      "args": ["-y", "github:Rezlazy/yandex-metrika-mcp"],
      "env": {
        "METRIKA_TOKEN": "<your-oauth-token>"
      }
    }
  }
}

The default branch includes prepare. Pin a release with github:Rezlazy/yandex-metrika-mcp#v0.2.2 (v0.2.0 does not build from git).

For local development (.cursor/mcp.json in this repo):

{
  "mcpServers": {
    "yandex-metrika": {
      "type": "stdio",
      "command": "node",
      "args": ["${workspaceFolder}/dist/index.js"],
      "envFile": "${workspaceFolder}/.env"
    }
  }
}

Create .env in the project root:

METRIKA_TOKEN=your_oauth_token

Environment variables

Variable

Required

Description

METRIKA_TOKEN

yes

OAuth token (metrika:read / metrika:write)

METRIKA_API_URL

no

API base URL (default: https://api-metrika.yandex.net)

Multi-root workspace (*.code-workspace)

If you open mcp.code-workspace (several folders in one window), Cursor may not show project MCP servers from .cursor/mcp.json in Settings → MCP. This is a known Cursor limitation.

Workarounds:

  1. Open this repo directly: File → Open Folder → yandex-metrika-mcp (not the .code-workspace file).

  2. Or add to global config ~/.cursor/mcp.json (works in multi-root):

"yandex-metrika": {
  "type": "stdio",
  "command": "node",
  "args": ["/absolute/path/to/yandex-metrika-mcp/dist/index.js"],
  "envFile": "/absolute/path/to/yandex-metrika-mcp/.env"
}

After config changes: Refresh MCP in settings or restart Cursor. Check logs: Output panel → MCP Logs.

Tools

Reports (stat_*) — 6 tools

Tool

Description

stat_data

Table report

stat_bytime

Time series (charts, trends)

stat_drilldown

Tree / drill-down report

stat_comparison

Compare two segments (A vs B)

stat_comparison_drilldown

Segment comparison with drill-down

stat_pivot

Pivot table

Management (mgmt_*) — 62 tools

Covers Management API: counters, goals, filters, operations, grants, access filters, segments, chart annotations, labels, accounts, delegates, clients, cloud exports.

Common management tools:

Tool

Description

mgmt_counters_list

List available counters

mgmt_counter_get

Get counter details

mgmt_counter_create

Create counter

mgmt_goals_list

List counter goals

mgmt_goal_create

Create goal

mgmt_grants_list

List access grants

mgmt_segments_list

List saved segments

For POST/PUT methods pass JSON in the body parameter (see API formats). Example for creating a counter:

{
  "body": {
    "counter": {
      "name": "My site",
      "site": "example.com"
    }
  }
}

Report parameters

  • ids — counter ID(s), comma-separated

  • metrics — e.g. ym:s:visits, ym:s:users, ym:s:pageviews

  • dimensions — e.g. ym:s:trafficSource, ym:s:operatingSystem

  • date1 / date2 — period (7daysAgo, today, or YYYY-MM-DD)

  • filters — segmentation expression

  • preset — report preset

  • format — json (default) or csv

Full list of metrics and dimensions: attrandmetr.

Example: visits by traffic source

Tool: stat_data

{
  "ids": "44147844",
  "metrics": "ym:s:visits,ym:s:users",
  "dimensions": "ym:s:trafficSource",
  "date1": "30daysAgo",
  "date2": "today",
  "sort": "-ym:s:visits",
  "limit": "10"
}

Example: daily visits trend

Tool: stat_bytime

{
  "ids": "44147844",
  "metrics": "ym:s:visits",
  "date1": "30daysAgo",
  "date2": "today",
  "group": "day"
}

Development

npm install
npm run typecheck
npm test
npm run build

Changelog

See CHANGELOG.md.

License

MIT

Available Tools

68 tools
mgmt_access_filter_createC

https://yandex.ru/dev/metrika/ru/management/ Create access filter. Body: {"access_filter": {...}}

Inputs: body (required), counterId (required), pretty.

mgmt_access_filter_deleteC

Inputs: counterId (required), accessFilterId (required), pretty, delete_grants.

mgmt_access_filter_getC

Inputs: counterId (required), accessFilterId (required), pretty.

mgmt_access_filters_listC

https://yandex.ru/dev/metrika/ru/management/ List access filters for counter

Inputs: counterId (required), pretty.

mgmt_access_filter_updateC

https://yandex.ru/dev/metrika/ru/management/ Update access filter. Body: {"access_filter": {...}}

Inputs: body (required), counterId (required), accessFilterId (required), pretty.

mgmt_account_deleteD

Inputs: user_login (required), pretty.

mgmt_accounts_listC

Inputs: pretty, callback.

mgmt_accounts_updateB

https://yandex.ru/dev/metrika/ru/management/ Update accounts list. Body: {"accounts": [{"user_login": "..."}]}

Inputs: body (required), pretty.

mgmt_chart_annotation_createC

https://yandex.ru/dev/metrika/ru/management/ Create chart annotation. Body: {"chart_annotation": {...}}

Inputs: body (required), counterId (required), pretty.

mgmt_chart_annotation_deleteC

Inputs: id (required), counterId (required), pretty.

mgmt_chart_annotation_getC

Inputs: id (required), counterId (required), pretty.

mgmt_chart_annotations_listC

Inputs: counterId (required), pretty.

mgmt_chart_annotation_updateB

https://yandex.ru/dev/metrika/ru/management/ Update chart annotation. Body: {"chart_annotation": {...}}

Inputs: id (required), body (required), counterId (required), pretty.

mgmt_clients_listB

https://yandex.ru/dev/metrika/ru/management/ List available Direct clients

Inputs: pretty, counters.

mgmt_cloud_export_removeB

https://yandex.ru/dev/metrika/ru/management/ Disable cloud export on counter

Inputs: ceId (required), counterId (required), pretty.

mgmt_cloud_exports_listB

https://yandex.ru/dev/metrika/ru/management/ List Yandex Cloud export objects for counter

Inputs: counterId (required), pretty.

mgmt_counter_createB

https://yandex.ru/dev/metrika/ru/management/ Create counter. Body: {"counter": {"site": "example.com", "name": "..."}}

Inputs: body (required), ytm, field, pretty.

mgmt_counter_deleteC

Inputs: counterId (required), pretty.

mgmt_counter_getB

Inputs: counterId (required), field, pretty, callback.

mgmt_counter_label_setC

Inputs: labelId (required), counterId (required), pretty.

mgmt_counter_label_unsetC

Inputs: labelId (required), counterId (required), pretty.

mgmt_counters_listB

Inputs: sort, type, field, offset, +11 more.

mgmt_counter_undeleteB

Inputs: counterId (required), pretty.

mgmt_counter_updateC

https://yandex.ru/dev/metrika/ru/management/ Update counter. Body: {"counter": {...}}

Inputs: body (required), counterId (required), field, pretty.

mgmt_delegate_createB

https://yandex.ru/dev/metrika/ru/management/ Add delegate. Body: {"delegate": {"user_login": "..."}}

Inputs: body (required), pretty.

mgmt_delegate_deleteC

Inputs: user_login (required), pretty.

mgmt_delegates_listB

Inputs: pretty, callback.

mgmt_filter_createC

https://yandex.ru/dev/metrika/ru/management/ Create filter. Body: {"filter": {...}}

Inputs: body (required), counterId (required), pretty.

mgmt_filter_deleteC

Inputs: filterId (required), counterId (required), pretty.

mgmt_filter_getC

Inputs: filterId (required), counterId (required), pretty, callback.

mgmt_filters_listC

Inputs: counterId (required), pretty, callback.

mgmt_filter_updateC

https://yandex.ru/dev/metrika/ru/management/ Update filter. Body: {"filter": {...}}

Inputs: body (required), filterId (required), counterId (required), pretty.

mgmt_goal_createC

https://yandex.ru/dev/metrika/ru/management/ Create goal. Body: {"goal": {...}}

Inputs: body (required), counterId (required), pretty.

mgmt_goal_deleteC

Inputs: goalId (required), counterId (required), pretty.

mgmt_goal_getB

Inputs: goalId (required), counterId (required), pretty, callback.

mgmt_goals_listC

Inputs: counterId (required), pretty, callback, useDeleted.

mgmt_goal_updateC

https://yandex.ru/dev/metrika/ru/management/ Update goal. Body: {"goal": {...}}

Inputs: body (required), goalId (required), counterId (required), pretty.

mgmt_grant_createB

https://yandex.ru/dev/metrika/ru/management/ Create grant. Body: {"grant": {"user_login": "...", "perm": "view"}}

Inputs: body (required), counterId (required), pretty.

mgmt_grant_deleteD

Inputs: counterId (required), pretty, user_uid, user_login.

mgmt_grant_getC

Inputs: counterId (required), user_login (required), pretty.

mgmt_grants_listC

Inputs: counterId (required), pretty, callback.

mgmt_grant_updateB

https://yandex.ru/dev/metrika/ru/management/ Update grant. Body: {"grant": {...}}

Inputs: body (required), counterId (required), pretty.

mgmt_label_createB

https://yandex.ru/dev/metrika/ru/management/ Create label. Body: {"label": {"name": "..."}}

Inputs: body (required), pretty.

mgmt_label_deleteC

Inputs: labelId (required), pretty.

mgmt_label_getC

Inputs: labelId (required), pretty.

mgmt_labels_listC

Inputs: pretty.

mgmt_label_updateB

https://yandex.ru/dev/metrika/ru/management/ Update label. Body: {"label": {"name": "..."}}

Inputs: body (required), labelId (required), pretty.

mgmt_messengers_listC

https://yandex.ru/dev/metrika/ru/management/ List messengers for messenger goal type

Inputs: pretty.

mgmt_my_grant_getC

https://yandex.ru/dev/metrika/ru/management/ Get current user grant for counter

Inputs: counterId (required), pretty.

mgmt_operation_createC

https://yandex.ru/dev/metrika/ru/management/ Create operation. Body: {"operation": {...}}

Inputs: body (required), counterId (required), pretty.

mgmt_operation_deleteC

Inputs: counterId (required), operationId (required), pretty.

mgmt_operation_getC

Inputs: counterId (required), operationId (required), pretty, callback.

mgmt_operations_listC

Inputs: counterId (required), pretty, callback.

mgmt_operation_updateB

https://yandex.ru/dev/metrika/ru/management/ Update operation. Body: {"operation": {...}}

Inputs: body (required), counterId (required), operationId (required), pretty.

mgmt_public_grant_createC

https://yandex.ru/dev/metrika/ru/management/ Create public grant (no body)

Inputs: counterId (required), pretty.

mgmt_public_grant_deleteC

Inputs: counterId (required), pretty.

mgmt_segment_createC

https://yandex.ru/dev/metrika/ru/management/ Create segment. Body: {"segment": {...}}

Inputs: body (required), counterId (required), pretty.

mgmt_segment_deleteC

Inputs: counterId (required), segmentId (required), pretty.

mgmt_segment_getD

Inputs: counterId (required), segmentId (required), pretty.

mgmt_segments_listC

Inputs: counterId (required), pretty.

mgmt_segment_updateB

https://yandex.ru/dev/metrika/ru/management/ Update segment. Body: {"segment": {...}}

Inputs: body (required), counterId (required), segmentId (required), pretty.

mgmt_social_networks_listB

https://yandex.ru/dev/metrika/ru/management/ List social networks for social goal type

Inputs: pretty.

stat_bytimeB

Yandex Metrika Reports API. Docs: https://yandex.ru/dev/metrika/ru/stat/ Time series report — GET /stat/v1/data/bytime. Use for charts and trends.

Inputs: ids (required), metrics (required), lang, sort, +16 more.

stat_comparisonC

Yandex Metrika Reports API. Docs: https://yandex.ru/dev/metrika/ru/stat/ Segment comparison table — GET /stat/v1/data/comparison. Compare segments A and B with separate date ranges and filters.

Inputs: ids (required), metrics (required), lang, sort, +19 more.

stat_comparison_drilldownB

Yandex Metrika Reports API. Docs: https://yandex.ru/dev/metrika/ru/stat/ Segment comparison drill-down — GET /stat/v1/data/comparison/drilldown. Tree report comparing segments A and B.

Inputs: ids (required), metrics (required), lang, sort, +21 more.

stat_dataC

Yandex Metrika Reports API. Docs: https://yandex.ru/dev/metrika/ru/stat/ Table report — GET /stat/v1/data. Returns rows with dimensions and metrics.

Inputs: ids (required), metrics (required), lang, sort, +13 more.

stat_drilldownC

Yandex Metrika Reports API. Docs: https://yandex.ru/dev/metrika/ru/stat/ Drill-down tree report — GET /stat/v1/data/drilldown. One tree level per request; use parent_id for nested levels.

Inputs: ids (required), metrics (required), lang, sort, +15 more.

stat_pivotB

Yandex Metrika Reports API. Docs: https://yandex.ru/dev/metrika/ru/stat/ Pivot table — GET /stat/v1/data/pivot. Rows by dimensions, columns by pivot_dimensions.

Inputs: ids (required), metrics (required), lang, sort, +16 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 68 tools

    Disambiguation4/5

    The tools are mostly distinguishable by resource/action naming (counters, goals, filters, segments, etc.), and the stat_* report variants target distinct report types. However, with 68 tools, an agent may hesitate between similar pairs such as stat_data vs stat_bytime or filter vs access_filter, so it is not a perfect 5.

    Naming Consistency4/5

    The mgmt_<resource>_<action> pattern is used consistently across the management tools, and stat_* prefixes all report endpoints. Minor deviations like mgmt_counter_undelete, mgmt_cloud_export_remove, mgmt_accounts_update, and stat_data (noun-only) keep it from being fully uniform.

    Tool Count2/5

    68 tools is far beyond the recommended 3-15 range and will make tool selection difficult for an agent, even though the underlying Yandex Metrika API is broad. This is too many for a coherent MCP surface.

    Completeness4/5

    The set covers the six main report variants and provides full CRUD-style coverage for most management resources, including counters, goals, filters, operations, grants, segments, and annotations. Minor gaps exist (e.g., no create/update for public grants or cloud exports, and no Logs API tools), but the main workflows are supported.

    Maintenance

    ActivityStale
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol (MCP) server that provides access to Yandex Metrika analytics data through various tools and functions. This server allows AI assistants and applications to retrieve comprehensive analytics data from Yandex Metrika accounts.
      1
      -
    • A
      license
      A
      quality
      B
      maintenance
      Enables managing Yandex Direct PPC campaigns, ad groups, ads, and keywords, plus pulling performance statistics via the Yandex Direct API v5.
      46
      920 npm
      4
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables interaction with Yandex advertising and analytics APIs (Direct, Metrika, Audience, Webmaster, AdMetrica) through MCP tools, resources, and prompts for campaign management and data retrieval.
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to retrieve comprehensive analytics data from Yandex Metrika accounts, including traffic, content, e-commerce, and user demographics.
      128 npm
      1
      MIT