mcp-google-merchants
Google Merchant Center MCP
English | Русский
A1 Google Merchant Center MCP는 AI 앱을 사용자의 Google Merchant Center 계정에 연결합니다. 제품이 비승인된 이유를 확인하고, 피드와 프로모션을 검사하고, 보고서와 시장 가격을 탐색한 다음, 필요할 때 제품 데이터를 의도적으로 변경할 수 있습니다.
이 서버는 쇼핑 리스팅의 기반이 되는 Merchant Center 데이터(제품, 데이터 소스, 프로모션, 보고서)와 함께 작동합니다. 캠페인, 예산, 입찰은 Google Ads에 속하므로 이 서버의 범위를 벗어납니다.
도구 22개. 15개 작업은 Merchant Center 데이터를 읽기만 하고, 5개는 제품·데이터 소스·프로모션 데이터를 쓰며, 2개는 잠재적으로 파괴적입니다.
사용자의 Google 액세스. 이 서버는 사용자의 OAuth 자격 증명과 Merchant API v1을 사용하며 별도의 Merchant Center 계정을 만들지 않습니다.
소스 인식 변경. 제품 및 프로모션 입력은 API 데이터 소스를 통해서만 변경할 수 있습니다. 파일 피드는 다시 가져올 수 있지만, 그 내용은 여기서 편집되지 않습니다.
명확한 경계. 도구에는 읽기 전용, 쓰기 또는 파괴적 메타데이터가 표시되므로 AI 클라이언트는 조회와 실시간 변경을 구분할 수 있습니다.
읽기 전용 질문으로 시작하세요:
어떤 제품이 비승인되었으며, Google은 각 제품에 대해 어떤 문제를 보고하나요?
서버 연결 · 사용 사례 살펴보기 · 기술 문서 열기
1분 만에 작동 확인
사용자: 어떤 제품이 비승인되었으며, Google은 각 제품에 대해 어떤 문제를 보고하나요?
어시스턴트: 영향을 받은 제품을 나열하고 Merchant Center가 보고하는 항목 수준 문제를 설명합니다.
사용자: 제품
SKU-123의 현재 가격과 재고 상태를 보여주고,in_stock으로 재고 상태 업데이트를 준비해 주세요.어시스턴트: 현재 제품 입력, 해당 입력이 속한 API 데이터 소스, 그리고 적용할 정확한 변경 사항을 표시합니다. 실제 제품 입력을 업데이트하기 전에 확인을 요청합니다.
사용자: 업데이트를 확인합니다.
어시스턴트: 업데이트를 전송하고 Merchant Center가 제품 데이터를 비동기적으로 처리한다고 설명합니다. 처리된 제품과 품질 상태가 갱신되려면 몇 분이 걸릴 수 있습니다.
Related MCP server: gmc-mcp
목차
빠른 시작
Node.js 20+, Google Merchant Center 계정, Google Cloud의 OAuth 자격 증명, Merchant Center에 등록된 Google Cloud 프로젝트가 필요합니다. 액세스 설정은 액세스 권한 얻기에서 설명합니다.
네 가지 값을 준비합니다. OAuth 클라이언트 ID, OAuth 클라이언트 시크릿, OAuth 리프레시 토큰, Merchant Center 계정 ID.
아래 지침 중 하나를 사용하여 AI 앱에 서버를 추가합니다.
위의 첫 번째 읽기 전용 질문을 합니다.
앱에서:
Settings → Plugins → MCP servers를 엽니다.
Add server를 선택합니다.
실행 명령
npx -y mcp-google-merchants@latest과 아래의 네 가지 환경 변수를 추가합니다.
변수 | 값 |
| Google OAuth 클라이언트 ID |
| Google OAuth 클라이언트 시크릿 |
| Google OAuth 리프레시 토큰 |
| Merchant Center 계정 ID |
명령줄에서:
codex mcp add google-merchants \
--env GOOGLE_MERCHANTS_CLIENT_ID=your_client_id \
--env GOOGLE_MERCHANTS_CLIENT_SECRET=your_client_secret \
--env GOOGLE_MERCHANTS_REFRESH_TOKEN=your_refresh_token \
--env GOOGLE_MERCHANTS_ACCOUNT_ID=your_merchant_id \
-- npx -y mcp-google-merchants@latest연결 확인:
codex mcp listclaude mcp add \
--env GOOGLE_MERCHANTS_CLIENT_ID=your_client_id \
--env GOOGLE_MERCHANTS_CLIENT_SECRET=your_client_secret \
--env GOOGLE_MERCHANTS_REFRESH_TOKEN=your_refresh_token \
--env GOOGLE_MERCHANTS_ACCOUNT_ID=your_merchant_id \
--transport stdio \
--scope user \
google-merchants \
-- npx -y mcp-google-merchants@latest연결 확인:
claude mcp listClaude Desktop을 열고 Settings → Developer로 이동합니다.
Edit Config를 선택합니다.
mcpServers에 서버를 추가합니다:
{
"mcpServers": {
"google-merchants": {
"command": "npx",
"args": ["-y", "mcp-google-merchants@latest"],
"env": {
"GOOGLE_MERCHANTS_CLIENT_ID": "your_client_id",
"GOOGLE_MERCHANTS_CLIENT_SECRET": "your_client_secret",
"GOOGLE_MERCHANTS_REFRESH_TOKEN": "your_refresh_token",
"GOOGLE_MERCHANTS_ACCOUNT_ID": "your_merchant_id"
}
}
}
}Edit Config를 사용할 수 없으면 구성 파일을 직접 엽니다:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
macOS/Linux에서는 ~/.cursor/mcp.json에, Windows에서는 %USERPROFILE%\.cursor\mcp.json에 사용자 수준 서버를 추가합니다:
{
"mcpServers": {
"google-merchants": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-google-merchants@latest"],
"env": {
"GOOGLE_MERCHANTS_CLIENT_ID": "your_client_id",
"GOOGLE_MERCHANTS_CLIENT_SECRET": "your_client_secret",
"GOOGLE_MERCHANTS_REFRESH_TOKEN": "your_refresh_token",
"GOOGLE_MERCHANTS_ACCOUNT_ID": "your_merchant_id"
}
}
}
}명령 팔레트에서 MCP: Open User Configuration을 실행하고 추가합니다:
{
"servers": {
"google-merchants": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mcp-google-merchants@latest"],
"env": {
"GOOGLE_MERCHANTS_CLIENT_ID": "${input:google_merchants_client_id}",
"GOOGLE_MERCHANTS_CLIENT_SECRET": "${input:google_merchants_client_secret}",
"GOOGLE_MERCHANTS_REFRESH_TOKEN": "${input:google_merchants_refresh_token}",
"GOOGLE_MERCHANTS_ACCOUNT_ID": "${input:google_merchants_account_id}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "google_merchants_client_id",
"description": "Google OAuth client ID"
},
{
"type": "promptString",
"id": "google_merchants_client_secret",
"description": "Google OAuth client secret",
"password": true
},
{
"type": "promptString",
"id": "google_merchants_refresh_token",
"description": "Google OAuth refresh token",
"password": true
},
{
"type": "promptString",
"id": "google_merchants_account_id",
"description": "Merchant Center account ID"
}
]
}MCP: List Servers로 서버를 확인합니다.
요청할 수 있는 작업
카탈로그 문제 찾기 및 이해
어떤 제품이 비승인되었으며, Google은 각 제품에 대해 무엇을 보고하나요?
제품
SKU-123의 제목, 가격, 재고 상태 및 현재 상태를 표시해 주세요.재고가 없는 제품은 무엇인가요?
이 Merchant Center 계정에서 가장 빈번한 제품 문제를 보여주세요.
실적 및 가격 탐색
7월의 제품별 클릭수와 노출수를 표시해 주세요.
미국에서 시장 기준보다 높게 책정된 제품은 무엇인가요?
Google이 제안하는 가격은 무엇이며, 예측되는 영향은 무엇인가요?
가격 비교와 제안에는 Merchant Center의 무료 Market Insights 옵트인이 필요합니다. 계정이 옵트인하지 않은 경우 서버는 보고서에 행이 없는 이유를 설명합니다.
계정 및 피드 검사
액세스할 수 있는 Merchant Center 계정을 나열해 주세요.
스토어 홈페이지가 클레임되어 있나요? 현재 배송 설정을 보여주세요.
제품 및 프로모션 데이터 소스를 나열하고 API 데이터 소스를 식별해 주세요.
이 예약된 파일 피드를 지금 다시 가져오세요.
의도적인 변경 수행
이 제품의 가격과 재고 상태를 해당 API 데이터 소스에서 업데이트하세요.
새 제품 피드를 위한 API 데이터 소스를 생성하세요.
프로모션을 생성하거나 업데이트한 다음 승인 상태를 확인하세요.
데이터를 변경하는 모든 요청에 대해 먼저 어시스턴트에게 대상 계정, 데이터 소스 및 변경하려는 정확한 필드를 표시하도록 요청하세요.
Merchant Center 데이터의 연결 방식
Merchant Center는 들어오는 데이터와 그 결과로 생성된 제품 상태를 분리하여 유지합니다:
계정에는 제품 및 프로모션 데이터 소스가 포함됩니다.
데이터 소스는 API 소스, 파일, Google Sheet, Merchant Center 인터페이스 또는 자동 피드일 수 있습니다.
제품 입력은 하나의 소스에서 제공되는 제품 데이터입니다.
처리된 제품은 Merchant Center가 해당 입력을 처리한 후 파생하는 결과입니다. 여기에는 자격 및 항목 수준 문제가 포함됩니다.
서버는 나열된 모든 소스 유형을 읽을 수 있습니다. API 데이터 소스를 생성하고 제품 입력을 업데이트할 수 있지만, 오직 API 데이터 소스에서만 가능합니다. 파일, 인터페이스 또는 자동 피드에는 쓸 수 없습니다. 조건으로 제품을 찾으려면 보고서 쿼리를 사용하세요. list_products 자체는 서버 측 필터링을 제공하지 않습니다.
변경할 수 있는 것
작업 | 수행 내용 | 확인 경계 |
계정, 제품, 피드, 프로모션, 보고서, 문제 및 할당량 사용량 검사 | Merchant Center에서 데이터 읽기 | Merchant Center 변경 없음 |
API 데이터 소스 생성 | 제품 또는 프로모션 데이터용 소스 추가 | 계정 변경 |
제품 입력 업데이트 | 가격 또는 재고 상태와 같은 선택된 제품 필드 변경 | 실시간 소스 데이터 변경 |
제품 입력 삽입 | 해당 API 소스에서 동일한 ID의 전체 입력을 대체합니다. 다른 소스를 사용하면 제품이 이동됩니다. | 실시간 소스 데이터 변경 |
파일 피드 다시 가져오기 | 파일 또는 Google Sheets 피드의 예정 외 가져오기를 요청합니다. | Google에서 비동기 작업 시작 |
프로모션 삽입 또는 업데이트 | 프로모션 생성 또는 변경 | 실시간 소스 데이터 변경 |
제품 입력 삭제 | 선택한 데이터 소스에서 입력 제거 | 파괴적 |
원시 Merchant API 요청 | 전용 도구 없이 API 메서드에 접근 가능 | 잠재적으로 파괴적 |
MCP 클라이언트는 쓰기 및 파괴적 도구에 대한 확인을 어떻게 요청할지 결정합니다. 서버는 읽기 전용, 쓰기 및 파괴적 작업을 표시하므로 클라이언트가 적절한 경계를 제시할 수 있습니다.
액세스 권한 얻기
이 서버는 Google Merchant API와 OAuth 범위 https://www.googleapis.com/auth/content를 사용합니다.
Google Cloud 프로젝트를 만들거나 선택하고, Merchant API를 사용 설정한 다음 OAuth 동의 화면을 구성합니다.
Google Cloud에서 유형이 Desktop app인 OAuth 클라이언트를 만듭니다. 해당 클라이언트 ID와 클라이언트 시크릿을 저장합니다.
Merchant Center에 액세스할 수 있는 Google 계정을 인증하고 위 범위에 대한 리프레시 토큰을 얻습니다. OAuth 2.0 Playground가 이 단계에 도움이 될 수 있습니다. Use your own OAuth credentials를 사용 설정하고, 범위를 입력하고, 인증한 다음 코드를 토큰과 교환하세요.
Merchant Center에서 Merchant Center 계정 ID를 찾아
GOOGLE_MERCHANTS_ACCOUNT_ID로 사용합니다.Google Cloud 프로젝트를 Merchant Center에 한 번 등록합니다. Google은 이 작업을 위해 검증된 웹사이트와 계정 관리자가 있는 프로덕션 Merchant Center 계정을 요구합니다. 등록은 하나의 Cloud 프로젝트를 Merchant Center 계정에 연결합니다. 등록이 완료될 때까지 해당 프로젝트의 Merchant API 호출은 차단됩니다. Google의 개발자 등록 가이드를 따르세요.
일회성 등록은 기술적인 raw_request 도구를 통해 가능하지만, 이번이 첫 Merchant API 설정이라면 Google의 가이드를 따르는 것이 더 안전합니다. 등록 후 Google이 호출을 수락하는 데 최대 5분이 걸릴 수 있습니다.
OAuth 클라이언트 시크릿과 리프레시 토큰을 비밀번호처럼 취급하세요. 이 값들은 MCP 클라이언트 구성에 저장되며 Merchant Center 계정에 대한 액세스 권한을 부여할 수 있습니다.
구성
변수 | 필수 여부 | 설명 |
| 예* | OAuth 2.0 클라이언트 ID. |
| 예* | OAuth 2.0 클라이언트 시크릿. |
| 예* | Merchant API 범위를 가진 OAuth 리프레시 토큰. |
| 예* | 위의 세 가지 OAuth 값 대신 사용하는 단기 액세스 토큰. |
| 아니요 | 기본 Merchant Center 계정 ID. 개별 요청에서 다른 접근 가능한 계정을 선택할 수 있습니다. |
| 아니요 | Merchant API 기본 URL 재정의. |
| 아니요 | OAuth 토큰 엔드포인트 재정의. |
| 아니요 | 요청당 제한 시간(밀리초)이며 기본값은 |
| 아니요 | 일시적 실패에 대한 최대 재시도 횟수이며 기본값은 |
* 클라이언트 ID, 클라이언트 시크릿, 리프레시 토큰을 함께 사용하거나 사전 발급된 액세스 토큰을 사용하세요. 액세스 토큰은 보통 약 1시간 후 만료되며, 리프레시 토큰을 사용하면 서버가 필요할 때 새 액세스 토큰을 받을 수 있습니다.
데이터 및 텔레메트리
서버는 AI 앱이 시작한 프로세스로 로컬에서 실행됩니다. Google에 Merchant Center 요청을 보내고 Google의 OAuth 엔드포인트를 통해 OAuth 액세스 토큰을 갱신합니다.
활성 설치 수와 도구 수요를 파악하기 위해 익명 사용량 텔레메트리를 전송합니다. 전송 항목은 무작위 설치 ID, 패키지 버전, AI 클라이언트 및 Node.js/운영체제 버전, 도구 이름입니다. OAuth 토큰, Merchant Center 데이터, 도구 인수 또는 프롬프트는 전송하거나 저장하지 않습니다. A1 MCP 서버에 대해 이 텔레메트리를 비활성화하려면 다음을 사용하세요:
ASKADS_TELEMETRY=0제한 사항 및 백그라운드 작업
Merchant Center 처리는 비동기입니다. 새로 삽입, 업데이트 또는 삭제된 제품 입력이 처리된 제품에 표시되는 데 몇 분이 걸릴 수 있습니다. 제품 및 프로모션 승인 문제는 즉각적인 API 오류가 아닌 나중에 나타납니다.
Market Insights는 선택 사항입니다. 가격 경쟁력 및 제안 가격 보고서는 계정이 무료 Market Insights 프로그램에 옵트인한 후에만 데이터를 반환합니다.
할당량은 계정과 API 메서드에 따라 다릅니다.
list_method_quotas로 현재 소비량을 확인하세요. Google의 일일 카운터는 12:00 UTC에 리셋됩니다.일시적 제한은 신중하게 처리됩니다. Google이
429를 반환하면 서버는 제공된Retry-After를 따르고 제한된 횟수만 재시도합니다. 불확실한 네트워크 또는 서버 오류 후에는 쓰기 요청을 재생하지 않습니다.백그라운드 모니터링은 없습니다. 서버는 AI 앱이 호출하는 동안에만 작동합니다. AI 앱이 예약 작업을 지원한다면 제품 문제나 할당량 사용량을 주기적으로 확인하도록 요청할 수 있습니다.
집계된 제품 문제에는 계정 제한이 있습니다.
list_product_issues는 독립 및 하위 계정에서는 작동하지만 고급 상위 계정에서는 작동하지 않습니다.
기술 문서
MCP 기능 카탈로그 — 모든 도구에 대한 작업 중심 페이지.
지원
Available Tools
28 toolsauth_statusGoogle connection statusARead-onlyIdempotent
Shows whether this server is connected to Google: token presence and source (env variables or a stored in-chat login), expiry, the Google account email, granted vs missing OAuth scopes, where the credentials file lives and where the OAuth client comes from. Makes no network calls and never returns the token itself. Call it first when other tools report the server is not connected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavioral assurances beyond the readOnly/idempotent/non-destructive annotations: 'Makes no network calls and never returns the token itself.' This is important safety context for an auth-status tool and goes well beyond what annotations already state.
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 dense but each clause earns its place: the first sentence lists the diagnostic fields, the second adds safety behavior, and the third gives a usage directive. It is front-loaded with the core purpose and contains no fluff.
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?
For a zero-parameter read-only status tool with no output schema, the description is complete: it lists every relevant status dimension and the specific trigger for calling it. An agent has enough to decide when and why to invoke 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?
The tool takes zero parameters, so the baseline is 4. The description compensates by enumerating exactly what information the status output will contain, which is more useful than a bare schema with no properties.
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 diagnostic purpose: reporting Google connection status, token presence/source, expiry, account email, OAuth scopes, and credential locations. This clearly distinguishes it from sibling auth-flow tools like start_login, finish_login, and logout.
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?
Provides an explicit trigger: 'Call it first when other tools report the server is not connected.' It does not explicitly list when not to use it or name an alternative, but the diagnostic role relative to the login/logout siblings is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_data_sourceCreate an API data sourceA
Creates an API (generic) data source — the target that insert_product_input / update_product_input / insert_promotion need as data_source. Only API sources can be created through the API (file, UI and autofeed sources are set up in Merchant Center). For product sources content_language and feed_label must be both set or both omitted; countries applies to primary sources only. A promotions source requires target_country and content_language. Returns the created DataSource with its dataSourceId.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Data source type: primary_products (main product feed), supplemental_products (overrides/extra attributes) or promotions. | |
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| countries | No | CLDR country codes the products target. Primary product sources only. | |
| feed_label | No | Feed label, e.g. "US". Product sources only; set together with content_language. | |
| display_name | Yes | Human-readable data source name shown in Merchant Center. | |
| target_country | No | CLDR country code, e.g. "US". Required for (and only used by) promotions sources. | |
| content_language | No | Two-letter ISO 639-1 language, e.g. "en". Product sources: set together with feed_label or not at all. Required for promotions sources. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations indicate the tool is not read-only (readOnlyHint=false) and not destructive, the description adds important behavioral constraints such as conditional parameter requirements ('content_language and feed_label must be both set or both omitted') and the return value (DataSource with dataSourceId). This goes beyond what annotations alone convey, though it does not disclose error conditions or idempotency details.
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 four sentences long and dense with necessary information, front-loading the core purpose. Each sentence serves a purpose, from usage context to conditional rules. It is longer than minimal examples, but the complexity of the tool (7 parameters, conditional logic) justifies the length.
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?
The description captures the tool's essential context: what it creates, why it's needed, key parameter constraints, and the return value. It does not explain behavior on invalid input or specific account defaults, but those are covered in the schema. Given the lack of an output schema, the description does enough to guide correct invocation.
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 input schema already provides 100% coverage with descriptions for all parameters. The description rephrases and summarizes some parameter relationships (e.g., 'countries applies to primary sources only') but does not introduce substantial new meaning beyond the schema. It provides a useful high-level recap but remains at the baseline for schema-heavy tools.
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 clearly states the tool's action: 'Creates an API (generic) data source' and explains its role as the target needed by other tools (insert_product_input, update_product_input, insert_promotion). It distinguishes itself from sibling tools like list_data_sources and get_data_source by focusing on creation.
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 explicitly provides when-not guidance: 'Only API sources can be created through the API (file, UI and autofeed sources are set up in Merchant Center)' and indicates when to use it as a prerequisite for other data input tools. This effectively steers the agent away from inappropriate uses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_product_inputDelete a product inputADestructive
Deletes a product input from a specific data source (data_source is required — the same product can exist in several sources, and only the targeted input is removed). product_input is "contentLanguagefeedLabelofferId" or the base64url name. Returns an empty object on success; the processed product disappears after async processing (minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| data_source | Yes | Data source: numeric ID (e.g. "104628") or full name "accounts/{account}/dataSources/{id}". Product/promotion writes require an API-type data source (input: API), not a file feed. | |
| product_input | Yes | Product input ID: "contentLanguage~feedLabel~offerId" or the base64url name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds crucial behavioral details: the operation is async (processed product disappears after minutes) and returns an empty object on success. This helps the agent set expectations and handle the response appropriately.
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 sentences, front-loaded with the core action, then adding necessary context about source specificity and async behavior. Every sentence earns its place with no redundancy or fluff.
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?
The tool is simple, with all parameters documented in the schema and the description providing the key behavioral caveats (async processing, empty return). The absence of an output schema is compensated by explicitly stating the return value. Annotations cover safety, making this complete for an agent.
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 schema already documents all three parameters with 100% coverage, including formats and the data_source requirement. The description adds little beyond emphasizing data_source is required and explaining the multi-source nuance, which is helpful but not essential since the schema already marks it as required.
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 clearly states the verb 'Deletes' and the resource 'a product input from a specific data source'. It distinguishes from siblings like insert_product_input and update_product_input by emphasizing the targeted removal from a specific source, which is a unique scope.
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 provides clear context on when to use this tool: when deleting a specific product input from a specific data source, with the nuance that the same product can exist in multiple sources. It doesn't explicitly mention alternatives or when not to use, but the purpose is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_data_sourceRe-fetch a file feed nowA
Triggers an immediate re-fetch (re-read) of a file-based feed outside its regular schedule. Works only for data sources with a file input and fetch settings (scheduled fetch or Google Sheets); calling it on an API-type source is an error. Returns an empty object on success — the fetch itself runs asynchronously on Google's side.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| data_source | Yes | Data source: numeric ID (e.g. "104628") or full name "accounts/{account}/dataSources/{id}". Product/promotion writes require an API-type data source (input: API), not a file feed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits: the fetch runs asynchronously, returns an empty object on success, and errors on API-type sources. While annotations indicate non-read-only, non-idempotent, non-destructive, the description adds valuable context about async execution and the return contract, though it doesn't mention permissions or rate limits.
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 succinct sentences: purpose, usage condition, and return/async behavior. Every sentence provides unique, necessary information with no redundancy or fluff. The core action is front-loaded, making it 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 tool's moderate complexity (trigger action, async execution, error condition), the description covers all critical aspects: what it does, when it's valid, what it returns, and how it executes. No output schema exists, so the explicit 'empty object on success' is especially important. The sibling tools are many, but the description sufficiently differentiates this tool from them.
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% for both parameters, with detailed descriptions in the schema itself. The tool description does not add new parameter syntax or formats, but it does contextualize the data_source parameter by reinforcing the file-feed requirement, which the schema only implies in a separate sentence about product/promotion writes.
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 'Triggers' and a clear resource 'file-based feed', immediately distinguishing this from read-only tools like get_data_source. It also explicitly mentions 'outside its regular schedule', clarifying the unique purpose.
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 states when the tool is applicable ('file input and fetch settings (scheduled fetch or Google Sheets)') and when it is not ('calling it on an API-type source is an error'). This provides clear usage boundaries and echoes the data_source schema description to reinforce the constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_loginFinish the Google loginAIdempotent
Second step: confirms the browser consent finished, saves the tokens to an owner-only file and verifies the login with a read-only identity call, returning the account email and the granted scopes. After success every tool works immediately — no client restart. If the user granted only part of the requested permissions, the login is still saved and missingScopes lists what will not work. Logging in under a different Google account replaces the previous login (its refresh token is revoked best-effort) and the response carries previousAccountEmail so the change never goes unnoticed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behavior beyond the annotations: it saves tokens to an owner-only file, verifies via a read-only identity call, handles partial permission grants by still saving the login and reporting missingScopes, replaces previous logins with best-effort refresh token revocation, and returns previousAccountEmail. This goes well beyond the basic annotation hints.
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 dense but efficient: four sentences cover purpose, postcondition, partial-permission handling, and account-replacement behavior. Every sentence adds meaningful information, and the key purpose is front-loaded in the first sentence.
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?
For a zero-parameter tool with no output schema, the description is complete: it explains what happens, what is returned, what happens on partial permission, and what happens when switching accounts. No important invocation or result information 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?
The tool has zero parameters, so the input schema already covers everything. The description adds value by explaining what the response contains and the side effects of invoking the tool, which is useful context even though no parameter documentation 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?
The description clearly states the tool finishes the second step of Google login, saves tokens to an owner-only file, verifies the login via a read-only identity call, and returns account email and granted scopes. This distinguishes it from the sibling start_login by explicitly labeling it as the second step and describing its specific outcome.
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 context: this is the second step after browser consent, and after success every tool works immediately without restart. It also clarifies behavior under partial permission grants and account replacement, but it does not explicitly name alternatives or state when not to use it, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountGet a Merchant Center accountARead-onlyIdempotent
Returns a single Merchant Center account: name (accounts/{id}), accountId, accountName, languageCode, timeZone, adultContent and testAccount. Useful to verify the configured account or inspect a sub-account.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable context by enumerating the returned fields and noting the account resource format, which helps set expectations beyond the safety profile. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two focused sentences: the first states the action and result fields, the second gives practical use cases. Every word earns its place, with 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?
Given the low complexity (one optional parameter, no output schema) and complete annotations, the description adequately conveys what the tool returns and when to use it. It is sufficient for an agent to select and invoke this 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?
The single parameter 'account' is fully documented in the schema with a clear description and default behavior. Since schema coverage is 100%, the description does not need to add parameter syntax, and it offers no additional parameter-level meaning.
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 'Returns' and identifies the resource as 'a single Merchant Center account', listing key fields. It distinguishes itself from the sibling 'list_accounts' tool by emphasizing 'single' account retrieval.
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 explicitly states the tool is 'Useful to verify the configured account or inspect a sub-account', providing clear contexts for use. However, it does not explicitly name alternatives or state when not to use it, so it misses the full 'when/alternatives' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_sourceGet a data sourceARead-onlyIdempotent
Returns one data source by its numeric ID (or full resource name): type, input (API/FILE/UI/AUTOFEED), feed configuration and fetch settings. Check input before calling fetch_data_source — only file-based feeds with fetch settings can be re-fetched.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| data_source | Yes | Data source: numeric ID (e.g. "104628") or full name "accounts/{account}/dataSources/{id}". Product/promotion writes require an API-type data source (input: API), not a file feed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the read-only nature is covered. The description adds value by specifying exactly what is returned and the constraint around re-fetching, which goes beyond 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?
Two concise, information-dense sentences. The first front-loads the core purpose and return fields, while the second delivers actionable guidance. No wasted words.
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?
For a read-only retrieval tool with two well-documented parameters and no output schema, the description sufficiently covers the return value, usage context, and the key caveat about fetch settings. It is complete for its complexity.
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% for both parameters, with the data_source parameter already describing both ID and full name forms. The description reaffirms the ID/name format but does not add additional meaning beyond the schema, so 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 clearly states the tool returns one data source by numeric ID or full resource name, listing the fields returned (type, input, feed configuration, fetch settings). This distinguishes it from sibling tools like fetch_data_source, which performs a different operation.
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 instructs to check the 'input' field before calling fetch_data_source, and clarifies that only file-based feeds with fetch settings can be re-fetched. This provides direct guidance on when to use this tool vs the fetch tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_homepageGet the store homepageARead-onlyIdempotent
Returns the store homepage of an account: uri and claimed (whether the homepage is verified and claimed by the merchant — a prerequisite for serving offers). An unclaimed homepage is a common reason for account-level problems; claiming/unclaiming is not exposed as a tool (use raw_request POST accounts/v1/accounts/{a}/homepage:claim if you really need it).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful context beyond the annotations: it explains the significance of the 'claimed' field, noting it's a prerequisite for serving offers, and clarifies that no claiming/unclaiming tool exists. This complements the readOnlyHint and idempotentHint annotations without contradicting them, though it doesn't detail response format or error behavior.
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 long, front-loads the primary purpose, and every clause adds value. It avoids redundancy and clearly communicates the tool's role, the meaning of its output, and a relevant workaround. No unnecessary fluff.
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 simple nature of the tool (one optional parameter, no output schema), the description is sufficiently complete. It provides enough context for an agent to decide when to use it and what to do with the result. A minor gap is the lack of explicit return type, but the description names 'uri and claimed' which suffices.
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 input schema fully documents the single optional 'account' parameter, including the default behavior (omit to use GOOGLE_MERCHANTS_ACCOUNT_ID) and format. The description does not add additional parameter-level detail beyond what the schema already provides, so a baseline score 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 clearly states the tool's function: 'Returns the store homepage of an account: uri and claimed'. It identifies the specific resource (store homepage) and the two data points returned. This unambiguously distinguishes it from sibling tools like get_account or get_shipping_settings.
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 provides implicit usage context by explaining that an unclaimed homepage is a common cause of account-level problems, suggesting when to call this tool for diagnostics. It also gives an explicit alternative for the related mutation (raw_request) and notes that claiming/unclaiming is not exposed as a tool, guiding the agent away from unsupported operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productGet a processed productARead-onlyIdempotent
Returns one processed product including productStatus.itemLevelIssues (code, severity, resolution, description) — the place to see why a product is disapproved. Identify the product either with product ("contentLanguagefeedLabelofferId", e.g. "enUSsku123", or the base64url base64EncodedName; legacy local products use a local~ prefix) or with the three components content_language + feed_label + offer_id. A product inserted moments ago may 404 until async processing finishes (minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| product | No | Product ID: "contentLanguage~feedLabel~offerId" (e.g. "en~US~sku123") or the base64url base64EncodedName. Omit when passing the three components separately. | |
| offer_id | No | The merchant's offer ID (SKU). Used with content_language + feed_label. | |
| feed_label | No | Feed label, e.g. "US". Used with content_language + offer_id. | |
| content_language | No | Two-letter ISO 639-1 content language, e.g. "en". Used with feed_label + offer_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, idempotentHint, non-destructive). The description adds behavioral context beyond annotations: the tool returns itemLevelIssues, supports multiple ID formats (including base64url and legacy local prefix), and may return 404 for recent products due to async processing. This is valuable context without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two focused sentences. The first sentence states the core function and key use case; the second covers identification and a timing caveat. No filler, key information 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?
For a simple read tool with rich annotations and full schema coverage, the description is complete enough. It explains the main output focus (itemLevelIssues), how to specify the product, and a caveat about 404s. It does not enumerate all possible return fields, but no output schema exists and the description highlights the most relevant details for the tool's purpose.
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?
Although the schema provides 100% parameter descriptions, the tool description adds crucial semantic meaning by explaining the two alternative identification methods ('product' vs. content_language+feed_label+offer_id) and the format details. This goes beyond what the schema fields individually state.
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 clearly states the tool returns 'one processed product including productStatus.itemLevelIssues' and explicitly identifies it as 'the place to see why a product is disapproved.' This specific verb+resource+scope distinguishes it from list_products and other sibling 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 provides clear usage context: use this to inspect item-level disapproval reasons. It also explains how to identify the product via two alternative formats and warns that a recently inserted product may 404 until processing completes. It does not explicitly mention alternatives like list_products, but the purpose is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_promotionGet a promotionARead-onlyIdempotent
Returns one promotion including promotionStatus (per-destination approval and itemLevelIssues) — the place to check whether a freshly inserted promotion was approved.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| promotion | Yes | Promotion ID (the {promotion} segment of the resource name). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safe read-only nature is known. The description adds value by disclosing that the response includes approval status and item-level issues, which is behavioral detail 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that leads with the action and resource, then adds the key purpose and return details. Every word earns its place; no fluff or repetition.
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?
There is no output schema, so the description carries the burden of explaining what is returned. It mentions promotionStatus and itemLevelIssues, which covers the most important return aspects for the stated use case. It does not describe the full response structure, but given the tool's simplicity and annotations, it is sufficient.
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 clear descriptions for both parameters (account and promotion). The description does not add extra parameter syntax or format details; it only references the promotion ID implicitly. Baseline 3 is appropriate because the schema fully documents parameters.
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 ('Returns') and clearly identifies the resource ('one promotion'). It also names key return fields (promotionStatus, per-destination approval, itemLevelIssues), distinguishing it from list_promotions and insert_promotion.
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 explicitly states the intended use case: 'the place to check whether a freshly inserted promotion was approved.' This gives clear context for when to call it, though it does not explicitly mention when not to use it or name alternative tools like list_promotions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_shipping_settingsGet shipping settingsARead-onlyIdempotent
Returns the account-level shipping settings: services[] (delivery countries, delivery times, rate tables and carrier rates), warehouses[] and an etag. Read-only by design: the API's only write is shippingSettings:insert, a FULL REPLACE of every service — too dangerous for a tool; use raw_request if you really need it.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint; the description goes beyond by explaining the API's only write is a full replace, why that's dangerous, and what fields are returned (services, warehouses, etag). This is substantial additional 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 sentences: the first front-loads the return payload, the second provides a critical safety caveat. No wasted words.
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?
For a simple read-only getter with one optional parameter, the description fully specifies return contents, notes safety, and warns about the dangerous write path. It covers all needed context without an 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 sole parameter 'account' is fully described in the schema (100% coverage), including role and default behavior. The description itself adds no extra parameter semantics beyond the schema, 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?
The description clearly states the tool returns account-level shipping settings, listing specific components (services[], warehouses[], etag). It distinguishes itself from sibling get_ tools by specifying the resource.
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 provides when-to-use and when-not-to-use: read-only by design, warns against the dangerous full-replace write, and suggests raw_request for writes. This gives strong guidance on when to invoke this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_product_inputInsert or replace a productADestructive
Uploads (upserts) a product into an API data source: an existing input with the same contentLanguagefeedLabelofferId in that data source is fully replaced. Requires data_source (an API-type source — create one with create_data_source or in Merchant Center; file feeds cannot be written). Inserting with a different data source MOVES the product to it. Returns the ProductInput (name, product = the future processed name, base64EncodedProduct). Processing is async: the processed product shows up in get_product/list_products after several minutes, and data-quality problems surface later in productStatus.itemLevelIssues, not as API errors. Prices go in product_attributes as {"price": {"amountMicros": "9990000", "currencyCode": "USD"}} (1 unit = 1,000,000 micros).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| offer_id | Yes | The merchant's unique offer ID (SKU). | |
| feed_label | Yes | Feed label, usually the target country CLDR code, e.g. "US" (≤20 chars, no spaces). | |
| data_source | Yes | Data source: numeric ID (e.g. "104628") or full name "accounts/{account}/dataSources/{id}". Product/promotion writes require an API-type data source (input: API), not a file feed. | |
| version_number | No | Optional int64 freshness guard (as a string): an insert with a lower version than the stored one is rejected. | |
| content_language | Yes | Two-letter ISO 639-1 language of the listing, e.g. "en". | |
| custom_attributes | No | Custom (non-standard) attributes as {name, value} pairs. | |
| product_attributes | No | Product attributes object: title, description, link, imageLink, price {amountMicros, currencyCode}, availability (in_stock/out_of_stock/preorder/backorder), condition (new/refurbished/used), gtin (array), brand, color, sizes, etc. Attribute names are camelCase. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: it discloses full replacement (aligned with destructiveHint=true), the MOVES behavior when the data source differs, async processing lag, and that data-quality issues appear later in productStatus.itemLevelIssues instead of API errors. No contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence carries distinct value: core upsert behavior, data-source constraint, MOVES edge case, return shape, async behavior, and price format. The most important semantics are front-loaded and there is 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?
For a complex 8-parameter write tool with no output schema, the description is remarkably complete: it explains return values, async behavior, error behavior, destructive replacement, and the trickiest parameter format. The remaining parameter details are already in the 100%-covered 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?
Even though the schema already covers parameters at 100%, the description adds critical semantics: the exact price object shape with amountMicros/currencyCode, the 1 unit = 1,000,000 micros conversion, and the meaning of data_source (API-type only). This materially helps an agent construct correct input.
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 action (Uploads/upserts a product) and resource (API data source), and clearly explains the replace semantics on the contentLanguage~feedLabel~offerId triple. It does not explicitly differentiate from the update_product_input sibling, though the 'fully replaced' wording implies the distinction.
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?
Provides clear when-to-use context: only API-type data sources, with an explicit exclusion (file feeds cannot be written) and an alternative way to create the required source (create_data_source). It stops short of fully routing the agent between insert/replace and the update_product_input sibling, so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_promotionInsert or update a promotionA
Creates or updates a promotion. Unlike product writes, the data source travels in the request BODY (the server assembles it). The promotion object requires promotionId, contentLanguage (ISO 639-1), targetCountry (CLDR, e.g. "US") and redemptionChannel (array with ONLINE and/or IN_STORE — at least one). Optional attributes carry longTitle, couponValueType, offerType, genericRedemptionCode, promotionEffectiveTimePeriod {startTime, endTime}, productApplicability, moneyOffAmount, percentOff, etc. Returns the Promotion incl. promotionStatus; approval happens asynchronously (check get_promotion later).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| promotion | Yes | Promotion object. Required: promotionId, contentLanguage, targetCountry, redemptionChannel (["ONLINE"] and/or ["IN_STORE"]). Optional: attributes {longTitle, couponValueType, offerType, genericRedemptionCode, promotionEffectiveTimePeriod {startTime, endTime}, productApplicability, moneyOffAmount, percentOff, ...}, customAttributes, versionNumber. | |
| data_source | Yes | Data source: numeric ID (e.g. "104628") or full name "accounts/{account}/dataSources/{id}". Product/promotion writes require an API-type data source (input: API), not a file feed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=false, but the description adds valuable context: the data source body quirk, required fields, and async approval with promotionStatus returned. This goes beyond annotations by explaining the write behavior and return value. It doesn't cover potential side effects of updates or error cases, but the disclosed behavior is substantial.
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 four sentences, front-loaded with the core action and then key caveats. Each sentence adds non-redundant information, though it's slightly long for a simple tool. The logical flow from action to quirk to requirements to return/async works well.
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 nested promotion object and no output schema, the description covers requirements, optional attributes, return type, and async workflow. It also points to get_promotion for later status checks, making the tool's place in a workflow clear. No major gaps are apparent.
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 already covers all three parameters, but the description adds extra meaning: it clarifies the data source travels in the body despite being a parameter, lists required fields within the promotion object, and decodes optional attributes like couponValueType and promotionEffectiveTimePeriod. It also adds ISO/CLDR format details not in the schema, significantly enriching parameter understanding.
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 opens with 'Creates or updates a promotion,' clearly stating the action and resource. It distinguishes from sibling tools like insert_product_input and get_promotion by specifying it handles promotions and noting an upsert behavior, making its purpose 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?
It says 'Unlike product writes, the data source travels in the request BODY,' providing a specific usage note that differentiates this from product-oriented tools. It also directs checking get_promotion later for async approval, offering a follow-up path. However, it doesn't explicitly state when not to use this tool, so it misses a complete exclusion list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsList Merchant Center accountsARead-onlyIdempotent
Lists the Merchant Center accounts the authenticated user can access. Returns accounts[] (name, accountId, accountName, languageCode, timeZone, adultContent, testAccount) and nextPageToken. Use it first to discover the account ID the other tools need (or set GOOGLE_MERCHANTS_ACCOUNT_ID once). Optional filter uses the account filter syntax, e.g. accountName = "store".
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Account filter, e.g. accountName = "*store*" or relationship(providerId = 123). | |
| page_size | No | Max results per page (1..500; API default 250). | |
| page_token | No | nextPageToken from the previous response. All other parameters must be identical to the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive hints. The description adds useful behavioral context: it lists accessible accounts, returns a specific structure, includes pagination via nextPageToken, and gives a filter syntax example. This goes beyond the annotations without contradicting them.
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 sentences, each earning its place: purpose, return structure, and usage guidance. Front-loaded with the primary verb and resource. No fluff 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?
Despite having no output schema, the description compensates by listing the exact return fields and nextPageToken. It covers authentication scope, pagination, filter syntax, and the typical first-step use case. Slightly less complete than a perfect list tool description because it omits error scenarios or default page size, but the schema already provides limits.
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 descriptions cover 100% of the three parameters (filter, page_size, page_token) with examples and constraints. The description repeats the filter example but adds no new semantic detail beyond the schema. With full schema coverage, the baseline is 3, and no additional value is provided.
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?
Clear verb 'Lists' with specific resource 'Merchant Center accounts'. The description names the returned fields and nextPageToken, and explicitly distinguishes this tool from siblings by stating it is the first step to discover the account ID other tools need.
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?
Provides explicit when-to-use guidance: 'Use it first to discover the account ID the other tools need'. Also mentions an alternative (setting GOOGLE_MERCHANTS_ACCOUNT_ID once). However, it doesn't explicitly mention when not to use it or name alternative sibling tools, 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.
list_data_sourcesList data sourcesARead-onlyIdempotent
Lists the data sources of an account. Each has name (accounts/{a}/dataSources/{id}), dataSourceId, displayName, input (API | FILE | UI | AUTOFEED), exactly one type object (primaryProductDataSource, supplementalProductDataSource, promotionDataSource, ...) and fileInput for file feeds. Use it to find the API-type data source that insert_product_input / insert_promotion require as data_source.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| page_size | No | Max results per page (1..1000; API default 25). | |
| page_token | No | nextPageToken from the previous response. All other parameters must be identical to the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds transparency about the return structure: each data source has specific fields, exactly one type object, and fileInput for file feeds. This is valuable context beyond the annotations, helping the agent know what to expect in the response even though there is no output schema. It does not contradict annotations.
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 three sentences and information-dense. The first sentence defines the action, the second lists the output fields, and the third explains a primary use case. Every sentence adds value, though the second sentence is a bit long. It is structured and front-loaded with 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 the tool is a simple listing operation with no output schema and strong parameter documentation, the description covers the essential context: it explains the return data structure and gives a concrete usage scenario. It does not explicitly mention pagination behavior, but the schema's page_token description already covers that. The description is sufficient for an agent to select and invoke 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%, with each parameter (account, page_size, page_token) fully described inline. The description does not add any additional meaning about parameters beyond what the schema already provides. It focuses on the return data and usage, which is useful but not parameter-specific. 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 explicitly states the tool 'Lists the data sources of an account' – a specific verb and resource. It also describes the key fields of each data source (name, dataSourceId, displayName, input, type object, fileInput), which clearly distinguishes it from sibling tools like get_data_source and list_promotions. The purpose is unambiguous and complete.
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 a clear use case: 'Use it to find the API-type data source that insert_product_input / insert_promotion require as data_source.' This directly tells when to use the tool. However, it does not explicitly mention when not to use it or provide an alternative reference (e.g., get_data_source for a single data source), 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.
list_method_quotasAPI quota usageARead-onlyIdempotent
Shows the account's Merchant API usage vs limits per method group (quota sub-API): quotaGroups[] with name, quotaUsage, quotaLimit (per day), quotaMinuteLimit and methodDetails[] listing the methods in each group. Daily counters reset at 12:00 UTC — midday, not midnight. Use it to diagnose HTTP 429 RESOURCE_EXHAUSTED errors and to see how much headroom is left.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| page_size | No | Max quota groups per page. | |
| page_token | No | nextPageToken from the previous response. All other parameters must be identical to the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral detail: 'Daily counters reset at 12:00 UTC — midday, not midnight.' This clarifies a potentially confusing aspect beyond what annotations provide. No contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the core purpose and output shape, while the second adds the critical reset-time detail and the diagnostic use case. Every phrase contributes value, and it is appropriately sized for the tool's complexity.
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?
There is no output schema, but the description compensates by explicitly listing the output fields (quotaGroups[] with name, quotaUsage, quotaLimit, quotaMinuteLimit, methodDetails[]). It also covers the daily reset behavior and the primary use case (429 errors, headroom). For a read-only diagnostic tool, this is complete and well-rounded.
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 parameters (account, page_size, page_token) are fully documented in the schema. The description does not add parameter-specific guidance beyond the schema, but it does describe the output structure (quotaGroups, methodDetails) which indirectly relates to how parameters affect results. 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 begins with 'Shows the account's Merchant API usage vs limits per method group', clearly identifying the verb (shows), resource (Merchant API quota usage), and scope (per method group). It distinguishes from sibling tools like list_products or list_promotions by focusing on quota diagnostics and explicitly mentions the quota sub-API.
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 provides clear context by stating 'Use it to diagnose HTTP 429 RESOURCE_EXHAUSTED errors and to see how much headroom is left.' This gives a specific use case, but it does not explicitly mention when not to use it or name alternative tools, so it stops 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.
list_product_issuesAggregated product issuesARead-onlyIdempotent
Lists aggregate product statuses per reporting context and country (issueresolution sub-API): stats {active, pending, disapproved, expiring counts} plus itemLevelIssues[] with how many products each issue affects — the fastest way to see what is wrong with a feed at a glance. Works only for sub-accounts and standalone accounts, NOT for advanced (parent) accounts. The filter supports only reporting_context and country, e.g. reporting_context = "SHOPPING_ADS" AND country = "US". For a single product's issues use get_product (productStatus.itemLevelIssues).
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Filter on reporting_context and/or country only, e.g. reporting_context = "SHOPPING_ADS" AND country = "US". | |
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| page_size | No | Max results per page (1..1000; API default 25). | |
| page_token | No | nextPageToken from the previous response. All other parameters must be identical to the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, idempotent, and non-destructive nature. The description adds significant context about account type restrictions and filter constraints, which are not in annotations. It doesn't detail pagination behavior or edge cases, but the schema covers page_size and page_token.
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 sentences, front-loaded with the main purpose. Each sentence provides essential information: what it returns, key restrictions, and an alternative. No wasted words 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?
Without an output schema, the description explains return values (stats and itemLevelIssues). It covers account-type restrictions and filter limitations. It doesn't detail response structure or pagination flow, but schema covers pagination parameters. Adequate for a read-only listing 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 description coverage is 100%, so parameters are already well-documented. The description reinforces the filter constraint with an example but adds no meaningful semantics beyond the schema. The baseline is appropriate at 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?
The description clearly states the tool lists aggregate product statuses per reporting context and country, with specific stats and itemLevelIssues. It distinguishes itself from get_product for single product issues, and the verb 'lists' with resource 'aggregate product statuses' is specific.
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 states it works only for sub-accounts and standalone accounts, not advanced accounts, and limits the filter to reporting_context and country. It also directs users to get_product for single product issues, providing clear when-to-use and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_productsList processed productsARead-onlyIdempotent
Lists the processed products of an account, as shown in Merchant Center. Each product has name (accounts/{a}/products/{contentLanguagefeedLabelofferId} — NO channel segment in v1), offerId, contentLanguage, feedLabel, dataSource, productAttributes (title, price, availability, ...), productStatus with itemLevelIssues, and base64EncodedName (use it when offerId contains URL-hostile characters like '/'). The list has no server-side filter — filter via search_reports on product_view. Recently inserted products appear only after async processing (minutes).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| page_size | No | Max results per page (1..1000; API default 25). | |
| page_token | No | nextPageToken from the previous response. All other parameters must be identical to the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent, non-destructive), the description discloses the open-world behavior (no server-side filter), async visibility of new products, and important format quirks (NO channel segment, base64EncodedName for hostile characters). No contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence provides value: purpose, key fields, filtering guidance, and async caveat. It is well-structured and not redundant.
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?
Despite lacking an output schema, the description covers the essential return fields, resource ID structure, important caveats, and alternative tools. It gives a complete picture for an AI agent to select and use 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?
The schema already documents all three parameters with 100% coverage, so the description doesn't need to explain them. It adds some contextual value about resource naming and URL-hostile handling, but this is about output fields rather than parameter usage. 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 clearly states the tool 'Lists the processed products of an account' with a specific verb and resource, and distinguishes it from sibling tools like list_promotions and list_accounts.
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 explicitly states when to use this tool vs alternatives: 'The list has no server-side filter — filter via search_reports on product_view.' Also mentions async processing for recently inserted products, providing timing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_promotionsList promotionsARead-onlyIdempotent
Lists the promotions of an account: promotions[] (name, promotionId, contentLanguage, targetCountry, redemptionChannel, attributes, promotionStatus with destination statuses and itemLevelIssues) and nextPageToken.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| page_size | No | Max results per page (1..250; API default 50). | |
| page_token | No | nextPageToken from the previous response. All other parameters must be identical to the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds behavioral context by explicitly mentioning nextPageToken for pagination and the detailed return composition, which goes beyond the annotations. No contradictions exist.
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 a single sentence that conveys the purpose, return structure, and pagination succinctly. It is information-dense but not overly verbose; each element serves a purpose, though the long field list makes it slightly heavy.
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 no output schema, the description fully covers the return values including field names and nested statuses, plus pagination via nextPageToken. The parameters are well-documented in the schema, and the tool's moderate complexity is adequately addressed. No significant gaps remain.
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 schema has 100% coverage for all three parameters, each with clear descriptions. The tool description does not add additional parameter semantics beyond what the schema provides, so the baseline score 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 clearly states the tool lists promotions for an account, with a specific action verb 'Lists' and a defined resource. It details the return fields including nested structures like promotionStatus with destination statuses and itemLevelIssues, distinguishing it from sibling tools like get_promotion (single promotion) or list_products (different resource).
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 usage as a list operation for promotions but does not explicitly state when to use it versus alternatives such as get_promotion or insert_promotion. There is no mention of exclusions or specific scenarios, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logoutDisconnect from GoogleADestructive
Revokes the stored token at Google (oauth2.googleapis.com/revoke) and deletes the local credentials file. Tokens supplied via env variables are NOT touched — remove them from the MCP client config manually; envTokenStillSet in the response says whether any are still in effect.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by naming the revocation endpoint, specifying that the local credentials file is deleted, clarifying that env-var tokens are unaffected, and mentioning the envTokenStillSet response field. This is exactly the kind of behavioral detail an agent needs for a destructive action.
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 compact sentences with the most critical action front-loaded. Every sentence adds important information, and there is no fluff or repetition of schema fields.
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?
The description covers the action, side effects, exception case for env-var tokens, and a relevant response field. For a zero-parameter tool with no output schema, this is fully sufficient for an agent to use it correctly and predict its impact.
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 there is no parameter meaning to add. The description correctly focuses on the action and side effects rather than inventing parameter details. Baseline 4 is appropriate because the schema is trivially 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?
The description states a precise verb and resource: it revokes the stored Google token and deletes the local credentials file. The title 'Disconnect from Google' aligns with the behavior, and the description clearly distinguishes this from other auth-related sibling 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 gives clear context: use this to revoke and delete stored credentials. It also explicitly tells the user that env-var tokens are not touched and must be removed manually, which is a valuable usage caveat. It does not name alternatives, but no true alternative exists for this action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_competitivenessPrice competitiveness vs the marketARead-onlyIdempotent
Convenience wrapper over a canned MCQL query on price_competitiveness_product_view: for each product, your price vs the market benchmark_price (aggregated from comparable offers across merchants) with report_country_code. A product priced above the benchmark is losing clicks to cheaper rivals. Requires the account to be opted into Market Insights (free, in Merchant Center settings) — otherwise rows are empty. Price amounts are micros (1,000,000 = 1 unit) and may arrive as strings (int64). Optional country narrows to one report country.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| country | No | Two-letter CLDR country code to filter by, e.g. "US". Omit for all countries. | |
| page_size | No | Max results per page (1..5000; API default 1000). | |
| page_token | No | nextPageToken from the previous response. All other parameters must be identical to the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=truelok and idempotentHint=true, so safety is covered. The description adds crucial behavioral details: it is a wrapper over a canned query, it requires Market Insights opt-in, and price amounts are in micros and may be strings. It also explains the business meaning of results, which goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: it opens with the core function, then details the benchmark, the interpretation, the prerequisite, the price format, and the optional parameter. Every sentence adds value; nothing is redundant. It's appropriately sized given the complexity.
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?
The tool is a read-only report query with no output schema. The description explains the business meaning, the data format quirk (micros, strings), the prerequisite, and the optional filtering. Combined with full schema coverage and read-only annotations, the agent has all necessary information to call it 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 each parameter already has a description. The tool description adds context about the country parameter (narrows to one report country) and mentions the price format (micros, strings) which relates to the output but not directly to parameters. Overall, the description doesn't add much beyond what the schema provides.
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 clearly states the tool's purpose: a convenience wrapper over a canned MCQL query that compares product prices against a market benchmark, and explains the outcome (priced above benchmark loses clicks). It distinguishes it from related tools like price_insights by specifying the exact view and report_country_code.
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 explicitly mentions the prerequisite (opted into Market Insights) and the consequence of not meeting it (empty rows). It also notes the optional country filter narrows results, giving clear context for use. No alternative tools are named, but the specificity about the view and the opt-in requirement provide strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_insightsSuggested prices & predicted impactARead-onlyIdempotent
Convenience wrapper over a canned MCQL query on price_insights_product_view: Google's suggested_price per product with the predicted change in impressions, clicks and conversions if you adopt it (predicted_*_change_fraction, e.g. 0.05 = +5%), plus an overall effectiveness bucket (LOW/MEDIUM/HIGH). Requires the Market Insights opt-in — otherwise rows are empty. Price amounts are micros and may arrive as strings (int64).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| page_size | No | Max results per page (1..5000; API default 1000). | |
| page_token | No | nextPageToken from the previous response. All other parameters must be identical to the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is clear. The description adds useful context about how the wrapper works (canned MCQL query) and warns about empty rows without opt-in, which the annotations do not cover. However, it doesn't disclose other behavioral traits such as no pagination details beyond the standard schema, or potential rate limits, but given the strong annotation coverage, the added context justifies a 3.
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 a single focused paragraph that front-loads the core purpose (wrapper over canned query and what it returns) then adds the key caveat and a data format note. Every sentence earns its place, though it could be slightly more scannable with bullet points.
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?
For a read-only wrapper with 3 fully-described parameters and 100% schema coverage, the description does well. It explains the return structure (predicted_*_change_fraction, effectiveness bucket) and the opt-in requirement. However, it omits details on how the effectiveness bucket is computed or what to do if the opt-in is missing (it only says rows are empty), and there's no output schema to lean on. The absence of those details is a minor gap.
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 schema descriptions cover all 3 parameters (account, page_size, page_token) with 100% coverage, including the default behavior for account and the requirements for page_token. The description doesn't add additional parameter-level details beyond what's in the schema, so a 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 clearly states it is a convenience wrapper over a canned MCQL query on a specific view, and lists exactly what it returns: suggested_price, predicted change fractions, and an effectiveness bucket. This distinguishes it from the sibling search_reports and price_competitiveness by specifying the data source and the canned nature. It is specific and action-oriented.
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 explicitly mentions a prerequisite (Market Insights opt-in) that must be met for non-empty rows, and it implies this is the tool to get suggested pricing data from the product view. It doesn't explicitly name alternatives that should be used instead, but the canned nature and specific view suggest that search_reports or raw_request could be alternatives for more custom queries, though this is not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raw_requestRaw Merchant API callADestructive
Escape hatch to call any Merchant API v1 path directly, for endpoints without a dedicated tool (e.g. "accounts/v1/accounts/123/issues" or the one-time "accounts/v1/accounts/123/developerRegistration:registerGcp"). The path must include the sub-API prefix (accounts/v1, products/v1, datasources/v1, promotions/v1, reports/v1, issueresolution/v1, quota/v1, inventories/v1, ...). query adds URL query parameters (e.g. dataSource for productInputs writes, updateMask for PATCH); body is sent as JSON. Can create, modify and delete data — use the dedicated tools when one exists.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | JSON request body (POST/PATCH). | |
| path | Yes | Relative API path incl. the sub-API prefix, e.g. "accounts/v1/accounts/123/issues". | |
| query | No | URL query parameters, e.g. {"dataSource": "accounts/1/dataSources/2"}. | |
| method | No | HTTP method. Defaults to GET. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description warns that the tool 'Can create, modify and delete data', which aligns with the destructiveHint and readOnlyHint annotations. It adds context by framing the tool as an 'escape hatch' and reminding the agent to prefer dedicated tools, but it does not disclose additional behavioral nuances such as rate limits or error handling. Given the annotations already cover the safety profile, the extra caution is useful but not extensive.
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 dense but every sentence contributes: purpose, example paths, prefix list, query/body semantics, and a safety warning. It is front-loaded with the core 'escape hatch' concept and never wastes words, making it both informative and scannable.
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?
For a generic raw API tool with no output schema, this description is complete. It covers the path format, required prefix, query parameter usage, body handling, HTTP method options, and the critical warning about mutation. It gives the agent enough context to safely invoke the tool for arbitrary endpoints.
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?
Beyond the schema's 100% description coverage, the tool description adds semantic depth: it explains the path prefix requirement, gives concrete query parameter examples (dataSource for productInputs writes, updateMask for PATCH), and clarifies that body is sent as JSON. This significantly enriches understanding of how to construct parameters.
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 clearly identifies this as an 'Escape hatch' for calling any Merchant API v1 path directly, specifically for endpoints without a dedicated tool. It names the exact resource (Merchant API v1) and distinguishes itself from siblings by noting it should be used only when no dedicated tool exists.
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 explicitly states when to use this tool ('for endpoints without a dedicated tool') and when not to ('use the dedicated tools when one exists'). It also gives concrete examples of paths and explains the required sub-API prefix, providing actionable guidance that contrasts with the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_reportsRun an MCQL report queryARead-onlyIdempotent
Runs a Merchant Center Query Language (MCQL) query via reports:search. Tables: product_view, product_performance_view, price_competitiveness_product_view, price_insights_product_view, non_product_performance_view, best_sellers_product_cluster_view, best_sellers_brand_view, competitive_visibility_top_merchant_view, competitive_visibility_competitor_view, competitive_visibility_benchmark_view. Rules: field names are snake_case in the query but camelCase in the JSON response; no SELECT ; performance views require a WHERE date range, e.g. SELECT offer_id, clicks, impressions FROM product_performance_view WHERE date BETWEEN '2026-07-01' AND '2026-07-31' ORDER BY clicks DESC. price_ views require the Market Insights opt-in. Each result row has exactly one populated view object. This is also the way to FILTER products (product_view) — list_products has no filter.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | MCQL query, e.g. SELECT offer_id, title, price FROM product_view WHERE availability = 'out of stock'. | |
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| page_size | No | Max results per page (1..5000; API default 1000). | |
| page_token | No | nextPageToken from the previous response. All other parameters must be identical to the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only and idempotent, and the description adds valuable behavioral details beyond that: field naming differences, the no-SELECT* rule, required date ranges, opt-in requirements, and the fact that each result row has exactly one populated view object. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized: it opens with the core function, lists relevant tables, provides query rules, and closes with the product-filtering use case. The list of view names is long but necessary, and every sentence contributes useful information; only slightly less scannable due to the packed table list.
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?
For a query tool with no output schema, the description covers the critical context: supported tables, query rules, example syntax, prerequisites, result-row behavior, and the key sibling alternative. Pagination is already documented in the parameter schema, so nothing essential is missing for an agent to call this 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 coverage is 100%, so the schema already documents all four parameters. The description goes beyond the schema by clarifying query-level semantics such as snake_case versus camelCase, valid table names, the no-SELECT* restriction, and the date-range requirement for performance views, adding meaningful guidance for the query parameter especially.
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 ('Runs a Merchant Center Query Language (MCQL) query via reports:search') and enumerates the exact supported tables. It also differentiates this tool from sibling list_products by noting it is the way to filter products, making its purpose unmistakable.
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 provides concrete usage conditions: performance views require a date range, price_* views require the Market Insights opt-in, and product filtering should use this tool because list_products has no filter. This gives the agent explicit when-to-use and when-not-to-use guidance relative to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_clientSave the OAuth clientAIdempotent
Saves the OAuth client credentials from the JSON file downloaded from Google Cloud Console ('Download JSON' on a Desktop-app client). Pass the file PATH — the secret must never be pasted into the chat. The client is stored once in the shared ~/.config/mcp-google-auth/client.json (owner-only) and reused by every mcp-google-* server; tokens stay per-server. After this, call start_login.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the client_secret_*.json file downloaded from Google Cloud Console. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true (safe to call again) and readOnlyHint=false (it's a write). The description adds valuable context: it stores the client once in a shared path, is reused by all mcp-google-* servers, and tokens stay per-server. It also warns against pasting secrets. This goes beyond annotation basics, though it does not mention any potential side effects like overwriting an old client.
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 three sentences, each earning its place: the first explains what and source, the second details storage scope, the third directs to start_login. The critical warning is naturally integrated. It is not overly verbose and the essential info is 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?
For a single-parameter tool with no output schema, the description covers key operational aspects: the source file, the storage path, the security precaution, and the follow-up step. The only minor gap is the absence of error conditions (e.g., if the file is invalid), but that is acceptable given the simplicity.
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 baseline is 3. The description reinforces that the path is to the JSON file and adds the explicit 'must never be pasted into the chat' security guideline. It doesn't add much beyond the schema, but the security note is valuable enough to nudge to 4.
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 specifies a clear verb ('saves') and resource ('OAuth client credentials from the JSON file') and adds detail about the source and storage location. It does not explicitly distinguish from siblings, but the uniqueness of this tool among the listed siblings is implicit given its specific task.
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 provides clear guidance on when to use the tool: after downloading the JSON file and before starting login. It also mentions the prerequisite of calling start_login after. However, it does not explicitly state when not to use it or mention alternatives, though none are obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_instructionsSetup instructionsARead-onlyIdempotent
Step-by-step checklist for connecting this server to Google: creating a Google Cloud project and a Desktop-app OAuth client, publishing the consent screen (mandatory — Testing-mode refresh tokens die after 7 days), downloading the client JSON and handing its PATH to set_client. Works without any credentials; the checklist shortens to 'enable the API + log in' when an OAuth client is already configured (one client serves the whole mcp-google-* line). Never asks the user to paste secrets into the chat.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive; the description adds valuable context beyond that: it works without credentials, warns that Testing-mode refresh tokens expire in 7 days, mandates publishing the consent screen, and guarantees it never asks users to paste secrets into the chat. No contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences each carry unique, decision-relevant information: the checklist's contents, the shortened path when already configured, and the no-secrets guarantee. There is no filler or repetition.
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?
For a zero-parameter instructional tool, the description fully covers purpose, usage timing, workflow relationships, and key behavioral safeguards. The lack of an output schema is acceptable since the tool's job is to present instructions, and the annotations already cover the operational profile.
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 input schema is empty and parameter coverage is 100%, so there is nothing for the description to add about parameter semantics. The zero-parameter case earns the baseline 4.
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 deliverable: a step-by-step checklist for connecting the server to Google, including project creation, OAuth client, consent screen, and handing the client JSON path to set_client. This clearly distinguishes it from sibling tools like auth_status or set_client.
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 explains when to use it (before credentials exist) and how the checklist shortens when an OAuth client is already configured, referencing set_client as the downstream consumer. It provides clear workflow context, though it does not explicitly say 'use this instead of X' for every alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_loginStart the Google loginAIdempotent
First step of connecting from the chat, without editing config files or restarting the client. Returns authorizeUrl — show it to the user as a clickable link and ask them to open it in the browser ON THIS MACHINE, pick the Google account and approve access. A one-shot listener on 127.0.0.1 catches Google's redirect; the code is exchanged locally and never passes through the chat. Does not open the browser itself. The attempt lives 10 minutes; when the browser shows the success page, call finish_login.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: it does not open the browser itself, uses a one-shot listener on 127.0.0.1, exchanges the code locally, never passes it through chat, and has a 10-minute attempt lifetime. These details are not present in the annotations and provide meaningful operational guidance.
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 dense but every sentence earns its place: it covers user interaction, browser constraints, security, timeout, and next step without repetition or filler. The most important user-facing instruction is 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?
For a tool with no parameters and no output schema, the description is fully complete. It explains the returned authorizeUrl, how to present it, what will happen afterward, and which sibling tool to call next.
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?
There are zero parameters, so the schema carries no burden and the description correctly avoids inventing parameter details. The baseline for a 0-parameter tool is 4; the description also reinforces that no configuration files or restart are 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?
The description opens with 'First step of connecting from the chat' and names a specific resource and action: start the Google login and return an authorizeUrl. It is clearly distinguished from siblings like finish_login and auth_status by positioning itself as the initial step.
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 explicitly states when to use it: as the first step of connecting, without editing config files or restarting the client. It also gives direct instructions to show the authorizeUrl to the user, ask them to open it in the browser, and call finish_login after the success page appears.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_product_inputUpdate a product inputA
Sparse-updates an existing product input — the cheap way to change price or availability without re-sending the whole product. data_source must be the source holding the input. update_mask is a comma-separated list of attribute paths (e.g. "productAttributes.price,productAttributes.availability"); when omitted, all populated fields of the request are applied. Every path listed in update_mask MUST carry a value in this request — a masked path with no value ERASES that attribute (the tool rejects such requests locally; to clear an attribute intentionally use raw_request). Returns the updated ProductInput; the processed product refreshes after async processing (minutes). To create a product or replace it wholesale use insert_product_input.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Merchant Center account ID (digits, e.g. "123456"). Omit to use the GOOGLE_MERCHANTS_ACCOUNT_ID default. | |
| data_source | Yes | Data source: numeric ID (e.g. "104628") or full name "accounts/{account}/dataSources/{id}". Product/promotion writes require an API-type data source (input: API), not a file feed. | |
| update_mask | No | Comma-separated attribute paths to update, e.g. "productAttributes.price". Omit to apply every populated field of this request. | |
| product_input | Yes | Product input ID: "contentLanguage~feedLabel~offerId" or the base64url name. | |
| version_number | No | Optional int64 freshness guard (as a string). | |
| custom_attributes | No | Custom (non-standard) attributes as {name, value} pairs. | |
| product_attributes | No | Product attributes to change (camelCase), e.g. {"price": {"amountMicros": "8990000", "currencyCode": "USD"}, "availability": "out_of_stock"}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false (mutation), openWorldHint=true, idempotentHint=false, destructiveHint=false. The description adds substantial behavioral detail: update_mask semantics (comma-separated paths, omission applies all populated fields), the local rejection of masked paths without values (and pointing to raw_request for intentional erasure), the async refresh of the processed product, and the requirement that data_source match the source. These go beyond the annotations without contradicting them.
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 a single dense paragraph but logically front-loaded: purpose → key constraint → mask behavior → return → alternative. Every sentence carries necessary information, though it could be marginally tightened without loss. It avoids redundancy with the schema, so it earns a 4.
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 tool's complexity (mask semantics, async processing, alternatives for creation/clearing), the description covers all essential call-time aspects: how to specify fields, mask handling, data_source requirement, return value (updated ProductInput), and the async refresh. No output schema exists, but the return type is stated. Nothing an agent needs to invoke it 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 the baseline is 3. The description adds meaning beyond the schema by explaining how update_mask interacts with request fields (must carry a value for each masked path, erasure behavior), clarifies that data_source must be the source holding the input, and gives a concrete example for product_attributes. This elevates it above a bare schema repeat, earning a 4.
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 ('Sparse-updates') and resource ('existing product input'), and immediately differentiates from siblings by calling it 'the cheap way to change price or availability without re-sending the whole product.' It explicitly names insert_product_input as the alternative for creation or wholesale replacement, so an agent can distinguish without opening other schemas.
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 explicit when-to-use ('cheap way to change price or availability'), a key prerequisite ('data_source must be the source holding the input'), and alternatives ('use insert_product_input' for create/replace, 'use raw_request' to intentionally clear attributes). No ambiguity remains about selection among siblings.
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.
6 tool updates
v1.2.0- Added
auth_status - Added
finish_login - Added
logout - Added
set_client - Added
setup_instructions - Added
start_login
3 tool updates
v1.1.0- Changed
price_competitiveness2 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Max results per page (1..100000; API default 1000)."New value: +"Max results per page (1..5000; API default 1000)." - changed
Input schema / properties / page_size / maximumPrevious value: -100000New value: +5000
- Changed
price_insights2 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Max results per page (1..100000; API default 1000)."New value: +"Max results per page (1..5000; API default 1000)." - changed
Input schema / properties / page_size / maximumPrevious value: -100000New value: +5000
- Changed
search_reports2 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Max results per page (1..100000; API default 1000)."New value: +"Max results per page (1..5000; API default 1000)." - changed
Input schema / properties / page_size / maximumPrevious value: -100000New value: +5000
22 tool updates
v0.1.0- First observed
create_data_source - First observed
delete_product_input - First observed
fetch_data_source - First observed
get_account - First observed
get_data_source - First observed
get_homepage - First observed
get_product - First observed
get_promotion - First observed
get_shipping_settings - First observed
insert_product_input - First observed
insert_promotion - First observed
list_accounts - First observed
list_data_sources - First observed
list_method_quotas - First observed
list_product_issues - First observed
list_products - First observed
list_promotions - First observed
price_competitiveness - First observed
price_insights - First observed
raw_request - First observed
search_reports - First observed
update_product_input
TDQS
Scored across 28 tools
Each tool maps to a distinct resource and action: products, promotions, accounts, data sources, reports, quotas, and auth steps are cleanly separated. Even the two price wrappers and search_reports are clearly differentiated by their descriptions. raw_request is an explicit escape hatch rather than an ambiguous competitor.
The majority follow a consistent verb_noun pattern (list_products, get_promotion, insert_product_input, delete_product_input, create_data_source). The auth tools (start_login, finish_login, logout) and nouns like auth_status, setup_instructions, price_competitiveness, price_insights deviate but stay in snake_case and remain readable. No mixed casing or chaotic verbs.
At 28 tools, this sits above the typical 3-15 sweet spot and even above the 'heavy' 16-25 range, so the count is high. However, the server covers a very broad API surface (products, promotions, accounts, data sources, reports, quotas) plus a full auth setup flow, so nearly every tool has a distinct purpose. It is borderline bloated but not excessive.
The core product lifecycle is fully covered (insert/update/delete/get/list), and promotions have create/update, get, and list. Notable gaps are no dedicated delete_promotion, no data source update/delete, and read-only homepage/shipping settings, but raw_request covers those edge cases.
Maintenance
Related MCP Connectors
E-commerce skills for AI agents: feeds, Google Shopping, GA4. Your private Brain when signed in.
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
MerchantFlow is a hosted, read-only ecommerce analytics MCP server for Shopify and WooCommerce. It gives AI assistants tenant-scoped access to revenue, profit and loss, product and SKU profitability, COGS coverage, fulfillment costs, advertising spend, ROAS, marketing performance, cohorts, LTV, and business valuation across connected commerce and marketing platforms. Connect with OAuth over Streamable HTTP. No local server installation is required.
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to manage Google Ads accounts by providing tools for querying account data and performing write operations such as updating campaign budgets, statuses, and bidding strategies.2Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP server for Google Merchant Center, providing 126 tools to manage Google Shopping feed, products, inventory, reports, promotions, returns, and account configuration via natural language.461 PyPI17MIT
- AlicenseAqualityCmaintenanceEnables reading products, checking approval statuses, and analyzing feeds across multiple Google Merchant Center accounts via natural language.612 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Google Merchant Center through 34 tools across 9 modules, including account management, product operations, reports, inventory, promotions, shipping, return policies, collections, and recommendations.-