A side-by-side look at the Rankwise and Appmetrica MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Rankwise for marketing work over a hosted endpoint; choose Appmetrica MCP for marketing as a local process. You can also run both side by side in one mcpServers block.
search_rankwise_content, list_rankwise_sitemaps, check_ai_crawler_access.list_applications, get_application, list_events.Rows where the two servers differ are marked.
| Spec | R Rankwise | |
|---|---|---|
| Category | Marketing | Marketing |
| Quality signal | 51/100 · Good | 64/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Remote HTTP/SSE | Local subprocess (stdio) |
| Auth | Not declared | OAuth 2.0 |
| Pricing | Not declared | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | — | 3 |
| Directory activity | 0 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 49 | 45 |
| Full listing | View Rankwise | View Appmetrica MCP |
search_rankwise_contentSearch Rankwise's public library: guides, glossary terms, comparisons, free SEO and AI visibility tools, the AI crawler directory (GPTBot, ClaudeBot and others) and the AI engine pages. Returns matching titles with canonical URLs.list_rankwise_sitemapsList the sitemap URLs exposed by Rankwise so agents can enumerate indexable content.check_ai_crawler_accessCheck whether AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and others) are allowed or blocked by a website's robots.txt. Returns each crawler's status.score_ai_visibilityScore how ready a website's homepage is to be found and cited by AI search engines (crawler access, structured data, content signals). Returns a score, issues and quick wins. This is an on-page readiness check, not a measurement of real AI citations. Called without signing in, the result also carries a claim link: give it to the person who runs the site, and one sign-in opens a Rankwise workspace with that domain already added and the free trial started. A claim link works once and expires after 72 hours.check_citation_readinessCheck whether a single page is easy for AI engines to quote and cite: clear answers, headings, metadata, authorship and freshness signals. Returns findings for that page.get_free_ai_audit_linkGet the link to Rankwise's free AI visibility audit for a domain. The audit checks AI crawler access and technical readiness, and runs live Perplexity queries to see whether the brand is cited. The user opens the link to run it; this tool does not run the audit.get_workspaceShow the Rankwise workspace this connection acts in: its name, kind (personal or agency client), your role in it, and the permissions this connection has. Every other account tool works inside this one workspace.get_plan_and_creditsShow the workspace's billing plan, its credit balance, what one approved brief costs in credits, and the plan limits (domains, questions, AI engines, monthly AI checks). Use it before a tool that spends credits or a plan allowance. A plan of 'paused' means the trial ended or the subscription was canceled without a new plan: nothing is deleted, but checks and writing stay stopped until the workspace has an active plan again. pricing_url describes the plans.list_sitesList the site this connection reaches: its id (the workspace id), name, tracked domains, and whether automatic articles are on, how many a week, and whether they are paused. A connection reaches one site; connect again (or add a CLI profile) for another.pause_sitePause automatic articles for the site. While paused nothing runs on its own: no planner fill, no drafting, no publishing, no credits used. Manual actions still work. Resume with resume_site.resume_siteResume automatic articles for the site after a pause. Cards left on days that passed move to the next free publishing days. Resuming is free.create_checkout_linkCreate a Stripe Checkout link for a self-serve Rankwise plan (starter, growth or scale) for this workspace's account, and give it to the person. Nothing is charged by this call: the person opens the link and pays in their browser. If the account already has an active plan, the link opens the billing page to confirm the plan change instead. Agency plans are set up with the Rankwise team. Send a unique idempotency_key and reuse it on a retry.list_applicationsList all AppMetrica applications available to the authenticated user. Returns application IDs, names, platforms, and creation dates.get_applicationGet detailed information about a specific AppMetrica application by its ID.list_eventsList the client event names reported by an AppMetrica application (Management API "events list"). Use these names as steps in get_funnel_report or as eventLabel filters.list_conversionsList conversions (attributed-event definitions) configured for an AppMetrica application: id, name, event_type, attribution_rule, status, mandatory, etc. Conversion metrics are in the ym:ae2:* namespace.get_logs_api_statusCheck whether the Logs API is enabled for the account ("enabled" / "disabled"). When it is disabled, export_events / export_logs keep returning 202 (queued) or 429 — this is how to find out why.get_reportRetrieve aggregated statistics from AppMetrica (/stat/v1/data).
Call list_metrics first (overview) or list_metrics with search/namespace to find exact keys.
Quick reference: ym:u:* users · ym:s:* sessions · ym:ce:* client events · ym:cr2:* crashes · ym:i:* installs · ym:r2:* revenue · ym:pc:* push.
Revenue metrics carry a literal <currency> placeholder (e.g. ym:r2:revenue<currency>) — pass currency (RUB|USD|EUR|YND) alongside.
Funnel step metrics (ym:uf:*) need a funnel pattern — use get_funnel_report instead.
Keep one namespace prefix per call. Known non-existent keys (4002): ym:u:sessions, ym:u:crashes, ym:u:revenue, ym:r2:revenue without <currency>.
Filters use the segmentation syntax, e.g. "ym:u:operatingSystemInfo=='iOS'"; segment_id (from list_segments) ANDs a saved segment expression into filters.
A sporadic 400 "Запрос слишком сложный" means: retry, narrow the date range, or pass accuracy (e.g. 0.1, sampled result).get_report_bytimeRetrieve AppMetrica statistics as a time series (/stat/v1/data/bytime): the same metrics/dimensions as get_report, split by day/week/month/hour or a single interval (group=all).
Response: data[i].metrics[m][t] arrays aligned with time_intervals, plus totals.
IMPORTANT: use ONE namespace prefix per call (all metrics and dimensions ym:u:*, or all ym:s:*, ...). Mixing prefixes fails with error 4011 — issue one call per namespace.
Revenue metrics with a <currency> placeholder need the currency param. segment_id (from list_segments) is ANDed with filters.
A sporadic 400 "Запрос слишком сложный" means: retry, narrow the date range, or pass accuracy (e.g. 0.1).get_drilldownRetrieve drilldown statistics for a specific parent dimension value in AppMetrica. Useful for hierarchical data exploration.list_metricsCatalogue of AppMetrica Reporting API metric and dimension keys, built from the official docs (scripts/update-catalog.mjs): 197 metrics, 188 dimensions.
Without search/namespace returns a compact overview: namespaces table, keys verified live, known non-existent keys (traps) and recipes for analytics that need a special tool.
With search (case-insensitive substring over key/name/description) and/or namespace (e.g. 'ym:u:' or 'u') returns matching entries, truncated to limit with a total count.
Metrics are listed with full keys (some contain placeholders like <currency>); dimensions are listed by suffix plus the namespaces where they exist (key = namespace + suffix, e.g. ym:u: + appVersion).export_eventsExport raw event logs from AppMetrica Logs API.
Revenue and in-app purchase data is stored in the event_json field as structured JSON.
Default fields: event_name, event_datetime, event_json, appmetrica_device_id, app_version_name, os_version, device_model, country_iso_code, city.
To get subscription/purchase data: filter by event_name (e.g. "subscription_purchase") and parse event_json field.
Logs API is asynchronous — the first request usually returns "data not ready" (HTTP 202) and the wrapper re-polls the same query (default budget ~150s, tunable via APPMETRICA_MAX_WAIT_MS). A busy or wide query may still need a manual retry after a few minutes; re-running the identical query resumes the same server-side export.
Start with 1-day windows; multi-day exports take noticeably longer to materialise.
Run export_events strictly sequentially and avoid rapid retries — the Logs API has a low export-request quota; on HTTP 429 the wrapper honours Retry-After and backs off, but exhausting the quota also blocks the AppMetrica web UI for a few minutes.export_crashesExport raw crash logs from AppMetrica for a given application and time range.
Use this for per-crash-name breakdowns — get_report only exposes the total ym:cr:crashes count.
Same async/rate-limit behaviour as export_events: the wrapper re-polls 202 (default ~150s budget), honours Retry-After on 429, and backs off. Run sequentially and avoid rapid retries — wide ranges may need a manual retry after a few minutes.export_installationsExport raw installation logs from AppMetrica for a given application and time range.
Same async/rate-limit behaviour as export_events: the wrapper re-polls 202 (default ~150s budget), honours Retry-After on 429, and backs off. Run sequentially and avoid rapid retries — wide ranges may need a manual retry after a few minutes.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": {
"rankwise": {
"command": "npx",
"args": [
"-y",
"rankwise"
]
}
}
}
{
"mcpServers": {
"appmetrica-mcp": {
"command": "npx",
"args": [
"-y",
"appmetrica-mcp"
]
}
}
}