MCP App Store
by KeenEthics

Overview

The Meltwater MCP server connects AI tools and workflows to Meltwater’s media and social intelligence. Search billions of news articles and social posts, retrieve live metrics, trends, and sentiment, generate Boolean queries, and manage saved searches — all through natural language. Requires an active Meltwater subscription.

Tools

account_get_credit_usage

ChatGPT
Use this tool when the user asks how many Meltwater Intelligence Credits their account has consumed, what consumed them, or how consumption is trending. For example "how many credits have we used this month?", "who are our heaviest users?", or "which tools are costing us the most?". Covers credits consumed by the account's own users across the Meltwater MCP server and the Mira assistant. Set report_type to choose the view: usage_trend (credits and calls per day), top_users (highest consuming users first), top_tools (highest consuming tools first), or tool_calls (individual calls in time order). Every report also returns total credits and total calls for the period. All dates and times are UTC. end_date is EXCLUSIVE: activity on end_date itself is not counted, so to include a day set end_date to the day after. The top_users, top_tools and tool_calls views may be capped: when capped is true the rows returned are the maximum and there may be more, so rely on total_credits and total_calls for the complete-period figures. Do NOT use this tool to find out which tools the account can access or what a single tool costs per call: use account_list_mcp_tools for the catalogue and its credit costs.

account_list_mcp_tools

ChatGPT
Use this tool when the user asks what Meltwater tools or capabilities are available to them, what a tool costs in Intelligence Credits, or when you need to estimate the credit cost of a workflow before running it. Also use it when a tool you expected is not in your tool list, or a call was refused, to check whether that tool is truly available to the user. Returns every tool in the caller's Meltwater catalogue with its name, display title, cost tier (credit_tier), cost in credits (credit_cost), and, where one applies, required_permission with its required_permission_level — the app permission an account administrator can grant to unlock the tool. The response says nothing about entitlement: a tool the account has not bought is simply absent from the list, with no field explaining why. Do not tell the user a capability is missing for a specific reason unless required_permission names one. Do NOT use this tool to perform a Meltwater action or fetch Meltwater data: it only describes which capabilities exist and what they cost.

content_aggregate

