meta-ads-mcp 0.10.5__tar.gz → 0.10.7__tar.gz

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.
Files changed (76) hide show
  1. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/LOCAL_INSTALLATION.md +1 -1
  2. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/PKG-INFO +3 -2
  3. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/README.md +2 -1
  4. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/__init__.py +2 -3
  5. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/__init__.py +2 -2
  6. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/authentication.py +9 -2
  7. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/campaigns.py +1 -1
  8. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/pyproject.toml +1 -1
  9. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/.github/workflows/publish.yml +0 -0
  10. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/.github/workflows/test.yml +0 -0
  11. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/.gitignore +0 -0
  12. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/CUSTOM_META_APP.md +0 -0
  13. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/Dockerfile +0 -0
  14. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/LICENSE +0 -0
  15. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/META_API_NOTES.md +0 -0
  16. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/RELEASE.md +0 -0
  17. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/STREAMABLE_HTTP_SETUP.md +0 -0
  18. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/examples/README.md +0 -0
  19. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/examples/example_http_client.py +0 -0
  20. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/future_improvements.md +0 -0
  21. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/images/meta-ads-example.png +0 -0
  22. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_auth.sh +0 -0
  23. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/__main__.py +0 -0
  24. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/accounts.py +0 -0
  25. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/ads.py +0 -0
  26. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/ads_library.py +0 -0
  27. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/adsets.py +0 -0
  28. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/api.py +0 -0
  29. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/auth.py +0 -0
  30. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/budget_schedules.py +0 -0
  31. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/callback_server.py +0 -0
  32. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/duplication.py +0 -0
  33. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/http_auth_integration.py +0 -0
  34. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/insights.py +0 -0
  35. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/openai_deep_research.py +0 -0
  36. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/pipeboard_auth.py +0 -0
  37. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/reports.py +0 -0
  38. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/resources.py +0 -0
  39. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/server.py +0 -0
  40. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/targeting.py +0 -0
  41. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/meta_ads_mcp/core/utils.py +0 -0
  42. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/requirements.txt +0 -0
  43. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/setup.py +0 -0
  44. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/smithery.yaml +0 -0
  45. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/README.md +0 -0
  46. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/README_REGRESSION_TESTS.md +0 -0
  47. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/__init__.py +0 -0
  48. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/conftest.py +0 -0
  49. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/e2e_account_info_search_issue.py +0 -0
  50. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_account_info_access_fix.py +0 -0
  51. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_account_search.py +0 -0
  52. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_budget_update.py +0 -0
  53. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_budget_update_e2e.py +0 -0
  54. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_dsa_beneficiary.py +0 -0
  55. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_dsa_integration.py +0 -0
  56. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_duplication.py +0 -0
  57. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_duplication_regression.py +0 -0
  58. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_dynamic_creatives.py +0 -0
  59. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_estimate_audience_size.py +0 -0
  60. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_estimate_audience_size_e2e.py +0 -0
  61. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_get_account_pages.py +0 -0
  62. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_get_ad_creatives_fix.py +0 -0
  63. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_get_ad_image_quality_improvements.py +0 -0
  64. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_get_ad_image_regression.py +0 -0
  65. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_http_transport.py +0 -0
  66. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_insights_actions_and_values.py +0 -0
  67. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_integration_openai_mcp.py +0 -0
  68. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_mobile_app_adset_creation.py +0 -0
  69. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_mobile_app_adset_issue.py +0 -0
  70. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_openai.py +0 -0
  71. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_openai_mcp_deep_research.py +0 -0
  72. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_page_discovery.py +0 -0
  73. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_page_discovery_integration.py +0 -0
  74. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_targeting.py +0 -0
  75. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_targeting_search_e2e.py +0 -0
  76. {meta_ads_mcp-0.10.5 → meta_ads_mcp-0.10.7}/tests/test_update_ad_creative_id.py +0 -0
@@ -480,7 +480,7 @@ If you're still experiencing issues:
480
480
 
