Skip to main content
Glama
james-julius

microsoft-ads-mcp

by james-julius

performance_report

Pull Microsoft Ads performance data (impressions, clicks, spend, conversions) for accounts, campaigns, ad groups, or keywords. Supports date ranges, aggregation, and filtering.

Instructions

Pull a performance report. Numbers come back already typed (floats/ints; percentages as plain numbers, e.g. 1.89 means 1.89%).

Args: account_id: Ads account id. report_type: account | campaign | ad_group | ad | keyword | search_term | geographic. - search_term = actual user search queries (best for finding waste + new keywords) - keyword / ad_group / ad = entity performance incl. quality score - geographic = performance by country/state/city predefined_time: Today, Yesterday, LastSevenDays, Last14Days, Last30Days, ThisWeek, LastWeek, LastFourWeeks, ThisMonth, LastMonth, LastThreeMonths, LastSixMonths, ThisYear, LastYear. Ignored if start_date+end_date given. start_date / end_date: custom range YYYY-MM-DD (both required for custom). aggregation: Summary, Daily, Weekly, Monthly, Hourly (TimePeriod column is auto-dropped for Summary). campaign_ids: optional scope to specific campaigns. columns: optional explicit column list (defaults are sensible per report).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
columnsNo
end_dateNo
max_rowsNo
account_idYes
start_dateNo
aggregationNoSummary
report_typeNocampaign
campaign_idsNo
predefined_timeNoLastSevenDays

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description takes on the full burden of disclosing behavior. It reveals that numbers come back as typed (floats/ints, percentages as plain numbers), that TimePeriod is auto-dropped for Summary aggregation, and that predefined_time is ignored when start_date/end_date are given. It does not mention whether the operation is read-only or side-effect-free, but the word 'pull' strongly implies no mutation, and the disclosed quirks are valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening and a bulleted list of arguments. Each line is purposeful and compact, avoiding redundancy. It front-loads the main purpose and the most important behavioral note about typed numbers. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 9 parameters and no annotational safety signals, the description covers a wide range of context: parameter meanings, value restrictions, behavioral quirks, and output formatting. Although an output schema exists, the description still clarifies how values are returned, which is helpful. The only minor omission is max_rows, but the rest is sufficiently complete for an agent to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It thoroughly explains each parameter: account_id, report_type with an enumerated list and per-item meaning, predefined_time with a complete list, start_date/end_date format and requirement, aggregation with enumeration and a behavioral note, campaign_ids, and columns. It misses max_rows, but that parameter is self-explanatory in the schema with a default. The description provides far more than the schema does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Pull a performance report,' a clear verb+resource statement. It further distinguishes report types (search_term, keyword, ad_group, ad, geographic) and explains their specific purposes, which helps differentiate from sibling tools like list_keywords or list_ads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful context for choosing report_type (e.g., 'search_term = actual user search queries (best for finding waste + new keywords)') but does not explicitly state when to use this tool over simpler list tools like list_keywords or compare_periods. Usage guidance is implied rather than explicit about alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/james-julius/microsoft-ads-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server