Skip to main content
Glama

Find a verified work email

generate_email

Find and verify a work email. Billable: about $0.02 per VALID email found (a miss is free) at the Tier 0 list price. Accounts can pay a different rate: get_balance returns this account's prices, and every response reports what was actually spent in cost.amount_charged_usd. Identifies the person by lead_id (most accurate), LinkedIn URL or first name, last name and domain. candidates resolves several people in one call; more than 10 go to an async bulk job instead, which returns a job_id for get_bulk_job.

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": "generate_email"
  }
}

Input Schema

NameRequiredDescriptionDefault
domainNoCompany domain without protocol, e.g. "stripe.com" (name+domain mode).
lead_idNoGenerect lead id from search / preview / enrich results: the cheapest and most accurate identifier.
last_nameNoLast name (name+domain mode).
candidatesNoBatch mode. Each entry uses the same identifier rules as the single-person form.
first_nameNoFirst name (name+domain mode).
timeout_msNoRequest timeout in milliseconds.
middle_nameNoMiddle name (optional, improves pattern matching).
linkedin_urlNoLinkedIn profile URL.

Output Schema

NameRequiredDescriptionDefault
jobNo
costNo
modeNo
droppedNo
resultsNo
next_stepNo
requestedNo
submittedNo
test_modeNo
test_mode_noticeNo
vocabulary_warningsNo
deprecated_params_ignoredNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / lead_id / description
      Previous value: -"Generect lead id from search / preview / enrich results — the cheapest and most accurate identifier."New value: +"Generect lead id from search / preview / enrich results: the cheapest and most accurate identifier."
  2. Changed7 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / candidates / items / additionalProperties
      Removed value: -false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / properties / deprecated_params_ignored / propertyNames
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items
      Added value: +{}
    • addedOutput schema / properties / vocabulary_warnings / items
      Added value: +{}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "cost": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "amount_charged_usd": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "billed": {
      +          "type": "string"
      +        },
      +        "note": {
      +          "type": "string"
      +        },
      +        "operation": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "deprecated_params_ignored": {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "dropped": {
      +      "type": "number"
      +    },
      +    "job": {},
      +    "mode": {
      +      "type": "string"
      +    },
      +    "next_step": {
      +      "type": "string"
      +    },
      +    "requested": {
      +      "type": "number"
      +    },
      +    "results": {
      +      "type": "array"
      +    },
      +    "submitted": {
      +      "type": "number"
      +    },
      +    "test_mode": {
      +      "type": "boolean"
      +    },
      +    "test_mode_notice": {
      +      "type": "string"
      +    },
      +    "vocabulary_warnings": {
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  4. Changed12 schema fields changed
    • changedInput schema / properties / candidates / description
      Previous value: -"Batch mode: resolve many people in one call. Each needs first_name, last_name, domain (middle_name optional)."New value: +"Batch mode. Each entry uses the same identifier rules as the single-person form."
    • addedInput schema / properties / candidates / items / description
      Added value: +"One of: {lead_id} | {linkedin_url} | {first_name,last_name,domain}"
    • addedInput schema / properties / candidates / items / properties / lead_id
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / candidates / items / properties / linkedin_url
      Added value: +{
      +  "type": "string"
      +}
    • removedInput schema / properties / candidates / items / required
      Removed value: -[
      -  "first_name",
      -  "last_name",
      -  "domain"
      -]
    • changedInput schema / properties / domain / description
      Previous value: -"Company domain without protocol, e.g. \"generect.com\" (required in single-person mode)."New value: +"Company domain without protocol, e.g. \"stripe.com\" (name+domain mode)."
    • changedInput schema / properties / first_name / description
      Previous value: -"First name (single-person mode)."New value: +"First name (name+domain mode)."
    • changedInput schema / properties / last_name / description
      Previous value: -"Last name (single-person mode)."New value: +"Last name (name+domain mode)."
    • addedInput schema / properties / lead_id
      Added value: +{
      +  "description": "Generect lead id from search / preview / enrich results — the cheapest and most accurate identifier.",
      +  "type": "string"
      +}
    • addedInput schema / properties / linkedin_url
      Added value: +{
      +  "description": "LinkedIn profile URL.",
      +  "type": "string"
      +}
    • changedInput schema / properties / middle_name / description
      Previous value: -"Middle name (optional)."New value: +"Middle name (optional, improves pattern matching)."
    • changedInput schema / properties / timeout_ms / description
      Previous value: -"Request timeout in milliseconds"New value: +"Request timeout in milliseconds."
  5. Changed6 schema fields changed
    • addedInput schema / properties / candidates
      Added value: +{
      +  "description": "Batch mode: resolve many people in one call. Each needs first_name, last_name, domain (middle_name optional).",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "domain": {
      +        "type": "string"
      +      },
      +      "first_name": {
      +        "type": "string"
      +      },
      +      "last_name": {
      +        "type": "string"
      +      },
      +      "middle_name": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "first_name",
      +      "last_name",
      +      "domain"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / domain / description
      Previous value: -"Company domain without protocol (e.g., generect.com)"New value: +"Company domain without protocol, e.g. \"generect.com\" (required in single-person mode)."
    • changedInput schema / properties / first_name / description
      Previous value: -"First name of the person"New value: +"First name (single-person mode)."
    • changedInput schema / properties / last_name / description
      Previous value: -"Last name of the person"New value: +"Last name (single-person mode)."
    • addedInput schema / properties / middle_name
      Added value: +{
      +  "description": "Middle name (optional).",
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "first_name",
      -  "last_name",
      -  "domain"
      -]
  6. First observed

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare openWorldHint=true and readOnlyHint=false, so the agent knows this is an externally-facing, non-read call. The description adds genuinely useful context: per-valid-email pricing with free misses, per-account rates visible via get_balance, and actual spend reported in cost.amount_charged_usd. It does not state what an unsuccessful lookup returns, which matters for an open-world lookup tool.

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?

Three sentences, front-loaded with the purpose, then cost, then identifier/batch semantics. The pricing sentence is dense but every clause carries decision-relevant information; nothing is filler.

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?

An output schema exists and all 8 parameters are documented, so the description need not explain return values. It still covers the cost model, the identifier modes, and the batch escalation path, which are the things an agent otherwise could not know before calling.

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% and the schema already documents identifier modes and that lead_id is cheapest and most accurate. The description reinforces the identifier ordering and adds the batch threshold of 10 that the schema does not contain, so it adds some value but largely overlaps structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource (find and verify a work email), which is more precise than a bare name restatement. It does not explicitly distinguish itself from the sibling validate_email, so an agent must infer that validate_email checks an existing address while this one discovers one.

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?

It states an identifier priority (lead_id is most accurate, then LinkedIn URL, then name+domain) and gives an explicit routing rule: use candidates for several people, and more than 10 goes to an async bulk job whose job_id feeds get_bulk_job. It stops short of saying when to prefer this over validate_email or find_phone.

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.