481
481
  1. **Check the logs** for detailed error messages
482
482
  2. **Search existing issues** on GitHub
483
- 3. **Join our Discord** at [discord.gg/hNxpJcqM52](https://discord.gg/hNxpJcqM52)
483
+ 3. **Join our Discord** at [discord.gg/YNjF7gUb5h](https://discord.gg/YNjF7gUb5h)
484
484
  4. **Email support** at info@pipeboard.co
485
485
  5. **Consider Remote MCP** at [pipeboard.co](https://pipeboard.co) as an alternative
486
486
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meta-ads-mcp
3
- Version: 0.10.5
3
+ Version: 0.10.7
4
4
  Summary: Model Context Protocol (MCP) server for interacting with Meta Ads API
5
5
  Project-URL: Homepage, https://github.com/pipeboard-co/meta-ads-mcp
6
6
  Project-URL: Bug Tracker, https://github.com/pipeboard-co/meta-ads-mcp/issues
@@ -33,7 +33,7 @@ A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server for in
33
33
 
34
34
  ## Community & Support
35
35
 
36
- - [Discord](https://discord.gg/hNxpJcqM52). Join the community.
36
+ - [Discord](https://discord.gg/YNjF7gUb5h). Join the community.
37
37
  - [Email Support](info@pipeboard.co). Email us for support.
38
38
 
39
39
  ## Table of Contents
@@ -181,6 +181,7 @@ For local installation configuration, authentication options, and advanced techn
181
181
  - `special_ad_categories`: List of special ad categories if applicable
182
182
  - `daily_budget`: Daily budget in account currency (in cents)
183
183
  - `lifetime_budget`: Lifetime budget in account currency (in cents)
184
+ - `bid_strategy`: Bid strategy. Must be one of: `LOWEST_COST_WITHOUT_CAP`, `LOWEST_COST_WITH_BID_CAP`, `COST_CAP`, `LOWEST_COST_WITH_MIN_ROAS`.
184
185
  - Returns: Confirmation with new campaign details
185
186
 
186
187
  7. `mcp_meta_ads_get_adsets`
@@ -8,7 +8,7 @@ A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server for in
8
8
 
9
9
  ## Community & Support
10
10
 
11
- - [Discord](https://discord.gg/hNxpJcqM52). Join the community.
11
+ - [Discord](https://discord.gg/YNjF7gUb5h). Join the community.
12
12
  - [Email Support](info@pipeboard.co). Email us for support.
13
13
 
14
14
  ## Table of Contents
@@ -156,6 +156,7 @@ For local installation configuration, authentication options, and advanced techn
156
156
  - `special_ad_categories`: List of special ad categories if applicable
157
157
  - `daily_budget`: Daily budget in account currency (in cents)
158
158
  - `lifetime_budget`: Lifetime budget in account currency (in cents)
159
+ - `bid_strategy`: Bid strategy. Must be one of: `LOWEST_COST_WITHOUT_CAP`, `LOWEST_COST_WITH_BID_CAP`, `COST_CAP`, `LOWEST_COST_WITH_MIN_ROAS`.
159
160
  - Returns: Confirmation with new campaign details
160
161
 
161
162
  7. `mcp_meta_ads_get_adsets`
@@ -7,7 +7,7 @@ with the Claude LLM.
7
7
 
8
8
  from meta_ads_mcp.core.server import main
9
9
 
10
- __version__ = "0.10.5"
10
+ __version__ = "0.10.7"
11
11
 
12
12
  __all__ = [
13
13
  'get_ad_accounts',
@@ -24,7 +24,7 @@ __all__ = [
24
24
  'get_ad_image',
25
25
  'update_ad',
26
26
  'get_insights',
27
- 'get_login_link',
27
+ # 'get_login_link' is conditionally exported via core.__all__
28
28
  'login_cli',
29
29
  'main',
30
30
  'search_interests',
@@ -51,7 +51,6 @@ from .core import (
51
51
  get_ad_image,
52
52
  update_ad,
53
53
  get_insights,
54
- get_login_link,
55
54
  login_cli,
56
55
  main,
57
56
  search_interests,
@@ -6,7 +6,7 @@ from .campaigns import get_campaigns, get_campaign_details, create_campaign
6
6
  from .adsets import get_adsets, get_adset_details, update_adset
7
7
  from .ads import get_ads, get_ad_details, get_ad_creatives, get_ad_image, update_ad
8
8
  from .insights import get_insights
9
- from .authentication import get_login_link
9
+ from . import authentication # Import module to register conditional auth tools
10
10
  from .server import login_cli, main
11
11
  from .auth import login
12
12
  from . import ads_library # Import module to register conditional tools
@@ -32,7 +32,7 @@ __all__ = [
32
32
  'get_ad_image',
33
33
  'update_ad',
34
34
  'get_insights',
35
- 'get_login_link',
35
+ # Note: 'get_login_link' is registered conditionally by the authentication module
36
36
  'login_cli',
37
37
  'login',
38
38
  'main',
@@ -21,6 +21,7 @@ Environment Variables:
21
21
  - PIPEBOARD_API_TOKEN: Enables mode 2 (token-based auth)
22
22
  - META_ADS_DISABLE_CALLBACK_SERVER: Disables local server, enables mode 3
23
23
  - META_ACCESS_TOKEN: Direct Meta token (fallback)
24
+ - META_ADS_DISABLE_LOGIN_LINK: Hard-disables the get_login_link tool; returns a disabled message
24
25
  """
25
26
 
26
27
  import json
@@ -32,8 +33,10 @@ from .server import mcp_server
32
33
  from .utils import logger, META_APP_SECRET
33
34
  from .pipeboard_auth import pipeboard_auth_manager
34
35
 
36
+ # Only register the login link tool if not explicitly disabled
37
+ ENABLE_LOGIN_LINK = not bool(os.environ.get("META_ADS_DISABLE_LOGIN_LINK", ""))
38
+
35
39
 
36
- @mcp_server.tool()
37
40
  async def get_login_link(access_token: str = None) -> str:
38
41
  """
39
42
  Get a clickable login link for Meta Ads authentication.
@@ -195,4 +198,8 @@ async def get_login_link(access_token: str = None) -> str:
195
198
  # Wait a moment to ensure the server is fully started
196
199
  await asyncio.sleep(1)
197
200
 
198
- return json.dumps(response, indent=2)
201
+ return json.dumps(response, indent=2)
202
+
203
+ # Conditionally register as MCP tool only when enabled
204
+ if ENABLE_LOGIN_LINK:
205
+ get_login_link = mcp_server.tool()(get_login_link)
@@ -115,7 +115,7 @@ async def create_campaign(
115
115
  daily_budget: Daily budget in account currency (in cents) as a string (only used if use_adset_level_budgets=False)
116
116
  lifetime_budget: Lifetime budget in account currency (in cents) as a string (only used if use_adset_level_budgets=False)
117
117
  buying_type: Buying type (e.g., 'AUCTION')
118
- bid_strategy: Bid strategy (e.g., 'LOWEST_COST', 'LOWEST_COST_WITH_BID_CAP', 'COST_CAP')
118
+ bid_strategy: Bid strategy. Must be one of: 'LOWEST_COST_WITHOUT_CAP', 'LOWEST_COST_WITH_BID_CAP', 'COST_CAP', 'LOWEST_COST_WITH_MIN_ROAS'.
119
119
  bid_cap: Bid cap in account currency (in cents) as a string
120
120
  spend_cap: Spending limit for the campaign in account currency (in cents) as a string
121
121
  campaign_budget_optimization: Whether to enable campaign budget optimization (only used if use_adset_level_budgets=False)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "meta-ads-mcp"
7
- version = "0.10.5"
7
+ version = "0.10.7"
8
8
  description = "Model Context Protocol (MCP) server for interacting with Meta Ads API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
File without changes
File without changes
File without changes
File without changes
File without changes