Skip to main content
Glama
Davison-Francis

@deliveriq/mcp

Download Batch Results

deliveriq_batch_download
Read-onlyIdempotent

Download CSV results from a completed email batch verification job. Optionally filter by category: safe, risky, invalid, or unknown.

Instructions

Download the results of a completed batch verification job as CSV.

Args:

  • job_id (string): The completed job ID

  • category (string, optional): Filter to "safe", "risky", "invalid", or "unknown" only

Returns: CSV text with verification results. Large results may be truncated.

Examples:

  • "Download results for job abc123" -> { job_id: "abc123" }

  • "Get only safe emails from job abc123" -> { job_id: "abc123", category: "safe" }

Credit cost: Free

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
job_idYesBatch job ID to download results for
categoryNoFilter results to a specific category (omit to get full CSV)

Implementation Reference

  • Handler function for deliveriq_batch_download tool. Calls client.batch.download(job_id, category) and returns the CSV result formatted as markdown.
      // ── 4. deliveriq_batch_download ───────────────────────────────
    
      server.registerTool(
        'deliveriq_batch_download',
        {
          title: 'Download Batch Results',
          description: `Download the results of a completed batch verification job as CSV.
    
    Args:
      - job_id (string): The completed job ID
      - category (string, optional): Filter to "safe", "risky", "invalid", or "unknown" only
    
    Returns:
      CSV text with verification results. Large results may be truncated.
    
    Examples:
      - "Download results for job abc123" -> { job_id: "abc123" }
      - "Get only safe emails from job abc123" -> { job_id: "abc123", category: "safe" }
    
    Credit cost: Free`,
          inputSchema: BatchDownloadSchema,
          annotations: {
            readOnlyHint: true,
            destructiveHint: false,
            idempotentHint: true,
            openWorldHint: true,
          },
        },
        async (params) => {
          try {
            const csv = await client.batch.download(params.job_id, params.category);
            const rowCount = csv.split('\n').length - 1;
            const header = `# Batch Results: ${params.job_id}${params.category ? ` (${params.category} only)` : ''}\n\n${rowCount} rows\n\n`;
            return successResponse(header + '```csv\n' + csv + '\n```');
          } catch (error) {
            return handleSdkError(error);
          }
        },
      );
  • Zod input schema for deliveriq_batch_download: job_id (required string) and category (optional enum: safe/risky/invalid/unknown).
    export const BatchDownloadSchema = z.object({
      job_id: z.string().min(1)
        .describe('Batch job ID to download results for'),
      category: z.enum(['safe', 'risky', 'invalid', 'unknown']).optional()
        .describe('Filter results to a specific category (omit to get full CSV)'),
    }).strict();
  • Registration of deliveriq_batch_download via server.registerTool() with title, description, inputSchema, annotations, and handler callback.
      server.registerTool(
        'deliveriq_batch_download',
        {
          title: 'Download Batch Results',
          description: `Download the results of a completed batch verification job as CSV.
    
    Args:
      - job_id (string): The completed job ID
      - category (string, optional): Filter to "safe", "risky", "invalid", or "unknown" only
    
    Returns:
      CSV text with verification results. Large results may be truncated.
    
    Examples:
      - "Download results for job abc123" -> { job_id: "abc123" }
      - "Get only safe emails from job abc123" -> { job_id: "abc123", category: "safe" }
    
    Credit cost: Free`,
          inputSchema: BatchDownloadSchema,
          annotations: {
            readOnlyHint: true,
            destructiveHint: false,
            idempotentHint: true,
            openWorldHint: true,
          },
        },
        async (params) => {
          try {
            const csv = await client.batch.download(params.job_id, params.category);
            const rowCount = csv.split('\n').length - 1;
            const header = `# Batch Results: ${params.job_id}${params.category ? ` (${params.category} only)` : ''}\n\n${rowCount} rows\n\n`;
            return successResponse(header + '```csv\n' + csv + '\n```');
          } catch (error) {
            return handleSdkError(error);
          }
        },
      );
  • SDK Batch.download method — builds URL /verify/batch/{jobId}/download with optional category query param, calls http.getText() which returns the raw CSV string.
    async download(jobId: string, category?: 'safe' | 'risky' | 'invalid' | 'unknown', opts?: RequestOptions): Promise<string> {
      const qs = category ? `?category=${category}` : '';
      return this.http.getText(`/verify/batch/${enc(jobId)}/download${qs}`, opts);
    }
  • Credit cost definition: deliveriq_batch_download costs 0 credits (free).
    export const CREDIT_COSTS: Record<string, number | string> = {
      deliveriq_verify_email: 1,
      deliveriq_batch_verify: '1 per email',
      deliveriq_batch_status: 0,
      deliveriq_batch_download: 0,
Behavior4/5

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

Annotations already indicate idempotent, non-destructive, read-only. Description adds credit cost and truncation warning for large results, which are valuable beyond annotations.

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?

Front-loaded with purpose, then structured sections (Args, Returns, Examples, Credit cost). No unnecessary words. Efficient and scannable.

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?

Covers purpose, parameters, return value (CSV), truncation behavior, examples, and cost. No output schema, so description adequately fills gaps.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. Description examples clarify usage but mostly restate schema info (e.g., enum values). Adds no new syntax or format details.

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?

Clearly states the verb ('download') and resource ('batch verification job results as CSV'). The title 'Download Batch Results' reinforces this. Distinguishes from siblings like 'deliveriq_batch_status' and 'deliveriq_batch_verify'.

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?

Implies job must be completed before downloading. Provides filter options. However, does not explicitly state when not to use (e.g., if job is incomplete) or compare to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Davison-Francis/min8t-sdks'

If you have feedback or need assistance with the MCP directory API, please join our Discord server