Dreep MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Dreep MCP ServerConvert contract.docx to PDF and give me a link that expires in an hour"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Dreep docs · API reference · Python SDK · Changelog · Report a bug
Ask your agent things like:
"Upload
~/Desktop/launch/hero.pngtomarketing/2026and give me a 1200px WebP and a 400px square thumbnail.""Pull the text out of this scanned invoice."
"Convert
contract.docxto PDF and give me a link that expires in an hour.""Cut the background out of
product.jpgand show it on white."
Contents
Add it to your client: Claude Desktop · Claude Code · Cursor · VS Code · Windsurf · Codex CLI · Gemini CLI · Zed · Cline and others · Remote (HTTP)
Related MCP server: makia-vision-mcp
How it works
flowchart LR
A["AI agent<br/>(Claude, Cursor, Codex...)"] -- "MCP<br/>stdio or HTTP" --> S["dreep-mcp"]
S -- "dreep Python SDK<br/>(your API key)" --> API["Dreep API"]
API --> CDN["Dreep CDN<br/>(or your custom domain)"]
S -. "URL building:<br/>no network" .-> CDNYour MCP client starts
dreep-mcpon your machine (stdio), or connects to one you host (streamable HTTP).The agent sees 14 tools (16 with deletes enabled), each with a typed JSON schema that lists every valid transform value, so it calls them correctly the first time.
Each tool calls the official
dreepPython SDK, which talks to the Dreep API with your key. Delivery and signed URLs are built locally, with no API call.Results come back as structured JSON. Every asset carries the delivery
urlexactly as Dreep returned it, custom CDN domain included.
There is one implementation, in Python. The npm package dreep-mcp is a small launcher that runs the same PyPI package through uvx (or pipx), so npx users get the identical server.
Quick start
Create an API key on the API Keys page of the Dreep dashboard.
Install uv, which runs the server with no separate install step:
curl -LsSf https://astral.sh/uv/install.sh | shAdd the server to your client (below). Any of these three commands starts the same server:
Runner
Command
Needs
uvx (recommended)
uvx dreep-mcpnpx
npx -y dreep-mcpNode 18+ plus uv or pipx
pip
pip install dreep-mcp, thendreep-mcpPython 3.10+
The examples below use
uvx. To use npx instead, swap"command": "uvx", "args": ["dreep-mcp"]for"command": "npx", "args": ["-y", "dreep-mcp"].
Add it to your client
Every client needs the same three things: a command (uvx), its arguments (dreep-mcp), and your API key in the DREEP_API_KEY environment variable. Replace drp_live_your_key with your key. Add DREEP_SIGNING_SECRET if you use signed folders, and DREEP_MCP_ALLOW_DELETE if you want the delete tools (see Configuration).
Claude Desktop
Open Settings → Developer → Edit Config, which opens claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"dreep": {
"command": "uvx",
"args": ["dreep-mcp"],
"env": {
"DREEP_API_KEY": "drp_live_your_key",
"DREEP_SIGNING_SECRET": "your_signing_secret"
}
}
}
}Restart Claude Desktop. Dreep appears under the tools (slider) icon in the message box.
If Claude Desktop can't find
uvx, use its full path (runwhich uvx, for example/Users/you/.local/bin/uvx). GUI apps don't always inherit your shell'sPATH.
Claude Code
claude mcp add dreep --scope user -e DREEP_API_KEY=drp_live_your_key -- uvx dreep-mcp--scope user makes it available in every project; leave it out to add it to the current project only, or use --scope project to share it with your team through .mcp.json (keep the key out of that file, as shown below). Check it with claude mcp list, or /mcp inside a session.
To share the setup in a repository without committing the key, put this in .mcp.json and let each person export DREEP_API_KEY in their own shell:
{
"mcpServers": {
"dreep": {
"command": "uvx",
"args": ["dreep-mcp"],
"env": { "DREEP_API_KEY": "${DREEP_API_KEY}" }
}
}
}Cursor
Open Cursor Settings → MCP → Add new MCP server, or edit ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{
"mcpServers": {
"dreep": {
"command": "uvx",
"args": ["dreep-mcp"],
"env": { "DREEP_API_KEY": "drp_live_your_key" }
}
}
}The Dreep tools are then available to the agent in chat.
VS Code (GitHub Copilot)
Create .vscode/mcp.json. VS Code asks for the key the first time and stores it securely:
{
"inputs": [
{
"type": "promptString",
"id": "dreep-api-key",
"description": "Dreep API key",
"password": true
}
],
"servers": {
"dreep": {
"type": "stdio",
"command": "uvx",
"args": ["dreep-mcp"],
"env": { "DREEP_API_KEY": "${input:dreep-api-key}" }
}
}
}Open Copilot Chat in Agent mode and pick the Dreep tools from the tools menu.
Windsurf
Open Windsurf Settings → Cascade → MCP Servers → View raw config, or edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"dreep": {
"command": "uvx",
"args": ["dreep-mcp"],
"env": { "DREEP_API_KEY": "drp_live_your_key" }
}
}
}OpenAI Codex CLI
Add to ~/.codex/config.toml:
[mcp_servers.dreep]
command = "uvx"
args = ["dreep-mcp"]
env = { DREEP_API_KEY = "drp_live_your_key" }Gemini CLI
Add to ~/.gemini/settings.json (or .gemini/settings.json in a project):
{
"mcpServers": {
"dreep": {
"command": "uvx",
"args": ["dreep-mcp"],
"env": { "DREEP_API_KEY": "drp_live_your_key" }
}
}
}Zed
Add to Zed's settings.json (Zed → Settings → Open Settings):
{
"context_servers": {
"dreep": {
"command": "uvx",
"args": ["dreep-mcp"],
"env": { "DREEP_API_KEY": "drp_live_your_key" }
}
}
}Cline and other clients
Cline (MCP Servers → Configure), Roo Code, Continue, Goose, JetBrains AI Assistant, LM Studio and most other clients take the same mcpServers block shown for Cursor. Anything that can launch a stdio MCP server can run uvx dreep-mcp with DREEP_API_KEY set.
Remote clients over HTTP
For web-based agents, shared team servers or containers, run the streamable HTTP transport:
export DREEP_API_KEY=drp_live_your_key
export DREEP_MCP_HTTP_TOKEN="$(openssl rand -hex 32)"
uvx dreep-mcp --transport http --host 0.0.0.0 --port 8000The endpoint is http://<host>:8000/mcp, and every request must send Authorization: Bearer <DREEP_MCP_HTTP_TOKEN>. Put it behind HTTPS (a reverse proxy or your platform's load balancer) before exposing it. Then connect, for example from Claude Code:
claude mcp add --transport http dreep https://mcp.example.com/mcp --header "Authorization: Bearer $DREEP_MCP_HTTP_TOKEN"Without --host it binds to 127.0.0.1, and it refuses to bind to any other address unless DREEP_MCP_HTTP_TOKEN is set. Over HTTP the tools can't read files on the server unless you allow specific directories with DREEP_MCP_FILE_ROOTS; remote callers send files as content_base64 instead.
Tools
Tool | What it does | Kind |
| Uploads an image, video, audio file or document from a local path or base64 content, optionally transforming it before storage. Files over 100 MB stream straight to storage. | writes |
| Starts a presigned upload for bytes the server can't read (PUT them, then confirm). | writes |
| Finalises a presigned upload and returns the asset. | writes |
| Lists assets with pagination, filtered by folder. | read-only |
| Cuts the subject out of an image and stores a transparent PNG or WebP. | writes |
| OCR for images and PDFs, optionally with line blocks and bounding boxes. | writes |
| Word ↔ PDF, Excel, PowerPoint, CSV, or a PDF page to PNG/JPEG. | writes |
| Resize, crop, convert, compress, blur, round or trim an asset at the CDN. | local, no network |
| A time-limited link for an asset in a signed folder. | local, no network |
| Creates a folder or a whole path, with access control ( | writes |
| Lists folders with their paths and access control. | read-only |
| Saves a named transform for reuse. | writes |
| Lists saved presets. | read-only |
| Storage used and image, file and folder counts. | read-only |
| Permanently deletes an asset. Only when | destructive |
| Deletes a preset. Only when | destructive |
Every tool carries MCP annotations: read-only tools are marked so clients can run them without asking, and delete tools are marked destructive so clients ask you first.
A few behaviours come straight from the API reference, verified against the live API:
Use URLs as returned. Projects can serve assets from a custom CDN domain, so the tools never construct a delivery URL from scratch; they transform the one Dreep returned.
Signed URLs sign the asset and expiry only (
HMAC-SHA256over"{id}:{exp}"). Transform parameters ride along unsigned.Access control is set on top-level folders; nested folders inherit it. The API has no endpoint for deleting folders.
Presets need a
format, and preset keys may only contain lowercase letters, digits and underscores.
Configuration
Variable | Required | Purpose |
| yes | Your project API key. |
| for signed URLs | The URL Signing Secret from the dashboard's API Keys page. |
| no |
|
| no | Directories the file tools may read, separated by |
| for public HTTP | Bearer token every HTTP request must present. |
Command-line options:
dreep-mcp [--transport {stdio,http}] [--host HOST] [--port PORT] [--path PATH]Option | Default |
|
|
|
|
|
|
|
|
Security
Your API key can read, upload and delete everything in the project. It stays in the server's environment and is sent only to the Dreep API, never to the agent.
Deletes are off unless you turn them on, and are marked destructive so clients confirm them.
File access is scoped. Restrict which directories the agent can upload from with
DREEP_MCP_FILE_ROOTS. Over HTTP, local file reads are off unless you set it.The HTTP transport binds to localhost by default and refuses a public address without
DREEP_MCP_HTTP_TOKEN. Tokens are compared in constant time.Signed URLs are bearer tokens. Anyone with the link can fetch the asset until it expires.
Report vulnerabilities privately; see SECURITY.md.
Development
git clone https://github.com/IndigoSoftwares21/dreep-mcp.git
cd dreep-mcp
bash scripts/setup_hooks.sh # venv, dev dependencies, git hooks
bash scripts/quality_gate.sh # lint, format, repository rules, mypy --strict, tests, npm testsTry your local checkout in a client by pointing it at the venv: "command": "/path/to/dreep-mcp/.venv/bin/dreep-mcp". To poke at the tools interactively, run the MCP Inspector:
npx @modelcontextprotocol/inspector .venv/bin/dreep-mcpThe layout:
Path | What lives there |
| One module per tool group: uploads, media, processing, URLs, project |
| Builds the server and registers every tool group |
| The |
| The schemas the agent reads |
| The |
| Repository rules: file length, no magic strings, DRY, layering, security |
Read CONTRIBUTING.md before opening a pull request, and AGENTS.md if you're an AI agent working in this repository.
License
Available Tools
14 toolsbuild_delivery_urlARead-onlyIdempotent
Builds a delivery URL that resizes, crops, converts or otherwise transforms an asset.
Transforms run on the fly at the CDN and are cached. Example: width 400 and format webp for a thumbnail; format pdf to convert a Word document.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The asset's delivery URL exactly as Dreep returned it (from upload/list). | |
| transform | No | Transform to apply. On upload it runs before storage. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and a closed-world profile, so the safety story is covered. The description adds genuine context beyond that: transforms run on the fly at the CDN and are cached, which tells the agent the result is a derived, reproducible URL. It stops short of saying whether the URL is permanent, how transform errors surface, or that the underlying asset is never mutated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core verb and resource, then the CDN/caching behavior, then two compact examples. Nothing is redundant and the reading order matches what an agent needs first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a 100% documented schema and an output schema present, return values need no explanation, and the description covers what the tool does and how transforms behave. The one real gap is disambiguation from build_signed_url, which the description leaves entirely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every transform field is documented inline, so the baseline of 3 applies. The description only illustrates parameter combinations (width 400 + format webp, format pdf for a Word doc) rather than adding semantics the schema lacks, such as how url must match exactly or what preset does relative to explicit fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb and resource ("Builds a delivery URL") and enumerates the transform capabilities (resize, crop, convert, transform). It is clear what the tool produces, but it never distinguishes itself from the sibling build_signed_url, which an agent could easily confuse with a delivery-URL builder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through examples ("width 400 and format webp for a thumbnail; format pdf to convert a Word document"), which do convey intent but not exclusions. There is no statement about when to use this versus build_signed_url, convert_document, or create_preset, all of which sit in the sibling list and are natural alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_signed_urlARead-onlyIdempotent
Builds a time-limited URL for an asset in a signed folder.
Needs DREEP_SIGNING_SECRET on the server. Anyone holding the link can fetch the asset until it expires, so share it only with the intended recipient.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The asset's delivery URL exactly as Dreep returned it (from upload/list). | |
| asset_id | Yes | The asset's `id`; this is what is signed. | |
| transform | No | Transform to apply. On upload it runs before storage. | |
| expires_in_seconds | Yes | Seconds until the link stops working. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, but the description adds genuinely non-derivable behavior: it depends on the DREEP_SIGNING_SECRET server secret and the resulting URL is a bearer credential that anyone can use until expiry. That last point materially affects how an agent should handle the output. It stops short of saying what happens when the secret is missing or whether the signed URL embeds the transform.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler: the operation first, then the precondition, then the security consequence. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, complete parameter coverage and annotations covering safety, the description only needs to supply the operational and security context, which it does. The remaining gap is the lack of explicit differentiation from build_delivery_url and create_upload_url among nine siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 per the rubric. The description adds no meaning about the four parameters, notably why both 'url' and 'asset_id' are required and which one actually gets signed, which is the main ambiguity an agent would face.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it builds a time-limited (signed) URL for an asset, and it scopes that to assets in a signed folder. That distinguishes it from the unsigned sibling build_delivery_url in substance, but the sibling is never named, so the agent must infer the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use is implied by the 'signed folder' qualifier and the warning about sharing, so an agent can infer this is for private assets. There is no explicit when-not guidance and no named alternative such as build_delivery_url for public assets, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
confirm_uploadA
Finalises a presigned upload once its bytes are in storage; returns the asset.
A conflict error means the bytes haven't landed yet: retry this call, not the PUT.
| Name | Required | Description | Default |
|---|---|---|---|
| transform | No | Transform to apply. On upload it runs before storage. | |
| upload_id | Yes | The `id` create_upload_url returned. | |
| preset_key | No | Key of a saved preset to apply instead of 'transform'. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), so the description builds on top by explaining the conflict error's meaning and the correct retry target — behavior an agent cannot infer from the schema. It stops short of saying whether a second confirm on an already-confirmed upload is a no-op, which matters given idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both load-bearing: the first defines the operation and its return, the second handles the single most likely failure mode. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description still names the return ('returns the asset'), and the error path is covered, so an agent has what it needs to call and retry correctly. The one gap is the absence of any note on repeated confirmation behavior for a non-idempotent mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so upload_id, transform, and preset_key are fully documented in the schema, including that the transform 'runs before storage' and that preset_key is an alternative to transform. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Finalises') and resource ('a presigned upload'), and ties itself into the workflow by naming the prerequisite state ('once its bytes are in storage'). This distinguishes it from create_upload_url (which mints the URL) and from the raw PUT, without the agent needing to guess.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call it (after bytes land in storage) and gives concrete error-recovery guidance ('a conflict error means the bytes haven't landed yet: retry this call, not the PUT'). It does not contrast itself with sibling upload_file, which is the main remaining ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_documentA
Converts a document (Word to PDF, PDF to Word, a PDF page to an image...).
Stored as a new asset. If status is 'processing', the url answers 202
until the conversion finishes.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Full object key (folder path + filename). Excludes folder/folder_id. | |
| page | No | PDF page to render, for png/jpeg output. | |
| path | No | Path of a local file to send. Give this or content_base64, not both. | |
| folder | No | Destination folder slug path, e.g. 'marketing/2026'. Created if missing. | |
| format | Yes | Target format, e.g. pdf or docx. | |
| filename | No | Filename to store, e.g. 'hero.jpg'. Defaults to the path's name. | |
| folder_id | No | UUID of an existing destination folder. | |
| content_base64 | No | File content, base64-encoded (20 MB max). Requires filename. | |
| auto_create_folders | No | False to require the folder path to exist already. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, openWorld=true, and idempotent=false. The description adds real value beyond that: it discloses that output is persisted as a new asset, and it explains the asynchronous behavior where `status` is 'processing' and the `url` returns 202 until conversion completes — a non-obvious operational detail. It stops short of noting that repeated calls create duplicate assets despite a read-modify shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and examples, with no filler. The stray line breaks and parenthetical ellipsis make it slightly less polished but the content is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter conversion tool with a required `format`, full schema coverage, and an output schema, the description covers purpose and the key async status behavior. The source-selection logic (key vs path vs content_base64) is left entirely to the schema, but since the schema documents it precisely, the definition is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input parameters are already fully documented and the description adds no input-parameter semantics. It does mention the output fields `status` and `url`, but the tool has an output schema, so this is supplementary rather than compensating for a gap. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Converts a document') and illustrates it with concrete conversions (Word to PDF, PDF to Word, PDF page to image), so the agent immediately understands the operation. It doesn't distinguish itself from siblings like extract_text or upload_file, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the conversion examples, so an agent can infer this is the tool for format transformation. However, there is no explicit when-to-use versus upload_file (plain storage) or extract_text (text extraction), and no statement of prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_folderA
Creates a folder. Uploads create folders on demand, so this is mainly for setting access control before anything lands.
Access control can only be set on a top-level folder (name, no parent); nested folders inherit it. Folders cannot be deleted through the API.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Create one folder by name. | |
| path | No | Or create a whole chain, e.g. 'clients/acme/logos'. | |
| parent_id | No | Parent folder UUID. | |
| parent_path | No | Parent folder slug path. | |
| access_control_type | No | public, private or signed. Top-level folders only. | |
| default_expiry_seconds | No | Default signed-link lifetime, seconds. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true). The description adds genuinely new behavioral facts: access control is only settable at the top level, nested folders inherit it, and folders cannot be deleted via the API. It does not address the non-idempotent hint, i.e. what happens when the same folder name or path is created twice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, purpose front-loaded, with the caveats following in descending order of importance. Every sentence carries information; the stray line breaks are the only cosmetic flaw.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the annotations carry the safety profile. The description supplies the operationally important constraints for a mutation tool. Remaining gaps are duplicate-creation behavior and which of the mutually exclusive location parameters to choose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description does add one useful constraint tying parameters together: access_control_type only applies to a folder created by name with no parent. However, it never explains the selection logic among the six optional parameters — name vs. path, parent_id vs. parent_path — which is the most consequential semantic question for this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Creates a folder'), and the second sentence carves out a boundary against the upload flow ('Uploads create folders on demand'), which implicitly separates it from upload_file. What keeps it from a 5 is that 'mainly for setting access control' narrows the stated purpose in a way that could make an agent think plain folder creation is not the intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a concrete when-to-use case (pre-creating a top-level folder so access control exists before content lands) and effectively a when-not-needed case (uploads auto-create folders). It does not cover edge cases such as what to do if the folder already exists or how this interacts with list_folders to check first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_presetB
Saves a named transform, applied anywhere with transform preset: key.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Lowercase letters, digits, _. | |
| name | Yes | Human-readable name. | |
| transform | Yes | Must include `format`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true. The description usefully adds how the created key is consumed elsewhere, but it does not say what happens on a duplicate key (relevant given idempotentHint=false), whether an existing preset is overwritten, or what errors to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the action front-loaded and no filler. The trailing clause is slightly terse and takes a second read, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the nested transform fields are fully documented in the schema. Still, for a non-idempotent create tool the description omits key-uniqueness/overwrite behavior and any mention of the sibling preset-listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the note that `transform` must include `format`, so the schema carries most of the burden. The description does add meaning for `key` by showing it is the reference value used as `preset: key` elsewhere, which is a modest but real contribution above the schema's pattern note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Saves a named transform') and clarifies what a saved preset is for. It does not name the sibling `list_presets` or otherwise differentiate from related tools, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'applied anywhere with transform `preset`: key' implies the use case (define once, reuse by key), but there is no explicit when-to-use guidance and no mention of `list_presets` as the alternative for inspecting existing presets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_upload_urlA
Starts a direct-to-storage upload for bytes this server can't read.
PUT the file to upload_url with exactly this Content-Type and Content-Length
(valid about ten minutes), then call confirm_upload with the returned id.
If already_exists is true, skip the PUT and confirm straight away.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Full object key (folder path + filename). Excludes folder/folder_id. | |
| folder | No | Destination folder slug path, e.g. 'marketing/2026'. Created if missing. | |
| filename | No | Filename to store, e.g. 'hero.jpg'. Defaults to the path's name. | |
| folder_id | No | UUID of an existing destination folder. | |
| size_bytes | Yes | Exact size of the file in bytes. | |
| content_hash | No | Hex SHA-256 of the file; skips the upload if Dreep has it. | |
| content_type | Yes | MIME type of the file, e.g. video/mp4. | |
| auto_create_folders | No | False to require the folder path to exist already. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses important behavior: the upload URL is valid for about ten minutes, the PUT must match Content-Type and Content-Length exactly, and already_exists allows skipping the PUT. It also names the required follow-up tool and returned id. With annotations already covering safety and openness, this adds substantial operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, then gives a compact procedural sequence and an edge-case rule. Every sentence carries operational value with no redundant restatement of structured fields. It is appropriately sized for the workflow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given eight parameters, an output schema, and annotations, the description covers the essential workflow: create URL, PUT bytes, handle already_exists, then confirm. The output schema removes the need to explain return values. A minor gap is not naming the upload_file sibling as the alternative path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter documentation is already strong. The description reinforces that content_type and size_bytes must be used exactly as Content-Type and Content-Length during the PUT, but it does not add meaning for the other six parameters beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Starts a direct-to-storage upload'. It also scopes the use case to 'bytes this server can't read', which helps distinguish it from server-read upload paths. However, it does not explicitly name or differentiate from the sibling upload_file tool, so it falls short of full sibling clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use context ('bytes this server can't read') and a concrete follow-up procedure: PUT with exact headers, then call confirm_upload. It also handles the already_exists shortcut. It does not explicitly state when to use upload_file instead, so alternatives are implied rather than named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_textB
Runs OCR on an image or PDF and returns the extracted text.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path of a local file to send. Give this or content_base64, not both. | |
| folder | No | Also store the text as a .txt asset in this folder. | |
| filename | No | Filename to store, e.g. 'hero.jpg'. Defaults to the path's name. | |
| folder_id | No | UUID of an existing destination folder. | |
| content_base64 | No | File content, base64-encoded (20 MB max). Requires filename. | |
| include_blocks | No | Also return line blocks with bounding boxes. | |
| auto_create_folders | No | False to require the folder path to exist already. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description frames the tool as a pure read ("returns the extracted text") while the annotations declare readOnlyHint=false and the schema shows it can write a .txt asset into a folder — a side effect the description never mentions. No annotation contradiction exists, but for a tool with a non-read-only side effect the description should disclose that it can create files, and it does not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that names the operation, the accepted input types, and the primary return value with zero filler. Nothing needs to be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With seven parameters, zero required fields, and an output schema (which removes the need to describe return values), the definition should still state that an agent must supply either `path` or `content_base64`. As written, an agent could plausibly call with no arguments, and the optional asset-storing side effect is never mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the seven parameters is already documented in the schema, including the path-vs-content_base64 exclusivity and the 20 MB cap. The description adds no parameter meaning at all, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Runs OCR on an image or PDF") and the return payload (`text`), which is enough to tell it apart from most siblings such as upload_file or remove_background. It never explicitly contrasts itself with the closest sibling, convert_document, which could also be read as extracting text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use, when-not-to-use, or alternative-tool guidance; the choice between extract_text and convert_document is left entirely to inference. The only selection constraint in the definition ("Give this or content_base64, not both") lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageARead-only
Storage consumed and image, file and folder counts for the project.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the payload covers storage and counts, but leaves open which project is measured (no parameters are accepted, so it must come from credentials or server config) and whether the numbers are live or cached — both material for interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the resources returned, with zero filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema present, return values do not need explaining. The only real gap is the implicit project scoping and data freshness, which the low-complexity shape of the tool makes a minor omission rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. It correctly signals that the result is implicitly scoped rather than parameterized.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific resource and return content: storage consumed plus image, file and folder counts. No sibling tool returns usage metrics, so it is distinguishable by resource alone, though the verb is only implied by the name rather than stated in the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no reference to any alternative or related tool among the many siblings. An agent must infer that this is a reporting/monitoring call from the word 'consumed' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersARead-only
Lists folders with their full paths and access control. With no filter, returns every folder at any depth.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | List this folder's children. | |
| parent_id | No | Or this folder's, by UUID. | |
| root_only | No | Only top-level folders. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavior beyond that: results include full paths and access-control data, and an unfiltered call returns every folder at any depth — an important signal that the default result set can be very large. It stops short of mentioning pagination or size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, with the most decision-relevant fact (unfiltered = everything at any depth) placed where it will be read. Nothing is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and annotations cover safety, so what remains is query semantics — which it handles for the default case. The only gap is guidance on scoping large listings (pagination or filter selection) for a tool that can return an unbounded tree.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (path, parent_id, root_only) is already documented in the schema, including their defaults. The description only alludes to the notion of a filter without adding precedence rules or format details, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("Lists folders") and adds the returned payload shape ("full paths and access control"), which distinguishes it from siblings like list_media and list_presets. It does not name those siblings explicitly, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence implies usage context by explaining that no filter returns everything at any depth, hinting at a narrow-vs-broad query choice. However, it never states when to prefer this over list_media or when to apply path/parent_id/root_only, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mediaARead-only
Lists ready assets, newest first, with pagination.total across all pages.
Each asset has id, url, filename, mimetype, size_bytes and folder.
There is no text search: page through and filter by filename or folder.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, from 1. | |
| limit | No | Assets per page. | |
| folder | No | Only assets in this folder slug path, which must exist. | |
| folder_id | No | Only assets in this folder. | |
| recursive | No | Include assets in subfolders of the folder. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint. The description adds real behavioral context beyond that: results are sorted newest first, `pagination.total` reflects the full count across pages (not just the current page), and no text-search capability exists. It does not discuss rate limits or behavior when a folder slug does not exist, but the added context is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines, with the result ordering and pagination fact front-loaded before the field list and the no-search caveat. Every sentence carries information an agent needs; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so enumerating asset fields is a minor redundancy, and it is otherwise complete: ordering, pagination total semantics, and the absence of search are all covered. The only gap is how folder filtering interacts with paging and recursive, which the schema covers at a basic level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page, limit, folder, folder_id and recursive are all documented in the schema. The description only hints at folder filtering via "filter by filename or folder" and does not clarify the folder vs folder_id or recursive distinctions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Lists ready assets"), adds ordering ("newest first") and pagination semantics ("`pagination.total` across all pages"). The resource is clearly distinct from siblings like list_folders and list_presets, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives actionable guidance for the retrieval task: "There is no text search: page through and filter by filename or folder." That tells an agent how to use the tool rather than what alternatives exist; it does not mention list_folders or folder_id vs folder slug selection, so it stops short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_presetsARead-only
Lists every saved preset with its id, key, name and params.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and scope are covered structurally. The description adds a small amount of behavior by implying the result set is complete rather than filtered or paginated ('every saved preset'), but does not discuss ordering, volume, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, with the return fields appended as useful detail. Nothing is redundant or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the field enumeration in the description is not strictly required, and annotations cover read-only semantics. For a zero-argument list tool the description is complete enough to call correctly; only ordering or size expectations are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. The baseline for a parameterless tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists every saved preset') and even enumerates the returned fields, so the operation is unmistakable. It does not explicitly contrast with the neighbouring create_preset sibling, but the verb 'list' versus 'create' makes the distinction obvious enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no alternatives are named. Usage is only implied by the verb 'Lists' and the zero-argument schema, which is sufficient for such a simple read tool but leaves no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_backgroundA
Cuts the subject out of an image and stores the transparent cutout.
To show it on a colour, build a delivery URL with transform bg, e.g. 'ffffff'.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Path of a local file to send. Give this or content_base64, not both. | |
| folder | No | Destination folder slug path, e.g. 'marketing/2026'. Created if missing. | |
| format | No | png or webp; both keep the alpha channel. | |
| filename | No | Filename to store, e.g. 'hero.jpg'. Defaults to the path's name. | |
| folder_id | No | UUID of an existing destination folder. | |
| content_base64 | No | File content, base64-encoded (20 MB max). Requires filename. | |
| auto_create_folders | No | False to require the folder path to exist already. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description adds useful context that the operation persists a new stored asset with an alpha channel rather than returning an inline result, plus how to later display it. It does not discuss overwrite behaviour on name collisions despite idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and effect, with no filler. The second sentence is slightly cryptic — it references a `bg` transform and a bare hex value without naming the tool that applies it — but it earns its place as actionable follow-up guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With seven fully described parameters and an output schema present, the description does not need to explain return values, and it correctly covers the essential action and storage side effect. Gaps are minor: it says nothing about source image limitations or what happens when the destination filename already exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters (path, content_base64, folder, folder_id, format, filename, auto_create_folders) are already documented in the schema, including the mutual exclusivity of source options. The description contributes nothing additional about parameters; the colour hex in the example relates to a delivery transform, not an input. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('cuts the subject out of an image') plus the effect ('stores the transparent cutout'), which is clearly distinct from siblings like upload_file, convert_document, or extract_text. It never names an alternative tool directly, so sibling differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (isolating a subject from an image) and gives a follow-up hint about rendering the cutout over a colour via a `bg` transform, which implicitly points at build_delivery_url. However, it gives no explicit when-to-use/when-not guidance and does not name that sibling or any alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileA
Uploads an image, video, audio file or document to Dreep and returns the asset.
The result's url is the ready-to-use delivery URL. Files over 100 MB stream
straight to storage through a presigned upload. A transform given here is
applied before storage and replaces the original.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | Full object key (folder path + filename). Excludes folder/folder_id. | |
| path | No | Path of a local file to send. Give this or content_base64, not both. | |
| folder | No | Destination folder slug path, e.g. 'marketing/2026'. Created if missing. | |
| filename | No | Filename to store, e.g. 'hero.jpg'. Defaults to the path's name. | |
| folder_id | No | UUID of an existing destination folder. | |
| transform | No | Transform to apply. On upload it runs before storage. | |
| preset_key | No | Key of a saved preset to apply instead of 'transform'. | |
| content_type | No | MIME type; guessed from the filename if omitted. | |
| content_base64 | No | File content, base64-encoded (20 MB max). Requires filename. | |
| auto_create_folders | No | False to require the folder path to exist already. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=true), and the description adds genuinely non-obvious behavior: the 100 MB presigned streaming path, and that a transform runs before storage and replaces the original rather than producing a separate derived asset. It stops short of stating auth requirements or failure modes, so a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool does and what it returns, followed by the two operationally important caveats. No filler or restated field names.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the brief mention of the `url` field is sufficient and return values need no further explanation. For a 10-parameter upload tool the description covers the important behavioral surprises, though it leaves the routing question against the presigned-upload siblings unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; every parameter, including the full TransformInput object, is already documented inline. The description adds only the timing semantics of `transform` (applied before storage, replacing the original), which is useful but narrow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Uploads an image, video, audio file or document to Dreep') and names the outcome ('returns the asset'). It does not, however, distinguish itself from siblings like create_upload_url and confirm_upload, which appear to implement the two-step presigned flow this tool is adjacent to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note that files over 100 MB stream through a presigned upload implies this tool handles large files directly, but there is no explicit when-to-use/when-not guidance versus create_upload_url + confirm_upload. The choice between inline base64 and this tool is only documented in the schema, not in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
v0.1.0- First observed
build_delivery_url - First observed
build_signed_url - First observed
confirm_upload - First observed
convert_document - First observed
create_folder - First observed
create_preset - First observed
create_upload_url - First observed
extract_text - First observed
get_usage - First observed
list_folders - First observed
list_media - First observed
list_presets - First observed
remove_background - First observed
upload_file
TDQS
Scored across 14 tools
Most tools have clearly distinct purposes tied to a resource+action: upload, transform URL building, listing, image/doc operations, folder and preset management. The only friction is the upload trio (upload_file, create_upload_url, confirm_upload), where an agent must understand that create_upload_url handles large/unreadable files and confirm_upload finalizes them, but the descriptions do spell this out.
Every tool follows a consistent verb_noun pattern: upload_file, confirm_upload, build_delivery_url, create_upload_url, list_media, remove_background, extract_text, convert_document, build_signed_url, create_folder, list_folders, create_preset, list_presets, get_usage. No mixed conventions or stray camelCase; the naming is highly predictable.
Fourteen tools is well within the ideal 3-15 range for a media asset management server. Each tool earns its place by covering a distinct operation: two upload paths, URL building, listing, image/doc transforms, folders, presets, and usage. Nothing feels redundant.
The surface covers upload (both direct and presigned), listing, on-the-fly transforms, image background removal, OCR, document conversion, signed URLs, folders, presets, and usage. Minor gaps exist: there's no delete for assets or presets, and no get-single-asset or text search, but these are either explicitly explained (folders can't be deleted via API) or workable via listing.
Maintenance
Related MCP Connectors
Image infrastructure for agents. Upload, transform, and deliver images through MCP, CLI, or API.
Hosted MCP tools for FFmpeg-style video and audio processing through FFMPEG API.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
FFmpeg processing for video, audio and images via MCP with OAuth and shared account allowance.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables document conversion and processing through MCP, including Office/PDF/Markdown conversions, OCR, and PDF operations like split, rotate, encrypt, and extract.MIT
- FlicenseNot gradedqualityCmaintenanceEnables MCP clients to analyze, inspect, and manipulate images and videos with deterministic FFmpeg/sharp tools and pluggable AI providers, returning timestamped, evidence-backed results that can be independently re-verified.1-
- FlicenseCqualityBmaintenanceProvides a durable MCP media pipeline for image, video, audio, and storyboard generation, with FFmpeg composition, provider routing, and resumable long-running jobs.21-
- AlicenseNot gradedqualityBmaintenanceEnables image and video generation and editing through MCP tools, including image editing, upscaling, background removal, video generation, image-to-video, and video extension. Video generation runs asynchronously with job status and result retrieval.MIT