A local stdio MCP server that wraps the Overwolf Developer Console statistics API, so an MCP client (Claude Desktop, Cursor, etc.) can fetch your app's analytics on demand — DAU/MAU, installs, retention, crashes, and the full ads-revenue suite.
It is open source and npx-runnable: point it at your own Overwolf app and ask your
assistant things like "what was my DAU over the last 7 days?" or "compare net ad
revenue this month vs. last."
- Typed tools for every documented performance + revenue endpoint (33 of them).
- A generic passthrough (
query_console_stats) for any endpoint by path. - A discovery tool (
list_endpoints) so the assistant can see what's available. - Decoupled core: the API client has no MCP dependency, so it can be lifted into a remote (OAuth-hosted) server later without a rewrite.
You don't install, host, or run anything yourself. An MCP server is a small helper program that your AI assistant (like Claude Desktop) starts automatically in the background. You add a few lines of config — your Overwolf email, API key, and app ID — and then just ask questions in plain English (e.g. "what was my DAU last week?"). The assistant fetches the answer from Overwolf through this server and explains it. No coding, nothing to host.
You need two things installed: Node.js 18 or newer (this is what actually runs the server) and an MCP client — Claude Desktop is the easiest. Then do this once:
Sign in to the Overwolf Developer Console → Settings → Profile → "Revoke and get new API key" → copy it immediately (it's shown only once; revoking invalidates your previous key).
Grab your app's unique ID from the Developer Console.
In Claude Desktop: Settings → Developer → Edit Config (or open the file directly —
Windows: %APPDATA%\Claude\claude_desktop_config.json, macOS:
~/Library/Application Support/Claude/claude_desktop_config.json). Paste the block
below, filling in your email, key, and app ID:
{
"mcpServers": {
"overwolf-console": {
"command": "npx",
"args": ["-y", "overwolf-console-mcp"],
"env": {
"OVERWOLF_EMAIL": "you@example.com",
"OVERWOLF_API_KEY": "your-api-key",
"OVERWOLF_DEFAULT_APP_ID": "your-app-id"
}
}
}
}If your config already has an "mcpServers" block, just add the "overwolf-console"
entry inside it.
On Windows, if your assistant can't start
npx, change"command"to"cmd"and"args"to["/c", "npx", "-y", "overwolf-console-mcp"].
Fully quit Claude Desktop (not just the window — quit it from the system tray) and
reopen it. The first query takes a few extra seconds while npx downloads the package.
You never clone a repo or build anything — npx handles all of that.
- "What was my DAU over the last 30 days?"
- "How has MAU trended over the past year?"
- "Show app installs by country for the last 90 days."
- "Break down this month's net ad revenue."
- "What's my day-1 and day-7 user retention?"
- "Any crash spikes on the latest app version?"
To see everything it can pull, ask "list the available Overwolf stats endpoints." There's a 5 requests / 60 seconds rate limit (the server throttles and retries for you), so avoid firing dozens of queries at once.
The same "overwolf-console" block works in other stdio MCP clients (Cursor, Cline,
etc.) — only the config file's location differs.
Credentials come from environment variables — set them in your MCP client's env block
(above), or in a local .env file when developing:
| Variable | Required | Description |
|---|---|---|
OVERWOLF_EMAIL |
✅ | Account email used in the auth header. |
OVERWOLF_API_KEY |
✅ | Console API key (from step 1). |
OVERWOLF_DEFAULT_APP_ID |
– | App ID used when a request omits app_id. |
OVERWOLF_BASE_URL |
– | Override the API base URL. Defaults to https://console.overwolf.com/api/stats. |
The server authenticates with the header authorization: Key {email}:{api_key}, built
from OVERWOLF_EMAIL + OVERWOLF_API_KEY. Never commit a real key — .env is
gitignored and .env.example ships placeholders only. (.env/.env.local are read
from the current working directory, so for an installed/npx server pass credentials
via the client's env block, not a .env file.)
Only needed if you want to modify the code — users don't need this:
git clone https://github.com/Counterwatch/overwolf-console-mcp.git
cd overwolf-console-mcp
npm install
cp .env.example .env # then edit .env with your credentials
npm run build
npm start # serves on stdioFor iterating on source: npm run dev (watch mode). To verify a build end-to-end:
npm run smoke.
Each endpoint is exposed as a typed tool. Call list_endpoints for the live list
with parameters, or browse below.
Discovery & generic
list_endpoints— list every registered endpoint and its params.query_console_stats— call any endpoint by path:{ path, params?, max_rows? }. The escape hatch for anything not (yet) typed.
Headline performance tools
get_daily_active_users—performance/daily-active-users-dauget_monthly_active_users—performance/monthly-active-users-mauget_app_installs—performance/app-installs
All 33 typed tools
Performance: get_daily_active_users, get_monthly_active_users,
get_app_installs, get_app_uninstalls, get_dau_per_country,
get_user_retention_daily, get_user_retention_weekly,
get_user_retention_monthly, get_window_open_count_per_day,
get_median_window_open_duration_per_day,
get_app_window_open_duration_distribution, get_app_crashes,
get_partner_report_app_game_dau, get_app_version_by_dau
Revenue: get_daily_ads_revenue_gross_net, get_month_to_date_revenue_net,
get_video_ads_general_metrics, get_video_ads_revenue_net,
get_display_ads_general_metrics, get_display_ads_revenue_net,
get_video_ads_completion_rate, get_video_ads_detailed_metrics,
get_display_ads_estimated_metrics, get_all_ads_metrics_monthly,
get_video_ads_metrics_monthly, get_display_ads_metrics_monthly,
get_average_ads_container_open_time, get_video_ads_rpm_per_window,
get_daily_avg_revenue_per_dau_per_country, get_daily_avg_revenue_per_dau_us,
get_daily_avg_revenue_per_dau_non_us, get_ads_revenue_net_yearly_comparison,
get_monthly_ads_metrics
app_id (falls back to OVERWOLF_DEFAULT_APP_ID), and where applicable:
country_name (capitalized, e.g. "United States", or "All Countries"),
days_back (allowed: "Last 30 Days", "Last 90 Days", "Last 180 Days", "Last 365 Days"),
app_version (or "All Versions"), installation_source (or "All Sources"),
window_name (or "All Windows"), attribution (or "All Attributions"),
ad_size (or "All Sizes"). Every tool also accepts max_rows (default 100).
All tools return compact JSON, capped at max_rows:
{ "row_count": 180, "returned": 100, "truncated": true, "columns": [ ... ], "rows": [ ... ] }columns carries each field's name, friendly_name, and type from the API's
uniform envelope.
The Overwolf stats API allows 5 requests per 60 seconds. This server throttles
client-side to stay under that limit, and on an HTTP 429 it retries once honoring
the X-RateLimit-Reset header before returning a clear error telling you how many
seconds to wait. Spread out bulk queries accordingly.
Endpoints are data, not code — adding one is a single row in the registry.
-
Open the official Postman collection for the endpoint:
-
Find the request and read its URL — the slug is everything after
/api/stats/(e.g.revenue/monthly-ads-metrics) — and its query params (url.query) with their default values. -
Append a row to the
RAWarray insrc/endpoints.ts:{ slug: "performance/my-new-endpoint", title: "My New Endpoint", params: [param("app_id"), param("days_back", "Last 30 Days")], },
A typed tool named
get_my_new_endpointis generated automatically. (Passtool: "get_custom_name"to override the derived name.) -
npm run build && npm test && npm run smoke.
Not sure a slug/param is correct? Skip the typed entry — query_console_stats
already covers any endpoint by path.
This repo is built to be friendly to both humans and AI coding agents:
- AGENTS.md — the contract agents (and humans) should read first: commands, structure, code style, and hard boundaries.
- CodeRabbit reviews every pull request automatically (free for public repos).
@claude— mention it in an issue or PR and Claude can triage, propose fixes, or open PRs. The maintainer authenticates it with a Claude Pro/Max subscription (runclaude setup-token, add the result as theCLAUDE_CODE_OAUTH_TOKENsecret) — no metered API billing required. See.github/workflows/claude.yml.- CI runs build, tests, and the stdio smoke test on every push and PR.
See CONTRIBUTING.md and report security issues per SECURITY.md.
- overwolf-app-toolkit —
a companion, AI-agnostic toolkit for Overwolf app developers. Its
overwolf-log-doctordiagnoses a single user's support-log bundle (sync, auth, GEP, crashes), and anoverwolf-app-primerexplains how Overwolf apps work. Where this MCP answers "how's my app doing overall?", the toolkit answers "why is this user broken?" — and it can pull this MCP in (as an opt-in plugin) to check whether a finding is app-wide.
Community project. Not affiliated with or endorsed by Overwolf. Endpoint slugs and parameters are derived from Overwolf's published Postman collections and may change.
MIT © 2026 Counterwatch