Skip to main content
Glama
qalvinahmad

ads-mcp

by qalvinahmad

ads-mcp

A Model Context Protocol server that puts your mobile ad revenue in one conversational interface: Google AdMob and Huawei Petal Ads (Publisher Service), side by side.

Ask Claude things like:

"How much did I earn across AdMob and Petal Ads last week?"
"Which AdMob ad units are underperforming?"
"Break down my Petal Ads revenue by app"
"Compare yesterday's eCPM by country"

Tools

Tool

Network

Description

admob_list_accounts

AdMob

List publisher accounts

admob_get_account

AdMob

Account details (currency, timezone)

admob_list_apps

AdMob

List apps (paginated)

admob_list_ad_units

AdMob

List ad units (paginated)

admob_network_report

AdMob

Network report with full dimension/metric/filter/sort control

admob_mediation_report

AdMob

Mediation report (per ad-source performance)

petal_report

Petal Ads

Publisher report with full group-by/filter/order/pagination control

petal_revenue_summary

Petal Ads

Daily earnings trend + totals for a date range

petal_apps_performance

Petal Ads

Per-app (and per-placement) earnings breakdown

ads_revenue_overview

Both

Combined totals + daily breakdown across both networks

ads_auth_status

Both

Check which networks are configured/authorized

All tools are read-only — this server never mutates your ad accounts.

Related MCP server: AdMob MCP Server

Prerequisites

  • Node.js 18+

  • For AdMob: a Google Cloud project with the AdMob API enabled and an OAuth 2.0 Desktop app client

  • For Petal Ads: a HUAWEI Developers OAuth client with the Publisher Service Reporting API (Ads Kit) enabled

Setup

1. Install and build

git clone https://github.com/qalvinahmad/ads-mcp.git
cd ads-mcp
npm install
npm run build
cp .env.example .env

2. Google AdMob

  1. Open Google Cloud Console → select/create a project.

  2. Enable the AdMob API in the API Library.

  3. APIs & Services → Credentials → Create Credentials → OAuth client ID → Desktop app, then download the JSON.

  4. Save it as secrets/client_secret.json (or point ADMOB_CLIENT_SECRET_PATH in .env at it).

  5. Run the one-time authorization (opens a browser):

npm run auth:admob

If your OAuth consent screen is in "Testing" status, add your Google account as a test user (otherwise you'll get an authorization error, and refresh tokens expire after 7 days).

3. Huawei Petal Ads

  1. Open HUAWEI Developers ConsoleHMS API Services → Credentials.

  2. Create an OAuth 2.0 client ID (server type) with the Ads Kit / Publisher Service Reporting API enabled.

  3. Put the credentials in .env:

HUAWEI_CLIENT_ID=your_client_id
HUAWEI_CLIENT_SECRET=your_client_secret

Or, if you keep them as a single combined key:

HUAWEI_ADS_API_KEY=client_id:client_secret

No browser flow is needed — Petal Ads uses OAuth client-credentials (server-to-server).

4. Verify

npm run doctor    # checks both networks; tests the Huawei token endpoint
npm run smoke     # boots the server and validates the MCP handshake + tool list

Register with an MCP client

Claude Code (CLI)

claude mcp add ads -- node /absolute/path/to/ads-mcp/dist/index.js

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "ads": {
      "command": "node",
      "args": ["/absolute/path/to/ads-mcp/dist/index.js"]
    }
  }
}

Cursor / Windsurf / Cline

"ads": {
  "command": "node",
  "args": ["/absolute/path/to/ads-mcp/dist/index.js"]
}

