Skip to content
Data
Skill

/exploring-mcp-sessions

Investigate individual PostHog MCP sessions — the sequence of tool calls a single agent made in one run, what it was trying to do, and where it went wrong. Use when the user asks "what did this MCP session do?", "show me the tool calls for session X", "what was the agent's

From plugin
posthog
41k172 skills11 agents2 commands3 MCP

Claude Code

$ npx -y skills add posthog/posthog --skill exploring-mcp-sessions --agent claude-code

SKILL.md

exploring-mcp-sessions.SKILL.md
name: exploring-mcp-sessions
description: >
  Investigate individual PostHog MCP sessions — the sequence of tool calls a
  single agent made in one run, what it was trying to do, and where it went
  wrong. Use when the user asks "what did this MCP session do?", "show me the
  tool calls for session X", "what was the agent's goal?", "which sessions had
  errors?", "who is connecting to my MCP?", or pastes an MCP analytics sessions
  URL.

Exploring MCP sessions

An MCP session is one agent run: the set of `$mcp_tool_call` events sharing a `$session_id`, ordered by `timestamp`.

Listing sessions, reading a session's tool calls, and summarising its goal each have a **typed tool** — reach for those first. Drop to HogQL only for the three things the typed tools genuinely can't do (see [When to drop to SQL](#when-to-drop-to-sql)). The full `$mcp_*` property schema and query recipes live in the shared reference: [`models-mcp.md`](../../../posthog_ai/skills/querying-posthog-data/references/models-mcp.md).

Tools

| Tool | Purpose | | ------------------------------------------------ | ---------------------------------------------------------- | | `posthog:mcp-analytics-sessions-list` | List sessions — one row per session, newest first | | `posthog:mcp-analytics-sessions-tool-calls` | One session's tool calls, chronological | | `posthog:mcp-analytics-sessions-generate-intent` | LLM summary of a session's goal (cached after first call) | | `posthog:execute-sql` | Errored sessions, effective tool names, cross-session cuts |

The three `mcp-analytics-*` tools run the same code as the sessions UI, so results match the screen. If they aren't in your tool list, fall back to `posthog:execute-sql`.

The date-window trap — read this first

The two detail tools default to a **7-day lookback**. A session you found in a list that reaches further back will come back **empty** unless you pass its `session_start` as `date_from`:

  • `posthog:mcp-analytics-sessions-tool-calls` — `date_from` is an absolute ISO

timestamp; pass the `session_start` you got from `posthog:mcp-analytics-sessions-list`.

  • `posthog:mcp-analytics-sessions-generate-intent` — same `date_from` query

param, same reason.

Empty tool calls for a session that visibly exists is almost always this, not a data problem. Carry `session_start` forward from the list row.

Workflow: list recent sessions

posthog:mcp-analytics-sessions-list
{ "date_from": "-7d", "order_by": "-session_start", "limit": 100 }

Each row: `session_id`, `tool_calls`, `session_start`, `session_end`, `tools_used`, `mcp_client_name`, `distinct_id` (+ resolved `person_email` / `person_name`), and `intent` (empty until generated). Response is `{ results, has_next }` — page with `limit` / `offset`.

Three sharp edges:

  • **`order_by` takes column names, not response field names.** Sort call volume

as `tool_call_count` (not `tool_calls`). `duration_seconds` sorts fine even though it isn't returned. An unrecognised key **silently** falls back to newest-first — so verify the order you got is the order you asked for. Valid: `session_id`, `session_start`, `session_end`, `duration_seconds`, `tool_call_count`, `mcp_client_name`, `distinct_id`; prefix `-` to descend.

  • **There is no error filter and no error count on a session row.** "Which

sessions had errors?" is a SQL question — see below.

  • **`distinct_id_count` is always `0`.** The field is in the response but the

backend never populates it, so don't read it as "one distinct id per session" — it says nothing. To count distinct ids in a session, use SQL.

`search` does a case-insensitive substring match across `session_id`, `distinct_id`, `mcp_client_name`, and `tools_used`.

Workflow: read one session's tool calls

posthog:mcp-analytics-sessions-tool-calls
{ "id": "<session_id>", "date_from": "<session_start>", "limit": 500 }

Chronological `tool_name`, `intent`, `timestamp`, `duration_ms`, `is_error`, `error_message` — read top to bottom to reconstruct the run. `limit` defaults to 500 (also the max), which is the whole page for almost every session; `has_next` tells you if more remain.

**Caveat: `tool_name` here is the raw `$mcp_tool_name`.** Unlike the tool-quality and tool-detail tools, this endpoint does not resolve the inner tool of a single-exec wrapper call, so wrapper calls show the wrapper. When the inner tool is what matters (comparing against a tool-quality ranking, tracing a specific tool through a run), use the SQL recipe below instead. The same applies to `tools_used` on the session list.

Workflow: summarise the agent's goal

posthog:mcp-analytics-sessions-generate-intent
{ "id": "<session_id>", "date_from": "<session_start>" }

Summarises the session's recorded `$mcp_intent` values via an LLM and persists the result; later calls return the cached summary. Returns `{ session_id, intent }`. A 503 means LLM summarisation isn't configured — fall back to reading the raw `$mcp_intent` values from the tool-call list.

When to drop to SQL

Four cases, all via `posthog:execute-sql`.

**1. The typed tools aren't in your tool list.** Everything below still works; this query is the plain session listing:

SELECT
    $session_id AS session_id,
    min(timestamp) AS session_start,
    max(timestamp) AS session_end,
    dateDiff('second', min(timestamp), max(timestamp)) AS duration_seconds,
    count() AS tool_calls,
    countIf(toBool(properties.$mcp_is_error)) AS errors,
    any(properties.$mcp_client_name) AS client
FROM events
WHERE event = '$mcp_tool_call'
    AND $session_id != ''
    AND timestamp >= now() - INTERVAL 7 DAY
GROUP BY session_id
ORDER BY session_start DESC
LIMIT 50

**2. Errored sessions.** The session list can't filter or count errors — add `HAVING errors

Read more
@posthog
Ships withposthog

:hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, experiments, error tracking, logs, and more – capture all the context agents need to diagnose problems, uncover opportunities, and ship fixes. Steer it all from Slack, web, desktop, or the MCP.

41k172 skills11 agents3 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
40.7k
Star history of posthog/posthog on GitHub, a chart by star-history.com

Other skills on posthog.

mcp-servers

mcp-servers

Install, configure, authenticate, and troubleshoot MCP (Model Context Protocol) servers for this agent. Use when the user asks to…

@posthog@posthogInstall Skill
dynamic-workflows

dynamic-workflows

Designs and runs task-specific JavaScript harnesses with the `workflow` tool. Use for broad, long-running, highly structured, or…

@posthog@posthogInstall Skill
subagent-orchestration

subagent-orchestration

How and when to delegate work to subagents via the `subagent` tool (Explore, Plan, General). Use when a task involves codebase…

@posthog@posthogInstall Skill
checking-member-access

checking-member-access

Explains what a member or a role can do in a PostHog project, using the access control MCP tools. Use when the user asks what…

@posthog@posthogInstall Skill
analyzing-ai-citations

analyzing-ai-citations

Answer AI citation and answer engine optimization (AEO) questions in PostHog: whether AI answer engines (ChatGPT, Claude, and an…

@posthog@posthogInstall Skill
analyzing-expensive-users

analyzing-expensive-us…

Analyze the most expensive users in AI observability and explain why they cost so much. Use when the user asks about top…

@posthog@posthogInstall Skill

More skills from other plugins.

context-loader
Auto-invoked

context-loader

Search memories from earlier Pi sessions in this repository. Use it when earlier work may already explain the code, error,…

mem07d69k
@mem0ai@mem0aiInstall Skill
qmd

qmd

Search local markdown knowledge bases, notes, docs, and wikis with QMD. Use when users ask to find notes, retrieve documents,…

qmd4w31k
@tobi@tobiInstall Skill

Questions about exploring-mcp-sessions.

Which coding agents can use exploring-mcp-sessions?
exploring-mcp-sessions installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.