Skip to main content
Glama

Dayze — Life Context

Upload Photo

upload_photo

Upload a photo to a Life Graph entity you have (event, expense, place, person, inventory, …). Accepts image_base64, url, or ChatGPT file object image ({download_url, file_id}). Normally re-encodes as WebP; original_preserved and metadata_stripped describe the saved bytes. Partial results include an asset_id for repair: call upload_photo with asset_id and a new request_id, without image bytes. Answers attached: true only after readback confirms asset id, content_type, byte_size, and a viewable URL on the record — never from OCR text alone. Mobile file references without download_url fail clearly (attached: false). Person uploads also write the CRM gallery (person_photos) and avatar when set_as_avatar=true. ($0.15; API key required)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoRemote image URL to fetch and store.
roleNooriginal | cover | thumbnail | receipt | … (photo is stored as original). set_as_avatar implies cover.
imageNoChatGPT chat attachment. Prefer this for images from the conversation; API clients may still use image_base64 or url.
titleNo
asset_idNoRepair saved upload: new request_id, no image bytes.
filenameNo
entity_idYes
mime_typeNoAlias for content_type.
request_idNoClient idempotency key (retries return original result).
descriptionNo
entity_typeYes
content_typeNo
image_base64NoBase64 image bytes (optional data: URL prefix).
set_as_avatarNo
idempotency_keyNoAlias for request_id.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNo
assetNo
accountNoThe Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.
messageNo
asset_idNo
attachedNo
photo_idNo
view_urlNo
byte_sizeNo
entity_idNo
optimizedNo
provenanceNoWhich connector wrote the record and which connected Dayze account received it.
entity_typeNo
content_typeNo
avatar_updatedNo
metadata_strippedNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "required": [
      -      "image_base64"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "url"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "image"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "required": [
      +      "image_base64"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "url"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "image"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "asset_id"
      +    ]
      +  }
      +]
    • addedInput schema / properties / asset_id
      Added value: +{
      +  "description": "Repair saved upload: new request_id, no image bytes.",
      +  "type": "string"
      +}
  2. Changed2 schema fields changed
    • addedOutput schema / properties / account
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.",
      +  "properties": {
      +    "display_name": {
      +      "description": "Account display name.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "handle": {
      +      "description": "Account handle, e.g. @goh.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "note": {
      +      "description": "How to disclose the account to the user.",
      +      "type": "string"
      +    },
      +    "qa_fixture": {
      +      "description": "True for a known QA test account: its records are fixture data, not a real life.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "handle",
      +    "display_name",
      +    "qa_fixture",
      +    "note"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / provenance
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Which connector wrote the record and which connected Dayze account received it.",
      +  "properties": {
      +    "account": {
      +      "additionalProperties": false,
      +      "description": "The Dayze account this data belongs to. With more than one Dayze connection, name it in the answer.",
      +      "properties": {
      +        "display_name": {
      +          "description": "Account display name.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "handle": {
      +          "description": "Account handle, e.g. @goh.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "note": {
      +          "description": "How to disclose the account to the user.",
      +          "type": "string"
      +        },
      +        "qa_fixture": {
      +          "description": "True for a known QA test account: its records are fixture data, not a real life.",
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "handle",
      +        "display_name",
      +        "qa_fixture",
      +        "note"
      +      ],
      +      "type": "object"
      +    },
      +    "channel": {
      +      "description": "Always mcp_connector.",
      +      "type": "string"
      +    },
      +    "connector": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "kind": {
      +          "description": "oauth or api_key.",
      +          "type": "string"
      +        },
      +        "name": {
      +          "description": "The connected app or API-key label shown to the account owner.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "kind",
      +        "name"
      +      ],
      +      "type": "object"
      +    },
      +    "source": {
      +      "description": "chatgpt for ChatGPT OAuth writes; mcp for another OAuth app or API key.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "source",
      +    "channel",
      +    "connector",
      +    "account"
      +  ],
      +  "type": "object"
      +}
  3. Changed6 schema fields changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "required": [
      -      "image_base64"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "url"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "required": [
      +      "image_base64"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "url"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "image"
      +    ]
      +  }
      +]
    • addedInput schema / properties / image
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "ChatGPT chat attachment. Prefer this for images from the conversation; API clients may still use image_base64 or url.",
      +  "properties": {
      +    "download_url": {
      +      "description": "Temporary HTTPS URL ChatGPT provides for this file.",
      +      "type": "string"
      +    },
      +    "file_id": {
      +      "description": "ChatGPT file id (not a Dayze asset_id).",
      +      "type": "string"
      +    },
      +    "file_name": {
      +      "description": "Optional original filename from ChatGPT.",
      +      "type": "string"
      +    },
      +    "mime_type": {
      +      "description": "Optional MIME type from ChatGPT.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "download_url",
      +    "file_id"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / role / description
      Previous value: -"original | cover | thumbnail | … (photo is stored as original). set_as_avatar implies cover."New value: +"original | cover | thumbnail | receipt | … (photo is stored as original). set_as_avatar implies cover."
    • addedOutput schema / properties / byte_size
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / content_type
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / view_url
      Added value: +{
      +  "type": "string"
      +}
  4. Changed4 schema fields changed
    • changedInput schema / additionalProperties
      Previous value: -trueNew value: +false
    • addedInput schema / properties / filename
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / mime_type
      Added value: +{
      +  "description": "Alias for content_type.",
      +  "type": "string"
      +}
    • addedInput schema / properties / role
      Added value: +{
      +  "description": "original | cover | thumbnail | … (photo is stored as original). set_as_avatar implies cover.",
      +  "type": "string"
      +}
  5. Changed3 schema fields changed
    • addedOutput schema / properties / attached
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / entity_id
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / entity_type
      Added value: +{
      +  "type": "string"
      +}
  6. Changed4 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +true
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "content_type": {
      -        "type": "string"
      -      },
      -      "description": {
      -        "type": "string"
      -      },
      -      "entity_id": {
      -        "type": "string"
      -      },
      -      "entity_type": {
      -        "type": "string"
      -      },
      -      "idempotency_key": {
      -        "description": "Alias for request_id.",
      -        "type": "string"
      -      },
      -      "image_base64": {
      -        "description": "Base64 image bytes (optional data: URL prefix).",
      -        "type": "string"
      -      },
      -      "request_id": {
      -        "description": "Client idempotency key (retries return original result).",
      -        "type": "string"
      -      },
      -      "set_as_avatar": {
      -        "type": "boolean"
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "description": "Remote image URL to fetch and store.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "entity_type",
      -      "entity_id",
      -      "image_base64"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "content_type": {
      -        "type": "string"
      -      },
      -      "description": {
      -        "type": "string"
      -      },
      -      "entity_id": {
      -        "type": "string"
      -      },
      -      "entity_type": {
      -        "type": "string"
      -      },
      -      "idempotency_key": {
      -        "description": "Alias for request_id.",
      -        "type": "string"
      -      },
      -      "image_base64": {
      -        "description": "Base64 image bytes (optional data: URL prefix).",
      -        "type": "string"
      -      },
      -      "request_id": {
      -        "description": "Client idempotency key (retries return original result).",
      -        "type": "string"
      -      },
      -      "set_as_avatar": {
      -        "type": "boolean"
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "description": "Remote image URL to fetch and store.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "entity_type",
      -      "entity_id",
      -      "url"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "required": [
      +      "image_base64"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "url"
      +    ]
      +  }
      +]
    • addedInput schema / properties
      Added value: +{
      +  "content_type": {
      +    "type": "string"
      +  },
      +  "description": {
      +    "type": "string"
      +  },
      +  "entity_id": {
      +    "type": "string"
      +  },
      +  "entity_type": {
      +    "type": "string"
      +  },
      +  "idempotency_key": {
      +    "description": "Alias for request_id.",
      +    "type": "string"
      +  },
      +  "image_base64": {
      +    "description": "Base64 image bytes (optional data: URL prefix).",
      +    "type": "string"
      +  },
      +  "request_id": {
      +    "description": "Client idempotency key (retries return original result).",
      +    "type": "string"
      +  },
      +  "set_as_avatar": {
      +    "type": "boolean"
      +  },
      +  "title": {
      +    "type": "string"
      +  },
      +  "url": {
      +    "description": "Remote image URL to fetch and store.",
      +    "type": "string"
      +  }
      +}
    • addedInput schema / required
      Added value: +[
      +  "entity_type",
      +  "entity_id"
      +]
  7. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "content_type": {
      -        "type": "string"
      -      },
      -      "description": {
      -        "type": "string"
      -      },
      -      "entity_id": {
      -        "type": "string"
      -      },
      -      "entity_type": {
      -        "type": "string"
      -      },
      -      "image_base64": {
      -        "description": "Base64 image bytes (optional data: URL prefix).",
      -        "type": "string"
      -      },
      -      "set_as_avatar": {
      -        "type": "boolean"
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "description": "Remote image URL to fetch and store.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "entity_type",
      -      "entity_id",
      -      "image_base64"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": true,
      -    "properties": {
      -      "content_type": {
      -        "type": "string"
      -      },
      -      "description": {
      -        "type": "string"
      -      },
      -      "entity_id": {
      -        "type": "string"
      -      },
      -      "entity_type": {
      -        "type": "string"
      -      },
      -      "image_base64": {
      -        "description": "Base64 image bytes (optional data: URL prefix).",
      -        "type": "string"
      -      },
      -      "set_as_avatar": {
      -        "type": "boolean"
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "description": "Remote image URL to fetch and store.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "entity_type",
      -      "entity_id",
      -      "url"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "content_type": {
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "entity_id": {
      +        "type": "string"
      +      },
      +      "entity_type": {
      +        "type": "string"
      +      },
      +      "idempotency_key": {
      +        "description": "Alias for request_id.",
      +        "type": "string"
      +      },
      +      "image_base64": {
      +        "description": "Base64 image bytes (optional data: URL prefix).",
      +        "type": "string"
      +      },
      +      "request_id": {
      +        "description": "Client idempotency key (retries return original result).",
      +        "type": "string"
      +      },
      +      "set_as_avatar": {
      +        "type": "boolean"
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Remote image URL to fetch and store.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "entity_type",
      +      "entity_id",
      +      "image_base64"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "content_type": {
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "entity_id": {
      +        "type": "string"
      +      },
      +      "entity_type": {
      +        "type": "string"
      +      },
      +      "idempotency_key": {
      +        "description": "Alias for request_id.",
      +        "type": "string"
      +      },
      +      "image_base64": {
      +        "description": "Base64 image bytes (optional data: URL prefix).",
      +        "type": "string"
      +      },
      +      "request_id": {
      +        "description": "Client idempotency key (retries return original result).",
      +        "type": "string"
      +      },
      +      "set_as_avatar": {
      +        "type": "boolean"
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Remote image URL to fetch and store.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "entity_type",
      +      "entity_id",
      +      "url"
      +    ],
      +    "type": "object"
      +  }
      +]
  8. Changed3 schema fields changed
    • addedOutput schema / properties / asset
      Added value: +{
      +  "additionalProperties": true,
      +  "type": "object"
      +}
    • addedOutput schema / properties / asset_id
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / avatar_updated
      Added value: +{
      +  "type": "boolean"
      +}
  9. Changed4 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -true
    • addedInput schema / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "content_type": {
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "entity_id": {
      +        "type": "string"
      +      },
      +      "entity_type": {
      +        "type": "string"
      +      },
      +      "image_base64": {
      +        "description": "Base64 image bytes (optional data: URL prefix).",
      +        "type": "string"
      +      },
      +      "set_as_avatar": {
      +        "type": "boolean"
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Remote image URL to fetch and store.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "entity_type",
      +      "entity_id",
      +      "image_base64"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "content_type": {
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "entity_id": {
      +        "type": "string"
      +      },
      +      "entity_type": {
      +        "type": "string"
      +      },
      +      "image_base64": {
      +        "description": "Base64 image bytes (optional data: URL prefix).",
      +        "type": "string"
      +      },
      +      "set_as_avatar": {
      +        "type": "boolean"
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "Remote image URL to fetch and store.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "entity_type",
      +      "entity_id",
      +      "url"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties
      Removed value: -{
      -  "content_type": {
      -    "type": "string"
      -  },
      -  "description": {
      -    "type": "string"
      -  },
      -  "entity_id": {
      -    "type": "string"
      -  },
      -  "entity_type": {
      -    "type": "string"
      -  },
      -  "image_base64": {
      -    "description": "Base64 image bytes (optional data: URL prefix)",
      -    "type": "string"
      -  },
      -  "set_as_avatar": {
      -    "type": "boolean"
      -  },
      -  "title": {
      -    "type": "string"
      -  },
      -  "url": {
      -    "description": "Remote image URL to fetch, optimize, and store",
      -    "type": "string"
      -  }
      -}
    • removedInput schema / required
      Removed value: -[
      -  "entity_type",
      -  "entity_id"
      -]
  10. Added

TDQS

A4.1/5.0
Behavior5/5

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

With annotations only covering the safety profile (not readOnly, not destructive, not openWorld), the description carries the rest: WebP re-encoding, what original_preserved/metadata_stripped mean, the readback-verification contract for attached:true, the explicit mobile-reference failure mode, person-tier side effects on person_photos and avatar, and cost/auth. This is unusually rich disclosure beyond structured fields.

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

Conciseness4/5

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

Dense but front-loaded: purpose and accepted inputs come first, then verification semantics, then repair/side-effect/cost details. Nearly every sentence carries operational weight. It is a single long paragraph, which slightly hurts scannability.

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 15-param mutation tool with an output schema present, the description supplies the missing operational context: idempotent repair flow, readback-conditioned success, failure mode, and side effects. An agent has everything needed to call it correctly and interpret partial results.

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 53%, so the description must add value, and it does: it frames the mutually exclusive input forms (image_base64, url, ChatGPT file object), explains asset_id as the repair-only path, and ties set_as_avatar to cover/avatar behavior. It does not document several lower-traffic params (title, filename, description, role values), leaving some gaps.

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?

States a specific verb and resource ('Upload a photo to a Life Graph entity') and enumerates supported entity types (event, expense, place, person, inventory). An agent can immediately tell what the tool does. It does not, however, contrast itself with the sibling upload_asset, which is the closest alternative.

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

Usage Guidelines3/5

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

Gives one concrete usage path: repair a partial result by calling with asset_id plus a new request_id and no image bytes. It also implies format preferences (three accepted input forms). But it never says when NOT to use this or names upload_asset as the generic alternative, so alternative selection 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.