Input schema
{
"type": "object",
"properties": {
"operation": {
"type": "string",
"enum": [
"getDailyVisibility",
"getVisibilityRank",
"getVisibilityRankByTopic",
"getShareOfVoice",
"getShareOfModel",
"getShareOfPlatform",
"getVisibilityMetric",
"getBrandPositionMetric",
"getMentionsMetric",
"getResponsesMetric",
"getShareOfVoiceCard",
"getSourceOfCitations",
"getVisibilityMetrics"
],
"description": "Legacy Meikai MCP tool to run through this v2 router."
},
"arguments": {
"type": "object",
"description": "Arguments for the selected operation. Use the same fields as the legacy tool named by operation. A brand_id, when accepted, must be a UUID.",
"additionalProperties": true,
"anyOf": [
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (optional, defaults to last 7 days)"
},
"end_date": {
"type": "string",
"description": "End date in YYYY-MM-DD format (optional, defaults to the server's last complete day (yesterday))"
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). Extract from the user's message or from previous tool results (e.g., from getBrandTopics). Use this to filter data to a specific topic. To include topic as a dimension in the output, use dimensions=['topic'] instead or in addition."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage. Use this to filter data to a specific funnel stage. To include funnel as a dimension in the output, use dimensions=['funnel'] instead or in addition."
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g. 'chatgpt', 'gemini', 'googleaioverview')"
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g. 'gpt-5', 'gemini-3.5-flash'). Model names vary by platform"
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
},
"dimensions": {
"type": "array",
"items": {
"type": "string",
"enum": [
"topic",
"funnel"
]
},
"description": "Dimensions to include in the result set. Provide an array of dimension names, e.g., ['topic', 'funnel']. When 'topic' is included, each result row will have a 'topicId' field. When 'funnel' is included, each result row will have a 'funnel' field. This enables dimensional analysis. You can combine this with topic_id and/or funnel filter parameters to filter while including dimensions."
}
},
"required": [],
"title": "getDailyVisibility",
"description": "getDailyVisibility: Get daily visibility data for a brand over a date range. Visibility is the percentage of LLM responses that mention the brand (responses_with_mentions / total_responses). Returns per-day visibility values for each date in the range, allowing day-over-day trend analysis. Each result includes: date, brandName, value (visibility percentage), responses_with_mentions (count of responses mentioning the brand), and total_responses (total responses analyzed for that date). IMPORTANT: To enable dimensional analysis, use the 'dimensions' parameter. Provide dimensions as an array of strings, e.g., ['topic', 'funnel'] to include both topic and funnel as dimensions in the result set. When 'topic' is in dimensions, each result row will include a 'topicId' field. When 'funnel' is in dimensions, each result row will include a 'funnel' field. You can also provide topic_id and/or funnel as separate filter parameters to filter the data while including dimensions. For example: dimensions=['topic', 'funnel'] with topic_id='xxx' will show visibility broken down by topic and funnel dimensions, filtered to the specified topic. Also supports filtering by platform and model (these do not appear as dimensions). If brand_id, start_date, or end_date are not provided, uses defaults from UI context (current brand and last 7 days)."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (optional, defaults to last 7 days)"
},
"end_date": {
"type": "string",
"description": "End date in YYYY-MM-DD format (optional, defaults to the server's last complete day (yesterday))"
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). Extract from the user's message or from previous tool results (e.g., from getBrandTopics)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage"
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g. 'chatgpt', 'gemini', 'googleaioverview')"
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g. 'gpt-5', 'gemini-3.5-flash'). Model names vary by platform"
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getVisibilityRank",
"description": "getVisibilityRank: Get one visibility leaderboard showing how the target brand ranks against all competitors in one filtered scope. It returns an entity leaderboard, not a grouped breakdown. Use a breakdown operation when the requested result must contain one row per platform, model, topic, or funnel. Use each row's `rank` value as-is (do not subtract 1 or recompute excluding the target brand). Supports filtering by funnel, platform, model, and topic. A platform filter selects a provider surface; a model filter selects a concrete model name. When explicit start_date and end_date are known, omit lookback_days. Missing brand or dates use the UI-context defaults."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "Brand UUID. Optional when MCP context provides the current brand."
},
"start_date": {
"type": "string",
"description": "Start date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided."
},
"end_date": {
"type": "string",
"description": "End date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided; otherwise defaults to the server's last complete day (yesterday)."
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic UUID (comma-separated UUIDs allowed)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage."
},
"platform": {
"type": "string",
"description": "Filter by AI platform (maps to query param ai_platform), e.g. chatgpt, gemini, googleaioverview."
},
"model": {
"type": "string",
"description": "Filter by AI model name (platform-specific)."
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
},
"limit_per_topic": {
"type": "integer",
"minimum": 1,
"maximum": 15,
"default": 10,
"description": "Max brands returned per topic (default 10, max 15). The monitored brand is included even when its rank exceeds this."
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1,
"description": "Page of TOPICS (not of brands)."
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 10,
"description": "Topics per page (default and max 10)."
},
"sort_topics_by": {
"type": "string",
"enum": [
"responses",
"name"
],
"default": "responses",
"description": "Topic ordering: by response volume (default) or alphabetically."
},
"favorite_competitors_only": {
"type": "boolean",
"default": false,
"description": "Restrict to the target brand plus favorite competitors. This changes the ranking universe, so ranks differ from the full-market ones."
}
},
"required": [],
"title": "getVisibilityRankByTopic",
"description": "getVisibilityRankByTopic: Get the competitive leaderboard broken down by topic: for every topic the brand tracks, the ranked list of brands by visibility, with rank, previous_rank, trend, visibility_pct and previous_visibility_pct computed WITHIN that topic (the denominator is the topic's own response volume, not the brand-wide one). Use it for questions like 'which topics am I winning or losing', 'where does competitor X beat me', or 'on which topic did my rank drop'. Results are grouped per topic and each group reports ranked_brand_count, returned_count and truncated. IMPORTANT: ranks restart at 1 in every topic, so they are NOT comparable across topics, and NOT comparable to getVisibilityRank, which ranks across all topics combined - never merge the two into one ordering. A brand missing from a topic can mean four different things: it is outside the top limit_per_topic, it has no data in the current period, it is an ignored competitor, or ranking_scope restricts the list to favorites; it never means the brand left the market. Setting favorite_competitors_only CHANGES THE RANKING (ranks are then computed inside the favorite set only), it does not merely shorten the payload. The monitored brand is always included when it has data, even below the cap. For the full uncapped leaderboard of a single topic, call getVisibilityRank with that topic_id instead. Requires one explicit brand_id; the company-wide scope is not supported."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (optional, defaults to last 7 days)"
},
"end_date": {
"type": "string",
"description": "End date in YYYY-MM-DD format (optional, defaults to the server's last complete day (yesterday))"
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). Extract from the user's message or from previous tool results (e.g., from getBrandTopics)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage"
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g. 'chatgpt', 'gemini', 'googleaioverview')"
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g. 'gpt-5', 'gemini-3.5-flash'). Model names vary by platform"
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getShareOfVoice",
"description": "getShareOfVoice: Get share of voice metrics showing what percentage of total brand mentions belong to your brand versus competitors. Share of voice is calculated as your brand's mentions divided by total mentions across all brands. A higher share means your brand dominates the conversation in LLM responses. Returns breakdown by brand with percentages. Supports filtering by funnel (awareness, consideration, conversion), platform, model, and topic. If brand_id, start_date, or end_date are not provided, uses defaults from UI context (current brand and last 7 days)."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (optional, defaults to last 7 days)"
},
"end_date": {
"type": "string",
"description": "End date in YYYY-MM-DD format (optional, defaults to the server's last complete day (yesterday))"
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). Extract from the user's message or from previous tool results (e.g., from getBrandTopics)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage"
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g. 'chatgpt', 'gemini', 'googleaioverview')"
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g. 'gpt-5', 'gemini-3.5-flash'). Model names vary by platform"
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getShareOfModel",
"description": "getShareOfModel: Get share of model metrics showing visibility breakdown by AI model (e.g. GPT-5, Gemini 3.5 Flash). Shows which specific models mention your brand most often and the visibility percentage for each model. Helps identify which models are most important for your brand's AI visibility. Supports filtering by funnel (awareness, consideration, conversion), platform, model, and topic. If brand_id, start_date, or end_date are not provided, uses defaults from UI context (current brand and last 7 days)."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (optional, defaults to last 7 days)"
},
"end_date": {
"type": "string",
"description": "End date in YYYY-MM-DD format (optional, defaults to the server's last complete day (yesterday))"
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). Extract from the user's message or from previous tool results (e.g., from getBrandTopics)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage"
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g. 'chatgpt', 'gemini', 'googleaioverview')"
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g. 'gpt-5', 'gemini-3.5-flash'). Model names vary by platform"
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getShareOfPlatform",
"description": "getShareOfPlatform: Get share of platform metrics showing visibility breakdown by AI platform (e.g. ChatGPT, Gemini). Shows which platforms mention your brand most often and the visibility percentage for each platform. Helps identify which platforms are most important for your brand's AI visibility. Supports filtering by funnel (awareness, consideration, conversion), platform, model, and topic. If brand_id, start_date, or end_date are not provided, uses defaults from UI context (current brand and last 7 days)."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "Brand UUID. Optional when MCP context provides the current brand."
},
"start_date": {
"type": "string",
"description": "Start date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided."
},
"end_date": {
"type": "string",
"description": "End date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided; otherwise defaults to the server's last complete day (yesterday)."
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic UUID (comma-separated UUIDs allowed)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage."
},
"platform": {
"type": "string",
"description": "Filter by AI platform (maps to query param ai_platform), e.g. chatgpt, gemini, googleaioverview."
},
"model": {
"type": "string",
"description": "Filter by AI model name (platform-specific)."
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getVisibilityMetric",
"description": "getVisibilityMetric: Brand Monitor visibility card: share of analyzed responses that mention the target brand. Success: JSON array (usually one row). value = responses_with_mentions / total_responses; previous_value; pct_change; responses_with_mentions; total_responses. Filters: brand_id, lookback_days (preferred for relative periods; overrides dates), start_date, end_date (API-required unless MCP context fills them), topic_id, funnel, platform (maps to ai_platform), model, calculation_mode, lens_competitor_name (Competitor Lens: analyze a competitor instead of the brand). Error: {success:false,error:string}."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "Brand UUID. Optional when MCP context provides the current brand."
},
"start_date": {
"type": "string",
"description": "Start date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided."
},
"end_date": {
"type": "string",
"description": "End date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided; otherwise defaults to the server's last complete day (yesterday)."
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic UUID (comma-separated UUIDs allowed)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage."
},
"platform": {
"type": "string",
"description": "Filter by AI platform (maps to query param ai_platform), e.g. chatgpt, gemini, googleaioverview."
},
"model": {
"type": "string",
"description": "Filter by AI model name (platform-specific)."
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getBrandPositionMetric",
"description": "getBrandPositionMetric: Get the brand's average position rank in LLM responses. Use this for questions such as 'what is my brand average position?', 'average brand rank?', or 'brand position rank?'. This is not visibility rank and not shopping carousel position. Lower is better; position 1 means the brand is the first eligible brand mentioned. Success: JSON array (usually one row). value = average response-level position rank across responses mentioning the brand; previous_value; pct_change (positive means the average numeric rank increased/worsened, negative means it improved); observation_count; previous_observation_count; brand_count_avg = average distinct eligible brands mentioned in those responses. Filters: brand_id, lookback_days (preferred for relative periods; overrides dates), start_date, end_date (API-required unless MCP context fills them), topic_id, funnel, platform (maps to ai_platform), model, calculation_mode, lens_competitor_name (Competitor Lens: analyze a competitor instead of the brand). Error: {success:false,error:string}."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "Brand UUID. Optional when MCP context provides the current brand."
},
"start_date": {
"type": "string",
"description": "Start date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided."
},
"end_date": {
"type": "string",
"description": "End date (YYYY-MM-DD). Omitted dates are resolved server-side from MCP context date_range_preset + reference_end_date, or from lookback_days when provided; otherwise defaults to the server's last complete day (yesterday)."
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic UUID (comma-separated UUIDs allowed)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage."
},
"platform": {
"type": "string",
"description": "Filter by AI platform (maps to query param ai_platform), e.g. chatgpt, gemini, googleaioverview."
},
"model": {
"type": "string",
"description": "Filter by AI model name (platform-specific)."
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getMentionsMetric",
"description": "getMentionsMetric: Brand Monitor mentions card: average target-brand mentions per response that mentions the brand (not raw mention volume). Success: JSON array (usually one row). value = brand_mentions / responses_with_mentions; previous_value; pct_change; brand_mentions (raw weighted count); responses_with_mentions (denominator). Filters: brand_id, lookback_days (preferred for relative periods; overrides dates), start_date, end_date (API-required unless MCP context fills them), topic_id, funnel, platform (maps to ai_platform), model, calculation_mode, lens_competitor_name (Competitor Lens: analyze a competitor instead of the brand). Error: {success:false,error:string}."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (optional, defaults to last 7 days)"
},
"end_date": {
"type": "string",
"description": "End date in YYYY-MM-DD format (optional, defaults to the server's last complete day (yesterday))"
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). Extract from the user's message or from previous tool results (e.g., from getBrandTopics)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage"
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g. 'chatgpt', 'gemini', 'googleaioverview')"
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g. 'gpt-5', 'gemini-3.5-flash'). Model names vary by platform"
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getResponsesMetric",
"description": "getResponsesMetric: Get responses count metric showing the total number of LLM responses analyzed for a brand, with period-over-period comparison. This is the denominator used in visibility calculations (visibility = mentions / responses_count). Returns current response count, previous count, and percentage change. Supports filtering by funnel (awareness, consideration, conversion), platform, model, and topic. If brand_id, start_date, or end_date are not provided, uses defaults from UI context (current brand and last 7 days)."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (optional, defaults to last 7 days)"
},
"end_date": {
"type": "string",
"description": "End date in YYYY-MM-DD format (optional, defaults to the server's last complete day (yesterday))"
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). Extract from the user's message or from previous tool results (e.g., from getBrandTopics)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage"
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g. 'chatgpt', 'gemini', 'googleaioverview')"
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g. 'gpt-5', 'gemini-3.5-flash'). Model names vary by platform"
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getShareOfVoiceCard",
"description": "getShareOfVoiceCard: Get share of voice card data showing what percentage of total brand mentions belong to your brand versus competitors, with period-over-period comparison. Share of voice = your_brand_mentions / total_mentions_all_brands. Returns current share percentage, previous share, and percentage change to track competitive positioning trends. Supports filtering by funnel (awareness, consideration, conversion), platform, model, and topic. If brand_id, start_date, or end_date are not provided, uses defaults from UI context (current brand and last 7 days)."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (optional, defaults to last 7 days)"
},
"end_date": {
"type": "string",
"description": "End date in YYYY-MM-DD format (optional, defaults to the server's last complete day (yesterday))"
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). Extract from the user's message or from previous tool results (e.g., from getBrandTopics)."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage"
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g. 'chatgpt', 'gemini', 'googleaioverview')"
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g. 'gpt-5', 'gemini-3.5-flash'). Model names vary by platform"
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getSourceOfCitations",
"description": "getSourceOfCitations: Get source of citations breakdown by media type showing where citations come from (Earned Media, Competition, Social Media, Owned Media). Citations are URLs/sources that LLMs reference when mentioning your brand. This shows the distribution of citation sources, helping understand which types of media drive your brand's AI visibility. Supports filtering by funnel (awareness, consideration, conversion), platform, model, and topic. If brand_id, start_date, or end_date are not provided, uses defaults from UI context (current brand and last 7 days)."
},
{
"type": "object",
"properties": {
"brand_id": {
"type": "string",
"description": "The UUID of the brand (optional, defaults to current brand)"
},
"start_date": {
"type": "string",
"description": "Start date in YYYY-MM-DD format (optional, defaults to last 7 days)"
},
"end_date": {
"type": "string",
"description": "End date in YYYY-MM-DD format (optional, defaults to the server's last complete day (yesterday))"
},
"lookback_days": {
"type": "integer",
"minimum": 1,
"maximum": 365,
"description": "Inclusive lookback window in days (language-agnostic). Ends at reference_end_date from MCP context when available (last available data day / lastRunDate), otherwise at the server's last complete day (yesterday). When set, overrides start_date/end_date. Prefer this alone for relative periods such as 'last 30 days' \u2014 omit start_date and end_date."
},
"topic_id": {
"type": "string",
"description": "Filter by topic ID (UUID). Optional, defaults to current topic from UI context if available."
},
"funnel": {
"type": "string",
"enum": [
"awareness",
"consideration",
"conversion"
],
"description": "Filter by funnel stage"
},
"platform": {
"type": "string",
"description": "Filter by AI platform (e.g. 'chatgpt', 'gemini', 'googleaioverview')"
},
"model": {
"type": "string",
"description": "Filter by AI model name (e.g. 'gpt-5', 'gemini-3.5-flash'). Model names vary by platform"
},
"persona_id": {
"type": "string",
"description": "Filter by Prompt Studio persona UUID. Resolves to the persona's assigned active regular prompts (same as Brand Monitor persona filter). Use getPromptPersonas to list valid ids for the brand."
},
"calculation_mode": {
"type": "string",
"enum": [
"classic",
"weighted"
],
"description": "Calculation mode for visibility metrics. 'classic' uses unweighted calculations (default). 'weighted' applies Statcounter AI outbound-referral share weighting; this does not represent users or total AI usage."
},
"lens_competitor_name": {
"type": "string",
"description": "Competitor Lens: analyze this competitor instead of the monitored brand, keeping every other filter identical (same scope as the webapp's Competitor Lens selector). Accepts the competitor's name or any of its aliases, case-insensitive. Use getCompetitorMetrics to list the brand's competitors. Omit to analyze the brand itself."
}
},
"required": [],
"title": "getVisibilityMetrics",
"description": "getVisibilityMetrics: Get visibility metrics for a brand within a date range. Returns visibility data (percentage of LLM responses mentioning the brand) and trends with period-over-period comparison. Visibility = responses_with_mentions / total_responses. This is a comprehensive metric showing how visible your brand is in AI responses. Supports filtering by funnel (awareness, consideration, conversion), platform, model, and topic. If brand_id, start_date, end_date, or topic_id are not provided, uses defaults from UI context (current brand, last 7 days, and current topic if available)."
},
{
"title": "Compatibility fallback",
"description": "Allows legacy top-level arguments, server-side coercion, and one-shot argument recovery to run before the selected operation enforces its contract.",
"type": "object",
"additionalProperties": true,
"x-meikai-compatibility-fallback": true
}
]
}
},
"required": [
"operation"
],
"additionalProperties": true
}
Output schema
{
"anyOf": [
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Analytics result row."
},
"description": "Daily visibility time series (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getDailyVisibility output",
"x-meikai-operation": "getDailyVisibility"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Analytics result row."
},
"description": "Visibility rank rows (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getVisibilityRank output",
"x-meikai-operation": "getVisibilityRank"
},
{
"oneOf": [
{
"type": "object",
"additionalProperties": true,
"description": "Per-topic leaderboard groups, each with its own ranking and caps (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getVisibilityRankByTopic output",
"x-meikai-operation": "getVisibilityRankByTopic"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Analytics result row."
},
"description": "Share of voice breakdown (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getShareOfVoice output",
"x-meikai-operation": "getShareOfVoice"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Analytics result row."
},
"description": "Share of model breakdown (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getShareOfModel output",
"x-meikai-operation": "getShareOfModel"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Analytics result row."
},
"description": "Share of platform breakdown (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getShareOfPlatform output",
"x-meikai-operation": "getShareOfPlatform"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": [
"number",
"null"
],
"description": "Metric value for the current period."
},
"previous_value": {
"type": [
"number",
"null"
],
"description": "Metric value for the previous period of equal length."
},
"pct_change": {
"type": [
"number",
"null"
],
"description": "Relative change vs previous_value (decimal, e.g. 0.1 = +10%)."
},
"responses_with_mentions": {
"type": [
"number",
"null"
],
"description": "Responses mentioning the target brand (weighted)."
},
"total_responses": {
"type": [
"number",
"null"
],
"description": "Total responses analyzed (weighted)."
}
},
"additionalProperties": false,
"description": "Visibility card row: value = responses_with_mentions / total_responses."
},
"description": "Visibility card rows (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getVisibilityMetric output",
"x-meikai-operation": "getVisibilityMetric"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": [
"number",
"null"
],
"description": "Metric value for the current period."
},
"previous_value": {
"type": [
"number",
"null"
],
"description": "Metric value for the previous period of equal length."
},
"pct_change": {
"type": [
"number",
"null"
],
"description": "Relative change in average numeric rank vs the previous period. Positive means the rank increased/worsened; negative means it decreased/improved."
},
"observation_count": {
"type": "integer",
"minimum": 0,
"description": "Responses used for the current average position."
},
"previous_observation_count": {
"type": "integer",
"minimum": 0,
"description": "Responses used for the previous-period average position."
},
"brand_count_avg": {
"type": [
"number",
"null"
],
"description": "Average distinct eligible brands mentioned in current-period responses where the analyzed brand has a position."
}
},
"additionalProperties": false,
"description": "Average Brand Monitor position card. For each response mentioning the analyzed brand, brands are ranked by first mention; value is the average response-level rank. Lower is better and 1 means mentioned first."
},
"description": "Average brand-position card rows (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getBrandPositionMetric output",
"x-meikai-operation": "getBrandPositionMetric"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": [
"number",
"null"
],
"description": "Metric value for the current period."
},
"previous_value": {
"type": [
"number",
"null"
],
"description": "Metric value for the previous period of equal length."
},
"pct_change": {
"type": [
"number",
"null"
],
"description": "Relative change vs previous_value (decimal, e.g. 0.1 = +10%)."
},
"brand_mentions": {
"type": [
"number",
"null"
],
"description": "Weighted sum of target-brand mention counts in the period."
},
"responses_with_mentions": {
"type": [
"number",
"null"
],
"description": "Weighted count of responses that mention the target brand."
}
},
"additionalProperties": false,
"description": "Mentions card row: value = brand_mentions / responses_with_mentions (average mentions per response with a brand mention)."
},
"description": "Mentions card rows (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getMentionsMetric output",
"x-meikai-operation": "getMentionsMetric"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": [
"number",
"null"
],
"description": "Total responses in the current period."
},
"promptCount": {
"type": [
"number",
"null"
],
"description": "Distinct prompts in the period."
},
"modelCount": {
"type": [
"number",
"null"
],
"description": "Distinct models in the period."
}
},
"additionalProperties": false,
"description": "Responses count card (single object, not period comparison)."
},
"description": "Responses count card (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getResponsesMetric output",
"x-meikai-operation": "getResponsesMetric"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": [
"number",
"null"
],
"description": "Metric value for the current period."
},
"previous_value": {
"type": [
"number",
"null"
],
"description": "Metric value for the previous period of equal length."
},
"pct_change": {
"type": [
"number",
"null"
],
"description": "Relative change vs previous_value (decimal, e.g. 0.1 = +10%)."
},
"brand_mentions": {
"type": [
"number",
"null"
],
"description": "Target brand mention count (weighted)."
},
"total_mentions": {
"type": [
"number",
"null"
],
"description": "Total mentions across target brand and competitors (weighted)."
}
},
"additionalProperties": false,
"description": "Share-of-voice card row: value = brand_mentions / total_mentions."
},
"description": "Share-of-voice card rows (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getShareOfVoiceCard output",
"x-meikai-operation": "getShareOfVoiceCard"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true,
"description": "Analytics result row."
},
"description": "Citation media-type breakdown (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getSourceOfCitations output",
"x-meikai-operation": "getSourceOfCitations"
},
{
"oneOf": [
{
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": [
"number",
"null"
],
"description": "Metric value for the current period."
},
"previous_value": {
"type": [
"number",
"null"
],
"description": "Metric value for the previous period of equal length."
},
"pct_change": {
"type": [
"number",
"null"
],
"description": "Relative change vs previous_value (decimal, e.g. 0.1 = +10%)."
},
"responses_with_mentions": {
"type": [
"number",
"null"
],
"description": "Responses mentioning the target brand (weighted)."
},
"total_responses": {
"type": [
"number",
"null"
],
"description": "Total responses analyzed (weighted)."
}
},
"additionalProperties": false,
"description": "Visibility card row: value = responses_with_mentions / total_responses."
},
"description": "Visibility card rows (the corresponding Meikai service)."
},
{
"type": "object",
"properties": {
"success": {
"type": "boolean",
"const": false
},
"error": {
"type": "string"
}
},
"required": [
"success",
"error"
],
"additionalProperties": false
}
],
"title": "getVisibilityMetrics output",
"x-meikai-operation": "getVisibilityMetrics"
}
]
}