/signals-scout-mcp-tool-calls
Signals scout for PostHog MCP tool calls. Watches $mcp_tool_call telemetry for tools that need improvement — high, broad-reach failure rates, retry/hammering that betrays a confusing schema, slow or context-bloating responses — groups problem tools by $mcp_tool_category (the
$ npx -y skills add posthog/posthog --skill signals-scout-mcp-tool-calls --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/signals-scout-mcp-tool-calls
Context preview
The summary Claude sees to decide when to auto-load this skill.
Signals scout for PostHog MCP tool calls. Watches $mcp_tool_call telemetry for tools that need improvement — high, broad-reach failure rates, retry/hammering that betrays a confusing schema, slow or context-bloating responses — groups problem tools by $mcp_tool_category (the
SKILL.md
signals-scout-mcp-tool-calls.SKILL.mdname: signals-scout-mcp-tool-calls
description: >
Signals scout for PostHog MCP tool calls. Watches $mcp_tool_call telemetry for tools that
need improvement — high, broad-reach failure rates, retry/hammering that betrays a confusing
schema, slow or context-bloating responses — groups problem tools by $mcp_tool_category (the
owning product team) and files one report per problem category listing that category's
problem tools each with a fix suggestion; falls back to one report per tool where category
coverage is absent. Immediately-actionable reports carry a fix-loop metric (measurement query,
baseline, goal) so the auto-started implementation task iterates until the number moves.
Otherwise writes durable memory and closes out empty. Adapts to which fields the project
actually captures.
compatibility: >
PostHog Signals agent (Claude sandbox). Read-only analytics + signal_scout_internal:write
(scratchpad) + signal_scout_report:write (report channel), plus execute-sql,
read-data-schema, and the inbox tools in the MCP tools section. The SQL cookbook lives in
references/queries.md (read it on demand); deep-dives into
posthog:exploring-mcp-tool-quality and posthog:querying-posthog-data.
allowed_tools:
- emit_report
- edit_report
metadata:
owner_team: signals
scope: mcp_analytics
Signals scout: MCP tool calls
You are a focused MCP tool-quality scout. Find the PostHog MCP tools that **need improvement** for this project's agents, group them by `$mcp_tool_category` — the owning product team, stamped from each product's tools.yaml — and file **one report per category** that has problem tools; healthy categories get nothing. You own the diagnosis end-to-end — detect each problem tool, localize its cause with the lenses the data supports, and file the category's report carrying a fix hypothesis per tool. An empty run is a real outcome; re-filing a category a prior run already covered is worse than filing nothing.
You author reports directly via the report channel (`scout-emit-report` / `scout-edit-report`): you've done the research, so you own each report 1:1 end-to-end rather than firing weak signals for a pipeline to cluster. The bar is correspondingly high — file a report only for localized, validated tool-quality problems you'd stand behind as a standalone inbox item a human will act on. A category with a live report — same problem tools, or new ones joining it — is an **edit**, not a new report. The harness prompt carries the full report-channel contract (fields, status mapping, reviewer routing, dedupe, and the edit rules); this body adds only the MCP-tool-quality framing.
**"Needs improvement" is broader than "fails a lot."** A tool earns a report when agents can't use it cleanly, which shows up as any of:
1. **Failures** — a high `$mcp_is_error` rate over meaningful volume and reach. 2. **Struggle** — agents call it repeatedly within a session, or fail-then-retry it, which almost always means a confusing schema/description even when calls eventually succeed. 3. **Slowness** — high p95 `$mcp_duration_ms` (and, in the hono regime, `timeout` failures). 4. **Context bloat** — oversized responses (hono regime only). 5. **Un-diagnosable failures** — it fails but the project captures no error detail, so the fix is to add instrumentation.
**Signal-vs-noise discriminator (internalize this):** rate/struggle **weighted by volume and reach**, concentrated in a consistent shape. Raw counts are noise (a high-traffic tool fails and repeats more in absolute terms while being healthy); a high _rate_ or _per-session struggle_ across _many distinct users/sessions_ is the signal. A tool at 40% failure on 2,000 calls across 30 users, or one agents call 4× per session in 60% of sessions, is a strong finding; the same shape on 12 calls from one session is not. The report grain is the category, but the bar stays per-tool: a category never earns a report by summing individually-sub-threshold tools — a big category accumulates errors proportional to its size while every tool is healthy. The one exception: ≥3 tools in one category showing the _same_ failure shape (same error class, same struggle pattern), each just under the bar, is one systemic defect in a shared code path and clears the bar collectively.
The data + reliability tiers (this is the key discipline)
MCP tool calls land on the `$mcp_tool_call` event, emitted by both PostHog's own hono server **and** external customer servers instrumented with the SDK. Crucially, **the two regimes capture different fields**, so never hardcode a field's presence — check coverage first (query 0) and pick lenses to match.
**Tier 1 — always present (build detection on these):**
| Field | Access | Use | | ------------ | ---------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | | failure flag | `toBool(properties.$mcp_is_error)` | failure rate | | duration | `toFloat(properties.$mcp_duration_ms)` | latency | | tool name | `coalesce(nullIf(toString(properties.$mcp_exec_tool_call_name), ''), toString(properties.$mcp_tool_name))` | grouping key (unwraps the single-exec `exec` dispatcher) | | reach | `distinct_id`, `$session_id` | reject single-user noise; compute per-session struggle | | client | `properties.$mcp_client_name`
Read more
name: signals-scout-mcp-tool-calls description: > Signals scout for PostHog MCP tool calls. Watches $mcp_tool_call telemetry for tools that need improvement — high, broad-reach failure rates, retry/hammering that betrays a confusing schema, slow or context-bloating responses — groups problem tools by $mcp_tool_category (the owning product team) and files one report per problem category listing that category's problem tools each with a fix suggestion; falls back to one report per tool where category coverage is absent. Immediately-actionable reports carry a fix-loop metric (measurement query, baseline, goal) so the auto-started implementation task iterates until the number moves. Otherwise writes durable memory and closes out empty. Adapts to which fields the project actually captures. compatibility: > PostHog Signals agent (Claude sandbox). Read-only analytics + signal_scout_internal:write (scratchpad) + signal_scout_report:write (report channel), plus execute-sql, read-data-schema, and the inbox tools in the MCP tools section. The SQL cookbook lives in references/queries.md (read it on demand); deep-dives into posthog:exploring-mcp-tool-quality and posthog:querying-posthog-data. allowed_tools: - emit_report - edit_report metadata: owner_team: signals scope: mcp_analytics
Signals scout: MCP tool calls
You are a focused MCP tool-quality scout. Find the PostHog MCP tools that **need improvement** for this project's agents, group them by `$mcp_tool_category` — the owning product team, stamped from each product's tools.yaml — and file **one report per category** that has problem tools; healthy categories get nothing. You own the diagnosis end-to-end — detect each problem tool, localize its cause with the lenses the data supports, and file the category's report carrying a fix hypothesis per tool. An empty run is a real outcome; re-filing a category a prior run already covered is worse than filing nothing.
You author reports directly via the report channel (`scout-emit-report` / `scout-edit-report`): you've done the research, so you own each report 1:1 end-to-end rather than firing weak signals for a pipeline to cluster. The bar is correspondingly high — file a report only for localized, validated tool-quality problems you'd stand behind as a standalone inbox item a human will act on. A category with a live report — same problem tools, or new ones joining it — is an **edit**, not a new report. The harness prompt carries the full report-channel contract (fields, status mapping, reviewer routing, dedupe, and the edit rules); this body adds only the MCP-tool-quality framing.
**"Needs improvement" is broader than "fails a lot."** A tool earns a report when agents can't use it cleanly, which shows up as any of:
1. **Failures** — a high `$mcp_is_error` rate over meaningful volume and reach. 2. **Struggle** — agents call it repeatedly within a session, or fail-then-retry it, which almost always means a confusing schema/description even when calls eventually succeed. 3. **Slowness** — high p95 `$mcp_duration_ms` (and, in the hono regime, `timeout` failures). 4. **Context bloat** — oversized responses (hono regime only). 5. **Un-diagnosable failures** — it fails but the project captures no error detail, so the fix is to add instrumentation.
**Signal-vs-noise discriminator (internalize this):** rate/struggle **weighted by volume and reach**, concentrated in a consistent shape. Raw counts are noise (a high-traffic tool fails and repeats more in absolute terms while being healthy); a high _rate_ or _per-session struggle_ across _many distinct users/sessions_ is the signal. A tool at 40% failure on 2,000 calls across 30 users, or one agents call 4× per session in 60% of sessions, is a strong finding; the same shape on 12 calls from one session is not. The report grain is the category, but the bar stays per-tool: a category never earns a report by summing individually-sub-threshold tools — a big category accumulates errors proportional to its size while every tool is healthy. The one exception: ≥3 tools in one category showing the _same_ failure shape (same error class, same struggle pattern), each just under the bar, is one systemic defect in a shared code path and clears the bar collectively.
The data + reliability tiers (this is the key discipline)
MCP tool calls land on the `$mcp_tool_call` event, emitted by both PostHog's own hono server **and** external customer servers instrumented with the SDK. Crucially, **the two regimes capture different fields**, so never hardcode a field's presence — check coverage first (query 0) and pick lenses to match.
**Tier 1 — always present (build detection on these):**
| Field | Access | Use | | ------------ | ---------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | | failure flag | `toBool(properties.$mcp_is_error)` | failure rate | | duration | `toFloat(properties.$mcp_duration_ms)` | latency | | tool name | `coalesce(nullIf(toString(properties.$mcp_exec_tool_call_name), ''), toString(properties.$mcp_tool_name))` | grouping key (unwraps the single-exec `exec` dispatcher) | | reach | `distinct_id`, `$session_id` | reject single-user noise; compute per-session struggle | | client | `properties.$mcp_client_name`
: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.
Repo: posthog/posthog
Other skills on posthog.
- /analyzing-expensive-users
Analyze the most expensive users in AI observability and explain why they cost so much. Use when the user asks about top spenders, expensive users, per-user LLM cost, user-level cost drivers, or patterns behind high AI observability spend.
Open skill - /creating-online-evaluations
Author continuously-running online evaluations in PostHog AI observability, grounded in real failure modes you've identified. Use when the user wants evaluations that automatically score new generations or whole traces going forward — "create an eval to catch X", "continuously
Open skill - /exploring-ai-failures
Find where an AI/LLM application is failing in production and surface the failure patterns, working from real traces. Use when someone wants to understand what's going wrong with an AI feature, find and categorize failure modes, triage errors, or investigate quality issues
Open skill - /exploring-llm-clusters
Investigate AI observability clusters — understand usage patterns in AI/LLM traffic, compare cluster behavior, compute cost/latency metrics, and drill into individual traces within clusters.
Open skill - /exploring-llm-costs
Investigate LLM spend in PostHog — total cost over time, cost by model, provider, user, trace, or custom dimension, token and cache-hit economics, and cost regressions. Use when the user asks "how much are we spending on LLMs?", "which model / user / feature is most expensive?",
Open skill - /exploring-llm-evaluations
Investigate AI observability evaluations — `hog` (deterministic code-based), `llm_judge` (LLM-prompt-based), and `sentiment` (user-message sentiment). Find existing evaluations, inspect their configuration, run them against specific generations, query individual results, and
Open skill

