Skip to main content
Glama

Metadata MCP Connector

Upload Contact List CSV and Create Contact List Audience

upload_contact_list_csv_audience

Create a contact-list audience from either inline contacts over the authenticated MCP connection or a private, expiring CSV URL. Exactly one source is required. Signed URLs must use S3/GCS signatures or an Azure read-only HTTPS SAS, expire within one hour of issue, and refer to an object inaccessible without its signature. Public URLs and redirects are rejected.

The CSV header is exactly email,firstname,lastname,jobtitle,employeecompany,country,appleidfa,googleaid (case-insensitive and whitespace-trimmed). Email is required; other columns can be blank. Accepts 300 to 300,000 contacts. The server validates the file and uploads it through the platform's upload flow. Returns the audience creation result and ID or validation errors. Audience readiness and channel matching occur asynchronously.

Input Schema

NameRequiredDescriptionDefault
contactsNoInline array of contact objects (optional). Each object represents one person/contact with fields: email (required), firstname, lastname, jobtitle, employeecompany, country, appleidfa, googleaid. Minimum 300 contacts, maximum 300,000 contacts. MUTUALLY EXCLUSIVE with `contacts_source_csv_url` — provide exactly one.
audience_nameYesName for the new contact list audience (required).
contacts_source_csv_urlNoPrivate S3/GCS signed HTTPS URL or Azure read-only SAS valid for at most one hour. The object must not allow anonymous access. Public URLs and redirects are rejected. Mutually exclusive with inline contacts.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / contacts_source_csv_url / description
      Previous value: -"Public URL of a contacts CSV file with header EXACTLY `email,firstname,lastname,jobtitle,employeecompany,country,appleidfa,googleaid` (case-insensitive). The MCP server downloads, validates, and uploads the file. Use this when the user attached a CSV to the chat — the URL is surfaced via `AudienceBrief.attached_file_urls`. MUTUALLY EXCLUSIVE with `contacts`."New value: +"Private S3/GCS signed HTTPS URL or Azure read-only SAS valid for at most one hour. The object must not allow anonymous access. Public URLs and redirects are rejected. Mutually exclusive with inline contacts."
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only say non-read-only, non-destructive, open-world; the description adds substantial extra behavior: signature type requirements, one-hour expiry, no anonymous access, header format, row count bounds, server-side validation, and asynchronous audience readiness. That is exactly the kind of operational context annotations cannot carry.

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 the source-choice constraint, then constraints, then format, then return behavior. Every sentence carries information, though the CSV-format sentence is dense and could be broken for readability.

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?

Despite no output schema, the description explains what comes back ('the audience creation result and ID or validation errors') and warns that readiness and channel matching are asynchronous. Combined with full source constraints and format rules, an agent has everything needed to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description still adds value the schema does not: the exact CSV header order and case/whitespace handling, that only email is required while other columns may be blank, the 300–300,000 range, and the source exclusivity rule. This goes beyond baseline.

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 first sentence states a specific verb and resource ('Create a contact-list audience') and immediately frames the two possible sources. It is clearly distinguishable from upload_account_list_csv_audience (account lists) and the various create_*_native_audience siblings because it is contact-list plus CSV sourced.

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?

'Exactly one source is required' plus the mutual-exclusivity rule tells the agent precisely how to choose between the two input paths. Public URLs and redirects being rejected is an explicit exclusion. It stops short of naming sibling tools like upload_account_list_csv_audience as the alternative for account-level lists, so not quite a 5.

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