Skip to main content
Glama
Haydebug

roblox-analytics-mcp

by Haydebug

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
list_metricsA

Browse the 168 metrics the Roblox Analytics Query API supports, across 16 categories (Retention, Engagement, Monetization, Acquisition, Performance & Stability, Economy, Funnels, Custom Events, Thumbnails, Speech-to-Text, Text-to-Speech, Matchmaking, Data Store, Memory Stores, Safety, Advertising). Start here when you do not already know the exact metric name — names are case-sensitive and the API rejects anything it does not recognise. Filter by free-text search, category, a dimension the metric must support, or a granularity it must allow. Returns names and labels only unless includeDetails is set.

describe_metricA

Full definition of one or more metrics: display label, category, every granularity the API accepts, how many days of history are retained, and every dimension valid in breakdown or filter. Check this before querying an unfamiliar metric — an unsupported granularity or dimension returns an opaque 400 and burns query budget.

list_dimensionsA

List the 69 dimensions available for breakdowns and filters, each with the metrics that support it. Use this to answer 'what can I slice this by' or, in reverse, 'which metrics can I break down by Country'. Dimension values (the actual countries, product IDs, funnel steps) come from list_dimension_values.

query_metricA

Query one analytics metric as a time series. This is the core read tool — everything the Analytics Query API exposes is reachable through it.

Returns, per series: summary statistics (first, last, min, max, mean, median, stdDev, sum, percent change, trend per bucket), outlier buckets beyond 2.5 standard deviations, any buckets the API returned no data for, and the raw data points.

Use breakdown to split into one series per dimension value, and filter to narrow the population. The request is validated against the metric's documented capabilities before it is sent, so mistakes come back as a clear message rather than an opaque 400.

Note aggregationHint: for rates, averages, and percentiles the sum of buckets is not a meaningful number — read mean instead.

query_metricsA

Query several metrics over the same time range in one call, with the same breakdown and filter applied to each. Prefer this over repeated query_metric calls: the API allows only 30 queries per minute per account, and this paces them automatically.

A metric that fails (commonly because the experience does not use that feature) is reported with an error field and does not abort the rest. Breakdowns and filters a given metric does not support are dropped for that metric rather than failing it.

list_dimension_valuesA

List the actual values a dimension took over a date range — the countries, product IDs, funnel names, funnel step IDs, custom event names, or place versions present in your data. Run this before filtering: filters match raw values exactly, and guessing them wastes queries.

Values only appear for periods with activity, so widen the range if something you expect is missing. The metric argument selects which namespace of dimensions to resolve against; it does not compute the metric.

get_analytics_operationA

Fetch the result of a long-running analytics operation by its path. Queries normally poll themselves to completion; this is the escape hatch for one that timed out, using the path reported in the timeout message.

get_experience_overviewA

One-call health check for an experience. Pulls the headline KPIs — DAU, MAU, stickiness, visits, peak CCU, session length, playtime, D1/D7/D30 retention, revenue, ARPU, ARPPU, paying users and conversion — for a period, compares each against the immediately preceding period of equal length, and flags the ones that moved sharply.

Start here when asked how a game is doing, then drill in with breakdown_metric_by_segments or get_metric_report.

Each KPI reports how it was aggregated: api-period-total values come from a whole-period query, so user counts are distinct users rather than summed daily figures. This issues roughly two queries per metric against a 30-per-minute budget, so a full comparison run takes about a minute.

get_metric_reportA

Query a themed group of related metrics in one call. Packs: • retention: ForwardD1Retention, ForwardD7Retention, ForwardD30Retention, DailyCohortRetention, WeeklyCohortRetention, DauMauStickiness • engagement: DailyActiveUsers, MonthlyActiveUsers, AverageSessionLengthMinutes, AveragePlayTimeMinutesPerDAU, TotalPlayTimeHours, PeakConcurrentPlayers, Visits, SessionDurationSecondsP50, SessionDurationSecondsP90, TotalSessionsEndedInBucket • monetization: DailyRevenue, AverageRevenuePerUser, AverageRevenuePerPayingUser, PayingUsers, PayingUsersCVR, ItemMonetizationRevenue • acquisition: UniqueUsersWithImpressions, UniqueUsersWithClicks, UniqueUsersWithPlaySessions, QualifiedUniqueUsersWithPlaySessions, ImpressionCVR, ClickCVR, EndToEndCVR, QualifiedEndToEndCVR, RFYPlayThroughRate, RFYQualifiedPTR, RFYDeepEngagementRate • performance: ClientCrashRate15m, ClientCrashCount, ServerCrashCount, OomUnexpectedExits, ClientFpsP50, ClientFpsP10, ServerFrameRateP50, ClientMemoryUsageP90, ClientMemoryUsagePercentageP90, MemoryUsageP90, CpuTimeP90, ClientCpuTimeAvg, CpuCoreUtilization • economy: EconomyTransactionAmount, EconomyTransactionCount, EconomyAverageWalletBalance • thumbnails: ThumbnailImpressions, ThumbnailQualifiedPlays, ThumbnailQualifiedPTR, ThumbnailL7QualifiedPTR, ThumbnailAverageSessionLengthMinutes • safety: TotalAbuseReports, UniqueAbuseReportSubmittersPer1000PlaytimeHours • ads: AdsPublisherReportingTotalImpressions, AdsPublisherReportingTotalRevenueRobux, AdsPublisherReportingVideo2DImpressions, AdsPublisherReportingVideo2DRevenueRobux, AdsPublisherReportingVideo2DDailyUniqueViewer, AdsPublisherReportingVideo2DEpmNoUnvalidatedPc • infrastructure: DataStoreRequests, DataStoreStorageUsageBytes, DataStoreReadRequests, DataStoreWriteRequests, DataStoreRequestsByStatus, MemoryStoreRequests, MemoryStoreMemoryUsageBytes • customEvents: CustomEventCount, CustomEventCountUser, CustomEventSumValue, CustomEventAvgValue, CustomEventAvgPerUserValue

