Vevee Insights MCPhttps://www.vevee.org/api/mcpsk_live_ / sk_test_

Point an MCP-compatible AI agent at your app and let it see what is actually happening - subscribers, funnels, cohorts, a single user’s history. The Insights MCP server exposes twelve tools over the same data your dashboard reads. Every tool is read-only by construction - there is no write path, so there is nothing an agent can break.

What you can ask

An agent connected to the server picks the right tool from your question. A few examples:

You askTool it reaches for
“How many active subscribers do I have?”get_subscriber_stats
“Where does my signup funnel leak?”run_funnel
“What has user alice@example.com been doing?”get_user
“Which plan do most power users sit on?”list_users, sorted by events_30d
“What do people do right after onboarding?”run_path_query
“Show me alice@example.com’s last few events”list_events

Connect

The server speaks Streamable HTTP at a single endpoint, https://www.vevee.org/api/mcp, authenticated with a bearer sk_live_ or sk_test_ key - the same secret keys you already use for metering. Replace sk_live_YOUR_KEY below with a real key from API Keysin your app’s dashboard.

Claude Code (CLI)

claude mcp add --transport http vevee https://www.vevee.org/api/mcp \
  --header "Authorization: Bearer sk_live_YOUR_KEY"

Claude.ai / Claude Desktop (custom connector)

Open Settings → Connectors → Add custom connector and fill in:

FieldValue
URLhttps://www.vevee.org/api/mcp
HeaderAuthorization: Bearer sk_live_YOUR_KEY

Cursor (.cursor/mcp.json)

{
  "mcpServers": {
    "vevee": {
      "url": "https://www.vevee.org/api/mcp",
      "headers": {
        "Authorization": "Bearer sk_live_YOUR_KEY"
      }
    }
  }
}

Stdio-only clients (via mcp-remote)

Any MCP client that only speaks stdio - no direct HTTP transport - can still reach the server through mcp-remote, a small bridge process:

{
  "mcpServers": {
    "vevee": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://www.vevee.org/api/mcp",
        "--header",
        "Authorization: Bearer sk_live_YOUR_KEY"
      ]
    }
  }
}
i
Test mode is a first-class citizen here too. Swap the key for an sk_test_ one and every tool call reads sandbox data instead of live data - the same live/test split as the rest of the API, decided entirely by the key prefix. Point an agent at test mode while you build, then flip to sk_live_ for the real thing.

Tools

All twelve tools are scoped to the single app your key belongs to - there is no appId parameter to pass or get wrong. Descriptions below are copied verbatim from the tool definitions, so this table never drifts from what the agent actually sees.

ToolInputsDescription
get_app_overviewwindow?: '7' | '30' | '90', default 30App-wide usage overview for the last 7, 30, or 90 days: total metered events, total cost in cents, monthly active end users (MAU), events per day, active users per day, and the top event types. Start here to understand what is happening in the app.
get_subscriber_statswindowDays?: number, 1 to 365, default 30Subscription health: active subscribers total and per plan, plus movements inside the window (new subscriptions, cancellations, reactivations, plan changes with from/to pairs) and the churn rate (canceled / (active + canceled)).
list_plansnoneAll plans configured for this app, with their limit groups (label, unit, quota, matching rules) and billing period. Use a plan id or plan name from here to filter list_users.
list_funnelsnoneSaved funnels for this app (id, name, step count, date range). Run one with run_funnel and its id.
run_funnelfunnelId?: string, or definition?: funnel specRun a conversion funnel and get per-step entered/converted counts, conversion rates, and optional property breakdowns. Pass either the id of a saved funnel (from list_funnels) or an ad-hoc definition: { steps: [{ events: [{ kind: "event"|"feature", name }] }], conversionWindowHours, range: { kind: "last_7_days"|"last_30_days"|... } }.
run_path_querystart, maxSteps, windowHours, compressRepeats, minEdgeShare, rangeUser journey analysis: starting from one event, what did people do next? Returns a layered node/edge graph of the most common paths. Definition: { start: { name }, maxSteps (2-10), windowHours (1-168), compressRepeats, minEdgeShare (0-1), range }.
list_personsattributes?, cols?, cursor?, limit?: 1 to 100Behavioral person profiles (newest activity first), filterable by customer-defined attributes. Persons who opted out of AI personalization or are pending deletion are never returned. Use attributes like { plan: "pro" } to segment.
get_attribute_statsattributes?: equality filters, max 5Cohort distributions (“personas”): for every customer-defined person attribute, the top value buckets, long-tail count, and how many persons have no value. Optionally narrow the cohort with attribute filters first.
list_userssort?, dir?, page?, pageSize?, planId?Metering-side end users with their plan, lifetime events, 30-day events and cost, and first/last seen. Sortable and pageable. AI-opted-out and pending-deletion users are excluded.
get_useruserId: string, requiredDeep-dive on one end user: current plan and subscription, quota counters for the current period, usage broken down by event type (last 30 days), credit balances, person attributes, recent events, and subscription history. Answers questions like “what has user X been doing and what plan are they on?”.
list_eventsuserId?, eventType?, limit?: 1 to 100, offset?: 0 to 10000The raw event feed: individual metered calls, newest first. Filter by userId or eventType. Pageable with limit/offset - use limit 20 offset 0 for the first 20, offset 20 for the next 20, and so on. Prompt previews are present only when prompt logging is enabled for the app (see logPromptsEnabled in the result). AI-opted-out and pending-deletion users are excluded, so their events never appear.
get_eventeventId: string, requiredDeep-dive on one metered event: quantity, cost, match status, matched limit groups, metadata, and (when prompt logging is enabled for the app) the full prompt/response and error code.

Privacy

The MCP surface obeys the exact same privacy gates as the dashboard and the REST API - there is no separate, looser code path for agents.

  • End users who opted out of ai_personalization(or opted out entirely) never appear in person-level results, whether that’s list_persons, list_users, get_user, list_events, or get_event. Aggregates such as get_app_overview still count them - only per-person detail is withheld.
  • Persons pending deletion are excluded from person-level results the same way.
  • Prompt and response text is exposed only when prompt logging is enabled for the app (the same log_promptssetting that gates the dashboard’s event-detail view), and never for opted-out or pending-deletion users - their events are excluded from list_events and get_event entirely, so there is no path for their prompts to reach an agent.
  • Anonymous pre-login traffic is aggregate-only by construction: it has no person to attach to, so it can only ever show up in counts, never in a per-person tool result.
  • Everything described on this page is read-only. No tool accepts a write, a delete, or a key that could perform one.

Example conversation

A short, invented transcript showing an agent chain two tools together to answer a plain question:

You: How's retention looking this month, and is anything obviously broken
     in the funnel?

Agent: [calls get_subscriber_stats { windowDays: 30 }]
       -> 412 active subscribers, 37 canceled in the last 30 days
          (churn 8.2%), 19 new, 4 reactivated.

Agent: [calls run_funnel { funnelId: "fnl_signup_to_paid" }]
       -> signed_up: 1,240 entered
          onboarding_completed: 812 converted (65.5%)
          paywall_shown: 790 converted (97.3% of prior step)
          checkout_completed: 301 converted (38.1% of prior step)

Agent: Churn is a manageable 8.2% this month, but your funnel's real
       leak is onboarding: only 65.5% of signups finish it, and every
       later step converts fine once people get there. Fixing the
       onboarding drop-off would move more people than anything else
       in this funnel.
i
Related: the Insights API exposes the same data as plain REST endpoints for building your own dashboards or scripts, and the Analytics & funnels guide covers how funnels and paths are defined.