Skip to main content
Glama

PumpGTM MCP server

List leads

list_leads
Read-onlyIdempotent

This workspace's leads with LinkedIn and sequence progress. stage is cumulative (reached this milestone or beyond); stageExact is the current position only. Count is exact even when the page is limited. Pass leadId to read one lead in full. To undo a removal whose ID was not saved, search with query without activity/stage filters, identify the correct person and sequence, then pass their removal.id to undo_remove_leads. removal is null when no current Undo event is available; do not add a replacement lead. A returned ID still requires Undo's normal safety checks. Returns count, returned and leads, or lead with leadId.

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

Input Schema

NameRequiredDescriptionDefault
pageNoZero-based page for personalFiles.
limitNoMost leads to return in this page, most recent activity first; count stays exact. Omit for 100.
queryNoText matched against the person's name, email, company and title; with personalFiles it also matches handles.
stageNoLeads that reached this milestone or went further, for example accepted also returns messaged and replied people. Omit for every stage.
leadIdNoRead just this one lead in full (from an earlier list_leads, add_leads or reply). Other filters are ignored.
sinceDaysNoOnly people who replied or booked a meeting within this many days. Omit or 0 for no time window.
bookedOnlyNoOnly people with a booked meeting.
sequenceIdNoOnly leads in this sequence, from list_sequences. Required with personalFiles.
stageExactNoLeads whose current position is exactly this stage. Use it for waiting rooms (queued, resolving) and exits (failed, skipped).
strategyIdNoOnly leads that came from this Play, by its ID from get_workspace or find_people.
engagedOnlyNoOnly people who replied or booked a meeting.
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.
personalFilesNoWith sequenceId: which file each person has for that sequence's per-person file step (for example their personalised video), 25 people a page: file name and size, and state waiting (no file yet), ready (attached, not sent), sent, or closed (not needed). query narrows by name, email, company or handle; waitingForInput=true lists only people still missing a file. Use it when the customer wants to check who got which file; appUrl opens the same table in the app, where each video can be watched.
waitingForInputNoOnly people the engine is holding because a LinkedIn message, email, X DM or Instagram DM step needs a value from the customer (see leads_waiting_for_input in get_workspace). Each returned lead lists channel, waitingFor keys (waitingForFiles names the ones that are a file for that person) and waitingSince.

Output Schema

