Skip to main content
Glama

Pug

Server Details

Query events, funnels, retention and profiles in Pug product analytics, and build dashboards.

Ownership verified
Status
Healthy
Uptime
57.1% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
pug-sh/pug
GitHub Stars
109
ChatGPT
–
Claude
–

TDQS

A3.6/5.0

Scored across 17 tools

Disambiguation3/5

Activity and insights expose parallel filter-schema and property-value tools, and get_activity_heatmap overlaps with get_profile_stats; explore_events vs get_activity_feed also require careful reading. Descriptions clarify scope, but an agent could still misselect among these paired helpers.

Naming Consistency5/5

All tools use a consistent snake_case verb_noun pattern (get_*, list_*, query_*, upsert_*, explore_*), with clear resource prefixes. There is no inconsistent casing or vague verb usage.

Tool Count4/5

17 tools is slightly above the ideal 15 but each maps to a real analytics workflow: projects, events, profiles, insights, and dashboards. The count is not excessive for the domain's breadth.

Completeness4/5

Core analytics querying and the dashboard create/read/update lifecycle are covered, but dashboard deletion is absent and get_deletion_request has no matching create/request tool. These are minor gaps an agent can work around or escalate.

Publisher details

Operator
Tshoka Private Limited
Operator website
https://pug.sh
Vendor relationship
First-party
Trust center
Not available
Restrictions
Not available

Available Tools

17 tools
explore_eventsExplore eventsB
Read-only
Inspect

GetEventExplorer returns a paginated, filterable list of events across all users in a project. Does not resolve aliases. Traffic tagged as a bot at ingest is excluded unless include_bots is true.

Inputs: events, page_size, page_token, project_id, +5 more. Returns: events, next_page_token

get_activity_feedGet activity feedB
Read-only
Inspect

GetActivityFeed returns a paginated, filterable list of events for a user profile. Resolves profile aliases so merged anonymous events are included. Traffic tagged as a bot at ingest is excluded unless include_bots is true.

Inputs: events, page_size, page_token, project_id, +5 more. Returns: events, next_page_token

get_activity_filter_schemaGet activity filter schemaB
Read-only
Inspect

GetFilterSchema returns event names, property keys, and profile property keys for filter UIs. The filter-schema concept is service-agnostic; both shared.activity and shared.insights expose the same shape via common.v1.

Inputs: event_kind, project_id, allowed_types. Returns: events, auto_property_keys, custom_property_keys, profile_property_keys

get_activity_heatmapGet activity heatmapA
Read-only
Inspect

GetActivityHeatmap returns per-day event counts for a user profile over a time window. Defaults to the last 60 days when no time_range is provided. Traffic tagged as a bot at ingest is excluded unless include_bots is true.

Inputs: project_id, time_range, distinct_id, include_bots. Returns: days

get_activity_property_valuesGet activity property valuesC
Read-only
Inspect

GetPropertyValues returns distinct values for a given property key.

Inputs: source, event_kind, project_id, property_key. Returns: values

get_dashboardGet dashboardA
Read-only
Inspect

Get returns one dashboard: its time window, its tiles and its update_time. Each tile has its id, its name, its spec (insight tiles) or markdown, its chart and its position on the 12-column grid. Pass update_time to upsert_dashboard when you edit the dashboard.

Inputs: id, project_id. Returns: dashboard

get_deletion_requestGet deletion requestB
Read-only
Inspect

GetDeletionRequest returns the status of an erasure request so a controller can prove fulfilment within the statutory window (the DSAR audit trail).

Inputs: project_id, request_id. Returns: error, status, profile_id, request_id, +4 more

get_insights_filter_schemaGet insights filter schemaA
Read-only
Inspect

GetFilterSchema lists the event kinds and the property keys/types available to filter and break down by. Call it before query_insights so that filters and breakdowns reference keys that actually exist in this project.

The filter-schema concept is service-agnostic; both shared.insights and shared.activity expose the same shape via common.v1.

Inputs: event_kind, project_id, allowed_types. Returns: events, auto_property_keys, custom_property_keys, profile_property_keys

get_insights_property_valuesGet insights property valuesA
Read-only
Inspect

GetPropertyValues lists the observed values of an event or user property (e.g. the countries seen for "$country") so filters and breakdowns can be populated with real values before running query_insights.

Inputs: source, event_kind, project_id, property_key. Returns: values

get_profileGet profileA
Read-only
Inspect

Get returns a single user profile by its pug profile id, including identity properties and an activity summary. A claimed anonymous id is redirected to its canonical profile. Traffic tagged as a bot at ingest is excluded from the activity summary unless include_bots is true.

Inputs: id, project_id, include_bots. Returns: profile

get_profile_by_external_idGet profile by external IDA
Read-only
Inspect

GetByExternalId returns a single user profile looked up by the external_id your application assigned to its end user, rather than by pug's internal profile id. Traffic tagged as a bot at ingest is excluded from the activity summary unless include_bots is true.

Inputs: project_id, external_id, include_bots. Returns: profile

get_profile_sessionsGet profile sessionsA
Read-only
Inspect

