Skip to main content
Glama
Firenook

Firenook

Official

storage_upload

Upload or replace a Storage object from text or base64 bytes, set its content type and custom metadata, and let finalize triggers run without security-rule checks.

Instructions

Upload (create or replace) a Storage object from text or base64 bytes with a content type and custom metadata, as the Admin SDK would (rules skipped; finalize triggers run).

Input Schema

NameRequiredDescriptionDefault
pathYesObject path, e.g. products/shoe.png
textNoContent as text (sent as UTF-8)
base64NoContent as base64 bytes (instead of text)
bucketNoStorage bucket; default the suite's default bucket
contentTypeNoContent type; default text/plain for text, application/octet-stream for base64
ifNotExistsNoRefuse to replace an existing object
cacheControlNoCache-Control
customMetadataNoString metadata

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.1

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does meaningful work: it discloses that existing objects are replaced, that security rules are skipped ('as the Admin SDK would'), and that finalize triggers fire as a side effect. It omits auth/permission requirements and any size or content limits, and says nothing about what the call returns.

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

Conciseness5/5

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

A single dense sentence that front-loads the action and replacement semantics, then parenthesizes the runtime behavior. Nothing is redundant and no sentence is wasted.

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

Completeness4/5

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

For an 8-parameter mutation tool with a nested customMetadata object, no annotations, and no output schema, the description covers the essential behavior (replacement, rule bypass, trigger side effects) well. The remaining gap is the absence of return-value information, which the description could have supplied since no output schema exists.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter including ifNotExists, cacheControl, and customMetadata is already documented in the schema. The description only reinforces the text/base64 source choice and metadata fields, adding little semantics beyond what the structured fields provide — baseline 3 applies.

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 states a specific verb and resource — upload/create-or-replace a Storage object — and names the accepted content sources (text or base64 bytes) plus accompanying fields. It is clearly distinguishable from storage_read, storage_get_metadata, and storage_copy without opening the schema, though it never names those siblings explicitly.

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?

Usage is only implied: this is evidently the write counterpart to the other storage_* tools, and 'create or replace' hints at when replacement is acceptable. There is no explicit when-to-use vs. alternatives guidance (e.g., use storage_copy to duplicate an object, set ifNotExists to avoid clobbering) and no stated prerequisites.

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