The most comprehensive MCP server for Meta Business Suite — 200 tools across Facebook Pages, Instagram, Threads, Ads Manager, Commerce, Conversions API, and more
Meta MCP Server has well-structured tool definitions with complete schemas and descriptions for all 11 tools. Naming follows verb_noun convention (meta_search, meta_create, meta_list). Descriptions are detailed (100-300 chars typical) and explain WHAT, WHEN, and prerequisites. All parameters have types and descriptions. However, several tools lack output schema documentation, error handling guidance is minimal, and some parameter descriptions could be more actionable. No security concerns detected (tokens injected server-side). Tool composition is sound with clear chaining (list_ad_accounts → list_campaigns → get_campaign). Pagination support present on list tools.
Creates a new campaign in a Meta ad account. Args: - ad_account_id (string): Ad account ID (e.g., act_123456789) - name (string): Campaign name - objective (string): Campaign objective. Common values: OUTCOME_AWARENESS, OUTCOME_TRAFFIC, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_APP_PROMOTION, OUTCOME_SALES - status (string): ACTIVE or PAUSED (default PAUSED) - daily_budget (number, optional): Daily budget in account currency cents - lifetime_budget (number, optional): Lifetime budget in cents (requires stop_time) - stop_time (string, optional): ISO 8601 end date (required for lifetime budget) - special_ad_categories (string[], optional): Required for housing, employment, credit ads Note: For OUTCOME_SALES objective, Advantage+ Shopping campaigns are available. These use Meta's AI to optimize targeting and placements automatically. Create a standard campaign first, then use meta_migrate_campaign_to_advantage_plus to convert it. Returns the new campaign ID.
Creates a new custom audience in a Meta ad account. Supported types: - CUSTOM: Website visitors (requires Pixel), app activity, or customer list - ENGAGEMENT: People who engaged with your content - VIDEO: People who watched your videos Args: - ad_account_id (string): Ad account ID (e.g., act_123456789) - name (string): Audience name - subtype (string): CUSTOM, ENGAGEMENT, VIDEO, WEBSITE, or APP - description (string, optional): Audience description - customer_file_source (string, optional): For CUSTOM type — USER_PROVIDED_ONLY, PARTNER_PROVIDED_ONLY, BOTH_USER_AND_PARTNER_PROVIDED - retention_days (number, optional): Days to retain audience members (1–180) Returns the new audience ID. Note: Populating the audience with users is a separate step requiring the Audiences API to upload hashed data or configure a rule.
Output schemas not documented. Tools return data but LLMs cannot plan downstream calls without knowing response structure. meta_get_campaign, meta_get_custom_audience, and list tools lack explicit return field documentation.
Error handling guidance missing. Tools do not document what errors can occur, whether they are retryable, or what the LLM should do next. No recovery paths provided (e.g., 'If campaign not found, call meta_list_campaigns first').
Minimal descriptions for getter tools. meta_get_campaign and meta_get_custom_audience have only 'Gets detailed information about a specific [resource]', lacks context on when to use vs list tools, what fields are returned, or dependencies.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Creates a lookalike audience based on an existing custom audience or page. Args: - ad_account_id (string): Ad account ID - name (string): Audience name - origin_audience_id (string): Source custom audience ID to base the lookalike on - country (string): ISO 3166-1 alpha-2 country code (e.g., "US", "GB") - ratio (number): Lookalike size as fraction of country population (0.01–0.20, i.e. 1%–20%) Returns the new lookalike audience ID.
Generates a chart image (PNG) from provided data. Uses QuickChart (Chart.js) to render. Perfect for creating visual reports from Meta insights data. The chart is saved as a PNG file that can be inserted into Word docs, presentations, or shared directly. Args: - chart_type (string): 'bar', 'line', 'pie', 'doughnut', 'radar', 'polarArea', 'horizontalBar' - title (string): Chart title - labels (string[]): X-axis labels or pie slice labels - datasets (array): One or more datasets, each with: - label (string): Dataset name (e.g., "Impressions") - data (number[]): Data values matching labels - color (string, optional): CSS color (e.g., "#1877F2", "rgba(24,119,242,0.5)") - width (number): Image width in pixels (default: 800) - height (number): Image height in pixels (default: 400) - output_path (string, optional): Save PNG to this path. If omitted, returns the chart URL. - stacked (boolean, optional): Stack bars/lines (default: false) - show_values (boolean, optional): Display data values on the chart (default: false) Returns: Chart URL or file path. The URL can be opened in a browser or fetched as a PNG. Example datasets for ad performance: labels: ["Mon","Tue","Wed","Thu","Fri"] datasets: [ { label: "Impressions", data: [1200,1800,1500,2100,1900], color: "#1877F2" }, { label: "Clicks", data: [45,62,51,78,65], color: "#42B72A" } ]
Generates a side-by-side comparison chart — perfect for comparing two time periods, two campaigns, or A/B test results. Args: - title (string): Chart title - metrics (string[]): Metric names (y-axis labels) - group_a (object): { label: string, values: number[], color?: string } - group_b (object): { label: string, values: number[], color?: string } - chart_type (string): 'bar' or 'horizontalBar' (default: 'horizontalBar') - width (number): Width in pixels (default: 800) - height (number): Height in pixels (default: 400) - output_path (string, optional): Save PNG to this path Example — comparing two weeks: title: "This Week vs Last Week" metrics: ["Impressions", "Reach", "Clicks", "Spend"] group_a: { label: "Last Week", values: [12000, 8000, 450, 150] } group_b: { label: "This Week", values: [15000, 10500, 620, 185] }
Gets detailed information about a specific campaign. Args: - campaign_id (string): Campaign ID
Gets details about a specific custom audience. Args: - audience_id (string): Custom audience ID
Lists all Meta ad accounts accessible to the authenticated user. Returns ad account IDs (prefixed with act_), names, currency, status, and spend info. Call this first to get ad account IDs needed for campaign and insights tools.
Lists campaigns for a Meta ad account. Args: - ad_account_id (string): Ad account ID (e.g., act_123456789) - status_filter (string[], optional): Filter by status: ACTIVE, PAUSED, ARCHIVED, DELETED - limit (number): Max results (1–100, default 20) - after (string, optional): Pagination cursor Returns campaign names, objectives, status, and budget info.
Lists custom audiences in a Meta ad account. Args: - ad_account_id (string): Ad account ID (e.g., act_123456789) - limit (number): Max results (1–100, default 20) - after (string, optional): Pagination cursor Returns audience names, types, size estimates, and delivery status.
Searches the Meta Ad Library for ads from any advertiser. This is a transparency tool — no ad account access needed. Args: - ad_reached_countries (string[]): Required. ISO country codes where ads were shown (e.g., ["US", "GB"]) - search_terms (string, optional): Keywords to search ad text - search_page_ids (string[], optional): Specific Page IDs to search - ad_type (string): ALL, POLITICAL_AND_ISSUE_ADS, HOUSING_ADS, EMPLOYMENT_ADS, CREDIT_ADS (default: ALL) - ad_active_status (string): ALL, ACTIVE, INACTIVE (default: ALL) - ad_delivery_date_min (string, optional): Min delivery date YYYY-MM-DD - ad_delivery_date_max (string, optional): Max delivery date YYYY-MM-DD - limit (number): Max results (1–100, default 25) - after (string, optional): Pagination cursor Returns: Ad creatives, spend ranges, impressions, demographics, and targeting info. Note: Requires a valid access token but does NOT require ad account ownership.
Pagination cursors not explained. meta_list_campaigns and meta_list_custom_audiences accept 'after' parameter but do not document how to detect end-of-results or whether cursor is opaque vs structured.
Constraint descriptions could be more actionable. Parameters like 'ratio' (0.01 - 0.20) and 'limit' (1 - 100) have ranges but lack guidance on typical values or what happens at boundaries. LLMs may pick edge values without understanding consequences.