ChatGPT
Compute metrics and aggregations over the complete set of Meltwater documents that match an optional Meltwater Boolean query and structured filters. Use this tool for document counts, totals, distributions, trends, period comparisons, grouped rankings, and questions such as "how many," "what share," or "top N." Aggregations operate on the complete matching set rather than the limited results returned by a document-retrieval tool. This tool returns aggregate statistics, not individual Meltwater documents. Use content_retrieve_keyword or content_retrieve_semantic when the user needs the matching posts or articles themselves. The result contains at most one item per requested aggregation family, labeled with a normalized output label that is not always identical to the requested family key (see the label output field's description); a family with no matching data is omitted rather than returned empty. Use metrics for a single ungrouped total.

content_describe_schema

ChatGPT
Describe one source-aware filter, aggregation, or sort schema. Used by the Meltwater document retrieval and aggregation tools. Start at /, then follow returned child paths. When several paths are already known, request them concurrently in the same turn. The returned schema is a standalone Draft 2020-12 JSON Schema fragment; children contains immediate navigation links. Avoid depth greater than 1 at a root because recursive schemas can exceed the response budget; increase depth only on a targeted child path. A child's description under children is a compact catalog summary for choosing a path, not its full contract. Follow the child's own path and read the loaded schema.description before constructing a filter or aggregation from it; the two commonly differ. This tool returns schema documentation only; it does not retrieve or aggregate Meltwater documents.

content_get_document

ChatGPT
Retrieves the complete field set for a single document by its ID, across both Listening (Explore) and Explore+. Requires the provider (listening or explore_plus) and the document ID. Returns all metadata, content, and any custom fields configured in the account.

content_get_document_by_url

ChatGPT
Use this tool when user wants to find a document by its URL in Meltwater.\nIf the document can be found, then the tool returns a legal-compliant document object in JSON format containing the document's title, publish date, content, author and source information.\nIf a document can not be found, but the source can be identified by the URL, the tool returns some source metadata info in JSON format.

content_get_source_types

ChatGPT
Use this tool when user wants to know available source types for getting or searching documents. Returns a list of source types which can be used as the sourceTypes parameter in content_get_document_by_url and content_search_documents_by_citation.

content_list_thread_documents

ChatGPT
Returns the documents threaded under a parent post — replies, reposts/retweets, and quote posts. Use this when you need the individual replies/reposts/quotes under a post, not just an aggregate count — for example to segment engagement by location or by repost time. Provide the parent document's ID (from a Listening search); its URL and publish date are resolved automatically, and the search is capped to one year from the parent's publish date. Returns the full child documents (paginated), each with its own fields including its own timestamp. document_count is the TOTAL number of matched documents across all pages (not the number returned on this page); fetch another page only when document_count is greater than page × page_size, otherwise all matching documents have already been returned.

content_retrieve_keyword

ChatGPT
Retrieve individual Meltwater documents matching an optional Meltwater Boolean query and structured filters. Use this tool when Meltwater documents must contain explicit terms or satisfy a Meltwater Boolean query. It is also the retrieval tool for a Meltwater customer's custom index (the Explore+ index) when source="custom". The result contains individual Meltwater documents. sort biases the results, so they are not necessarily ordered as requested. Do not use this tool to count or break down the complete matching set; use content_aggregate instead.

content_retrieve_semantic

ChatGPT
Retrieve individual Meltwater documents from the general index by semantic (vector) similarity to a natural-language query. Use this tool for concepts, themes, questions, and paraphrases when relevant Meltwater documents may not contain the user's exact wording. Results are ranked by semantic relevance. sort.on only biases that score, so results are not necessarily the top ones by that metric. Do not use this tool to count, rank groups, or break down the complete matching set. Retrieval is limited and relevance-ranked, so tallying returned documents will undercount; use content_aggregate instead.

explore_plus_list_custom_fields

ChatGPT
Returns all custom fields defined in the user's Explore+ account. Custom fields are user-defined categorisations (tag fields or multivalued fields) applied to documents in the Explore+ index. Requires a workspace_id — use account_get_workspaces to look up IDs, or pass none for account-level fields.

explore_plus_list_searches

ChatGPT
Returns optimised searches in the user's Explore+ account, which are distinct from standard (Explore) searches returned by listening_list_searches. Optimised searches define what content is collected into the Explore+ private index. Requires workspace_id; use 'none' for account-level access. Supports optional folder filtering, pagination, and show_hidden (set to true to include searches within hidden folders).

gail_create_prompt

ChatGPT
Creates a single new GenAI Lens prompt for your company (one prompt per call). topicId is required; a new prompt is always created filed under a topic: get an existing topic id from gail_get_filters (type: topics), or create one first with gail_create_topic if none fits; never invent or guess a topicId. (Existing prompts can later be unfiled via gail_update_prompt.) promptText is immutable after creation; to change an existing prompt's name, topic, labels, persona, or geo target use gail_update_prompt; to remove one use gail_delete_prompt (soft delete). The AI models the prompt runs against and its execution frequency come from your company's plan entitlements, not from parameters; they cannot be chosen here; a quota error means the plan's active-prompt limit is reached, not bad input. Never invent or guess IDs: take topicId from gail_get_filters (type: topics), labelIds from type: labels, countryCode from type: target_countries, personaId from type: personas. countryCode sets the prompt's target country (ISO 3166-1 alpha-2, e.g. 'US'). personaId, when set, tailors the response to that audience persona; a prompt has zero or one persona. Requires a user-scoped Authorization JWT; machine-to-machine tokens without a user claim are rejected. If a post-create step fails (for example label association or downstream event publish) the call still succeeds and transparency.notes explains. Returns one 'prompt_write_result' resource with status 'created', the new prompt's id and name, and a 'prompt' object echoing the persisted prompt exactly as it will appear in gail_get_filters (type: prompts); not date-scoped or paginated.

gail_create_topic

ChatGPT
Creates a single new GenAI Lens topic for your company (one topic per call). Call this before gail_create_prompt whenever no suitable topic already exists; gail_create_prompt requires a topicId, so check gail_get_filters (type: topics) first and only create a new one here if none fits. Only name is accepted: slug is generated server-side from name (not settable) and disambiguated automatically on collision. A name already used (exact, case-sensitive match) by an active topic in your company fails with a validation error: "A topic with this name already exists in your company. Choose a different name or reuse the existing topic from gail_get_filters (type: topics).", rather than returning or updating the existing topic; names differing only in case are allowed and receive a disambiguated slug. Requires a user-scoped Authorization JWT; machine-to-machine tokens without a user claim are rejected. Not for listing existing topics; use gail_get_filters (type: topics) for that; to rename a topic use gail_update_topic, and to delete an empty topic use gail_delete_topic; and it never files or moves a prompt into a topic; use gail_update_prompt's topicId for that. Returns one 'topic_write_result' resource with status 'created' and the new topic's id (pass this verbatim as topicId to gail_create_prompt or gail_update_prompt) and name (plus slug when available); not date-scoped or paginated.

gail_delete_prompt

ChatGPT
Deletes a single GenAI Lens prompt by id. Destructive: confirm the user intends to delete this exact prompt before calling; there is no undo or restore via MCP. Never invent or guess IDs: take the exact 24-character hexadecimal ID from gail_get_filters (type: prompts). This is a soft delete: the prompt stops running, drops out of prompt listings, and frees one active-prompt quota slot for gail_create_prompt, but its historical AI model responses stay available to gail_get_responses and gail_get_analytics. Not for renaming, moving, or re-labeling a prompt; use gail_update_prompt for that. Requires a user-scoped Authorization JWT; machine-to-machine tokens without a user claim are rejected. Returns one 'prompt_write_result' resource: status 'deleted' with the prompt's id and name, or 'not_found' (a normal result, not an error) when no prompt with that id exists for your company, including one already deleted; the prompt is already gone, do not retry. Deleting a prompt owned by another company fails with an error instead. transparency.notes may report a non-fatal post-delete step (e.g. a delayed downstream event); the deletion itself still succeeded. Not date-scoped or paginated.

gail_delete_topic

ChatGPT
Permanently soft-deletes a single EMPTY GenAI Lens topic. Destructive and not undoable through this API, so confirm intent and the exact id (from gail_get_filters, type: topics) before calling; never invent or guess IDs. A topic that still contains prompts is refused with a validation error: 'This topic still contains N prompt(s). Topics must be empty before deletion: move each prompt to another topic with gail_update_prompt (topicId) or delete it with gail_delete_prompt, then retry.' This tool never deletes or moves prompts itself. Requires a user-scoped Authorization JWT; machine-to-machine tokens without a user claim are rejected. Returns one 'topic_write_result' resource: status 'deleted' with the topic's id and name, or status 'not_found' when the id does not resolve to a topic or it was already deleted (a normal result, not an error). Not for renaming (gail_update_topic) or listing (gail_get_filters, type: topics). Not date-scoped or paginated.

gail_get_analytics

ChatGPT
Runs one aggregated GenAI Lens analytics report per call from stored AI responses. Fifteen reports: brand_metrics, model_comparison, top_prompts, brand_analysis, competitive_trends, prompt_visibility_gaps, sentiment, attributes, trends, topics, citations, citation_peaks, brand_source_share, journalists, influencers. Not for raw text (gail_get_responses) or advice (gail_get_recommendations). Resolve names/IDs via gail_get_filters first; never invent them. Parameters are report-specific and validated at call time; an invalid or missing one names the valid set; for a given report's required/optional parameters, defaults, and metric scale, call gail_get_filters (type: reports) rather than guessing from this description. Omitting dateRange defaults to the last 7 UTC days (see transparency.dateRange; never all-time). model_comparison and top_prompts use different visibility scales (0-100 vs 0-100.00); never compare directly. One resources[] entry, kind analytics.<report>.

gail_get_filters

ChatGPT
Discovery tool for every other gail_* tool: call it first to obtain exact IDs and names; never invent or guess IDs. Provide exactly one of type or types. type selects one inventory per call: models = AI models your company's plan is entitled to (name or slug usable as modelNames); brands = your company's own tracked brand profiles; these exact names are the only valid values for brand/brands/competitors/brandName (id → brandId); brands configured only as nested competitors on a profile are not listed and cannot be named in any parameter (gail_get_analytics includeCompetitors=true, on report brand_analysis, competitive_trends, prompt_visibility_gaps, or attributes, includes them automatically); each row's primaryColor and secondaryColor, when set, are the brand's colors (uppercase #RRGGBB) for charts; prompts = your active prompts (id → promptIds; promptText is truncated to 300 characters; each row's labelIds and personaId, when present, reuse verbatim as labelIds and personaId elsewhere); topics = groupings used to organize prompts (id → topicId/topicIds); labels = non-hidden labels (id → labelIds); target_countries = prompt geo targets whose id is the ISO 3166-1 alpha-2 code (e.g. 'US'); personas = active personas (id → personaIds; each row's color, when set, is the chart series/settings-list color); reports = a static fourteen-row catalogue of every gail_get_analytics report (id/name = report name; question, requiredParameters, optionalParameters, defaults, and metricScale describe how to call it), not scoped to your company. types accepts several of the above in one non-paginated call (limit applies per type; cursor is rejected alongside types; a type whose results don't fit is named in transparency.notes with a call-again hint); prefer type with cursor when you need to page through one inventory fully. Prompt, topic, label, persona, and brand IDs are 24-character hexadecimal IDs (e.g. '665f1c2ab3d4e5f6a7b8c9d0'). searchText narrows by name (brands also match aliases; prompts full-text over name and prompt text; reports match name or question); omit it to list everything. semanticQuery is a meaning-based alternative to searchText for prompts only (type=prompts or types=['prompts']): use it when the right prompt is unknown by exact wording (e.g. 'prompts about pricing complaints') rather than a keyword match. Mutually exclusive with searchText and cursor; results are capped at limit and ordered by relevanceScore descending, not paginated. additionalFilters still narrows a semanticQuery call the same way it narrows searchText. additionalFilters adds structural, server-side narrowing per type (prompts: topicIds, labelIds, countryCodes, personaIds, promptIds, status; topics: slug, includeDeleted, created/updated date bounds; models: slugs, includeInactive; labels: includeHidden; personas: includeArchived) and is how you answer questions searchText cannot, such as prompts with no label (labelIds: ['NONE']), no geo target (countryCodes: ['NONE']), or no persona (personaIds: ['NONE']); brands, target_countries, and reports accept no additionalFilters, and a block for a type you did not request is rejected. Listings are current inventory with no date filter; an empty resources array means nothing matched, not an error. limit defaults to 25 (max 100, or 200 for a single type=prompts call). To page a single type, pass transparency.nextCursor back verbatim as cursor with the same type and searchText; a missing nextCursor (or hasMore=false) means the end. Not for raw stored response text and quotes (gail_get_responses), aggregated metrics and rankings (gail_get_analytics), or pre-generated weekly advice (gail_get_recommendations).

gail_get_recommendations

ChatGPT
Fetches a brand's pre-generated AI visibility recommendations, produced by a weekly analysis run; not computed on demand. Every stored run is scoped to one topic, and each call searches a 15-day lookback window ending at endDate (default: today, UTC) for the most recent run per topic whose analyzed week starts in that window (the exact window searched is named in transparency.notes, not transparency.dateRange). Narrow with topicIds and/or topicNames to get the latest run for those specific topics; omitting both returns the latest run for the 5 largest topics by active prompt count instead of all topics, named in transparency.notes; to cover different or more topics, list their topic IDs explicitly (from gail_get_filters type: topics). Provide exactly one of brandId or brandName. Never invent or guess IDs: take brand IDs and exact names from gail_get_filters (type: brands), topic IDs from type: topics. Each row carries category: CITATIONS (citation/source authority: which domains get cited, including the brand's own), NARRATIVE (how models frame and describe the brand), SHARE (share of voice/visibility versus competitors), or PROMPTS (prompt coverage gaps); plus title (plain text), diagnosis, recommendation, evidence, topic, topicId, runDate, actions, dismissed, and optional owner, dueAt, effort, impact, and status. Actions contain a title and checked flag; diagnosis/recommendation/evidence may carry markdown-linked URLs, title never does. Rows are deduplicated on (category, evidence), keeping the first occurrence. transparency.dateRange echoes the analysed week(s) the returned rows actually cover (a union across topics when they last ran in different weeks; see transparency.notes), never the 15-day lookback window itself. An empty resources array means no run landed in the searched window for any selected topic, or every candidate recommendation fell below the server-side confidence threshold; not an error; transparency.notes names the window searched, and retrying with an earlier endDate reaches an older run rather than repeating the same call. No pagination: all rows (at most 50) arrive in one call. Not for raw stored response text and quotes (use gail_get_responses) or aggregated metrics and rankings (use gail_get_analytics).

gail_get_responses

ChatGPT
Reads raw stored AI model responses: full text, quotes, and citations (the evidence layer). Provide exactly one of responseId or query. responseId fetches one full stored response (its complete text, plus model and prompt IDs); it does not return citation links or a prompt object, so it cannot recover fuller citations than a keyword row's top links. Use the responseId value from a prior gail_get_responses result, or its bare id portion (a 24-character hexadecimal ObjectId or a UUID); never invent or guess IDs; an unknown ID fails with 'Response not found', not an empty result. query with matchType 'keyword' (default) is exact text search over stored response text (not prompt text), paginated, returning compact rows (a truncated response snippet and top citation links, not the full text; fetch responseId only for the untruncated response text). query with matchType 'semantic' is meaning-based search over response sentences; use it when exact wording is unknown or keyword is too narrow, capped at limit groups instead of paginated. minScore applies only to semantic; cursor, sortBy, and sortOrder only to keyword; limit applies to both, defaulting to 5 for keyword search; wrong combinations are rejected. Omit dateRange to default to the last 7 UTC calendar days; the applied window is echoed in transparency.dateRange, so never present defaulted results as all-time. Never invent or guess IDs or names: take promptIds/promptNames from gail_get_filters (type: prompts), modelNames from type: models. Returns 'llm_response' resources (responseId/keyword) or 'response_sentence' snippet groups (semantic); an empty resources array means nothing matched in the window, not an error. Not for aggregated metrics and rankings (use gail_get_analytics) or pre-generated weekly advice (use gail_get_recommendations).

gail_update_prompt

ChatGPT
Updates one existing GenAI Lens prompt's name, topic, labels, persona, or geo target. Provide id (a 24-character hexadecimal ID, e.g. '665f1c2ab3d4e5f6a7b8c9d0') plus at least one of name, topicId, labelIds, countryCode, personaId; omitted fields stay unchanged. Never invent or guess IDs: take id from gail_get_filters (type: prompts), topicId from type: topics, labelIds from type: labels, countryCode from type: target_countries, personaId from type: personas. promptText is immutable after creation; to track different wording, create a new prompt with gail_create_prompt; to remove one use gail_delete_prompt (soft delete). AI models and execution frequency are plan-derived and cannot be changed by any tool. topicId null unfiles the prompt; labelIds replaces the entire label set (empty array clears all); countryCode null removes geo targeting, otherwise an ISO 3166-1 alpha-2 code (e.g. 'US'); personaId null clears the persona, otherwise the ID of an active persona owned by your company; a prompt has zero or one persona. Requires a user-scoped Authorization JWT; machine-to-machine tokens without a user claim are rejected. Updating a prompt owned by another company fails with an error. Returns one 'prompt_write_result' resource: status 'updated' with a 'prompt' object echoing the persisted prompt exactly as it will appear in gail_get_filters (type: prompts), or 'not_found' (a normal result, not an error) when no prompt with that id exists; not date-scoped or paginated. transparency.notes may report non-fatal post-update issues (search sync, labels, downstream events) even though the update succeeded.

gail_update_topic

ChatGPT
Renames a single existing GenAI Lens topic; name is the only updatable field. Use it only when the topic's id is already known from gail_get_filters (type: topics) or a gail_create_topic result; never invent or guess IDs. It never moves prompts between topics (use gail_update_prompt's topicId for that) and never creates topics (use gail_create_topic). The topic's slug is not regenerated on rename; the old slug remains and is informational only. A new name already used (exact, case-sensitive match) by another active topic in your company fails with a validation error: 'A topic with this name already exists in your company. Choose a different name or reuse the existing topic from gail_get_filters (type: topics).' Requires a user-scoped Authorization JWT; machine-to-machine tokens without a user claim are rejected. Returns one 'topic_write_result' resource: status 'updated' with the topic's id and new name, or status 'not_found' when the id does not resolve to a topic (a normal result, not an error; verify the id via gail_get_filters). Not date-scoped or paginated.

