Meta Ads MCP Server
by mikdeangelis
README.md
# π Meta Ads MCP Server
<div align="center">
[](https://www.python.org/downloads/)
[](https://developers.facebook.com/docs/marketing-api/)
[](https://modelcontextprotocol.io/)
[](LICENSE)
**Server MCP completo per gestire campagne pubblicitarie Facebook/Instagram**
[Quick Start](#-quick-start) β’ [Tools Disponibili](#-tools-disponibili) β’ [Configurazione](#%EF%B8%8F-configurazione) β’ [Esempi](#-esempi-pratici)
</div>
---
## β¨ Caratteristiche
<table>
<tr>
<td width="50%">
### π **Analisi & Reporting**
- π Metriche performance complete
- π― Report avanzati con breakdown
- π° Insights su spend, ROI, ROAS
- π
Date personalizzate o preset
</td>
<td width="50%">
### π¨ **Gestione Campagne**
- βοΈ Crea campagne e ad set
- π― Modifica targeting e budget
- π Analizza creative e annunci
- π Gestisci stato (attiva/pausa)
</td>
</tr>
</table>
### π₯ FunzionalitΓ Principali
```mermaid
graph LR
A[Account] --> B[Campagne]
B --> C[Ad Set]
C --> D[Annunci]
D --> E[Creative]
B -.-> F[Insights]
C -.-> F
D -.-> F
F --> G[Report]
```
- β
**10 Tools Completi** - Dalla creazione alla reportistica
- β
**System User Compatible** - Funziona con token permanenti
- β
**Error Handling Avanzato** - Messaggi di errore dettagliati Meta API
- β
**Date Flessibili** - Preset o range personalizzati (fino a 37 mesi)
- β
**Validazione Automatica** - Controlli Pydantic per parametri corretti
---
## β‘ Quick Start
```bash
# 1οΈβ£ Clona il repository
git clone https://github.com/mikdeangelis/mcp-meta-ads.git
cd mcp-meta-ads
# 2οΈβ£ Crea ambiente virtuale
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 3οΈβ£ Installa dipendenze
pip install -r requirements.txt
# 4οΈβ£ Configura token (vedi guida sotto)
export META_ACCESS_TOKEN="your_token_here"
# 5οΈβ£ Aggiungi al tuo MCP client
# Vedi sezione "Configurazione" per istruzioni specifiche
```
> π‘ **Primo utilizzo?** Segui la [guida completa per ottenere il token](#-ottenere-il-token-meta) piΓΉ sotto.
---
## π οΈ Tools Disponibili
### π Gestione Risorse
| Tool | Descrizione | Esempio |
|------|-------------|---------|
| `meta_ads_list_accounts` | Lista tutti gli account pubblicitari | _"Mostrami i miei account Meta"_ |
| `meta_ads_list_campaigns` | Lista campagne di un account | _"Campagne dell'account act_123456"_ |
| `meta_ads_list_adsets` | Lista ad set di una campagna | _"Ad set della campagna 789"_ |
| `meta_ads_list_ads` | Lista annunci di un ad set | _"Annunci dell'ad set 456"_ |
### βοΈ Creazione & Modifica
| Tool | Descrizione | Parametri Chiave |
|------|-------------|------------------|
| `meta_ads_create_campaign` | Crea nuova campagna | `objective`, `daily_budget`, `special_ad_categories` |
| `meta_ads_create_adset` | Crea nuovo ad set | `targeting`, `bid_amount`, `optimization_goal` β οΈ |
| `meta_ads_update_adset_targeting` | Modifica targeting | `age_min`, `age_max`, `genders` |
| `meta_ads_update_adset_budget` | Modifica budget | `daily_budget` |
| `meta_ads_update_adset_status` | Attiva/pausa ad set | `status` (ACTIVE/PAUSED) |
> β οΈ **Nota**: `create_adset` richiede `bid_amount` per LINK_CLICKS e `targeting_automation.advantage_audience` (0 o 1)
### π Analytics & Insights
| Tool | Descrizione | Dettagli |
|------|-------------|----------|
| `meta_ads_get_insights` | Metriche performance | Impressions, clicks, spend, CTR, CPC, conversions |
| `meta_ads_get_creative` | Dettagli creative | Testi, immagini, link, CTA |
| `meta_ads_generate_report` | Report con breakdown | EtΓ , genere, paese, placement |
---
## π Ottenere il Token Meta
### Metodo Rapido: Graph API Explorer
<details>
<summary><b>π Clicca per espandere la guida passo-passo</b></summary>
#### 1οΈβ£ Crea App Meta Developer
1. Vai su [Facebook Developers](https://developers.facebook.com/)
2. **My Apps** β **Create App** β **Business**
3. Completa i dettagli dell'app
#### 2οΈβ£ Aggiungi Marketing API
1. Dashboard app β trova **Marketing API**
2. Clicca **Set Up**
3. La Marketing API apparirΓ nel menu
#### 3οΈβ£ Genera Token
**Opzione A: Graph API Explorer** (raccomandato)
1. Vai su [Graph API Explorer](https://developers.facebook.com/tools/explorer/)
2. Seleziona la tua app
3. **Get User Access Token** β Seleziona permessi:
- β
`ads_management` (gestione completa)
- β
`ads_read` (lettura)
- β
`read_insights` (metriche)
4. **Generate Access Token** β Autorizza β Copia token
**Opzione B: System User Token** (non scade)
Per produzione, usa [System User](https://developers.facebook.com/docs/marketing-api/guides/smb/system-user-access-token-handling/) nel Business Manager.
#### 4οΈβ£ Converti in Long-Lived Token (60 giorni)
```bash
curl -X GET "https://graph.facebook.com/v21.0/oauth/access_token" \
-d "grant_type=fb_exchange_token" \
-d "client_id=YOUR_APP_ID" \
-d "client_secret=YOUR_APP_SECRET" \
-d "fb_exchange_token=YOUR_SHORT_LIVED_TOKEN"
```
Sostituisci:
- `YOUR_APP_ID`: Dashboard β Settings β Basic
- `YOUR_APP_SECRET`: Dashboard β Settings β Basic
- `YOUR_SHORT_LIVED_TOKEN`: Token generato al punto 3
#### 5οΈβ£ Verifica Token
```bash
curl "https://graph.facebook.com/v21.0/me?access_token=YOUR_TOKEN"
```
Dovresti vedere i dettagli del tuo profilo Facebook.
</details>
### Configurazione Token
**Opzione 1: File `.env` (raccomandato)**
Crea `.env` nella directory del progetto:
```bash
META_ACCESS_TOKEN=your_token_here
```
**Opzione 2: Variabile d'ambiente**
```bash
# Linux/macOS
export META_ACCESS_TOKEN="your_token_here"
# Windows PowerShell
$env:META_ACCESS_TOKEN="your_token_here"
# Persistente: aggiungi a ~/.bashrc o ~/.zshrc
echo 'export META_ACCESS_TOKEN="your_token_here"' >> ~/.bashrc
source ~/.bashrc
```
---
## βοΈ Configurazione
### Per Claude Code
#### Metodo Automatico
```bash
claude mcp add meta-ads \
--command "$(pwd)/.venv/bin/python" \
--arg "$(pwd)/meta_ads_mcp.py"
```
#### Metodo Manuale
Modifica `~/.config/claude-code/config.json`:
```json
{
"mcpServers": {
"meta-ads": {
"command": "/path/to/mcp-meta-ads/.venv/bin/python",
"args": ["/path/to/mcp-meta-ads/meta_ads_mcp.py"],
"env": {
"META_ACCESS_TOKEN": "your_token_here"
}
}
}
}
```
### Per Claude Desktop
Modifica `claude_desktop_config.json`:
**macOS/Linux:** `~/.config/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"meta-ads": {
"command": "python",
"args": ["/path/to/mcp-meta-ads/meta_ads_mcp.py"],
"env": {
"META_ACCESS_TOKEN": "your_token_here"
}
}
}
}
```
---
## π‘ Esempi Pratici
### π― Creare una Campagna Completa
```javascript
// 1. Crea campagna
meta_ads_create_campaign({
"account_id": "act_123456789",
"name": "Estate 2025 - Promozione",
"objective": "OUTCOME_SALES",
"daily_budget": 5000, // β¬50/giorno
"status": "PAUSED"
})
// β
Campagna creata: ID 120236574531090062
// 2. Crea ad set con targeting
meta_ads_create_adset({
"campaign_id": "120236574531090062",
"name": "Italia 25-55 anni",
"optimization_goal": "LINK_CLICKS",
"billing_event": "LINK_CLICKS",
"bid_amount": 150, // β¬1.50 per click
"targeting": {
"geo_locations": {"countries": ["IT"]},
"age_min": 25,
"age_max": 55,
"targeting_automation": {
"advantage_audience": 0 // β οΈ OBBLIGATORIO
}
},
"status": "PAUSED"
// β οΈ NON specificare daily_budget se campagna ha giΓ budget
})
// β
Ad set creato: ID 120236575096660062
```
### π Analisi Performance
```javascript
// Metriche ultimi 30 giorni
meta_ads_get_insights({
"object_id": "act_123456789",
"level": "campaign",
"date_preset": "last_30d"
})
// Metriche con date personalizzate
meta_ads_get_insights({
"object_id": "120236574531090062",
"level": "campaign",
"since": "2025-01-01",
"until": "2025-01-31"
})
// Report breakdown per etΓ e genere
meta_ads_generate_report({
"object_id": "120236575096660062",
"breakdowns": ["age", "gender"],
"date_preset": "last_7d"
})
```
### π¨ Analisi Creative
```javascript
// Dettagli creative di un annuncio
meta_ads_get_creative({
"ad_id": "123456789"
})
// Restituisce: titolo, body, link, CTA, immagini/video
```
### π Gestione Stato e Budget
```javascript
// Modifica targeting
meta_ads_update_adset_targeting({
"adset_id": "120236575096660062",
"age_min": 30,
"age_max": 50,
"genders": [2] // Solo donne
})
// Aumenta budget
meta_ads_update_adset_budget({
"adset_id": "120236575096660062",
"daily_budget": 3000 // β¬30/giorno
})
// Attiva ad set
meta_ads_update_adset_status({
"adset_id": "120236575096660062",
"status": "ACTIVE"
})
```
---
## π Struttura Meta Ads
```
Account Pubblicitario (act_XXXXX)
β
βββ π Campagna (Campaign)
β βββ π― Obiettivo: OUTCOME_SALES, OUTCOME_TRAFFIC, ecc.
β βββ π° Budget: Giornaliero o Lifetime
β βββ β±οΈ Schedule: Data inizio/fine
β β
β βββ π¦ Ad Set
β βββ π― Targeting
β β βββ Geo: Paesi, regioni, cittΓ
β β βββ Demografia: EtΓ , genere
β β βββ Advantage Audience: 0 o 1
β βββ π΅ Bid Amount (per alcuni goals)
β βββ π Optimization Goal: LINK_CLICKS, CONVERSIONS, ecc.
β β
β βββ π¨ Annuncio (Ad)
β βββ πΌοΈ Creative
β βββ π Headline & Body
β βββ πΌοΈ Immagine/Video
β βββ π Link URL
β βββ π¬ Call-to-Action
```
---
## β οΈ Requisiti Importanti
### Per `meta_ads_create_adset`
| Parametro | Obbligatorio? | Note |
|-----------|---------------|------|
| `targeting.geo_locations` | β
Sì | Almeno paesi, regioni o città |
| `targeting.targeting_automation.advantage_audience` | β
Sì | 0 (disabilitato) o 1 (abilitato) |
| `bid_amount` | β οΈ Dipende | **OBBLIGATORIO** per LINK_CLICKS, LANDING_PAGE_VIEWS, ecc. |
| `daily_budget`/`lifetime_budget` | β οΈ Dipende | **NON usare** se campagna ha giΓ budget |
### Budget: Regole
- β
**Budget solo campagna**: OK
- β
**Budget solo ad set**: OK (se campagna senza budget)
- β **Budget campagna + budget ad set**: ERRORE (subcode 1885621)
---
## π Troubleshooting
<details>
<summary><b>β Errore: "META_ACCESS_TOKEN non trovato"</b></summary>
**Causa**: Variabile d'ambiente non configurata
**Soluzione**:
```bash
export META_ACCESS_TOKEN="your_token_here"
# Oppure crea file .env nella directory del progetto
```
</details>
<details>
<summary><b>β Errore: "Token non valido o scaduto"</b></summary>
**Causa**: Token scaduto (short-lived durano poche ore)
**Soluzione**:
1. Genera nuovo token da Graph API Explorer
2. Converti in long-lived (60 giorni)
3. Oppure usa System User token (permanente)
</details>
<details>
<summary><b>β Errore: "Permessi insufficienti"</b></summary>
**Causa**: Token senza permessi necessari
**Soluzione**: Rigenera token includendo:
- `ads_management` (gestione completa)
- `ads_read` (minimo per lettura)
- `read_insights` (per metriche)
</details>
<details>
<summary><b>β Errore: "Invalid parameter (subcode 1815857)"</b></summary>
**Causa**: Manca `bid_amount` per LINK_CLICKS
**Soluzione**: Aggiungi `bid_amount` in centesimi (es. 100 = β¬1.00)
</details>
<details>
<summary><b>β Errore: "Cannot set budget (subcode 1885621)"</b></summary>
**Causa**: Campagna ha giΓ budget, non puoi specificarlo anche nell'ad set
**Soluzione**: Ometti `daily_budget`/`lifetime_budget` dall'ad set
</details>
<details>
<summary><b>β Errore: "Advantage audience required (subcode 1870227)"</b></summary>
**Causa**: Manca `targeting_automation.advantage_audience`
**Soluzione**: Aggiungi al targeting:
```json
"targeting_automation": {
"advantage_audience": 0 // o 1
}
```
</details>
<details>
<summary><b>β Errore: "Rate limit raggiunto (429)"</b></summary>
**Causa**: Troppe richieste API in poco tempo
**Soluzione**: Attendi 5-10 minuti prima di riprovare
</details>
---
## π Risorse Utili
- π [Meta Marketing API Documentation](https://developers.facebook.com/docs/marketing-api/)
- π§ͺ [Graph API Explorer](https://developers.facebook.com/tools/explorer/)
- π [API Error Reference](https://developers.facebook.com/docs/marketing-api/error-reference/)
- πΌ [Meta Business Help Center](https://www.facebook.com/business/help)
- π [Insights API Reference](https://developers.facebook.com/docs/marketing-api/insights/)
- π€ [Model Context Protocol](https://modelcontextprotocol.io/)
---
## π€ Contributi
Contributi, issues e feature requests sono benvenuti!
1. Fork del progetto
2. Crea il tuo feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit delle modifiche (`git commit -m 'Add some AmazingFeature'`)
4. Push al branch (`git push origin feature/AmazingFeature`)
5. Apri una Pull Request
---
## π Licenza
Questo progetto Γ¨ rilasciato sotto licenza **MIT**. Vedi il file [LICENSE](LICENSE) per i dettagli.
---
## π Riconoscimenti
- Basato su [Meta Marketing API v21.0](https://developers.facebook.com/docs/marketing-api/)
- Costruito con [FastMCP](https://github.com/modelcontextprotocol/python-sdk)
- Validazione con [Pydantic v2](https://docs.pydantic.dev/)
---
<div align="center">
β Se questo progetto ti Γ¨ utile, lascia una stella su GitHub!
</div>
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues