{"_id":"@channel47/bing-ads-mcp","_rev":"9-dc08bc673647fc8117f4914ab339abe2","name":"@channel47/bing-ads-mcp","dist-tags":{"latest":"1.3.3"},"versions":{"1.0.0":{"name":"@channel47/bing-ads-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"author":{"name":"Channel47"},"license":"MIT","_id":"@channel47/bing-ads-mcp@1.0.0","maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","bugs":{"url":"https://github.com/channel47/mcps/issues"},"bin":{"bing-ads-mcp":"server/index.js"},"dist":{"shasum":"392f27f7e44795b085a152762f9315aed3f6fd5e","tarball":"https://registry.npmjs.org/@channel47/bing-ads-mcp/-/bing-ads-mcp-1.0.0.tgz","fileCount":16,"integrity":"sha512-hXOyvyTTATnGBUrhsErlVsJmWts2vyHN0+LD4jn5klH/hFHh6U1YZBkK8eoG9bf44ddBmJKM/i0l1SLTVe4Mjg==","signatures":[{"sig":"MEUCIAHaewg3uXUWSHpZjTOT6nOLfSK5aqsIBVNwNxtdZXx2AiEA5TJ6jHpXxrkAVOs3P/7OmYl/yPkfj4wAoPTWBzVreRk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41839},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"eb22c28f92c968a64d0c3b659efbbf799d3a5421","scripts":{"test":"node --test *.test.js test/*.test.js","start":"node server/index.js","prepublishOnly":"npm test"},"_npmUser":{"name":"ctrlswing","email":"jacksondean.me@gmail.com"},"repository":{"url":"git+https://github.com/channel47/mcps.git","type":"git","directory":"bing-ads"},"_npmVersion":"11.3.0","description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns and reports via REST API","directories":{},"_nodeVersion":"24.1.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/bing-ads-mcp_1.0.0_1771367138467_0.7021188940239189","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@channel47/bing-ads-mcp","version":"1.1.0","keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"author":{"name":"Channel47"},"license":"MIT","_id":"@channel47/bing-ads-mcp@1.1.0","maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","bugs":{"url":"https://github.com/channel47/mcps/issues"},"bin":{"bing-ads-mcp":"server/index.js"},"dist":{"shasum":"452c1c9a1f3638218cd9edd96665ed3d2b436d91","tarball":"https://registry.npmjs.org/@channel47/bing-ads-mcp/-/bing-ads-mcp-1.1.0.tgz","fileCount":18,"integrity":"sha512-purnsa8O7l1T88ZERe7tiH7xV0kRSxebzgfJoRJ/QcmJ+wRRk/jucsTAz/pOCtl4rtRvByN4AkNglGaR1tSpiQ==","signatures":[{"sig":"MEQCIGPqGH6erNk5tq4/BDJwuRj5t7md0wupW6XThgoxNvkcAiBxeOw2vCovK300VJJv5QyS6luYtu7vIIHZMknfgY1+Eg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63049},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"19cd3480d149349599934e496804fd38a6910c23","scripts":{"test":"node --test *.test.js test/*.test.js","start":"node server/index.js","prepublishOnly":"npm test"},"_npmUser":{"name":"ctrlswing","email":"jacksondean.me@gmail.com"},"repository":{"url":"git+https://github.com/channel47/mcps.git","type":"git","directory":"bing-ads"},"_npmVersion":"11.3.0","description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns, reports, and mutate entities via REST API","directories":{},"_nodeVersion":"24.1.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/bing-ads-mcp_1.1.0_1771378518056_0.765293660520243","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@channel47/bing-ads-mcp","version":"1.1.1","keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"author":{"name":"Channel47"},"license":"MIT","_id":"@channel47/bing-ads-mcp@1.1.1","maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","bugs":{"url":"https://github.com/channel47/mcps/issues"},"bin":{"bing-ads-mcp":"server/index.js"},"dist":{"shasum":"e299e540443bd646ea3e6852fd437938589d8fc5","tarball":"https://registry.npmjs.org/@channel47/bing-ads-mcp/-/bing-ads-mcp-1.1.1.tgz","fileCount":18,"integrity":"sha512-R1nBkLvPR44KdlsDQvSBMKViL5w07h5UtKsYFka2s7/wpnYmK1qQn2AOTAy/+fFSWFZsppdtRG9sH1sk3+xxmQ==","signatures":[{"sig":"MEQCICQ9/umrm4ixl0hcavjbo3AQ6Rw7faOMA5BB6RlA1YsoAiA9rfE1AYP40d4HIaF+v8q9RATdSf5eQhpFMW0kXM9Swg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65974},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"b61c959ad28178a246ae246f5868979e5230494d","scripts":{"test":"node --test *.test.js test/*.test.js","start":"node server/index.js","prepublishOnly":"npm test"},"_npmUser":{"name":"ctrlswing","email":"jacksondean.me@gmail.com"},"repository":{"url":"git+https://github.com/channel47/mcps.git","type":"git","directory":"bing-ads"},"_npmVersion":"11.3.0","description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns, reports, and mutate entities via REST API","directories":{},"_nodeVersion":"24.1.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/bing-ads-mcp_1.1.1_1771436133255_0.7431709500956503","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@channel47/bing-ads-mcp","version":"1.1.2","keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"author":{"name":"Channel47"},"license":"MIT","_id":"@channel47/bing-ads-mcp@1.1.2","maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","bugs":{"url":"https://github.com/channel47/mcps/issues"},"bin":{"bing-ads-mcp":"server/index.js"},"dist":{"shasum":"9e14fae50c550888b49cd521c15fb8bc123834eb","tarball":"https://registry.npmjs.org/@channel47/bing-ads-mcp/-/bing-ads-mcp-1.1.2.tgz","fileCount":18,"integrity":"sha512-xTiDZew0TD/Y0mVpTJq3oOGeYQuCzSICvylCA+SGE1fZN9jTNPXnBQrHHXOm1kgV/X6ecB0xokuG8ynxN6p2sg==","signatures":[{"sig":"MEQCIDOpjL2URV6MhavR7NoUFpV2RkgluyK85z/wQhdp+wrTAiAbsu38ckZAMZuhpaSCjmlm2mTDCk4WwwHROlRt7pp2tQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66158},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"7b3ff6134c84545fa31a4cf953734359165bc24c","scripts":{"test":"node --test *.test.js test/*.test.js","start":"node server/index.js","prepublishOnly":"npm test"},"_npmUser":{"name":"ctrlswing","email":"jacksondean.me@gmail.com"},"repository":{"url":"git+https://github.com/channel47/mcps.git","type":"git","directory":"bing-ads"},"_npmVersion":"11.3.0","description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns, reports, and mutate entities via REST API","directories":{},"_nodeVersion":"24.1.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/bing-ads-mcp_1.1.2_1771443837429_0.5938056377269203","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@channel47/bing-ads-mcp","version":"1.1.3","keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"author":{"name":"Channel47"},"license":"MIT","_id":"@channel47/bing-ads-mcp@1.1.3","maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","bugs":{"url":"https://github.com/channel47/mcps/issues"},"bin":{"bing-ads-mcp":"server/index.js"},"dist":{"shasum":"5fbd7fb9d7775f537c5cf45b0216315a99bceb8b","tarball":"https://registry.npmjs.org/@channel47/bing-ads-mcp/-/bing-ads-mcp-1.1.3.tgz","fileCount":18,"integrity":"sha512-FeBGhykaxqPHSMgMQd4EwPZOgFAaV9z2UHABtNFwqIzPUcoBEjNj298TjspnXa1Zn/88IK9RptNY61Mg4NZ+XQ==","signatures":[{"sig":"MEUCIQDiZAgm6Jk1z1c+UArwsJdHbz/P7LQ06oKn0mZcDxHB/QIgfGEm9DD99cOQZT6Mdcu/6v9i0eaR7gJ3tm3zyzWM9Z8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67864},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"14ea53afcda786cd80967c13af9328ae1ba38f36","scripts":{"test":"node --test *.test.js test/*.test.js","start":"node server/index.js","prepublishOnly":"npm test"},"_npmUser":{"name":"ctrlswing","email":"jacksondean.me@gmail.com"},"repository":{"url":"git+https://github.com/channel47/mcps.git","type":"git","directory":"bing-ads"},"_npmVersion":"11.3.0","description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns, reports, and mutate entities via REST API","directories":{},"_nodeVersion":"24.1.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/bing-ads-mcp_1.1.3_1771458839937_0.21502275013138994","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@channel47/bing-ads-mcp","version":"1.1.4","keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"author":{"name":"Channel47"},"license":"MIT","_id":"@channel47/bing-ads-mcp@1.1.4","maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","bugs":{"url":"https://github.com/channel47/mcps/issues"},"bin":{"bing-ads-mcp":"server/index.js"},"dist":{"shasum":"45bad5781b2d940a21652e7ad6e77d961461ebc8","tarball":"https://registry.npmjs.org/@channel47/bing-ads-mcp/-/bing-ads-mcp-1.1.4.tgz","fileCount":18,"integrity":"sha512-VzWzA6wM+lvr8tr4aV99e6kvnYhaW/QUyyDhtAsAKrS9DHmXpKAE9P7UyXS32Jw4TSNUXeVZ9L9SfDK5Ffrdcw==","signatures":[{"sig":"MEQCIFzD2to30dQ6CTw58gQlUG9gw3k5IeFnEJ6ZEpfhuGBrAiBkRzWKmkzUEPJsES23ZhZirwicBcUlc6o6WNlND6D+6w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67864},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"b85cc9d5be63f836343d7f5e6610ba7d91944714","scripts":{"test":"node --test *.test.js test/*.test.js","start":"node server/index.js","prepublishOnly":"npm test"},"_npmUser":{"name":"ctrlswing","email":"jacksondean.me@gmail.com"},"repository":{"url":"git+https://github.com/channel47/mcps.git","type":"git","directory":"bing-ads"},"_npmVersion":"11.3.0","description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns, reports, and mutate entities via REST API","directories":{},"_nodeVersion":"24.1.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/bing-ads-mcp_1.1.4_1771463488878_0.9503438722952873","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@channel47/bing-ads-mcp","version":"1.3.1","keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"author":{"name":"Channel47"},"license":"MIT","_id":"@channel47/bing-ads-mcp@1.3.1","maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","bugs":{"url":"https://github.com/channel47/mcps/issues"},"bin":{"bing-ads-mcp":"server/index.js"},"dist":{"shasum":"f60f809de853a64b10572eb14de44e600da2c1d3","tarball":"https://registry.npmjs.org/@channel47/bing-ads-mcp/-/bing-ads-mcp-1.3.1.tgz","fileCount":21,"integrity":"sha512-eiZZt6tfKo4SeCpkP5tfZ0yISzYRmGwmSoUFPG3hJVp8qHX0YrMyPmEQKqmkWPdr5ZyEiEQ7Y/+0tiMNPVwJ4Q==","signatures":[{"sig":"MEUCIAVpB4eGcRHEK1tfV7PiXtlTcb139D0msymBUcV+DlrOAiEAnlXQ05S6RRt7bzm1Xkmi5+srnwmnQEV228+YUZS9TAI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83605},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"ce99bd204165b976a2c4123adce3ba786fd97eef","scripts":{"test":"node --test *.test.js test/*.test.js","start":"node server/index.js","prepublishOnly":"npm test"},"_npmUser":{"name":"ctrlswing","email":"jacksondean.me@gmail.com"},"repository":{"url":"git+https://github.com/channel47/mcps.git","type":"git","directory":"bing-ads"},"_npmVersion":"11.3.0","description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns, reports, and mutate entities via REST API","directories":{},"_nodeVersion":"24.1.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/bing-ads-mcp_1.3.1_1771610699204_0.5468641981906537","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@channel47/bing-ads-mcp","version":"1.3.2","keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"author":{"name":"channel47"},"license":"MIT","_id":"@channel47/bing-ads-mcp@1.3.2","maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","bugs":{"url":"https://github.com/channel47/mcps/issues"},"bin":{"bing-ads-mcp":"server/index.js"},"dist":{"shasum":"15021d7d94bad5135b41bc1fe05de26e43d947fc","tarball":"https://registry.npmjs.org/@channel47/bing-ads-mcp/-/bing-ads-mcp-1.3.2.tgz","fileCount":21,"integrity":"sha512-u47/B42x0G39962Zzft35HlvORoAgt5pLzimc6OgFL8rUDIuy2l4XYUF0CoKVrz6ZyK0S5SQEuv3Luf6DcWUCA==","signatures":[{"sig":"MEUCIQCM6WzoTaYNkPWspUd2620r8RgRTT81Sj216c7UiwE74wIgMie7E0G93WvJ1LMGk1/EPc04VDXzWYB/x8lVGYgzMck=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83802},"main":"server/index.js","type":"module","engines":{"node":">=18.0.0"},"gitHead":"33d50f70a88e894fe313821588f7aea546efe07e","scripts":{"test":"node --test *.test.js test/*.test.js","start":"node server/index.js","prepublishOnly":"npm test"},"_npmUser":{"name":"ctrlswing","email":"jacksondean.me@gmail.com"},"repository":{"url":"git+https://github.com/channel47/mcps.git","type":"git","directory":"bing-ads"},"_npmVersion":"11.9.0","description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns, reports, and mutate entities via REST API","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/bing-ads-mcp_1.3.2_1774379563159_0.5207011064717062","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@channel47/bing-ads-mcp","version":"1.3.3","description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns, reports, and mutate entities via REST API","main":"server/index.js","bin":{"bing-ads-mcp":"server/index.js"},"type":"module","scripts":{"start":"node server/index.js","test":"node --test *.test.js test/*.test.js","prepublishOnly":"npm test"},"keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"author":{"name":"channel47"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/channel47/mcps.git","directory":"bing-ads"},"bugs":{"url":"https://github.com/channel47/mcps/issues"},"homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0"},"engines":{"node":">=18.0.0"},"gitHead":"8f7d4bb2203ba5dd273b30d5aa5ab5eeb7b47e92","_id":"@channel47/bing-ads-mcp@1.3.3","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-Sbvu5Z3sq/RG3tIaj5BZcnRH37rNK1wTwF2J6UE6nTZUVn1vfwtEA1Yi5+QsIwP35NzLBu24w0RYplSBX4v7YA==","shasum":"798f15249615996a75450a38a0731d6ab985135c","tarball":"https://registry.npmjs.org/@channel47/bing-ads-mcp/-/bing-ads-mcp-1.3.3.tgz","fileCount":21,"unpackedSize":86443,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDJPR4vNuanwjgbCOyEJE9PsH9JrAFHY/DAQdBGes5AZQIgQpRuO0UwMrpbO3a7jU2AWZuBMCMu4DN5loOC7de5P/c="}]},"_npmUser":{"name":"ctrlswing","email":"jacksondean.me@gmail.com"},"directories":{},"maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bing-ads-mcp_1.3.3_1774638553007_0.6460271662017198"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-17T22:25:38.368Z","modified":"2026-03-27T19:09:13.289Z","1.0.0":"2026-02-17T22:25:38.622Z","1.1.0":"2026-02-18T01:35:18.213Z","1.1.1":"2026-02-18T17:35:33.413Z","1.1.2":"2026-02-18T19:43:57.562Z","1.1.3":"2026-02-18T23:54:00.084Z","1.1.4":"2026-02-19T01:11:29.043Z","1.3.1":"2026-02-20T18:04:59.348Z","1.3.2":"2026-03-24T19:12:43.303Z","1.3.3":"2026-03-27T19:09:13.161Z"},"bugs":{"url":"https://github.com/channel47/mcps/issues"},"author":{"name":"channel47"},"license":"MIT","homepage":"https://github.com/channel47/mcps/tree/main/bing-ads#readme","keywords":["mcp","model-context-protocol","bing-ads","microsoft-advertising","analytics","advertising","claude"],"repository":{"type":"git","url":"git+https://github.com/channel47/mcps.git","directory":"bing-ads"},"description":"Microsoft Advertising (Bing Ads) MCP Server - Query campaigns, reports, and mutate entities via REST API","maintainers":[{"name":"ctrlswing","email":"jacksondean.me@gmail.com"}],"readme":"# @channel47/bing-ads-mcp\n\n[![npm version](https://badge.fury.io/js/@channel47%2Fbing-ads-mcp.svg)](https://www.npmjs.com/package/@channel47/bing-ads-mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nMCP server for Microsoft Advertising (Bing Ads) via REST APIs. Query campaigns, pull performance reports, read Merchant Center product feeds, and mutate entities with dry-run safety built in.\n\nPart of [channel47](https://channel47.dev), the open-source ecosystem of profession plugins for Claude Code. [Get the newsletter](https://channel47.dev/subscribe) for weekly skill breakdowns from production use.\n\n## What It Does\n\n- **List accounts** under a customer ID with status and pause reason\n- **List Merchant Center products** with feed URLs, pricing, and availability\n- **Query entities** — campaigns, ad groups, keywords, ads with normalized output\n- **Pull reports** — campaign, ad group, keyword, ad, search query, account, asset group performance with configurable date ranges and aggregation\n- **Mutate entities** — campaigns, ad groups, keywords, ads with dry-run preview and explicit approval\n\n## Installation\n\n### For Claude Code Plugin Users\n\nBundled with the [media-buyer plugin](https://github.com/channel47/plugins). No manual install required.\n\n### Standalone Use\n\n```bash\nnpx @channel47/bing-ads-mcp@latest\n```\n\nOr install globally:\n\n```bash\nnpm install -g @channel47/bing-ads-mcp\nbing-ads-mcp\n```\n\n## Configuration\n\n### Required\n\n| Variable | Description |\n|----------|-------------|\n| `BING_ADS_DEVELOPER_TOKEN` | Microsoft Advertising API Developer Token |\n| `BING_ADS_CLIENT_ID` | OAuth 2.0 Client ID from Azure AD |\n| `BING_ADS_REFRESH_TOKEN` | OAuth 2.0 Refresh Token |\n\n### Optional\n\n| Variable | Description |\n|----------|-------------|\n| `BING_ADS_CLIENT_SECRET` | OAuth 2.0 Client Secret (required for confidential client apps, omit for public client apps) |\n| `BING_ADS_CUSTOMER_ID` | Default Customer ID |\n| `BING_ADS_ACCOUNT_ID` | Default Account ID |\n\n## Tools\n\n### list_accounts\n\nList all accessible Microsoft Advertising accounts.\n\n**Parameters:**\n- `customer_id` (string, optional): Uses default if set\n\n**Returns:** Array of account objects with ID, name, number, status, and pause reason.\n\n### query\n\nQuery entity data from Campaign Management API.\n\n**Parameters:**\n- `entity` (string, required): `campaigns`, `ad_groups`, `keywords`, or `ads`\n- `account_id` (string, optional): Account ID\n- `customer_id` (string, optional): Customer ID\n- `campaign_id` (string): Required when querying `ad_groups`\n- `ad_group_id` (string): Required when querying `keywords` or `ads`\n- `campaign_type` (string, optional): Filter campaigns by type. When omitted, queries all supported types (`Search`, `Shopping`, `DynamicSearchAds`, `Audience`, `Hotel`, `PerformanceMax`, `App`)\n\n**Example:**\n```json\n{\n  \"entity\": \"campaigns\",\n  \"account_id\": \"123456789\"\n}\n```\n\n### list_products\n\nList products from a Microsoft Merchant Center store via Content API.\n\n**Parameters:**\n- `store_id` (string, required): Merchant Center store ID\n- `max_results` (integer, optional): Page size (1-250, default: 250)\n- `start_token` (string, optional): Pagination token from previous response\n\n**Returns:** Array of products with `link`, `title`, `price`, `availability`, `offer_id`, and related feed attributes.\n\n**Example:**\n```json\n{\n  \"store_id\": \"12345\",\n  \"max_results\": 100\n}\n```\n\n### report\n\nGenerate performance reports with configurable date ranges, aggregation, and column selection. Handles the full async lifecycle: submit, poll, download, ZIP extract, CSV parse.\n\n**Parameters:**\n- `report_type` (string, required): `campaign`, `ad_group`, `keyword`, `ad`, `search_query`, `account`, or `asset_group`\n- `account_id` (string, optional)\n- `customer_id` (string, optional)\n- `date_range` (string): Predefined range — `Today`, `Yesterday`, `LastSevenDays`, `ThisWeek`, `LastWeek`, `Last14Days`, `Last30Days`, `LastFourWeeks`, `ThisMonth`, `LastMonth`, `LastThreeMonths`, `LastSixMonths`, `ThisYear`, `LastYear` (default: `LastSevenDays`)\n- `aggregation` (string, optional): `Summary`, `Daily`, `Weekly`, `Monthly`, or `Hourly` (default: Daily)\n- `columns` (array, optional): Custom column list (sensible defaults per report type)\n- `limit` (integer, optional): Max rows to return (default: 100)\n\n**Example:**\n```json\n{\n  \"report_type\": \"search_query\",\n  \"account_id\": \"123456789\",\n  \"date_range\": \"Last30Days\",\n  \"aggregation\": \"Summary\"\n}\n```\n\n### mutate\n\nExecute write operations on Microsoft Advertising entities. Dry-run enabled by default.\n\n**Parameters:**\n- `operations` (array, required): Mutation operations\n- `account_id` (string, optional)\n- `customer_id` (string, optional)\n- `partial_failure` (boolean, optional): Enable partial failure mode (default: true)\n- `dry_run` (boolean, optional): Validate without executing (default: true)\n\n**Supported entities:** campaigns, ad_groups, keywords, ads, negative_keywords\n\n**Supported operations:** create, update, remove\n\nEach operation object has `entity` plus one action key (`create`, `update`, or `remove`) whose value is the payload object.\n\n**Example:**\n```json\n{\n  \"operations\": [\n    {\n      \"entity\": \"campaigns\",\n      \"update\": {\n        \"Id\": \"123456789\",\n        \"Status\": \"Paused\"\n      }\n    }\n  ],\n  \"dry_run\": false\n}\n```\n\n## Development\n\n```bash\ngit clone https://github.com/channel47/mcps.git\ncd mcps\nnpm install    # workspaces — installs all servers\nnpm test       # runs all server tests\n```\n\n## Links\n\n- [channel47](https://channel47.dev) — open-source profession plugins for Claude Code\n- [Build Notes](https://channel47.dev/subscribe) — weekly skill breakdowns from production use\n- [Media Buyer Plugin](https://github.com/channel47/plugins) — the paid-search toolkit this MCP powers\n- [NPM Package](https://www.npmjs.com/package/@channel47/bing-ads-mcp)\n- [Microsoft Advertising API](https://learn.microsoft.com/en-us/advertising/guides/?view=bingads-13)\n- [X](https://x.com/ctrlswing) / [LinkedIn](https://www.linkedin.com/in/jackson-d-9979a7a0/) / [GitHub](https://github.com/channel47)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}