loading…
Search for a command to run...
loading…
Integrates PropellerAds' programmatic advertising platform with AI to automate campaign management, real-time optimization, and performance analysis. It enables
Integrates PropellerAds' programmatic advertising platform with AI to automate campaign management, real-time optimization, and performance analysis. It enables users to create, scale, and manage ad campaigns through natural language commands for tasks like bid adjustment and zone blacklisting.
Democratizing Programmatic Advertising with AI
Python 3.10+ MCP License: MIT Status GitHub Stars GitHub Forks
Let AI assistants like Claude manage your advertising campaigns on PropellerAds automatically.
Quick Start • Available Tools • Usage Examples • MCP Configuration
PropellerAds MCP is a Model Context Protocol server that connects AI assistants (Claude, and any MCP-compatible client) directly to the PropellerAds advertising platform API. Instead of manually logging into dashboards, pulling reports, and clicking through settings, you simply talk to your AI assistant in plain English and it handles everything for you.
Create campaigns, analyze performance, blacklist underperforming zones, find scaling opportunities, compare time periods -- all through natural conversation.
Built for:
| Tool | Description | Required Parameters |
|---|---|---|
list_campaigns |
List all campaigns with optional filters | -- |
get_campaign_details |
Get complete campaign info (targeting, creatives, settings) | campaign_id |
create_campaign |
Create a new advertising campaign | name, ad_format, countries, daily_budget, bid, target_url |
update_campaign |
Modify campaign settings (budget, bid, name, status) | campaign_id |
start_campaigns |
Activate one or more paused campaigns | campaign_ids |
stop_campaigns |
Pause one or more active campaigns | campaign_ids |
clone_campaign |
Duplicate an existing campaign | campaign_id |
Filters for list_campaigns: status (active/paused/pending/rejected), ad_format (push/onclick/interstitial/in-page-push), name (partial match)
| Tool | Description | Required Parameters |
|---|---|---|
get_performance_report |
Detailed stats with computed metrics (CTR, CVR, CPC, CPA, ROI) | -- |
get_campaign_performance |
Performance summary for a specific campaign | campaign_id |
compare_periods |
Compare two time periods with change indicators | period1_from, period1_to, period2_from, period2_to |
get_zone_performance |
Zone/placement-level analytics, sortable | -- |
get_creative_performance |
Creative-level performance breakdown | -- |
Common optional params: date_from, date_to (YYYY-MM-DD, defaults to last 7 days), campaign_id, group_by (date/campaign/zone/country/creative/device_type/browser/os)
| Tool | Description | Required Parameters |
|---|---|---|
find_underperforming_zones |
Find zones spending money without converting (blacklist candidates) | campaign_id |
find_top_zones |
Find best-performing zones (whitelist candidates) | campaign_id |
find_scaling_opportunities |
Find campaigns ready for scaling (high ROI + volume) | -- |
auto_blacklist_zones |
Find and blacklist bad zones in one step (dry run by default) | campaign_id |
| Tool | Description | Required Parameters |
|---|---|---|
add_to_whitelist |
Add zones to a campaign's whitelist | campaign_id, zone_ids |
add_to_blacklist |
Add zones to a campaign's blacklist | campaign_id, zone_ids |
| Tool | Description | Required Parameters |
|---|---|---|
get_balance |
Check current account balance | -- |
get_available_countries |
List all countries available for targeting | -- |
get_ad_formats |
List available ad formats (push, onclick, etc.) | -- |
| Component | Technology |
|---|---|
| Runtime | Python 3.10+ |
| Protocol | Model Context Protocol (MCP) 1.0 |
| HTTP Client | httpx |
| Validation | Pydantic v2 |
| API | PropellerAds SSP API v5 |
| Build System | Hatchling |
| Transport | stdio (standard MCP transport) |
pip install propellerads-mcp
git clone https://github.com/JanNafta/propellerads-mcp.git
cd propellerads-mcp
pip install -e .
Create a .env file in the project root or export the environment variable:
export PROPELLERADS_API_TOKEN="your_api_token_here"
"Show me all my active campaigns sorted by ROI"
"Create a push campaign for gaming offers in Brazil with $100 daily budget"
"Pause all campaigns with negative ROI in the last 7 days"
"Clone my best performing campaign to Mexico, Colombia, and Peru"
"What's my campaign performance for the last week?"
"Compare this week's performance vs last week"
"Show me the top 10 zones by conversions for campaign 12345"
"Which creatives have CTR below 0.5%?"
"Find all zones spending over $50 without conversions and blacklist them"
"Show me campaigns ready for scaling -- ROI above 50% with at least 10 conversions"
"Find top performing zones for my dating campaigns and add them to a whitelist"
1. "Show me yesterday's performance for all campaigns"
2. "Find and blacklist underperforming zones across all campaigns"
3. "Which campaigns are ready for scaling?"
4. "Increase budget by 50% for profitable campaigns"
Add to your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"propellerads": {
"command": "python",
"args": ["-m", "propellerads_mcp"],
"env": {
"PROPELLERADS_API_TOKEN": "your_api_token_here"
}
}
}
}
Restart Claude Desktop after saving the configuration.
Add the MCP server to Claude Code using the CLI:
claude mcp add propellerads -- python -m propellerads_mcp
Make sure PROPELLERADS_API_TOKEN is set in your shell environment before launching Claude Code.
This server uses stdio transport, the standard MCP communication method. Any MCP-compatible client can connect by spawning the process:
python -m propellerads_mcp
The server reads PROPELLERADS_API_TOKEN from the environment. Pass it via the env configuration of your MCP client or set it in your shell.
propellerads-mcp/
├── src/
│ └── propellerads_mcp/
│ ├── __init__.py # Package init, version, exports
│ ├── __main__.py # Module entry point (python -m)
│ ├── client.py # PropellerAds API client (httpx-based)
│ └── server.py # MCP server, tool definitions & handlers
├── .env.example # Environment variable template
├── .gitignore
├── LICENSE # MIT License
├── pyproject.toml # Build config, dependencies, metadata
└── README.md
| Aspect | Details |
|---|---|
| Authentication | Bearer token via environment variable (never hardcoded) |
| Read operations | Executed without additional confirmation |
| Write operations | Require explicit user intent (create, update, start, stop, blacklist) |
| Auto-blacklist | Defaults to dry_run: true -- preview before executing |
| Rate limiting | Respects PropellerAds API rate limits |
| No data storage | The server is stateless; no data is persisted locally |
Contributions are welcome! Here is how you can help:
git checkout -b feature/my-feature)git commit -m "Add my feature")git push origin feature/my-feature)For bugs and feature requests, please open an issue.
Jan Naftanaila -- Media Buyer & AI Automation Specialist
Building tools that bridge the gap between AI and programmatic advertising. Focused on making adtech accessible, automated, and intelligent.
This project is licensed under the MIT License. See the LICENSE file for details.
PropellerAds MCP -- Open source. Built for the programmatic advertising community.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"propellerads-mcp-server": {
"command": "npx",
"args": []
}
}
}