Use this when a question is about an area rather than a single number — 'how is monetization doing', 'is performance regressing', 'where is acquisition leaking'. Optionally break every metric down by a dimension and compare against the preceding period. Metrics the experience has no data for come back with an error field rather than failing the report.

Note the performance pack only retains 28 days of history.

breakdown_metric_by_segmentsA

Slice one metric by every dimension it supports — platform, country, age group, new vs returning, payer status, device, locale, place version, and so on — in a single call, ranked within each dimension.

This is the fastest way to answer 'who is this bad for?'. A crash rate or retention figure that looks acceptable overall is often far worse on one platform or in one country, and this surfaces that without guessing which dimension to try. For rate-like metrics it flags segments running at least 1.5x or at most 0.67x the overall value.

Costs one query per dimension, so restrict dimensions if you only care about a few.

compare_periodsA

Compare metrics between two time ranges, with absolute and percent change per series. Use it to measure the effect of an update, an event, or a marketing push: set current to the window after the change and leave baseline empty to compare against the equal-length window immediately before it, or set baseline explicitly to compare against, say, the same week last year.

With a breakdown, series are matched by label so you can see which platform or country actually moved.

analyze_funnelA

Resolve an experience's funnels end to end: discover which funnels exist, discover their step IDs, then pull users, overall completion, step-to-step completion, and churn for every step — ordered, with the biggest drop-off called out.

Funnel step IDs are defined by your own AnalyticsService:LogFunnelStepEvent calls rather than by Roblox, so they must be discovered before they can be queried; this handles that two-stage lookup for you. Omit funnelName to report on every funnel found.

Steps only appear for days a player actually reached them, so use a generous range (90 days is a safe default) or late steps will look absent rather than unreached.

get_universe_infoA

Metadata and public storefront stats for an experience: name, description, creator, creation and last-update dates, root place, live player count, lifetime visits, favourites, and the like/dislike ratio.

The like ratio, favourite count, and lifetime visits are not available through the Analytics Query API at all, so this complements the metric tools — a retention problem alongside a falling like ratio reads very differently from one without.

Public stats need no API key and work for experiences you do not own, which makes this usable for competitor comparison. The Open Cloud metadata portion needs a key with universe read access and is reported as an error if the key is analytics-only.

get_public_game_statsA

Public storefront stats for up to 50 universes at once: live player count, lifetime visits, favourites, like/dislike ratio, genre, server size, and last-update date. No API key needed, so this works for any public experience.

Use it to benchmark against competitors, or to size up several of your own experiences before deciding which to analyse in depth.

whoamiA

Identify the owner of the configured API key, and report exactly what it can read.

Open Cloud keys are otherwise anonymous — no analytics endpoint reveals the caller — so call this first whenever you need to know whose experiences these are, or when a query fails and you cannot tell whether the cause is a missing scope, a disabled key, or the wrong universe.

Returns the key's name, the Roblox account that created it (with username), whether it is enabled and unexpired, its scopes, and which universes it covers — where * means every experience the owner can access. Optionally also lists the owner's groups, which is usually where a studio's real titles live.

find_universesA

Find universe IDs for experiences, by name or by creator.

With no arguments it identifies the API key's owner automatically and returns every experience on their account plus every experience in all of their groups — which is where studio titles usually live, so a personal-account-only search will often miss the game you want. Add search to filter by name; results are ranked by lifetime visits, so the real title outranks similarly-named test places.

Pass username, userId, or groupId to target someone else instead.

Scanning many groups takes several requests. Any source that could not be read is reported in errors rather than silently omitted — an empty result with errors present means the scan was throttled, not that the creator has no games.

get_place_infoA

Open Cloud metadata for one place within a universe: name, description, server size, and current server fill behaviour. Useful when performance metrics broken down by Place point at a specific place ID you need to identify.

get_server_statusA

Check how this MCP server is configured: whether an API key is available and where it came from, the default universe, saved aliases, and the query budget. Call this first if an analytics tool returns an authentication error — it distinguishes a missing key from a key that lacks the analytics scope.

set_default_universeA

Store a default universe ID so later tool calls can omit universeId, and optionally save a short alias for it. Writes to this server's local config file; it does not change anything on Roblox.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Haydebug/Roblox-MCP-Analytics'

If you have feedback or need assistance with the MCP directory API, please join our Discord server