Skip to main content
Glama

Upload file

artifact_upload

Upload a strictly encoded base64 file. A workspace item needs why (workspaceId, or a workspace folder named in folder, homes it there) and takes no teams; no expected revision is needed. folder files it: a folder id, or a slug (in workspaceId, else in team, else your personal folders). Authorize typed team selection before standalone file creation; returns bounded content access. rawUrl is the link to hand a person for the file itself; url is its page. Stored content counts toward the owner's storage; data that grows by adding records belongs in a table.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "base64Content": "<base64Content>",
      "filename": "<filename>",
      "mimeType": "<mimeType>"
    },
    "name": "artifact_upload"
  }
}

Input Schema

NameRequiredDescriptionDefault
whyNoRequired for workspace items: one sentence on what the person is trying to accomplish, in their terms, not a description of this edit. Every workspace write takes one; sessions and summaries record themselves from it. At most 300 characters.
teamNoWith a folder slug: the team (slug or id) the folder belongs to.
teamsNoTeams (slug or id) to share it with once it exists. Standalone only.
titleNo
folderNoThe folder to file it in: a folder id (a workspace folder puts it in that workspace), or a slug: in workspaceId when given, else in team, else one of your personal folders.
filenameYes
mimeTypeYes
workspaceIdNoThe workspace to create it in, by its id or its slug (a workspace folder named in folder implies it). A workspace item needs why and takes no visibility, teams or publicAsset.
base64ContentYes
inputReferencesNoWhat it was made from: ids or URLs.
parentArtifactIdNoThe artifact this one was derived from.

Output Schema

NameRequiredDescriptionDefault
contentYes
artifactYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • removedInput schema / properties / audience
      Removed value: -{
      -  "description": "Workspace audience: internal (the default for internal members) or shared (external members see it too; the only choice for external editors).",
      -  "enum": [
      -    "internal",
      -    "shared"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / properties / artifact / properties / audience
      Removed value: -{
      -  "enum": [
      -    "internal",
      -    "shared"
      -  ],
      -  "type": "string"
      -}
  2. Changed1 schema field changed
    • removedInput schema / properties / creatorContext
      Removed value: -{
      -  "description": "How it was made: the prompt, tool or run.",
      -  "maxLength": 16000,
      -  "type": "string"
      -}
  3. Changed5 schema fields changed
    • addedOutput schema / properties / artifact / properties / alias
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / artifact / properties / folder
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "id": {
      +          "format": "uuid",
      +          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +          "type": "string"
      +        },
      +        "slug": {
      +          "type": "string"
      +        },
      +        "teamSlug": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "slug"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / artifact / properties / rawUrl
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / artifact / properties / title
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / artifact / required
      Previous value: -[
      -  "id",
      -  "url",
      -  "type",
      -  "currentVersionId"
      -]New value: +[
      +  "id",
      +  "url",
      +  "rawUrl",
      +  "type",
      +  "currentVersionId",
      +  "alias",
      +  "title",
      +  "folder"
      +]
  4. Changed5 schema fields changed
    • changedInput schema / properties / workspaceId / description
      Previous value: -"The workspace to create it in (a workspace folder named in folder implies it). A workspace item needs why and takes no visibility, teams or publicAsset."New value: +"The workspace to create it in, by its id or its slug (a workspace folder named in folder implies it). A workspace item needs why and takes no visibility, teams or publicAsset."
    • removedInput schema / properties / workspaceId / format
      Removed value: -"uuid"
    • addedInput schema / properties / workspaceId / maxLength
      Added value: +64
    • addedInput schema / properties / workspaceId / minLength
      Added value: +1
    • removedInput schema / properties / workspaceId / pattern
      Removed value: -"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
  5. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the write, open-world, non-idempotent, non-destructive profile, and the description adds genuine context on top: stored content counts toward the owner's storage, the call returns bounded content access, and rawUrl vs url serve different presentation needs. Missing are size/encoding failure behavior and what 'bounded' concretely means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is short but telegraphic, with fragments like 'Authorize typed team selection before standalone file creation' that cost more parsing effort than the space they save. The core fact (upload base64 file) is front-loaded, but the middle sentences bury resolution rules in clause-heavy prose.

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 an 11-parameter mutation tool with annotations and an output schema, the description covers the decisions an agent must make: workspace vs standalone, folder resolution, why requirements, and storage consequences. Remaining gaps such as the 1.4MB base64 cap and accepted MIME forms are handled by the schema, so the definition is largely sufficient.

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?

With 64% schema coverage the description earns credit for clarifying resolution order: folder accepts an id or a slug resolved against workspaceId, then team, then personal folders. It reinforces that 'why' is required only for workspace items and that teams is standalone-only, adding meaning on the two most ambiguous parameters.

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 states a specific verb and resource: 'Upload a strictly encoded base64 file.' It also distinguishes the case from record-appending tools ('data that grows by adding records belongs in a table'). It does not name a sibling tool explicitly, so an agent must infer the boundary rather than read it.

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 conditions are present but compressed: a workspace item needs 'why' and takes no teams, standalone creation requires 'Authorize typed team selection', and growing data belongs in a table. These are real when/when-not signals, but they are phrased in jargon an agent may not resolve confidently, and no sibling tool is named as an alternative.

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.