mcp-bing-ads
v1.0.2
Published
MCP server for Microsoft Advertising (Bing Ads) API with campaign, ad group, keyword, and performance reporting. First comprehensive open-source Bing Ads MCP.
Maintainers
Readme
Bing Ads MCP Server
Production-grade MCP server for Microsoft Advertising (Bing Ads) API. Enables Claude to manage Bing/Microsoft Ads accounts with full campaign, ad group, keyword, and performance analysis capabilities.
Features:
- 30+ production-tested tools
- Campaign, ad group, and keyword management
- Keyword performance analysis with quality scores
- Search term reporting & bid automation
- Budget & bid strategy optimization
- Campaign-level budget updates
- Negative keyword management (shared + campaign-level)
Note: ⚠️ First open-source Bing Ads MCP with comprehensive tooling
- No serious alternatives exist in the ecosystem
- Battle-tested across multiple accounts
Installation
npm install mcp-bing-adsConfiguration
Get OAuth credentials:
- Go to Microsoft Azure Portal
- Create an Azure AD app registration
- Grant API permissions:
Microsoft Advertising API - Scopes:
https://ads.microsoft.com/msads.manage offline_access
Create
config.json:cp config.example.json config.jsonFill in your credentials:
{ "oauth": { "client_id": "YOUR_AZURE_CLIENT_ID", "client_secret": "YOUR_AZURE_CLIENT_SECRET" }, "clients": { "default": { "customer_id": "YOUR_CUSTOMER_ID", "account_id": "YOUR_ACCOUNT_ID", "name": "My Account" } } }Set environment variables (recommended):
export BING_ADS_CLIENT_ID="your_client_id" export BING_ADS_CLIENT_SECRET="your_client_secret" export BING_CUSTOMER_ID="your_customer_id" export BING_ACCOUNT_ID="your_account_id"
Usage
Start the server
npm startUse with Claude Code
Add to ~/.claude.json:
{
"mcpServers": {
"bing-ads": {
"type": "http",
"url": "http://localhost:3002"
}
}
}Example API Calls
// Get client context
bing_ads_get_client_context({ working_directory: "/path/to/project" })
// List campaigns
bing_ads_list_campaigns()
// Get campaign performance
bing_ads_get_campaign_performance({
start_date: "2026-01-01",
end_date: "2026-03-01"
})
// Get keyword performance
bing_ads_keyword_performance({
start_date: "2026-02-01",
end_date: "2026-03-01"
})
// Create negative keywords
bing_ads_add_shared_negatives({
shared_list_id: "list_123",
keywords: [
{ text: "cheap", match_type: "Phrase" },
{ text: "discount", match_type: "Exact" }
]
})API Reference
Campaigns
bing_ads_list_campaigns()— List all campaignsbing_ads_get_campaign_performance(start_date, end_date)— Campaign metricsbing_ads_update_campaign_budget(campaign_id, daily_budget)— Update daily spend
Ad Groups
bing_ads_list_ad_groups(campaign_id)— List ad groups in campaign
Keywords
bing_ads_keyword_performance(start_date, end_date, [campaign_ids])— Keyword metrics & QSbing_ads_search_term_report(start_date, end_date)— Search terms that triggered adsbing_ads_pause_keywords(ad_group_id, keyword_ids)— Pause keywords
Negative Keywords
bing_ads_list_shared_entities([type])— List shared negative listsbing_ads_add_shared_negatives(list_id, keywords)— Add to shared listbing_ads_add_campaign_negatives(campaign_id, keywords)— Campaign-level negatives
Performance Reports
- Campaign performance (ROI, conversions, CTR, CPC)
- Keyword performance (QS, expected CTR, ad relevance, landing page experience)
- Search term insights (which queries are converting)
Key Metrics & Definitions
Quality Score (QS): 1-10 rating of keyword quality
- 1-3: Poor
- 4-6: Average
- 7-10: Excellent
Expected CTR: 1-9 rating of expected click-through rate Ad Relevance: 1-9 rating of relevance to search query Landing Page Experience: 1-9 rating of landing page quality
CLI Tools
npm run dev # Run in dev mode (tsx)
npm run build # Compile TypeScript
npm test # Run contract testsArchitecture
Files:
src/index.ts— MCP server, OAuth flow, tool handlerssrc/tools.ts— Tool schema definitionssrc/errors.ts— Error handling & classificationconfig.json— Credentials & client mapping
Error Classification:
- Authentication errors (token expired)
- Rate limit errors (retry with backoff)
- Service errors (API temporarily unavailable)
- Validation errors (bad input)
Development
Adding a New Tool
- Define schema in
src/tools.ts - Add handler in
src/index.tstool dispatch - Add contract test in
.contract.test.ts - Test with
npm test
Testing
npm test -- --run # Single run
npm test -- --watch # Watch modeTroubleshooting
Config file not found
cp config.example.json config.json
# Fill in your Azure credentials and Bing Ads IDsMissing required credentials
Check that:
BING_ADS_CLIENT_IDandBING_ADS_CLIENT_SECRETare set (or in config.json)BING_CUSTOMER_IDandBING_ACCOUNT_IDare provided- OAuth token is valid (expires, may need refresh)
Rate limit exceeded
Bing Ads applies rate limits. The server handles common retries automatically. If you hit limits frequently:
- Batch operations when possible
- Reduce query frequency
- Wait before retrying
Quality Score is 0
QS = 0 means keyword hasn't been shown enough times yet. Increase impressions or wait for more data.
License
MIT
Contributing
Contributions welcome! Please:
- Add tests for new features
- Update README
- Follow existing code style
- Tag releases
Support
- Issues: GitHub issues for bugs/feature requests
- Docs: See
docs/folder for detailed API reference - Community: GitHub Discussions
Maintained by: VS Code AI team & community contributors
Last Updated: 2026-03-13
Stability: Production-ready
Note: This is the first comprehensive open-source Bing Ads MCP. No other serious alternatives exist.
