A side-by-side look at the Affset and Yandex Direct MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Affset for marketing work as a local process; choose Yandex Direct MCP for marketing as a local process. You can also run both side by side in one mcpServers block.
whoami, get_stats, list_campaigns.YANDEX_DIRECT_TOKEN, YANDEX_DIRECT_SANDBOX, YANDEX_DIRECT_LOGIN.list_campaigns, get_campaign, create_campaign.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Marketing | Marketing |
| Quality signal | 52/100 · Good | 60/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 | None listed | YANDEX_DIRECT_TOKENYANDEX_DIRECT_SANDBOXYANDEX_DIRECT_LOGIN |
| Verified owner | Community listing | Community listing |
| GitHub stars | 0 | 4 |
| Directory activity | 1 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 31 | 20 |
| Full listing | View Affset | View Yandex Direct MCP |
whoamiShow the tenant this server is bound to: namespace, API base, derived dashboard URL, and (when readable) company / timezone / custom API domain. Read-only.get_statsTraffic stats grouped by a dimension (date, campaign, zone, country, sub1–5, advertiser, publisher, …), optionally narrowed with `advertiser_email`/`publisher_email` filters (one user, any group_by). Returns clicks, conversions, CR, payout, media cost and ROI as a table. `paid_only` defaults to tru…list_campaignsList campaigns (status / name filter, pagination).get_campaignOne campaign's full record — every field (untruncated offer URL, exact schedule, budgets/pacing, silent flag, payout goal type) plus its targeting rules and payout rules, in one call.list_zonesList traffic-source zones (status / name filter, pagination, linked source).list_teamList team members (email, role, manager). **Never returns API tokens.create_team_memberInvite a team member (owner, manager, publisher, advertiser, publisher_manager, advertiser_manager). A scoped manager key can only create its own managed role, self-assigned. Returns the new API key **once** — `list_team` never shows it again. **Dry-run by default**; `confirm: true` to apply.create_campaignCreate a campaign from an advertiser email, offer URL, geo, payout and name. Defaults: CPA / rate 0, **paused**, global payout rule, and a ready tracking link (linked source template when configured; otherwise `source_click_id={clickid}` + sub placeholders). **Dry-run by default**; `confirm: true`…set_campaign_statusRun** or **pause** a campaign (`action: "run" \update_campaignPartial update (name, offer URL, status, rate, budgets, dates, …). **Dry-run by default**; `confirm: true` to apply. Prefer `set_campaign_status` for run/pause.create_zoneCreate a traffic-source zone (name + optional postback/site/traffic-back URLs, optional `traffic_source_id` link). Always created `active`. **Dry-run by default**; `confirm: true` to apply.update_zonePartial update (name, status, URLs, `traffic_source_id`). **Dry-run by default**; `confirm: true` to apply. Pass `null` to clear a URL or unlink the source.list_campaignsСписок рекламных кампаний Яндекс.Директ с фильтрацией по статусу и типу. Бюджеты — в рублях.get_campaignДетальная информация о кампании по ID: бюджет (руб), статус, даты, статистика.create_campaignСоздать новую рекламную кампанию. Бюджет в рублях. ⚠️ Тратит реальные деньги — используйте sandbox для теста.update_campaignОбновить кампанию: название, бюджет (руб) и/или статус (SUSPEND/RESUME/ARCHIVE/UNARCHIVE).list_ad_groupsГруппы объявлений выбранных кампаний: названия, регионы, статусы.create_ad_groupСоздать группу объявлений в кампании с таргетингом по регионам (см. get_regions).delete_ad_groupsУдалить группы объявлений по их ID. ⚠️ Необратимо.list_adsОбъявления в группах: заголовки, тексты, ссылки, статусы.create_text_adСоздать текстовое объявление: заголовок (≤56), второй заголовок (≤30), текст (≤81), ссылка.update_text_adОбновить текстовое объявление: заголовок, текст, ссылка. Изменённое объявление уходит на модерацию.manage_adsДействие над объявлениями: suspend/resume/archive/unarchive/moderate/delete. ⚠️ delete необратимо.list_keywordsКлючевые фразы в группах объявлений: фразы, ставки (руб), статусы.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": {
"affset": {
"command": "npx",
"args": [
"-y",
"@affset/mcp"
]
}
}
}
{
"mcpServers": {
"yandex-direct-mcp-2": {
"command": "npx",
"args": [
"-y",
"@theyahia/yandex-direct-mcp"
],
"env": {
"YANDEX_DIRECT_TOKEN": "YOUR_YANDEX_DIRECT_TOKEN_HERE",
"YANDEX_DIRECT_SANDBOX": "YOUR_YANDEX_DIRECT_SANDBOX_HERE",
"YANDEX_DIRECT_LOGIN": "YOUR_YANDEX_DIRECT_LOGIN_HERE"
}
}
}
}