Skip to main content
Glama

Upload fax files

request-file-from-user
Destructive

Call pipeline_start first, then list-numbers and list-contacts (limit 20), then this tool — always that order. Pass pipeline_id here unchanged. Pass numbers from list-numbers and contacts from list-contacts on this call so the UI can show pickers. Do not re-list inside this tool. Do not ask the user for a sender or destination. Pass optional to/from only if the user already named a number or contact (prefill); omit them otherwise. Prefill to is an array of {number, optional name}; include name when the destination is a contact. from is a number only. Never ask the user to attach the file in chat, and never expect the document to arrive as a chat attachment. NEVER read file contents and NEVER pass base64 or file bytes. Always pass start_file_upload=true and the same pipeline_id. Returns one of three chat payloads. MCP Apps (no mode): widget token in structuredContent; the UI uploads and sends. Do not call send-fax-uploaded or upload-file. mode=unconfirmed: client did not announce Apps support. Relay the user notice, continue as if the UI is present, and use the curl recipe in the same payload only after the user confirms no panel appeared. mode=agentic: client has no Apps support. Follow the curl recipe (POST fax_file), then call send-fax-uploaded with the returned path. Never paste file bytes or base64. Do not call await-fax-upload (removed). Do not call upload-file for chat (automation-only). The UI does not send a chat message when it sends the fax; it adds the submitted fax ids to the conversation context. When a fax_id is known, tell the user the fax was submitted; then get-fax or get-outbox-fax with wait_seconds=30 on the first check.

Side effects: mints a short-lived widget access token; opens the upload UI when the client supports MCP Apps.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNoOptional destinations. Pass only if the user already named numbers or contacts. Each item is number plus optional contact name. Prefills the UI. Do not ask the user for them.
fromNoOptional sender fax number in E.164. Pass only if the user already named this number. Prefills the UI. Do not ask the user for it. Number only — no name.
numbersYesSender numbers from the list-numbers result. Pass them through so the UI can offer a from picker. Do not omit after listing.
user_idNoOptional Fax.Plus user ID. Omit for self. Must be a UUID (dashed or 32-hex) or 24-char ObjectId (not a phone number).
contactsYesContacts from the list-contacts result (name + fax_number). Pass them through so the UI can offer a to picker. Do not omit after listing.
pipeline_idYesReturned by pipeline_start. Pass it back unchanged.
start_file_uploadYesAlways pass true so the confirmation request is not empty. Ignored by the server.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNo
tokenNo
methodNo
messageYes
numbersNo
prefillNo
contactsNo
endpointNo
expiresAtNo
field_nameNo
instructionsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark it as non-read-only, non-idempotent, and destructive, and the description adds substantial behavior: it mints a short-lived widget token, opens the upload UI, never receives file bytes/base64, and behaves differently in unconfirmed, agentic, and MCP Apps modes. It also explains what happens after the UI sends the fax and how to follow up. No contradiction with the annotations; the description strengthens behavioral transparency.

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 description is information-dense and front-loaded with the critical call order, but it is also verbose and somewhat repetitive. Examples include saying twice not to paste file bytes/base64 and repeating the instruction not to call upload-file. A tighter structure with explicit mode sections would make it easier to process while retaining the important caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a complex interactive tool: it covers the required predecessor calls, parameter pass-through, all three client modes, the exact next actions after upload, output payload expectations, and side effects. The presence of an output schema further reduces the need to describe return values. An agent has enough information to invoke this tool correctly in any of the stated modes.

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. The description adds useful semantic context: pass pipeline_id unchanged, pass list-numbers and list-contacts results through as picker sources, only prefill to/from when the user already named them, and never ask for them. It clarifies the relationship between parameters and the surrounding workflow rather than merely restating schema field types.

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 description makes clear that this tool is the step after pipeline_start, list-numbers, and list-contacts, and that it drives the upload UI rather than actually sending or uploading a file. It distinguishes itself from siblings by explicitly saying not to call send-fax-uploaded or upload-file. However, it never opens with a crisp one-sentence statement of the tool's core purpose ('requests a file from the user'), instead relying on the tool name, title, and surrounding workflow instructions.

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?

The description gives explicit ordering requirements: call pipeline_start first, then list-numbers and list-contacts, then this tool. It also says when not to use it, names the alternatives not to call, and explains the three client modes with conditions. This is exactly the guidance an agent needs to decide when and how to invoke it.

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