Skip to main content
Glama

Save a file to my Files

connections_storage_save_file

Save one file to the member's Connections Files, from bytes (content_base64, small files) or an https link storage fetches (source_url); give exactly one. A picture made in chat goes as a link, never base64. Any file type. One file per call, up to 4.5 MB this way; nothing is saved if it is bigger, the link fails, or the storage limit is reached. A file on the member's own computer, of ANY size up to 5 GB (within their storage limit), goes through the local Connections MCP: connections_execute { tool_name: "connections_storage_save_file", params: { path: "", folder? } } streams it from disk straight to storage, so its bytes never pass through the conversation. Returns its id, name, size and folder; share_file then makes a link.

Input Schema

NameRequiredDescriptionDefault
fileNoA file you hold in this chat, such as a picture you made; Connections fetches it. Use it in place of base64.
folderNoOptional folder name; made when missing.
personNoLinked person to run this call as (first name). Omit to run as the connection's holder.
dry_runNoPreview only.
projectNoWorkspace to run this call in (id or name).
filenameYesWith its extension, e.g. receipt.pdf.
source_urlNoAn https link storage fetches. This or content_base64.
content_typeNoOptional MIME type, e.g. image/png; else from the link or extension.
content_base64NoBase64 bytes, at most 4.5 MB decoded. This or source_url.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / dry_run / description
      Previous value: -"Preview only; nothing is written."New value: +"Preview only."
  2. Changed5 schema fields changed
    • changedInput schema / properties / content_base64 / description
      Previous value: -"The file's bytes, base64-encoded, at most 4.5 MB once decoded. Give this or source_url, not both."New value: +"Base64 bytes, at most 4.5 MB decoded. This or source_url."
    • changedInput schema / properties / content_type / description
      Previous value: -"Optional. The file's MIME type, e.g. image/png; taken from the link or the filename extension when absent."New value: +"Optional MIME type, e.g. image/png; else from the link or extension."
    • changedInput schema / properties / filename / description
      Previous value: -"The name to save the file under, with its extension, e.g. receipt.pdf."New value: +"With its extension, e.g. receipt.pdf."
    • changedInput schema / properties / folder / description
      Previous value: -"Optional. The name of the folder to put the file in; it is made if the member has none by that name."New value: +"Optional folder name; made when missing."
    • changedInput schema / properties / source_url / description
      Previous value: -"An https link to the file, fetched by storage. Give this or content_base64, not both."New value: +"An https link storage fetches. This or content_base64."
  3. Changed1 schema field changed
    • addedInput schema / properties / file
      Added value: +{
      +  "description": "A file you hold in this chat, such as a picture you made; Connections fetches it. Use it in place of base64.",
      +  "properties": {
      +    "download_url": {
      +      "type": "string"
      +    },
      +    "file_id": {
      +      "type": "string"
      +    },
      +    "file_name": {
      +      "type": "string"
      +    },
      +    "mime_type": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "download_url",
      +    "file_id"
      +  ],
      +  "type": "object"
      +}
  4. Changed2 schema fields changed
    • changedInput schema / properties / dry_run / description
      Previous value: -"Preview only: return what this call would do, with nothing written."New value: +"Preview only; nothing is written."
    • addedInput schema / properties / person
      Added value: +{
      +  "description": "Linked person to run this call as (first name). Omit to run as the connection's holder.",
      +  "type": "string"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / project
      Added value: +{
      +  "description": "Workspace to run this call in (id or name).",
      +  "type": "string"
      +}
  6. Added

TDQS

A4.5/5.0
Behavior4/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true) by disclosing the 4.5 MB ceiling for this route, the 5 GB local route, and the all-or-nothing failure semantics ("nothing is saved if it is bigger, the link fails, or the storage limit is reached"). It also states the return fields (id, name, size, folder), which matters since there is no output schema. Missing only auth/permission requirements and overwrite/duplicate-name behavior on an existing folder or filename.

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?

Front-loaded with the core action and the two modes, and every clause carries operational information. The long semicolon-chained sentences — especially the mid-description embedded connections_execute call — make it denser than ideal to scan.

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 9 parameters (one nested object), no output schema, and sparse annotations, the description covers size limits, failure modes, the alternative execution route, and return values. Remaining gap is permissions/identity scoping (`person`, `project`) and what happens on filename collisions, though the schema covers those parameters at a basic level.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics the schema does not: content_base64 and source_url are mutually exclusive ("give exactly one") and the base64 route is size-capped. It leaves the nested `file` object, `person`, `project`, and `dry_run` unaddressed, and "a picture made in chat goes as a link" is slightly ambiguous about whether that means the `file` object or `source_url`.

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 precise verb+resource ("Save one file to the member's Connections Files") and immediately names the two input modes plus the local-path alternative via connections_execute. An agent can distinguish this from save_file_begin/finish and share_file without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: bytes/base64 for small in-chat content, an https link for pictures made in chat ("never base64"), and the local Connections MCP route for files on the member's own computer. It also names share_file as the follow-up step for link creation.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources