@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.
- package/package.json +1 -1
- package/registry.json +11 -1
- package/skills/graphic-slide-deck/README.md +129 -0
- package/skills/graphic-slide-deck/SKILL.md +364 -0
- package/skills/graphic-slide-deck/evals/evals.json +35 -0
- package/skills/graphic-slide-deck/references/animation-guide.md +100 -0
- package/skills/graphic-slide-deck/references/design-system.md +165 -0
- package/skills/graphic-slide-deck/references/layout-library.md +446 -0
- package/skills/graphic-slide-deck/references/style-presets.md +314 -0
- package/skills/meta-ads-skill/README.md +24 -55
- package/skills/meta-ads-skill/meta-ads-skill/SKILL.md +35 -18
- package/skills/meta-ads-skill/meta-ads-skill/references/report_templates.md +4 -3
- package/skills/meta-ads-skill/meta-ads-skill/references/workflows.md +11 -15
|
@@ -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
|
|
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
|
|
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/`
|
|
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
|
|
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
|
|
52
|
+
## Installation & Setup
|
|
54
53
|
|
|
55
|
-
To use this skill,
|
|
54
|
+
To use this skill, you must install the official Meta Ads CLI and configure your credentials.
|
|
56
55
|
|
|
57
|
-
### 1.
|
|
58
|
-
-
|
|
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
|
-
|
|
71
|
-
cd Meta-Ads-MCP
|
|
72
|
-
pip install -r requirements.txt
|
|
59
|
+
pip install meta-ads
|
|
73
60
|
```
|
|
74
61
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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
|
-
|
|
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
|
|
87
|
+
## Supported Commands
|
|
118
88
|
|
|
119
|
-
|
|
120
|
-
* **
|
|
121
|
-
* **
|
|
122
|
-
* **
|
|
123
|
-
* **
|
|
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
|
|
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
|
|
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
|
|
12
|
+
The Meta Ads CLI uses a **System User Access Token** for authentication.
|
|
13
13
|
|
|
14
|
-
###
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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
|
-
|
|
21
|
+
## CLI Routing
|
|
24
22
|
|
|
25
|
-
|
|
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
|
-
###
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
- **
|
|
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
|
|
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
|
-
- **
|
|
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
|
-
- **
|
|
16
|
-
- **
|
|
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
|
-
- **
|
|
21
|
-
- **
|
|
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
|
-
- **
|
|
26
|
-
- **
|
|
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. **
|
|
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
|
-
- **
|
|
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.
|