A Model Context Protocol (MCP) server that provides Facebook Ads functionality for Claude and other MCP clients. Access your Facebook advertising data, insights, and account information directly through natural language conversations.
npm install -g facebook-ads-mcp-server
- Go to Facebook Developers
- Create a new app or use existing one
- Add "Facebook Login" product
- Configure OAuth settings:
- Client OAuth Login: ON
- Web OAuth Login: ON
- Valid OAuth Redirect URIs:
http://localhost:3002/auth/callback
Add this to your Claude Desktop MCP settings:
{
"mcpServers": {
"facebook-ads": {
"command": "facebook-ads-mcp",
"env": {
"FACEBOOK_APP_ID": "your_facebook_app_id",
"FACEBOOK_APP_SECRET": "your_facebook_app_secret",
"FACEBOOK_REDIRECT_URI": "http://localhost:3002/auth/callback"
}
}
}
}
After adding the configuration, restart Claude Desktop and start asking about your Facebook ads!
Once configured, you can ask Claude things like:
- "Login to Facebook" (OAuth flow will open in browser)
- "Check my Facebook authentication status"
- "Show me all my Facebook ad accounts"
- "What's the current balance and status of my main ad account?"
- "Get performance insights for my ad account for the last 30 days"
- "Show me recent activities on account act_123456"
- "Logout from Facebook"
- OAuth Login: Secure browser-based Facebook authentication
- Token Management: Automatic secure token storage and retrieval
- Session Management: Login, logout, and authentication status checking
- Production Security: Hardcoded tokens only allowed in test mode (NODE_ENV=test)
- List Ad Accounts: Get all accessible Facebook ad accounts
- Account Details: Get detailed information about specific ad accounts
- Account Insights: Retrieve performance metrics and analytics data
- Account Activities: Get activity logs for ad accounts
- Pagination Support: Handle large datasets with automatic pagination
-
Clone and install dependencies:
cd facebook-ads-mcp npm install
-
Configure environment:
cp .env.example .env # Edit .env with your Facebook access token
-
Get Facebook Access Token:
- Visit Facebook Graph API Explorer
- Select your app and generate a token with required permissions:
ads_read
ads_management
business_management
# Development mode with auto-restart
npm run dev
# Production mode
npm start
Add to your MCP client configuration:
{
"mcpServers": {
"facebook-ads-mcp": {
"command": "node",
"args": ["src/index.js"],
"cwd": "/path/to/facebook-ads-mcp",
"env": {
"FACEBOOK_ACCESS_TOKEN": "your_facebook_access_token"
}
}
}
}
Lists all Facebook ad accounts accessible with the provided credentials.
Parameters: None
Example:
// No parameters required
{}
Response:
{
"adaccounts": {
"data": [
{
"name": "My Ad Account",
"id": "act_1234567890"
}
]
},
"id": "user_id"
}
Fetches data from a Facebook Graph API pagination URL.
Parameters:
url
(string, required): The complete pagination URL
Example:
{
"url": "https://graph.facebook.com/v18.0/act_123/insights?after=cursor_string&access_token=..."
}
Gets details of a specific ad account based on requested fields.
Parameters:
act_id
(string, required): The ad account ID (e.g., "act_1234567890")fields
(array, optional): Fields to retrieve
Available Fields:
name
,business_name
,age
,account_status
,balance
,amount_spent
attribution_spec
,account_id
,business
,business_city
brand_safety_content_filter_levels
,currency
,created_time
,id
Example:
{
"act_id": "act_1234567890",
"fields": ["name", "account_status", "balance", "currency"]
}
Retrieves performance insights for a specified Facebook ad account.
Parameters:
act_id
(string, required): The ad account IDfields
(array, required): Performance metrics to retrievedate_preset
(string, optional): Predefined time range (last_7d, last_30d, etc.)level
(string, optional): Aggregation level (account, campaign, adset, ad)breakdowns
(array, optional): Result breakdown dimensions (placement, age, gender, country, etc.)action_breakdowns
(array, optional): Breakdown dimensions for actions/conversionstime_range
(object, optional): Custom time range with since/until datestime_increment
(string/number, optional): Time aggregation period (1=daily, 7=weekly, "monthly"=monthly)limit
(number, optional): Maximum results per pageafter
/before
(string, optional): Pagination cursors
Examples:
Basic Performance Data:
{
"act_id": "act_1234567890",
"fields": ["impressions", "clicks", "spend", "ctr"],
"date_preset": "last_30d",
"level": "campaign"
}
Performance by Placement with Conversions:
{
"act_id": "act_1234567890",
"fields": ["spend", "actions", "conversions", "cost_per_action_type"],
"breakdowns": ["placement"],
"action_breakdowns": ["action_type"],
"date_preset": "last_7d"
}
Demographic Analysis (Age/Gender):
{
"act_id": "act_1234567890",
"fields": ["spend", "actions", "conversions"],
"breakdowns": ["age", "gender"],
"action_breakdowns": ["action_type"],
"date_preset": "last_7d"
}
Daily Performance Breakdown:
{
"act_id": "act_1234567890",
"fields": ["spend", "actions", "conversions", "date_start", "date_stop"],
"time_increment": 1, // 1 = daily breakdown
"date_preset": "last_30d"
}
This tool automatically enhances conversion tracking by:
Problem Solved: Custom events like start_trial
often don't appear in the Facebook API's actions
field but are available in the conversions
field. Previously, requests for only actions
would miss conversion events, leading to incomplete data.
Solution: When you request the actions
field, the system automatically includes conversions
as well, then uses a priority system:
- Priority 1: Checks
conversions
field (higher fidelity data) - Priority 2: Falls back to
actions
field if conversion data unavailable - Priority 3: Reports no match found
Example with Auto-Enhancement:
// Your request:
{
"fields": ["spend", "actions"]
}
// Automatically becomes:
{
"fields": ["spend", "actions", "conversions"] // conversions auto-added
}
This ensures you capture conversion events like start_trial
, purchase
, and custom events that might only exist in the conversions field.
Retrieves activities for a Facebook ad account.
Parameters:
act_id
(string, required): The ad account IDfields
(array, optional): Activity fields to retrievesince
/until
(string, optional): Date range in YYYY-MM-DD formattime_range
(object, optional): Custom time range objectlimit
(number, optional): Maximum activities per page
Example:
{
"act_id": "act_1234567890",
"fields": ["event_type", "event_time", "actor_name"],
"since": "2024-01-01",
"until": "2024-01-31"
}
The server provides detailed error responses with appropriate error codes:
FACEBOOK_API_ERROR
: Facebook Graph API errorsVALIDATION_ERROR
: Parameter validation failuresTIMEOUT_ERROR
: Request timeout errorsINTERNAL_ERROR
: Server-side errors
# Required
FACEBOOK_ACCESS_TOKEN=your_facebook_access_token
# Optional
FACEBOOK_API_VERSION=v18.0
FACEBOOK_BASE_URL=https://graph.facebook.com
MCP_SERVER_NAME=facebook-ads-mcp
MCP_SERVER_VERSION=1.0.0
DEBUG=true
LOG_LEVEL=info
# Run test script
npm test
Ensure your access token has the following permissions:
ads_read
: Read ad account dataads_management
: Manage ad accounts (if needed)business_management
: Access business information
-
Invalid Access Token
- Verify token in Graph API Explorer
- Check token expiration
- Ensure required permissions are granted
-
API Rate Limiting
- Facebook enforces rate limits on API calls
- Implement appropriate delays between requests
-
Permission Errors
- Verify ad account access permissions
- Check business manager roles
Enable debug logging:
DEBUG=true npm start
facebook-ads-mcp/
├── src/
│ ├── index.js # Main MCP server
│ ├── tools/ # Tool implementations
│ │ ├── list-ad-accounts.js
│ │ ├── fetch-pagination.js
│ │ ├── get-account-details.js
│ │ ├── get-account-insights.js
│ │ └── get-account-activities.js
│ ├── utils/ # Utilities
│ │ ├── facebook-api.js # Facebook API client
│ │ ├── validation.js # Parameter validation
│ │ └── error-handler.js # Error handling
│ └── schemas/
│ └── tool-schemas.js # JSON schemas
├── package.json
├── mcp.json # MCP configuration
└── README.md
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Windows:
%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"facebook-ads": {
"command": "facebook-ads-mcp",
"env": {
"FACEBOOK_ACCESS_TOKEN": "EAAxxxxxxxxxxxxx",
"FACEBOOK_API_VERSION": "v23.0"
}
}
}
}
Server not starting?
- Ensure Node.js 18+ is installed
- Verify the access token is valid
- Check Claude Desktop logs
No data returned?
- Verify token permissions include
ads_read
- Check if ad accounts have recent activity
- Ensure account access permissions
Permission errors?
- Regenerate token with proper scopes
- Verify business manager access
For developers who want to modify or extend this server:
# Clone the repository
git clone https://github.com/fortytwode/10xer.git
cd 10xer
# Install dependencies
npm install
# Copy environment template
cp .env.example .env
# Edit .env with your Facebook access token
# Run in development mode
npm run dev
# Run tests
npm test
Contributions are welcome! Please feel free to submit a Pull Request.
- OAuth 2.0 authentication with browser login
- 6 core Facebook Ads API tools including Creative Insights
- NEW: Ad creative thumbnails with performance analysis
- Secure token storage and management
- Claude Desktop integration
Status: ✅ Released in v1.2.0
- ✅ New Tool:
facebook_get_ad_creatives
- ✅ Visual Analysis: Ad creative thumbnails with performance metrics
- ✅ Creative Types: Support for image ads, video detection
- ✅ Performance Correlation: Link creative elements to campaign performance
- ✅ Implementation: Direct thumbnail URLs from Facebook API
- ✅ Filtering: Performance-based filtering (min purchases, max cost per purchase)
- ✅ Batch Processing: Efficient batch API requests for large datasets
Live Use Cases:
- "Show me my top-performing ad creatives with thumbnails"
- "Which creative formats have the best cost per purchase?"
- "Analyze creative performance by visual elements"
Timeline: Current priority
Status: Next Up
- Export Formats: Structured data ready for Notion import
- Report Templates: Campaign performance, creative analysis, account summaries
- Automation: Generate reports with charts and insights
- Integration: Direct Notion API connectivity (future)
Use Cases:
- "Generate a campaign performance report for Notion"
- "Create a weekly ad account summary with insights"
- "Export creative analysis with recommendations"
Timeline: 1-2 months
Status: Research phase
- OpenAI Integration: REST API endpoints for GPT tool calling
- Gemini Support: Google AI platform compatibility
- Unified API: Single backend serving multiple AI platforms
- Documentation: Platform-specific setup guides
Technical Approach:
- Dual architecture: MCP server + REST API
- Shared business logic and Facebook API client
- Platform-specific authentication handling
- Cohort analysis and attribution modeling
- Predictive performance insights
- Automated optimization recommendations
- Cross-platform attribution (Facebook + Google Ads)
- Video ad thumbnails and preview frames
- Carousel ad analysis with multiple images
- Dynamic creative optimization insights
- A/B testing automation and analysis
- Multi-account management dashboard
- Team collaboration and permissions
- Custom reporting and data exports
- Advanced security and compliance features
Feature | Business Value | Technical Complexity | User Demand | Priority Score |
---|---|---|---|---|
Creative Thumbnails | High | Medium | High | 9.5/10 |
Notion Reports | High | Medium | Medium | 8.5/10 |
OpenAI/Gemini | Medium | High | Medium | 6.5/10 |
Video Support | Medium | High | Low | 5.0/10 |
- AI Prompting Guide: How to effectively use Facebook Ads tools without limitations
- API Capabilities Reference: Complete breakdown and analysis capabilities
- Technical Architecture & API Documentation: Comprehensive system design and implementation details
- Recent Improvements & Enhancements: Latest features and future roadmap
- Developer Diagnostic Guide: Troubleshooting and debugging
- Universal Server Implementation: Multi-protocol server support
We welcome contributions to help build these features! Check our GitHub Issues for current development tasks.
MIT License