Skip to main content
Glama

Ballast - Cold Email

Import leads

import_leads
Destructive

Import leads in chunks. Send up to 5,000 rows per call. The first call creates the import and returns its id; pass importId with every next chunk and final: true with the last. Addresses are deduped, suppressed ones skipped, invalid ones counted. ESP detection and verification run in the background after the final chunk. Asks for confirmation: the first call returns a preview and a confirm_token.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "rows": "<rows>"
    },
    "name": "import_leads"
  }
}

Input Schema

NameRequiredDescriptionDefault
listNoList to add every imported lead to: an existing id or a new name
rowsYes
finalNoLast chunk: starts ESP detection and verification
verifyNoVerify the new addresses with the verifier API after import
existingNoLeads already in the workspace: leave them as they are, or fill in the new valuesskip
fileNameNo
importIdNoLeave out on the first call; pass the id it returns with every next chunk.
clientInvalidNo
confirm_tokenNoLeave out on the first call: it returns a preview of exactly what will happen and a confirm_token. Show the preview to the user, and only after they agree call again with the same arguments plus that token.
clientDuplicatesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / clientDuplicates / maximum
      Previous value: -9007199254740991New value: +10000000
    • changedInput schema / properties / clientInvalid / maximum
      Previous value: -9007199254740991New value: +10000000
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare destructive and openWorld; the description adds substantial beyond that: dedupe of addresses, suppression skipping, invalid counting, background ESP detection and verification after the final chunk, and the preview/confirm_token two-phase consent flow. This is exactly the extra behavioral context the annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five tight sentences with the chunking constraint and confirm flow front-loaded. Minor redundancy with maxItems on the 5,000 limit, but no filler and every sentence carries decision-relevant 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?

For a 10-parameter destructive tool with no output schema, the description covers the critical mechanics: chunking, stateful id passing, terminal final flag, post-import background jobs, and the confirmation gate. Gaps remain around the meaning of clientDuplicates/clientInvalid counters and how existing:update interacts with dedupe, but the core is complete enough to call correctly.

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 60%, and the description adds cross-call semantics for the importId/final/confirm_token relationship that individual schema descriptions do not fully capture (the two-phase confirm loop). It leaves clientDuplicates, clientInvalid, fileName, and the list target unexplained, so it doesn't fully close the coverage gap.

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?

States a specific verb and resource ('Import leads') plus the defining modality ('in chunks'), which is what separates it from add_leads_to_campaign and list_leads. An agent immediately knows this is a multi-call bulk ingestion path, not a single-shot add.

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?

Gives clear procedural context: chunk size limit, first call creates the import and returns an id, subsequent chunks pass importId, last chunk sets final:true. It does not explicitly say when to prefer this over add_leads_to_campaign, so the sibling routing is left implicit, but the workflow guidance is strong.

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