klear_get_influencer_handles

ChatGPT
Use this tool when the user mentions a specific influencer by name or handle and you need to find their profile. Returns a list of matching profiles sorted by relevance, with influencer ID, name, and social media handle. Pass the returned handle, exactly as given, with the same network to get_profile_overview, get_profile_demographics, or get_profile_content for detailed data.

klear_get_profile_content

ChatGPT
Use this tool when the user wants to see an influencer's posts or content. Returns a list of posts with textual content, publish date, engagement metrics, and the social network. Do NOT use this tool for profile-level stats — use get_profile_overview instead.

klear_get_profile_demographics

ChatGPT
Use this tool when the user wants to understand an influencer's audience composition. Takes an Instagram handle and returns that profile's Instagram audience demographics — age distribution, gender split, top countries, cities and states, skills, brands and hashtags. Only Instagram is supported; there is no equivalent for other networks. Any of the demographic breakdowns may be missing when there is not enough audience data. Do NOT use this tool for the influencer's own profile info — use get_profile_overview instead.

klear_get_profile_overview

ChatGPT
Use this tool when the user wants a summary of an influencer's profile. Returns influence scores, network statistics (total audience, per-network follower/subscriber counts), engagement metrics and rates, audience highlights (top country, skills, reach), follower/engagement/reach history, recent post counts, predicted EMV, predicted pricing, the creator's display name and bio, and an AI-generated overview of the creator and their content. Do NOT use this tool for audience demographics — use get_profile_demographics instead.

klear_influencer_search_by_prompt

ChatGPT
Use this tool when the user provides a free-text description of the type of influencer they are looking for (e.g., "vegan food bloggers in NYC with over 50K followers"). This is a Klear influencer-marketing tool, scoped to paid influencer/brand-partnership data — audience, pricing, and EMV — not organic/earned-media listening authors. Returns a list of influencer profiles matching the query, each with name, per-network usernames, follower counts, and influence/engagement scores. Supports filtering by multiple countries (e.g., countries: ["US", "UK"]). Supports filtering by multiple networks (e.g., networks: ["instagram", "youtube"]); defaults to instagram when omitted.

klear_list_profile_collaborations

ChatGPT
Use this tool when the user wants to see which brands an influencer has worked with before. Returns a list of past brand collaborations, each with the brand name and the influencer's posts mentioning that brand.

listening_list_filter_sets

ChatGPT
Returns all saved filter sets in the user's account. Filter sets are reusable combinations of filters (source, language, country, etc.) applicable to searches and analytics. Each result includes the filter set ID and configuration.

listening_list_searches

ChatGPT
Returns all standard (Explore) searches in the user's account. Does not include Explore+ optimised searches (the custom-index collection definitions) — those come from explore_plus_list_searches. Each result includes the search ID, name, and query. Optional filters: query_type (boolean, keyword, combined) and expand_combined.

mediarelations_create_media_list

ChatGPT
Use this tool when the user wants to create a new media list. Typical user requests: "create a media list called Tech Journalists", "make a new list for my PR campaign", "add a new media list". Requires a name; description is optional. This is a write operation scoped to the authenticated user's company. Returns a confirmation message on success. Do NOT use this tool to update an existing media list — use mediarelations_update_media_list instead.

mediarelations_create_outreach_draft

ChatGPT
Use this tool when the user wants to save an outreach as a draft without sending it. Typical user requests: "save this as a draft", "create a draft outreach", "I want to prepare this email but not send it yet". All fields are optional — an empty draft can be created with no parameters. To associate media lists, pass mediaListIds — the recipients are resolved automatically from those lists (you do NOT pass recipients). Returns a confirmation message on success. Do NOT use this tool to send or schedule an outreach — use mediarelations_schedule_outreach instead.

mediarelations_delete_media_list

ChatGPT
Use this tool when the user wants to permanently delete an entire media list. This is a destructive operation that cannot be undone — the media list and all its contact/source associations will be removed for all users in the company. Returns a confirmation of the deletion. Always confirm with the user before deleting. Consider informing the user about the number of contacts/sources in the list before proceeding. Do NOT use this tool without first confirming with the user. Do NOT use this tool to remove individual contacts from a list — use mediarelations_update_media_list_contacts instead.

mediarelations_delete_outreach_distribution

ChatGPT
Use this tool when the user wants to permanently delete an outreach. Typical user requests: "delete this outreach", "remove this campaign", "I want to delete distribution X". Requires the distribution ID. This action is irreversible. Returns a confirmation message on success. Do NOT use this tool to modify a scheduled outreach — use mediarelations_update_outreach instead.