NameRequiredDescriptionDefault
keyNoWith personalFiles: the file slot's key, used with set_lead_input.
leadNoWith leadId: that one lead in full.
pageNoWith personalFiles: the zero-based page returned.
countNoExact number of leads matching the filters, even when the page is limited.
leadsNoThe matching leads (stage, milestone dates, sequenceId, sender account, removal with its Undo ID or null), or with waitingForInput the held people with channel, waitingFor keys and waitingSince.
totalNoWith waitingForInput or personalFiles: everyone matching, across all pages.
appUrlNoWith personalFiles: link to the same table in the app, where each file can be opened.
peopleNoWith personalFiles: each person with their file (name and size, or null) and state.
hasMoreNoWith waitingForInput or personalFiles: whether more people exist beyond this page.
channelsNoWith personalFiles: the channels whose steps send this file.
pageSizeNoWith personalFiles: people per page.
returnedNoHow many leads or waiting people are in this page.
sequenceIdNoWith personalFiles: the sequence listed.
sequenceNameNoWith personalFiles: that sequence's name.
waitingTotalNoWith personalFiles: how many people still have no file.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changed
    • addedInput schema / properties / bookedOnly / description
      Added value: +"Only people with a booked meeting."
    • addedInput schema / properties / engagedOnly / description
      Added value: +"Only people who replied or booked a meeting."
    • addedInput schema / properties / leadId / description
      Added value: +"Read just this one lead in full (from an earlier list_leads, add_leads or reply). Other filters are ignored."
    • addedInput schema / properties / limit / description
      Added value: +"Most leads to return in this page, most recent activity first; count stays exact. Omit for 100."
    • addedInput schema / properties / query / description
      Added value: +"Text matched against the person's name, email, company and title; with personalFiles it also matches handles."
    • addedInput schema / properties / sequenceId / description
      Added value: +"Only leads in this sequence, from list_sequences. Required with personalFiles."
    • addedInput schema / properties / sinceDays / description
      Added value: +"Only people who replied or booked a meeting within this many days. Omit or 0 for no time window."
    • addedInput schema / properties / stage / description
      Added value: +"Leads that reached this milestone or went further, for example accepted also returns messaged and replied people. Omit for every stage."
    • addedInput schema / properties / stageExact / description
      Added value: +"Leads whose current position is exactly this stage. Use it for waiting rooms (queued, resolving) and exits (failed, skipped)."
    • addedInput schema / properties / strategyId / description
      Added value: +"Only leads that came from this Play, by its ID from get_workspace or find_people."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": {},
      +  "properties": {
      +    "appUrl": {
      +      "description": "With personalFiles: link to the same table in the app, where each file can be opened.",
      +      "type": "string"
      +    },
      +    "channels": {
      +      "description": "With personalFiles: the channels whose steps send this file.",
      +      "items": {},
      +      "type": "array"
      +    },
      +    "count": {
      +      "description": "Exact number of leads matching the filters, even when the page is limited.",
      +      "type": "number"
      +    },
      +    "hasMore": {
      +      "description": "With waitingForInput or personalFiles: whether more people exist beyond this page.",
      +      "type": "boolean"
      +    },
      +    "key": {
      +      "description": "With personalFiles: the file slot's key, used with set_lead_input.",
      +      "type": "string"
      +    },
      +    "lead": {
      +      "additionalProperties": {},
      +      "description": "With leadId: that one lead in full.",
      +      "properties": {
      +        "id": {
      +          "description": "The lead ID.",
      +          "type": "string"
      +        },
      +        "removal": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": {},
      +              "properties": {},
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "The current removal event (its id goes to undo_remove_leads), or null when no Undo is available."
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "removal"
      +      ],
      +      "type": "object"
      +    },
      +    "leads": {
      +      "description": "The matching leads (stage, milestone dates, sequenceId, sender account, removal with its Undo ID or null), or with waitingForInput the held people with channel, waitingFor keys and waitingSince.",
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "page": {
      +      "description": "With personalFiles: the zero-based page returned.",
      +      "type": "number"
      +    },
      +    "pageSize": {
      +      "description": "With personalFiles: people per page.",
      +      "type": "number"
      +    },
      +    "people": {
      +      "description": "With personalFiles: each person with their file (name and size, or null) and state.",
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "returned": {
      +      "description": "How many leads or waiting people are in this page.",
      +      "type": "number"
      +    },
      +    "sequenceId": {
      +      "description": "With personalFiles: the sequence listed.",
      +      "type": "string"
      +    },
      +    "sequenceName": {
      +      "description": "With personalFiles: that sequence's name.",
      +      "type": "string"
      +    },
      +    "total": {
      +      "description": "With waitingForInput or personalFiles: everyone matching, across all pages.",
      +      "type": "number"
      +    },
      +    "waitingTotal": {
      +      "description": "With personalFiles: how many people still have no file.",
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / waitingForInput / description
      Previous value: -"Only people the engine is holding because a LinkedIn message, email or X DM step needs a value from the customer (see leads_waiting_for_input in get_workspace). Each returned lead lists channel, waitingFor keys (waitingForFiles names the ones that are a file for that person) and waitingSince."New value: +"Only people the engine is holding because a LinkedIn message, email, X DM or Instagram DM step needs a value from the customer (see leads_waiting_for_input in get_workspace). Each returned lead lists channel, waitingFor keys (waitingForFiles names the ones that are a file for that person) and waitingSince."
  3. Changed2 schema fields changed
    • addedInput schema / properties / page
      Added value: +{
      +  "description": "Zero-based page for personalFiles.",
      +  "maximum": 400,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedInput schema / properties / personalFiles
      Added value: +{
      +  "description": "With sequenceId: which file each person has for that sequence's per-person file step (for example their personalised video), 25 people a page: file name and size, and state waiting (no file yet), ready (attached, not sent), sent, or closed (not needed). query narrows by name, email, company or handle; waitingForInput=true lists only people still missing a file. Use it when the customer wants to check who got which file; appUrl opens the same table in the app, where each video can be watched.",
      +  "type": "boolean"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / waitingForInput / description
      Previous value: -"Only people the engine is holding because a LinkedIn message, email or X DM step needs a value from the customer (see leads_waiting_for_input in get_workspace). Each returned lead lists channel, waitingFor keys and waitingSince."New value: +"Only people the engine is holding because a LinkedIn message, email or X DM step needs a value from the customer (see leads_waiting_for_input in get_workspace). Each returned lead lists channel, waitingFor keys (waitingForFiles names the ones that are a file for that person) and waitingSince."
  5. Changed1 schema field changed
    • changedInput schema / properties / waitingForInput / description
      Previous value: -"Only people the engine is holding because a message step needs a value from the customer (see leads_waiting_for_input in get_workspace). Each returned lead lists waitingFor keys and waitingSince."New value: +"Only people the engine is holding because a LinkedIn message, email or X DM step needs a value from the customer (see leads_waiting_for_input in get_workspace). Each returned lead lists channel, waitingFor keys and waitingSince."
  6. Changed1 schema field changed
    • changedInput schema / properties / workspaceId / description
      Previous value: -"Team owner only: an active workspace ID from list_team_workspaces. Omit for your own workspace. Supply on every call for a teammate."New value: +"A 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."
  7. Changed1 schema field changed
    • addedInput schema / properties / workspaceId
      Added value: +{
      +  "description": "Team owner only: an active workspace ID from list_team_workspaces. Omit for your own workspace. Supply on every call for a teammate.",
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +  "type": "string"
      +}
  8. First observed

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent and non-destructive, so the description's job is to add what they can't say. It does: count stays exact despite paging, removal is null when no Undo event is live, a returned ID still requires Undo's safety checks, and the agent must not add a replacement lead. That is real behavioral context beyond the annotations.

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

Conciseness3/5

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

The filtering semantics are front-loaded, which is good, but the middle section drifts into a multi-step undo_remove_leads recovery procedure that belongs with that sibling. With 14 parameters the length is defensible, yet several sentences compress two or three ideas each, making it denser than it needs to be.

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?

An output schema exists, so return values needn't be spelled out, and the description only briefly notes the shape (count, returned, leads, or lead). For a 14-parameter read tool it covers the modes, the paging guarantee and the removal edge case. The only surplus is the undo walkthrough, which is complete but arguably out of place.

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 description coverage is 100%, so all 14 parameters are already fully documented, including the stage/stageExact distinction the description restates. The description adds a little value by explaining the personalFiles+sequenceId coupling and the removal.id hand-off, but most of its parameter content duplicates the schema. Baseline 3 is appropriate.

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 the resource ('This workspace's leads with LinkedIn and sequence progress') and later clarifies the two modes: a filtered list, or a single full lead via leadId. The verb 'list' is implicit rather than stated, but an agent can tell this apart from write-side siblings like add_leads or move_leads.

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 gives concrete routing: pass leadId to read one lead in full, use stage for cumulative milestones and stageExact for waiting rooms/exits, use personalFiles with sequenceId to check file delivery. The undo-recovery path (search with query, identify the person, pass removal.id to undo_remove_leads) is explicit too. It lacks an up-front 'use this when' framing and doesn't contrast with list_pending_replies or list_sequences.

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.