Skip to main content
Glama
Microsoft Advertising MCP server

Microsoft Advertising MCP server

by get-mcp-ads

Microsoft Advertising MCP server

Bring your Microsoft Advertising accounts into your MCP client.

Read campaigns, targeting and reports through the Bing Ads API, and prepare changes for explicitly selected accounts.

Release CI License: Apache 2.0 Node

Watch the film · What's new · Install · Tool reference · Try hosted getmcpads

Watch the getmcpads film: every ad account in one conversation with your AI assistant

Play the 45-second film

The film shows hosted getmcpads with sample data. Its MCP Apps, from creative galleries and alerts to Google Sheets exports and bulk launches, belong to the hosted product. This repository provides the standalone native API tools.

20 read tools · 23 write tools, disabled by default.

Run locally with your own Microsoft Advertising credentials and a client that supports stdio MCP, such as Claude Desktop, Claude Code or Cursor. Your requests go directly to the Bing Ads API. For managed connections, including supported ChatGPT setups, use the hosted option.

What's new

v1.0.2: Maintainer metadata update · November 8, 2026

  • List the getmcpads team as maintainer in package.json, the README and SOURCE_SYNC.md.

  • No change to tools, parameters, descriptions or runtime behaviour.

Earlier releases

Version

Date

Highlights

1.0.1

October 26, 2026

Zod 4 security update

1.0.0

October 23, 2026

First standalone release

Full changelog · All releases

Source synchronization: SOURCE_SYNC.md.

Upgrade notes

Requires Node.js 22.23.4, 24.22.1, 26.12.1 or a newer release of those lines. These releases carry the October 2026 security fixes; the server prints a warning on stderr when started on an older one. CI covers Node 22, 24 and 26. Writes remain optional and require explicit confirmation. Hosted creative integrations and MCP Apps UI are outside this release.

Related MCP server: Apple Ads MCP Server

Install this release

This is a GitHub source release. npm and MCP Registry versions are published separately. The commands below select this exact version; unpinned npx examples later in this document select the version currently available on npm.

git clone --branch v1.0.2 --depth 1 https://github.com/get-mcp-ads/bing-ads-mcp-server.git
cd bing-ads-mcp-server
npm ci
npm run build

Configure your MCP client to run node with the absolute path to dist/cli.js and the credentials documented below. Once the package is on npm, the client can run it with npx:

{
  "mcpServers": {
    "microsoft-advertising": {
      "command": "npx",
      "args": ["-y", "@getmcpads/bing-ads-mcp-server"],
      "env": {
        "BING_ADS_DEVELOPER_TOKEN": "your-developer-token",
        "BING_ADS_CLIENT_ID": "your-app-client-id",
        "BING_ADS_REFRESH_TOKEN": "your-refresh-token",
        "BING_ADS_CUSTOMER_ID": "1234567",
        "BING_ADS_ACCOUNT_IDS": "7654321"
      }
    }
  }
}

npm run doctor reports which variables are set, without printing their values, and checks the Node.js release.

Managed connection: use Microsoft Advertising with hosted getmcpads. Connect your account, select the data your assistant may access and use the hosted MCP connection. See the site for current features and plans.

Configuration

Provide these environment variables through the client's secret configuration:

Variable

Purpose

BING_ADS_DEVELOPER_TOKEN

Your developer token. Required in production. The sandbox always uses Microsoft's universal sandbox token.

BING_ADS_CLIENT_ID

Application (client) ID of your Microsoft Entra app registration, or of your Google OAuth client.

BING_ADS_CLIENT_SECRET

Client secret. Only for a web app registration, or for Google identity. Leave it unset for a public app.

BING_ADS_REFRESH_TOKEN

Refresh token granted with the https://ads.microsoft.com/msads.manage and offline_access scopes.

BING_ADS_CUSTOMER_ID

Customer ID that owns the accounts (cid in the web app URL). Required unless every account entry carries its own.

BING_ADS_ACCOUNT_IDS

Required allowlist of account IDs (aid in the web app URL), comma-separated. Write accountId:customerId for an account owned by another customer. Up to 200.

BING_ADS_ENVIRONMENT

production (default) or sandbox. Each environment needs its own credentials.

BING_ADS_IDENTITY_PROVIDER

Microsoft (default) or Google, for users who sign in to Microsoft Advertising with a Google account.

BING_ADS_OAUTH_TENANT

Microsoft Entra tenant of the token endpoint. Defaults to common.

BING_ADS_ENABLE_WRITES

Defaults to false. Only the exact value true exposes write tools.

Microsoft documents each step: get a developer token, register an application, request user consent and get access and refresh tokens, including the Google identity variant. Use the numeric account ID, not the eight-character account number shown in the web app.

