vexo-mcp
This server lets you query and analyze mobile app analytics data from the Vexo platform, providing purpose-built tools for event discovery, aggregation, and session analysis.
Discover event names (
vexo_get_event_names): Retrieve the top 50 most frequent event names within a date window — useful as a first step when exploring what events exist in your app.Count and aggregate events (
vexo_count_events): Aggregate event counts over a date range, with optional grouping by any dimension (e.g.,worker_id,country,appVersion), filtering by specific values, or restricting to certain event types. Date ranges over 31 days are automatically split and merged.View per-day event timelines (
vexo_event_timeline): Get day-by-day counts for specific events to detect when behavior changes — e.g., when a user stopped or started firing a particular event.Summarize recent sessions (
vexo_get_sessions): Retrieve recent app session summaries including duration, screen/event counts, and last screen visited — useful for distinguishing short or abandoned sessions from normal ones.Inspect raw event streams (
vexo_get_recent_events): Fetch the most recent raw events for a specific entity (e.g., a user or device), including full metadata payloads, for forensic-level investigation.Get a high-level activity overview (
vexo_overview): Retrieve totals and top breakdowns by event type, route, OS, device model, country, and app version for a date window — ideal as a first call to understand overall app traffic.
The server also handles Vexo API rate limits automatically and authenticates securely using email and password stored locally.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vexo-mcp list the top event names from the last 7 days"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Vexo MCP — Unofficial / Community
A Model Context Protocol server for the Vexo analytics Export API. Ask Claude (or any MCP client) questions about your mobile app's events — event vocabulary, aggregated counts, per-day timelines, sessions, and raw event streams — using your own Vexo login.
Unofficial / community project. Not affiliated with, sponsored by, or endorsed by Vexo. "Vexo" is a trademark of its respective owner and is used here only to describe the service this tool connects to.
What it does (and doesn't)
Vexo's Export API is a single paginated event endpoint — there is no server-side filtering or query language and a hard limit of 5 requests per minute per app. So this connector is deliberately a set of purpose-built aggregation tools, not a general "run any query" interface or a bulk CSV exporter. It downloads events for a date window and aggregates them locally.
Practical consequence: keep date windows tight. A couple of hours or days
returns quickly; a busy week can be dozens of pages and take several minutes
because of the rate limit. The server throttles itself to stay within Vexo's
limit and backs off on 429.
Related MCP server: apps-mcp
Tools
Tool | Purpose |
| Top 50 event names in a window — schema discovery. |
| Event counts over a range, optionally grouped by a dimension (any metadata key or top-level field) with cohort + event-name filters. |
| Per-day counts of specified events, optionally grouped — find the day behavior changes. |
| Recent session summaries: duration, screen/event counts, last screen. |
| The most recent raw events for one entity, with full metadata. |
| Totals + top breakdowns (event type, route, OS, device, country, app version). |
A dimension is any top-level event field (deviceId, country,
deviceSystemName, appVersion, route, sessionId, deviceModel, city,
type) or any metadata key (e.g. worker_id, user_id). Set a default
dimension with the group_key config so you don't have to pass it every time.
Installation
Option 1 — Claude Desktop (one-click)
Download
vexo-mcp.mcpbfrom Releases.Open it with Claude Desktop (or Settings → Extensions → Install Extension…).
Fill in your Vexo App ID, email, and password in the extension settings. The password is stored in your OS keychain.
Option 2 — Manual config (npx)
Add to your MCP client config (e.g. claude_desktop_config.json):
{
"mcpServers": {
"vexo": {
"command": "npx",
"args": ["-y", "@kishanssg/vexo-mcp"],
"env": {
"VEXO_APP_ID": "your-app-uuid",
"VEXO_USER": "you@example.com",
"VEXO_PASSWORD": "your-password",
"VEXO_GROUP_KEY": "worker_id",
"VEXO_API_BASE": "https://api.vexo.co",
"VEXO_DEFAULT_LOOKBACK_DAYS": "30"
}
}
}
}VEXO_APP_ID, VEXO_USER, and VEXO_PASSWORD are required; the rest are optional.
Authentication
Vexo's Export API authenticates with email + password only — it exchanges
them for a short-lived token via POST /users/implicit/login. Vexo does not
issue export API keys, so there is no key-auth mode. (The SDK key embedded in an
app for sending events is unrelated and won't work here.) Your credentials are
used solely to obtain that token; they are never logged or bundled.
Example prompts
"Using vexo, list the top event names from 2026-06-01 to 2026-06-07."
"Compare
worker_shift_feed_viewedcounts for workers 54, 111, and 2716 over the last two weeks.""Show a daily timeline of
worker_shift_feed_viewedfor worker 54 from 2026-05-01 to 2026-06-01 — when did it stop?""Give me the 20 most recent sessions for worker 54 and flag the short ones."
"Pull the last 10 raw events for worker 54."
Development
git clone https://github.com/kishanssg/vexo-mcp.git
cd vexo-mcp
npm install
npm run build # compile TypeScript -> build/
npm test # vitest unit tests (no credentials needed)
npm run inspector # exercise tools with the MCP InspectorBuild the installable bundle:
npm run mcpb:build # produces vexo-mcp.mcpbSecurity
No secrets in the bundle. Credentials come only from your config / environment and (in Claude Desktop) live in your OS keychain.
Read-only. It only reads events via Vexo's Export API; it never writes.
Privacy Policy
This connector collects no data. It has no backend, telemetry, or analytics.
Your Vexo credentials and queries go directly from your machine to the Vexo API
you configure (default https://api.vexo.co); results return only to your MCP
client. Credentials are stored solely in your OS keychain (or your own config)
and are never transmitted to the author or any third party; event data exists
only transiently in memory while a tool call is answered. Full policy:
PRIVACY.md.
License
MIT — see LICENSE. Unofficial community project; not affiliated with Vexo.
Available Tools
6 toolsvexo_count_eventsARead-only
Aggregate event counts over a date range, optionally grouped by a dimension. The workhorse for cohort comparison. Ranges > 31 days are split & merged automatically (deduped by event id).
A "dimension" is any top-level field (deviceId, country, deviceSystemName, appVersion, route, sessionId, deviceModel, city, type) OR any metadata key (e.g. "worker_id", "user_id").
Inputs: start_date, end_date: ISO dates (end inclusive of the day). group_by: OPTIONAL dimension to group by, e.g. "worker_id". If omitted, the server's configured group key is used; if none, results are totaled by event_name only. filter_values: OPTIONAL list restricting group_by to these values, e.g. ["54","111","2716"] to compare a specific cohort. Max 200. filters: OPTIONAL extra key/value constraints, e.g. {"deviceSystemName":"iOS"}. event_names: OPTIONAL list to restrict which events are counted.
Returns: { window, group_by, rows:[{group?, event_name, count}], truncated, total_count? }. Sorted by group then count desc. Groups/events with zero matches are absent. On failure: { error }.
Inputs: start_date (required), end_date (required), group_by, filter_values, +2 more.
vexo_event_timelineARead-only
Per-day timeline of specific events. Use to detect cutover dates — the day a group STOPS (or starts) firing an event. event_names is REQUIRED to bound output. Counts are bucketed by calendar day (UTC). Ranges > 31 days auto-split.
Inputs: event_names: REQUIRED list, e.g. ["worker_shift_feed_viewed","screen_view"]. start_date, end_date: ISO dates (end inclusive). group_by: OPTIONAL dimension, e.g. "worker_id" (defaults to server group key). filter_values: OPTIONAL list restricting group_by to these values. Max 200. filters: OPTIONAL extra key/value constraints. granularity: only "day" is supported.
Returns: { window, granularity, group_by, rows:[{group?, date, event_name, count}], truncated, total_count? }. Sorted by group, date, event_name. Days with no events are absent (a gap == no activity). On failure: { error }.
Inputs: event_names (required), start_date (required), end_date (required), group_by, +3 more.
vexo_get_event_namesARead-only
Discover the event-name vocabulary in a date window (schema discovery). Scans ALL Vexo events in [start_date, end_date] and returns the top 50 event names by frequency. Use this FIRST when you don't know which event names exist. event_name = metadata.name if present, else the event's top-level "type".
Inputs: start_date: ISO date "YYYY-MM-DD" (or full ISO datetime), e.g. "2026-06-01". end_date: ISO date, e.g. "2026-06-07". MUST be <= 31 days after start_date (Vexo caps a single range at ~31 days). Date-only end is inclusive.
Returns: { window:{start,end,days}, total_events, distinct_event_names, event_names:[{event_name, count}, ... up to 50, desc] }. On failure: { error }.
Inputs: start_date (required), end_date (required).
vexo_get_recent_eventsARead-only
Forensic dive into one entity's most recent raw events (newest first). Use after the aggregate tools point you at a specific entity and you need to read the actual event stream — names, screens, sessions, payloads.
Scans the configured lookback window (default 30 days) unless start_date/ end_date are given. Identify the entity with the "filters" selector.
Inputs: filters: REQUIRED key/value selector identifying the entity, e.g. {"worker_id":"54"} or {"deviceId":"abc-123"}. n: number of most recent events. Default 10, max 50. start_date, end_date: OPTIONAL ISO dates to override the lookback window.
Returns: { filters, window, rows:[{timestamp, event_name, screen, session_id, metadata}], truncated, total_count? }. On failure: { error }.
Inputs: filters (required), n, start_date, end_date.
vexo_get_sessionsARead-only
Summarize the most recent app sessions, grouped by an entity. Use to tell a "bailed out" session (short, few screens) apart from an "event-poor" session (normal length but missing data events).
By default scans the configured lookback window (default 30 days) ending now; pass start_date/end_date to override. Groups events by sessionId, then returns the N most recent sessions per group value (most recent first).
Inputs: group_by: OPTIONAL entity dimension (defaults to server group key, else "deviceId"), e.g. "worker_id". filter_values: OPTIONAL list restricting group_by to these values. Max 200. filters: OPTIONAL extra key/value constraints. n_sessions_per_group: default 20, max 50. start_date, end_date: OPTIONAL ISO dates to override the lookback window.
Returns: { window, group_by, rows:[{group?, session_id, start, end, duration_s, screen_count, event_count, last_screen}], truncated, total_count? }. screen_count = # of screen_view events. On failure: { error }.
Inputs: group_by, filter_values, filters, n_sessions_per_group, +2 more.
vexo_overviewARead-only
High-level breakdown of activity in a date window. Good first call to understand an app's traffic. Scans all events in [start_date, end_date] (<= 31 days) and returns totals plus top breakdowns.
Inputs: start_date, end_date (ISO dates, end inclusive, <=31 days apart).
Returns: { window, total_events, unique_sessions, unique_devices, by_event_type:[{value,count}], top_routes:[...], by_os:[...], top_devices:[...], by_country:[...], by_app_version:[...] } (each top list capped at 15). On failure: { error }.
Inputs: start_date (required), end_date (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool targets a distinct analytical task: aggregate counting, per-day timelines, event name discovery, raw event inspection, session summaries, and top-level overview. No two tools have overlapping purposes.
All tools follow the consistent 'vexo_verb_noun' pattern (e.g., count_events, event_timeline, get_event_names). No deviations or mixed conventions.
With 6 tools, the server is well-scoped for Vexo event analytics: discovery, aggregates, timelines, raw events, sessions, and overview. Each tool earns its place without being excessive.
The tool set covers the full read-analytics workflow: discover event names, get overview, count events with grouping, per-day timelines, raw events by entity, and session summaries. Minor gap: no direct cohort comparison across dimensions, but count_events with group_by handles it effectively.
Maintenance
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Analytics for MCP servers. Query your tool calls, first-call success, retries and schema cost.
Official MCP server for Lovable, the AI-powered full-stack app builder.
Official MCP server for Qase — manage test cases, runs, suites, defects via AI tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for xeve.io that enables AI assistants to query personal analytics including productivity, coding, health, music, and GitHub activity.15 npmMIT
- AlicenseNot gradedqualityBmaintenanceUnofficial MCP server for the Apps API that enables managing customers, payments, plans, coupons, and Discord integration through natural language.48 npm2MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that provides product and web analytics capabilities, allowing AI coding assistants to query funnels, retention, trends, feature flags, A/B tests, and more in natural language.4MIT
- AlicenseAqualityFmaintenanceUnofficial MCP server that lets AI agents query Aptabase analytics using cookie-authenticated dashboard endpoints, providing tools for metrics, events, and sessions.171MIT