Yungle
The Yungle MCP server lets you inspect your account, transfers, collections, files, folders, guests, and contacts, and prepare draft transfers for later upload.
Get account and storage details: plan, quota, key permissions.
List and inspect transfers: recent transfers, file details, malware verdicts, recipient status, download receipts.
List and inspect collections: details, files, folders, guests.
List contacts.
Prepare a draft transfer for files you upload yourself via browser or Yungle CLI; it does not upload files or email anyone.
All operations are read-only except create_transfer, and the server cannot access your vault or end-to-end encrypted transfers.
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., "@Yunglelist my recent transfers"
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.
Yungle for developers
Send large files from your terminal, your scripts and your AI assistant. Private, sustainable file transfer: a WeTransfer alternative with a CLI, an MCP server, typed SDKs and webhooks.
Website · Docs · API reference · CLI · MCP · TypeScript · Python
npm install -g yungle-cli
yungle login # opens your browser, once
yungle send ./render.mov # uploads resumably, prints the linkWant Yungle to email the link for you? Sign in with an API key (yungle login --key) and add
--to client@example.com. A browser sign-in makes links but never emails anyone, so a phished
sign-in code can't be used to mail strangers.
What's in here
Install | What it's for | |
| Send, receive and sync files from a terminal or CI — both ways, folders kept, checksums verified. Resumes after a dropped connection or a closed lid | |
In Claude's directory | Connect Claude, Cursor or any MCP client with one sign-in: ask what arrived, share big files (Yungle can fetch them from a URL), download what you were sent, approve every send | |
| The whole API, typed and dependency-free, with resumable uploads from any | |
| The API from Python, with a one-call | |
| Send build artefacts to a client from CI and get the link back as an output | |
GitHub Actions, nightly reports, and more at yungle.co/developers/recipes |
All of it talks to the same public REST API (OpenAPI 3.1), which CI checks these clients against on every change.
Related MCP server: reMarkable MCP Server
The CLI
Built to be pleasant for a person and predictable for a script. Pretty at a terminal, just the
link when piped, JSON with --json.
yungle send ~/Shoot --to anna@studio.nl --message "Final selects" # send a folder
yungle send dist/ --json | jq -r .url # in a script
yungle get https://yungle.co/t/emerald-palm-a5mt # download, no account needed
yungle send --from-url "https://bucket.s3.eu-central-1.amazonaws.com/render.mov?…" # Yungle fetches it
yungle pull --collection 01J8Z3M9Q0W4 # your collection, to disk
yungle status # who downloaded what
yungle watch ~/Renders --collection 01J8Z3M9Q0W4 # upload new files as they land
yungle webhooks listen --forward-to http://localhost:8080/hooks # test webhooks locallyResumable, big uploads. Interrupt
yungle send, run it again, and it continues from the last committed part instead of starting over.Guided when you leave something out.
yungle sendon its own asks what to send and to whom. Never in CI, never with--jsonor--yes: a script can't hang on a question.Errors tell you the fix. Every failure ends with the one command that gets you unstuck, and a typo gets a did you mean.
Tab completion for zsh, bash and fish:
yungle completion zsh.
Full reference: apps/cli · yungle.co/developers/cli
Connect your AI assistant
In Claude: add Yungle from Claude's connector directory and sign in.
Anywhere else (Cursor, VS Code, any MCP client): add Yungle as a remote MCP server and sign in once. No key to copy.
https://yungle.co/mcpThen ask things like "Did Anna download the final set?", "Which deliveries expire this
week?" "Share these three files with the client.", "Send the client the render in our S3 bucket." or
"What's in the link Anna sent me?" A chat cannot carry a 40 GB file, so the assistant doesn't:
Yungle fetches it from where it already is, or the assistant runs a one-file npx yungle-cli put
command in its shell. The assistant prepares; you approve every send before an email leaves. There is no tool that deletes, revokes or invites, and
everything the server returns is labelled as untrusted data, because a filename can carry a
prompt injection.
Prefer a local server with an API key? yungle mcp install writes the config for Claude
Desktop, Claude Code, Cursor or Windsurf. Details: packages/mcp-server.
The SDKs
import { YungleClient } from 'yungle-client';
const yungle = new YungleClient({ apiKey: process.env.YUNGLE_API_KEY! });
for await (const t of yungle.allTransfers()) console.log(t.title, t.downloadCount);from yungle import Yungle
sent = Yungle().send(["render.mov"], to=["client@example.com"], message="Final cut")
print(sent["url"])Both retry what is safe to retry, put an Idempotency-Key on every POST so a retry never makes
a second copy, follow cursor pagination for you, and verify webhook signatures.
Webhooks
Get told instead of polling: transfer.ready, transfer.downloaded, transfer.expiring,
transfer.expired, and on paid plans collection.file_uploaded. Each delivery is signed with
HMAC-SHA256 and retried with backoff. No public URL? Leave it out and pull the events instead.
import { verifyWebhook } from 'yungle-client';
const ok = await verifyWebhook(rawBody, req.headers['yungle-signature'], process.env.YUNGLE_WEBHOOK_SECRET!);Plans and limits
Every account can use the API, the CLI and the MCP server, the free plan included: transfers up to 10 GB, contacts, webhooks, and downloading any link. Collections and files that never expire come with a paid plan. The first 10 GB of API uploads each month are free, then €0.02/GB from prepaid credit. Pricing
Why Yungle
In Europe, run by a European company. Your files are stored and served from EU infrastructure.
Always encrypted. Every file gets its own key, and transfers can be end-to-end encrypted in the browser when you need it.
Sustainable. Renewable hydropower, in a data centre with a PUE of 1.13. What that does and doesn't mean.
Not reachable from here: your vault and end-to-end encrypted transfers. Their keys are derived in your browser and never sent to Yungle, so no API can read them. See what the API can't do.
Contributing
pnpm install
pnpm typecheck && pnpm lint && pnpm test && pnpm build
pnpm contract # check the clients (operations and types) against the live OpenAPI specThis repository is where the clients are developed; the Yungle service itself is not open source. Issues and pull requests are welcome, see CONTRIBUTING.md. Security reports go through security.txt.
MIT
Available Tools
15 toolscreate_transferPrepare a transferAInspect
Prepare a draft transfer for files that live on a machine with a shell, and return one
upload command per file. Each command (npx -y yungle-cli put …) needs no Yungle key: it
carries a token that can write only that file, for two hours, and it resumes if interrupted.
Nothing is shared and nobody is emailed until the transfer is finalized.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | ||
| title | No | Label for the dashboard; never shown to recipients. | |
| expiresInDays | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, idempotentHint=false, destructiveHint=false; the description goes well beyond them. It discloses that the token is write-scoped to a single file, expires in two hours, resumes if interrupted, requires no Yungle key, and that nothing is shared or emailed until the transfer is finalized. That is rich, non-obvious behavioral context consistent with the annotations.
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 front-loaded sentences: what it does and returns first, then the mechanics of the command, then the safety guarantee. Every sentence carries distinct information with no padding or repetition of the schema.
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 output schema, the description usefully explains the return value (one command per file), and annotations cover the mutation safety profile. It mentions finalization but does not name the tool or step that performs it, leaving a small gap in the workflow for an agent that must complete the transfer.
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 only 33%, and the description adds no meaning for the parameters: 'expiresInDays' and the item-level 'name' are undocumented in both places, and 'title'/'path'/'size'/'localPath' explanations come only from the schema. A 2 is warranted because the description does not compensate for the coverage gap on a tool where the draft's lifetime parameter in particular matters.
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 precise verb+resource ('Prepare a draft transfer') and states exactly what is returned ('one upload command per file'). It also scopes the tool ('files that live on a machine with a shell'), which distinguishes it cleanly from the download-oriented siblings like download_files and get_download_links.
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 a genuine precondition for use ('files that live on a machine with a shell') and clarifies that nothing is shared until finalization, which tells the agent this is a preparatory step. However, it never names an alternative tool or an explicit when-not-to-use condition, so routing is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_filesDownload files to this computerAIdempotentInspect
Save the files of a Yungle link, or of one of your own transfers or collections, into a
folder on this machine — resumably, keeping their folder structure. Files land in a new
subfolder of directory; nothing outside it is written, and files already there at full
size are skipped. Returns the saved paths.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A Yungle link someone shared: https://yungle.co/t/… (transfer) or https://yungle.co/c/… (collection). | |
| password | No | For a password-protected link. | |
| directory | Yes | Absolute path of an existing folder to save into, e.g. ~/Downloads expanded. | |
| transferId | No | The id of one of your own transfers (when there is no link). | |
| collectionId | No | The id of one of your own collections (when there is no link). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and the description meaningfully reinforces them: write scope is bounded ('nothing outside it is written'), the operation is resumable, folder structure is preserved, and existing full-size files are skipped. It adds scope and skip behavior beyond the hints, though it says nothing about auth/permissions or rate 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?
Front-loaded with the verb and resource, then tight behavioral clauses. Every sentence earns its place; the em-dash aside is slightly informal but not wasteful.
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 write tool with no output schema, the description covers placement, scope, resumability, and return value ('Returns the saved paths'). It is complete enough to invoke correctly, with only permissions/error behavior left implicit.
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 schema documents every parameter; baseline is 3. The description adds genuine meaning by clarifying the identifier relationship (a shared link URL versus your own transfer/collection ids) and by explaining how `directory` is used (files land in a new subfolder, not scattered into it).
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 ('Save the files') and names the exact resources it operates on (a Yungle link, one of your own transfers or collections). This clearly separates it from siblings like get_download_links or get_transfer, which surface metadata/links rather than saving files to the local machine.
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 when to use it ('into a folder on this machine'), which contrasts with link/metadata siblings, but it names no alternative explicitly and gives no when-not-to-use or prerequisites. Usage is inferable but not routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountAccount and storageARead-onlyInspect
Answers: how much storage am I using? how much is left? what plan am I on? what can this connection do? Returns the workspace, its plan and quota, and the key's permissions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds useful behavioral context by specifying that it returns the workspace, plan, quota, and the key's permissions, which tells the agent what kind of information to expect. No side effects or hidden behaviors are implied.
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 tight sentences, with the question-style framing front-loaded and the concrete return list following immediately. Every word earns its place and there is no repetition of schema or annotation content.
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 parameterless read-only introspection tool, the description covers what the call is for and what it returns. No output schema exists, but the description lists the key result categories (workspace, plan, quota, permissions), which is enough for an agent to invoke and interpret the result correctly.
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 has zero parameters, so there are no parameter semantics for the description to clarify. With an empty input schema, the description's mention of what the call answers is the only meaningful semantic content, and it is adequate.
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 resource (the connected account/workspace) and the concrete outputs: workspace, plan, quota, and key permissions. It enumerates the questions the tool answers, making its purpose immediately unambiguous. No sibling tool overlaps with this account-level introspection role.
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 frames usage by the questions it answers ('how much storage am I using?', 'what can this connection do?'), giving an agent clear context for when to call it. It does not explicitly name alternatives or exclusions, but none of the sibling tools serve the same purpose, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionCollection detailBRead-onlyInspect
Answers: what is the link for this collection? how much is in it? when does it expire? Returns one collection with its secret share link, file count, total size and expiry.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read behavior is covered. The description adds useful context by revealing that the return includes a secret share link and an expiry, which go beyond a generic read-only label, though it does not address auth requirements or error behavior.
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 short and front-loaded with the key questions it answers, followed by the concrete return fields. Every sentence earns its place, though the Q&A phrasing is slightly informal for a tool contract.
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?
This is a simple one-id lookup with no output schema, and the description adequately lists the return payload fields. It is incomplete, though, because it never links the id parameter to the resource or points to list_collections as the way to obtain valid ids, leaving the agent to make that connection itself.
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 0% and the description never explains that the required id parameter is the collection identifier. The id field is simple and inferable from the tool name, but the description provides no explicit parameter meaning, so it fails to compensate for the missing schema documentation.
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 identifies a specific verb (returns) and resource (one collection) and enumerates concrete fields: secret share link, file count, total size, expiry. It does not explicitly contrast with sibling tools such as get_transfer or list_collections, so it falls short of top-tier differentiation.
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 use when you need a collection's link, size, count, or expiry, but it never states when to choose this over list_collections, list_collection_files, or get_transfer. There are no prerequisites, exclusions, or explicit alternatives, leaving the agent to infer routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_download_linksDownload linksARead-onlyInspect
Answers: what is in this link someone sent me? how do I get these files? Turns a Yungle link (https://yungle.co/t/… or /c/…), or one of your own transfers or collections, into signed download URLs: one per file, with its folder path, plus a ZIP. The URLs need no key, support HTTP Range (resumable), and work for 24 hours — fetch them with curl or any HTTP client. Resolving someone else's link counts as one download of it, like opening it in a browser.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | A Yungle link someone shared: https://yungle.co/t/… (transfer) or https://yungle.co/c/… (collection). | |
| password | No | For a password-protected link. | |
| transferId | No | The id of one of your own transfers (when there is no link). | |
| collectionId | No | The id of one of your own collections (when there is no link). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint; the description adds substantively beyond them: URLs are signed and key-free, support HTTP Range for resumable downloads, expire after 24 hours, and resolving someone else's link consumes one download of it. These are exactly the operational facts an agent needs before invoking.
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?
Front-loaded with the user-intent question, then the mechanics. Slightly chatty in the opening clause, but every sentence carries information (URL forms, output shape, expiry, Range support, download accounting).
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 output schema, the description compensates by describing the return value precisely: one signed URL per file, each with its folder path, plus a ZIP. Combined with the parameter docs, expiry, and auth-free access, an agent has everything needed to call and use the result.
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 schema already documents all four parameters with the same URL-format detail. The description's mention of 'one of your own transfers or collections' mirrors what the schema says (transferId/collectionId when there is no link). Baseline 3 applies – it adds little beyond the schema.
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 (turn a link/transfer/collection into signed download URLs) and resource, and frames it around the agent's question ('what is in this link someone sent me?'). It is clearly distinguishable from mutating siblings like create_transfer and from pure metadata readers like get_transfer.
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 when to use it (a shared Yungle link, or one of your own transfers/collections) and gives the concrete input forms. It does not explicitly name an alternative sibling or an exclusion, so it stops short of the top score, but the trigger conditions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transferTransfer detailARead-onlyInspect
Answers: what is in this transfer? was it delivered? has a specific recipient downloaded it? is it safe to share? Returns the files with their malware-scan verdicts, plus per-recipient delivery and download status for one transfer id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Transfer id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already declaring the safety profile, the description earns credit for disclosing the payload specifics an agent cannot get from annotations: malware-scan verdicts and per-recipient delivery/download state. It stops short of noting auth/permission requirements or whether the scan verdict can be stale or pending.
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 sentence, front-loaded with the question-shaped use cases followed by the concrete return contents. No filler, no repetition of the title or annotations, and every clause carries selection or interpretation value.
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 one-parameter read tool with no output schema, the description does the necessary work of describing the return payload (files, scan verdicts, per-recipient status), which an agent needs to use the result. It is only slightly incomplete in not clarifying its relationship to the similar get_transfer_downloads sibling.
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?
There is a single parameter with 100% schema description coverage, so the schema fully documents the 'id' field and the baseline is 3. The description only reinforces that the id scopes to 'one transfer id' without adding format, source, or lookup guidance.
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 resource (one transfer) and enumerates exactly what it reports: files with malware-scan verdicts plus per-recipient delivery and download status. It clearly distinguishes itself from generic listing tools, though it never names the closely related sibling get_transfer_downloads to clarify the overlap.
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?
Framing the tool as answering 'was it delivered?', 'has a specific recipient downloaded it?', and 'is it safe to share?' implies when it is useful, which is better than nothing. However, there is no explicit when-not guidance or pointer to alternatives such as get_transfer_downloads, list_transfers, or download_files, so selection still requires inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transfer_downloadsDownload receiptsARead-onlyInspect
Answers: did the client download it? when? how many times? Returns download events with timestamps and per-recipient status. One visit can fetch several files: events that share a sessionId belong to the same visit.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description adds behavioral context by explaining that events sharing a sessionId belong to the same visit and that one visit can fetch several files. This goes beyond the annotations and helps the agent interpret the response structure.
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 carry all necessary information concisely. The purpose is front-loaded with the question answers, and the sessionId grouping note is included without any fluff.
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 tool with one simple parameter and no output schema, the description adequately explains the return concept (download events with timestamps, per-recipient status, sessionId grouping). However, it omits explicit parameter semantics and any mention of prerequisites or edge cases, leaving some ambiguity about how to target a specific transfer.
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 0%, so the description must compensate for the undocumented 'id' parameter. However, it never explicitly states that 'id' refers to the transfer identifier; it only implies it via 'did the client download it?'. This is a meaningful gap that could cause incorrect invocation.
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+resource: it returns download events for a transfer, with timestamps and per-recipient status. It clearly differentiates itself from sibling tools like get_transfer and list_transfers by focusing on download receipts and the sessionId grouping concept.
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 frames usage as answering 'did the client download it? when? how many times?', which gives clear context for when this tool is appropriate. It does not explicitly exclude alternatives or mention when not to use it, but the purpose itself largely defines the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upload_requestUpload request detailARead-onlyInspect
Answers: who has uploaded through this link, when, and how much? Returns the request and its submissions, newest first, with the name, email and note each uploader typed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Upload request id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds meaningful behavioral context beyond that: results are returned newest first and include the name, email, and note typed by each uploader.
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 compact and front-loads the key use case with a direct question, then answers it in one clear sentence. It is efficient, though the question-and-answer structure is slightly stylistic.
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 output schema, the description appropriately explains the returned content: the request and its submissions, ordered newest first, with uploader details. It does not cover pagination or response structure, but it is sufficient for a simple single-id read 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%, and the single id parameter is fully documented in the schema. The description does not add any further meaning about the id format or constraints, so the baseline of 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 clearly states what the tool returns: a specific upload request and its submissions, including uploader details and timestamps. It is specific enough for an agent to understand the resource, though it does not explicitly distinguish itself from the sibling list_upload_requests.
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 question it answers and the required id, making it clear this is for inspecting a single upload request's submissions. However, it gives no explicit when-to-use guidance or alternatives such as list_upload_requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collection_filesFiles in a collectionARead-onlyInspect
Answers: what files are in this collection? what is in this folder? are the raws uploaded yet? Returns filenames, sizes and types. Omit folderId for every file; pass "root" for the top level only, or a folder id. Filenames only — never file contents.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| folderId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds meaningful behavioral context beyond that: it returns filenames, sizes, and types (not contents), and it clarifies the folderId semantics including the special 'root' value. It doesn't mention pagination or ordering, but for a read-only listing tool this is a strong disclosure.
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, each earning its place: the questions frame the purpose, the return fields are stated, the folderId semantics are given, and the content boundary is explicit. No filler or repetition of schema/annotation data.
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 read-only listing tool with no output schema, the description covers the key things an agent needs: what it returns, how to scope it, and what it won't do. Minor gaps are pagination/ordering and whether folderId is required for subfolder listings, but the core calling contract is clear.
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 0%, so the description must compensate. It does: it explains that 'id' identifies the collection, and it explains the special meaning of folderId ('root' for top level, a folder id for subfolders, omitted for all files). It doesn't give exact formats for ids, but the semantic guidance is substantial and directly actionable.
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 opens with concrete questions it answers ('what files are in this collection? what is in this folder? are the raws uploaded yet?'), then names the resource (files in a collection/folder) and explicitly distinguishes itself from file-content retrieval ('Filenames only — never file contents'). This clearly differentiates it from siblings like list_folders and get_transfer_downloads.
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 explicit usage guidance: omit folderId for every file, pass 'root' for the top level only, or pass a folder id. It also tells the agent when to use this tool (to check if raws are uploaded) and what it will not do (never return file contents), which helps route away from content-returning tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsList collectionsARead-onlyInspect
Answers: what collections do I have? which are empty? how big is each one? Returns collections with file counts, sizes and when each was last touched. A collection is a durable space clients are invited into, as opposed to a one-off transfer. Never includes the vault, which is unreadable to this server by design.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, but the description adds valuable behavioral details beyond that: it returns file counts, sizes, and last-touched timestamps, and it explicitly excludes the vault by design. This gives the agent expectations about data scope and content without contradicting the annotation.
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 sentences, each earning its place. The front-loaded questions directly state the tool's value, the definition of a collection clarifies terminology, and the vault exclusion is a critical caveat. No filler or repetition.
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 parameterless list tool, the description is complete: it states the exact return content (counts, sizes, last touched), defines the resource type, and discloses the exclusion of the vault. No output schema exists, but the description sufficiently sets expectations for what the agent will receive.
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 has zero parameters, so the schema trivially covers everything. Per the rubric, 0 params merits a baseline of 4. The description adds no parameter-specific information, but none is needed since there are none.
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 clearly states the verb 'list' and resource 'collections', and immediately answers the common questions an agent would ask (what do I have, which are empty, how big). It explicitly distinguishes collections from one-off transfers and names the vault exclusion, so it separates cleanly from sibling tools like list_transfers and get_collection.
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 when to use this tool by contrasting collections with one-off transfers and noting the vault is never included, which steers an agent toward the correct sibling for transfers or vault data. It does not explicitly say 'use this when you need an overview' but the context is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsAddress bookARead-onlyInspect
Answers: what is this client's email address? who do I have saved? Returns the workspace address book. A contact grants no access on its own — it is a convenience, not a permission.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by adding a critical behavioral note: 'A contact grants no access on its own — it is a convenience, not a permission.' This prevents misuse by clarifying that retrieved contacts are not authorization tokens, adding real behavioral context that annotations alone do not convey.
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 two sentences: the first front-loads the purpose with examples, and the second adds a crucial caveat. Both sentences earn their place; there is no filler or redundancy.
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 tool with no parameters and a simple read operation, the description is adequate. It states what is returned (the workspace address book) and adds the permission caveat. It could be slightly more specific about the fields in the address book, but that is not essential for a correct call.
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 has zero parameters, so the schema fully covers everything. The baseline for 0 params is 4, and the description correctly focuses on the resource and meaning rather than inventing parameter details.
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 explicitly states the tool returns the workspace address book and gives example questions it answers ('what is this client's email address?', 'who do I have saved?'). This clearly identifies a specific verb ('returns') and resource (address book) and distinguishes it from sibling tools about transfers, collections, folders, and guests.
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 usage when contact information is needed, but does not explicitly state when to use this tool vs. alternatives like get_account or list_guests, nor does it provide exclusions. There is no guidance about when not to use it, so usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersFolders in a collectionARead-onlyInspect
Answers: how is this collection organised? what folders exist? Returns the folder tree. Ordered by depth, then path (not a pre-order traversal). Each folder carries its parentId and its full path.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description adds valuable behavioral detail beyond that: the ordering rule (by depth, then path, explicitly not pre-order) and the fact that each folder carries parentId and full path. This meaningfully supplements the structured annotation.
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 compact and front-loaded: it opens with the question it answers, states the output, and then gives ordering and field details. Every sentence contributes useful information without repetition or filler.
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 one-parameter, read-only tool with no output schema, the description covers the main things an agent needs: what the tool returns, how results are ordered, and what fields are present. The only real gap is not explicitly tying the required 'id' parameter to the collection ID, which is otherwise inferable.
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 schema has a single required 'id' parameter with 0% description coverage. The description implies 'id' refers to the collection by saying 'this collection', but it never explicitly states that the parameter is the collection ID or describes its expected format/scoping. It partially compensates for the schema gap but leaves the parameter semantics implicit.
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 clearly states the resource (folders within a collection) and the specific output ('Returns the folder tree'). It answers a concrete question ('how is this collection organised?') and distinguishes itself from siblings that deal with collections, files, or transfers by focusing on the hierarchical folder structure.
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 clear usage context: use it to see how a collection is organized and what folders exist. It does not explicitly name alternative tools or exclusions, but the question-oriented framing makes the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_guestsGuests on a collectionARead-onlyInspect
Answers: who has access to this collection? who did I invite? has someone accepted? Returns the invited guests and their status. Guests are not workspace members — they can view and download this one collection and nothing else.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, and the description adds meaningful behavioral context beyond that: guests are non-workspace members with limited view/download scope, and the response contains invited guests and their status. No contradiction with the annotation.
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, no filler. The key questions are front-loaded, and each sentence adds distinct value: purpose, return value, and domain semantics.
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 simple one-parameter, read-only list tool with no output schema, the description is complete: it states what the tool returns, the scope of the data, and the semantics of the listed entities. An agent has enough to invoke it correctly.
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 schema has one undocumented 'id' parameter (0% description coverage), but the description and title repeatedly refer to 'this collection', making the id's referent clear. For a single obvious parameter, the contextual inference is sufficient.
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 opens with concrete questions ('who has access... who did I invite... has someone accepted?') that precisely frame the tool's verb and resource. It also defines guests as not workspace members, which clearly separates this from sibling tools like list_contacts or get_account.
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 question-based framing gives clear context for when to use this tool: whenever the agent needs guest access or invitation status for a collection. It does not explicitly name alternatives or when-not conditions, but the guest-vs-workspace-member distinction implies the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_transfersList transfersARead-onlyInspect
Answers: what have I sent recently? what is expiring soon? which deliveries has nobody picked up? who did I send that to? Returns recent transfers with size, recipients, download count, expiry date and share link.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds value by detailing the returned fields (size, recipients, download count, expiry date, share link). It does not contradict the annotation. There is no mention of pagination or limits, but for a simple list operation, the description adequately covers behavior.
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 concise sentences. The first sentence front-loads use cases in an engaging question format, and the second lists the output fields. No wasted words, and the structure guides the agent efficiently.
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 no output schema, the description enumerates the returned data fields (size, recipients, download count, expiry date, share link). It also implies the scope ('recent transfers'). While it doesn't mention pagination or sorting, the tool is simple with no parameters, so the description is largely complete for selection and invocation.
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 has zero parameters, so the schema trivially covers everything. Per the baseline rule for 0 parameters, a score of 4 is appropriate; the description doesn't need to add parameter details since none exist.
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 clearly states the tool lists recent transfers and answers specific questions (what sent recently, expiring soon, unpicked, etc.). It names the resource (transfers) and the action (list). It implicitly distinguishes from get_transfer (single transfer) and get_transfer_downloads (downloads) by focusing on a broad list.
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 opens with explicit use cases ('what have I sent recently? what is expiring soon? which deliveries has nobody picked up? who did I send that to?'), which tells the agent when to invoke it. It does not explicitly mention alternatives or when not to use it, but the use-case framing provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_upload_requestsUpload requestsARead-onlyInspect
Answers: which upload links do I have out? has anyone sent files through them? Returns each public upload page that feeds a collection, with its link, status and how much has arrived.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful payload context (link, status, how much has arrived), but says nothing about pagination, ordering, permissions, or how many results come back for a list-style tool.
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 with the use-case question front-loaded and the returned fields enumerated second. No filler, though the question framing is slightly indirect compared to a plain verb-first statement.
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 output schema, the description correctly compensates by naming the returned fields (link, status, arrival amount). It is complete for a zero-parameter read tool, though it omits any note on result volume or scoping.
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 no parameters, so there is no parameter semantics to document and the baseline is 4. The description appropriately focuses on what the tool returns rather than inputs.
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: it returns each public upload page ('upload link') that feeds a collection, along with link, status, and received amount. This clearly distinguishes it from the singular get_upload_request sibling by scope ('each'), though the distinction is implied rather than named.
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 opening questions ('which upload links do I have out? has anyone sent files through them?') imply the use case of auditing outstanding upload requests. However, there is no explicit when-to-use guidance and no mention of alternatives such as get_upload_request for a single request.
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.
5 tool updates
v0.1.1- Changed
create_transfer1 field changed- added
Input schema / properties / files / items / properties / localPathAdded value: +{ + "description": "Where the file is on the machine that will run the command.", + "type": "string" +}
- Added
download_files - Added
get_download_links - Added
get_upload_request - Added
list_upload_requests
11 tool updates
v0.1.0- First observed
create_transfer - First observed
get_account - First observed
get_collection - First observed
get_transfer - First observed
get_transfer_downloads - First observed
list_collection_files - First observed
list_collections - First observed
list_contacts - First observed
list_folders - First observed
list_guests - First observed
list_transfers
TDQS
Scored across 15 tools
Tools target distinct resources (transfers, collections, upload requests, guests, contacts) and mostly have clear boundaries. Minor overlap exists between get_transfer and get_transfer_downloads (both report per-recipient download status) and between get_download_links and download_files (both handle link contents), but descriptions differentiate them well.
All tools use snake_case with a consistent verb_noun pattern (get_, list_, create_, download_). There is no mixing of conventions or vague verbs.
15 tools is well within the ideal 3–15 range for a file-transfer and collection-sharing service. Each tool maps to a specific resource or action, and none appear redundant.
Read coverage is strong (transfers, collections, folders, uploads, guests, contacts), but write operations are sparse: no create/update/delete for collections, upload requests, guests, or contacts, and no ability to invite or revoke access. Core transfer creation and downloading exist, but agents cannot fully manage the lifecycle of most entities.
Maintenance
Related MCP Connectors
- HAVNOAuthapp.havnre
Read-only AI access to HAVN properties, leads, tasks, files, media, and analytics.
- OsboonOAuthcom.osboon
Read-only AI access to Osboon business card analytics, viewers, links, connections and contacts.
Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.
Read-only access to your Citlyze workspace: AI search visibility, citations, and recommendations.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants read-only access to Sprinklr data via MCP, allowing querying reports, searching cases, and calling Sprinklr API endpoints.8 npmISC
- AlicenseAqualityDmaintenanceEnables AI assistants to read, search, and traverse your reMarkable tablet's library, including handwritten notes via OCR.12MIT
- AlicenseAqualityAmaintenanceEnables AI assistants to read, search, and traverse your entire reMarkable library, including handwritten notes via OCR.14239MIT
- AlicenseAqualityBmaintenanceProvides read-only access to finished meeting transcripts for AI assistants like Claude Code or Codex, enabling them to answer questions or draft summaries based on the transcriptions.43Apache 2.0