Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,22 @@ refusals into tool error rates, which is also why the status has its own field.
time, never by person.

Per-event additions: `$mcp_error_status` (upstream HTTP status), `$mcp_error_code` (machine-readable leaf failure code: the API's validation error code or the exec rejection reason), and `$mcp_error_field` (the validation error's field path, array indexes normalized to `N`, e.g. `actions__N__inputs__email`) — all stamped by `services/mcp/src/hono/tool-executor.ts` — **server-side, despite sitting next to the SDK's typed error properties in queries**; and `tool_count`, `read_only`, `via_sse_redirect` on `$mcp_initialize`. Failed calls may also carry
`$mcp_validation_fields` and `$mcp_validation_input_keys` (which fields failed validation, and
which keys the caller actually sent), and exec-mode calls carry `$mcp_exec_verb` (which dispatcher
verb ran) and `$mcp_exec_target_tool` (the tool that `info`/`schema`/`call` named). Those four are
stamped in `tool-executor.ts` but are **not registered in `posthog/taxonomy/taxonomy.py`**, so they
have no descriptions in the property picker — they still query fine.
`$mcp_validation_fields` (which fields failed validation), and exec-mode calls carry `$mcp_exec_verb` (which dispatcher
verb ran) and `$mcp_exec_target_tool` (the tool that `info`/`schema`/`call` named). These properties are
stamped in `tool-executor.ts` and registered in `posthog/taxonomy/taxonomy.py`.

A `$mcp_tool_call` that named a tool and its arguments (a direct-mode call, `render-ui`, or an
exec `call`) also carries the call's shape, stamped in `tool-executor.ts` from the raw input before
any alias is folded away, by the `@posthog/mcp` SDK helper `getToolInputProperties`:
`$mcp_input_keys` (the top-level argument names the caller sent, never values: declared names and
aliases first, capped at 20, with undeclared names recorded as one `[redacted]` entry; in exec mode parsed from the `call` command's JSON) and
`$mcp_input_aliases_used` (`alias:canonical` tokens such as `experimentId:id`, present only when
the normaliser filled the canonical from that alias). Exec
discovery verbs (`tools`, `search`, `info`, `schema`) carry neither, so rate alias use against the
rows where `$mcp_input_keys` is set, not against every `$mcp_tool_call`. Group the two by
`$mcp_client_name` to see which spelling each agent reaches for and how much of it the alias layer
absorbs. A tool that wraps `normalizeParamAliases` inside its own preprocess (`read-data-schema`)
reads as alias-free.
A `learn` call also carries `exec_learn_kind` (`search`, `load`, `list` for `learn skills` and a bare `learn`, `describe`, `guide`),
stamped before the availability check so a rejected skill command still records its form, plus
the raw `exec_search_query` for `search` (and for a `load` that searches inside the skill with `-s`) and `exec_learn_target` (the qualified skill) for `load`.
Expand Down
147 changes: 147 additions & 0 deletions frontend/src/taxonomy/core-filter-definitions-by-group.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading