Skip to main content
Glama
rooquiz

RooQuiz

prepare_image_upload

Read-only

Generate a short-lived presigned upload URL for storing an image (PNG, JPEG, GIF, or WebP) in the RooQuiz team media library, then use the returned URL to upload the file directly.

Instructions

Step 1 of 2 for adding an image (PNG / JPEG / GIF / WebP) to the current team media library. This tool does NOT receive image bytes — it returns a short-lived presigned URL you upload the file to directly, so even large images never pass through this conversation. Workflow: (1) save the image to a local temp file; (2) if the file is larger than 5MB, compress / downscale it to 5MB or less FIRST (e.g. sips -Z 2048 in.png --out out.jpg on macOS, or magick in.png -resize "2048x2048>" -quality 82 out.webp) — uploads over 5MB are rejected; (3) call this tool with filename, mimeType and (optionally) fileSize; (4) HTTP PUT the temp file to the returned uploadUrl with the matching Content-Type header, e.g. curl -X PUT --upload-file <file> "<uploadUrl>" -H "Content-Type: image/png"; (5) call finalize_image_upload with the returned key; (6) delete the temp file. Max 5MB after compression. Only image/png, image/jpeg, image/gif and image/webp are accepted.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileSizeNoOptional file size in bytes (of the file you will actually upload, after any compression). If provided it is checked against the 5MB cap and the team storage quota up front; the authoritative check still runs in finalize_image_upload against the actual uploaded size.
filenameYesOriginal filename for admin display / download, e.g. "cover.png".
mimeTypeYesImage MIME type. Must be one of image/png, image/jpeg, image/gif, image/webp.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
keyNoStaging object key to pass to finalize_image_upload
expiresInNoSeconds until the presigned URL expires
uploadUrlNoPresigned PUT URL — upload the bytes here, then call finalize_image_upload
requiredContentTypeNoContent-Type header the PUT must send, or R2 rejects it

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observedv0.1.0

TDQS

A4.9/5.0
Behavior5/5

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

Annotations provide readOnlyHint=true and destructiveHint=false, but the description adds critical behavioral context: it returns a short-lived presigned URL, rejects uploads >5MB, only accepts four MIME types, and that the authoritative check happens in finalize_image_upload. This goes well beyond annotations and clarifies the two-step mechanism.

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?

Long but every sentence earns its place. The workflow is numbered and front-loaded with purpose. Examples (sips, magick, curl) are concrete and useful, not fluff. Structure is logical: what it does, what it doesn't do, steps, constraints.

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?

Comprehensive for a complex two-step upload with output schema. Covers all parameters, constraints, workflow, sibling linkage, and error conditions (size rejection). No missing information an agent needs to call it correctly. Output schema presumably documents the returned URL and key.

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 100%, so baseline is 3. The description enriches fileSize ('of the file you will actually upload, after any compression', checked against 5MB cap and quota up front) and clarifies filename purpose ('for admin display / download'). It adds meaningful details beyond the schema without redundancy.

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?

The description clearly states 'Step 1 of 2 for adding an image ... to the current team media library' with explicit resource (image upload), verb (prepare), and context. It distinguishes itself from finalize_image_upload and lists accepted types. No ambiguity.

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?

Provides a numbered workflow (steps 1-6) including exact conditions: compress if >5MB, accepted MIME types, explicit statement that this tool does NOT receive bytes, and names the sibling finalize_image_upload. Tells when not to use (e.g., non-image files, over 5MB after compression). Fully covers when and how.

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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rooquiz/rooquiz-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server