Meta Ads MCP

Meta Ads MCP

MCP server that exposes Meta Marketing API to Claude, enabling analysis and management of Facebook/Instagram ad accounts, including campaigns, insights, and budget adjustments with safety confirmations.

Category
访问服务器

README

Meta Ads MCP

Serveur MCP self-hosted qui expose l'API Meta Marketing (Facebook/Instagram Ads) à Claude, pour analyser et piloter des comptes publicitaires clients directement depuis Claude Code / Claude Desktop.

Objectif

  • Analyser des comptes clients : insights, campagnes, ad sets, ads, creatives, audiences
  • Agir dessus : pause/resume, ajustement de budgets, création de campagnes (toujours en PAUSED par défaut)
  • Multi-comptes : une base réutilisable pour plusieurs clients, un token par client

Pas de dépendance à un SaaS tiers (type Pipeboard) : le code appelle directement la Graph API Marketing de Meta via fetch natif, et reste 100% self-hosted.

Stack

  • TypeScript / Node.js 18+
  • @modelcontextprotocol/sdk (SDK officiel Anthropic)
  • Appels REST directs à la Graph API Marketing (v26.0 par défaut, configurable via META_API_VERSION)
  • Transport MCP : stdio pour le dev local (Claude Code / Claude Desktop). Le code est structuré pour ajouter un transport Streamable HTTP plus tard, en vue d'un déploiement remote (Cloud Run ou équivalent).

État du projet

🚧 En cours de développement. Les 14 tools (7 lecture + 7 écriture) sont implémentés. Les tools de lecture sont testables via npm run test:manual ; les tools d'écriture ont été validés en mode preview contre un vrai compte (aucune mutation réelle testée en dehors d'une confirmation explicite de l'utilisateur).

Structure du projet

meta-ads-mcp/
  src/
    server.ts          # point d'entrée MCP
    client/
      meta-api.ts       # wrapper HTTP vers la Graph API Marketing
      auth.ts            # gestion des tokens (long-lived / System User)
    tools/
      read/               # tools de lecture (insights, campagnes, ...)
      write/              # tools d'écriture (pause, budgets, création, ...)
    config/
      accounts.ts         # mapping multi-comptes client -> ad_account_id/token
    types/
  test/
    manual-check.ts      # script de validation manuelle tool par tool
  .github/workflows/ci.yml
  .env.example
  accounts.config.json.example
  .mcp.json.example

Setup

1. Prérequis

  • Node.js 18+
  • Un compte développeur Meta (developers.facebook.com) avec une app configurée pour la Marketing API
  • Accès à un Business Manager Meta

2. Installation

npm install
npm run build

