Skip to main content
Glama

PyPI npm CI MCP License: MIT

Dreep docs · API reference · Python SDK · Changelog · Report a bug


Ask your agent things like:

"Upload ~/Desktop/launch/hero.png to marketing/2026 and give me a 1200px WebP and a 400px square thumbnail."

"Pull the text out of this scanned invoice."

"Convert contract.docx to PDF and give me a link that expires in an hour."

"Cut the background out of product.jpg and show it on white."

Contents

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" .-> CDN
  1. Your MCP client starts dreep-mcp on your machine (stdio), or connects to one you host (streamable HTTP).

  2. 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.

  3. Each tool calls the official dreep Python SDK, which talks to the Dreep API with your key. Delivery and signed URLs are built locally, with no API call.

  4. Results come back as structured JSON. Every asset carries the delivery url exactly 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

  1. Create an API key on the API Keys page of the Dreep dashboard.

  2. Install uv, which runs the server with no separate install step:

    curl -LsSf https://astral.sh/uv/install.sh | sh
  3. Add the server to your client (below). Any of these three commands starts the same server:

    Runner

    Command

    Needs

    uvx (recommended)

    uvx dreep-mcp

    uv

    npx

    npx -y dreep-mcp

    Node 18+ plus uv or pipx

    pip

    pip install dreep-mcp, then dreep-mcp

    Python 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.json

  • Windows: %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 (run which uvx, for example /Users/you/.local/bin/uvx). GUI apps don't always inherit your shell's PATH.

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 8000

The 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

upload_file

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

create_upload_url

Starts a presigned upload for bytes the server can't read (PUT them, then confirm).

writes

confirm_upload

Finalises a presigned upload and returns the asset.

writes

list_media

Lists assets with pagination, filtered by folder.

read-only

remove_background

Cuts the subject out of an image and stores a transparent PNG or WebP.

writes

extract_text

OCR for images and PDFs, optionally with line blocks and bounding boxes.

writes

convert_document

Word ↔ PDF, Excel, PowerPoint, CSV, or a PDF page to PNG/JPEG.

writes

build_delivery_url

Resize, crop, convert, compress, blur, round or trim an asset at the CDN.

local, no network

build_signed_url

A time-limited link for an asset in a signed folder.

local, no network

create_folder

Creates a folder or a whole path, with access control (public, private, signed) on top-level folders.

writes

list_folders

Lists folders with their paths and access control.

read-only

create_preset

Saves a named transform for reuse.

writes

list_presets

Lists saved presets.

read-only

get_usage

Storage used and image, file and folder counts.

read-only

delete_media

Permanently deletes an asset. Only when DREEP_MCP_ALLOW_DELETE is set.

destructive

delete_preset

Deletes a preset. Only when DREEP_MCP_ALLOW_DELETE is set.

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-SHA256 over "{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

DREEP_API_KEY

yes

Your project API key.

DREEP_SIGNING_SECRET

for signed URLs

The URL Signing Secret from the dashboard's API Keys page.

DREEP_MCP_ALLOW_DELETE

no

1 registers delete_media and delete_preset. Off by default.

DREEP_MCP_FILE_ROOTS

no

Directories the file tools may read, separated by : (; on Windows). Unset over stdio means any file you can read; unset over HTTP means none.

DREEP_MCP_HTTP_TOKEN

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

--transport

stdio

--host

127.0.0.1

--port

8000

--path

/mcp

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 tests

Try 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-mcp

The layout:

Path

What lives there

src/dreep_mcp/_tools_*.py

One module per tool group: uploads, media, processing, URLs, project

src/dreep_mcp/_server.py

Builds the server and registers every tool group

src/dreep_mcp/_cli.py

The dreep-mcp command and both transports

src/dreep_mcp/_params.py, _transform_input.py

The schemas the agent reads

npm/

The npx launcher

scripts/rules/

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

MIT

Available Tools

14 tools
build_delivery_urlA
Read-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.

NameRequiredDescriptionDefault
urlYesThe asset's delivery URL exactly as Dreep returned it (from upload/list).
transformNoTransform to apply. On upload it runs before storage.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_urlA
Read-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.