This package accepts a refresh token; it does not run an OAuth browser flow. It renews access tokens a minute before they expire and keeps them, and any rotated refresh token, in memory only. Microsoft can invalidate a refresh token at any time, for example after a password change. A refresh token issued to a public app is only guaranteed to refresh on the device that obtained it. When a refresh fails, obtain a new token and restart the server.

Safety and coverage

Writes preview by default. Review the exact account, target and parameters before repeating the call with confirm: true. Campaigns, ad groups, ads, keywords and asset groups are created Paused. Conversion goals are created Paused and excluded from bidding. Setting Status to Active can start spending, and previews flag it with activationMaySpend. Do not retry a write automatically when its result is uncertain. Read the account and reconcile it first. A confirmed call that returns applied: "partial" applied some items and refused others. Only accounts in BING_ADS_ACCOUNT_IDS are reachable. Account discovery returns only those accounts. Before data is returned or changed, the server reads the account and stops unless Microsoft reports the configured customer as its owner. Unknown arguments are rejected. Native REST fields, report columns and units are preserved. Report values stay strings as Microsoft wrote them, in account currency units. 64-bit IDs stay exact. Reports are asynchronous: bing_get_insights returns a receipt that bing_get_report polls. A receipt is valid for one hour in the server process that issued it. A report returns at most 2,000 rows. Microsoft applies per-user and per-account call limits. Error 117 means the call rate was exceeded; wait for the window to reset.

This server exposes a reviewed subset of the Campaign Management, Customer Management and Reporting services. It does not include billing, bulk upload or Ad Insight operations, account sharing across customers, or change history. Native media reads and writes are included. Hosted creative galleries, visual editors and MCP Apps UI are excluded. Use tools/list or server-card.json for exact schemas and the Microsoft Advertising API reference for provider details.

Microsoft's own MCP server

Microsoft publishes a Microsoft Advertising MCP server, documented on Microsoft Learn: setup guide, tools and use cases. In June 2026, Microsoft announced that the server was expanding to an open pilot with read-only access.

The differences below come from those pages, as of October 23, 2026.

Microsoft's MCP server

This server

Where it runs

Remote endpoint at https://partner.api.bingads.microsoft.com/ext/mcp/vnext

Locally, over stdio

Authentication

Microsoft Entra ID OAuth in the client, with your own app registration for ChatGPT, Claude and Copilot Studio

Your developer token and refresh token in environment variables

Documented tools

9 tools, which Microsoft states never modify account data

20 read tools and 23 opt-in write tools

Entity reads

Accounts, campaigns, ad groups, ads, keywords, asset groups, assets and audience associations, with filtering, sorting, pagination and optional performance metrics

Accounts, campaigns, ad groups, ads, keywords, targeting criteria, audiences, UET tags, conversion goals, media, videos and asset groups, as native REST objects

Reporting

Performance metrics on entity tools, asset performance and account change history

The asynchronous Reporting API with 8 report types and their native columns

Writes

None

Create and update with preview and confirmation, created Paused

Hosted option

getmcpads for Microsoft Advertising manages the hosted connection and account selection. Hosted and source releases can differ. Contact: hello@getmcpads.com.

Development

npm run typecheck
npm run lint
npm run build
npm test
npm run catalog

All tests run offline with synthetic responses. No live account is changed.

Tools

Every tool is listed below. See server-card.json for complete parameter and output schemas. The bing-ads://guide resource returns the same coverage, safety and limitation notes as bing_get_setup_guide.

Tool

Purpose

bing_list_accounts

List the configured accounts this user can reach, with name, number, currency, status and owning customer.

bing_health_check

Read the selected account and confirm the environment, owning customer and currency.

bing_get_campaigns

Read native campaign configuration, budget, settings and status for one campaign type.

bing_get_ad_groups

Read ad groups and their native configuration in an owned campaign.

bing_get_ads

Read ads with their native creative assets, URLs and status, for the ad formats you list.

bing_get_keywords

Read keywords, match types, bids and status from an owned ad group.

bing_get_targeting

Read configured campaign or ad group targeting for one criterion type.

bing_get_audiences

Read audience configuration for one audience type.

bing_get_uet_tags

Read UET tracking tag configuration.

bing_get_conversion_goals

Read conversion goal configuration.

bing_get_media

Read metadata of uploaded media by ID, including image representations.

bing_get_videos

Read account video assets and their processing status.

bing_get_asset_groups

Read Performance Max asset groups with their creative configuration and status.

bing_get_geo_file

Get Microsoft's current geographic targeting file link.

bing_list_ad_creatives

List image assets linked to account-owned ads and Performance Max asset groups, in a bounded scan.