Configuration is read from ads-mcp/.env automatically (the server resolves it relative to its own install directory, not the client's working directory).

Environment variables

Variable

Default

Description

ADMOB_CLIENT_SECRET_PATH

secrets/client_secret.json

Google OAuth Desktop-app client JSON

ADMOB_TOKEN_PATH

secrets/admob-token.json

Cached authorized user token

ADMOB_OAUTH_PORT

8089

Localhost port for the one-time OAuth flow

HUAWEI_CLIENT_ID / HUAWEI_CLIENT_SECRET

Huawei OAuth client (preferred)

HUAWEI_ADS_API_KEY

Combined client_id:client_secret fallback

HUAWEI_DEFAULT_CURRENCY

USD

Default report currency (CNY, USD, EUR)

HUAWEI_OAUTH_TOKEN_URL

Huawei production

Override for testing

HUAWEI_ADS_REPORT_URL

Huawei production

Override for testing

Security notes

  • secrets/ and .env are gitignored — never commit credentials.

  • The AdMob token file is written with 0600 permissions.

  • Huawei access tokens are cached in memory only.

  • All tools are read-only against both ad networks.

API references

Credits

License

MIT — see LICENSE.

Available Tools

11 tools
admob_get_accountGet AdMob accountA
Read-onlyIdempotent

Get details (currency, timezone) for one AdMob publisher account.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesAdMob publisher ID, e.g. "pub-1234567890123456"

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds that it returns details like currency and timezone, but does not disclose any additional behavioral traits beyond what annotations provide.

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 a single, front-loaded sentence with no unnecessary words. Every part is relevant and efficiently conveys the tool's purpose.

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 simple get tool with one parameter, no output schema, and rich annotations, the description sufficiently covers what the tool does and what it returns (currency, timezone). It is complete for the tool's complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description does not add significant meaning beyond the schema's parameter description ('account_id' as 'AdMob publisher ID'), though it hints at the response fields (currency, timezone) which are not captured in the input schema.

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 clearly states the verb ('Get'), resource ('one AdMob publisher account'), and specifies what details are retrieved (currency, timezone). This distinguishes it from sibling tools like admob_list_accounts, which lists all accounts.

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 implies usage when you have a specific account_id, but does not explicitly state when to use this tool versus alternatives like admob_list_accounts. No exclusions or when-not-to-use guidance is provided.

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

admob_list_accountsList AdMob accountsA
Read-onlyIdempotent

List the Google AdMob publisher accounts available to the authorized user.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

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

The description essentially restates the resource and scope, adding no behavioral traits beyond what annotations already provide (readOnlyHint, idempotentHint, openWorldHint). It does not reveal any additional behaviors like rate limits or data freshness.

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?

A single, concise sentence that conveys the tool's purpose without any extraneous words. It is efficiently front-loaded.

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?

Given the absence of parameters, output schema, and complex behavior, the description is complete enough. It sufficiently informs an agent of the tool's output (listing accounts) and its scope (accounts available to the user).

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

Parameters4/5

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

There are no parameters in the input schema, so the description does not need to add parameter-specific information. The schema coverage is 100% (vacuously), meeting the baseline for 0-parameter tools.

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 clearly states the verb 'List' and the specific resource 'Google AdMob publisher accounts', and the scope 'available to the authorized user'. It distinguishes this tool from siblings like 'admob_get_account' (which likely retrieves a specific account) by implying it returns all accounts.

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 implies usage when you need to see all available AdMob accounts, but it does not explicitly contrast with sibling tools. No guidance on when not to use it or alternatives is given.

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

admob_list_ad_unitsList AdMob ad unitsA
Read-onlyIdempotent

List ad units under an AdMob account (paginated).

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoMax ad units to return (max 10000)
account_idNoAdMob publisher ID; omit for default
page_tokenNoPage token from a previous call

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, open world, and non-destructive behavior. The description adds 'paginated', which is a key behavioral trait beyond the schema. This provides useful context without contradiction.

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 a single, concise sentence that is front-loaded with the core action and resource. No wasted words.

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

Completeness4/5

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

For a simple paginated list tool with comprehensive schema descriptions and annotations, the description covers the essential purpose and pagination behavior. However, it lacks details on error handling or return format, but given the simplicity, it is largely sufficient.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for each parameter. The description does not add further meaning beyond stating pagination, so baseline 3 is appropriate.

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 clearly states the verb 'List' and the resource 'ad units under an AdMob account', which is specific and distinguishes from sibling tools like 'admob_list_accounts' or 'admob_list_apps'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. For example, it does not mention when to use this over 'admob_list_accounts' or 'admob_list_apps', nor does it specify prerequisites like the need for an AdMob account.

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

admob_list_appsList AdMob appsA
Read-onlyIdempotent

List apps registered under an AdMob account (paginated).

ParametersJSON Schema
NameRequiredDescriptionDefault
page_sizeNoMax apps to return (max 10000)
account_idNoAdMob publisher ID; omit for default
page_tokenNoPage token from a previous call

TDQS

A3.7/5.0
Behavior4/5

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

The description adds the key behavioral trait of pagination, which is not fully captured by annotations (readOnlyHint, idempotentHint, etc.). It does not contradict annotations, and provides useful context beyond the structured fields.

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 a single, concise sentence that is front-loaded with the core purpose. It contains no unnecessary words or redundant information, making it highly efficient.

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

Completeness3/5

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

Given the absence of an output schema, the description should ideally explain what the tool returns (e.g., list structure, fields). It does not, leaving the agent to infer. However, parameters and annotations provide adequate context for basic use. The description is minimally adequate but not fully complete.

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

Parameters3/5

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

The input schema has 100% description coverage for all three parameters (page_size, account_id, page_token), so the tool description adds no additional semantic meaning. The schema descriptions are sufficient, making the tool description's role minimal.

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 clearly states the action 'List', the resource 'apps registered under an AdMob account', and notes pagination, effectively distinguishing it from sibling tools like admob_get_account (single account) or admob_list_ad_units (different resource type).

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention prerequisites or when not to use it. The context signals list sibling tools, but the description itself lacks explicit usage direction.

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

admob_mediation_reportAdMob mediation reportA
Read-onlyIdempotent

Generate an AdMob Mediation report (per ad-source revenue and performance).

Dimensions: DATE, MONTH, WEEK, AD_SOURCE, AD_SOURCE_INSTANCE, AD_UNIT, APP, MEDIATION_GROUP, COUNTRY, FORMAT, PLATFORM, MOBILE_OS_VERSION, GMA_SDK_VERSION, APP_VERSION_NAME, SERVING_RESTRICTION. Only one time dimension (DATE/MONTH/WEEK) per request.

Metrics: AD_REQUESTS, CLICKS, ESTIMATED_EARNINGS, IMPRESSIONS, IMPRESSION_CTR, MATCHED_REQUESTS, MATCH_RATE, OBSERVED_ECPM. Monetary values are returned already divided from micros into currency units.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw API JSON instead of a formatted table
metricsNoMetrics to include (defaults to IMPRESSIONS, CLICKS, ESTIMATED_EARNINGS)
end_dateNoEnd date in YYYY-MM-DD (defaults to start_date)
time_zoneNoIANA timezone, e.g. "Asia/Jakarta"
account_idNoAdMob publisher ID, e.g. "pub-1234567890123456". Omit to use the first account of the authorized user.
dimensionsNoDimensions to group by
start_dateYesStart date in YYYY-MM-DD
currency_codeNoISO 4217 currency code for monetary metrics, e.g. "USD"
max_report_rowsNoMax rows to return (1-100000)
sort_conditionsNoSort conditions
dimension_filtersNoDimension filters to apply

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral details: monetary values are pre-divided from micros, and only one time dimension permitted. No contradictions with annotations.

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

Conciseness4/5

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

The description is moderately concise, front-loaded with purpose, and enumerates dimensions/metrics clearly. It could be slightly shorter but every sentence adds value.

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

Completeness4/5

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

Given the complexity of 11 parameters and no output schema, the description covers key aspects: purpose, available dimensions/metrics, time dimension constraint, and monetary value format. It does not detail return structure beyond raw/table, but the 'raw' parameter addresses that.

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

Parameters4/5

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

Schema coverage is 100% with per-parameter descriptions. The description adds value beyond the schema by explaining constraints (only one time dimension) and data format (monetary values pre-divided), which are not obvious from the schema alone.

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 clearly states the tool generates an AdMob Mediation report for per ad-source revenue and performance, and lists allowed dimensions and metrics. This verb+resource combination is specific and distinguishes from siblings like admob_network_report, which likely focuses on network-level data.

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

Usage Guidelines4/5

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

The description provides clear usage context by stating that only one time dimension (DATE/MONTH/WEEK) is allowed per request and defines default metrics. However, it does not explicitly exclude sibling tools or specify when to use this tool versus alternatives like admob_network_report.

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

admob_network_reportAdMob network reportA
Read-onlyIdempotent

Generate an AdMob Network report (revenue, impressions, eCPM, ...).

Dimensions: DATE, MONTH, WEEK, AD_UNIT, APP, AD_TYPE, COUNTRY, FORMAT, PLATFORM, MOBILE_OS_VERSION, GMA_SDK_VERSION, APP_VERSION_NAME, SERVING_RESTRICTION. Only one time dimension (DATE/MONTH/WEEK) per request.

Metrics: AD_REQUESTS, CLICKS, ESTIMATED_EARNINGS, IMPRESSIONS, IMPRESSION_CTR, IMPRESSION_RPM, MATCHED_REQUESTS, MATCH_RATE, SHOW_RATE. Monetary values are returned already divided from micros into currency units.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw API JSON instead of a formatted table
metricsNoMetrics to include (defaults to IMPRESSIONS, CLICKS, ESTIMATED_EARNINGS)
end_dateNoEnd date in YYYY-MM-DD (defaults to start_date)
time_zoneNoIANA timezone, e.g. "Asia/Jakarta"
account_idNoAdMob publisher ID, e.g. "pub-1234567890123456". Omit to use the first account of the authorized user.
dimensionsNoDimensions to group by
start_dateYesStart date in YYYY-MM-DD
currency_codeNoISO 4217 currency code for monetary metrics, e.g. "USD"
max_report_rowsNoMax rows to return (1-100000)
sort_conditionsNoSort conditions
dimension_filtersNoDimension filters to apply

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral details: only one time dimension per request, and monetary values are returned from micros to currency units. This supplements annotations well.

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 concise and front-loaded: a lead sentence, then lists of dimensions/metrics with relevant constraints. No fluff, every sentence adds value.

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

Completeness4/5

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

Given the tool's complexity (11 params, no output schema), the description covers purpose, available values, constraints, and output formatting. It lacks details on response structure but is otherwise complete.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description enumerates valid values for dimensions and metrics, and adds a constraint (one time dimension per request), providing meaningful extra context beyond the schema.

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 clearly states 'Generate an AdMob Network report' with a specific verb and resource. It lists dimensions and metrics, differentiating it from sibling tools like admob_mediation_report.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It only states what it does, without exclusions or comparisons to siblings like admob_mediation_report.

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

ads_auth_statusAd network auth statusA
Read-onlyIdempotent

Check which ad networks are configured and authorized (AdMob OAuth token, Huawei credentials). Optionally performs a live Huawei token test. Never returns secret values.

ParametersJSON Schema
NameRequiredDescriptionDefault
test_huawei_tokenNoActually request a Huawei OAuth token to verify the credentials (default false)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide readOnlyHint and idempotentHint. The description adds that it never returns secret values and optionally performs a live Huawei token test, which are useful behavioral details beyond the annotations.

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?

Two sentences, no filler. Front-loaded with purpose, followed by optional behavior and security note. Every sentence adds value.

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 simple read-only tool with one optional parameter and no output schema needed, the description is complete. Annotations cover safety and idempotency.

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

Parameters3/5

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

Schema coverage is 100%, with the parameter description already explaining the default value. The tool description does not add new information about the parameter, so baseline 3 is appropriate.

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 clearly states the tool checks which ad networks are configured and authorized, specifically naming AdMob and Huawei. It distinguishes from sibling tools that focus on data retrieval for individual networks.

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 implies usage for checking auth status but does not explicitly state when to use or when not to use. No alternative tools are mentioned. Context is clear but lacks explicit guidance.

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

ads_revenue_overviewCross-network revenue overviewA
Read-onlyIdempotent

Combined ad revenue overview across Google AdMob and Huawei Petal Ads for a date range (defaults to the last 7 days): totals per network, grand total, and a daily breakdown. Networks that are not configured are reported but do not block the other.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of past days to cover (default 7; ignored when start_date is set)
currencyNoCurrency for both networks (AdMob converts; Petal supports CNY/USD/EUR). Default USD.
end_dateNoEnd date in YYYY-MM-DD (defaults to yesterday)
start_dateNoStart date in YYYY-MM-DD
include_dailyNoInclude the per-day table (default true)
admob_account_idNoAdMob publisher ID; omit to auto-discover

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the agent knows it's a safe, read-only operation. The description adds behavioral details such as default date range, handling of unconfigured networks, and currency conversion behavior, which adds value beyond the annotations.

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 two well-structured sentences. The first sentence clearly states the purpose and default behavior, and the second provides a key behavioral detail about unconfigured networks. No wasted words.

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

Completeness4/5

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

The description covers the output concept (totals per network, grand total, daily breakdown) and mentions behavior for unconfigured networks. With 6 optional parameters and no output schema, the description gives enough high-level context for the agent to understand what the tool returns. Minor missing details on output format are acceptable given the read-only nature.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The tool description provides additional context on parameter interactions, such as 'days' being ignored when 'start_date' is set, and explains the default behavior for dates and currency. This adds meaning beyond the individual parameter descriptions.

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 clearly states the tool provides a combined ad revenue overview across Google AdMob and Huawei Petal Ads for a date range, including totals per network, grand total, and daily breakdown. It distinguishes from sibling tools like admob_network_report and petal_revenue_summary by being a cross-network overview.

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

Usage Guidelines4/5

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

The description gives useful guidance: it defaults to the last 7 days and notes that networks not configured are still reported without blocking others. While it doesn't explicitly state when not to use this tool, the context is clear enough for an agent to decide.

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

petal_apps_performancePetal Ads app performanceA
Read-onlyIdempotent

Per-app (optionally per-placement) Petal Ads earnings breakdown for a date range, ordered by earnings. Convenience wrapper around petal_report.

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNoReport currency: CNY, USD, or EUR (default USD)
end_dateNoEnd date in YYYY-MM-DD (default yesterday)
start_dateNoStart date in YYYY-MM-DD (default 7 days ago)
include_placementsNoAlso break down by ad placement

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnly, idempotent, non-destructive behavior. The description adds context about ordering by earnings and being a wrapper, which is valuable beyond annotations.

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?

Single sentence with zero waste; front-loads key information (per-app, per-placement, earnings, date range, ordering). Highly efficient.

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

Completeness4/5

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

Given no output schema and simple parameters, the description covers the main purpose and behavior. It could briefly mention return format, but overall complete for a straightforward reporting tool.

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

Parameters3/5

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 parameters. The description adds the 'optionally per-placement' phrase but doesn't provide additional syntax or format details, warranting baseline 3.

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 clearly states the tool provides a per-app (optionally per-placement) earnings breakdown for a date range, ordered by earnings, and explicitly notes it's a convenience wrapper around petal_report, which distinguishes it from sibling tools.

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 implies usage through naming and explanation as a convenience wrapper, but lacks explicit when-to-use or when-not-to-use guidance compared to alternatives like petal_report.

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

petal_reportPetal Ads reportA
Read-onlyIdempotent

Query the Huawei Petal Ads Publisher Service Reporting API with full control over grouping, filtering, ordering, and pagination. Returns monetization data (earnings, ad requests, impressions, clicks, match/show/click rates).

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw API JSON instead of a formatted table
pageNoPage number (default 1)
app_idsNoFilter to specific Petal Ads app IDs
ad_typesNoFilter to specific ad formats
currencyNoReport currency: CNY, USD, or EUR (default USD)
end_dateNoEnd date in YYYY-MM-DD (defaults to start_date)
group_byNoBreakdown dimensions, e.g. STAT_BREAK_DOWNS_APP_ID
countriesNoFilter to country codes, e.g. ["ID", "US"]
page_sizeNoRows per page (default 50, max 1000)
order_typeNoOrder direction
start_dateYesStart date in YYYY-MM-DD
order_fieldNoField to order by
placement_idsNoFilter to specific ad placement IDs
time_granularityNoTime granularity (default STAT_TIME_GRANULARITY_DAILY)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description consistently describes a query operation (query, returns). It adds context about the API and metrics returned, which is useful beyond the annotations.

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?

Two sentences front-load the purpose and capabilities. No redundant information. Every word adds value.

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

Completeness4/5

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

Given 14 parameters with full schema descriptions and annotations indicating read-only behavior, the description covers the tool's purpose and output. It could mention pagination or rate limits, but the parameters (page, page_size) address pagination implicitly. Minor gap for completeness.

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

Parameters3/5

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

Schema coverage is 100% with all parameters described. The description provides a high-level overview but does not add new meaning beyond the schema. Baseline 3 is appropriate as the schema carries the detail.

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 clearly states the tool queries the Huawei Petal Ads reporting API with control over grouping, filtering, ordering, and pagination. It specifies the resource (reports), action (query), and expected return values (monetization data including earnings, impressions, clicks, rates). This distinguishes it from siblings like petal_apps_performance and petal_revenue_summary.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as petal_apps_performance or petal_revenue_summary. The description implies full control but does not explicitly state contexts where this tool is preferred or when not to use it.

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

petal_revenue_summaryPetal Ads revenue summaryA
Read-onlyIdempotent

Daily Petal Ads earnings trend plus totals for a date range (defaults to the last 7 days). Convenience wrapper around petal_report.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of past days to cover (default 7; ignored when start_date is set)
currencyNoReport currency: CNY, USD, or EUR (default USD)
end_dateNoEnd date in YYYY-MM-DD (defaults to yesterday)
start_dateNoStart date in YYYY-MM-DD

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior. Description adds context about output (daily trend plus totals), providing additional behavioral insight beyond annotations.

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?

Two concise sentences, front-loaded with purpose, no superfluous words.

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

Completeness4/5

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

Lacks output schema but describes output as 'daily trend plus totals', sufficient for a simple query tool with rich annotations.

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

Parameters3/5

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

Schema description coverage is 100%, with defaults already documented. Description restates defaults but adds no new parameter-level information, meeting the baseline.

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 clearly states it provides 'Daily Petal Ads earnings trend plus totals for a date range' and identifies itself as a convenience wrapper around petal_report, distinguishing it from siblings.

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

Usage Guidelines4/5

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

Mentions default date range and that it is a wrapper around petal_report, implicitly guiding users to use this for quick summaries and petal_report for more detailed reports.

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.

  1. 11 tool updatesv1.0.0
    • First observedadmob_get_account
    • First observedadmob_list_accounts
    • First observedadmob_list_ad_units
    • First observedadmob_list_apps
    • First observedadmob_mediation_report
    • First observedadmob_network_report
    • First observedads_auth_status
    • First observedads_revenue_overview
    • First observedpetal_apps_performance
    • First observedpetal_report
    • First observedpetal_revenue_summary

TDQS

A4.2/5.0

Scored across 11 tools

Disambiguation5/5

Each tool has a distinct purpose, with clear separation between admob and petal ads operations. The two report types (mediation and network) are differentiated, and convenience wrappers are explicitly noted.

Naming Consistency5/5

All tools use a consistent prefix (admob_, ads_, petal_) with snake_case verb_noun pattern. Verbs like get, list, report, and auth_status are uniformly applied, making the set predictable.

Tool Count5/5

11 tools cover the necessary operations for ad revenue reporting: account info, ad units, apps, two report types for admob, auth status, combined overview, and three petal tools. No excess or deficiency.

Completeness5/5

The tool set fully covers read-only access to ad monetization data from both AdMob and Huawei Petal Ads. Essential operations like listing, getting details, and generating reports are present, with no obvious gaps.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    B
    maintenance
    Enables comprehensive Google Ads campaign management and analysis through natural language, including performance metrics, keyword optimization, budget management, and custom GAQL queries.
    100
    13
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects Claude to the Google AdMob API to provide a conversational interface for managing and analyzing ad revenue data. It enables users to generate custom network reports, track performance trends, and diagnose revenue fluctuations using natural language.
    6
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language access to Google Ads campaigns, accounts, and performance metrics via Claude, with tools for managing ad groups, keywords, budgets, and visualizing data.
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read access to campaign performance data from Google Ads, Meta Ads, and TikTok Ads via live API calls, enabling AI assistants to analyze and audit advertising campaigns.
    1
    MIT