NameRequiredDescriptionDefault
urlYesThe asset's delivery URL exactly as Dreep returned it (from upload/list).
asset_idYesThe asset's `id`; this is what is signed.
transformNoTransform to apply. On upload it runs before storage.
expires_in_secondsYesSeconds until the link stops working.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

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: 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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
transformNoTransform to apply. On upload it runs before storage.
upload_idYesThe `id` create_upload_url returned.
preset_keyNoKey of a saved preset to apply instead of 'transform'.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
keyNoFull object key (folder path + filename). Excludes folder/folder_id.
pageNoPDF page to render, for png/jpeg output.
pathNoPath of a local file to send. Give this or content_base64, not both.
folderNoDestination folder slug path, e.g. 'marketing/2026'. Created if missing.
formatYesTarget format, e.g. pdf or docx.
filenameNoFilename to store, e.g. 'hero.jpg'. Defaults to the path's name.
folder_idNoUUID of an existing destination folder.
content_base64NoFile content, base64-encoded (20 MB max). Requires filename.
auto_create_foldersNoFalse to require the folder path to exist already.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
nameNoCreate one folder by name.
pathNoOr create a whole chain, e.g. 'clients/acme/logos'.
parent_idNoParent folder UUID.
parent_pathNoParent folder slug path.
access_control_typeNopublic, private or signed. Top-level folders only.
default_expiry_secondsNoDefault signed-link lifetime, seconds.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
keyYesLowercase letters, digits, _.
nameYesHuman-readable name.
transformYesMust include `format`.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

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 ('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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
keyNoFull object key (folder path + filename). Excludes folder/folder_id.
folderNoDestination folder slug path, e.g. 'marketing/2026'. Created if missing.
filenameNoFilename to store, e.g. 'hero.jpg'. Defaults to the path's name.
folder_idNoUUID of an existing destination folder.
size_bytesYesExact size of the file in bytes.
content_hashNoHex SHA-256 of the file; skips the upload if Dreep has it.
content_typeYesMIME type of the file, e.g. video/mp4.
auto_create_foldersNoFalse to require the folder path to exist already.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

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: '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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
pathNoPath of a local file to send. Give this or content_base64, not both.
folderNoAlso store the text as a .txt asset in this folder.
filenameNoFilename to store, e.g. 'hero.jpg'. Defaults to the path's name.
folder_idNoUUID of an existing destination folder.
content_base64NoFile content, base64-encoded (20 MB max). Requires filename.
include_blocksNoAlso return line blocks with bounding boxes.
auto_create_foldersNoFalse to require the folder path to exist already.

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_usageA
Read-only

Storage consumed and image, file and folder counts for the project.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_foldersA
Read-only

Lists folders with their full paths and access control. With no filter, returns every folder at any depth.

NameRequiredDescriptionDefault
pathNoList this folder's children.
parent_idNoOr this folder's, by UUID.
root_onlyNoOnly top-level folders.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_mediaA
Read-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.

NameRequiredDescriptionDefault
pageNoPage number, from 1.
limitNoAssets per page.
folderNoOnly assets in this folder slug path, which must exist.
folder_idNoOnly assets in this folder.
recursiveNoInclude assets in subfolders of the folder.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_presetsA
Read-only

Lists every saved preset with its id, key, name and params.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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'.

NameRequiredDescriptionDefault
pathNoPath of a local file to send. Give this or content_base64, not both.
folderNoDestination folder slug path, e.g. 'marketing/2026'. Created if missing.
formatNopng or webp; both keep the alpha channel.
filenameNoFilename to store, e.g. 'hero.jpg'. Defaults to the path's name.
folder_idNoUUID of an existing destination folder.
content_base64NoFile content, base64-encoded (20 MB max). Requires filename.
auto_create_foldersNoFalse to require the folder path to exist already.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
keyNoFull object key (folder path + filename). Excludes folder/folder_id.
pathNoPath of a local file to send. Give this or content_base64, not both.
folderNoDestination folder slug path, e.g. 'marketing/2026'. Created if missing.
filenameNoFilename to store, e.g. 'hero.jpg'. Defaults to the path's name.
folder_idNoUUID of an existing destination folder.
transformNoTransform to apply. On upload it runs before storage.
preset_keyNoKey of a saved preset to apply instead of 'transform'.
content_typeNoMIME type; guessed from the filename if omitted.
content_base64NoFile content, base64-encoded (20 MB max). Requires filename.
auto_create_foldersNoFalse to require the folder path to exist already.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 14 tool updatesv0.1.0
    • First observedbuild_delivery_url
    • First observedbuild_signed_url
    • First observedconfirm_upload
    • First observedconvert_document
    • First observedcreate_folder
    • First observedcreate_preset
    • First observedcreate_upload_url
    • First observedextract_text
    • First observedget_usage
    • First observedlist_folders
    • First observedlist_media
    • First observedlist_presets
    • First observedremove_background
    • First observedupload_file

TDQS

A3.8/5.0

Scored across 14 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables document conversion and processing through MCP, including Office/PDF/Markdown conversions, OCR, and PDF operations like split, rotate, encrypt, and extract.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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