Skip to main content
Glama
Unilytics MCP Server

Unilytics MCP Server

Official

kb_create_direct_upload

Generates a presigned URL for uploading a knowledge base file; send the file via HTTP PUT, then call kb_add_file with the signed_id to create the document.

Instructions

Step 1 of a two-step file upload: get a presigned URL to upload a file into a KB. Returns {signed_id, upload_url, content_type}. The file bytes go to upload_url as an HTTP PUT with the returned content_type as the Content-Type header; kb_add_file(signed_id) then creates the document. Needs outbound network access to the storage URL; in a chat whose code sandbox has none (claude.ai, Claude Desktop), create_upload_link gives the user a browser page for the same upload. Allowed: PDF, DOCX, PPTX, XLSX, XLS, CSV, TXT, MD, HTML, HTM (max 256 MB). Other types are refused.

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": {
      "project_id": "<project_id>",
      "filename": "<filename>"
    },
    "name": "kb_create_direct_upload"
  }
}

Input Schema

NameRequiredDescriptionDefault
filenameYes
byte_sizeNo
project_idYes
content_typeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.1.0
    • removedInput schema / properties / config
      Removed value: -{
      -  "default": null,
      -  "title": "config",
      -  "type": "string"
      -}
  2. First observedv1.0.0

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare it is non-read-only, non-idempotent and non-destructive; the description goes well beyond that by naming the return fields, specifying the HTTP PUT contract with content_type as the Content-Type header, stating the outbound-network requirement, and enumerating accepted formats with a 256 MB cap. The 'other types are refused' line is exactly the kind of failure mode an agent needs before calling.

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 return shape, then the workflow, then the environment caveat, then the format whitelist — a sensible priority order. It is dense but nearly every clause carries operational weight; only the repeated 'upload' phrasing across sentences could be trimmed.

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?

There is no output schema, but the description enumerates the returned object's keys, so an agent knows what comes back. Combined with the two-step workflow, the network prerequisite, and the format/size limits, this is nearly complete for a URL-minting tool; the unexplained project_id and byte_size are the remaining hole.

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 0% across 4 parameters, so the description must compensate. It partly does: the accepted-format and 256 MB limits give meaning to filename/byte_size, and the returned content_type clarifies the content_type argument's role. But project_id and the default-0 byte_size are never explained, leaving real gaps at 0% coverage.

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 and resource — get a presigned URL for a file upload into a KB — and pins its position in a workflow as 'Step 1 of a two-step file upload.' It explicitly distinguishes the downstream sibling kb_add_file(signed_id) and the alternate create_upload_link, so an agent can tell the three apart 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?

Gives explicit when-to-use (you need a URL, then PUT the bytes, then call kb_add_file), and an explicit when-to-use-the-alternative rule: in a chat whose code sandbox has no outbound network access (claude.ai, Claude Desktop), use create_upload_link instead. That is a concrete environmental selector, not an implied one.

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

Deploy Server

Other Tools