Skip to main content
Glama

Research a List of People in One Call

li_research_profiles

Everything needed to judge and personalise a list of up to 500 people, merged into ONE compact row per person in your order: pipeline (every campaign they are already in on the accounts you can see, the same memberships li_check_targets reports: account, campaign, campaign status, connection and message status, outcome, hasInbound), profile (name, headline, role, company, location, timezone), company (their current employer from its LinkedIn company page: name, domain, industry, size) and posts (latest posts: url, postedAt, isRepost, reactable, a 160-character textPreview). Default include: pipeline, profile, company; posts are only read when asked for. COST: the same lookups as li_enrich_profiles and li_fetch_posts, from the same shared pool: 1 per profile bought (the employer comes free with it), 1 per person whose posts are read. FREE: a stored profile of ANY age for someone already in your pipeline, one under 30 days for anyone else, and posts read in the last 3 days; refresh=true buys everything again. Each row's profile.status says bought or reused, with fetchedAt, and credits totals what was charged. reactable: false marks a post the engage-before-invite step cannot use (li_ingest_prospects would refuse it as engagePostUrl). LONG LISTS: the call waits about 20 seconds; a run still going comes back as a jobId, read with li_job_result({ jobId, waitMs, offset }), 50 rows a page with nextOffset. A run cut off by a server restart reads interrupted: run it again, and what was already bought comes back free. pipeline.unreadable, and a status of failed or pending, mean NOT KNOWN, never "none". A URL that is not a profile (invalid_url) or is only a colleague's prospect (refused) is skipped and costs nothing. estimateOnly=true previews the charge for free. Opens no browser.

Input Schema

NameRequiredDescriptionDefault
includeNoWhich sections to return: pipeline (free), profile, company (bought together: 1 lookup per person not stored), posts (1 more lookup per person not read recently). Default: pipeline, profile, company.
refreshNoBuy every profile and read every person's posts again, ignoring what is stored. Costs a lookup per person per paid section.
sessionIdNoAccount id from li_list_accounts. Needed (or sessionLabel) when you have more than one account; never guessed.
profileUrlsYesLinkedIn profile URLs, up to 500. Duplicates (two spellings of one person) are researched once. Only these URLs reach the data provider.
estimateOnlyNoPreview: how many profiles are stored (free), how many would be bought, how many posts would be read, and what that charges. Reads your pipeline, looks nothing up, charges nothing.
sessionLabelNoAccount by label, LinkedIn name, profile slug or member id (li_list_accounts). Needed (or sessionId) when you have more than one account; never guessed.
postsSinceDaysNoWith posts: only posts from the last N days. Costs the same; a person with nothing that recent reads no_posts. Default: no age limit.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, openWorldHint=true): it discloses the credit model (1 per profile bought, 1 per posts read), free reuse windows (any age in-pipeline, 30 days otherwise, 3 days for posts), the bought/reused status and fetchedAt fields, long-run jobId/interrupted behaviour, and error semantics (unreadable=NOT KNOWN, invalid_url/refused skipped free). This is unusually rich behavioural disclosure consistent with readOnlyHint=false.

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?

Front-loads the outcome (one compact row per person) before cost and edge cases, and each sentence carries operational weight. It is dense and long for a single paragraph, with some overlap between the cost sentences and the schema's own coverage, which keeps it from a perfect score.

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?

With no output schema, the description fully compensates: it describes each row section, the status/fetchedAt/credits fields, jobId pagination via li_job_result, and every documented failure mode. An agent has everything needed to call and interpret results 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 description coverage is 100%, so the baseline is 3, but the prose adds cross-parameter meaning the schema lacks: the coupling of include/refresh/postsSinceDays to distinct charges, and the fact that posts are read only on request. Most individual parameter mechanics are duplicated from the schema, so it stops short of a 5.

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 precise verb+resource+scope: 'Everything needed to judge and personalise a list of up to 500 people, merged into ONE compact row per person.' It enumerates the exact sections returned and explicitly names the sibling tools it mirrors (li_enrich_profiles, li_fetch_posts), so an agent can distinguish it from them without opening another schema.

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 context: default include is pipeline/profile/company, posts only when asked, estimateOnly previews for free, and refresh matters only when you want to re-buy. However, it never states the routing rule explicitly (e.g. 'use this instead of li_enrich_profiles when you also need pipeline/posts'), leaving the agent to infer selection from the cost comparison.

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