Skip to main content
Glama
This connector has been deprecated

Duplicate listing. The official PumpGTM connector is https://glama.ai/mcp/connectors/com.pumpgtm/mcp (same server, https://mcp.pumpgtm.com/mcp).

Find a work email

find_work_email

Find a person's verified work email from their public LinkedIn profile URL. Returns id, person with name, title, company, linkedin and workEmail { address, matchesCompanyDomain } (check matchesCompanyDomain before using it), or missing.workEmail with the reason (not_found means no confident match, not that none exists). Add leadId, one of your own leads and the same person, to save the email on that lead; lead.email says attached, lead_has_email, different_person, email_on_another_lead or no_email, and an existing email is never overwritten. Uses Energy (the energy tool's peopleDataPricing shows the price); cached lookups are free. energyUsed is what this call spent and energyLeft the balance after it. Requires Energy enabled. With only a name, ask the customer for the person's LinkedIn URL. Never automatically retry a timeout or error. Creates no lead and contacts no one.

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": {
      "linkedin": "<linkedin>"
    },
    "name": "find_work_email"
  }
}

Input Schema

NameRequiredDescriptionDefault
leadIdNoOne of your own leads (from list_leads), the same person, to save the found email on. Omit to only return it.
linkedinYesThe person's public LinkedIn profile URL.
workspaceIdNoA teammate's workspace you may manage: an active workspace ID from list_team_workspaces. Omit for your own workspace. Supply on every call for a teammate.

Output Schema

