Skip to main content
Glama

Export a table as a file

well_export_rows_as_file
Read-only

Turn a table you built into a file (a CSV, or a PDF when asked) and return the link that downloads it. Use it for rows that are not Well records, such as one line per person read from a shared group chat, a pasted list, or figures a skill copied from a measure. For Well records (transactions, invoices, companies), use the records export instead.

Pass columns, the headings in order, and rows, one array of cells per row with one cell per column. A null cell prints empty. title is what a PDF prints above the table; the file name never takes it. Pass format when the person named one, or when the skill you follow sets one. A PDF prints at most 8 columns.

On WhatsApp no link is made: Well sends the file itself under your message when format is set, else the CSV or PDF choice, and the result reads sent_by_well: true with url null. Each call sends its own file or choice.

Nothing is saved to the workspace's records or memory. Anyone who holds a link can download the file, for 15 minutes and a few downloads: share it only with the person who asked.

Returns url (null on WhatsApp), or refusal_reason: "not_a_member" (the caller is not an active member of this workspace), "too_large" (the table is over 512 KB), "too_wide_for_pdf" (a PDF was asked for more than 8 columns) or "unavailable" (this deployment cannot serve files).

When the token authorizes one workspace, call this directly — no workspace call is needed first. When it authorizes several, this read will not guess which one you mean: pass workspace_id on the call.

Input Schema

NameRequiredDescriptionDefault
rowsYesOne array of cells per row, one cell per column and in column order. A null cell prints empty.
titleNoThe title a PDF prints above the table, in the user's language: "Abonnements de OPRTRS CLUB".
formatNoWhen the person named a format, or the skill you follow sets one: "pdf" for a PDF, "csv" for a CSV or a spreadsheet. Left out, a CSV link, or on WhatsApp the CSV or PDF choice under your message.
columnsYesThe column headings, in order, in the user's language.
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.

Output Schema

NameRequiredDescriptionDefault
urlYesThe link that downloads the table, in the format asked (a CSV when none was). Give it to the user exactly as returned. Null on WhatsApp, where Well sends the file or the format choice itself.
errorNo
formatNoThe format the person named, echoed.
successYes
row_countNo
expires_atNoWhen the link stops working, ISO 8601.
column_countNo
sent_by_wellNoTrue on WhatsApp: Well sends the file under your message, or the CSV or PDF choice when no format was asked. Write no link and no line about where the file is.
refusal_reasonNo
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / format / description
      Previous value: -"Only when the person named a format: \"pdf\" for a PDF, \"csv\" for a CSV or a spreadsheet. Left out, a CSV link, or on WhatsApp the CSV or PDF choice under your message."New value: +"When the person named a format, or the skill you follow sets one: \"pdf\" for a PDF, \"csv\" for a CSV or a spreadsheet. Left out, a CSV link, or on WhatsApp the CSV or PDF choice under your message."
  2. Changed4 schema fields changed
    • removedOutput schema / properties / resolved_workspace / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / resolved_workspace / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / url / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed6 schema fields changed
    • addedInput schema / properties / format
      Added value: +{
      +  "description": "Only when the person named a format: \"pdf\" for a PDF, \"csv\" for a CSV or a spreadsheet. Left out, a CSV link, or on WhatsApp the CSV or PDF choice under your message.",
      +  "enum": [
      +    "csv",
      +    "pdf"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / title
      Added value: +{
      +  "description": "The title a PDF prints above the table, in the user's language: \"Abonnements de OPRTRS CLUB\".",
      +  "maxLength": 80,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedOutput schema / properties / format
      Added value: +{
      +  "description": "The format the person named, echoed.",
      +  "enum": [
      +    "csv",
      +    "pdf"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / refusal_reason / enum
      Previous value: -[
      -  "not_a_member",
      -  "too_large",
      -  "unavailable"
      -]New value: +[
      +  "not_a_member",
      +  "too_large",
      +  "too_wide_for_pdf",
      +  "unavailable"
      +]
    • addedOutput schema / properties / sent_by_well
      Added value: +{
      +  "description": "True on WhatsApp: Well sends the file under your message, or the CSV or PDF choice when no format was asked. Write no link and no line about where the file is.",
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / url / description
      Previous value: -"The link that downloads the table as a CSV file. Give it to the user exactly as returned."New value: +"The link that downloads the table, in the format asked (a CSV when none was). Give it to the user exactly as returned. Null on WhatsApp, where Well sends the file or the format choice itself."
  4. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnly/non-destructive/closed-world, while the description adds a great deal more: nothing is persisted to records or memory, the link is shareable by anyone who holds it for 15 minutes and a few downloads, WhatsApp suppresses the link and sends the file itself with `sent_by_well: true`, and hard limits of 512 KB and 8 columns for PDF. It also enumerates the four refusal_reason values, which is behavior no annotation conveys.

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 purpose and the sibling exclusion are front-loaded, then the parameter walkthrough, then edge behavior — a sensible order. Some material is redundant with the schema (the workspace_id/conversation_id closing paragraph largely restates schema text) and could be trimmed without loss.

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?

For a tool with 7 parameters including workspace routing, an output schema, and multi-channel behavior, the description covers the input contract, the WhatsApp variant, the size/width limits, every refusal reason, and the multi-workspace prerequisite. Nothing an agent needs in order to call it correctly is missing.

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 still adds cross-parameter meaning — `title` is PDF-only and never the file name, `columns` and `rows` must stay positionally aligned with null printing empty, and a PDF caps at 8 columns, which links `format` to table width. It does not mention conversation_id or workspace_scope, leaving those entirely to the schema.

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?

"Turn a table you built into a file (a CSV, or a PDF when asked) and return the link that downloads it" is a specific verb plus resource with the output shape stated. It also carves out the boundary explicitly: "For Well records (transactions, invoices, companies), use the records export instead," which separates it from siblings like well_export_data and well_export_document.

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 a positive trigger (rows that are not Well records, with concrete examples: one line per person from a group chat, a pasted list, figures copied from a measure) and a negative one (Well records go to the records export). It further scopes `format` ("pass when the person named one, or when the skill you follow sets one") and the workspace_id rule, so no routing decision is left to inference.

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