mediarelations_generate_outreach_pitch

ChatGPT
Use this tool when the user wants to generate a personalized AI pitch for a specific journalist or contact. Typical user requests: "generate a pitch for this journalist", "write a personalized message for John Smith", "create a tailored pitch for this contact". Requires the journalist's ID; optionally accepts a draft email (userDraftContent) or a key message to guide the pitch. Returns the generated pitch text that can be used or refined in an outreach email. Do NOT use this tool to send the pitch — use mediarelations_schedule_outreach or mediarelations_create_outreach_draft instead.

mediarelations_get_labels_by_company

ChatGPT
Use this tool when the user wants to see all available labels for their company. Typical user requests: "show me all labels", "what labels do I have?", "list all tags I can use for my media lists". This is a read-only operation scoped to the authenticated user's company. Returns an array of label objects, each with an id and name. Do NOT use this tool to assign or remove labels from a media list — use mediarelations_update_medialist_labels instead.

mediarelations_get_media_lists

ChatGPT
Use this tool when the user wants to list, browse, or search their media lists. This is a read-only operation scoped to the authenticated user's company and workspace. Returns a paginated response with: count (total number of media lists) and hits (array of media list objects with name, key, journalistCount, creation date, and workspace membership). Supports pagination (page/size), name search (q parameter), sorting (sort: NAME_ASC, NAME_DESC, JOURNALISTCOUNT_ASC, JOURNALISTCOUNT_DESC, CREATED_ASC, CREATED_DESC), and label filtering (labelId). Do NOT use this tool to search for contacts within a media list — use mediarelations_search_media_list_contacts instead. Do NOT use this tool to modify media list membership — use mediarelations_update_media_list_contacts or mediarelations_update_media_list_entries instead.

mediarelations_get_outreach_content

ChatGPT
Use this tool when the user wants to inspect a specific outreach — its full email body, subject, or metadata. Typical user requests: "show me the content of this outreach", "what does this campaign email say?", "get the details of distribution X". This is the preferred tool for general outreach inspection. This is a read-only operation scoped to the authenticated user's company. Returns the complete email body (HTML), subject line, sender address, and associated metadata. Do NOT use this tool for campaign performance metrics — use mediarelations_get_outreach_counts instead. Do NOT use this tool for overall open rate and delivery counters — use mediarelations_get_outreach_counts instead. Do NOT use this tool for per-recipient engagement data — use mediarelations_get_outreach_recipients_aggregations instead.

mediarelations_get_outreach_counts

ChatGPT
Use this tool when the user wants delivery and engagement analytics counts for a specific outreach distribution. This is a read-only operation scoped to the authenticated user's company. Returns a single object with counters for delivered, sent, open, click, bounce, blocked, unsubscribed, untracked, and replied events, plus derived rates (openRate, ctoRate, unsubscribeRate, replyRate). The response shape varies slightly depending on the analyticsType: 'all' returns the full object, 'open' focuses on open-related metrics, and 'click' focuses on click-related metrics. Do NOT use this tool for per-recipient breakdowns — use mediarelations_get_outreach_recipients_aggregations instead.

mediarelations_get_outreach_recipients_aggregations

ChatGPT
Use this tool when the user wants to see engagement details or analytics per recipient for a specific outreach distribution. Typical user requests: "show me the analytics per recipient", "who opened my outreach", "show me the recipient breakdown for this outreach". This is a read-only operation scoped to the authenticated user's company. Returns a paginated result using the page (default 0) and pageSize (default 100) parameters. The response contains: a contacts array (individual recipients with emailAddress, status — one of: opened, unopened, bounced, replied, untracked — bounce type, unsubscribe flag, and profile data), a sources array (journalist/source contacts with the same fields plus name and location), and a count with the total number of recipients. Do NOT use this tool for campaign-level metrics — use mediarelations_get_outreach_counts instead. Do NOT use this tool for delivery counters and rates — use mediarelations_get_outreach_counts instead.

mediarelations_get_outreaches

ChatGPT
Use this tool when the user wants to see a list of their outreach campaigns. Typical user requests: "show me all my outreaches", "list my campaigns", "what outreaches do I have?". Returns a paginated result — use page and pageSize to navigate results, and sortField / sortOrder to control ordering. This is a read-only operation scoped to the authenticated user's company. Returns an object with a total count and a hits array of outreach items, each containing subject, status, sender address, creation date, and associated media lists. Do NOT use this tool to get the full details of a specific outreach (like full body) — use mediarelations_get_outreach_content instead.

mediarelations_get_saved_searches

ChatGPT
Use this tool when the user wants to list or browse their saved searches. This is a read-only operation scoped to the authenticated user's current workspace. Returns a paginated response with: hits (array of saved search metadata including name, type, creator, dates), count, page, size, and totalPages. Supports pagination (size default 12, page 0-indexed), partial name filtering (search parameter, case-insensitive), sorting (sortBy: searchName/createdAt/updatedAt/executedAt, sortOrder: asc/desc), and field selection (fields parameter, comma-separated). Do NOT use this tool to retrieve full details of a specific saved search — use mediarelations_get_saved_search with the saved search ID instead.

mediarelations_schedule_outreach

ChatGPT
Use this tool when the user wants to send or schedule an outreach email to one or more media lists. Typical user requests: "send this outreach now", "schedule my campaign for next Monday", "send this email to my media list". Provide the target lists via mediaListIds — the recipients are resolved automatically from those lists (you do NOT pass recipients). Requires a sender identity (either approvedSenderId or emailGrantId) plus subject, bodyHtml, fromAddress, and userLanguage. Use sendImmediately: true to send at once, or provide a scheduledDate (must be in the future) to queue for later delivery. Warning: this SENDS real emails to the recipients resolved from the media lists (immediately or at the scheduled date). It is an outward-facing action and cannot be undone once sent — confirm intent before calling. Returns a confirmation message on success. Do NOT use this tool to save a draft without sending — use mediarelations_create_outreach_draft instead. Do NOT use this tool to modify an already-scheduled outreach — use mediarelations_update_outreach instead.

mediarelations_search_contacts

