MCP-Server

convalytics

io.github.Dan-Cleary/convalytics
Business & Betrieb Daten & Analytik Öffentlich und erreichbar MCP 2026-07-28

Was dieses MCP kann

Provides read-only product analytics for Convex applications, including page views, events, funnels, user activity, traffic sources, and weekly performance summaries.

compute_funnel
Run a funnel over a time window and return per-step visitor count, conversion from previous step, conversion from start, and average time to convert between steps. Returns `truncated` flags if the scan cap was hit.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['funnelId'], 'properties': {'since': {'type': 'number', 'description': 'Start of window as unix milliseconds. Defaults to 7 days ago.'}, 'until': {'type': 'number', 'description': 'End of window as unix milliseconds. Defaults to now.'}, 'funnelId': {'type': 'string'}}, 'additionalProperties': False}
create_funnel
Create a new funnel on a project. Steps are 2–10 ordered events or pageview paths. conversionWindowMs caps how long a visitor has between consecutive steps (default 7 days); this is the step-to-step limit, without which a funnel is just event co-occurrence. Returns { id } on success.
Eingabeschema
{'type': 'object', 'required': ['project', 'name', 'steps'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable name.'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'match'], 'properties': {'kind': {'enum': ['event', 'pageview'], 'type': 'string', 'description': "'event' for a custom analytics.track() event, 'pageview' for a page-path match."}, 'label': {'type': 'string', 'description': 'Optional friendly display name.'}, 'match': {'type': 'string', 'description': "Event name (for kind='event') or exact pageview path (for kind='pageview')."}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 2, 'description': 'Ordered list of 2–10 steps. Visitors must hit them in order.'}, 'project': {'type': 'string', 'description': "Project name (case-insensitive, e.g. 'slopbench') or project id from list_projects."}, 'description': {'type': 'string', 'description': 'Optional longer description.'}, 'conversionWindowMs': {'type': 'number', 'description': 'Max ms between consecutive steps. Default 7 days (604800000). Bounds: 60000 (1 min) to 7776000000 (90 days).'}}, 'additionalProperties': False}
delete_funnel
Soft delete a funnel. The row is retained with status='deleted' and excluded from list/get/compute. Idempotent — calling twice is a no-op. Use if the funnel is obsolete; the record is kept for audit and cannot be undone from MCP.
Destruktiv Idempotent
Eingabeschema
{'type': 'object', 'required': ['funnelId'], 'properties': {'funnelId': {'type': 'string'}}, 'additionalProperties': False}
events_count
Count CUSTOM PRODUCT events for a specific project in a time window, optionally filtered to one event name and/or one user. Custom events are emitted by explicit analytics.track() calls in app code (signup_completed, payment_succeeded, etc.). This does NOT count page views — use pageviews_count or weekly_digest for those. Returns count, unique visitors, and a `truncated` flag if the scan hit the maximum scan size.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['project'], 'properties': {'name': {'type': 'string', 'description': "Optional event name to filter by (e.g. 'signup_completed'). If omitted, counts all custom events in the window. Do NOT pass 'page_view' here — page views are in a separate table."}, 'user': {'type': 'string', 'description': 'Optional. Filter to one visitor/user. Accepts userEmail (case-insensitive) or visitorId (exact). For the full per-user snapshot prefer user_activity.'}, 'since': {'type': 'number', 'description': 'Start of window as unix milliseconds. Defaults to 7 days ago.'}, 'until': {'type': 'number', 'description': 'End of window as unix milliseconds. Defaults to now.'}, 'project': {'type': 'string', 'description': "Project name (case-insensitive, e.g. 'slopbench') or project id from list_projects."}}, 'additionalProperties': False}
get_funnel
Return the full definition of one funnel by id: name, description, ordered steps, and conversion window.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['funnelId'], 'properties': {'funnelId': {'type': 'string', 'description': 'Funnel id from list_funnels or create_funnel.'}}, 'additionalProperties': False}
get_usage
Return the current month's custom-event usage, monthly quota, retention days, and plan name for the team.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
list_funnels
List active funnels defined on a project. A funnel is a saved ordered sequence of steps (events or pageview paths) that Convalytics computes step-by-step conversion for. Soft-deleted funnels are excluded.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['project'], 'properties': {'project': {'type': 'string', 'description': "Project name (case-insensitive, e.g. 'slopbench') or project id from list_projects."}}, 'additionalProperties': False}
list_projects
List all Convalytics projects on the team this token belongs to. Useful when the agent needs to confirm the project it's querying against. No arguments.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {}, 'additionalProperties': False}
pageviews_count
Count page views for a specific project in a time window. Page views are the automatic hits captured by the browser script tag (separate from custom events). Use this for web-traffic questions like 'how many pageviews in the last 24 hours'. Default window is the last 7 days. Pass `user` to scope to one visitor.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['project'], 'properties': {'user': {'type': 'string', 'description': 'Optional. Filter to one visitor/user. Accepts userEmail (case-insensitive) or visitorId (exact). For the full per-user snapshot prefer user_activity.'}, 'since': {'type': 'number', 'description': 'Start of window as unix milliseconds. Defaults to 7 days ago.'}, 'until': {'type': 'number', 'description': 'End of window as unix milliseconds. Defaults to now.'}, 'project': {'type': 'string', 'description': "Project name (case-insensitive, e.g. 'slopbench') or project id from list_projects."}}, 'additionalProperties': False}
recent_events
Return the most recent custom events for a specific project, optionally filtered to one event name and/or one user. PII (userEmail, userName, props) is redacted by default; pass redact: false to include them.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['project'], 'properties': {'name': {'type': 'string', 'description': "Optional event name to filter by (e.g. 'signup_completed'). Omit to return events of any name."}, 'user': {'type': 'string', 'description': 'Optional. Filter to one visitor/user. Accepts userEmail (case-insensitive) or visitorId (exact). For the full per-user snapshot prefer user_activity.'}, 'limit': {'type': 'number', 'description': 'Maximum number of events to return. Default 20, max 100.'}, 'redact': {'type': 'boolean', 'description': 'If true (default), userEmail/userName are null and props is {}. Set to false to include them.'}, 'project': {'type': 'string', 'description': "Project name (case-insensitive, e.g. 'slopbench') or project id from list_projects."}}, 'additionalProperties': False}
top_pages
Return the top pages for a specific project, ranked by views in a time window. Default window is the last 7 days. Use list_projects first if you don't know the project name. Returns path, views, uniqueVisitors, and percentage of total views for each page. Pass `user` to see pages a specific visitor hit.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['project'], 'properties': {'user': {'type': 'string', 'description': 'Optional. Filter to one visitor/user. Accepts userEmail (case-insensitive) or visitorId (exact). For the full per-user snapshot prefer user_activity.'}, 'limit': {'type': 'number', 'description': 'Maximum number of pages to return. Default 20, max 50.'}, 'since': {'type': 'number', 'description': 'Start of window as unix milliseconds. Defaults to 7 days ago.'}, 'until': {'type': 'number', 'description': 'End of window as unix milliseconds. Defaults to now.'}, 'project': {'type': 'string', 'description': "Project name (case-insensitive, e.g. 'slopbench') or project id from list_projects."}}, 'additionalProperties': False}
top_referrers
Return the top referring hosts for a specific project, ranked by visit count in a time window. Includes '(direct)' for visits with no referrer. Default window is the last 7 days.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['project'], 'properties': {'limit': {'type': 'number', 'description': 'Maximum number of referrers to return. Default 10, max 50.'}, 'since': {'type': 'number', 'description': 'Start of window as unix milliseconds. Defaults to 7 days ago.'}, 'until': {'type': 'number', 'description': 'End of window as unix milliseconds. Defaults to now.'}, 'project': {'type': 'string', 'description': "Project name (case-insensitive, e.g. 'slopbench') or project id from list_projects."}}, 'additionalProperties': False}
update_funnel
Patch an existing funnel. Any subset of name/description/steps/conversionWindowMs. Refuses updates on deleted funnels.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['funnelId'], 'properties': {'name': {'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'match'], 'properties': {'kind': {'enum': ['event', 'pageview'], 'type': 'string', 'description': "'event' for a custom analytics.track() event, 'pageview' for a page-path match."}, 'label': {'type': 'string', 'description': 'Optional friendly display name.'}, 'match': {'type': 'string', 'description': "Event name (for kind='event') or exact pageview path (for kind='pageview')."}}, 'additionalProperties': False}, 'maxItems': 10, 'minItems': 2}, 'funnelId': {'type': 'string'}, 'description': {'type': 'string'}, 'conversionWindowMs': {'type': 'number'}}, 'additionalProperties': False}
user_activity
Composite snapshot of a specific user's activity on a project. Returns an identity block (visitorId, userEmail, userName, firstSeen, lastSeen), total pageviews, total custom events, session count, top pages this user visited, their most-fired event names, and their 20 most recent events with props. Use this for 'how is dancleary54@gmail.com using my app?' style questions — one call, full picture. For ad-hoc drill-down (just a count, just recent events) pass `user` to the individual tools instead. Default window is the last 7 days.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['project', 'user'], 'properties': {'user': {'type': 'string', 'description': "User identifier. Accepts userEmail (case-insensitive, e.g. 'dan@example.com') or visitorId (the exact string passed as userId on the original track() call)."}, 'since': {'type': 'number', 'description': 'Start of window as unix milliseconds. Defaults to 7 days ago.'}, 'until': {'type': 'number', 'description': 'End of window as unix milliseconds. Defaults to now.'}, 'project': {'type': 'string', 'description': "Project name (case-insensitive, e.g. 'slopbench') or project id from list_projects."}}, 'additionalProperties': False}
weekly_digest
Composite snapshot of a project's web analytics over a lookback window. Returns unique visitors, pageviews, sessions, bounce rate, average session duration, top 5 pages, top 5 referrers, total custom events, and top 5 event names. Includes period-over-period comparison against the prior equal-length window unless compare: false. Prefer this over chaining top_pages + top_referrers + events_count when the agent just wants to report on the week.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['project'], 'properties': {'days': {'type': 'number', 'description': 'Lookback window in days, 1 to 90. Default 7.'}, 'compare': {'type': 'boolean', 'description': 'Include period-over-period comparison against the prior equal-length window. Default true. Set false for faster response when only current numbers matter.'}, 'project': {'type': 'string', 'description': "Project name (case-insensitive, e.g. 'slopbench') or project id from list_projects."}}, 'additionalProperties': False}
Hinzugefügt
compute_funnel
17. September 2026 12:41
Hinzugefügt
delete_funnel
17. September 2026 12:41
Hinzugefügt
update_funnel
17. September 2026 12:41
Hinzugefügt
create_funnel
17. September 2026 12:41
Hinzugefügt
get_funnel
17. September 2026 12:41
Hinzugefügt
list_funnels
17. September 2026 12:41
Hinzugefügt
weekly_digest
17. September 2026 12:41
Hinzugefügt
user_activity
17. September 2026 12:41
Hinzugefügt
recent_events
17. September 2026 12:41
Hinzugefügt
events_count
17. September 2026 12:41
Hinzugefügt
pageviews_count
17. September 2026 12:41
Hinzugefügt
top_referrers
17. September 2026 12:41
Hinzugefügt
top_pages
17. September 2026 12:41
Hinzugefügt
get_usage
17. September 2026 12:41
Hinzugefügt
list_projects
17. September 2026 12:41