From amplitude
Generates, validates, and audits event tracking plans and governance in Amplitude. Covers naming conventions, data quality scoring, deprecation workflows, and AI readiness.
How this skill is triggered — by the user, by Claude, or both
Slash command
/amplitude:taxonomyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- User asks to create or review a tracking plan or event taxonomy
Six principles govern all taxonomy work:
All taxonomy governance follows a four-stage loop:
These are different problems requiring different solutions:
Billing models — know which applies before advising:
What customers usually mean:
What actually reduces each:
| Goal | Action | Reduces Volume? | Reduces Type Count? |
|---|---|---|---|
| Reduce volume | Block event | Yes | No |
| Reduce volume | Delete event | Yes | Yes |
| Reduce type count | Delete event/property/group type | — | Yes |
| Reduce type count | Block event | No | No |
| Reduce type count | Hide event | No | No |
Key rules:
| Status | Meaning | Can Edit Metadata? |
|---|---|---|
| Planned | In tracking plan; not yet instrumented | Yes |
| Live | Actively receiving data | Yes |
| Blocked | Stops new ingestion; historical data accessible | Yes |
| Unexpected | Receiving data but NOT in tracking plan | No — must add to tracking plan first |
| Deleted | Stops ingestion; removed from new-chart dropdowns | No — must restore first |
Unexpected events have special restrictions. No metadata can be updated until the event is added to the tracking plan. When you encounter Unexpected events:
Activity state is NOT a deprecation signal. An event marked Inactive is behaving as intended.
Actual deprecation signals:
| Signal | Interpretation |
|---|---|
| No recent volume | Event has gone stale |
| No recent queries | Event is unused |
| Both together | Strong deprecation candidate |
Planned events: Zero volume and queries are expected — evaluate by age, name collisions with Live events, and test-like names instead.
None reduce event volume. Each has distinct behavior:
ce: prefix, type = custom): Logical combinations of underlying events for analysis convenience. The underlying events still exist and fire independently. Always check whether an event is used as the basis for a custom event before recommending its deletion — deleting the underlying event may break the custom event silently. Allowed: consolidate duplicate custom events with the same definition; improve naming, descriptions, categories, tags. Never claim that removing a custom event reduces event volume.ce: prefix, type = labeled): Designed for use with Autocapture, distinguished from custom events by a separate metadata flag. Adding/deleting does not impact volume.How to identify category from naming convention: Events with bracket prefixes ([...]) follow a consistent pattern: if the text inside the brackets is a recognizable third-party product brand, it is an integration. If not, it is an Amplitude system event.
Amplitude system events ([Amplitude], [Guides-Surveys], [Experiment], etc.): Critical to platform functionality. Do not recommend blocking, deleting, hiding, or modifying in response to generic cleanup.
Integration-prefixed data ([Appboy], [Adjust], [Intercom], etc.): Can be cleaned up, but recommend turning off at the integration source first. Lower priority than native events.
Experiment data: Do not recommend TTLs or automatic deletion. Deleting breaks historical experiment interpretation.
Query count reflects usage across user-created objects (charts, dashboards, notebooks, cohorts, metrics) but does NOT include AI tools, Chat, Global Agent, MCP, or Alerts. Zero-query is a strong signal to review, not a definitive signal to act.
Three key patterns:
| Pattern | Definition | Action |
|---|---|---|
| Stale event | Has ingested before, but volume stopped | Confirm with customer before deprecating |
| Test event | first seen = last seen, single day | Strong deprecation candidate; confirm first |
| Firing but unqueried | Has volume, zero queries | Flag for review, not immediate removal |
Safe to act on: No volume for 6-12 months. Even if query activity exists, those queries return zero results.
Frame metadata and cleanup work as AI readiness improvements. Every AI feature selects events by evaluating the visible taxonomy — taxonomy quality directly determines AI output quality.
Flag these as AI quality issues:
Event description structure (in order):
Property descriptions: Start with a clear definition, then include example values. Example: "The category of the product the user viewed. Examples: 'electronics', 'apparel', 'home & garden'."
AI readiness at instrumentation time:
AI Controls recommendations:
Reading and analysis operations carry no risk — be autonomous and decisive. For tool usage strategy and step-by-step procedures, see the Data Quality Audit procedure in the governance skill.
Before/after confirmation required for all writes. Never auto-apply. Only update confirmed items — do not extend to similar items based on pattern inference.
Per-field defaults:
Restrictions:
When writes fail due to permissions:
Deprecation must always follow a phased process. For the step-by-step procedure, see the governance skill's Deprecation Workflow.
Never:
Format: [Object] [Past-Tense Verb] in Title Case
| Good | Bad | Why |
|---|---|---|
Song Played | Play Song | Past tense = completed action |
Form Submitted | Submit Form | Noun-first = scannable, sortable |
Product Added | product added, product_added, productAdded | Amplitude treats different casings as separate events — always use Title Case, not snake_case or camelCase |
Consistency is the top priority. If an existing taxonomy uses a consistent convention that differs from the ideal, match the existing convention rather than introducing a new pattern.
User perspective, not system perspective:
Message Sent (user sent) not Message Delivered (system delivered)Purchase Completed (user completed) not Payment Processed (system processed)Specificity balance — one event + properties, not many events:
Order Completed with property payment_methodCredit Card Order Completed, Apple Pay Order CompletedCross-platform consistency: Same user action = same event name across Web, iOS, Android. Platform differences go in a platform property.
One action = one event name. No duplicates across the codebase.
Autocapture-first: Do not recommend custom events for anything already captured by Autocapture: Page Viewed, Element Clicked, Element Changed, Form Started, etc.
snake_case for all property namespayment_type not type, error_message not messagevideo_duration_seconds, file_size_mb, price_usd[event_name]_at (e.g., product_added_at)product_name must be product_name on every event — not name, prod_name, etc.login_method and payment_method, not generic method for both| Type | Format | Example |
|---|---|---|
| IDs | Always string | "user_id": "12345" not 12345 |
| Counts/amounts | Number | "order_total": 59.99 |
| Flags | Boolean | "is_premium": true |
| Timestamps | ISO 8601 string | "2024-03-10T14:30:00Z" |
| Enums/status | String | "status": "In Progress" |
| Null handling | Pick one approach per property | Omit, null, or sentinel string like "Unknown" — never mix. Using an explicit sentinel string lets you distinguish intentionally unavailable values from instrumentation bugs. Inconsistent null handling is one of the most common causes of incorrect property filters and broken funnels. |
device_id only. Do NOT set user_id.user_id per verified user. Never set before login/verification.insert_id per event for deduplication (7-day window).session_id within a session; for server-side, use the UNIX timestamp of the first session event.Error Encountered event with error_type/error_category propertyproduct_engagement (items in this action) + cart_contents (full cart snapshot) arraysorg_id, account_id)product_id) across all events in a funnelUse the Amplitude category metadata field — don't embed prefixes in event names. Common categories:
| Category | Purpose | Examples |
|---|---|---|
| Lifecycle | User journey milestones | Signup Completed, Trial Started, Subscription Cancelled |
| Feature | Core product functionality | Task Created, Document Edited, Report Generated |
| Engagement | Navigation and UI interaction | Page Viewed, Button Clicked, Search Performed |
| Transaction | Revenue events | Purchase Completed, Checkout Started, Refund Requested |
| System | Technical health | Error Occurred, API Request Completed, Timeout Occurred |
| Growth | Acquisition and referral | Invite Sent, Share Completed, Referral Reward Earned |
Assignment heuristics:
[Appboy], [Adjust], etc.) may not fit neatly — assign System or Growth based on the integration's purpose, or leave unassigned.Three dimensions:
| Level | Points | Definition | Examples |
|---|---|---|---|
| HIGH | 3 | Name is ambiguous — analyst cannot reliably interpret it | Jargon, acronyms, blob words, confusable names |
| MEDIUM | 2 | Name is interpretable but taxonomy is messier for it | Convention outliers, unexpected events not on plan |
| LOW | 1 | Name is clear; issue is missing polish | Missing description when name is self-explanatory |
Prioritization: Lead with high-impact issues on high-importance events. Stale/test events are quick wins — surface them below real data quality problems.
Health grade: (Total Points Earned / Total Points Possible) x 100%
Allowed (non-destructive, metadata-only, with user approval):
Not allowed:
Default lookback: 180 days.
| Signal | Priority | Action |
|---|---|---|
| Semantically unclear name | HIGH | Add display name + description |
| Missing description (unclear name) | HIGH | Add description following AI readiness formula |
| Semantic duplicate (true — same meaning, different casing) | HIGH | Merge or disambiguate |
| Semantic duplicate (similar — different names, same action) | HIGH | Investigate; merge or disambiguate |
| Zero volume (180 days) | MEDIUM | Investigate before acting |
| Zero queries (180 days) | MEDIUM | Check asset dependencies first |
| Duplicate property across event + user scope | MEDIUM | Clarify correct source of truth |
| Missing description (clear name) | LOW | Add description; deprioritize |
| Missing category | LOW | Add category |
| Naming convention outlier | LOW | Flag for future realignment |
| Unexpected event/property | LOW | Add to plan or block after review |
| Stale (last seen beyond lookback) | LOW | Quick win — schedule for deprecation |
| Single-day (first seen = last seen) | LOW | Quick win — likely test; verify first |
Test/QA artifact (test_, debug_, tmp_, _qa) | LOW | Quick win — standard deprecation process |
Exception: When customer is near quota, Stale/Single-day/Test signals become elevated priority.
| Metric | Impact |
|---|---|
| % of types at quota limit | HIGH when >90% |
| New types added in last 7 days (spike = possible dynamic value leak) | HIGH if spike |
| Total event volume change in last 7 days | HIGH if unexpected |
| Number of duplicate types by name | HIGH |
| Group types not instrumented (B2B products) | HIGH |
| A/B experiments tracked as events instead of user properties | MEDIUM |
| Events with zero queries in 180 days | MEDIUM |
| Events with zero volume in 180 days | MEDIUM |
| Single-day events | MEDIUM |
| % of live events with descriptions | LOW |
| % of live events with categories | LOW |
| Number of Unexpected events/properties | LOW |
| Naming convention inconsistencies | LOW |
Display names:
| Before | After |
|---|---|
catSelectClick | Category Selected |
pgVw | Page Viewed |
ord_compl_v2 | Order Completed |
usr_prop_acct_tier | Account Tier |
Descriptions:
| Bad (implementation-focused) | Good (intent + context) |
|---|---|
| "Fired on click handler for nav component" | "Triggered when a customer selects a product category from the navigation menu. Example categories: Electronics, Apparel, Home." |
| "Event fired on submit" | "Triggered when a user completes checkout and confirms their order. Includes all line items, discounts applied, and final order total." |
| "See tracking plan" | "Fired the first time a new user completes onboarding by verifying their email. Fires once per user lifetime only." |
These are the actual Amplitude MCP server tools available for taxonomy work. Tool names must match exactly.
get_contextGet information about the current user, organization, and accessible projects. Call this first to discover project IDs.
get_project_contextGet project-specific settings: time zone, currency, session definition, AI context. Use to understand project configuration before making changes.
searchSearch for charts, dashboards, notebooks, experiments, events, properties, cohorts, and other Amplitude content. Use this before get_events to find the event you're looking for.
get_workspace_settingsGet workspace settings including approval workflow status. Check before writing to the default branch — when approvalWF is "Required", the user must create a non-default branch first.
get_eventsRetrieve events from a project with filtering by event types, limit, and cursor pagination. Returns full event objects including category and active status.
search first to find the event you're looking for.search doesn't return it, call get_events without eventTypes to paginate through all events.eventTypes for precise lookup.get_custom_or_labeled_eventsRetrieve custom events, labeled (autotrack) events, or both from a project.
eventKind: "_all" — both custom and labeled events (default).eventKind: "custom" — non-autotrack custom events only.eventKind: "labeled" — labeled/autotrack events only.isAutotrack flag, definition, and flattenedDefinition (source event lists).get_transformationsRetrieve data transformations (merge events, merge properties, map property values) from a project. Use to audit data cleaning rules.
get_propertiesRetrieve properties from a project's taxonomy. Use propertyType to select which kind:
propertyType | What it returns | Key params |
|---|---|---|
event | Properties for a specific event type | eventType (required) |
user | User-level properties | sources, name |
derived | Computed/formula properties | derivedPropertyType, names |
group | Group properties (e.g., company_name, plan_tier) | groupTypes |
lookup | CSV lookup table properties | configurationFilter, lookupTableName |
channel | Traffic source channel properties | names |
persisted | Event-to-user persisted properties | names |
All property types except event support limit/cursor pagination.
update_eventUpdate event metadata: descriptions, display names, categories, official status, and event names. Operates on the tracking plan.
name exactly (case-sensitive) — not the displayName. Resolve via get_events first if needed.branchId or branchName to target non-default branches.[Amplitude], [Experiment], etc.) unless explicitly requested.update_propertiesUpdate property metadata (description, official status, category, and/or name). Use propertyType to select which kind:
propertyType | What it updates | Key params |
|---|---|---|
event | Event property metadata (global or event-scoped) | metadataScope, eventType (when scope is "event") |
user | User property metadata | descriptions, isOfficial, categories, newNames |
get_properties first to verify property names and status before updating.update_custom_or_labeled_eventsUpdate descriptions, categories, names, official status, and/or definitions on custom or labeled events.
update_event.For step-by-step execution procedures (data quality audits, governance analyses, event verification, deprecation workflows, tracking plan generation, tool usage strategy), see the governance skill.
npx claudepluginhub amplitude/mcp-marketplace --plugin amplitudeInstruments product analytics correctly: event taxonomy, property design, naming conventions, schema versioning, identity stitching, funnel construction, retention cohorts, and fixing instrumentation debt.
Designs opinionated target tracking plan for product telemetry from product model, current audit, and best practices. Outputs .telemetry/tracking-plan.yaml and delta.md. Use for creating or redesigning analytics instrumentation.
Designs event taxonomies, property schemas, and tracking plans for analytics instrumentation. Scans for tools like PostHog/Mixpanel, maps user journeys, and prioritizes P0 events before coding.