Skip to main content
Glama

Request Account Upload

request_account_upload

The one way account or address rows enter the server: stages them for ingest_accounts (accounts_handle) or geocode_address (upload_handle) and returns upload_handle, csv_headers, and suggested_ingest args with a geocode_plan. Ways in: the returned upload_url (no API key; valid up to 1 hour), which the user opens in a browser to drop a CSV or .xlsx (result.share_with_user; the path for a file the client cannot read, e.g. a SharePoint link) or a shell POSTs to (curl_example); csv_file (a host file parameter); csv_text (raw CSV, up to 25 MB per call); or rows chunks appended with upload_handle. A call with only upload_handle polls: upload_status waiting_for_file (sleep recommended_poll_delay_ms) or received, with preview (sample rows, column profile) and upload_warnings whose ask_user goes to the user before ingest. A local path in csv_file returns UNREADABLE_FILE_REFERENCE; an expired URL returns UPLOAD_TOKEN_EXPIRED and a call with upload_handle issues a new one. One handle holds at most 100,000 rows and is single-use, claimed by ingest_accounts, for 1 hour.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "request_account_upload"
  }
}

Input Schema

NameRequiredDescriptionDefault
rowsNo
csv_fileNoHost file reference: an object with download_url (ChatGPT/OpenAI file param) or data (data: URI), or a URL / data: URI string. Local paths and bare file ids are rejected; for those, send the user to upload_url.
csv_textNo
ttl_secondsNo
upload_handleNoExisting upload_handle (aup_...) to append this chunk of rows to.

Output Schema

NameRequiredDescriptionDefault
okYes
errorNoPresent when ok is false.
resultNoPresent when ok is true.
warningsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedInput schema / properties / csv_file / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "data": {
      +        "description": "RFC 2397 data: URI.",
      +        "type": "string"
      +      },
      +      "download_url": {
      +        "description": "Temporary HTTPS download URL from the host.",
      +        "type": "string"
      +      },
      +      "file_id": {
      +        "type": "string"
      +      },
      +      "file_name": {
      +        "type": "string"
      +      },
      +      "mime_type": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / csv_file / description
      Added value: +"Host file reference: an object with download_url (ChatGPT/OpenAI file param) or data (data: URI), or a URL / data: URI string. Local paths and bare file ids are rejected; for those, send the user to upload_url."
    • addedInput schema / properties / upload_handle / description
      Added value: +"Existing upload_handle (aup_...) to append this chunk of rows to."
    • removedOutput schema / additionalProperties
      Removed value: -true
    • addedOutput schema / properties
      Added value: +{
      +  "error": {
      +    "description": "Present when ok is false.",
      +    "properties": {
      +      "ask_user": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "code": {
      +        "type": "string"
      +      },
      +      "details": {
      +        "type": "object"
      +      },
      +      "do_this_next": {
      +        "type": "object"
      +      },
      +      "message": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "ok": {
      +    "type": "boolean"
      +  },
      +  "result": {
      +    "description": "Present when ok is true.",
      +    "type": "object"
      +  },
      +  "warnings": {
      +    "items": {
      +      "properties": {
      +        "code": {
      +          "type": "string"
      +        },
      +        "message": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "type": "array"
      +  }
      +}
    • addedOutput schema / required
      Added value: +[
      +  "ok"
      +]
    • removedOutput schema / title
      Removed value: -"request_account_uploadDictOutput"
  2. Changed1 schema field changed
    • removedInput schema / properties / guidance_handle
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "title": "Guidance Handle"
      -}
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Well beyond the annotations (which only say non-readOnly, non-idempotent, non-destructive): it discloses the 100,000-row handle cap, single-use claim semantics, 1-hour expiry, that the URL needs no API key, and the specific failure modes (UNREADABLE_FILE_REFERENCE, UPLOAD_TOKEN_EXPIRED with re-issue behavior). Warning/gating behavior (upload_warnings → ask_user before ingest) is also surfaced.

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 core routing fact is front-loaded in the first clause, and nearly every sentence carries operational content (paths, polling, limits, error codes). It is nonetheless a single dense block with parenthetical cross-references that make it heavier to scan than it needs to be; light structuring would preserve the content with less load.

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 5-parameter intake tool with an output schema, an agent has everything needed: how to stage rows, how to poll, how to recover from each documented error, and lifetime/row limits. Return fields (upload_handle, csv_headers, geocode_plan) are explained contextually rather than redundantly.

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 only 40% schema coverage, the description carries real weight: it explains csv_file as a host-file parameter that cannot take local paths, csv_text as raw CSV capped at 25 MB, rows as appendable chunks, and upload_handle as both append token and poll key. The one gap is ttl_seconds, which is never named — the 'valid up to 1 hour' phrase implies it but doesn't tie back to the parameter.

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?

Opens with a specific verb+resource+scope: 'The one way account or address rows enter the server,' and names the two downstream consumers (ingest_accounts, geocode_address) so the agent can place it in the workflow without opening either sibling schema. It is clearly distinguishable from sibling 'request_assignment_upload' and the admins' ingest tools.

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?

Enumerates the concrete intake paths (upload_url with no API key, csv_file host reference, csv_text up to 25 MB, rows chunks via upload_handle) and states the exclusion condition explicitly: local paths / bare file ids are rejected and the user must be sent to upload_url. It also defines the poll-only call pattern (handle alone → upload_status waiting_for_file/received with sleep guidance).

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