Skip to main content
Glama
zackscriven

ghl-mcp-server-v2

by zackscriven

ghl_media_upload_file

Upload files to media storage with support for direct binary uploads or hosted file URLs. Handles images/docs up to 25 MB and video up to 500 MB.

Instructions

multipart/form-data upload. body.file (binary) is required UNLESS body.hosted is true, in which case body.fileUrl is required instead — prefer the hosted:true + fileUrl path when the file already has a public URL, since this tool does not construct a multipart payload for you: the body you pass is sent to GHL as-is as the request body, so a raw binary file upload only works if the caller already has a pre-encoded multipart/form-data payload (including boundary) to hand it. Max 25MB (images/docs) / 500MB (video). Upload File into Media Storage If hosted is set to true then fileUrl is required. Else file is required. If adding a file, maximum allowed is 25 MB. For video files, the maximum allowed size is 500 MB. Endpoint: POST /medias/upload-file (Version header: v3; source: v3/medias-v3.json) OAuth scopes: medias.write

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyYesRequest body (schema carried verbatim from the official OpenAPI spec).
Behavior5/5

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

Annotations only indicate non-readOnly, non-idempotent, etc. The description adds rich behavioral details: it does not construct multipart payloads, size limits (25MB/500MB), OAuth scopes (medias.write), and endpoint info. It fully discloses the conditional requirement and limitations, exceeding what annotations provide.

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?

The description is well-structured, starting with the core concept (multipart/form-data) then detailing the conditional logic and constraints. It is slightly verbose but each sentence adds value. Could be tightened by merging some repeated information.

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 the complexity (two upload modes, size limits, no multipart construction), the description covers essential usage. Lacks details on error responses or result format, but no output schema is provided, so this is acceptable. OAuth scopes and endpoint are included for context.

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% (all parameters named and typed), but the description adds critical semantics: the conditional mutual exclusivity of file vs fileUrl based on hosted. This goes beyond the schema's plain property listing. However, it does not elaborate on name or parentId, which remain minimally described.

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?

The description clearly states it uploads files into media storage, specifies the multipart/form-data nature, and distinctively describes two modes (hosted vs binary). This differentiates it from sibling media tools like ghl_media_list_files or ghl_media_delete_file by focusing on upload and conditional logic.

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?

The description explicitly advises using the hosted:true + fileUrl path when the file already has a public URL, and warns that binary upload requires a pre-encoded multipart payload. It provides clear when-to and when-not guidance, though it does not compare to other upload tools (e.g., ghl_conversation_upload_file_attachments) which serve different contexts.

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

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zackscriven/ghl-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server