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-mcplist 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: xeve-mcp-server
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes | ||
| group_by | No | dimension to group by, e.g. "worker_id" | |
| filter_values | No | restrict group_by to these values | |
| filters | No | extra constraints, e.g. {"country":"United States"} | |
| event_names | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description extensively covers behavioral traits beyond annotations: automatic range splitting with dedup, definition of 'dimension' (including metadata keys), handling of optional parameters, output format (window, group_by, rows, truncated, total_count), sorting, and error responses. Annotations already declare readOnlyHint and openWorldHint, and the description adds significant context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with a summary sentence, bullet inputs, and output format. Slightly verbose but each section adds value. Could be tightened slightly but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and complex nested parameters, the description fully covers inputs, output shape (with optional fields), sorting, and error case. It leaves no major gaps for an agent to understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, but the description provides detailed semantics for all parameters: ISO date format with inclusive end, optional group_by falling back to server config, filter_values max 200, filters with examples, and event_names. It also explains the dimension concept comprehensively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool aggregates event counts over a date range with optional grouping, explicitly calling it 'the workhorse for cohort comparison,' which distinguishes it from sibling tools like vexo_event_timeline or vexo_get_recent_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Strong usage context is provided: designed for cohort comparison, automatic splitting of ranges >31 days. However, it does not explicitly state when not to use this tool or compare to alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| event_names | Yes | required, bounds the output | |
| start_date | Yes | ||
| end_date | Yes | ||
| group_by | No | ||
| filter_values | No | ||
| filters | No | ||
| granularity | No | day |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds valuable behavioral details: UTC bucketing, auto-split for ranges over 31 days, meaning of gaps (no events), and error response format. These go beyond annotations and clarify important aspects not visible in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear purpose sentence, followed by use case, parameter list, and return output. It is concise but thorough, with each sentence adding value. A minor redundancy exists (event_names requirement stated twice) but does not detract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides a detailed return structure including fields like window, granularity, group_by, rows, truncated, and total_count. It explains sorting and gap semantics. Missing precision on optional total_count and truncation behavior, but overall complete for a tool of moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 14% schema description coverage, the description compensates by explaining each parameter's semantics: event_names as required list with example, start/end_date as ISO dates (end inclusive), group_by defaulting to server key, filter_values with max 200, and granularity limited to 'day'. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it provides a per-day timeline of specific events for detecting cutover dates. It distinguishes itself from siblings like vexo_count_events (which counts events without bucketing) and vexo_get_recent_events (which returns raw events) by emphasizing the day-level aggregation and cutover detection use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends using this tool for cutover detection and notes that event_names is required. While it does not mention alternatives or when not to use it, the specificity of the use case and required parameters provide strong guidance. A slight improvement would be to contrast with sibling tools explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ISO date, e.g. "2026-06-01" | |
| end_date | Yes | ISO date <=31d after start, e.g. "2026-06-07" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant context beyond annotations: explains what events are scanned (ALL in date range), output limit (top 50 by frequency), derivation of event_name, date range constraints (max 31 days), inclusive end behavior, and failure case. No contradiction with readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise and well-structured: purpose sentence, usage hint, parameter explanations, return format, and error case. Every sentence adds value; no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Completely covers what an agent needs: purpose, when to use, parameter details with constraints, return structure, and failure mode. Despite no output schema, the description provides full return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds format examples ('YYYY-MM-DD'), constraint (end <=31 days after start), and clarifies inclusive end for date-only inputs. Provides additional meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool's purpose: 'Discover the event-name vocabulary in a date window (schema discovery).' It distinguishes from siblings by focusing on name discovery (vs counting, timeline, recent events, sessions, overview).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance: 'Use this FIRST when you don't know which event names exist.' This tells the agent when to invoke the tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | entity selector, e.g. {"worker_id":"54"} | |
| n | No | ||
| start_date | No | ||
| end_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true (read-only) and openWorldHint=true. The description adds important behavioral details beyond annotations: it scans a default 30-day lookback window, allows override via start_date/end_date, limits n to max 50, and describes the return format including truncated and total_count. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise and well-structured: it starts with the core purpose, then provides usage context, a bulleted list of inputs with defaults, and a return format summary. Every sentence is informative and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, nested objects, and no output schema, the description is complete. It covers purpose, when to use, parameter details with examples, return structure (including truncated and total_count), and failure case. An agent has all necessary information to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 25% (only filters has a description). The description compensates fully: explains filters is a required key/value selector with examples, n is number of events (default 10, max 50), start_date/end_date are optional ISO dates. This adds substantial meaning beyond the schema, ensuring an agent can use parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Forensic dive into one entity's most recent raw events (newest first).' It uses a specific verb ('get') and resource ('recent events' for an entity). It also distinguishes from siblings by noting it is used after aggregate tools point to a specific entity, differentiating it from tools like vexo_count_events or vexo_overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use: 'Use after the aggregate tools point you at a specific entity and you need to read the actual event stream.' It implies not to use it for aggregated views. While it does not explicitly name sibling tools as alternatives, the context is sufficient for an AI agent to understand the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| group_by | No | ||
| filter_values | No | ||
| filters | No | ||
| n_sessions_per_group | No | ||
| start_date | No | ||
| end_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and openWorldHint=true, and the description adds significant behavioral details: grouping by sessionId, returning N most recent per group, max limits, and the return structure including failure case. This adds substantial value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points for inputs and return fields, making it easy to parse. While it is detailed, every sentence adds value, though it could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (6 params, no output schema), the description fully covers inputs, return format, usage context, and failure handling. It is complete and provides all necessary information for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explicitly documents all six parameters with defaults, constraints, and examples (e.g., group_by defaults to server group key, n_sessions_per_group defaults to 20, max 50). This fully compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it summarizes recent app sessions grouped by an entity, distinguishing between 'bailed out' and 'event-poor' sessions. It uses specific verbs and differentiates from sibling tools like vexo_count_events and vexo_get_recent_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use it (to tell session types apart) and mentions default lookback window and optional date override. However, it does not explicitly list when not to use it or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| start_date | Yes | ||
| end_date | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes scanning all events in date window (<=31 days), returning totals and top breakdowns, and the return shape including cap at 15 per top list and failure mode. Adds behavioral details beyond annotations (readOnlyHint, openWorldHint).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two paragraphs with purposeful sentences. Front-loaded with purpose and usage. No fluff, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Fully explains purpose, behavior, parameter constraints, return shape, and failure mode. No gaps given the tool's simplicity and lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema parameters have 0% description coverage, but description explains they are ISO dates, end inclusive, and max 31 days apart. This adds essential semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'High-level breakdown of activity in a date window' and 'Good first call to understand an app's traffic', specifying verb (overview) and resource (activity in date window). Distinguishes from siblings like vexo_count_events and vexo_event_timeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends as a first call for understanding traffic. Implicitly suggests when not to use (e.g., for detailed event counts or timelines, use other tools). No explicit exclusions, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
vexo_count_events - First observed
vexo_event_timeline - First observed
vexo_get_event_names - First observed
vexo_get_recent_events - First observed
vexo_get_sessions - First observed
vexo_overview
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.
- LovableOAuthdev.lovable
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 gradedqualityBmaintenanceMCP server for Umami Analytics that provides read-only tools to query website stats, events, sessions, reports, and more, enabling natural language analytics queries.16 npm3MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for xeve.io that enables AI assistants to query personal analytics including productivity, coding, health, music, and GitHub activity.4 npmMIT
- AlicenseNot gradedqualityBmaintenanceUnofficial MCP server for the Apps API that enables managing customers, payments, plans, coupons, and Discord integration through natural language.23 npm2MIT
- AlicenseNot gradedqualityAmaintenanceMCP 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.3MIT