bing_get_reporting_schema

Read the pinned report types and the native columns each one supports.

bing_get_write_schema

Read the pinned native fields of an entity before a create or update.

bing_get_setup_guide

Read this server's coverage, safety rules and known limitations.

bing_get_insights

Submit an asynchronous report for the selected account and return a receipt.

bing_get_report

Poll and download a submitted report, up to 2,000 rows.

Disabled by default. Calls preview unless explicitly confirmed. Check the configuration and exact schema before use.

Tool

Purpose

bing_create_campaign

Create a campaign with native fields, Paused.

bing_update_campaign

Update a campaign with native fields.

bing_create_ad_group

Create an ad group in an owned campaign, Paused.

bing_update_ad_group

Update an ad group with native fields.

bing_create_ad

Create an ad in an owned ad group, Paused.

bing_update_ad

Update an ad with native fields.

bing_create_keyword

Create a keyword in an owned ad group, Paused.

bing_update_keyword

Update a keyword with native fields.

bing_create_audience

Create an account-scoped audience.

bing_update_audience

Update an account-owned audience.

bing_rename_campaign

Rename a campaign. The name is the only field that changes.

bing_rename_ad_group

Rename an ad group. The name is the only field that changes.

bing_rename_account

Rename the selected account through a full account update that keeps every other field.

bing_import_video

Import a video from a public HTTPS file that Microsoft fetches.

bing_update_video

Update the description of an account-owned video.

bing_upload_image

Upload image bytes to the account's media library.

bing_create_asset_group

Create a Performance Max asset group, Paused.

bing_create_uet_tag

Create a UET tag configuration.

bing_create_conversion_goal

Create a conversion goal, Paused and excluded from bidding.

bing_add_campaign_targeting

Add one campaign targeting criterion.

bing_update_campaign_targeting

Update one campaign targeting criterion.

bing_add_ad_group_targeting

Add one ad group targeting criterion.

bing_update_ad_group_targeting

Update one ad group targeting criterion.

Resource

Purpose

bing-ads://guide

Coverage, account rules, safety rules, reporting behaviour and known limitations, as JSON.

License

Apache License 2.0. See NOTICE.

More from getmcpads

Meta Ads · Google Ads · Google Analytics 4 · Google Search Console · TikTok Ads · Pinterest Ads · X Ads

Maintained by the getmcpads team at getmcpads. Questions: hello@getmcpads.com.

Available Tools

20 tools
bing_get_ad_groupsbing get ad groupsB
Read-onlyIdempotent

Read ad groups and their native configuration in an owned campaign.

Inputs: accountId (required), campaignId (required), campaignType (required). Returns: result

bing_get_adsbing get adsB
Read-onlyIdempotent

Read ads with their native creative assets, URLs and status. adTypes controls which formats Microsoft returns.

Inputs: adTypes (required), accountId (required), adGroupId (required), campaignId (required), +1 more. Returns: result

bing_get_asset_groupsbing get asset groupsA
Read-onlyIdempotent

Read Performance Max asset groups with their native creative configuration and status.

Inputs: accountId (required), campaignId (required). Returns: result

bing_get_audiencesbing get audiencesB
Read-onlyIdempotent

Read audience configuration for one audience type. An empty audience does not establish that it can be matched or targeted.

Inputs: type (required), accountId (required), audienceIds. Returns: result

bing_get_campaignsbing get campaignsA
Read-onlyIdempotent

Read native campaign configuration, budget, settings and status for one campaign type. Repeat for other types to inventory the whole account.

Inputs: accountId (required), campaignType (required). Returns: result

bing_get_conversion_goalsbing get conversion goalsA
Read-onlyIdempotent

Read conversion goal configuration. This does not establish that conversions are being recorded.

Inputs: type (required), accountId (required), goalIds. Returns: result

bing_get_geo_filebing get geo fileA
Read-onlyIdempotent

Get Microsoft's current geographic targeting file link. Use its Location IDs; never reuse Google location IDs. The link is returned as data and not downloaded.

Inputs: accountId (required). Returns: result

bing_get_insightsbing get insightsA
Read-onlyIdempotent

Submit an asynchronous Microsoft Advertising report for the selected account and return a receipt. Poll the receipt with bing_get_report. Column compatibility and sandbox data availability apply.

Inputs: since (required), until (required), columns (required), accountId (required), +5 more. Returns: result

bing_get_keywordsbing get keywordsB
Read-onlyIdempotent

Read keywords, match types, bids and status from an owned ad group.

Inputs: accountId (required), adGroupId (required), campaignId (required), campaignType (required). Returns: result

bing_get_mediabing get mediaA
Read-onlyIdempotent

Read metadata of uploaded media by ID in the selected account, including image representations and their URLs.

Inputs: mediaIds (required), accountId (required). Returns: result

bing_get_reportbing get reportA
Read-onlyIdempotent

Poll and download a report submitted by bing_get_insights for the same account. Returns up to 2,000 CSV rows as strings; narrow the range when truncated is true. Empty sandbox output is not production evidence.

Inputs: receipt (required), accountId (required). Returns: result

bing_get_reporting_schemabing get reporting schemaA
Read-onlyIdempotent

Read the pinned report types and the native columns each one supports, with official references. A column in this list is not evidence of populated data.

Inputs: no named parameters. Returns: result

bing_get_setup_guidebing get setup guideA
Read-onlyIdempotent

Coverage, safety rules and known limitations of this server. Read it before claiming that a feature is or is not supported.

Inputs: no named parameters. Returns: result

bing_get_targetingbing get targetingA
Read-onlyIdempotent

Read configured campaign or ad group targeting for one criterion type, inclusions and exclusions included. This is configuration, not demographic performance.

Inputs: accountId (required), campaignId (required), campaignType (required), criterionType (required), +1 more. Returns: result

bing_get_uet_tagsbing get uet tagsB
Read-onlyIdempotent

Read UET tracking tag configuration. Nothing is installed on a website.

Inputs: accountId (required), tagIds. Returns: result

bing_get_videosbing get videosA
Read-onlyIdempotent

Read account video assets and processing status. Active means the media is ready, not that an ad is delivering.

Inputs: accountId (required), page, pageSize, videoIds. Returns: result

bing_get_write_schemabing get write schemaC
Read-onlyIdempotent

Read the pinned native fields of a Microsoft Advertising entity. Read each polymorphic object's documentation for its REST Type value. Account eligibility is separate.

Inputs: entity (required). Returns: result

bing_health_checkbing health checkA
Read-onlyIdempotent

Read the selected account and confirm the environment, owning customer and currency. This does not validate every feature.

Inputs: accountId (required). Returns: result

bing_list_accountsbing list accountsA
Read-onlyIdempotent

List the accounts in BING_ADS_ACCOUNT_IDS that this user can reach, with name, number, currency, status and owning customer. Discovery pages through every account Microsoft returns, then keeps only the configured ones.

Inputs: no named parameters. Returns: result

bing_list_ad_creativesbing list ad creativesA
Read-onlyIdempotent

List image assets linked to account-owned ads and Performance Max asset groups, with parent IDs and names. Bounded scan; no inferred delivery, video contents or KPI attribution.

Inputs: accountId (required), limit, maxGroups, campaignIds, +1 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 20 tools

    Disambiguation4/5

    Each tool targets a distinct Microsoft Advertising entity or artifact, and the asynchronous reporting pair (bing_get_insights / bing_get_report) is clearly split. There is minor potential confusion among media, videos, and ad creatives, as well as between data-read tools and schema-read tools, but the descriptions generally make boundaries clear.

    Naming Consistency4/5

    All tools use a consistent bing_ prefix and snake_case, mostly following bing_get_* or bing_list_* patterns. bing_health_check is a minor deviation into a noun-style name, but the overall convention is predictable.

    Tool Count4/5

    Twenty tools is on the heavy side, but the broad Microsoft Advertising entity surface justifies many distinct resource readers. Most tools earn their place, though the set is slightly larger than necessary for a purely read-oriented surface.

    Completeness2/5

    The server has broad read coverage across accounts, campaigns, ad groups, ads, keywords, targeting, audiences, tracking, media, and reporting. However, it lacks create, update, delete, pause, bid, and budget mutation operations, which are core advertising workflows; the presence of bing_get_write_schema makes this gap especially significant.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Enables MCP clients to retrieve Google Ads performance data, run GAQL queries and keyword planner research, and create or manage search and P-MAX campaigns, budgets, keywords, and ad status. Includes safety defaults such as paused creation and read-only mode.
      16
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables MCP clients to read App Store campaign and performance data and to prepare preview-first, opt-in changes for explicitly allowlisted ad accounts.
      354 npm
      Apache 2.0
    • A
      license
      B
      quality
      B
      maintenance
      Enables MCP clients to read Snapchat Ads campaigns and performance and to prepare preview-first changes for selected ad accounts, with opt-in write tools and explicit confirmation before applying updates.
      21
      328 npm
      Apache 2.0
    • A
      license
      A
      quality
      B
      maintenance
      Enables MCP clients to read Sponsored Products, Brands, and Display configuration, request performance reports, and prepare preview-first changes for explicitly allowlisted advertising profiles.
      31
      351 npm
      Apache 2.0