ChatGPT
Use this tool when the user wants to find or filter media contacts (journalists, editors, bloggers) in the company's Media Relations database. This is a read-only operation scoped to the authenticated user's company. Returns count, hits (contact objects), and aggregation data. Use pagination (from/size, max size 100) for large result sets. By default, each contact hit returns all available fields. To limit contact hits to an LLM-optimized set of fields, set limitToLlmFields to true. This restricts output to: id, name, titles, sourceName (outlet/source name), beats, reachTier, geoFocus, languages, isUnverified (verified status), mediaLists (media list membership). When limitToLlmFields is true, you can further narrow results via the "fields" parameter (e.g. fields: ["id", "name", "titles"]). "size" defaults to 0, which returns count and aggregations only — set a small positive number (3–25) when you need the contact records themselves. When requesting hierarchical aggregations (beats, countriesAndRegions), always set parentSize and childrenSize — the full taxonomy is very large. Use "query" (top-level) for name search terms (boolean OR). Use "filters" to narrow results. To list all contacts of a specific media list (with NO text search), use a { type: "mediaLists", mediaListIds: ["list-id"] } filter here. Only use mediarelations_search_media_list_contacts when you have a free-text term to search WITHIN a list. Supported filters: - Free text: { type: "freeTextContact", q: "name or keyword" } - Location: { type: "locations", values: [{ "country": "United States", "region": "New York", "city": "New York" }] } - Media lists: { type: "mediaLists", mediaListIds: ["list-id"], operation: "any" } - Beats: { type: "beats", values: [{ "parent": "parent-id", "children": ["beat-id"] }] } - Sources: { type: "sources", sourceIds: ["source-id"] } - Roles: { type: "roles", values: ["role-id"] } - Languages: { type: "languages", values: ["en", "es"] } - Emails: { type: "emails", values: ["email@example.com"], prefixMatch: false } - Email origin: { type: "emailOrigin", values: ["direct", "indirect", "user-added"] } - Phone origin: { type: "phoneOrigin", values: ["direct", "indirect", "user-added"] } - Verified: { type: "verified", value: true } - Recently created: { type: "recentlyCreated" } - Podcaster: { type: "podcaster" } - Profile type: { type: "profileType", values: ["verified", "private", "automated"] } - Source reach tiers: { type: "sourcesReachTiers", values: ["tier_1", "tier_2", "tier_3"] } - Source geo focuses: { type: "sourcesGeoFocuses", values: ["International", "Local", "National", "Regional"] } - Source media channels: { type: "sourcesMediaChannels", values: ["channel-id"] } - Source frequencies: { type: "sourcesFrequencies", values: ["1", "7", "30"] } - Viewport (geo bounding box): { type: "viewport", topLeft: { lat, lon }, bottomRight: { lat, lon } } - Open rate: { type: "openRate", min: 0, max: 100, excludeMissing: false } - Last contacted: { type: "lastContactedAt", gte: "now-14d", lte: "now" } - Last meaningful update: { type: "lastMeaningfulUpdateAt", gte: "now-14d", lte: "now" } - Last detailed update: { type: "lastDetailedUpdateAt", gte: "now-14d", lte: "now" } - Social profiles: { type: "socialProfiles", values: [{ type: "twitter", urls: ["url"] }] } - Source name lookup (contacts publishing at an outlet, resolved by name): { type: "sourceNameLookup", userTypedName: "BBC" }. One source name per filter; { type: "sourceNameLookup", values: ["BBC"] } and { type: "sourceNameLookup", value: "BBC" } are also accepted. Available aggregation types (pass as objects with { type }): locations (q, size), countriesAndRegions (parentSize, childrenSize), cities (country, region, size), beats (parentSize, childrenSize), roles (size), sourcesReachTiers (size), sourcesMediaChannels (size), sourcesGeoFocuses (size), sourcesFrequencies (size), sources (q, size), languages (size), mediaLists (size). Do NOT use this tool to search for media outlets/publications — use mediarelations_search_sources instead. Do NOT use this tool to browse c…

mediarelations_search_media_list_contacts

ChatGPT
Use this tool ONLY when the user has a search TEXT to find contacts within one or more media lists (a free-text search scoped to those lists). If there is NO search text — you just want the members/contacts of a media list by ID — use mediarelations_search_contacts with a { type: "mediaLists", mediaListIds: ["list-id"] } filter instead. This is a read-only operation scoped to the authenticated user's company. Returns count, hits (contact objects), and aggregation data. Use pagination (from/size) for large lists. How it works: scope to the media list(s) with a { type: "mediaLists", mediaListIds: ["list-id"] } filter AND provide the search text with { type: "freeTextContact", q: "..." } (searches contact name/title/source/beat within the list). You can add other contact filters to narrow further. Supported filters (in "filters"): freeTextContact ({ q }), mediaLists ({ mediaListIds, operation, exclude }), profileType ({ values: ["verified","private","automated"] }), verified ({ value }), locations, beats, languages, emailOrigin, sourcesReachTiers, sourcesGeoFocuses, sourcesMediaChannels, sourceNameLookup ({ userTypedName: "BBC" } — one source name per filter; { values: ["BBC"] } and { value: "BBC" } are also accepted). Other params: target ("ALL_CONTACTS" | "PUBLIC_CONTACTS" | "PRIVATE_CONTACTS"), sortBy (e.g. "name") + sortOrder ("ascending" | "descending"), aggregations (objects with a "type", e.g. [{ type: "countriesAndRegions" }]), includeLastContacted, includeOpenRate. Example: filters: [{ type: "mediaLists", mediaListIds: ["95bebeab-..."] }, { type: "freeTextContact", q: "Lut ML Load" }] Do NOT use this tool without a freeTextContact search term — to list a media list's contacts by ID (no text search), use mediarelations_search_contacts with a { type: "mediaLists", mediaListIds: [...] } filter. Do NOT use this tool for general contact search across the whole database — use mediarelations_search_contacts instead. Do NOT use this tool to modify media list membership — use mediarelations_update_media_list_contacts instead.

mediarelations_search_media_lists_or_contacts

ChatGPT
Use this tool when the user wants to search for media lists and the contacts within those media lists. Typical user requests: "find media lists named 'tech'", "search for contacts inside my media lists", "look up journalists within my lists". Supports filtering by name (q), label (labelId), specific IDs (ids), pagination (page/size), sorting (sortBy: NAME, JOURNALISTCOUNT, CREATED; sortOrder: ASC, DESC), and options to search within list names or creator names. Returns an object with count (total results), hits (matching media lists with their contacts), and isMatchingContactNames (whether the match was on contact names), scoped to the authenticated user's company. Do NOT use this tool to search contacts across the full database — use mediarelations_search_contacts instead.

