@opendirectory.dev/skills 0.1.52 → 0.1.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,314 @@
1
+ # Style Presets
2
+
3
+ 8 business-oriented style presets. Each is fully self-contained -- complete CSS token set, no "derive from" chains.
4
+
5
+ Choose based on purpose and audience. When in doubt: clean-slate for sales, midnight-editorial for investor, matt-gray for internal.
6
+
7
+ ---
8
+
9
+ ## 1. midnight-editorial
10
+
11
+ **Best for:** Investor decks, premium B2B, thought leadership presentations
12
+ **Feeling:** Editorial authority, premium, considered
13
+
14
+ ```
15
+ Background: #0A0A0A outer / #111111 slide / #1A1A1A elevated cards / #080808 footer
16
+ Text primary: #F2F2F2
17
+ Text secondary: #AAAAAA
18
+ Text muted: #555555
19
+ Accent: #D8F90A (yellow-green)
20
+ Accent text: #0A0A0A (dark text on accent)
21
+ Divider: #2A2A2A
22
+ Card border: #222222
23
+
24
+ Display font: 'Instrument Serif', Georgia, 'Times New Roman', serif
25
+ Body font: Inter, Arial, Helvetica, sans-serif
26
+ Google Fonts: https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Inter:wght@400;500;600;700&display=swap
27
+
28
+ Display weight: 400 (Instrument Serif is a display weight at 400)
29
+ Body weight: 400 / 600 (bold callouts)
30
+ ```
31
+
32
+ **Signature elements:**
33
+ - Thin `<hr>` separators between content blocks (`border: none; border-top: 1px solid #2A2A2A; width: 40px; margin: 0`)
34
+ - Oversized section numbers at `opacity: 0.08` as absolute background elements
35
+ - Instrument Serif italic on quote-callout slides (adds literary weight)
36
+ - stat-highlight numbers in `#D8F90A` accent color
37
+ - section-divider bg: `#D8F90A` with `#0A0A0A` text (full inversion)
38
+
39
+ **Background depth via section alternation:**
40
+ - Header / opening slides: `#0A0A0A`
41
+ - Main content slides: `#111111`
42
+ - Elevated cards (stats, callouts): `#1A1A1A`
43
+ - Closing slide: `#D8F90A` full bg with dark text
44
+
45
+ ---
46
+
47
+ ## 2. matt-gray
48
+
49
+ **Best for:** Internal decks, operational reviews, professional presentations to mixed audiences
50
+ **Feeling:** Safe, professional, accessible, clean
51
+
52
+ ```
53
+ Background: #F5F5F5 outer / #FFFFFF slide / #EEEEEE section alt / #F8F8F8 footer
54
+ Text primary: #1A1A1A
55
+ Text secondary: #444444
56
+ Text muted: #888888
57
+ Accent: #2563EB (blue)
58
+ Accent text: #FFFFFF (white text on accent)
59
+ Divider: #E5E5E5
60
+ Card border: #DDDDDD
61
+ Card shadow: 0 1px 3px rgba(0, 0, 0, 0.08)
62
+
63
+ Display font: 'DM Sans', Arial, Helvetica, sans-serif
64
+ Body font: 'DM Sans', Arial, Helvetica, sans-serif
65
+ Google Fonts: https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700;800&display=swap
66
+
67
+ Display weight: 700
68
+ Body weight: 400 / 500
69
+ ```
70
+
71
+ **Signature elements:**
72
+ - 4px left border on section-divider and section heading elements (`border-left: 4px solid #2563EB; padding-left: 1rem`)
73
+ - Subtle drop shadow on stat-highlight cards
74
+ - Stat numbers in accent blue
75
+ - section-divider: `#EEEEEE` background (slight contrast from main white), left-border accent treatment
76
+ - Clean rectangular buttons if any CTAs (`border-radius: 6px`)
77
+
78
+ ---
79
+
80
+ ## 3. clean-slate
81
+
82
+ **Best for:** Sales decks, customer-facing presentations, any audience that expects professionalism
83
+ **Feeling:** Trustworthy, clear, confident, enterprise-safe
84
+
85
+ ```
86
+ Background: #FFFFFF outer / #FFFFFF slide / #F8F8F8 alt sections / #F4F4F4 footer
87
+ Text primary: #111111
88
+ Text secondary: #555555
89
+ Text muted: #999999
90
+ Accent: #0F172A (near-black navy)
91
+ Accent light: #E0F2FE (light blue for pill/badge backgrounds)
92
+ Accent text: #FFFFFF
93
+ Divider: #E8E8E8
94
+ Card border: #E0E0E0
95
+ Card radius: 16px
96
+ Card shadow: 0 2px 8px rgba(0, 0, 0, 0.06)
97
+
98
+ Display font: 'Plus Jakarta Sans', Arial, Helvetica, sans-serif
99
+ Body font: 'Plus Jakarta Sans', Arial, Helvetica, sans-serif
100
+ Google Fonts: https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;800&display=swap
101
+
102
+ Display weight: 800
103
+ Body weight: 400 / 500
104
+ ```
105
+
106
+ **Signature elements:**
107
+ - Rounded card containers on all callout elements (`border-radius: 16px`)
108
+ - Badge pills for category labels and key points (`border-radius: 100px; background: #E0F2FE; color: #0F172A; padding: 0.2em 0.8em`)
109
+ - Generous whitespace -- padding toward the maximum of each `clamp()` range
110
+ - stat-highlight: dark `#0F172A` numbers on white background (high contrast, no color distraction)
111
+ - section-divider: dark `#111111` background (inverts the white deck)
112
+ - closing-cta: `#0F172A` full bg with white text
113
+
114
+ ---
115
+
116
+ ## 4. brutalist
117
+
118
+ **Best for:** Startup pitches, design-forward tech audiences, conference talks with strong POV
119
+ **Feeling:** Direct, raw, confident, uncompromising
120
+
121
+ ```
122
+ Background: #FFFFFF outer / #FFFFFF slide
123
+ Text primary: #000000
124
+ Text secondary: #333333
125
+ Accent: #FF3300 (red) or #FFE500 (yellow)
126
+ Accent text: #000000 (both red and yellow are light enough for dark text)
127
+ Divider: #000000 (solid black)
128
+ Border: 3px solid #000000 (heavy)
129
+ Border-radius: 0 (zero everywhere -- no rounded corners)
130
+
131
+ Display font: 'Archivo Black', Arial Black, Arial, sans-serif
132
+ Body font: 'Space Grotesk', Arial, sans-serif
133
+ Google Fonts: https://fonts.googleapis.com/css2?family=Archivo+Black&family=Space+Grotesk:wght@400;500;700&display=swap
134
+
135
+ Display weight: 900
136
+ Body weight: 400 / 700
137
+ ```
138
+
139
+ **Signature elements:**
140
+ - Heavy borders everywhere: `border: 3px solid #000000` on cards, tables, section elements
141
+ - Zero border-radius on all elements -- absolute rule for this style
142
+ - Oversized section numbers in accent color (`font-size: clamp(6rem, 15vw, 12rem); opacity: 1` -- fully visible, not ghosted)
143
+ - section-divider: accent color full background (`#FF3300` or `#FFE500`) with black text
144
+ - stat-highlight: numbers in accent color, extreme size
145
+ - comparison-table: bold black borders, no row alternation -- raw grid
146
+
147
+ **DO NOT apply rounded corners, gradients, or drop shadows to brutalist decks. The aesthetic requires hard edges.**
148
+
149
+ ---
150
+
151
+ ## 5. mint-pixel-corporate
152
+
153
+ **Best for:** SaaS sales, product demos, tech company pitches, growth-stage startups
154
+ **Feeling:** Fresh, modern, startup-professional
155
+
156
+ ```
157
+ Background: #F0FAF7 outer / #FFFFFF slide / #E8F5F0 alt sections / #F0FAF7 footer
158
+ Text primary: #1A2E2A
159
+ Text secondary: #4A6B62
160
+ Text muted: #7A9B92
161
+ Accent: #00B894 (mint)
162
+ Accent text: #1A2E2A (dark text on mint)
163
+ Divider: #D1E8E1
164
+ Card border: #C5DFD7
165
+ Card radius: 10px
166
+
167
+ Display font: 'Manrope', Arial, Helvetica, sans-serif
168
+ Body font: 'Manrope', Arial, Helvetica, sans-serif
169
+ Google Fonts: https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;700;800&display=swap
170
+
171
+ Display weight: 800
172
+ Body weight: 400 / 500
173
+ ```
174
+
175
+ **Signature elements:**
176
+ - CSS `radial-gradient` dot pattern on section-divider slides:
177
+ ```css
178
+ background-image: radial-gradient(circle, #00B894 1px, transparent 1px);
179
+ background-size: 24px 24px;
180
+ background-color: #1A2E2A;
181
+ ```
182
+ - Mint accent pills for feature highlights (`border-radius: 100px; background: #00B894; color: #1A2E2A; padding: 0.15em 0.75em; font-size: clamp(0.65rem, 1vw, 0.8rem)`)
183
+ - Screenshot frames with mint border (`border: 2px solid #00B894; border-radius: 8px`)
184
+ - section-divider: dark `#1A2E2A` background with dot pattern + mint text
185
+ - stat-highlight: mint numbers on white background
186
+
187
+ ---
188
+
189
+ ## 6. product-minimal
190
+
191
+ **Best for:** Product demos, feature showcases, design system presentations, design-forward audiences
192
+ **Feeling:** Maximum whitespace, purposeful restraint, design system precision
193
+
194
+ ```
195
+ Background: #FAFAFA outer / #FAFAFA slide / #F4F4F4 alt / #F0F0F0 footer
196
+ Text primary: #18181B
197
+ Text secondary: #71717A
198
+ Text muted: #A1A1AA
199
+ Accent: #8B5CF6 (violet)
200
+ Accent text: #FFFFFF (white on violet)
201
+ Divider: #E4E4E7
202
+ Card shadow: 0 1px 3px rgba(0, 0, 0, 0.08)
203
+ Card radius: 12px
204
+
205
+ Display font: 'Syne', Arial, Helvetica, sans-serif
206
+ Body font: 'IBM Plex Sans', Arial, Helvetica, sans-serif
207
+ Google Fonts: https://fonts.googleapis.com/css2?family=Syne:wght@400;700;800&family=IBM+Plex+Sans:wght@400;500;600&display=swap
208
+
209
+ Display weight: 700-800
210
+ Body weight: 400 / 500
211
+ ```
212
+
213
+ **Signature elements:**
214
+ - Single accent element per slide rule: the accent color (`#8B5CF6`) appears in AT MOST ONE place per slide -- this creates intentional scarcity that reads premium
215
+ - Subtle CSS drop shadow on cards: `box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08)` -- barely visible, adds depth
216
+ - Very generous padding (use maximum clamp values)
217
+ - stat-highlight: violet stat numbers with a thin violet top-border on each stat card
218
+ - section-divider: `#18181B` full bg with Syne display font + white text
219
+ - closing-cta: violet background (`#8B5CF6`) with white text
220
+
221
+ ---
222
+
223
+ ## 7. magazine-red
224
+
225
+ **Best for:** Marketing campaign reviews, brand presentations, bold internal reporting, conference openers
226
+ **Feeling:** Authoritative, editorial, high energy, unmissable
227
+
228
+ ```
229
+ Background: #1A1A1A outer / #111111 slide / #1E1E1E alt / #0D0D0D footer
230
+ Text primary: #FFFFFF
231
+ Text secondary: #CCCCCC
232
+ Text muted: #888888
233
+ Accent: #E63329 (red)
234
+ Accent secondary: #FFFFFF
235
+ Divider: #2A2A2A
236
+
237
+ Display font: 'Fraunces', Georgia, 'Times New Roman', serif
238
+ Body font: 'Work Sans', Arial, Helvetica, sans-serif
239
+ Google Fonts: https://fonts.googleapis.com/css2?family=Fraunces:ital,wght@0,900;1,900&family=Work+Sans:wght@400;500;600&display=swap
240
+
241
+ Display weight: 900
242
+ Body weight: 400 / 500
243
+ ```
244
+
245
+ **Signature elements:**
246
+ - 8px full-width horizontal red band: `<div style="width:100%; height:8px; background:#E63329; margin: clamp(1rem, 2vw, 2rem) 0">` used as visual separator
247
+ - Editorial section numbers in red, visible opacity (`opacity: 0.3` -- not fully ghosted like midnight-editorial)
248
+ - quote-callout slides: INVERTED to white background with dark text (the only white slide in the deck)
249
+ ```css
250
+ .slide--quote-callout { background: #FFFFFF; color: #111111; }
251
+ ```
252
+ - Fraunces italic for quote text: extreme editorial weight
253
+ - stat-highlight: red accent numbers, large
254
+ - closing-cta: full red background (`#E63329`) with white text
255
+
256
+ ---
257
+
258
+ ## 8. soft-cloud
259
+
260
+ **Best for:** Onboarding decks, customer education, approachable SaaS, HR/people presentations
261
+ **Feeling:** Friendly, accessible, soft, welcoming -- high trust, low intimidation
262
+
263
+ ```
264
+ Background: #EEF2FF outer / #FFFFFF slide / #F5F3FF alt / #EEF2FF footer
265
+ Text primary: #1E1B4B
266
+ Text secondary: #4C4A7B
267
+ Text muted: #9896C0
268
+ Accent: #6366F1 (indigo)
269
+ Accent light: #E0E7FF (light indigo for card backgrounds)
270
+ Accent text: #FFFFFF
271
+ Divider: #DDD6FE
272
+ Card radius: 24px (soft, generous)
273
+ Card shadow: 0 4px 16px rgba(99, 102, 241, 0.08)
274
+
275
+ Display font: 'Outfit', Arial, Helvetica, sans-serif
276
+ Body font: 'Outfit', Arial, Helvetica, sans-serif
277
+ Google Fonts: https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap
278
+
279
+ Display weight: 700
280
+ Body weight: 400 / 500
281
+ ```
282
+
283
+ **Signature elements:**
284
+ - Generous border-radius everywhere: `border-radius: 24px` on all cards, callout blocks, stat containers
285
+ - Gradient section-dividers:
286
+ ```css
287
+ background: linear-gradient(135deg, #EEF2FF 0%, #E0E7FF 50%, #DDD6FE 100%);
288
+ ```
289
+ - Badge pills on key points: `border-radius: 100px; background: #E0E7FF; color: #6366F1; padding: 0.2em 0.9em`
290
+ - stat-highlight: stat numbers in indigo on `#F5F3FF` elevated card background
291
+ - All `<hr>` dividers: `border-color: #DDD6FE` (matches the soft palette)
292
+ - closing-cta: indigo gradient background
293
+ ```css
294
+ background: linear-gradient(135deg, #6366F1 0%, #8B5CF6 100%);
295
+ ```
296
+
297
+ ---
298
+
299
+ ## DO NOT USE -- Style Slop Checklist
300
+
301
+ Before outputting any HTML, verify none of these are present:
302
+
303
+ | Pattern | Why it's wrong |
304
+ |---|---|
305
+ | Inter as display font | Zero typographic character -- reads as default AI output |
306
+ | Purple-to-blue gradient on white background | Most overused "modern" AI aesthetic -- immediately signals undesigned |
307
+ | Every slide centered with the same layout | No typographic thinking, looks like a PowerPoint default theme |
308
+ | Identical slide backgrounds throughout | No visual rhythm -- the deck reads as one long scroll |
309
+ | `box-shadow` on everything | Overused "depth" signal that adds no real depth |
310
+ | `border-radius: 8px` on everything (even brutalist) | Softening that fights the style's aesthetic intent |
311
+ | Accent color on 5+ elements per slide | Over-branded, destroys scarcity = destroys premium feel |
312
+ | Helvetica Neue / Arial as display font | Generic -- no personality at display size |
313
+ | Stat numbers at body text size | Doesn't understand the stat-highlight layout's purpose |
314
+ | "Thank You" as closing slide | Missed the closing-cta layout's entire purpose |
@@ -28,9 +28,9 @@ https://github.com/user-attachments/assets/ee98a1b5-ebc4-452f-bbfb-c434f2935067
28
28
 