NameRequiredDescriptionDefault
idYesThis lookup's id, for support; not needed for any other tool.
leadNoOnly with leadId: whether the found email was saved on that lead.
personYesThe matched person; null when nobody matches (no Energy is spent then).
missingNoRequested extras that did not come back, each with a reason: not_found (no confident match, not proof none exists), energy_exhausted or unavailable (try later). Absent when everything requested came back.
energyLeftYesThe workspace's Energy after it; null when unreadable.
energyUsedYesEnergy this call spent; 0 for a cached lookup or no match.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / leadId / description
      Previous value: -"One of your own leads, the same person, to save the email on."New value: +"One of your own leads (from list_leads), the same person, to save the found email on. Omit to only return it."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "energyLeft": {
      +      "description": "The workspace's Energy after it; null when unreadable.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "energyUsed": {
      +      "description": "Energy this call spent; 0 for a cached lookup or no match.",
      +      "type": "number"
      +    },
      +    "id": {
      +      "description": "This lookup's id, for support; not needed for any other tool.",
      +      "type": "string"
      +    },
      +    "lead": {
      +      "additionalProperties": {},
      +      "description": "Only with leadId: whether the found email was saved on that lead.",
      +      "properties": {
      +        "email": {
      +          "description": "What happened to the found email: attached (saved on the lead), lead_has_email (lead already had one, kept), different_person (lead is someone else), email_on_another_lead (another lead already has it) or no_email (none found).",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "id": {
      +          "description": "The leadId sent.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "email"
      +      ],
      +      "type": "object"
      +    },
      +    "missing": {
      +      "additionalProperties": {},
      +      "description": "Requested extras that did not come back, each with a reason: not_found (no confident match, not proof none exists), energy_exhausted or unavailable (try later). Absent when everything requested came back.",
      +      "properties": {
      +        "mobile": {
      +          "description": "Why the requested mobile number is absent.",
      +          "type": "string"
      +        },
      +        "workEmail": {
      +          "description": "Why the requested work email is absent.",
      +          "type": "string"
      +        },
      +        "x": {
      +          "description": "Why the requested X account is absent.",
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "person": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": {},
      +          "properties": {
      +            "company": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": {},
      +                  "properties": {
      +                    "domain": {
      +                      "description": "Current employer's website domain, such as acme.com; null when only the name is known.",
      +                      "type": [
      +                        "string",
      +                        "null"
      +                      ]
      +                    },
      +                    "name": {
      +                      "description": "Current employer's name; null when only the domain is known.",
      +                      "type": [
      +                        "string",
      +                        "null"
      +                      ]
      +                    }
      +                  },
      +                  "required": [
      +                    "name",
      +                    "domain"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Current employer; null when unknown."
      +            },
      +            "connections": {
      +              "description": "Previously observed public follows involving this person (up to 100), only when there are any. Absence is not proof of no connections.",
      +              "items": {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "from": {
      +                    "description": "Profile URL of the account that follows.",
      +                    "type": "string"
      +                  },
      +                  "observedAt": {
      +                    "description": "When it was last seen (ISO time).",
      +                    "type": "string"
      +                  },
      +                  "sourceUrl": {
      +                    "description": "Public page where the follow was seen.",
      +                    "type": "string"
      +                  },
      +                  "to": {
      +                    "description": "Profile URL of the account followed.",
      +                    "type": "string"
      +                  },
      +                  "type": {
      +                    "description": "The relationship observed; follows is a one-way public follow, not friendship or employment.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "from",
      +                  "to",
      +                  "type",
      +                  "sourceUrl",
      +                  "observedAt"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "headline": {
      +              "description": "Their LinkedIn headline; null when not known.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "linkedin": {
      +              "description": "The person's public LinkedIn profile URL; use it as their identity in other tools.",
      +              "type": "string"
      +            },
      +            "location": {
      +              "description": "Where they are, as city, region and country; null when not known.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "mobile": {
      +              "description": "Verified mobile number when requested and found; null otherwise (missing.mobile says why).",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "name": {
      +              "description": "The person's full name; null when not known.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "title": {
      +              "description": "Their current job title; null when not known.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "workEmail": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": {},
      +                  "properties": {
      +                    "address": {
      +                      "description": "The verified email address.",
      +                      "type": "string"
      +                    },
      +                    "matchesCompanyDomain": {
      +                      "description": "Check before using: true when the address is on their company's domain, false when it is another domain (possibly personal or an old employer).",
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "required": [
      +                    "address",
      +                    "matchesCompanyDomain"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Verified work email when requested and found; null otherwise."
      +            },
      +            "x": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": {},
      +                  "properties": {
      +                    "evidence": {
      +                      "description": "Why the account is theirs: which of LinkedIn, company domain or company name its bio or link points at.",
      +                      "type": "string"
      +                    },
      +                    "handle": {
      +                      "description": "Their X username, without @.",
      +                      "type": "string"
      +                    },
      +                    "url": {
      +                      "description": "Link to their X profile.",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "handle",
      +                    "url",
      +                    "evidence"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Their X account when x was requested and matched; null otherwise."
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "title",
      +            "headline",
      +            "location",
      +            "company",
      +            "linkedin",
      +            "x",
      +            "workEmail",
      +            "mobile"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The matched person; null when nobody matches (no Energy is spent then)."
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "person",
      +    "energyUsed",
      +    "energyLeft"
      +  ],
      +  "type": "object"
      +}
  2. Added

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations it discloses cost mechanics (Energy spend, cached lookups free, energyUsed/energyLeft), the Energy prerequisite, the 'never overwritten' guarantee on existing emails, the no-lead/no-contact side-effect boundary, and a retry prohibition. The annotations already flag openWorldHint and non-destructive behavior, and the description adds the operational context they 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?

The core capability, the matchesCompanyDomain warning, and the cost note are front-loaded, and nearly every clause carries useful decision information. It is a dense, long-sentence block, though, and some output-field enumeration duplicates the output schema, which costs a little 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?

For a paid, open-world lookup with a mutation option, the definition covers cost, prerequisites, side effects, failure interpretation (not_found is not proof of absence), and retry policy. Nothing an agent needs in order to call it correctly or handle its results is missing.

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 100%, so the schema already defines all three parameters; the baseline would be 3. The description earns above baseline by explaining the outcome semantics of leadId — the lead.email status values (attached, lead_has_email, different_person, email_on_another_lead, no_email) and the no-overwrite rule — which is meaning the schema does not convey.

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 names a specific verb (find), resource (verified work email) and the exact input it operates on (a public LinkedIn profile URL). That is enough to tell it apart from find_people and enrich_person without opening either schema.

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?

It states when to add leadId versus omit it, what to do when only a name is available (ask the customer for the LinkedIn URL), an explicit exclusion ('Never automatically retry a timeout or error'), and a prerequisite ('Requires Energy enabled'). Conditions that select alternatives or forbid an action are spelled out rather than inferred.

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