meta-ads-mcp 0.2.6__py3-none-any.whl → 0.2.8__py3-none-any.whl
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.
- meta_ads_mcp/__init__.py +1 -1
- meta_ads_mcp/api.py +122 -53
- meta_ads_mcp/core/__init__.py +2 -1
- meta_ads_mcp/core/adsets.py +7 -2
- meta_ads_mcp/core/api.py +29 -1
- meta_ads_mcp/core/auth.py +81 -13
- meta_ads_mcp/core/authentication.py +103 -49
- meta_ads_mcp/core/pipeboard_auth.py +484 -0
- meta_ads_mcp/core/server.py +49 -4
- meta_ads_mcp/core/utils.py +11 -5
- {meta_ads_mcp-0.2.6.dist-info → meta_ads_mcp-0.2.8.dist-info}/METADATA +115 -29
- meta_ads_mcp-0.2.8.dist-info/RECORD +21 -0
- meta_ads_mcp-0.2.6.dist-info/RECORD +0 -20
- {meta_ads_mcp-0.2.6.dist-info → meta_ads_mcp-0.2.8.dist-info}/WHEEL +0 -0
- {meta_ads_mcp-0.2.6.dist-info → meta_ads_mcp-0.2.8.dist-info}/entry_points.txt +0 -0
meta_ads_mcp/core/server.py
CHANGED
|
@@ -4,9 +4,12 @@ from mcp.server.fastmcp import FastMCP
|
|
|
4
4
|
import argparse
|
|
5
5
|
import os
|
|
6
6
|
import sys
|
|
7
|
+
import webbrowser
|
|
7
8
|
from .auth import login as login_auth
|
|
8
9
|
from .resources import list_resources, get_resource
|
|
9
10
|
from .utils import logger
|
|
11
|
+
from .pipeboard_auth import pipeboard_auth_manager
|
|
12
|
+
import time
|
|
10
13
|
|
|
11
14
|
# Initialize FastMCP server
|
|
12
15
|
mcp_server = FastMCP("meta-ads", use_consistent_tool_format=True)
|
|
@@ -78,7 +81,49 @@ def main():
|
|
|
78
81
|
# Handle login command
|
|
79
82
|
if args.login:
|
|
80
83
|
login_cli()
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
return 0
|
|
85
|
+
|
|
86
|
+
# Check for Pipeboard authentication and token
|
|
87
|
+
pipeboard_api_token = os.environ.get("PIPEBOARD_API_TOKEN")
|
|
88
|
+
if pipeboard_api_token:
|
|
89
|
+
logger.info("Using Pipeboard authentication")
|
|
90
|
+
# Check for existing token
|
|
91
|
+
token = pipeboard_auth_manager.get_access_token()
|
|
92
|
+
if not token:
|
|
93
|
+
logger.info("No valid Pipeboard token found. Initiating browser-based authentication flow.")
|
|
94
|
+
print("No valid Meta token found. Opening browser for authentication...")
|
|
95
|
+
try:
|
|
96
|
+
# Initialize the auth flow and get the login URL
|
|
97
|
+
auth_data = pipeboard_auth_manager.initiate_auth_flow()
|
|
98
|
+
login_url = auth_data.get('loginUrl')
|
|
99
|
+
if login_url:
|
|
100
|
+
logger.info(f"Opening browser with login URL: {login_url}")
|
|
101
|
+
webbrowser.open(login_url)
|
|
102
|
+
print("Please authorize the application in your browser.")
|
|
103
|
+
print("After authorization, the token will be automatically retrieved.")
|
|
104
|
+
print("Waiting for authentication to complete...")
|
|
105
|
+
|
|
106
|
+
# Poll for token completion
|
|
107
|
+
max_attempts = 30 # Try for 30 * 2 = 60 seconds
|
|
108
|
+
for attempt in range(max_attempts):
|
|
109
|
+
print(f"Waiting for authentication... ({attempt+1}/{max_attempts})")
|
|
110
|
+
# Try to get the token again
|
|
111
|
+
token = pipeboard_auth_manager.get_access_token(force_refresh=True)
|
|
112
|
+
if token:
|
|
113
|
+
print("Authentication successful!")
|
|
114
|
+
break
|
|
115
|
+
time.sleep(2) # Wait 2 seconds between attempts
|
|
116
|
+
|
|
117
|
+
if not token:
|
|
118
|
+
print("Authentication timed out. Starting server anyway.")
|
|
119
|
+
print("You may need to restart the server after completing authentication.")
|
|
120
|
+
else:
|
|
121
|
+
logger.error("No login URL received from Pipeboard API")
|
|
122
|
+
print("Error: Could not get authentication URL. Check your API token.")
|
|
123
|
+
except Exception as e:
|
|
124
|
+
logger.error(f"Error initiating browser-based authentication: {e}")
|
|
125
|
+
print(f"Error: Could not start authentication: {e}")
|
|
126
|
+
|
|
127
|
+
# Initialize and run the server
|
|
128
|
+
logger.info("Starting MCP server with stdio transport")
|
|
129
|
+
mcp_server.run(transport='stdio')
|
meta_ads_mcp/core/utils.py
CHANGED
|
@@ -17,11 +17,16 @@ import platform
|
|
|
17
17
|
META_APP_ID = os.environ.get("META_APP_ID", "")
|
|
18
18
|
META_APP_SECRET = os.environ.get("META_APP_SECRET", "")
|
|
19
19
|
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
# Only show warnings about Meta credentials if we're not using Pipeboard
|
|
21
|
+
# Check for Pipeboard token in environment
|
|
22
|
+
using_pipeboard = bool(os.environ.get("PIPEBOARD_API_TOKEN", ""))
|
|
23
|
+
|
|
24
|
+
# Print warning if Meta app credentials are not configured and not using Pipeboard
|
|
25
|
+
if not using_pipeboard:
|
|
26
|
+
if not META_APP_ID:
|
|
27
|
+
print("WARNING: META_APP_ID environment variable is not set. Authentication will not work properly.")
|
|
28
|
+
if not META_APP_SECRET:
|
|
29
|
+
print("WARNING: META_APP_SECRET environment variable is not set. Long-lived token exchange will not work.")
|
|
25
30
|
|
|
26
31
|
# Configure logging to file
|
|
27
32
|
def setup_logging():
|
|
@@ -55,6 +60,7 @@ def setup_logging():
|
|
|
55
60
|
# Log startup information
|
|
56
61
|
logger.info(f"Logging initialized. Log file: {log_file}")
|
|
57
62
|
logger.info(f"Platform: {platform.system()} {platform.release()}")
|
|
63
|
+
logger.info(f"Using Pipeboard authentication: {using_pipeboard}")
|
|
58
64
|
|
|
59
65
|
return logger
|
|
60
66
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: meta-ads-mcp
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: Model Calling Protocol (MCP) plugin for interacting with Meta Ads API
|
|
5
5
|
Project-URL: Homepage, https://github.com/nictuku/meta-ads-mcp
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/nictuku/meta-ads-mcp/issues
|
|
@@ -15,6 +15,7 @@ Requires-Dist: httpx>=0.26.0
|
|
|
15
15
|
Requires-Dist: mcp[cli]>=1.6.0
|
|
16
16
|
Requires-Dist: pathlib>=1.0.1
|
|
17
17
|
Requires-Dist: pillow>=10.0.0
|
|
18
|
+
Requires-Dist: python-dateutil>=2.8.2
|
|
18
19
|
Requires-Dist: python-dotenv>=1.1.0
|
|
19
20
|
Requires-Dist: requests>=2.32.3
|
|
20
21
|
Description-Content-Type: text/markdown
|
|
@@ -49,6 +50,11 @@ Screenhot: using an LLM to understand your ad performance.
|
|
|
49
50
|
When using uv no specific installation is needed. We can use uvx to directly run meta-ads-mcp:
|
|
50
51
|
|
|
51
52
|
```bash
|
|
53
|
+
# RECOMMENDED: Use with Pipeboard authentication
|
|
54
|
+
export PIPEBOARD_API_TOKEN=your_pipeboard_token # Get your token at https://pipeboard.co
|
|
55
|
+
uvx meta-ads-mcp
|
|
56
|
+
|
|
57
|
+
# Alternative: Use with direct Meta authentication
|
|
52
58
|
uvx meta-ads-mcp --app-id YOUR_META_ADS_APP_ID
|
|
53
59
|
```
|
|
54
60
|
|
|
@@ -76,15 +82,50 @@ pip install meta-ads-mcp
|
|
|
76
82
|
After installation, you can run it as:
|
|
77
83
|
|
|
78
84
|
```bash
|
|
85
|
+
# RECOMMENDED: Use with Pipeboard authentication
|
|
86
|
+
export PIPEBOARD_API_TOKEN=your_pipeboard_token # Get your token at https://pipeboard.co
|
|
79
87
|
python -m meta_ads_mcp
|
|
88
|
+
|
|
89
|
+
# Alternative: Use with direct Meta authentication
|
|
90
|
+
python -m meta_ads_mcp --app-id YOUR_META_ADS_APP_ID
|
|
80
91
|
```
|
|
81
92
|
|
|
82
93
|
## Configuration
|
|
83
94
|
|
|
95
|
+
### Quick Start with Pipeboard Authentication (Recommended)
|
|
96
|
+
|
|
97
|
+
The easiest way to configure Meta Ads MCP is using Pipeboard authentication:
|
|
98
|
+
|
|
99
|
+
1. Sign up at [Pipeboard.co](https://pipeboard.co) and generate an API token - **Get your free token at [https://pipeboard.co](https://pipeboard.co)**
|
|
100
|
+
2. Set the environment variable:
|
|
101
|
+
```bash
|
|
102
|
+
export PIPEBOARD_API_TOKEN=your_pipeboard_token # Token obtainable via https://pipeboard.co
|
|
103
|
+
```
|
|
104
|
+
3. Run meta-ads-mcp without needing to set up a Meta Developer App:
|
|
105
|
+
```bash
|
|
106
|
+
uvx meta-ads-mcp
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
This method provides longer-lived tokens (60 days), simplified setup, and automatic token renewal.
|
|
110
|
+
|
|
84
111
|
### Usage with Claude in Cursor
|
|
85
112
|
|
|
86
113
|
Add this to your `claude_desktop_config.json` to integrate with Claude in Cursor:
|
|
87
114
|
|
|
115
|
+
```json
|
|
116
|
+
"mcpServers": {
|
|
117
|
+
"meta-ads": {
|
|
118
|
+
"command": "uvx",
|
|
119
|
+
"args": ["meta-ads-mcp"],
|
|
120
|
+
"env": {
|
|
121
|
+
"PIPEBOARD_API_TOKEN": "your_pipeboard_token" // Token obtainable via https://pipeboard.co
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Or if you prefer direct Meta authentication (using your own Facebook app):
|
|
128
|
+
|
|
88
129
|
```json
|
|
89
130
|
"mcpServers": {
|
|
90
131
|
"meta-ads": {
|
|
@@ -228,6 +269,7 @@ Add this to your `claude_desktop_config.json` to integrate with Claude in Cursor
|
|
|
228
269
|
|
|
229
270
|
16. `mcp_meta_ads_get_login_link`
|
|
230
271
|
- Get a clickable login link for Meta Ads authentication
|
|
272
|
+
- NOTE: This method should only be used if you're using your own Facebook app. If using Pipeboard authentication (recommended), set the PIPEBOARD_API_TOKEN environment variable instead (token obtainable via https://pipeboard.co).
|
|
231
273
|
- Inputs:
|
|
232
274
|
- `access_token` (optional): Meta API access token (will use cached token if not provided)
|
|
233
275
|
- Returns: A clickable resource link for Meta authentication
|
|
@@ -244,13 +286,47 @@ Before using the MCP server, you'll need to set up a Meta Developer App:
|
|
|
244
286
|
|
|
245
287
|
## Authentication
|
|
246
288
|
|
|
247
|
-
The Meta Ads MCP
|
|
289
|
+
The Meta Ads MCP supports two authentication methods:
|
|
290
|
+
|
|
291
|
+
### 1. Pipeboard Authentication (Recommended ⭐)
|
|
292
|
+
|
|
293
|
+
This method uses [Pipeboard.co](https://pipeboard.co) to manage Meta API authentication, providing longer-lived tokens and a simplified flow:
|
|
294
|
+
|
|
295
|
+
1. **Get your Pipeboard token**: Sign up at [https://pipeboard.co](https://pipeboard.co) to generate your free API token
|
|
296
|
+
2. Set the `PIPEBOARD_API_TOKEN` environment variable with your token:
|
|
297
|
+
```bash
|
|
298
|
+
export PIPEBOARD_API_TOKEN=your_pipeboard_token
|
|
299
|
+
```
|
|
300
|
+
3. Run the Meta Ads MCP normally - it will automatically detect and use Pipeboard authentication:
|
|
301
|
+
```bash
|
|
302
|
+
uvx meta-ads-mcp
|
|
303
|
+
```
|
|
304
|
+
4. The first time you run a command, you'll be provided with a login URL to authorize with Meta
|
|
305
|
+
|
|
306
|
+
**Benefits of Pipeboard authentication:**
|
|
307
|
+
- ✅ Longer-lived tokens (60 days)
|
|
308
|
+
- ✅ No need to configure a Meta Developer App
|
|
309
|
+
- ✅ Simpler setup with just an API token
|
|
310
|
+
- ✅ Automatic token renewal
|
|
311
|
+
|
|
312
|
+
To test the Pipeboard authentication flow:
|
|
313
|
+
```bash
|
|
314
|
+
python test_pipeboard_auth.py --api-token YOUR_PIPEBOARD_TOKEN
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### 2. Direct Meta OAuth (Legacy)
|
|
318
|
+
|
|
319
|
+
The traditional OAuth 2.0 flow designed for desktop apps. This method should only be used if you are using your own Facebook app instead of Pipeboard.
|
|
320
|
+
|
|
321
|
+
When authenticating, it will:
|
|
248
322
|
|
|
249
323
|
1. Start a local callback server on your machine
|
|
250
324
|
2. Open a browser window to authenticate with Meta
|
|
251
325
|
3. Ask you to authorize the app
|
|
252
326
|
4. Redirect back to the local server to extract and store the token securely
|
|
253
327
|
|
|
328
|
+
This method requires you to [create a Meta Developer App](#create-a-meta-developer-app) first.
|
|
329
|
+
|
|
254
330
|
## Troubleshooting and Logging
|
|
255
331
|
|
|
256
332
|
The Meta Ads MCP includes a comprehensive logging system to help troubleshoot issues:
|
|
@@ -265,21 +341,29 @@ Log files are stored in a platform-specific location:
|
|
|
265
341
|
|
|
266
342
|
### Common Issues
|
|
267
343
|
|
|
268
|
-
####
|
|
344
|
+
#### Authentication Issues
|
|
269
345
|
|
|
270
|
-
If you
|
|
346
|
+
If you're having authentication problems:
|
|
271
347
|
|
|
272
|
-
1.
|
|
273
|
-
|
|
274
|
-
-
|
|
275
|
-
-
|
|
348
|
+
1. **Recommended: Use Pipeboard Authentication**
|
|
349
|
+
- Set `export PIPEBOARD_API_TOKEN=your_token` and retry
|
|
350
|
+
- This provides longer-lived tokens and better reliability
|
|
351
|
+
- Verify your token in the Pipeboard dashboard
|
|
276
352
|
|
|
277
|
-
|
|
353
|
+
2. For App ID issues (when using direct authentication):
|
|
354
|
+
If you encounter errors like `(#200) Provide valid app ID`, check the following:
|
|
355
|
+
- Ensure you've set up a Meta Developer App correctly
|
|
356
|
+
- Verify that you're passing the correct App ID using one of these methods:
|
|
357
|
+
- Set the `META_APP_ID` environment variable: `export META_APP_ID=your_app_id`
|
|
358
|
+
- Pass it as a command-line argument: `meta-ads-mcp --app-id your_app_id`
|
|
278
359
|
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
360
|
+
#### API Errors
|
|
361
|
+
|
|
362
|
+
If you receive errors from the Meta API:
|
|
363
|
+
|
|
364
|
+
1. Verify your app has the Marketing API product added
|
|
365
|
+
2. Ensure the user has appropriate permissions on the ad accounts
|
|
366
|
+
3. Check if there are rate limits or other restrictions on your app
|
|
283
367
|
|
|
284
368
|
### Debugging Command
|
|
285
369
|
|
|
@@ -310,14 +394,15 @@ uvx meta-ads-mcp --app-id=your_app_id
|
|
|
310
394
|
The Meta Ads MCP follows security best practices:
|
|
311
395
|
|
|
312
396
|
1. Tokens are cached in a platform-specific secure location:
|
|
313
|
-
- Windows: `%APPDATA%\meta-ads-mcp\token_cache.json`
|
|
314
|
-
- macOS: `~/Library/Application Support/meta-ads-mcp/token_cache.json`
|
|
315
|
-
- Linux: `~/.config/meta-ads-mcp/token_cache.json`
|
|
397
|
+
- Windows: `%APPDATA%\meta-ads-mcp\token_cache.json` or `%APPDATA%\meta-ads-mcp\pipeboard_token_cache.json`
|
|
398
|
+
- macOS: `~/Library/Application Support/meta-ads-mcp/token_cache.json` or `~/Library/Application Support/meta-ads-mcp/pipeboard_token_cache.json`
|
|
399
|
+
- Linux: `~/.config/meta-ads-mcp/token_cache.json` or `~/.config/meta-ads-mcp/pipeboard_token_cache.json`
|
|
316
400
|
|
|
317
401
|
2. You do not need to provide your access token for each command; it will be automatically retrieved from the cache.
|
|
318
402
|
|
|
319
403
|
3. You can set the following environment variables instead of passing them as arguments:
|
|
320
|
-
- `META_APP_ID`: Your Meta App ID (Client ID)
|
|
404
|
+
- `META_APP_ID`: Your Meta App ID (Client ID) - for direct OAuth method
|
|
405
|
+
- `PIPEBOARD_API_TOKEN`: Your Pipeboard API token - for Pipeboard authentication method
|
|
321
406
|
|
|
322
407
|
## Testing
|
|
323
408
|
|
|
@@ -339,11 +424,12 @@ python test_meta_ads_auth.py --app-id YOUR_APP_ID --force-login
|
|
|
339
424
|
|
|
340
425
|
When using the Meta Ads MCP with an LLM interface (like Claude):
|
|
341
426
|
|
|
342
|
-
1.
|
|
343
|
-
2.
|
|
344
|
-
3.
|
|
427
|
+
1. If using direct Meta authentication (your own Facebook app), test authentication by calling the `mcp_meta_ads_get_login_link` tool
|
|
428
|
+
2. If using Pipeboard authentication (recommended), ensure the PIPEBOARD_API_TOKEN environment variable is set (token obtainable via https://pipeboard.co)
|
|
429
|
+
3. Verify account access by calling `mcp_meta_ads_get_ad_accounts`
|
|
430
|
+
4. Check specific account details with `mcp_meta_ads_get_account_info`
|
|
345
431
|
|
|
346
|
-
These functions will automatically handle authentication if needed and provide a clickable login link.
|
|
432
|
+
These functions will automatically handle authentication if needed and provide a clickable login link if required.
|
|
347
433
|
|
|
348
434
|
## Troubleshooting
|
|
349
435
|
|
|
@@ -352,20 +438,20 @@ These functions will automatically handle authentication if needed and provide a
|
|
|
352
438
|
If you encounter authentication issues:
|
|
353
439
|
|
|
354
440
|
1. When using the LLM interface:
|
|
355
|
-
-
|
|
441
|
+
- If using direct Meta authentication (your own Facebook app), use the `mcp_meta_ads_get_login_link` tool to generate a fresh authentication link
|
|
442
|
+
- If using Pipeboard authentication (recommended), ensure the PIPEBOARD_API_TOKEN environment variable is set (token obtainable via https://pipeboard.co)
|
|
356
443
|
- Ensure you click the link and complete the authorization flow in your browser
|
|
357
444
|
- Check that the callback server is running properly (the tool will report this)
|
|
358
445
|
|
|
359
|
-
2. When using
|
|
446
|
+
2. When using Pipeboard authentication:
|
|
447
|
+
- Verify your `PIPEBOARD_API_TOKEN` is set correctly (token obtainable via https://pipeboard.co)
|
|
448
|
+
- Check if you need to complete the authorization process by visiting the provided login URL
|
|
449
|
+
- Try forcing a new login: `python test_pipeboard_auth.py --force-login`
|
|
450
|
+
|
|
451
|
+
3. When using direct Meta OAuth:
|
|
360
452
|
- Run with `--force-login` to get a fresh token: `uvx meta-ads-mcp --login --app-id YOUR_APP_ID --force-login`
|
|
361
453
|
- Make sure the terminal has permissions to open a browser window
|
|
362
454
|
|
|
363
|
-
3. General authentication troubleshooting:
|
|
364
|
-
- Check that your app is properly configured in the Meta Developers portal
|
|
365
|
-
- Ensure your app has the necessary permissions (ads_management, ads_read, business_management)
|
|
366
|
-
- Verify the app's redirect URI includes `http://localhost:8888/callback`
|
|
367
|
-
- Try clearing the token cache (located in platform-specific directories listed in the Token Caching section)
|
|
368
|
-
|
|
369
455
|
### API Errors
|
|
370
456
|
|
|
371
457
|
If you receive errors from the Meta API:
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
meta_ads_mcp/__init__.py,sha256=uoDoht-lvXHE6xVXDhLKtnB4QltQVpDwU5styQ3VtVk,1236
|
|
2
|
+
meta_ads_mcp/__main__.py,sha256=XaQt3iXftG_7f0Zu7Wop9SeFgrD2WBn0EQOaPMc27d8,207
|
|
3
|
+
meta_ads_mcp/api.py,sha256=lSyyvvcqZ8sGcd0R9Vk2b_4zDANTiU_z6AojfL7v41s,81984
|
|
4
|
+
meta_ads_mcp/core/__init__.py,sha256=6T8iqrQrw9VHhKtncLqYWyDk8jeSBPs79hs1CSu-fLU,952
|
|
5
|
+
meta_ads_mcp/core/accounts.py,sha256=Nmp7lPxO9wmq25jWV7_H0LIqnEbBhpCVBlLGW2HUaq0,2277
|
|
6
|
+
meta_ads_mcp/core/ads.py,sha256=jAwa1gD3HpXFhDW53cUMYwnt52jmBjTHTwb9HUk0EaA,16975
|
|
7
|
+
meta_ads_mcp/core/adsets.py,sha256=ae6mreRtigqS7TnSI0AQA7wOeZpjwcSJ6q2nKpl1e5Q,7598
|
|
8
|
+
meta_ads_mcp/core/api.py,sha256=ZflFD9WWScuSqi9c9m8b_Ck8S1FSTGENd3sh9rL5HfY,14182
|
|
9
|
+
meta_ads_mcp/core/auth.py,sha256=bWJ0sRhowuHzsTHUOZ67jaa-Pjfl46Pbs7igafpi5Xc,20644
|
|
10
|
+
meta_ads_mcp/core/authentication.py,sha256=3AHSXslZdxyg0_s2253aQhpOeguMSu2cSYq4H_auywY,6485
|
|
11
|
+
meta_ads_mcp/core/callback_server.py,sha256=b5TzUz9nEk0i5MWujlls5gAsHru__UjTPJQan1xQ_10,40947
|
|
12
|
+
meta_ads_mcp/core/campaigns.py,sha256=u5jNHSxcWlZgzVLNmaeoovA9OcPjSUjTegUMcDLAurs,4381
|
|
13
|
+
meta_ads_mcp/core/insights.py,sha256=f4Rs3kG0oqpKl8zBc_nt_zE0z4zvb9i0g12galrDiw8,17376
|
|
14
|
+
meta_ads_mcp/core/pipeboard_auth.py,sha256=hmd9f54fFWwQgf3QIlFhyTKBnK4RetVealh_LwhmFvE,22798
|
|
15
|
+
meta_ads_mcp/core/resources.py,sha256=-zIIfZulpo76vcKv6jhAlQq91cR2SZ3cjYZt3ek3x0w,1236
|
|
16
|
+
meta_ads_mcp/core/server.py,sha256=5WofyJZGzeDhbGzLXPhQjT0XnZwo0syeK8TM_XnJo4Q,5507
|
|
17
|
+
meta_ads_mcp/core/utils.py,sha256=EPmpBX3OZaTWRS_YuEk_PLLyLXj7DeR6Ks8WoaZ5JGQ,6366
|
|
18
|
+
meta_ads_mcp-0.2.8.dist-info/METADATA,sha256=GpkZAczdJeBD3-4o2nr-WYbRbp17026oEoGcY2zYXMo,19316
|
|
19
|
+
meta_ads_mcp-0.2.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
20
|
+
meta_ads_mcp-0.2.8.dist-info/entry_points.txt,sha256=Dv2RkoBjRJBqj6CyhwqGIiwPCD-SCL1-7B9-zmVRuv0,57
|
|
21
|
+
meta_ads_mcp-0.2.8.dist-info/RECORD,,
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
meta_ads_mcp/__init__.py,sha256=r_A2NaKWasOAmt5IT2zhGrE2FRjVIMYiQKXZ9LMxTI0,1236
|
|
2
|
-
meta_ads_mcp/__main__.py,sha256=XaQt3iXftG_7f0Zu7Wop9SeFgrD2WBn0EQOaPMc27d8,207
|
|
3
|
-
meta_ads_mcp/api.py,sha256=9mmoJIdkC3PexZn3hw8XiKznecsbOSnhHtdEsJiPIyw,77475
|
|
4
|
-
meta_ads_mcp/core/__init__.py,sha256=BA93zC6D8CzKbLo4JqqNqahq2LVgWBsoIXmJCK4AdIc,924
|
|
5
|
-
meta_ads_mcp/core/accounts.py,sha256=Nmp7lPxO9wmq25jWV7_H0LIqnEbBhpCVBlLGW2HUaq0,2277
|
|
6
|
-
meta_ads_mcp/core/ads.py,sha256=jAwa1gD3HpXFhDW53cUMYwnt52jmBjTHTwb9HUk0EaA,16975
|
|
7
|
-
meta_ads_mcp/core/adsets.py,sha256=zSC67UhrhiinLY_SYSMNjRlmSZxCvyBYXIXroPBaVNc,7359
|
|
8
|
-
meta_ads_mcp/core/api.py,sha256=AurfnoUZoIq9WS4cnsmVqpxc3pdsws8jvNhzQzdzLGg,12209
|
|
9
|
-
meta_ads_mcp/core/auth.py,sha256=2uFGSD_6l8ExS1CQx7VQnPDq2yIb1fAk_t1BFFGQr7A,16881
|
|
10
|
-
meta_ads_mcp/core/authentication.py,sha256=6zoGorswj5kRbrt_18A8KrZdCORNLGHybvb7XRQ1yJg,3474
|
|
11
|
-
meta_ads_mcp/core/callback_server.py,sha256=b5TzUz9nEk0i5MWujlls5gAsHru__UjTPJQan1xQ_10,40947
|
|
12
|
-
meta_ads_mcp/core/campaigns.py,sha256=u5jNHSxcWlZgzVLNmaeoovA9OcPjSUjTegUMcDLAurs,4381
|
|
13
|
-
meta_ads_mcp/core/insights.py,sha256=f4Rs3kG0oqpKl8zBc_nt_zE0z4zvb9i0g12galrDiw8,17376
|
|
14
|
-
meta_ads_mcp/core/resources.py,sha256=-zIIfZulpo76vcKv6jhAlQq91cR2SZ3cjYZt3ek3x0w,1236
|
|
15
|
-
meta_ads_mcp/core/server.py,sha256=-tClGe4rc-8U2ihgpipLstiTPRg3-CnjsTRgncsNa_A,3055
|
|
16
|
-
meta_ads_mcp/core/utils.py,sha256=wxh722z-x0TSJwDEEeDylkv4VJqLmqnkZy-YGRzs4vQ,6049
|
|
17
|
-
meta_ads_mcp-0.2.6.dist-info/METADATA,sha256=4UUxhxKMIfZ9bvMfqW6CJb8-6bJibUaXElSsdmrFBa4,15300
|
|
18
|
-
meta_ads_mcp-0.2.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
19
|
-
meta_ads_mcp-0.2.6.dist-info/entry_points.txt,sha256=Dv2RkoBjRJBqj6CyhwqGIiwPCD-SCL1-7B9-zmVRuv0,57
|
|
20
|
-
meta_ads_mcp-0.2.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|