Connection check
verified live · 20h ago
analytics-mcp
Query and analyse your data from Bitmovin Observability
Tools
11
GitHub stars
—
Installs / wk
—
Licence
—
Transport
streamable-http, sse
Last checked
20h ago
Tools & capabilities
11 toolsRead from the running server on 20h ago.
analyzeImpression
read-only
licenseKey*user_intentimpressionId*
Deep-dive analysis of a SINGLE playback session identified by a specific impressionId: static properties, aggregated metrics, state-transition timeline, and an AI-powered interpret… Deep-dive analysis of a SINGLE playback session identified by a specific impressionId: static properties, aggregated metrics, state-transition timeline, and an AI-powered interpretation of session quality. Use for detailed single-session troubleshooting. REQUIRES an impressionId. Do NOT use this for license-wide metrics, totals, trends, or any time-range ('last week', start/end) analysis — this tool does not accept start/end. For metrics over a time period use the 'query' tool; for breakdowns by category use 'queryGroupBy'.
fetchImpressions
read-only
end*limitstart*filterslicenseKey*user_intent
List the impression ids (individual playback session ids) for a license over a time range, optionally narrowed by filters. Returns the ids themselves — NOT counts, totals, or trend… List the impression ids (individual playback session ids) for a license over a time range, optionally narrowed by filters. Returns the ids themselves — NOT counts, totals, or trends. Use this to enumerate sessions before drilling into specific ones with `getImpressionOverview` or `analyzeImpression`. Typical uses: 'give me impression ids from yesterday', 'list sessions on Safari that errored last week', 'sample sessions from country US'. Every matching session is eligible (including failed/setup sessions), not only successful plays. Results are capped (default 100, max 200); if truncated, narrow the timeframe/filters or raise `limit`. REQUIRED: 1) a licenseKey (use `peekAllLicenses` if none given). OPTIONAL: 2) use `searchFilters` to resolve filter attributes/operators before setting `filters`. For metric counts/trends over a period use `query` / `queryTotal`; for category breakdowns use `queryGroupBy`.
getAvailableFilters
read-only
licenseKeyuser_intent
List the full catalog of filter attributes with their supported operators. Prefer searchFilters to resolve a single attribute; use this only when you need every filter. List the full catalog of filter attributes with their supported operators. Prefer searchFilters to resolve a single attribute; use this only when you need every filter.
getAvailableMetrics
read-only
user_intent
List the full catalog of metrics with their supported aggregation methods. Prefer searchMetrics to resolve a single keyword; use this only when you need every metric. List the full catalog of metrics with their supported aggregation methods. Prefer searchMetrics to resolve a single keyword; use this only when you need every metric.
getImpressionOverview
read-only
licenseKey*user_intentimpressionId*
Inspect a SINGLE playback session identified by a specific impressionId. Returns that one session's static properties (device, location, player) and its aggregated metrics (total p… Inspect a SINGLE playback session identified by a specific impressionId. Returns that one session's static properties (device, location, player) and its aggregated metrics (total played time, buffering, video quality). REQUIRES an impressionId. Do NOT use this for license-wide metrics, totals, trends, or any time-range ('last week', start/end) analysis — this tool does not accept start/end. For metrics over a time period use the 'query' tool; for breakdowns by category use 'queryGroupBy'.
peekAllLicenses
read-only
user_intent
View a summary of all available licenses with their recent play counts and percentage distribution. Use this to understand what licenses exist and their relative usage. When a user… View a summary of all available licenses with their recent play counts and percentage distribution. Use this to understand what licenses exist and their relative usage. When a user asks about licenses by ranking (e.g., 'biggest', 'most active', 'first'), use this to identify which license matches that criteria before querying.
query
read-only
end*start*metric*filterslicenseKey*percentile
+2
Query a metric over a time range (start/end) for a license as a TIME SERIES — always renders a chart. Use this for trends and license-wide analytics over a period (e.g. 'last week'… Query a metric over a time range (start/end) for a license as a TIME SERIES — always renders a chart. Use this for trends and license-wide analytics over a period (e.g. 'last week', 'last 30 days', 'yesterday'). Bucket size is chosen automatically from start/end; there is no interval field to set. For a single aggregated number (one total/average over the whole period, NO chart), use the separate `queryTotal` tool instead. IMPORTANT: Before using this tool, you must: 1) Resolve the correct metric keyword - commonly used names may be mapped differently in the API (e.g., 'plays' is actually 'impression_id'). Prefer the 'searchMetrics' tool to find the right keyword cheaply; use 'getAvailableMetrics' only when you need the full catalog. 2) Ensure you have a licenseKey. If the user hasn't specified one use `peekAllLicenses`. AD ANALYTICS: ad metrics use 'ad_'-prefixed keywords and are queried against a separate ads dataset. The ad completion funnel is: 'ad_quartile_1' (first quartile / 25%) -> 'ad_midpoint' (50%) -> 'ad_quartile_3' (third quartile / 75%) -> 'ad_completions'. Other ad metrics: 'ad_impressions', 'ad_starts', 'ad_clicks', 'ad_skips', 'ad_startup_time', 'ad_error_percentage', 'ad_error_sessions', 'ad_time_played', 'ad_play_percentage', 'ad_unique_users'. For ad questions, if the user has NOT specified a license, call `peekAllLicenses` — its output shows which licenses have ad data. If EXACTLY ONE license has ad data, use it automatically (state which one you picked); if SEVERAL do, present those and ASK the user to choose ONE; if NONE do, tell the user no ad data is available. Do NOT query multiple licenses; reuse the chosen license for the rest of the conversation. With an ad metric, filters and groupBy must use the AD-specific attributes from 'searchFilters' / 'getAvailableFilters' (e.g. 'AD_SYSTEM', 'AD_POSITION', 'ADVERTISER_NAME') — playback attributes and ad attributes are NOT interchangeable. OPTIONAL 3) Use the 'searchFilters' tool to find filter attributes/operators (or 'getAvailableFilters' for the full list).
queryGroupBy
read-only
end*start*metric*filtersgroupBy*licenseKey*
+3
query metric grouped by categories. IMPORTANT: Before using this tool, you must: 1) Resolve the correct metric keyword - commonly used names may be mapped differently in the API (e… query metric grouped by categories. IMPORTANT: Before using this tool, you must: 1) Resolve the correct metric keyword - commonly used names may be mapped differently in the API (e.g., 'plays' is actually 'impression_id'). Prefer the 'searchMetrics' tool to find the right keyword cheaply; use 'getAvailableMetrics' only when you need the full catalog. 2) Ensure you have a licenseKey. If the user hasn't specified one use `peekAllLicenses`. AD ANALYTICS: ad metrics use 'ad_'-prefixed keywords and are queried against a separate ads dataset. The ad completion funnel is: 'ad_quartile_1' (first quartile / 25%) -> 'ad_midpoint' (50%) -> 'ad_quartile_3' (third quartile / 75%) -> 'ad_completions'. Other ad metrics: 'ad_impressions', 'ad_starts', 'ad_clicks', 'ad_skips', 'ad_startup_time', 'ad_error_percentage', 'ad_error_sessions', 'ad_time_played', 'ad_play_percentage', 'ad_unique_users'. For ad questions, if the user has NOT specified a license, call `peekAllLicenses` — its output shows which licenses have ad data. If EXACTLY ONE license has ad data, use it automatically (state which one you picked); if SEVERAL do, present those and ASK the user to choose ONE; if NONE do, tell the user no ad data is available. Do NOT query multiple licenses; reuse the chosen license for the rest of the conversation. With an ad metric, filters and groupBy must use the AD-specific attributes from 'searchFilters' / 'getAvailableFilters' (e.g. 'AD_SYSTEM', 'AD_POSITION', 'ADVERTISER_NAME') — playback attributes and ad attributes are NOT interchangeable. 3) REQUIRED: Resolve the exact groupBy attribute name BEFORE calling this tool — do NOT guess. Prefer the 'searchFilters' tool to find the right attribute; use 'getAvailableFilters' only when you need the full catalog. Common naming guesses are often wrong (e.g., 'OPERATING_SYSTEM' is invalid; the correct attribute is 'OPERATINGSYSTEM'). Calling this tool with an unknown attribute will fail with a validation error. 4) MANDATORY when grouping by ERROR_CODE: after this call returns, you MUST also call the Bitmovin docs MCP tool (typically `general_docs_ask_bitmovin_docs`) for the top error codes in the result and quote its output in your answer. DO NOT BATCH — issue ONE docs-tool call per error code (5 codes → 5 separate calls). Batched 'explain these codes' questions FAIL with 'Invalid response format' and return nothing usable. You may NOT explain error codes from training-data knowledge — the user expects official documentation. An answer that lists error codes without per-code docs-tool lookups is considered INCOMPLETE and INCORRECT.
queryTotal
read-only
end*start*metric*filterslicenseKey*percentile
+2
Get an aggregated value (one number) for a metric over a time range — no chart, no time bucketing. Can fetch SEVERAL metrics in one call: pass an array to `metric` to get one value… Get an aggregated value (one number) for a metric over a time range — no chart, no time bucketing. Can fetch SEVERAL metrics in one call: pass an array to `metric` to get one value per metric (e.g. the ad completion funnel), instead of calling this tool repeatedly. Use ONLY when the user asks for totals/averages/median/p95 over a whole period (e.g. 'total plays last month', 'average startup time yesterday', 'p95 rebuffer last week', 'the ad funnel counts last week'). For trends or any 'how did X change over time' / 'show last week' question, use the `query` tool instead — it always renders a chart. IMPORTANT: Before using this tool, you must: 1) Resolve the correct metric keyword - commonly used names may be mapped differently in the API (e.g., 'plays' is actually 'impression_id'). Prefer the 'searchMetrics' tool to find the right keyword cheaply; use 'getAvailableMetrics' only when you need the full catalog. 2) Ensure you have a licenseKey. If the user hasn't specified one use `peekAllLicenses`. AD ANALYTICS: ad metrics use 'ad_'-prefixed keywords and are queried against a separate ads dataset. The ad completion funnel is: 'ad_quartile_1' (first quartile / 25%) -> 'ad_midpoint' (50%) -> 'ad_quartile_3' (third quartile / 75%) -> 'ad_completions'. Other ad metrics: 'ad_impressions', 'ad_starts', 'ad_clicks', 'ad_skips', 'ad_startup_time', 'ad_error_percentage', 'ad_error_sessions', 'ad_time_played', 'ad_play_percentage', 'ad_unique_users'. For ad questions, if the user has NOT specified a license, call `peekAllLicenses` — its output shows which licenses have ad data. If EXACTLY ONE license has ad data, use it automatically (state which one you picked); if SEVERAL do, present those and ASK the user to choose ONE; if NONE do, tell the user no ad data is available. Do NOT query multiple licenses; reuse the chosen license for the rest of the conversation. With an ad metric, filters and groupBy must use the AD-specific attributes from 'searchFilters' / 'getAvailableFilters' (e.g. 'AD_SYSTEM', 'AD_POSITION', 'ADVERTISER_NAME') — playback attributes and ad attributes are NOT interchangeable.
searchFilters
read-only
limitquery*licenseKeyuser_intent
Find the exact filter/group-by attribute keyword for a topic or question (e.g. 'browser', 'device type', 'content tier'). Preferred way to resolve an attribute; use 'licenseKey' to… Find the exact filter/group-by attribute keyword for a topic or question (e.g. 'browser', 'device type', 'content tier'). Preferred way to resolve an attribute; use 'licenseKey' to resolve custom namings of attributes; use getAvailableFilters only to list the full static catalog.
searchMetrics
read-only
limitquery*user_intent