# Mixpanel MCP MCP Server

> **Mixpanel MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Mixpanel MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/mixpanel-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

Analyze product and user behavior data with Mixpanel’s MCP server. Query events, funnels, retention, trends, cohorts, and user profiles to uncover actionable product insights.

---

## Details

- Server ID: `mixpanel-mcp`
- Version: 3.3.0
- Tools: 66
- Authentication: OAuth, managed by MewCP
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — Mixpanel MCP has to be in the toolset
first. In order:

1. Add Mixpanel MCP to your toolset at https://mewcp.com/mcp/mixpanel-mcp
2. Connect your Mixpanel MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Copy your MewCP API key from the dashboard (Developer)
4. Configure your client with the snippet for it below

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (66)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `Get-Projects` _(read)_ — If you have not yet called Get-Business-Context this conversation, call it FIRST — it may resolve project nicknames, acronyms, or org-specific terms in the…
- `Get-Project-Token` _(read)_ — A project's Mixpanel tracking token — the value an SDK is initialized with to send events to api.mixpanel.com/track. Use it when instrumenting tracking. This…
- `Get-Live-Events` _(read)_ — Recent events streaming into a project, newest first, with event name, time, and distinct ID. Use it to confirm newly instrumented events are arriving, or to…
- `Get-Events` _(read)_ — Get events for a Mixpanel project. Two lookup modes (mutually exclusive): - event_names: Look up specific events by exact name. Lightweight server-side filter.…
- `Edit-Event` _(destructive)_ — Use contact_emails or team_contact_names for ownership. Set verified=True to verify/approve events, hidden=True to hide from UI, dropped=True to deprecate.
- `Bulk-Edit-Events` _(destructive)_ — Edit multiple events at once. Supports two modes: 1. Uniform fields (applied to ALL events): hidden, verified, dropped, tags, contact_emails,…
- `List-Properties` _(read)_ — List properties for a Mixpanel project. Returns name and type by default. Two lookup modes (mutually exclusive): - names: Look up specific properties by exact…
- `Get-Property-Values` _(read)_ — Get values for one or more properties, returned as a table. properties: one or more property names. With a single property the result is a one-column table of…
- `Edit-Property` _(destructive)_ — Set sensitive=True for PII data classification. Set example_value to populate the example shown in Lexicon.
- `Bulk-Edit-Properties` _(destructive)_ — Edit multiple properties at once. Supports two modes: 1. Uniform fields (applied to ALL properties): hidden, dropped, sensitive, tags. 2. Per-property fields…
- `Create-Custom-Property` _(write)_ — Create a formula-based custom property (a computed event or user property) in a project. Define it with a `display_formula` expression that references named…
- `Update-Custom-Property` _(write)_ — Update an existing formula-based custom property. Partial update: pass only the fields you want to change (`name`, `description`, `display_formula`,…
- `Get-Custom-Property` _(read)_ — Get a custom property by id, including its full definition (behavior or display_formula + composed_properties). Use this before Update-Custom-Property to see…
- `Get-Lookup-Table` _(read)_ — Read a lookup table by id or name, or list all lookup tables. Provide `data_group_id` or `name` to get one table's schema (columns), row count, and a capped…
- `Create-Lookup-Table` _(write)_ — Create a lookup table from rows. Pass `rows` as a list of {column: value} objects; one column is the primary key (`primary_key_column`, default "Primary Key")…
- `Update-Lookup-Table` _(destructive)_ — Update a lookup table with a row delta and/or edit name/description. Send only the cells you want to change — you do NOT need to read or resend the whole…
- `Create-Tag` _(write)_ — Create a tag for organizing events and properties in Lexicon.
- `Get-Issues` _(read)_ — Get all data quality issues for a Mixpanel project. Returns rich context with human-readable descriptions, event/property names, timestamps, and variance…
- `Dismiss-Issues` _(destructive)_ — Dismiss data quality issues matching natural criteria - no need to look up IDs first. Specify what to dismiss using event names, property names, dates, and…
- `Rename-Tag` _(write)_ — Rename an existing tag in a Mixpanel project. The new name must be unique within the project (max 175 characters). This updates all events and properties…
- `Delete-Tag` _(destructive)_ — Delete a tag from a Mixpanel project. This removes the tag from all associated events and properties. Use with caution as this operation cannot be undone.
- `Get-Lexicon-URL` _(read)_ — Return a Mixpanel Lexicon transformations detail URL for an event or property. Provide either event or property along with project_id. If workspace_id is…
- `Get-User-Replays-Data` _(read)_ — Get session replays information. Provide either a distinct_id (with from_date and to_date) to find all replays for a user, OR a list of specific replay_ids (up…
- `Get-Query-Schema` _(read)_ — Get the full instructions and JSON schema for building a full Mixpanel query. Call this to learn all available fields and options for the 'report' parameter in…
- `Get-Report` _(read)_ — Retrieve a saved report's metadata from a Mixpanel project. Optionally include the report results if it's a queryable report type. Returns report metadata (id,…
- `Run-Query` _(read)_ — Run a single analytics query and return its results directly. Use this whenever the user requests a chart, a report, a metric, explore a behavior or root…
- `Display-Query` _(read)_ — Display the interactive chart widget for a previously-run query. Takes a query_id returned by Run-Query and render results in the MCP App visualization widget.
- `Create-Dashboard` _(write)_ — Create a Mixpanel dashboard that combines multiple reports and text into a single view. Use when the user asks for a "dashboard," "board", or requests to save…
- `List-Dashboards` _(read)_ — Prefer Search-Entities with entity_types=['dashboard'] instead, it offers more flexibility and efficiency. Returns a list of all the dashboards in the project.…
- `Get-Dashboard` _(read)_ — Set include_layout=True to get full layout with cell/row IDs (needed for Update-Dashboard). Layout format: [[row_id, [[cell_id, type, extra], ...]], ...].
- `Update-Dashboard` _(destructive)_ — Call Get-Dashboard with include_layout=True first to get cell/row IDs. - To update a report cell query_id, call Run-Query first. - To add rows or cells, use…
- `Duplicate-Dashboard` _(write)_ — Create a copy of an existing dashboard with all its contents. Optionally override the title and description of the new dashboard.
- `Delete-Dashboard` _(destructive)_ — Delete a dashboard. Always confirm with the user before proceeding. Use List-Dashboards or Get-Dashboard to find the dashboard ID.
- `List-Feature-Flags` _(read)_ — List and search feature flags in a project. Filter by status, key, name, creator, or creation date. Use Get-Feature-Flag for full configuration.
- `Get-Feature-Flag` _(read)_ — Get full configuration for a specific feature flag. Returns metadata, variants, rollout rules, experiment link, and UI URL. For listing flags, use…
- `Create-Feature-Flag` _(write)_ — Create a feature flag in the current project. `project_id` and `workspace_id` are auto-injected from the caller's session — pass any int and the values you…
- `Update-Feature-Flag` _(write)_ — Update flag configuration, status, or archive state. For rollout / kill-switch / archival decisions — including the staged-rollout cadence, when to use status…
- `Get-Feature-Flag-Setup-Guidance` _(read)_ — Returns best-practice guidance for creating and configuring a Mixpanel feature flag. Call this when the user is creating, configuring, or troubleshooting a…
- `Get-Feature-Flag-Lifecycle-Guidance` _(read)_ — Returns best-practice guidance for managing a Mixpanel feature flag after creation — staged rollout, kill-switch, hygiene/cleanup, archival, exposure tracking,…
- `List-Experiments` _(read)_ — List and search experiments in a project. Filter by status, name (case-insensitive substring match), creator, creation date, or tags. Use Get-Experiment for…
- `Get-Experiment` _(read)_ — Get full experiment configuration and (optionally) fresh live results. Returns metadata, variants, metrics (with IDs, type, and direction), cached data, and UI…
- `Create-Experiment` _(write)_ — Create an experiment (in DRAFT status) in the current project. For setup decisions (hypothesis writing, metric selection, sample sizing, testing model, end…
- `Update-Experiment` _(write)_ — Update experiment configuration or manage its lifecycle. Lifecycle actions (set action param): - "launch": DRAFT→ACTIVE. Enables linked flag. - "conclude":…
- `Explain-Experiment-Health-Check` _(read)_ — Explain why an experiment's health check is firing — or confirm it isn't — and recommend a next action. Supports two checks: - `health_check_kind="srm"` —…
- `Get-Experiment-Setup-Guidance` _(read)_ — Returns best-practice guidance for designing a Mixpanel experiment before launch. Call this when the user is creating, configuring, or troubleshooting an…
- `Get-Experiment-Results-Interpretation-Guidance` _(read)_ — Returns best-practice guidance for interpreting Mixpanel experiment results and making ship/iterate/kill decisions. Call this when the user is analyzing,…
- `Run-Experiment-Pre-Launch-Checks` _(read)_ — Cross-references a draft experiment's configuration against a canonical list of pre-launch pitfalls and returns a structured PitfallReport. Call this at the…
- `Search-Prior-Experiments` _(read)_ — Search the project's experiments store for prior tests on the same feature, metric, or hypothesis. Returns up to ``max_matches`` ranked matches with similarity…
- `Describe-Cohort-Schema` _(read)_ — Return the schema for the `definition` parameter accepted by Create-Cohort and Update-Cohort. Call this before authoring a cohort definition for the first time…
- `Create-Cohort` _(write)_ — Create a new Mixpanel cohort. A cohort is a saved group of users matching a set of criteria. Pass a `definition` dict matching the CohortDefinition schema…
- `Get-Cohort` _(read)_ — Retrieve a Mixpanel cohort by ID. Returns the cohort's metadata (name, description, count, is_visible, verified, creator, updated_at) and its definition in the…
- `List-Cohorts` _(read)_ — List all cohorts in a Mixpanel project. Returns a lightweight list of cohort headers (id, name, description, count, verified). Use the optional `query`…
- `Update-Cohort` _(write)_ — Update an existing Mixpanel cohort. All fields (name, description, definition, is_visible) are optional. Only the provided fields will be updated; omitted…
- `Delete-Cohort` _(destructive)_ — Delete a Mixpanel cohort. WARNING: This action is destructive and cannot be undone. Always confirm with the user before deleting a cohort. The webapp will…
- `List-Metrics` _(read)_ — List all saved metrics in a project. Returns metric IDs, names, types, descriptions, and verified status. Use before creating experiments to find reusable…
- `Get-Metric` _(read)_ — Get full definition for a saved metric. Returns complete metric structure (events, formulas, filters, aggregation). Use to inspect, copy, or verify metric…
- `Create-Metric` _(write)_ — Create a saved metric (behavior or formula) for reuse across experiments. Types: - "metric": Single event behavior (count, unique users, DAU, etc.) -…
- `Update-Metric` _(write)_ — Update saved metric's name, definition, or description. At least one field required. Warning: affects all experiments using this metric. Consider creating new…
- `Search-Entities` _(read)_ — Search entities in a Mixpanel project: dashboards, reports, experiments, feature flags, metric trees, playlists, and heat maps. query: can be empty to browse…
- `Get-Business-Context` _(read)_ — Call this FIRST, before any other Mixpanel tool whenever ANY of these are true: 1. It is the first substantive turn of the conversation about this org or…
- `Update-Business-Context` _(destructive)_ — Update the business context at the project or organization level. This is a full replace — the new content overwrites whatever exists; there is no merge or…
- `List-Organizations` _(read)_ — Returns the organizations the current user belongs to.
- `Find-Duplicate-Groups` _(read)_ — Find groups of duplicate or near-duplicate names in a Mixpanel project — both events and event properties. Returns clusters a user might want to merge in…
- `Merge-Group` _(destructive)_ — Merge a group of duplicate names into one canonical entity in a Mixpanel project's Lexicon. Works for events and event properties. DESTRUCTIVE: source entities…
- `Dismiss-Duplicate-Group` _(write)_ — Dismiss a duplicate-group suggestion so it no longer appears in Find-Duplicate-Groups results. Works for events and event properties. Does not modify any…
- `Fill-Event-Metadata` _(destructive)_ — Use AI to fill in missing event metadata for a Mixpanel project. For every event that is missing a display name and/or description, this generates one and…

---

## Connect

Gateway URL: https://gateway.mewcp.com/personal/mcp

Every request carries one header:

    Authorization: Bearer <API_KEY>

Replace `API_KEY` with your own key from the dashboard (Developer).

## Apps

### Claude Desktop

Mac & Windows app

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://gateway.mewcp.com/personal/mcp",
        "--header",
        "Authorization: Bearer API_KEY"
      ]
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open Claude Desktop → Settings → Developer → "Edit Config"
2. Paste the snippet inside the outer { } of the config file (merge with your existing "mcpServers" section if you have one)
3. Save the file and restart Claude Desktop
4. Start a new conversation — your tool will be available

### VS Code

Copilot / Cline

- Command Palette → "MCP: Open User Configuration" (opens mcp.json). For one project only, use .vscode/mcp.json instead.

```json
{
  "mcp.servers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have a "servers" section in your mcp.json? Just add the server entry inside it.

1. Open VS Code → Command Palette (Cmd+Shift+P / Ctrl+Shift+P)
2. Run "MCP: Open User Configuration" to open your mcp.json
3. Paste the snippet and save
4. Start the server when prompted (or from the MCP servers view) and use it in Copilot Chat

### Cursor

AI-first editor

- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your mcp.json? Just add the server entry inside it.

1. Open Cursor → Settings → Cursor Settings → MCP
2. Click "Add new global MCP server"
3. Paste the snippet and save
4. Restart Cursor

### Codex

OpenAI's CLI agent

- Add the snippet to your Codex MCP config or your standard MCP config file for the CLI tool you use.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Codex generally reads a standard MCP server block, so you can add this alongside your other configured servers.

1. Open your Codex MCP config or project-level config file
2. Paste the MewCP server block inside the config JSON/TOML structure your tool expects
3. Save the file and restart Codex
4. Verify the tool is available inside a fresh session

### Claude Code

Anthropic's CLI agent

- ~/.claude.json (user scope) or .mcp.json in your project root — create it if it doesn't exist. Or skip the file and use the CLI command below.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open ~/.claude.json (or .mcp.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file and start (or restart) Claude Code
4. Or skip the file entirely and run the CLI command below instead

### OpenCode

Open-source terminal agent

- ~/.config/opencode/opencode.json (global) or opencode.json in your project root — create it if it doesn't exist.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mewcp": {
      "type": "remote",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcp" section in your opencode.json? Just add the server entry inside it.

1. Open ~/.config/opencode/opencode.json (or opencode.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and start (or restart) OpenCode

### OpenClaw

Self-hosted agent gateway

- ~/.openclaw/openclaw.json — create it if it doesn't exist.

```json
{
  "mcp": {
    "servers": {
      "mewcp": {
        "transport": "streamable-http",
        "url": "https://gateway.mewcp.com/personal/mcp",
        "enabled": true,
        "headers": {
          "Authorization": "Bearer API_KEY"
        }
      }
    }
  }
}
```

Already have an "mcp" section in your openclaw.json? Just add the server entry inside "servers".

1. Open ~/.openclaw/openclaw.json in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and restart OpenClaw

### Antigravity

Google's agentic IDE

- ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace-local) — create it if it doesn't exist.

```json
{
  "mcpServers": {
    "mewcp": {
      "serverUrl": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it. Remote servers must use the "serverUrl" field — the legacy "url"/"httpUrl" fields aren't supported.

1. In the editor's agent side panel, click "…" → "MCP Servers" → "Manage MCP Servers" → "View raw config" (Antigravity CLI: type /mcp instead to open the Interactive MCP Manager)
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file — the server connects automatically

### Hermes

Nous Research's CLI agent

- config.yaml in your Hermes config directory (~/.hermes) — add this under a top-level "mcp_servers:" key.

```yaml
mcp_servers:
  mewcp:
    url: "https://gateway.mewcp.com/personal/mcp"
    headers:
      Authorization: "Bearer API_KEY"
```

Already have an "mcp_servers" section in your config.yaml? Just add the server entry inside it.

1. Open config.yaml in your Hermes config directory
2. Paste the snippet under the top-level "mcp_servers:" key (merge with existing entries if you have any)
3. Save the file, then run /reload-mcp in Hermes (or start a fresh session)
4. Ask Hermes "Tell me which MCP-backed tools are available right now" to confirm it connected

### DeepSeek Harness

DeepSeek's agent harness

- cordis.yml in your DSH project — or the patch file you mount plugins from.

```yaml
- id: mcp-mewcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: mewcp
    transport: streamable-http
    url: https://gateway.mewcp.com/personal/mcp
    headers:
      Authorization: "Bearer API_KEY"
```

One plugin instance = one MCP server. Add this entry to your plugin list; don't nest it inside another entry.

1. Open cordis.yml (or your patch file) in your DSH project
2. Paste the entry into your plugin list, keeping the leading dash and indentation
3. Restart DSH (or let HMR reload) — tools register as mcp__mewcp__<tool_name>
4. Verify with: dsh web --dump-config | grep -A3 mcp

## SDKs

### Python

fastmcp client

```python
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

SERVER_URL = "https://gateway.mewcp.com/personal/mcp"
API_KEY = "API_KEY"

transport = StreamableHttpTransport(
    url=SERVER_URL,
    headers={
        "Authorization": f"Bearer {API_KEY}",
    }
)

async def main():
    client = Client(transport)
    async with client:
        tools = await client.list_tools()
        print(tools)

asyncio.run(main())
```

1. Install fastmcp: pip install fastmcp
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run your script

### TypeScript

MCP SDK

```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const SERVER_URL = "https://gateway.mewcp.com/personal/mcp";
const API_KEY = "API_KEY";

const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), {
  requestInit: {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  },
});

const client = new Client({ name: "mewcp-client", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map((t) => t.name));
```

1. Install: npm install @modelcontextprotocol/sdk
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run with Node 18+ as an ES module (e.g. npx tsx script.ts)