mediarelations_search_sources

ChatGPT
Use this tool when the user wants to find or filter media sources (publications, outlets, editions) in the company's Media Relations database. This is a read-only operation scoped to the authenticated user's company. Returns count, hits (source objects with name, reach, media list associations), and aggregation data. Use pagination (from/size, max size 100) for large result sets. Source records are large, so responses can be truncated if you request too much at once. "size" defaults to 0, which returns count and aggregations only — set a small positive number (3–25) when you need the source records themselves. When you only need a few attributes per source, pass "fields" to trim the records (e.g. fields: ["id", "name", "reachTier"]). When requesting hierarchical aggregations (beats, countriesAndRegions), always set parentSize and childrenSize — the full taxonomy is very large. For free-text search by source/outlet name, use { type: "freeTextSource", q: "outlet name" } in "filters" (or the top-level "query" field, e.g. query: ["Politics"]). Do NOT use freeTextContact — that is only for contacts. Supported filters (in "filters"): - Free text: { type: "freeTextSource", q: "outlet name" } - Source type: { type: "sourceType", values: ["edition", "bureau"] } - Location: { type: "locations", values: [{ "country": "United States", "region": "California", "city": "San Francisco" }] } - Media lists: { type: "mediaLists", mediaListIds: ["list-id"], operation: "any" } - Beats: { type: "beats", values: [{ "parent": "parent-id", "children": ["beat-id"] }] } - Languages: { type: "languages", values: ["en"] } - Emails: { type: "emails", values: ["editor@example.com"] } - Reach tiers: { type: "reachTiers", values: ["tier_1", "tier_2", "tier_3"] } - Geo focuses: { type: "geoFocuses", values: ["International", "National", "Local", "Regional"] } - Media channels: { type: "mediaChannels", values: ["channel-id"] } - Frequencies: { type: "frequencies", values: ["1", "7", "30"] } - Social profiles: { type: "socialProfiles", values: [{ "type": "twitter", "urls": ["url"] }] } - Also supported: viewport, geohash, publicDocs. Available aggregations: beats, countriesAndRegions, reachTiers, geoFocuses, mediaChannels, languages, frequencies. Do NOT use this tool to search for individual contacts/journalists — use mediarelations_search_contacts instead.

mediarelations_update_media_list

ChatGPT
Use this tool when the user wants to rename or update the description of an existing media list. Typical user requests: "rename my media list to 'Finance Contacts'", "update the description of this list", "change the name of my media list". Requires the mediaListKey (UUID v4) of the media list. IMPORTANT: name is always required. To change only the description (or otherwise keep the current name), send the media list's existing name so it is preserved — omitting name is not allowed. description is optional. Returns a confirmation message on success. Do NOT use this tool to create a new media list — use mediarelations_create_media_list instead. Do NOT use this tool to add or remove labels — use mediarelations_update_medialist_labels instead.

mediarelations_update_media_list_contacts

ChatGPT
Use this tool when the user wants to add or remove contacts from one or more media lists. This is a write operation that modifies media list membership and affects all users in the company. Returns the updated media list membership result. Parameters: - contactIds: Array of contact IDs (required, max 500) - updateMediaListIds: Media list IDs to ADD the contacts to - deleteMediaListIds: Media list IDs to REMOVE the contacts from At least one of updateMediaListIds or deleteMediaListIds must be provided. Removals cannot be undone. Always confirm with the user before executing, especially when removing contacts. Do NOT use this tool to add/remove sources (editions) — use mediarelations_update_media_list_entries instead. Do NOT use this tool to delete an entire media list — use mediarelations_delete_media_list instead.

mediarelations_update_media_list_entries

ChatGPT
Use this tool when the user wants to add or remove both contacts and sources (editions) from media lists in a single operation. This is a write operation that modifies media list membership and affects all users in the company. Returns the updated media list membership result. Parameters: - contactIds: Array of contact IDs (optional) - editionIds: Array of source/edition IDs (optional) - updateMediaListIds: Media list IDs to ADD the entries to - deleteMediaListIds: Media list IDs to REMOVE the entries from Combined total of contactIds + editionIds must not exceed 1000. At least one of updateMediaListIds or deleteMediaListIds must be provided. Removals cannot be undone. Always confirm with the user before executing. Do NOT use this tool if only working with contacts (no sources) — use mediarelations_update_media_list_contacts instead for better clarity.

mediarelations_update_medialist_labels

ChatGPT
Use this tool when the user wants to add or remove labels from a media list. Typical user requests: "add the 'Tech' label to my media list", "remove the 'Finance' tag from this list", "tag my media list with these labels". At least one of labelsToAdd or labelsToRemove must be provided. Use mediarelations_get_labels_by_company to retrieve valid label IDs if needed. Fetches the current labels of the media list and applies the requested changes without replacing the full label set. Returns a confirmation message on success. Do NOT use this tool to retrieve available labels — use mediarelations_get_labels_by_company instead.

mediarelations_update_outreach

ChatGPT
Use this tool when the user wants to modify a scheduled outreach that has not been sent yet. Typical user requests: "update my scheduled outreach", "change the subject of this upcoming campaign", "edit this outreach before it sends". Requires the outreach ID. This is a full replacement — all fields (subject, bodyHtml, etc.) must be provided again, as any omitted field will be cleared. Audience: if you do NOT send mediaListIds, the outreach keeps the media lists and recipients it already had (they are preserved, not cleared). If you DO send mediaListIds, they overwrite the audience — the recipients and media lists are re-resolved from the provided lists. Scheduling: always resubmit sendImmediately and scheduledDate to keep the outreach as a scheduled send. If you omit them, the outreach is downgraded to a draft. The sender identity (emailGrantId, approvedSenderId, fromAddress) is preserved and does not need to be re-submitted. Returns a confirmation message on success. Do NOT use this tool for outreaches that have already been sent. Do NOT use this tool to delete an outreach — use mediarelations_delete_outreach_distribution instead.

meltwater_get_skill

ChatGPT
Fetches slices of one shared skill. id comes from meltwater_list_skills, meltwater_search_skills, or meltwater_create_skill. Platform skills outside the company's entitled tool packages are not found. Tenant skills the caller can read are unchanged. Default include=['header'] returns metadata only. Add 'content' for the SKILL.md file map — large payload, use only after the user picks a skill; that payload is terminal (follow SKILL.md, do not chain it). Add 'changelog' for version history written when meltwater_update_skill replaces files. header and content are null when the skill is missing or not accessible.

