Microsoft Advertising MCP server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Microsoft Advertising MCP serverlist my active Microsoft Advertising campaigns and their budgets"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Watch the film · What's new · Install · Tool reference · Try hosted getmcpads

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.0: First standalone release · October 23, 2026
First standalone release, ported from the native Microsoft Advertising tools of the getmcpads gateway at revision 3e1c2c8.
20 read tools: account discovery, campaigns, ad groups, ads, keywords, targeting, audiences, UET tags, conversion goals, media, videos, Performance Max asset groups, image inventory, write and report schemas, and asynchronous reports.
23 write tools, disabled by default: create and update campaigns, ad groups, ads, keywords and audiences, targeting criteria, asset groups, UET tags and conversion goals, renames, image upload and video import. Every write previews unless
confirm: true; new entities are created Paused.Credentials come from
BING_ADS_*environment variables. Access tokens are renewed from the refresh token in memory only.Explicit account allowlist with an owning-customer check, fixed API and token hosts, no redirects, timeouts, bounded responses and credential redaction.
Requires Node.js 22.23.4, 24.22.1, 26.12.1 or a newer release of those lines, and warns on stderr otherwise.
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: google-ads-mcp
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.0 --depth 1 https://github.com/get-mcp-ads/bing-ads-mcp-server.git
cd bing-ads-mcp-server
npm ci
npm run buildConfigure 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 |
| Your developer token. Required in production. The sandbox always uses Microsoft's universal sandbox token. |
| Application (client) ID of your Microsoft Entra app registration, or of your Google OAuth client. |
| Client secret. Only for a web app registration, or for Google identity. Leave it unset for a public app. |
| Refresh token granted with the |
| Customer ID that owns the accounts ( |
| Required allowlist of account IDs ( |
|
|
|
|
| Microsoft Entra tenant of the token endpoint. Defaults to |
| Defaults to |
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 | 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 catalogAll 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 |
| List the configured accounts this user can reach, with name, number, currency, status and owning customer. |
| Read the selected account and confirm the environment, owning customer and currency. |
| Read native campaign configuration, budget, settings and status for one campaign type. |
| Read ad groups and their native configuration in an owned campaign. |
| Read ads with their native creative assets, URLs and status, for the ad formats you list. |
| Read keywords, match types, bids and status from an owned ad group. |
| Read configured campaign or ad group targeting for one criterion type. |
| Read audience configuration for one audience type. |
| Read UET tracking tag configuration. |
| Read conversion goal configuration. |
| Read metadata of uploaded media by ID, including image representations. |
| Read account video assets and their processing status. |
| Read Performance Max asset groups with their creative configuration and status. |
| Get Microsoft's current geographic targeting file link. |
| List image assets linked to account-owned ads and Performance Max asset groups, in a bounded scan. |
| Read the pinned report types and the native columns each one supports. |
| Read the pinned native fields of an entity before a create or update. |
| Read this server's coverage, safety rules and known limitations. |
| Submit an asynchronous report for the selected account and return a receipt. |
| 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 |
| Create a campaign with native fields, Paused. |
| Update a campaign with native fields. |
| Create an ad group in an owned campaign, Paused. |
| Update an ad group with native fields. |
| Create an ad in an owned ad group, Paused. |
| Update an ad with native fields. |
| Create a keyword in an owned ad group, Paused. |
| Update a keyword with native fields. |
| Create an account-scoped audience. |
| Update an account-owned audience. |
| Rename a campaign. The name is the only field that changes. |
| Rename an ad group. The name is the only field that changes. |
| Rename the selected account through a full account update that keeps every other field. |
| Import a video from a public HTTPS file that Microsoft fetches. |
| Update the description of an account-owned video. |
| Upload image bytes to the account's media library. |
| Create a Performance Max asset group, Paused. |
| Create a UET tag configuration. |
| Create a conversion goal, Paused and excluded from bidding. |
| Add one campaign targeting criterion. |
| Update one campaign targeting criterion. |
| Add one ad group targeting criterion. |
| Update one ad group targeting criterion. |
Resource | Purpose |
| 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 Emmanuel at getmcpads. Questions: hello@getmcpads.com.
Available Tools
20 toolsbing_get_ad_groupsbing get ad groupsARead-onlyIdempotent
Read ad groups and their native configuration in an owned campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. | |
| campaignId | Yes | Numeric campaign ID in the selected account. | |
| campaignType | Yes | Native type of campaignId, used to verify that it belongs to the account. Dynamic Search campaigns use Search with DynamicSearchAdsSetting. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds only the 'owned campaign' prerequisite and that native configuration is included; it doesn't discuss pagination, rate limits, or failure modes, which is acceptable given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, stating the resource and scope up front. It is efficient, though the phrase 'native configuration' is slightly vague about what is actually returned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, rich annotations, and 100% parameter coverage, the description only needs to orient the agent, which it does: read ad groups scoped to an owned campaign. More detail on the returned 'native configuration' would help, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (including the campaignType enum and the BING_ADS_ACCOUNT_IDS note) are documented in the schema. The description adds no meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (read) and resource (ad groups) with an explicit scope constraint ('in an owned campaign'). It distinguishes itself from siblings like bing_get_ads and bing_get_keywords by naming its resource, though it doesn't call out alternatives directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'in an owned campaign' – the agent must supply accountId, campaignId, and campaignType – but there is no explicit when-to-use or when-to-prefer-another-sibling guidance. Adequate but relies on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_adsbing get adsBRead-onlyIdempotent
Read ads with their native creative assets, URLs and status. adTypes controls which formats Microsoft returns.
| Name | Required | Description | Default |
|---|---|---|---|
| adTypes | Yes | Ad formats to return. Microsoft omits formats that are not listed. | |
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. | |
| adGroupId | Yes | Numeric ad group ID in the selected campaign. | |
| campaignId | Yes | Numeric campaign ID in the selected account. | |
| campaignType | Yes | Native type of campaignId, used to verify that it belongs to the account. Dynamic Search campaigns use Search with DynamicSearchAdsSetting. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds that results carry native creative assets, URLs and status, and that adTypes filters returned formats; it says nothing about auth, pagination, or result volume.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the read scope front-loaded and no filler. The second sentence is somewhat redundant with the adTypes schema description, so it does not fully earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and all five required parameters are fully documented in the schema. The main omission is the account→campaign→adGroup hierarchy requirement, which would help an agent assemble the call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is documented in the schema, including the adTypes enum and the note that unlisted formats are omitted. The description's sentence on adTypes largely restates the schema description rather than adding new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read ads') plus the payload returned (creative assets, URLs, status). It does not, however, distinguish itself from the closely related sibling bing_list_ad_creatives, leaving the agent to guess which read tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not-to-use guidance and no mention of the obvious alternative bing_list_ad_creatives. The only usage-flavored sentence ('adTypes controls which formats Microsoft returns') is really parameter behavior, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_asset_groupsbing get asset groupsARead-onlyIdempotent
Read Performance Max asset groups with their native creative configuration and status.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. | |
| campaignId | Yes | Numeric Performance Max campaign ID in the selected account. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the safety profile is covered. The description adds that results include native creative configuration and status, but says nothing about pagination, result limits, or behavior when the campaign is not Performance Max. With annotations covering the read semantics, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, and every phrase ('Performance Max', 'native creative configuration and status') carries information. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple two-parameter read tool with full schema coverage, complete annotations, and an output schema that handles return semantics. The description successfully pins the domain to Performance Max asset groups; only minor gaps remain around result volume or edge-case behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains both accountId (numeric ID vs. web-app account number) and campaignId (must be a Performance Max campaign). The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Read') plus specific resource ('Performance Max asset groups') and scope ('native creative configuration and status'). No sibling tool covers asset groups, so it is distinguishable, though it doesn't explicitly contrast itself with bing_get_campaigns or bing_get_ads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer you fetch asset groups for a Performance Max campaign. There is no explicit when-to-use, no exclusions (e.g., non-PMax campaigns will not return asset groups), and no named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_audiencesbing get audiencesARead-onlyIdempotent
Read audience configuration for one audience type. An empty audience does not establish that it can be matched or targeted.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Audience type to read. | |
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. | |
| audienceIds | No | Optional audience IDs. Omit to read every audience of this type. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds a genuinely useful semantic warning that an empty audience does not imply it can be matched or targeted, which is context the annotations cannot convey. It still omits anything about pagination or limits on the returned set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose, with the caveat second. No restated title, no filler, nothing that could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the schema carries all parameter detail. The description covers purpose plus the one non-obvious gotcha about empty audiences, leaving only minor gaps such as result volume or ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so accountId, the type enum, and audienceIds (including the omit-to-read-all behavior) are already fully documented. The description only reinforces the single-type scoping and adds no new parameter detail, which is the baseline case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read audience configuration for one audience type.' The 'one audience type' constraint is meaningful and distinguishes it from a multi-resource read. It does not explicitly contrast with any sibling, but no sibling covers audiences at all, so the resource scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Read audience configuration for one audience type,' and the closing caveat hints that reads may be followed by matching/targeting decisions. There is no explicit when-to-use or when-not guidance, and no alternative tool is named because none exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_campaignsbing get campaignsARead-onlyIdempotent
Read native campaign configuration, budget, settings and status for one campaign type. Repeat for other types to inventory the whole account.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. | |
| campaignType | Yes | Campaign type to read. Call once per type for a full inventory. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, open-world, non-destructive behavior. The description adds that the read is limited to one campaign type and must be repeated for full inventory, but it does not add auth, rate-limit, or pagination context; with rich annotations and an output schema, this remains adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with purpose, followed by the repeat-per-type instruction. No wasted language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only two parameters, full schema coverage, an output schema, and annotations covering safety traits, the description contains what an agent needs to select and call the tool. No critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both accountId and campaignType are already documented in structured data. The description only echoes the one-campaign-type scope and does not add parameter format or usage detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (Read) and a specific resource (campaign configuration, budget, settings and status), scoped to one campaign type. This clearly separates it from sibling tools that read ad groups, ads, keywords, or other resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the operating pattern: call once per campaign type and repeat for other types to inventory the whole account. It does not name alternatives or exclusions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_conversion_goalsbing get conversion goalsARead-onlyIdempotent
Read conversion goal configuration. This does not establish that conversions are being recorded.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Conversion goal type to read. | |
| goalIds | No | Optional conversion goal IDs. Omit to read every goal of this type. | |
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds a genuinely useful caveat beyond structured data: that the presence of a goal configuration does not mean conversions are actually being tracked. It adds nothing on pagination or limits, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the primary action front-loaded and the interpretive caveat immediately after. No filler, no restating of the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full schema description coverage and rich annotations, the definition only needs to convey what it returns conceptually and the key caveat about interpreting it — both are present. Slightly short of 5 because it never points to where actual conversion data lives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so accountId, type and goalIds are fully documented in the schema itself, including the account-number caveat and the 'omit to read every goal' behavior. The description adds no parameter meaning beyond that, which is the baseline 3 case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Read conversion goal configuration.' It is clearly distinct from siblings like bing_get_report, bing_get_campaigns, or bing_get_uet_tags by resource name. It does not explicitly name a sibling it is not, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'This does not establish that conversions are being recorded' implies the intended interpretation of results and hints the tool is for configuration, not performance measurement. However, it never names where to go for actual conversion counts (e.g., a reporting sibling) or states prerequisites, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_geo_filebing get geo fileARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description contributes real behavioral context beyond that: the link is returned as data and is not downloaded, and the Location IDs are Microsoft-specific and incompatible with Google's. That last point is a meaningful gotcha the agent would otherwise miss.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no waste. The core action leads, followed by the ID caveat and the return behavior, so the most important facts are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return structure, and it still clarifies that the link comes back as data rather than being downloaded. Combined with the annotation coverage and full schema descriptions, an agent has essentially everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and schema coverage is 100% with a detailed accountId description (numeric ID, not the eight-character account number). The description adds nothing about the parameter, so the schema does all the work; baseline 3 is appropriate when coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieving the current Microsoft/Bing geographic targeting file link. That is clearly distinct from the other sibling tools (campaigns, ads, keywords, reports). It stops short of naming a sibling it contrasts with, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage rule: use the returned Location IDs and never reuse Google location IDs. That tells the agent the context in which this tool's output matters. It doesn't explicitly route away from a sibling such as bing_get_targeting, so no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_insightsbing get insightsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| since | Yes | First day of the report, YYYY-MM-DD, inclusive. | |
| until | Yes | Last day of the report, YYYY-MM-DD, inclusive, on or after since. | |
| columns | Yes | Native report columns compatible with reportType; see bing_get_reporting_schema. | |
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. | |
| campaignId | No | Optional campaign ID to scope the report. Not supported by account reports. | |
| reportType | Yes | Native report type. Each type supports its own columns; see bing_get_reporting_schema. | |
| aggregation | No | Daily returns one row per day. Summary returns period totals; omit TimePeriod from columns to avoid splitting rows. | Daily |
| reportTimeZone | No | Native Microsoft reporting time zone. Omit it to keep Microsoft's default. | |
| returnOnlyCompleteData | No | True makes Microsoft return an error instead of a report while data for the requested period is still being processed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds the genuinely useful async lifecycle (returns a receipt, must be polled) that no annotation conveys. The trailing caveat about column compatibility and sandbox data availability is real behavioral context but too terse to act on, and nothing is said about receipt expiry or processing latency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the submit action front-loaded and the polling instruction immediately after — no preamble. The final fragment ('Column compatibility and sandbox data availability apply') is compressed to the point of being cryptic, which slightly undercuts its value per word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and rich annotations, the description need not explain return values, and it correctly focuses on the async submit/poll workflow that the structured fields cannot express. Gaps remain around failure modes (invalid column/reportType combinations, sandbox empty results) that the brief caveat acknowledges but never explains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters including enums for reportType, aggregation, and reportTimeZone are already documented in the schema. The description only gestures at the columns parameter via 'column compatibility', adding no syntax or constraints beyond what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Submit an asynchronous Microsoft Advertising report') plus the scope ('for the selected account') and the return shape ('return a receipt'). It also distinguishes itself from the sibling bing_get_report, so an agent can tell submit-then-poll apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs the agent to 'Poll the receipt with bing_get_report', which is the key next-step guidance. It does not state when NOT to use it (e.g., when a synchronous report or bing_get_reporting_schema lookup should come first), and 'Column compatibility and sandbox data availability apply' is a hint rather than a usable rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_keywordsbing get keywordsBRead-onlyIdempotent
Read keywords, match types, bids and status from an owned ad group.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. | |
| adGroupId | Yes | Numeric ad group ID in the selected campaign. | |
| campaignId | Yes | Numeric campaign ID in the selected account. | |
| campaignType | Yes | Native type of campaignId, used to verify that it belongs to the account. Dynamic Search campaigns use Search with DynamicSearchAdsSetting. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is fully covered by structured data. The description adds only the ownership qualifier ('owned ad group'), which hints at an access constraint, but says nothing about result volume, pagination, or what happens when the ad group has no keywords.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the resource scope is stated before the target. It is slightly under-sized given it is the only prose an agent gets beyond structured fields, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-shape explanation is not required, and the four required parameters are documented. However, for a tool nested three levels deep (account → campaign → ad group) the description never states whether the campaignType must match the campaign's native type or how results are bounded, leaving gaps an agent must discover by calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (accountId, adGroupId, campaignId, campaignType) are already explained in detail by the schema. The description contributes no additional parameter meaning; the terms 'match types, bids and status' describe output fields rather than inputs. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Read) and a specific resource (keywords, match types, bids, status) scoped to an ad group, which is unambiguous. It does not explicitly distinguish itself from sibling listing tools such as bing_get_ads or bing_get_ad_groups, so a reader must infer the boundary from the resource name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool is for inspecting keywords inside an existing ad group. There is no statement of when to prefer it over a reporting tool like bing_get_report, nor any exclusion or precondition beyond the phrase 'owned ad group'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_mediabing get mediaARead-onlyIdempotent
Read metadata of uploaded media by ID in the selected account, including image representations and their URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| mediaIds | Yes | Media IDs to read, up to 100. | |
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world and non-destructive, so the safety profile is covered. The description adds useful detail about the response (image representations and their URLs) and account scoping, but says nothing about error behavior for unknown IDs or the 100-ID ceiling listed in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the action, the resource, the required keys and the returned content. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the fully documented two-parameter schema covers inputs. What is missing is only connective guidance — where media IDs come from and how to distinguish this from the video/creative listing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both mediaIds (up to 100) and accountId (numeric ID, not the eight-character account number) fully documented in the schema. The description only echoes 'by ID' and 'selected account', adding no format or constraint detail beyond structured fields, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) plus resource (metadata of uploaded media) and scope (by ID, in the selected account), and previews the payload (image representations and URLs). It does not explicitly distinguish itself from near-siblings like bing_get_videos or bing_list_ad_creatives, which an agent might confuse with media assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the tool reads metadata for media IDs you already hold, and 'in the selected account' hints at the multi-account context. There is no statement of when to prefer this over bing_get_videos, nor how media IDs are obtained or what happens with invalid/oversized ID lists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_reportbing get reportARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt | Yes | Receipt returned by bing_get_insights in this server session. It expires after one hour. | |
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior. The description adds genuinely new traits: a 2,000-row CSV cap returned as strings, a truncation condition, and a caution that empty sandbox output is not production evidence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero waste; the prerequisite and the truncation rule are front-loaded before the caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the polling workflow, the truncation escape hatch, and the output volume caveat; an output schema exists so return structure need not be explained. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters (including the one-hour receipt expiry) are already fully documented in the schema. The description reinforces that the receipt comes from bing_get_insights and must target the same account, but adds no syntax or format detail beyond the schema — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (poll, download) and the exact resource (a report produced by bing_get_insights for the same account), which distinguishes it from the sibling that creates the report. An agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly ties use to a prior bing_get_insights call on the same account and gives an in-call rule (narrow the range when truncated is true). It does not name an alternative tool to use instead, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_reporting_schemabing get reporting schemaARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnly/idempotent/destructive annotations already declare the safety profile, so the bar is lower. The description does add one genuinely useful behavioral caveat — that presence in this list does not mean the column has populated data — which prevents a false assumption about data availability. It says nothing about freshness, versioning, or the scope of "pinned".
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the capability is front-loaded and the caveat follows immediately. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be described, and for a zero-param read-only lookup this is largely sufficient. The only meaningful gap is the missing link to bing_get_report, which would tell an agent how to act on the schema it just read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there is nothing the description could add. No syntax or format guidance is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: reading the pinned catalog of report types and their native columns, with references. It distinguishes itself from data-fetch siblings by making clear this is metadata (schema), not data, though it never names bing_get_report as the counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — an agent infers it should call this before building a report request to learn valid columns. There is no explicit when-to-use statement, no exclusion, and no pointer to bing_get_report for actual data retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_setup_guidebing get setup guideARead-onlyIdempotent
Coverage, safety rules and known limitations of this server. Read it before claiming that a feature is or is not supported.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive, so the safety profile is covered. The description adds value beyond that by framing the output as an authoritative capability/limitation reference the agent should consult before making support claims, which is real behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the content summary first and the call-to-action second. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and there are no parameters, so return-format detail is unnecessary. The description tells the agent the content and when to consult it, which is sufficient for a parameterless reference tool; only the missing differentiation from the sibling schema tools keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is nothing parameter-wise the description needs to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the concrete content of the resource: coverage, safety rules and known limitations of the server. It is clear what the tool returns, though it never contrasts itself with the adjacent reference tools (bing_get_reporting_schema, bing_get_write_schema) that an agent might confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'Read it before claiming that a feature is or is not supported.' That is a clear usage condition, but it doesn't say when NOT to use it or point to the sibling schema tools as alternatives for structured field lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_targetingbing get targetingARead-onlyIdempotent
Read configured campaign or ad group targeting for one criterion type, inclusions and exclusions included. This is configuration, not demographic performance.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. | |
| adGroupId | No | Optional ad group ID. Omit it to read campaign-level criteria. | |
| campaignId | Yes | Numeric campaign ID in the selected account. | |
| campaignType | Yes | Native type of campaignId, used to verify that it belongs to the account. Dynamic Search campaigns use Search with DynamicSearchAdsSetting. | |
| criterionType | Yes | Criterion type to read. Call once per type. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by saying inclusions and exclusions are returned and that this is configuration rather than performance, but it does not discuss pagination or response shape. With rich annotations and an output schema, this is an adequate but not exceptional addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no wasted words. The core purpose and the key distinction from performance reporting are front-loaded, making the description easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, existing output schema, and strong annotations, the description supplies the key conceptual distinction an agent needs: this reads targeting configuration, not performance. It is complete enough for correct selection and invocation, though it could optionally mention that criterion types are read one at a time.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with enums and required-field documentation, so the schema carries the parameter burden. The description adds only a small amount of semantic context: campaign-level versus ad group-level targeting and the single criterion type scope. This meets the baseline for a high-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read'), a precise resource ('configured campaign or ad group targeting'), and a bounded scope ('one criterion type'). It also explicitly distinguishes this configuration read from demographic performance reporting, so an agent can tell what the tool is and is not for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context by framing this as a configuration read and explicitly warning that it is not demographic performance. It does not name the reporting sibling as an alternative for performance data, but the when-to-use and when-not-to-use distinction is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_uet_tagsbing get uet tagsBRead-onlyIdempotent
Read UET tracking tag configuration. Nothing is installed on a website.
| Name | Required | Description | Default |
|---|---|---|---|
| tagIds | No | Optional UET tag IDs. Omit to read every tag. | |
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds useful context that nothing is deployed to a website, reinforcing the read-only nature. It does not disclose auth requirements, rate limits, or pagination behavior, but the output schema reduces the need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and immediately followed by the key scope clarification. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations are rich, the schema fully documents both parameters, and an output schema exists, so the description needn't explain return values. The main gap is the absence of usage guidance distinguishing this reader from alternatives, but overall it is sufficient to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents both the accountId format and the optional tagIds with a clear 'omit to read every tag' semantic. The description adds no parameter-level detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Read UET tracking tag configuration.' An agent can distinguish it from the many other bing_get_* resource readers by the resource name alone. The added 'Nothing is installed on a website' clarifies scope but does not further differentiate from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to call this tool versus alternatives, nor when to pass tagIds versus omitting it. The second sentence describes a side-effect (no website installation) rather than a usage condition. The agent must infer that this is the reader for UET tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_videosbing get videosARead-onlyIdempotent
Read account video assets and processing status. Active means the media is ready, not that an ad is delivering.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index. | |
| pageSize | No | Videos per page, 1 to 100. | |
| videoIds | No | Optional video IDs. Omit to page through every video. | |
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, and open-world behavior. The description adds useful semantic context by clarifying that 'Active' means the media is ready rather than an ad delivering, which is not captured in the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no waste. The main purpose is front-loaded, and the second sentence delivers a specific status caveat that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, annotations, and output schema, the description is nearly complete: it defines the resource and clarifies a key status semantic. It does not provide routing guidance against alternatives, but that is not required for the agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already well documented, including pagination and videoIds filtering. The description adds no parameter-specific meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: read account video assets and processing status. It is clear what the tool returns, though it does not explicitly differentiate itself from the sibling bing_get_media tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to read video assets, but gives no explicit when-to-use guidance, no exclusions, and no alternatives. The statement about 'Active' is a status interpretation, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_get_write_schemabing get write schemaBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | Entity whose native fields to read. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld behavior, so safety is covered. The description adds meaningful context that returned fields are 'pinned native fields' scoped per entity and that polymorphic objects carry a REST Type value, though it omits how type variance is surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loads the purpose, but the middle and final sentences are telegraphic to the point of ambiguity ('read each polymorphic object's documentation', 'Account eligibility is separate'), leaving the reader to guess at the intended workflow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a rich enum schema, full annotations, and an output schema, the description only needs orientation, and it provides some. However, the distinction between native fields and REST Type, and the 'separate' eligibility concern, are asserted without enough explanation for an agent to act confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with an enum list and a per-parameter description, so the schema does the heavy lifting. The description contributes little parameter-level detail beyond reaffirming that the entity determines which native fields are returned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: reading pinned native fields of a Microsoft Advertising entity. It implicitly contrasts with schema/reporting siblings by emphasizing 'native fields' and 'polymorphic' object documentation, but it never names an alternative tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied. 'Read each polymorphic object's documentation for its REST Type value' hints that this schema lookup precedes type-specific work, and 'Account eligibility is separate' hints at a boundary, but neither tells the agent when to pick this over bing_get_reporting_schema or how eligibility gets resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_health_checkbing health checkBRead-onlyIdempotent
Read the selected account and confirm the environment, owning customer and currency. This does not validate every feature.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld. The description's one value-add is the caveat that it is not a full validation, which usefully sets expectations about false negatives. It says nothing about what a 'check' returns or how failures surface (mitigated by the existing output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and then the limitation. No filler; the only small cost is that the scope caveat could be more specific about which checks are skipped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one fully documented parameter, rich annotations, and an output schema, the definition is barely sufficient. It still leaves open what the agent should do with the result (e.g., whether to proceed to other bing_* calls), which matters for a pre-flight check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single accountId parameter is fully documented in the schema (including the numeric-ID vs account-number distinction). The description adds no parameter-level information, so the baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete action (read the selected account) and the specific things it confirms (environment, owning customer, currency), which goes beyond the vague name 'health check'. It does not explicitly contrast itself with bing_list_accounts or the other get_* siblings, so 5 is not warranted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is a negative scope note ('does not validate every feature'). There is no statement of when an agent should call this versus bing_list_accounts or a feature-specific getter, and no prerequisites or failure interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_list_accountsbing list accountsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive behavior. The description adds useful behavioral context beyond that: discovery pages through every account Microsoft returns and then filters down to the configured ones, which tells the agent that the tool may query broadly yet return a restricted set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences with no wasted text. The core action and scope are front-loaded, and the discovery/filtering detail follows immediately in support of the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are no parameters, an output schema exists, and annotations cover the safety profile, the description is complete enough for correct invocation. It explains the scope and filtering behavior and names the returned account fields without needing to duplicate the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics have a baseline of 4. The description does not need to explain inputs, and the mention of BING_ADS_ACCOUNT_IDS is configuration context rather than a schema parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it lists accounts reachable by the user that are also in BING_ADS_ACCOUNT_IDS. It also names the returned fields (name, number, currency, status, owning customer), so the agent can distinguish this account-listing tool from sibling campaign, ad group, keyword, and reporting tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for discovering configured, reachable Bing Ads accounts by saying it pages through Microsoft results and keeps only configured ones. However, it does not explicitly state when to use this versus alternatives or when not to use it, so the usage guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bing_list_ad_creativesbing list ad creativesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum image assets to return. | |
| accountId | Yes | Account ID listed in BING_ADS_ACCOUNT_IDS. Use the numeric ID, not the eight-character account number shown in the web app. | |
| maxGroups | No | Maximum ad groups to scan across those campaigns. | |
| campaignIds | No | Optional campaign IDs to scan, up to 20. | |
| maxCampaigns | No | Maximum campaigns to scan. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes | Original tool result: parsed JSON when the text is JSON, otherwise the text or multiple MCP content blocks. Provider fields depend on the selected query. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior. The description adds meaningful context beyond annotations: it is a bounded scan and explicitly does not infer delivery, video contents, or KPI attribution. Auth and pagination behavior are not described, so it stops short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is two sentences and front-loaded with the core purpose. The second sentence is compact and informative, though 'Bounded scan' is slightly opaque without referencing the limit controls directly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, all parameters documented at 100% coverage, and annotations covering safety, the description supplies enough scope and non-goal context for correct invocation. It does not add return-shape detail, but the output schema already covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters. The description alludes to bounded scanning and parent IDs/names, but adds no parameter syntax or meaning beyond what the schema provides; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('List'), resource ('image assets'), and scope ('account-owned ads and Performance Max asset groups'), plus output detail ('parent IDs and names'). It indirectly distinguishes itself from video-oriented siblings by excluding video contents, but it does not explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The exclusions ('no inferred delivery, video contents or KPI attribution') imply when this tool is and is not appropriate, but there is no explicit when-to-use guidance and no named alternative such as bing_get_media or bing_get_videos. Usage must be inferred from scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
20 tool updates
v1.0.0- First observed
bing_get_ad_groups - First observed
bing_get_ads - First observed
bing_get_asset_groups - First observed
bing_get_audiences - First observed
bing_get_campaigns - First observed
bing_get_conversion_goals - First observed
bing_get_geo_file - First observed
bing_get_insights - First observed
bing_get_keywords - First observed
bing_get_media - First observed
bing_get_report - First observed
bing_get_reporting_schema - First observed
bing_get_setup_guide - First observed
bing_get_targeting - First observed
bing_get_uet_tags - First observed
bing_get_videos - First observed
bing_get_write_schema - First observed
bing_health_check - First observed
bing_list_accounts - First observed
bing_list_ad_creatives
TDQS
Scored across 20 tools
Most tools map cleanly to distinct Microsoft Advertising entities or actions, and the hierarchy reads (campaigns, ad groups, ads, keywords) are well separated. Minor ambiguity exists around media/videos/ad creatives and the paired bing_get_insights/bing_get_report naming, though descriptions clarify usage.
All tools use a consistent bing_ prefix with snake_case naming and mostly verb_noun structure such as bing_get_campaigns and bing_list_accounts. The few noun-oriented names like bing_health_check and bing_get_setup_guide are minor and still predictable.
Twenty tools is heavy for a single server, even for a broad advertising domain with many entity types. Most tools are distinct, but the set is near the upper bound and includes several schema/guide/health helpers that could feel like overhead.
The surface covers many read/inspection paths and async reporting, but there are no create, update, delete, bid, or budget mutation tools despite a bing_get_write_schema tool implying write readiness. For an advertising management server, this is a significant lifecycle gap.
Maintenance
Related MCP Connectors
Microsoft Ads MCP server: 11 tools for search, PMax, Google Ads imports. Read-only by default.
1Google Ads MCP: reports, search terms, negatives, budgets, campaigns. Approval on every write.
Hosted Microsoft Ads MCP server, with each action switched on or off per account.
Read-only MCP access to your DEXUN AdWhiz account: ad accounts, AI recommendations, savings.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables MCP clients to read campaign and account data freely while routing every write through human-approved plans, with budget caps, drift refusal, undo, and audit logging.6MIT
- AlicenseAqualityCmaintenanceEnables 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.16MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to read App Store campaign and performance data and to prepare preview-first, opt-in changes for explicitly allowlisted ad accounts.Apache 2.0
- AlicenseBqualityBmaintenanceEnables 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.21Apache 2.0