Skip to content

Releases: shinypebble/microsoft-ads-mcp

v0.4.0

Choose a tag to compare

@coreylane coreylane released this 27 Jun 06:05

Website exclusions (campaign-level)

New tools to manage a campaign's website control list exclusions (negative sites) — block referrer domains / mobile-app IDs where ads serve, without leaving the MCP server.

  • get_website_exclusions(campaign_id) — list a campaign's blocked sites (surfaces API partial errors for invalid/inaccessible campaign ids instead of reporting an empty list).
  • add_website_exclusions(campaign_id, urls) — block sites. Additive read-modify-write over Microsoft's replace-all SetNegativeSitesToCampaigns, so it never clobbers existing exclusions. Bare domains/paths or app IDs; a leading http(s):// is stripped.
  • remove_website_exclusions(campaign_id, urls) — unblock sites by URL, retaining the rest.

Microsoft sites (e.g. MSN.com) can't be excluded and there's a ~2500-site/campaign cap; both surface in partial_errors. Write tools remain gated by READ_ONLY.

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@coreylane coreylane released this 26 Jun 07:22

What's new

  • feat(extensions): structured snippet extension support + update functionality
  • feat(extensions): sitelink description support + update functionality

Full changelog: v0.2.1...v0.3.0

v0.2.1

Choose a tag to compare

@coreylane coreylane released this 24 Jun 01:12

Simplified install via uvx

config.py now reads a cwd-independent ~/.config/microsoft-ads/.env (alongside the persisted tokens.json), so the published package runs from any directory with no secrets in any project file:

"microsoft-ads": {
  "command": "uvx",
  "args": ["microsoft-ads-mcp"],
  "env": { "READ_ONLY": "false", "TOOL_SEARCH": "true" }
}

Precedence, highest first: real env vars > project-local .env > ~/.config/microsoft-ads/.env. This resolves the DEVELOPER_TOKEN and CLIENT_ID must be set startup error when credentials aren't passed inline. See the README Install section.

v0.2.0

Choose a tag to compare

@coreylane coreylane released this 23 Jun 21:30