GetProfileSessions returns a paginated list of one user profile's sessions, newest first unless sort says otherwise. Requires that user's distinct_id (the pug profile id a profile lookup gives you). Sessions are aggregated server-side — one row per session with its start, end, event count and device context — so a profile with more events than any one page can hold still lists every session, with exact durations and counts. Resolves profile aliases so merged anonymous events are included. To page, send the previous response's next_page_token back as page_token; an empty next_page_token means there are no more pages. A token is only valid for the sort it was issued under — to change sort, start again with no page_token. sort defaults to PROFILE_SESSION_SORT_STARTED_AT and every sort is descending, so DURATION lists the longest sessions first and EVENT_COUNT the busiest. Traffic tagged as a bot at ingest is excluded unless include_bots is true, and the judgement is per session: a session with any tagged event is omitted whole rather than returned with only its untagged events.

Inputs: sort, page_size, page_token, project_id, +3 more. Returns: sessions, next_page_token

get_profile_statsGet profile statsA
Read-only
Inspect

GetProfileStats returns aggregate statistics, device/browser/location context from the latest event, per-day heatmap data (last 60 days), and profile properties for a profile. Resolves aliases so merged anonymous events are included. Traffic tagged as a bot at ingest is excluded unless include_bots is true, so a profile whose events are all bot-tagged omits stats entirely and returns no heatmap days — not a NotFound, and profile properties are still returned.

Inputs: project_id, distinct_id, include_bots. Returns: stats, heatmap, properties

list_dashboardsList dashboardsA
Read-only
Inspect

List returns the project's dashboards: each one's name, description, tile count, whether sharing is on, and when it last changed. Call get_dashboard for one dashboard's tiles.

Inputs: project_id. Returns: dashboards

list_projectsList projectsA
Read-only
Inspect

List returns the projects you can read, each with the org it belongs to. Every other tool reads one project and takes its id as project_id, so call this first. When a question doesn't say which project and more than one could fit, ask. A connection made by signing in reads the projects of the orgs its person belonged to when they connected; an API key reads its own project only.

Inputs: no named parameters. Returns: projects

query_insightsQuery insightsA
Read-only
Inspect

Query runs a product-analytics insight over the project's events and returns the computed result. A single call covers every insight type — trends, segmentation, funnel, retention, user flow (Sankey), top-K and map (a metric per country, returned as top_k rows keyed by ISO alpha-2) — chosen by the InsightQuerySpec (its insight_type, events, breakdowns and filters, among others). Map, user flow, top-K and session each carry their own sub-message (spec.map / spec.user_flow / spec.top_k / spec.session) and take no events or breakdowns; a map's country dimension is implicit, so spec.map may be empty. The request also carries the time range and granularity, and it is the right tool for any project-wide or over-time question; per-granularity range caps apply. Traffic tagged as a bot at ingest is excluded unless spec.include_bots is true. Discover valid event kinds and property keys with the get_insights_filter_schema tool first.

Inputs: spec, timezone, project_id, time_range, +1 more. Returns: result

upsert_dashboardCreate or update dashboardA
Destructive
Inspect

Upsert creates a dashboard or edits one. It returns the dashboard's link, if the server has one, which you give to the person, and the ids of the tiles you sent, in order. To create, leave id empty and give a name and tiles. To edit, pass the dashboard's id and its update_time, from get_dashboard or your last upsert_dashboard. If someone changed the dashboard since, the call fails; read it again. A tile without an id is added and needs exactly one of spec and markdown. Tile names must differ on a dashboard, ignoring case. To change a tile, send its id and only the fields that change; spec and position are replaced whole. A tile stays insight or markdown; to switch, add a new tile and remove the old one. Tiles you leave out stay as they are. To remove a tile, list its id in remove, and only when the person asked for it. Every insight tile shows the dashboard's default_time_range and default_granularity (the last 30 days by day when unset), so work out each one with query_insights over that window first. Dashboards can't show segmentation insights or session metrics. chart applies to trends and top K only. Positions use a 12-column grid: x is 0 to 10, w is 2 to 12, and x + w is at most 12. y and h count rows of about 18px; h is at least 15 for an insight tile and 9 for a KPI or markdown tile. A tile you place can't overlap another; leave position out to put a new tile below the others. Markdown can't contain images. A dashboard with sharing on can't be edited.

Inputs: id, tiles, remove, project_id, +5 more. Returns: id, url, tile_ids, update_time

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables asking product analytics questions in English and receiving answers as real SQL along with the resulting numbers, through read-only MCP tools for funnels, retention, trends, paths, and event counts.
      657 npm
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Connect to your Mixpanel data. Query events, retention, and funnel data from Mixpanel analytics.
      19
      19
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      MCP server for Mixpanel product analytics that enables natural language querying of events, funnels, retention, cohorts, and user profiles, plus JQL support.
      33 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to explore a synthetic product-event dataset and answer questions about signups, trends, funnels, and property breakdowns using a small set of composable, self-describing tools that return precomputed totals and actionable error hints.
      MIT
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.