29
29
  ## Overview
30
30
 
31
- The **Meta Ads Skill** is a comprehensive, production-ready OpenCode skill designed to give LLMs and AI agents expert-level capabilities to orchestrate the [Varnan-Tech Meta Ads MCP Server](https://github.com/Varnan-Tech/Meta-Ads-MCP).
31
+ The **Meta Ads Skill** is a comprehensive, production-ready skill designed to give LLMs and AI agents expert-level capabilities to orchestrate the official **Meta Ads Python CLI**.
32
32
 
33
- By using this skill, an agent transforms into an **Expert Media Buyer**. It will know exactly how to safely authenticate, explore ad structures, troubleshoot campaign performance (like CPA spikes), discover new audiences, and format massive Meta APIs JSON payloads into beautiful, readable markdown reports.
33
+ By using this skill, an agent transforms into an **Expert Media Buyer**. It will know exactly how to explore ad structures, troubleshoot campaign performance (like CPA spikes), discover new audiences, and format massive Meta APIs JSON payloads into beautiful, readable markdown reports.
34
34
 
35
35
  ---
36
36
 
@@ -39,63 +39,36 @@ By using this skill, an agent transforms into an **Expert Media Buyer**. It will
39
39
  This skill is designed using a **Progressive Disclosure (Hub-and-Spoke)** architecture to maximize context window efficiency:
40
40
 
41
41
  1. **The Hub (`SKILL.md`)**: The primary entry point. It provides strict guardrails, safety protocols, and the authentication troubleshooting workflow.
42
- 2. **The Spokes (`references/` & `scripts/`)**:
42
+ 2. **The Spokes (`references/`)**:
43
43
  - When you need to perform a specific task (e.g., investigating a CPA spike), read `references/workflows.md` for the exact step-by-step orchestration strategy.
44
44
  - When presenting data to the user, read `references/report_templates.md` to strictly follow the required Markdown layout.
45
- - **Data Parsing**: Meta Ads JSON responses are massive. *Always* use the provided `scripts/formatters.py` to condense raw JSON from `get_campaigns`, `get_adsets`, or `get_insights` into clean markdown tables before reasoning over them.
46
45
 
47
46
  ### Strict Agent Guardrails
48
47
  * **Context Protection**: ALWAYS default to `time_range="last_7d"` for insights. ALWAYS use `limit=10` for listing campaigns/adsets initially.
49
- * **Safety First**: NEVER execute state-changing tools (`create_campaign`, `update_campaign`, `clear_database`, `reset_database`) without explicitly showing the parameters to the user and waiting for their affirmative confirmation.
48
+ * **Safety First**: NEVER execute state-changing tools (`create_campaign`, `update_campaign`) without explicitly showing the parameters to the user and waiting for their affirmative confirmation.
50
49
 
51
50
  ---
52
51
 
53
- ## Installation & Setup of the Meta Ads MCP
52
+ ## Installation & Setup
54
53
 
55
- To use this skill, the host machine must have the Varnan-Tech Meta Ads MCP Server installed and running.
54
+ To use this skill, you must install the official Meta Ads CLI and configure your credentials.
56
55
 
57
- ### 1. Prerequisites
58
- - **Python 3.10+**
59
- - A **Meta Developer Account** with a configured App.
60
-
61
- ### 2. Configure the Meta App
62
- 1. Go to the [Facebook Developers Portal](https://developers.facebook.com/).
63
- 2. Create an App and add the **Marketing API** product.
64
- 3. Under the Facebook Login settings, add `http://localhost:8000/auth/facebook/callback` to the **Valid OAuth Redirect URIs**.
65
- 4. Retrieve your **App ID** and **App Secret**.
66
-
67
- ### 3. Server Setup
68
- Clone the MCP repository:
56
+ ### 1. Install the CLI
57
+ The skill relies on the `meta-ads` Python package:
69
58
  ```bash
70
- git clone https://github.com/Varnan-Tech/Meta-Ads-MCP.git
71
- cd Meta-Ads-MCP
72
- pip install -r requirements.txt
59
+ pip install meta-ads
73
60
  ```
74
61
 
75
- Create a `.env` file in the root of the MCP server:
76
- ```env
77
- FB_APP_ID="your_facebook_app_id"
78
- FB_APP_SECRET="your_facebook_app_secret"
79
- FB_OAUTH_ENABLED="true"
80
- FB_REDIRECT_URI="http://localhost:8000/auth/facebook/callback"
81
- DATABASE_URL="sqlite:///.meta-ads-mcp/oauth.db"
82
- ```
83
-
84
- ---
85
-
86
- ## Authentication Workflow
87
-
88
- The server uses OAuth backed by a local SQLite database to seamlessly pass tokens to the MCP context.
89
-
90
- 1. **Start the local Auth Server**:
91
- ```bash
92
- python src/auth/run_web_server.py
93
- ```
94
- 2. **Authenticate**: Open `http://localhost:8000/auth/facebook` in your web browser.
95
- 3. **Grant Permissions**: Click "Connect Facebook" and approve the `ads_management`, `ads_read`, and `read_insights` permissions.
96
- 4. **Completion**: The OAuth token is saved securely to the SQLite DB. The agent can now use the MCP tools automatically without needing the token pasted into the prompt.
62
+ ### 2. Authentication (System User Token)
63
+ The CLI uses a **System User Access Token** for authentication.
64
+ 1. Generate a System User Token in your [Meta Business Suite](https://business.facebook.com/settings/system-users).
65
+ 2. Ensure the token has `ads_management`, `ads_read`, and `read_insights` permissions.
66
+ 3. Set the following environment variables on your machine:
97
67
 
98
- *If an agent encounters an Auth Error during operation, it is instructed by this skill to guide the user back through this exact login flow.*
68
+ ```bash
69
+ export ACCESS_TOKEN="your_system_user_access_token"
70
+ export AD_ACCOUNT_ID="act_your_ad_account_id"
71
+ ```
99
72
 
100
73
  ---
101
74
 
@@ -109,16 +82,12 @@ meta-ads-skill/
109
82
  references/
110
83
  report_templates.md # Standardized markdown report structures
111
84
  workflows.md # Orchestration strategies (e.g., CPA troubleshooting)
112
- scripts/
113
- auth_check.py # Diagnostic script for token status
114
- formatters.py # JSON -> Markdown table utilities
115
85
  ```
116
86
 
117
- ## Supported Tools (via MCP)
87
+ ## Supported Commands
118
88
 
119
- Through the underlying MCP, this skill orchestrates:
120
- * **Account Management**: `get_ad_accounts()`, `get_account_info()`
121
- * **Campaigns & Ads**: `get_campaigns()`, `get_adsets()`, `get_ads()`, `create_campaign()`, `update_campaign()`
122
- * **Analytics**: `get_insights()`, `analyze_campaigns()`
123
- * **Targeting**: `search_interests()`, `search_demographics()`, `estimate_audience_size()`
124
- * **Database**: `token_status()`, `clear_database()`, `reset_database()`
89
+ This skill orchestrates the `meta-ads` CLI using a noun-verb structure:
90
+ * **Campaigns**: `meta ads campaign list`, `meta ads campaign create`
91
+ * **Ad Sets**: `meta ads adset list`
92
+ * **Ads**: `meta ads ad list`
93
+ * **Insights**: `meta ads insights get`
@@ -1,41 +1,58 @@
1
1
  ---
2
2
  name: meta-ads-expert
3
- description: Use when interacting with the Meta Ads MCP server to manage accounts, campaigns, ads, insights, and targeting, or to troubleshoot OAuth token authentication. Act as an Expert Media Buyer.
3
+ description: Use when interacting with the Meta Ads CLI to manage accounts, campaigns, ads, and insights. Act as an Expert Media Buyer.
4
4
  ---
5
5
 
6
6
  # Meta Ads Expert Skill
7
7
 
8
- **Persona:** You are an Expert Media Buyer. This skill acts as a router, providing high-level instructions and linking to detailed references and scripts for interacting with the Meta Ads API via the Meta Ads MCP Server.
8
+ **Persona:** You are an Expert Media Buyer. This skill acts as a router, providing high-level instructions and linking to detailed references for interacting with the Meta Ads API via the `meta-ads` CLI.
9
9
 
10
10
  ## Authentication & Setup
11
11
 
12
- The Meta Ads MCP Server uses OAuth with a local SQLite database to manage authentication tokens securely.
12
+ The Meta Ads CLI uses a **System User Access Token** for authentication.
13
13
 
14
- ### Auth Workflow
15
- If any Meta Ads MCP tool returns an authentication error (e.g., missing token, expired token):
16
- 1. **Run Auth Check**: Use the auth helper script `scripts/auth_check.py` to diagnose issues.
17
- 2. **Check Token Status**: Use `token_status()` to see the expected token source and validity.
18
- 3. **Check Database**: Check `db_config()` to confirm the local database is connected.
19
- 4. **Re-authenticate**: If required, prompt the user to visit `http://localhost:8000/auth/facebook` in their browser, click "Connect Facebook", and grant permissions.
14
+ ### Environment Variables
15
+ Ensure the following environment variables are set in the environment where the CLI is executed:
16
+ - `ACCESS_TOKEN`: Your Meta System User Access Token.
17
+ - `AD_ACCOUNT_ID`: Your target Ad Account ID (e.g., `act_123456789`).
20
18
 
21
- ## Orchestration Workflows
19
+ **CRITICAL:** NEVER use inline tokens in commands (e.g., `meta ads --token <TOKEN>`). Always rely on environment variables or pre-configured config files.
22
20
 
23
- For complex orchestrations and step-by-step guides on analyzing performance or exploring structures, see [references/workflows.md](references/workflows.md).
21
+ ## CLI Routing
24
22
 
25
- For reporting standards and output templates, see [references/report_templates.md](references/report_templates.md).
23
+ Map your intent to the following `meta-ads` CLI commands:
24
+
25
+ | Intent | CLI Command |
26
+ |---|---|
27
+ | List Ad Accounts | `meta ads account list` |
28
+ | List Campaigns | `meta ads campaign list` |
29
+ | List Ad Sets | `meta ads adset list` |
30
+ | List Ads | `meta ads ad list` |
31
+ | Get Insights | `meta ads insights get` |
32
+ | Create Campaign | `meta ads campaign create` |
26
33
 
27
34
  ## Strict Guardrails
28
35
 
29
- ### Date Ranges & Pagination
36
+ ### Command Execution
37
+ - **JSON Output**: ALWAYS use `--output json` for all read operations to ensure structured data for analysis.
38
+ - **No Input**: ALWAYS use `--no-input` (or equivalent) to prevent the Bash tool from hanging on interactive prompts.
39
+ - **Creation Safety**: ALWAYS use `--status PAUSED` for all creation commands unless the user explicitly requests an active status.
30
40
 
31
- To prevent context window overflow and API rate limits, **ALWAYS** apply strict date ranges and limits:
32
- - **Pagination Limits**: When listing items (e.g., `get_campaigns()`, `get_adsets()`, `get_ads()`), cap the limit parameter to `limit=10` initially. Only expand if explicitly required.
33
- - **Date Ranges**: For `get_insights` and `analyze_campaigns`, ALWAYS default to `time_range="last_7d"`. Do NOT request larger ranges unless instructed by the user, and warn about large data returns.
41
+ ### Date Ranges & Pagination
42
+ To prevent context window overflow and API rate limits:
43
+ - **Pagination Limits**: When listing items, cap the limit parameter (e.g., `--limit 10`) initially. Only expand if explicitly required.
44
+ - **Date Ranges**: For insights, ALWAYS default to `--time-range last_7d`. Do NOT request larger ranges unless instructed by the user.
34
45
 
35
46
  ## Safety Guardrails (State-Changing Actions)
36
47
 
37
- You MUST require explicit user confirmation before executing any state-changing tools (e.g., `create_campaign`, `update_campaign`, `clear_database`, `reset_database`).
48
+ You MUST require explicit user confirmation before executing any state-changing commands (e.g., `campaign create`, `campaign update`).
38
49
 
39
- 1. Present the exact parameters to the user.
50
+ 1. Present the exact CLI command and parameters to the user.
40
51
  2. Ask for explicit approval.
41
52
  3. Only proceed if approved.
53
+
54
+ ## Orchestration Workflows
55
+
56
+ For complex orchestrations (e.g., CPA spike analysis), see [references/workflows.md](references/workflows.md).
57
+
58
+ For reporting standards and output templates, see [references/report_templates.md](references/report_templates.md).
@@ -1,6 +1,6 @@
1
1
  # Meta Ads Report Templates
2
2
 
3
- Use these markdown templates when generating reports and summaries for users.
3
+ Use these markdown templates when generating reports and summaries for users. These templates are designed to be populated using the structured data from the `meta-ads` CLI's JSON output (`--output json`).
4
4
 
5
5
  ## 1. Executive Summary Template
6
6
 
@@ -10,11 +10,12 @@ Use these markdown templates when generating reports and summaries for users.
10
10
  ## Executive Summary
11
11
  [2-3 sentences summarizing the overall performance. E.g., "Account performance remained stable this week with a 5% increase in ROAS, primarily driven by the new Retargeting campaign. However, top-of-funnel CPA has started to rise."]
12
12
 
13
- ## Key Metrics
13
+ ## Key Metrics (Source: `meta ads insights get`)
14
14
  - **Spend:** $[Amount] ([+/-]% vs previous period)
15
15
  - **Revenue/Conversions:** [Amount] ([+/-]% vs previous period)
16
16
  - **CPA:** $[Amount] ([+/-]% vs previous period)
17
17
  - **ROAS:** [Amount]x ([+/-]% vs previous period)
18
+ - **CTR:** [Amount]% ([+/-]% vs previous period)
18
19
 
19
20
  ## Key Findings
20
21
  - **Highlight 1:** [E.g., Campaign X is driving 60% of total conversions at a very efficient CPA.]
@@ -35,7 +36,7 @@ Use these markdown templates when generating reports and summaries for users.
35
36
  ## The Issue
36
37
  [Briefly state the problem. E.g., "CPA increased from $20 to $35 starting on [Date]."]
37
38
 
38
- ## Root Cause Analysis
39
+ ## Root Cause Analysis (Source: `meta ads insights get --level [level]`)
39
40
  - **Campaign Level:** [Identify which campaign(s) caused the spike.]
40
41
  - **Ad Set Level:** [Identify specific ad sets. Did a lookalike audience degrade? Did a specific placement get expensive?]
41
42
  - **Ad Level:** [Identify ad fatigue, drop in CTR, increase in CPM, or decrease in conversion rate.]
@@ -1,36 +1,31 @@
1
1
  # Meta Ads Workflows
2
2
 
3
- This document outlines complex orchestrations and workflows for common Meta Ads tasks.
3
+ This document outlines complex orchestrations and workflows for common Meta Ads tasks using the `meta-ads` CLI.
4
4
 
5
5
  ## 1. CPA Spike Troubleshooting
6
6
 
7
7
  When a client or user asks to investigate a spike in Cost Per Action (CPA), follow this systematic approach:
8
8
 
9
9
  1. **Account Level Overview**
10
- - **Tool:** `get_ad_accounts` (if account ID not provided)
11
- - **Tool:** `get_insights` (Level: account)
10
+ - **Command:** `meta ads insights get --level account --time-range last_30d --output json`
12
11
  - **Action:** Look at overall account performance over the last 7, 14, and 30 days to identify when the spike started.
13
12
 
14
13
  2. **Campaign Breakdown**
15
- - **Tool:** `get_campaigns`
16
- - **Tool:** `get_insights` (Level: campaign)
14
+ - **Command:** `meta ads campaign list --output json`
15
+ - **Command:** `meta ads insights get --level campaign --time-range last_7d --output json`
17
16
  - **Action:** Identify which specific campaigns are driving the CPA increase. Compare spend and CPA across active campaigns.
18
17
 
19
18
  3. **Ad Set Deep Dive**
20
- - **Tool:** `get_adsets`
21
- - **Tool:** `get_insights` (Level: adset)
19
+ - **Command:** `meta ads adset list --campaign-id <ID> --output json`
20
+ - **Command:** `meta ads insights get --level adset --time-range last_7d --output json`
22
21
  - **Action:** For the offending campaigns, break down by Ad Set to see if specific audiences or placements are underperforming.
23
22
 
24
23
  4. **Ad & Creative Analysis**
25
- - **Tool:** `get_ads`
26
- - **Tool:** `get_insights` (Level: ad)
24
+ - **Command:** `meta ads ad list --adset-id <ID> --output json`
25
+ - **Command:** `meta ads insights get --level ad --time-range last_7d --output json`
27
26
  - **Action:** Check if specific ads are experiencing ad fatigue (high frequency, dropping CTR) or if recent changes disrupted the learning phase.
28
27
 
29
- 5. **Advanced Insights (Optional)**
30
- - **Tool:** `analyze_campaigns`
31
- - **Action:** Run automated analysis on the specific campaigns to generate actionable recommendations.
32
-
33
- 6. **Synthesis and Reporting**
28
+ 5. **Synthesis and Reporting**
34
29
  - Use the `CPA Spike Investigation Report` template (found in `report_templates.md`) to structure the findings and recommendations.
35
30
 
36
31
  ## 2. New Audience Discovery
@@ -38,7 +33,7 @@ When a client or user asks to investigate a spike in Cost Per Action (CPA), foll
38
33
  When a user wants to find new audiences or test new targeting:
39
34
 
40
35
  1. **Review Current Top Performers**
41
- - **Tool:** `get_insights` (Level: adset)
36
+ - **Command:** `meta ads insights get --level adset --time-range last_30d --output json`
42
37
  - **Action:** Identify the ad sets currently delivering the best ROAS/CPA.
43
38
 
44
39
  2. **Generate Audience Ideas**
@@ -46,6 +41,7 @@ When a user wants to find new audiences or test new targeting:
46
41
 
47
42
  3. **Structure the Test**
48
43
  - Recommend a campaign structure for testing (e.g., A/B testing with Campaign Budget Optimization (CBO) or Ad Set Budget Optimization (ABO)).
44
+ - **Command Example:** `meta ads campaign create --name "Test_Audience_X" --status PAUSED --no-input`
49
45
 
50
46
  4. **Monitoring**
51
47
  - Provide the exact metrics to watch (e.g., CTR, CPC, early conversions) over the next 3-7 days.