Skip to main content
Glama

Opus Growth, Ad Platforms MCP Connector

Upload Business Photo

gbp_upload_photo

Adds one or SEVERAL PHOTOS to the Google Business Profile listing (visible on Maps/Search) in a single call. Give image_url for one photo, or image_urls for a batch of up to 10 — a batch is the normal case after upload_image, which hands back one public URL per photo the user dropped. Each URL must be a publicly reachable direct image link, because Google downloads it server-side. category applies to every photo in the call: ADDITIONAL (default) | PROFILE (profile picture) | COVER | LOGO | EXTERIOR | INTERIOR | PRODUCT | AT_WORK | FOOD_AND_DRINK | MENU | TEAM — upload different categories in separate calls. LOGO does not work: measured 22 Sep 2026, Google accepted the request, processed it as PROFILE and left every slot unchanged, so the logo has to be set in the Business Profile dashboard by hand. Whatever category you ask for, the reply is now checked against the slot Google actually wrote to; if they differ the photo is reported as failed with both categories and the credit is refunded, instead of a success that changed nothing. A batch is charged PER PHOTO, exactly as separate calls would be, and a photo Google rejects is not charged. If some photos go up and others fail you get both lists back with the reason for each, so a partial result is never reported as full success. This adds photos to the listing's PHOTO GALLERY; it does NOT attach them to an Update post — to publish a post WITH a photo use gbp_create_post(image_url=...). COVER ASPECT RATIO IS CHECKED BEFORE THE UPLOAD: Google rejects a cover photo whose ratio is wrong with a bare "Request contains an invalid argument." that names no cause and still burns the credit, so the image is measured first and you get the actual pixel size, the ratio and what Google expects (16:9). Pass allow_any_ratio=true to skip that check. SAFETY: confirm=false → preview, confirm=true → publish. location = a gbp_list_locations value or the business name/domain.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
confirmNo
categoryNoADDITIONAL
locationYes
image_urlNo
image_urlsNo
allow_any_ratioNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added
  2. Removed
  3. Added
  4. Removed
  5. Added
  6. Removed
  7. Added
  8. Removed
  9. Added
  10. Removed
  11. Added
  12. Removed
  13. Added
  14. Removed
  15. Added
  16. Removed
  17. Added
  18. Removed
  19. Added
  20. Removed
  21. Added
  22. Removed
  23. Added
  24. Removed
  25. Added
  26. Removed
  27. Added
  28. Removed
  29. Added
  30. Removed
  31. Added
  32. Removed
  33. Added
  34. Removed
  35. Added
  36. Removed
  37. Added
  38. Removed
  39. Added

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnly=false, openWorld=true, idempotent=false, destructive=false. The description goes far beyond: LOGO is silently downgraded to PROFILE (with a measurement date), responses are checked against the slot Google actually wrote and failures refund the credit, billing is per-photo and rejected photos are not charged, partial failures are never reported as full success, and confirm=false → preview vs confirm=true → publish. This is unusually rich behavioral disclosure.

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

Conciseness4/5

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

Dense and front-loaded: the core single-vs-batch instruction comes first, then category, then failure/billing behavior, then the sibling redirect, then safety. Every sentence carries operational information. It is long and somewhat sprawling in the middle (category enumeration plus the LOGO story), which slightly dents scannability, but nothing is filler.

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

Completeness5/5

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

For a 6-param mutation tool with an output schema, the description covers the input contract, the fraud/credit and partial-result semantics, the sibling alternative for post attachments, and the safety gate. Return-value shape is left to the output schema, which is correct. Nothing an agent needs to call this correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must carry the load and does: it defines image_url vs image_urls semantics, enumerates all eleven category values with their meanings and the per-call scope rule, explains allow_any_ratio=true as skipping the cover-ratio check, defines confirm as preview/publish, and defines location as a gbp_list_locations value or a business name/domain. The 'publicly reachable direct image link, because Google downloads it server-side' note is genuine semantics the schema cannot express.

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

Purpose5/5

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

Opens with a specific verb+resource+destination ('Adds one or SEVERAL PHOTOS to the Google Business Profile listing (visible on Maps/Search)') and immediately distinguishes scope from siblings by naming gbp_create_post as the tool for posts WITH photos and gbp_update_photo_category is implicitly not this. An agent can pick it apart from gbp_upload_video and upload_image without opening a schema.

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

Usage Guidelines5/5

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

Explicit routing: single foto via image_url, batch via image_urls (up to 10), batch called out as 'the normal case after upload_image'. Tells the agent to upload different categories in separate calls and redirects to gbp_create_post(image_url=...) for post attachments. When/when-not/alternatives are all present.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.