3. Obtenir un token Meta

  1. Crée une app sur developers.facebook.com et récupère META_APP_ID / META_APP_SECRET.
  2. Génère un access token utilisateur avec les permissions ads_read, ads_management, business_management via l'Explorateur d'API Graph ou le flow OAuth complet.
  3. Échange ce token contre un long-lived token (~60 jours) :
    GET /oauth/access_token
      ?grant_type=fb_exchange_token
      &client_id={META_APP_ID}
      &client_secret={META_APP_SECRET}
      &fb_exchange_token={SHORT_LIVED_TOKEN}
    
  4. Recommandé pour la prod : crée un System User dans le Business Manager (Paramètres de l'entreprise > Utilisateurs > Utilisateurs système), assigne-lui les comptes publicitaires nécessaires, et génère un token System User — il n'expire pas et évite la gestion de renouvellement.

4. Configuration

cp .env.example .env
cp accounts.config.json.example accounts.config.json

Remplis .env avec tes identifiants Meta (voir tableau ci-dessous), puis déclare chaque client dans accounts.config.json (fichier ignoré par git — ne jamais le commiter s'il contient des tokens en clair).

Variable Description
META_APP_ID ID de l'app Meta
META_APP_SECRET Secret de l'app Meta
META_ACCESS_TOKEN Token long-lived ou System User par défaut
META_BUSINESS_ID ID du Business Manager
META_API_VERSION Version de la Graph API à cibler (défaut v26.0)
ACCOUNTS_CONFIG_PATH Chemin vers le fichier de mapping multi-comptes
BUDGET_CHANGE_CONFIRMATION_THRESHOLD_PERCENT Seuil (%) au-delà duquel un changement de budget doit être confirmé explicitement avant exécution

5. Connexion à Claude Code / Claude Desktop

Copie .mcp.json.example vers .mcp.json à la racine du projet (ou dans la config Claude Desktop équivalente) et adapte les variables d'environnement :

cp .mcp.json.example .mcp.json

Claude Code détecte automatiquement .mcp.json à la racine du repo. Pour Claude Desktop, ajoute la même entrée dans claude_desktop_config.json sous mcpServers.

Tools MCP disponibles

Lecture (priorité 1)

Tool Description
list_ad_accounts Liste les comptes publicitaires accessibles
get_campaigns Liste des campagnes (statut, objectif, budget)
get_adsets Ad sets, avec résumé du targeting
get_ads Ads, avec creative associé
get_insights Métriques (impressions, reach, CTR, CPC, CPM, ROAS, conversions), filtres date_range et breakdown (âge, genre, placement, device)
get_creatives Assets créatifs utilisés (image/vidéo, texte, hook)
get_audience_estimate Taille d'audience estimée pour un targeting donné

Écriture (priorité 2)

Tool Description
update_campaign_status Pause / resume / archive
update_adset_budget Ajustement du budget quotidien / lifetime
update_adset_bid Ajustement du montant ou de la stratégie d'enchère
create_campaign Création — toujours en statut PAUSED
duplicate_campaign / duplicate_adset Duplication pour tests A/B — la copie est toujours créée PAUSED
update_targeting_exclusions Gestion des audiences/zones/intérêts d'exclusion

Règle de sécurité non négociable : aucun tool d'écriture n'exécute quoi que ce soit au premier appel. Chaque tool suit un pattern preview → confirm :

  1. Appelé sans confirm: true, il renvoie un aperçu structuré (status: "preview_only") avec l'état actuel, le changement proposé, et — pour les budgets — le delta en % calculé automatiquement (avertissement si supérieur à BUDGET_CHANGE_CONFIRMATION_THRESHOLD_PERCENT, 20% par défaut). Aucun appel d'écriture n'est fait à la Graph API à ce stade.
  2. Il faut un second appel explicite avec confirm: true pour que la mutation soit réellement exécutée.

Cette validation humaine systématique est non négociable, quel que soit le type ou l'ampleur de l'action. Elle est conçue pour rester compatible avec un futur mode Autopilot (UI séparée) : quand ce toggle sera actif, l'orchestrateur pourra passer confirm: true automatiquement pour les actions à faible risque, mais devra toujours exiger une confirmation explicite (modale) pour toute hausse de budget — cette exception ne peut pas être appliquée par le serveur MCP lui-même (il ne sait pas qui l'appelle), elle doit être respectée par la couche orchestratrice qui pilotera l'Autopilot.

Gestion des erreurs et rate limits

Meta limite à 200 appels/heure/utilisateur. Le client HTTP (src/client/meta-api.ts) implémente un retry avec backoff exponentiel sur les erreurs 429 et les codes d'erreur Meta 17, 32 et 613 (rate limit). Les erreurs API Meta remontent au niveau MCP sous forme de message clair, jamais de stack trace brute.

Tests manuels

npm run test:manual

Exécute chaque tool directement (hors transport MCP) et affiche le résultat, pour validation avant connexion à Claude Code en usage réel.

Développement

npm run dev     # lance le serveur via tsx (hot reload TS)
npm run build   # compile vers dist/
npm run lint    # ESLint
npm start       # lance la version compilée

Roadmap

  • [x] Scaffold du repo, CI, structure du projet
  • [x] Authentification Meta (résolution multi-comptes, long-lived token exchange, support System User)
  • [x] Retry / backoff et gestion d'erreurs Meta (codes 17, 32, 613, HTTP 429)
  • [x] Tools de lecture (7/7)
  • [x] Tools d'écriture (7/7) + garde-fou preview/confirm systématique
  • [ ] Transport Streamable HTTP pour déploiement remote
  • [ ] UI de pilotage (multi-comptes, plages de dates, sélection de métriques) — phase séparée, branchée sur ce MCP

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选