Skip to main content
Glama

Add photos

owner_photos

Only for business owners signed in to Awning. Save photos for the business page using supported chat attachments in files or downloadable image links in urls. Called with nothing, returns an upload widget where supported and upload_url as a fallback. The response lists the photos the page has now in current, with photo_id for owner_remove_photos. Use the owner's own photos of the actual place first. If they have none or want more, offer to generate illustrations with your own image tools using photo_prompts from owner_setup or owner_photos: they follow Awning's house style so the page matches the rest of the site. Let the owner approve every picture before importing it, and pass ai_generated: true for generated ones — the page then presents them as illustrations, never as the real premises. Explain any cost or plan limit of the assistant's image tools before using them; Awning does not generate or bill for images. Import only downloadable image URLs or supported attachment links; never invent a URL or send a local file path. If attachments cannot be transferred, return the upload link. Mark photos_done only after successful uploads and the owner says they are finished; resolve failed uploads first.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlsNo
filesNo
draft_idNoWhich business being set up gets the photos, when there are several
business_idNoOnly needed if you manage several businesses
ai_generatedNoTrue when the pictures were generated rather than photographed; they are then shown as illustrations

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / ai_generated
      Added value: +{
      +  "description": "True when the pictures were generated rather than photographed; they are then shown as illustrations",
      +  "type": "boolean"
      +}
  2. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare it is a non-idempotent, non-destructive open-world write. The description adds substantial context beyond that: the no-args widget/upload_url fallback, the shape of the response ('lists the photos the page has now in current'), the requirement that the owner approve every picture, that ai_generated:true renders them as illustrations rather than real premises, cost/plan disclosure duties, and the prohibition on inventing URLs or sending local paths.

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?

It is one dense paragraph that is longer than most definitions, but nearly every sentence carries an operational rule an agent must follow. The only weakness is ordering: the actual purpose ('Save photos...') does not lead, and a few clauses (the image-generation aside) could be tightened.

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 mutating tool with no output schema and 5 optional parameters, the description covers what an agent needs end-to-end: inputs accepted, fallback behavior, response contents, approval workflow, flag semantics, and the completion criterion. Even without an output schema, the return shape ('current' list with photo_id) is described.

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

Parameters4/5

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

Schema coverage is 60% and the description compensates well for the gaps: it explains that urls must be downloadable image links (not invented, no local paths), that files are supported chat attachments, and it gives the meaning of ai_generated:true (presented as illustrations, never the real premises). draft_id/business_id semantics come only from the schema, but the description adds real meaning beyond structured data.

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

Purpose4/5

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

The description names a specific verb+resource: 'Save photos for the business page using supported chat attachments in files or downloadable image links in urls.' It also distinguishes itself from owner_remove_photos by noting the returned photo_id is 'for owner_remove_photos.' The purpose is clear, though it is buried behind the opening eligibility gate rather than front-loaded.

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?

It states an explicit precondition ('Only for business owners signed in to Awning'), the no-argument behavior ('Called with nothing, returns an upload widget... upload_url as a fallback'), a source-priority rule ('Use the owner's own photos of the actual place first'), the fallback to generated illustrations, and the completion condition for photos_done. Nothing about when to use this versus its alternatives is left to inference.

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.

Resources