# Meta Ads MCP MCP Server

> **Meta Ads MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Meta Ads MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/meta-ads-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

Meta Ads connects AI agents to Facebook and Instagram advertising accounts to analyze campaign performance, create and edit campaigns, ad sets and creatives, manage custom audiences and product catalogs, inspect conversion tracking signals, run A/B tests, and investigate advertising issues.

---

## Details

- Server ID: `meta-ads-mcp`
- Version: 1.0.0
- Tools: 100
- Authentication: OAuth, managed by MewCP
- Calls served: 25
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — Meta Ads MCP has to be in the toolset
first. In order:

1. Add Meta Ads MCP to your toolset at https://mewcp.com/mcp/meta-ads-mcp
2. Connect your Meta Ads MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Copy your MewCP API key from the dashboard (Developer)
4. Configure your client with the snippet for it below

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (100)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `ads_account_get_activity_logs` _(read)_ — Fetches activity log entries for an ad account, showing changes to campaigns, ad sets, ads, and other ad objects. Mirrors the Ads Manager campaign history…
- `ads_activate_entity` _(write)_ — Activates a campaign, ad set, or ad by changing its status from PAUSED to ACTIVE, effectively publishing the entity. ## When to use: - Call this tool ONLY…
- `ads_boost_ig_post` _(write)_ — Creates an Instagram ad from an existing IG post. Supports a plan/confirm two-step flow. Required: ad_account_id, ig_account_id, and ig_media_id unless another…
- `ads_catalog_create` _(write)_ — Creates a catalog: a structured inventory of products or other items and their details that Meta can rank and show in ads. It is best for advertisers with…
- `ads_catalog_create_feed_rule` _(write)_ — Create a new transformation rule on a product feed. Feed rules map or transform attributes during ingestion to fix common feed schema mismatches without the…
- `ads_catalog_create_product_feed` _(write)_ — Create a new product feed (a "data source") under a catalog. A product feed is the entry point for ingesting product data into a catalog, either by uploading a…
- `ads_catalog_create_product_feed_upload_session` _(write)_ — Triggers a new upload session on an existing product feed, forcing an immediate refresh from the configured remote source URL. Returns the new upload session…
- `ads_catalog_create_product_set` _(write)_ — Creates a dynamic product set from a structured filter and returns the set ID + matched count. Always preview the filter with `ads_catalog_list_products` first…
- `ads_catalog_delete_product` _(destructive)_ — Delete existing catalog items from one catalog through a batch-shaped request. Supply `catalog_id` once and identify each item by its merchant-defined…
- `ads_catalog_event_source_connect` _(write)_ — Connect an event source to a product catalog so its signals can be matched against the catalog's products (for dynamic ads and Advantage+ catalog ads). Event…
- `ads_catalog_event_source_disconnect` _(destructive)_ — Disconnect a PIXEL, APP, or OFFLINE_CONVERSION_DATA_SET from a product catalog. This removes only the catalog link: the source keeps collecting events, but its…
- `ads_catalog_event_source_get` _(read)_ — List event sources connected to a product catalog for matching website, app, or offline events to catalog products. Returns each source's event_source_id,…
- `ads_catalog_event_source_get_catalogs` _(read)_ — Get the product catalogs connected to a given event source (pixel, CAPI app, or offline conversion data set). ## When to use: - Step 1 of "how will this pixel…
- `ads_catalog_event_source_get_health` _(read)_ — Report the match rate and setup issues for the event sources connected to a product catalog. "Match rate" is the percentage of conversion events (e.g.…
- `ads_catalog_event_source_get_recommendations` _(read)_ — Recommend the event sources (pixels) to connect to a product catalog. Meta computes, for catalogs with weak or missing signal coverage, the event sources whose…
- `ads_catalog_get_businesses` _(read)_ — Lists businesses the authenticated identity can access. Results are identity-scoped, not ad-account-scoped. Never attribute a returned business to an ad…
- `ads_catalog_get_data_sources` _(read)_ — List all sources that create or update items in a product catalog, including feeds, Batch API, Graph API, partner integrations such as Shopify, WooCommerce,…
- `ads_catalog_get_diagnostics` _(read)_ — Fetches diagnostic issues for a product catalog, including errors and warnings that may affect ad delivery. ## When to use: - User reports catalog issues or…
- `ads_catalog_get_dynamic_ads_health` _(read)_ — Run Dynamic Ads (DA) integration health checks for either a product catalog OR a single product set. Each check returns passed, failed, or inconclusive. ##…
- `ads_catalog_get_feed_rules` _(read)_ — Gets the data transformation rules applied to a product data feed during ingestion, with cursor-based pagination. `product_feed_id` identifies a feed, NOT a…
- `ads_catalog_get_product_feed_upload_sessions` _(read)_ — Lists product-feed upload sessions, newest first. Pass upload_session_id to return one session with rolled-up errors and remediation guidance. Use this tool to…
- `ads_catalog_get_suggested_filter` _(read)_ — Turns a plain-language description of products into a valid product-set filter rule for one specific catalog. This tool reads only — it creates and changes…
- `ads_catalog_list_catalogs` _(read)_ — Reads catalogs: every catalog you can access, catalogs under a business or ad account, or one catalog by ID. Pass whichever ID you have as `entity_id`;…
- `ads_catalog_list_dpa_eligible_catalogs` _(read)_ — Lists and ranks DPA / Advantage+ eligible catalogs for an ad account, with optional context tuning (ad_url, pixel/page) and health signals. Backed by MAIBA's…
- `ads_catalog_list_guidance` _(read)_ — Returns Meta's guidance for catalog creative work as markdown, to follow while you plan, create, and review. Reads only: it generates, creates, and changes…
- `ads_catalog_list_partner_integrations` _(read)_ — List partner platform integrations connected to a catalog — Shopify, WooCommerce, Magento, etc. — with connection health, sync timeline, and errors. ## What…
- `ads_catalog_list_product_feeds` _(read)_ — Reads product feeds from catalog ID or one known feed ID. Pass either numeric ID as `entity_id`; same paginated shape in both cases. ## Scope -…
- `ads_catalog_list_product_sets` _(read)_ — Reads product sets: all sets in a catalog, one set by ID, or sets containing a product. Pass whichever ID you have as `entity_id`; single-set read = one-row…
- `ads_catalog_list_products` _(read)_ — Preferred Ads catalog reader for browsing, attribute search, and affected-item search. Reads a catalog, set, or item via `entity_id`; a single-item read…
- `ads_catalog_product_create` _(write)_ — Create or upsert catalog items through a batch-shaped request with one `catalog_id` and nested `items[]`. The catalog vertical determines each item type. ##…
- `ads_catalog_product_feed_delete` _(destructive)_ — Delete a product feed (data source) from a catalog. The feed and its schedule are removed, and the products it ingested are deleted from the catalog as well…
- `ads_catalog_product_feed_delete_rule` _(destructive)_ — Permanently delete a transformation rule from a product feed. This action is irreversible — the rule is removed and no longer applied to future feed…
- `ads_catalog_product_set_delete` _(destructive)_ — Permanently delete a product set from a catalog. This action is irreversible — the product set and its filter rule are removed. Products themselves are not…
- `ads_catalog_update_catalog` _(destructive)_ — Update an existing catalog's settings, and set up, change or TEST the checkout URL that hands buyers off to the seller's own website to pay. This is the only…
- `ads_catalog_update_product` _(destructive)_ — Update existing catalog items through a batch-shaped request with one `catalog_id` and nested `items[]`. Only supplied fields are changed. Accepted request…
- `ads_catalog_update_product_feed` _(destructive)_ — Update settings on an existing product feed (a "data source") under a catalog. This is the "edit feed" counterpart to ads_catalog_create_product_feed. Only the…
- `ads_catalog_update_product_set` _(destructive)_ — Update an existing product set's name, filter rules, or retailer ID. At least one field besides product_set_id must be provided. When to use: - To rename a…
- `ads_create_ad` _(write)_ — Creates a single ad under an existing ad set in PAUSED state. There is no status input: to make the ad live, create it, then call ads_activate_entity on it.…
- `ads_create_ad_set` _(write)_ — Creates a single ad set under an existing campaign in PAUSED state. BEFORE CALLING: The `ads_create_campaign` response includes `valid_optimization_goals` and…
- `ads_create_campaign` _(write)_ — Creates a single campaign (campaign group) in PAUSED state. Use this to create just a campaign without an ad set or ad. BUDGET PLACEMENT — DEFAULT TO CBO:…
- `ads_create_creative` _(write)_ — Creates an ad creative on the specified ad account. Supports these formats: single-image, single-video, Placement Asset Customization (PAC), multi-media…
- `ads_create_custom_audience` _(write)_ — Creates a custom audience under an ad account. Supported subtypes are CUSTOM (customer list), WEBSITE, ENGAGEMENT, MOBILE_APP, and LOOKALIKE. ## When to use…
- `ads_creative_delete` _(destructive)_ — Delete an existing ad creative by ID. After deletion, the creative can no longer be used for new ads. ## Required: - `creative_id` — the numeric ID of the ad…
- `ads_creative_update` _(destructive)_ — Update metadata on an existing ad creative by ID. This tool can rename a creative, activate it, or change its labels. It cannot edit the creative's visible…
- `ads_creative_upload_local_image` _(write)_ — Prepare a short-lived Upload Service capability for one local image or video selected in the Ads MCP App.
- `ads_creative_upload_media` _(write)_ — Upload images or videos to an advertiser's ad account from either a local device or a publicly accessible URL. This is the preferred media upload tool. ##…
- `ads_delete_custom_audience` _(destructive)_ — Permanently deletes a custom audience by its ID. ## When to use: - Call this tool when the user explicitly asks to delete or remove a custom audience. - Use…
- `ads_delete_local_ad_image` _(destructive)_ — Delete one uploaded image from the selected ad account in the Ads MCP App.
- `ads_experiment_abtest_create_test` _(write)_ — Create an A/B test (split test). Supports campaign-level (L3), ad-set-level (L2), and creative-level (L1) tests. At least 2 cells are required; the maximum…
- `ads_experiment_abtest_get_test` _(read)_ — Returns details of a specific A/B test by its study ID—name, status, type, start/end dates, and the cells with their assigned ad entities. Use this when the…
- `ads_experiment_abtest_update_test` _(write)_ — Edits or cancels a running A/B test by study ID. Only the study ID and action are required—the ad account is resolved automatically. **ID ROUTING:** `study_id`…
- `ads_experiment_check_eligibility` _(read)_ — **CRITICAL TRIGGER:** Call this tool whenever a user asks about measuring incrementality, incremental conversions, causal impact, or if their ads can run an…
- `ads_experiment_lift_create_test` _(write)_ — **CRITICAL TRIGGER:** Act as an advocate for incrementality. Proactively pitch this tool whenever a user evaluates ad performance, questions ROAS/CPA,…
- `ads_experiment_lift_get_test` _(read)_ — Fetches a single lift study by its study ID and returns full details — cells, objectives, and incremental results. Use this when you already have a specific…
- `ads_experiment_list_tests` _(read)_ — Finds A/B tests (also referred to as split tests) and lift studies associated with an ad entity (ad account, campaign, ad set, or ad) — whether active,…
- `ads_finalize_local_ad_image_upload` _(write)_ — Validate a completed Upload Service media upload and add it to the selected ad account library.
- `ads_get_ad_account_custom_audiences` _(read)_ — Lists custom audiences for a given ad account, with optional filtering by subtype. Results are paginated. ## When to use: - Call this tool when the user asks…
- `ads_get_ad_account_pages` _(read)_ — Retrieves the list of Facebook Page IDs associated with (promoted under) a given ad account. Results are paginated; default page size is 50, configurable via…
- `ads_get_ad_accounts` _(read)_ — Retrieves the list of ad account IDs that the current user has access to. Results are paginated in chunks of 50. ## When to use: - Call this tool when the user…
- `ads_get_ad_entities` _(read)_ — Retrieves live or draft campaigns, ad sets, ads, and their metrics. COMPLETION CONTRACT: After this tool returns, inspect `next_actions` before answering. If…
- `ads_get_ad_images` _(read)_ — List ad images uploaded to an advertiser's ad account. **IMPORTANT — Partial results**: When called without `hashes`, this tool returns only `hash` and `name`…
- `ads_get_ad_preview` _(read)_ — Generate a visual preview of how an ad creative appears on Facebook, Instagram, Messenger, or other placements. CRITICAL: after this tool returns, you MUST…
- `ads_get_ad_preview_screenshot` _(read)_ — Internal capture sink for the Ads MCP App ad preview card. App-only; not intended for model use.
- `ads_get_ad_videos` _(read)_ — List ad videos uploaded to an advertiser's ad account. **IMPORTANT — Partial results**: When called without `video_ids`, this tool returns only `id` and…
- `ads_get_creative_ads` _(read)_ — Get the ads (adgroups) that use a given ad creative. ## When to use: - The user wants to know which ads reference a specific creative. ## When NOT to use: -…
- `ads_get_creatives` _(read)_ — List ad creatives in an advertiser's ad account. By default, account-wide listings return `id`, `name`, `account_id`, `status`, `body`, `title`, and…
- `ads_get_custom_audience` _(read)_ — Retrieves details of a specific custom audience by its ID, including size, status, delivery info, and type. ## When to use: - Call this tool when the user asks…
- `ads_get_custom_audience_adsets` _(read)_ — Returns ad sets (adgroups) that use a given custom audience in their targeting. ## When to use: - Call this tool BEFORE calling ads_delete_custom_audience to…
- `ads_get_customconversions` _(read)_ — Retrieves a paginated list of custom conversions for an ad account, optionally filtered to a specific dataset (pixel or offline conversion data set). Use when…
- `ads_get_dataset_details` _(read)_ — Retrieves identity and configuration metadata for a dataset (also known as pixel or application), including name, status, creation time, business association,…
- `ads_get_dataset_quality` _(read)_ — Retrieves signal quality and health metrics for a dataset (also known as pixel or application), including Event Match Quality (EMQ) scores, per-match-key…
- `ads_get_dataset_stats` _(read)_ — Retrieves event volume statistics for a dataset (also known as pixel or application). `start_time` must be no more than 28 days ago, and an explicit start/end…
- `ads_get_datasets` _(read)_ — Retrieves a paginated list of datasets (also known as pixels or applications) owned or assigned to a business or ad account, including name, status, and…
- `ads_get_errors` _(read)_ — Fetches delivery-blocking errors for campaign, ad set or ad. These are hard-stop issues that keep assets inactive or prevent publish/delivery. Only use this…
- `ads_get_field_context` _(read)_ — Returns rich metadata for ads fields (canonical name, display name, type, description, filterability, sortability, enum values, aliases, metric flag, supported…
- `ads_get_help_article` _(read)_ — Retrieves help center articles relevant to the user's question about advertising concepts, policies, or how-to guides. ## When to use: - Call this tool when…
- `ads_get_ig_accounts` _(read)_ — Retrieves Instagram accounts linked to an ad account that can be used for creating ads. Results are paginated in chunks of 25. ## When to use: - Call this tool…
- `ads_get_ig_media` _(read)_ — Fetches advertisable IG media owned by a linked advertiser IG account. Returns posts, reels, and stories that can be promoted. Results are paginated in chunks…
- `ads_get_opportunity_score` _(read)_ — Fetches the current account-level opportunity score (0-100) and the MAPI-supported subset of recommendations for an ad account. META RECOMMENDS calling this…
- `ads_get_pages_for_business` _(read)_ — Retrieves the list of Facebook Pages owned by a specific business. Results are paginated in chunks of 50 by default. ## When to use: - Call this tool when the…
- `ads_get_user_pages` _(read)_ — Retrieves all Facebook Pages the current user can use for advertising. Returns pages the user has CREATE_ADS permission on, including pages they directly admin…
- `ads_insights_advertiser_context` _(read)_ — Provides an overview of the advertiser's business context and marketing funnel to determine the most relevant optimization goal and approach
- `ads_insights_anomaly_signal` _(read)_ — Surfaces alerts and warnings about deviations in ad performance, including unusual patterns, spikes or drops. Detects anything that may be worth investigating…
- `ads_insights_auction_ranking_benchmarks` _(read)_ — Highlights which ads have generated stronger results in the auction and identifies factors (bid, ad quality) that can be optimized for improved performance.…
- `ads_insights_industry_benchmark` _(read)_ — Compares ad set performance against aggregated benchmarks from similar advertisers, optionally filtered by spend tier, optimization goal, and an explicitly…
- `ads_insights_performance_trend` _(read)_ — Analyzes the direction and changes in key ad performance metrics over time, including Cost Per Click (CPC), Cost Per Mille (CPM), Cost Per Result (CPR), Return…
- `ads_insights_performance_vs_peers` _(read)_ — Compares an ad set's delivery and efficiency metrics (cost per result, CPM, CTR, plus its funnel stage's metrics such as landing page view rate, conversion…
- `ads_library_search` _(read)_ — Searches the Meta Ad Library for ads matching specified criteria. Returns publicly available ad data including ad creative, page info, and metadata. This tool…
- `ads_log_ui_interaction` _(read)_ — Internal telemetry sink for the Ads MCP App UI widgets. App-only; not intended for model use.
- `ads_pixel_event_create` _(write)_ — Creates Meta Pixel conversion event rules. Batch-capable. AUTH: requires either the `ads_management` or `business_management` granular OAuth scope on the…
- `ads_pixel_event_delete` _(destructive)_ — Deletes Meta Pixel conversion event rules. Batch-capable. Mirrors the same delete semantics as the Events Manager Pixel UI (EST) and IWL flow use — same…
- `ads_pixel_event_read` _(read)_ — Reads Meta Pixel conversion event rules. Batch-capable. AUTH: requires the `ads_read`, `ads_management`, or `business_management` granular OAuth scope on the…
- `ads_pixel_event_update` _(destructive)_ — Updates Meta Pixel conversion event rules. Currently status-only. Batch-capable. AUTH: requires either the `ads_management` or `business_management` granular…
- `ads_pixel_parameter_create` _(write)_ — Creates Meta Pixel parameter extractors (CSS or CONSTANT_VALUE), linked to an existing event rule. Batch-capable. AUTH: requires either the `ads_management` or…
- `ads_pixel_parameter_delete` _(destructive)_ — Soft-deletes Meta Pixel parameter extractors. Batch-capable. Mirrors the same delete semantics as the Events Manager Pixel UI (EST) and IWL flow use — same…
- `ads_pixel_parameter_read` _(read)_ — Reads Meta Pixel parameter extractors. Batch-capable. AUTH: requires the `ads_read`, `ads_management`, or `business_management` granular OAuth scope on the…
- `ads_pixel_parameter_update` _(destructive)_ — Patches Meta Pixel parameter extractors. Batch-capable. AUTH: requires either the `ads_management` or `business_management` granular OAuth scope on the…
- `ads_update_custom_audience` _(destructive)_ — Updates an existing custom audience's metadata by its ID. Supports DFCA (customer list) and WCA (website) audiences. ## When to use: - Call this tool when the…
- `ads_update_custom_audience_users` _(destructive)_ — Adds or removes users in a Data File Custom Audience (DFCA / customer list) by uploading hashed PII rows. Backs the POST /{audience_id}/users API (add) or…
- `ads_update_entity` _(destructive)_ — Updates fields on an existing campaign, ad set, or ad. ## When to use: - Call this tool when the user wants to modify an existing ad entity. - Use for changing…

---

## Connect

Gateway URL: https://gateway.mewcp.com/personal/mcp

Every request carries one header:

    Authorization: Bearer <API_KEY>

Replace `API_KEY` with your own key from the dashboard (Developer).

## Apps

### Claude Desktop

Mac & Windows app

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://gateway.mewcp.com/personal/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open Claude Desktop → Settings → Developer → "Edit Config"
2. Paste the snippet inside the outer { } of the config file (merge with your existing "mcpServers" section if you have one)
3. Save the file, then quit Claude Desktop completely and reopen it
4. Start a new conversation — your tool will be available

### VS Code

Copilot / Cline

- Command Palette → "MCP: Open User Configuration" (opens mcp.json). For one project only, use .vscode/mcp.json instead.

```json
{
  "mcp.servers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have a "servers" section in your mcp.json? Just add the server entry inside it.

1. Open VS Code → Command Palette (Cmd+Shift+P / Ctrl+Shift+P)
2. Run "MCP: Open User Configuration" to open your mcp.json
3. Paste the snippet and save
4. Start the server when prompted (or from the MCP servers view) and use it in Copilot Chat

### Cursor

AI-first editor

- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your mcp.json? Just add the server entry inside it.

1. Open Cursor → Settings → Cursor Settings → MCP
2. Click "Add new global MCP server"
3. Paste the snippet and save
4. Restart Cursor

### Codex

OpenAI's CLI agent

- Add the snippet to your Codex MCP config or your standard MCP config file for the CLI tool you use.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Codex generally reads a standard MCP server block, so you can add this alongside your other configured servers.

1. Open your Codex MCP config or project-level config file
2. Paste the MewCP server block inside the config JSON/TOML structure your tool expects
3. Save the file and restart Codex
4. Verify the tool is available inside a fresh session

### Claude Code

Anthropic's CLI agent

- ~/.claude.json (user scope) or .mcp.json in your project root — create it if it doesn't exist. Or skip the file and use the CLI command below.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open ~/.claude.json (or .mcp.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file and start (or restart) Claude Code
4. Or skip the file entirely and run the CLI command below instead

### OpenCode

Open-source terminal agent

- ~/.config/opencode/opencode.json (global) or opencode.json in your project root — create it if it doesn't exist.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mewcp": {
      "type": "remote",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcp" section in your opencode.json? Just add the server entry inside it.

1. Open ~/.config/opencode/opencode.json (or opencode.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and start (or restart) OpenCode

### OpenClaw

Self-hosted agent gateway

- ~/.openclaw/openclaw.json — create it if it doesn't exist.

```json
{
  "mcp": {
    "servers": {
      "mewcp": {
        "transport": "streamable-http",
        "url": "https://gateway.mewcp.com/personal/mcp",
        "enabled": true,
        "headers": {
          "Authorization": "Bearer API_KEY"
        }
      }
    }
  }
}
```

Already have an "mcp" section in your openclaw.json? Just add the server entry inside "servers".

1. Open ~/.openclaw/openclaw.json in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and restart OpenClaw

### Antigravity

Google's agentic IDE

- ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace-local) — create it if it doesn't exist.

```json
{
  "mcpServers": {
    "mewcp": {
      "serverUrl": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it. Remote servers must use the "serverUrl" field — the legacy "url"/"httpUrl" fields aren't supported.

1. In the editor's agent side panel, click "…" → "MCP Servers" → "Manage MCP Servers" → "View raw config" (Antigravity CLI: type /mcp instead to open the Interactive MCP Manager)
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file — the server connects automatically

### Hermes

Nous Research's CLI agent

- config.yaml in your Hermes config directory (~/.hermes) — add this under a top-level "mcp_servers:" key.

```yaml
mcp_servers:
  mewcp:
    url: "https://gateway.mewcp.com/personal/mcp"
    headers:
      Authorization: "Bearer API_KEY"
```

Already have an "mcp_servers" section in your config.yaml? Just add the server entry inside it.

1. Open config.yaml in your Hermes config directory
2. Paste the snippet under the top-level "mcp_servers:" key (merge with existing entries if you have any)
3. Save the file, then run /reload-mcp in Hermes (or start a fresh session)
4. Ask Hermes "Tell me which MCP-backed tools are available right now" to confirm it connected

### DeepSeek Harness

DeepSeek's agent harness

- cordis.yml in your DSH project — or the patch file you mount plugins from.

```yaml
- id: mcp-mewcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: mewcp
    transport: streamable-http
    url: https://gateway.mewcp.com/personal/mcp
    headers:
      Authorization: "Bearer API_KEY"
```

One plugin instance = one MCP server. Add this entry to your plugin list; don't nest it inside another entry.

1. Open cordis.yml (or your patch file) in your DSH project
2. Paste the entry into your plugin list, keeping the leading dash and indentation
3. Restart DSH (or let HMR reload) — tools register as mcp__mewcp__<tool_name>
4. Verify with: dsh web --dump-config | grep -A3 mcp

## SDKs

### Python

fastmcp client

```python
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

SERVER_URL = "https://gateway.mewcp.com/personal/mcp"
API_KEY = "API_KEY"

transport = StreamableHttpTransport(
    url=SERVER_URL,
    headers={
        "Authorization": f"Bearer {API_KEY}",
    }
)

async def main():
    client = Client(transport)
    async with client:
        tools = await client.list_tools()
        print(tools)

asyncio.run(main())
```

1. Install fastmcp: pip install fastmcp
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run your script

### TypeScript

MCP SDK

```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const SERVER_URL = "https://gateway.mewcp.com/personal/mcp";
const API_KEY = "API_KEY";

const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), {
  requestInit: {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  },
});

const client = new Client({ name: "mewcp-client", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map((t) => t.name));
```

1. Install: npm install @modelcontextprotocol/sdk
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run with Node 18+ as an ES module (e.g. npx tsx script.ts)