meltwater_list_skills

ChatGPT
Lists shared skills the current user can access on the MCP surface (MCP-only plus unrestricted/empty surfaces). Platform skills (share level all) are only those in a tool package the company is already entitled to. User, company, and workspace skills follow their share rules and are not package-gated. Use this to browse or page through skills. Do not use it for a natural-language lookup — use meltwater_search_skills, which ranks by meaning. Default page=1, limit=10, sortOrder=desc; a smaller limit hides later pages. Returns headers only (id, name, description, trigger, share_level, create_ts). Each results[].id is the id for meltwater_get_skill, meltwater_update_skill, and meltwater_delete_skill. Fetch files with meltwater_get_skill include=["content"] only after the user picks a skill (content can be large).

meltwater_mcp_feedback

ChatGPT
Submits product feedback about Meltwater MCP tools to the Meltwater engineering team. Use when the user wants to report a concrete MCP tool bug, incorrect result, limitation, or missing capability. Returns whether the submission was accepted for asynchronous processing. Does not create support tickets for account, billing, or login issues; does not answer questions; does not change tool behavior. Each call creates a new feedback record (not idempotent).

owned_content_describe_schema

ChatGPT
Describe one owned-content aggregation, filter, or sort schema. Used by owned_posts_retrieve, owned_posts_aggregate, and owned_pages_aggregate. pages supports filters and aggregations; sort applies only to posts. Start at /, then follow returned child paths. The returned schema is a standalone Draft 2020-12 JSON Schema fragment; children contains immediate navigation links. A child's description under children is a compact catalog summary for choosing a path, not its full contract; follow the child's own path and read the loaded schema.description before constructing a filter or sort from it. This tool returns schema documentation only; it does not retrieve owned content.

owned_pages_aggregate

ChatGPT
Compute statistics over the account's connected social pages. Use for page audience, channel, location, and activity trends. Use owned_posts_aggregate for published posts and their engagement, or content_aggregate for Meltwater listening documents. Returns one result per requested family with flattened leaf rows (dimensions path and metrics), not page records.

owned_posts_aggregate

ChatGPT
Compute metrics and aggregations over owned posts published by the account's connected social profiles or pages. Use this tool for the account's own published content and its engagement/reach metrics, not for general/custom listening content or for benchmark data about competitors — use content_aggregate for those instead. Use owned_posts_retrieve when the user needs the matching posts themselves rather than aggregate statistics. Use owned_content_describe_schema to explore the filters/aggregations shapes below. Returns one result per requested family with flattened leaf rows (dimensions path and metrics).

owned_posts_retrieve

ChatGPT
Retrieve owned posts published by the account's connected social profiles or pages, together with their performance measurements. Use this tool for the account's own published content and its engagement/reach metrics, not for general/custom listening content or for benchmark data about competitors — use content_retrieve_keyword/ content_retrieve_semantic for those instead. Posts are raw, channel-specific mappings: there is no guaranteed common document id or relevance score, and fields vary across the account's connected channels (Facebook, Instagram, X/Twitter, YouTube, TikTok, Threads, Bluesky, and professional social networks). Omitting filters matches every owned post across every channel connected to the account, with no default date restriction. Use owned_content_describe_schema to explore the filters/sort shapes below.

sneq_similarity_search_sources

ChatGPT
Read-only discovery of Meltwater media sources (sources) similar to a keyword, within your company. The search will use PG_TRGM matching on our source database, where at least 60% similarity is required for the source to be considered a hit. The provided keyword is matched against both the name and the domain, and the better score is used. It returns one page of full edition records plus paging metadata (total_size, total_pages). Read-only.

unified_retrieval_query_gen_tool

ChatGPT
Generates Meltwater boolean search queries from a natural language topic description. Returns a boolean query string suitable for Meltwater saved searches. Supported operators: AND, OR, NOT, XNOT, NEAR/n, ONEAR/n, wildcards (, ?), field scoping (title:, ingress:, content:), and caseSensitive:(term). Recognizes core subjects/entities, synonyms, abbreviations, rebrands, and spelling variations. Does not encode temporal ranges, platform filters, sorting intent, or content type—these belong in retrieval tool optional fields. Examples: - "Tesla electric vehicles" → ("Tesla" OR "TSLA") AND ("electric vehicle" OR "EV") - "Subway restaurant" → ("Subway") NOT ("station" OR "train" OR "metro") - "Jon Stewart" → includes "Jonathan Stewart" variations - "universit" matches university, universities, etc.

unified_retrieval_statistics_retrieval_tool

ChatGPT
Returns aggregated metrics and statistical breakdowns for a topic across news and social platforms. Supports totals, single-dimension breakdowns, temporal trends, and two-dimension cross-tabs. Optional filters: languages, countries, sentiment, hashtags, handles, platforms, startDate/endDate (YYYY-MM-DD), savedSearchIds, filterSetIds, optimizedSearchIds, sortBy, sortOrder, limit. Put platforms, dates, scope IDs, and filters in dedicated optional fields—not in query. Supported metrics (express in query): count (default), engagement, reach, views, shares. Supported dimensions (express in query): time (daily/weekly/monthly), platform, sentiment, emotion, country, language, city, hashtags, entities, keyphrases, users, sources, comparison. Maximum 3 dimensions per query. Examples: - { query: "Tesla document count by week", platforms: ["twitter"], startDate: "2026-03-01", endDate: "2026-04-09" } - { query: "iPhone 17 engagement and reach by platform", startDate: "2026-01-01", endDate: "2026-04-09", countries: ["US"] } - { query: "Tesla vs Ford vs GM mentions by week", startDate: "2026-01-01", endDate: "2026-04-09" } - { query: "volume trends", optimizedSearchIds: [42], startDate: "2026-01-01", endDate: "2026-04-09" } Limitations: returns aggregated metrics only (not individual document content), supports totals not averages/medians, and allows at most 3 dimensions per query.

explore_plus_list_searches

Claude

listening_list_filter_sets

Claude

listening_list_searches

Claude

unified_retrieval_document_retrieval_tool

Claude

unified_retrieval_query_gen_tool

Claude

unified_retrieval_statistics_retrieval_tool

Claude

Capabilities

Writes

Similar Apps